@hot-updater/cloudflare 1.0.0-rc.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/iac/index.cjs +1 -1
- package/dist/iac/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/worker/index.cjs +1 -1
- package/dist/worker/index.mjs +1 -1
- package/package.json +5 -5
- package/src/d1Implementation.ts +1 -1
- package/src/d1Rows.spec.ts +3 -3
- package/src/worker/d1Database.spec.ts +1 -1
- package/worker/dist/README.md +1 -1
- package/worker/dist/index.js +319 -319
- package/worker/dist/index.js.map +4 -4
- package/worker/migrations/0001_hot-updater_1.0.0.sql +9 -1
- package/worker/src/databaseMigration.integration.spec.ts +39 -23
- package/worker/migrations/0002_hot-updater_artifact_byte_sizes.sql +0 -11
package/worker/dist/index.js.map
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../packages/server/dist/package.mjs", "../../../../packages/server/dist/version.mjs", "../../../../packages/server/dist/handlerVersionRoutes.mjs", "../../../../packages/server/dist/
|
|
3
|
+
"sources": ["../../../../packages/server/dist/package.mjs", "../../../../packages/server/dist/version.mjs", "../../../../packages/server/dist/handlerVersionRoutes.mjs", "../../../../packages/server/dist/handlerErrors.mjs", "../../../../packages/server/dist/handlerParameters.mjs", "../../../../packages/server/dist/handlerBundleRoutes.mjs", "../../../plugin-core/dist/calculatePagination.mjs", "../../../plugin-core/dist/contentAddressedAssets.mjs", "../../../plugin-core/dist/createStorageKeyBuilder.mjs", "../../../plugin-core/dist/parseStorageUri.mjs", "../../../plugin-core/dist/assetStorageLayout.mjs", "../../../plugin-core/dist/databasePluginCrudValidationErrors.mjs", "../../../plugin-core/dist/databaseJsonValue.mjs", "../../../../packages/core/dist/index.mjs", "../../../plugin-core/dist/uuidv7.mjs", "../../../plugin-core/dist/types/databaseFields.mjs", "../../../plugin-core/dist/databasePluginCrudValidationFields.mjs", "../../../plugin-core/dist/databasePluginCrudValidationRows.mjs", "../../../plugin-core/dist/databasePluginCrudValidationMutations.mjs", "../../../plugin-core/dist/databasePluginCrudValidationQueries.mjs", "../../../plugin-core/dist/databasePluginCrud.mjs", "../../../plugin-core/dist/databasePluginTransaction.mjs", "../../../plugin-core/dist/createDatabasePlugin.mjs", "../../../plugin-core/dist/createStoragePlugin.mjs", "../../../plugin-core/dist/databaseMetadata.mjs", "../../../plugin-core/dist/databaseRows.mjs", "../../../plugin-core/dist/databaseClientUpdates.mjs", "../../../plugin-core/dist/databaseClientReads.mjs", "../../../plugin-core/dist/databaseClient.mjs", "../../../plugin-core/dist/node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs", "../../../plugin-core/dist/releaseCatalogCompiler.mjs", "../../../plugin-core/dist/releaseCatalogMutation.mjs", "../../../plugin-core/dist/releaseManagement.mjs", "../../../plugin-core/dist/storageDownloadPath.mjs", "../../../../packages/server/dist/handlerReleaseCatalogRoutes.mjs", "../../../../packages/server/dist/handlerReleaseManagementRoutes.mjs", "../../../../packages/server/dist/insights/errors.mjs", "../../../../packages/server/dist/insights/eventInput.mjs", "../../../../packages/server/dist/insights/queryInput.mjs", "../../../../packages/server/dist/insights/routes.mjs", "../../../../packages/server/dist/internalRouter.mjs", "../../../../packages/server/dist/handler.mjs", "../../../../packages/server/dist/insights/bounded/activeOverview.mjs", "../../../../packages/server/dist/insights/bounded/scan.mjs", "../../../../packages/server/dist/insights/bounded/installationSearch.mjs", "../../../../packages/server/dist/insights/bounded/persistence.mjs", "../../../../packages/server/dist/insights/bounded/provider.mjs", "../../../../packages/server/dist/apiKeys.mjs", "../../../../packages/server/dist/db/updateArtifacts.mjs", "../../../../packages/server/dist/db/releaseCatalog.mjs", "../../../../packages/server/dist/db/databasePluginCore.mjs", "../../../../packages/server/dist/schema/types.mjs", "../../../../packages/server/dist/db/fixedMigratorShared.mjs", "../../../../packages/server/dist/db/schemaReadiness.mjs", "../../../../packages/server/dist/db/types.mjs", "../../../../packages/server/dist/storageAccess.mjs", "../../../../packages/server/dist/createHotUpdaterCore.mjs", "../src/index.ts", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/compose.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/request/constants.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/utils/buffer.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/utils/body.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/utils/url.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/request.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/utils/html.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/context.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/utils/constants.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/hono-base.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router/reg-exp-router/matcher.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router/reg-exp-router/node.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router/reg-exp-router/router.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router/smart-router/router.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router/trie-router/node.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/router/trie-router/router.js", "../../../../node_modules/.pnpm/hono@4.12.34/node_modules/hono/dist/hono.js", "../../src/d1Rows.ts", "../../src/d1Sql.ts", "../../src/d1Query.ts", "../../src/d1Implementation.ts", "../../src/worker/d1Database.ts", "../../src/r2WorkerStorage.ts"],
|
|
4
4
|
"sourceRoot": "./worker/dist",
|
|
5
|
-
"sourcesContent": ["//#region package.json\nvar version = \"1.0.0-rc.0\";\n//#endregion\nexport { version };\n", "import { version } from \"./package.mjs\";\n//#region src/version.ts\nconst HOT_UPDATER_SERVER_VERSION = version;\n//#endregion\nexport { HOT_UPDATER_SERVER_VERSION };\n", "import { HOT_UPDATER_SERVER_VERSION } from \"./version.mjs\";\n//#region src/handlerVersionRoutes.ts\nconst HOT_UPDATER_INFRASTRUCTURE_GENERATION = 1;\nconst createVersionRouteHandlers = () => ({ version: async () => Response.json({\n\tinfrastructureGeneration: 1,\n\tversion: HOT_UPDATER_SERVER_VERSION\n}) });\n//#endregion\nexport { HOT_UPDATER_INFRASTRUCTURE_GENERATION, createVersionRouteHandlers };\n", "//#region src/analytics/errors.ts\nvar AnalyticsScanLimitExceededError = class extends Error {\n\tconstructor(limit) {\n\t\tsuper(`Analytics event scan exceeded ${limit} rows.`);\n\t\tthis.limit = limit;\n\t\tthis.name = \"AnalyticsScanLimitExceededError\";\n\t}\n};\nvar AnalyticsBadRequestError = class extends Error {\n\tname = \"AnalyticsBadRequestError\";\n};\nvar AnalyticsPayloadTooLargeError = class extends Error {\n\tname = \"AnalyticsPayloadTooLargeError\";\n\tconstructor(maximumBytes) {\n\t\tsuper(`Event payload exceeds ${maximumBytes} bytes`);\n\t\tthis.maximumBytes = maximumBytes;\n\t}\n};\n//#endregion\nexport { AnalyticsBadRequestError, AnalyticsPayloadTooLargeError, AnalyticsScanLimitExceededError };\n", "import { AnalyticsBadRequestError, AnalyticsPayloadTooLargeError } from \"./errors.mjs\";\n//#region src/analytics/eventInput.ts\nconst MAX_EVENT_STRING_LENGTH = 1024;\nconst EVENT_BODY_MAX_BYTES = 16 * 1024;\nconst eventKeys = new Set([\n\t\"type\",\n\t\"installId\",\n\t\"toBundleId\",\n\t\"userId\",\n\t\"username\",\n\t\"platform\",\n\t\"appVersion\",\n\t\"channel\",\n\t\"cohort\",\n\t\"fingerprintHash\",\n\t\"fromBundleId\",\n\t\"fromReleaseId\",\n\t\"toReleaseId\",\n\t\"updateStrategy\",\n\t\"sdkVersion\"\n]);\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction requireStringField(payload, key) {\n\tconst value = payload[key];\n\tif (typeof value !== \"string\" || value.length === 0 || value.length > MAX_EVENT_STRING_LENGTH) throw new AnalyticsBadRequestError(`Invalid event field: ${key}`);\n\treturn value;\n}\nfunction requireNullableStringField(payload, key) {\n\tif (payload[key] === null) return null;\n\treturn requireStringField(payload, key);\n}\nasync function readBoundedText(request) {\n\tconst contentLength = request.headers.get(\"content-length\");\n\tconst declaredByteLength = Number(contentLength);\n\tif (contentLength !== null && Number.isSafeInteger(declaredByteLength) && declaredByteLength > 16384) throw new AnalyticsPayloadTooLargeError(EVENT_BODY_MAX_BYTES);\n\tif (request.body === null) return \"\";\n\tconst reader = request.body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet byteLength = 0;\n\tlet text = \"\";\n\twhile (true) {\n\t\tconst result = await reader.read();\n\t\tif (result.done) break;\n\t\tbyteLength += result.value.byteLength;\n\t\tif (byteLength > 16384) {\n\t\t\tawait reader.cancel();\n\t\t\tthrow new AnalyticsPayloadTooLargeError(EVENT_BODY_MAX_BYTES);\n\t\t}\n\t\ttext += decoder.decode(result.value, { stream: true });\n\t}\n\treturn text + decoder.decode();\n}\nasync function parseJson(request) {\n\tconst text = await readBoundedText(request);\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) throw new AnalyticsBadRequestError(\"Invalid event payload\");\n\t\tthrow error;\n\t}\n}\nfunction requireEvent(payload) {\n\tif (!isRecord(payload) || Object.keys(payload).some((key) => !eventKeys.has(key))) throw new AnalyticsBadRequestError(\"Invalid event payload\");\n\tconst platform = requireStringField(payload, \"platform\");\n\tif (platform !== \"ios\" && platform !== \"android\") throw new AnalyticsBadRequestError(\"Invalid event field: platform\");\n\tconst base = {\n\t\tinstallId: requireStringField(payload, \"installId\"),\n\t\ttoBundleId: requireStringField(payload, \"toBundleId\"),\n\t\t...payload.userId === void 0 ? {} : { userId: requireStringField(payload, \"userId\") },\n\t\t...payload.username === void 0 ? {} : { username: requireStringField(payload, \"username\") },\n\t\tplatform,\n\t\tappVersion: requireStringField(payload, \"appVersion\"),\n\t\tchannel: requireStringField(payload, \"channel\"),\n\t\tcohort: requireStringField(payload, \"cohort\"),\n\t\tfingerprintHash: requireNullableStringField(payload, \"fingerprintHash\"),\n\t\tsdkVersion: payload.sdkVersion === void 0 ? null : requireNullableStringField(payload, \"sdkVersion\"),\n\t\tfromReleaseId: requireNullableStringField(payload, \"fromReleaseId\"),\n\t\ttoReleaseId: requireNullableStringField(payload, \"toReleaseId\")\n\t};\n\tconst type = requireStringField(payload, \"type\");\n\tswitch (type) {\n\t\tcase \"UPDATE_APPLIED\":\n\t\tcase \"RECOVERED\":\n\t\tcase \"RELEASE_ADOPTED\": {\n\t\t\tconst updateStrategy = requireStringField(payload, \"updateStrategy\");\n\t\t\tif (updateStrategy !== \"fingerprint\" && updateStrategy !== \"appVersion\") throw new AnalyticsBadRequestError(\"Invalid event field: updateStrategy\");\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype,\n\t\t\t\tfromBundleId: requireStringField(payload, \"fromBundleId\"),\n\t\t\t\tupdateStrategy\n\t\t\t};\n\t\t}\n\t\tcase \"UNCHANGED\":\n\t\t\tif (payload.fromBundleId !== null || payload.updateStrategy !== null) throw new AnalyticsBadRequestError(\"Invalid unchanged event shape\");\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype,\n\t\t\t\tfromBundleId: null,\n\t\t\t\tupdateStrategy: null\n\t\t\t};\n\t\tdefault: throw new AnalyticsBadRequestError(\"Invalid event field: type\");\n\t}\n}\nasync function parseBundleEventRequest(request) {\n\treturn requireEvent(await parseJson(request));\n}\n//#endregion\nexport { parseBundleEventRequest };\n", "import { AnalyticsBadRequestError } from \"./errors.mjs\";\n//#region src/analytics/queryInput.ts\nconst EVENT_LIST_BOUNDS = {\n\tdefaultValue: 50,\n\tmaximum: 100,\n\tminimum: 1\n};\nconst EVENT_LIST_OFFSET_BOUNDS = {\n\tdefaultValue: 0,\n\tminimum: 0\n};\nconst MAX_USER_ID_LENGTH = 1024;\nfunction parseInteger(url, key, bounds) {\n\tconst value = url.searchParams.get(key);\n\tif (value === null) return bounds.defaultValue;\n\tconst parsed = Number(value);\n\tif (!Number.isSafeInteger(parsed) || parsed < bounds.minimum || bounds.maximum !== void 0 && parsed > bounds.maximum) throw new AnalyticsBadRequestError(`Invalid '${key}' query parameter.`);\n\treturn parsed;\n}\nconst parsePagination = (request) => {\n\tconst url = new URL(request.url);\n\treturn {\n\t\tlimit: parseInteger(url, \"limit\", EVENT_LIST_BOUNDS),\n\t\toffset: parseInteger(url, \"offset\", EVENT_LIST_OFFSET_BOUNDS)\n\t};\n};\nconst parseAnalyticsQuery = (request) => {\n\tconst window = new URL(request.url).searchParams.get(\"window\") ?? \"24h\";\n\tif (window !== \"24h\" && window !== \"7d\" && window !== \"30d\" && window !== \"all\") throw new AnalyticsBadRequestError(\"Invalid 'window' query parameter.\");\n\treturn {\n\t\t...parsePagination(request),\n\t\twindow\n\t};\n};\nconst parseActiveInstallationInput = (request) => {\n\tconst url = new URL(request.url);\n\tconst windows = url.searchParams.getAll(\"window\");\n\tif (windows.length > 1) throw new AnalyticsBadRequestError(\"Duplicate 'window' query parameter.\");\n\tconst window = windows[0] ?? \"30d\";\n\tif (window !== \"24h\" && window !== \"7d\" && window !== \"30d\") throw new AnalyticsBadRequestError(\"Invalid 'window' query parameter.\");\n\tconst userIds = url.searchParams.getAll(\"userId\");\n\tif (userIds.length > 1) throw new AnalyticsBadRequestError(\"Duplicate 'userId' query parameter.\");\n\tconst userId = userIds[0];\n\tif (userId !== void 0 && (userId.length === 0 || userId.length > MAX_USER_ID_LENGTH)) throw new AnalyticsBadRequestError(\"Invalid 'userId' query parameter.\");\n\treturn userId === void 0 ? { window } : {\n\t\twindow,\n\t\tuserId\n\t};\n};\nconst parseSearchInput = (request) => ({\n\t...parsePagination(request),\n\tquery: new URL(request.url).searchParams.get(\"query\")?.trim() ?? \"\"\n});\n//#endregion\nexport { parseActiveInstallationInput, parseAnalyticsQuery, parsePagination, parseSearchInput };\n", "import { AnalyticsBadRequestError, AnalyticsPayloadTooLargeError, AnalyticsScanLimitExceededError } from \"./errors.mjs\";\nimport { parseBundleEventRequest } from \"./eventInput.mjs\";\nimport { parseActiveInstallationInput, parseAnalyticsQuery, parsePagination, parseSearchInput } from \"./queryInput.mjs\";\n//#region src/analytics/routes.ts\nconst json = (body, status) => Response.json(body, {\n\theaders: { \"cache-control\": \"private, no-store\" },\n\tstatus\n});\nconst requireParam = (params, key) => {\n\tconst value = params[key];\n\tif (value === void 0 || value.length === 0) throw new AnalyticsBadRequestError(`Missing route parameter: ${key}`);\n\treturn value;\n};\nconst run = async (operation) => {\n\ttry {\n\t\treturn await operation();\n\t} catch (error) {\n\t\tif (error instanceof AnalyticsBadRequestError) return json({ error: error.message }, 400);\n\t\tif (error instanceof AnalyticsPayloadTooLargeError) return json({ error: error.message }, 413);\n\t\tif (error instanceof AnalyticsScanLimitExceededError) return json({ error: {\n\t\t\tcode: \"ANALYTICS_SCAN_LIMIT_EXCEEDED\",\n\t\t\tlimit: error.limit\n\t\t} }, 503);\n\t\tthrow error;\n\t}\n};\nconst query = (operation) => run(async () => json(await operation(), 200));\nconst createAnalyticsRouteHandlers = (provider) => ({\n\tappendBundleEvent: async (_params, request) => run(async () => {\n\t\tawait provider.appendBundleEvent(await parseBundleEventRequest(request));\n\t\treturn new Response(null, { status: 204 });\n\t}),\n\tgetBundleEventSummary: (params) => query(() => provider.getBundleEventSummary(requireParam(params, \"id\"))),\n\tgetBundleEventAnalytics: (params, request) => query(() => {\n\t\tconst input = parseAnalyticsQuery(request);\n\t\treturn provider.getBundleEventAnalytics(requireParam(params, \"id\"), input.window, input.limit, input.offset);\n\t}),\n\tgetBundleEventOverview: () => query(() => provider.getBundleEventOverview()),\n\tgetActiveInstallationOverview: (_params, request) => query(() => provider.getActiveInstallationOverview(parseActiveInstallationInput(request))),\n\tsearchInstallations: (_params, request) => query(() => {\n\t\tconst input = parseSearchInput(request);\n\t\treturn provider.searchInstallations(input.query, input.limit, input.offset);\n\t}),\n\tgetInstallationHistory: (params, request) => query(() => {\n\t\tconst input = parsePagination(request);\n\t\treturn provider.getInstallationHistory(requireParam(params, \"installId\"), input.limit, input.offset);\n\t})\n});\nconst registerAnalyticsClientRoutes = (add) => {\n\tadd(\"POST\", \"/events\", \"appendBundleEvent\");\n};\nconst registerAnalyticsAdminRoutes = (add) => {\n\tadd(\"GET\", \"/bundles/:id/events/summary\", \"getBundleEventSummary\");\n\tadd(\"GET\", \"/bundles/:id/events/analytics\", \"getBundleEventAnalytics\");\n\tadd(\"GET\", \"/installations/overview\", \"getBundleEventOverview\");\n\tadd(\"GET\", \"/installations/active\", \"getActiveInstallationOverview\");\n\tadd(\"GET\", \"/installations\", \"searchInstallations\");\n\tadd(\"GET\", \"/installations/:installId/events\", \"getInstallationHistory\");\n};\n//#endregion\nexport { createAnalyticsRouteHandlers, registerAnalyticsAdminRoutes, registerAnalyticsClientRoutes };\n", "//#region src/handlerErrors.ts\nvar HandlerBadRequestError = class extends Error {\n\tname = \"HandlerBadRequestError\";\n\tconstructor(message) {\n\t\tsuper(message);\n\t}\n};\n//#endregion\nexport { HandlerBadRequestError };\n", "import { HandlerBadRequestError } from \"./handlerErrors.mjs\";\n//#region src/handlerParameters.ts\nconst decodeMaybe = (value) => {\n\tif (value === void 0) return void 0;\n\ttry {\n\t\treturn decodeURIComponent(value);\n\t} catch {\n\t\treturn value;\n\t}\n};\nconst isPlatform = (value) => value === \"ios\" || value === \"android\";\nconst requireRouteParam = (params, key) => {\n\tconst value = params[key];\n\tif (!value) throw new HandlerBadRequestError(`Missing route parameter: ${key}`);\n\treturn value;\n};\nconst requirePlatformParam = (params) => {\n\tconst platform = requireRouteParam(params, \"platform\");\n\tif (!isPlatform(platform)) throw new HandlerBadRequestError(`Invalid platform: ${platform}. Expected 'ios' or 'android'.`);\n\treturn platform;\n};\nconst parseStringArraySearchParam = (url, key) => {\n\tconst values = url.searchParams.getAll(key);\n\treturn values.length > 0 ? values : void 0;\n};\nconst parsePositiveIntegerSearchParam = (url, key, bounds) => {\n\tconst value = url.searchParams.get(key);\n\tif (value === null) return bounds.defaultValue;\n\tconst parsed = Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > bounds.maxValue) throw new HandlerBadRequestError(`The '${key}' query parameter must be a positive integer between 1 and ${bounds.maxValue}.`);\n\treturn parsed;\n};\n//#endregion\nexport { decodeMaybe, isPlatform, parsePositiveIntegerSearchParam, parseStringArraySearchParam, requirePlatformParam, requireRouteParam };\n", "import { HandlerBadRequestError } from \"./handlerErrors.mjs\";\nimport { decodeMaybe, isPlatform, parsePositiveIntegerSearchParam, parseStringArraySearchParam, requireRouteParam } from \"./handlerParameters.mjs\";\n//#region src/handlerBundleRoutes.ts\nconst BUNDLE_LIST_BOUNDS = {\n\tdefaultValue: 50,\n\tmaxValue: 100\n};\nconst isChannelText = (value) => {\n\tif (typeof value !== \"string\" || value.length === 0) return false;\n\tlet codePoints = 0;\n\tfor (const _codePoint of value) {\n\t\tcodePoints += 1;\n\t\tif (codePoints > 255) return false;\n\t}\n\treturn true;\n};\nconst requireChannelInsertInput = (value) => {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value) || !(\"row\" in value) || !value.row || typeof value.row !== \"object\" || Array.isArray(value.row) || !(\"id\" in value.row) || !isChannelText(value.row.id) || !(\"name\" in value.row) || !isChannelText(value.row.name) || !(\"onConflict\" in value) || value.onConflict !== \"returnExisting\") throw new HandlerBadRequestError(\"Invalid Channel insert payload\");\n\treturn {\n\t\trow: {\n\t\t\tid: value.row.id,\n\t\t\tname: value.row.name\n\t\t},\n\t\tonConflict: value.onConflict\n\t};\n};\nconst requireBundlePatchPayload = (payload, bundleId) => {\n\tif (!payload || typeof payload !== \"object\" || Array.isArray(payload)) throw new HandlerBadRequestError(\"Invalid bundle payload\");\n\tconst bundlePatch = payload;\n\tif (bundlePatch.id !== void 0 && bundlePatch.id !== bundleId) throw new HandlerBadRequestError(\"Bundle id mismatch\");\n\tconst { id: _ignoredId, ...rest } = bundlePatch;\n\treturn rest;\n};\nconst createBundleRouteHandlers = () => ({\n\tgetBundle: async (params, _request, api) => {\n\t\tconst bundle = await api.getBundleById(requireRouteParam(params, \"id\"));\n\t\tif (!bundle) return new Response(JSON.stringify({ error: \"Bundle not found\" }), {\n\t\t\tstatus: 404,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t\treturn new Response(JSON.stringify(bundle), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tgetBundles: async (_params, request, api) => {\n\t\tconst url = new URL(request.url);\n\t\tconst platform = url.searchParams.get(\"platform\");\n\t\tconst limit = parsePositiveIntegerSearchParam(url, \"limit\", BUNDLE_LIST_BOUNDS);\n\t\tconst pageParam = url.searchParams.get(\"page\");\n\t\tconst offset = url.searchParams.get(\"offset\");\n\t\tconst after = url.searchParams.get(\"after\") ?? void 0;\n\t\tconst before = url.searchParams.get(\"before\") ?? void 0;\n\t\tconst orderDirection = url.searchParams.get(\"orderDirection\");\n\t\tconst idEq = url.searchParams.get(\"idEq\") ?? void 0;\n\t\tconst idGt = url.searchParams.get(\"idGt\") ?? void 0;\n\t\tconst idGte = url.searchParams.get(\"idGte\") ?? void 0;\n\t\tconst idLt = url.searchParams.get(\"idLt\") ?? void 0;\n\t\tconst idLte = url.searchParams.get(\"idLte\") ?? void 0;\n\t\tconst idIn = parseStringArraySearchParam(url, \"idIn\");\n\t\tconst page = pageParam === null ? void 0 : Number.isSafeInteger(Number(pageParam)) && Number(pageParam) > 0 && Number.isSafeInteger((Number(pageParam) - 1) * limit) ? Number(pageParam) : null;\n\t\tif (offset !== null) throw new HandlerBadRequestError(\"The 'offset' query parameter has been removed. Use 'after' or 'before' cursor pagination instead.\");\n\t\tif (page === null) throw new HandlerBadRequestError(\"The 'page' query parameter must be a positive integer.\");\n\t\tif (after !== void 0 && before !== void 0) throw new HandlerBadRequestError(\"The 'after' and 'before' query parameters cannot be combined.\");\n\t\tif (page !== void 0 && (after !== void 0 || before !== void 0)) throw new HandlerBadRequestError(\"The 'page' query parameter cannot be combined with 'after' or 'before'.\");\n\t\tif (platform !== null && !isPlatform(platform)) throw new HandlerBadRequestError(`Invalid platform: ${platform}. Expected 'ios' or 'android'.`);\n\t\tif (orderDirection !== null && orderDirection !== \"asc\" && orderDirection !== \"desc\") throw new HandlerBadRequestError(\"The 'orderDirection' query parameter must be 'asc' or 'desc'.\");\n\t\tconst pagination = page === void 0 ? {\n\t\t\tcursor: after !== void 0 ? { after } : before !== void 0 ? { before } : void 0,\n\t\t\tpage: void 0\n\t\t} : {\n\t\t\tcursor: void 0,\n\t\t\tpage\n\t\t};\n\t\tconst result = await api.getBundles({\n\t\t\twhere: {\n\t\t\t\t...platform && { platform },\n\t\t\t\t...idEq || idGt || idGte || idLt || idLte || idIn?.length ? { id: {\n\t\t\t\t\t...idEq && { eq: idEq },\n\t\t\t\t\t...idGt && { gt: idGt },\n\t\t\t\t\t...idGte && { gte: idGte },\n\t\t\t\t\t...idLt && { lt: idLt },\n\t\t\t\t\t...idLte && { lte: idLte },\n\t\t\t\t\t...idIn?.length && { in: idIn }\n\t\t\t\t} } : {}\n\t\t\t},\n\t\t\tlimit,\n\t\t\t...pagination,\n\t\t\t...orderDirection && { orderBy: {\n\t\t\t\tfield: \"id\",\n\t\t\t\tdirection: orderDirection\n\t\t\t} }\n\t\t});\n\t\treturn new Response(JSON.stringify(result), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tcreateBundles: async (_params, request, api) => {\n\t\tconst body = await request.json();\n\t\tconst bundles = Array.isArray(body) ? body : [body];\n\t\tif (api.insertBundles) await api.insertBundles(bundles);\n\t\telse {\n\t\t\tif (bundles.length > 1) throw new HandlerBadRequestError(\"This server does not support atomic bundle batches\");\n\t\t\tconst bundle = bundles[0];\n\t\t\tif (bundle !== void 0) await api.insertBundle(bundle);\n\t\t}\n\t\treturn new Response(JSON.stringify({ success: true }), {\n\t\t\tstatus: 201,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tupdateBundle: async (params, request, api) => {\n\t\tconst bundleId = requireRouteParam(params, \"id\");\n\t\tconst body = await request.json();\n\t\tconst payload = Array.isArray(body) ? body[0] : body;\n\t\tawait api.updateBundleById(bundleId, requireBundlePatchPayload(payload, bundleId));\n\t\treturn new Response(JSON.stringify({ success: true }), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tdeleteBundle: async (params, _request, api) => {\n\t\tawait api.deleteBundleById(requireRouteParam(params, \"id\"));\n\t\treturn new Response(JSON.stringify({ success: true }), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tgetChannels: async (_params, _request, api) => {\n\t\tconst response = { data: { channels: await api.getChannels() } };\n\t\treturn new Response(JSON.stringify(response), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tcreateChannel: async (_params, request, api) => {\n\t\tconst result = await api.insertChannel(requireChannelInsertInput(await request.json()));\n\t\treturn new Response(JSON.stringify({ data: result }), {\n\t\t\tstatus: result.inserted ? 201 : 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tdeleteChannel: async (params, _request, api) => {\n\t\tconst result = await api.deleteChannel({ id: decodeMaybe(requireRouteParam(params, \"id\")) ?? \"\" });\n\t\tif (result.deleted) return new Response(null, { status: 204 });\n\t\tconst status = result.reason === \"not_found\" ? 404 : 409;\n\t\treturn new Response(JSON.stringify({ data: result }), {\n\t\t\tstatus,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t}\n});\n//#endregion\nexport { createBundleRouteHandlers };\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", "//#region src/contentAddressedAssets.ts\nconst CONTENT_ADDRESSED_ASSET_PREFIX = \"assets\";\nconst SHA256_FILE_HASH_RE = /^[0-9a-f]{64}$/;\nconst isContentAddressedAssetFileHash = (value) => {\n\treturn typeof value === \"string\" && SHA256_FILE_HASH_RE.test(value);\n};\nconst getContentAddressedAssetStoragePath = ({ assetPath, fileHash }) => {\n\tconst extension = assetPath.endsWith(\".br\") ? \".br\" : assetPath.includes(\".\") ? `.${assetPath.split(\".\").pop()}` : \"\";\n\treturn `sha256/${fileHash.slice(0, 2)}/${fileHash}${extension}`;\n};\n//#endregion\nexport { CONTENT_ADDRESSED_ASSET_PREFIX, getContentAddressedAssetStoragePath, isContentAddressedAssetFileHash };\n", "//#region src/createStorageKeyBuilder.ts\nconst normalizeStorageKeyParts = (values) => {\n\tif (values.some((value) => value.includes(\"\\\\\"))) throw new Error(\"Storage keys must use '/' as the hierarchy separator.\");\n\tconst segments = values.flatMap((value) => value.split(\"/\").filter(Boolean));\n\tif (segments.some((segment) => segment === \".\" || segment === \"..\")) throw new Error(\"Storage key segments must not be '.' or '..'.\");\n\treturn segments;\n};\nconst createStorageKeyBuilder = (basePath) => {\n\tconst baseSegments = normalizeStorageKeyParts([basePath ?? \"\"]);\n\treturn (...args) => [...baseSegments, ...normalizeStorageKeyParts(args)].join(\"/\");\n};\n//#endregion\nexport { createStorageKeyBuilder };\n", "//#region src/parseStorageUri.ts\nconst PROTOCOL_PATTERN = /^[a-z][a-z\\d+.-]*$/;\nconst INVALID_BUCKET_CHARACTER_PATTERN = /[\\s/?#%@:\\\\]/;\nconst assertProtocol = (protocol) => {\n\tif (!PROTOCOL_PATTERN.test(protocol)) throw new Error(`Invalid storage URI protocol: ${protocol}`);\n};\nconst assertBucket = (bucket) => {\n\tif (bucket.length === 0 || INVALID_BUCKET_CHARACTER_PATTERN.test(bucket)) throw new Error(`Invalid storage URI bucket: ${bucket}`);\n};\nconst getKeySegments = (key) => {\n\tif (key.length === 0) throw new Error(\"Invalid storage URI key: key must not be empty\");\n\tconst segments = key.split(\"/\");\n\tif (segments.some((segment) => segment.length === 0 || segment === \".\" || segment === \"..\" || segment.includes(\"\\\\\"))) throw new Error(\"Invalid storage URI key: segments must not be empty, '.', '..' or contain '\\\\'\");\n\treturn segments;\n};\n/**\n* Creates a hierarchical storage identifier in the form\n* `protocol://bucket/slash-separated-encoded-key`.\n*/\nconst createStorageUri = ({ protocol, bucket, key }) => {\n\tassertProtocol(protocol);\n\tassertBucket(bucket);\n\treturn `${protocol}://${bucket}/${getKeySegments(key).map(encodeURIComponent).join(\"/\")}`;\n};\n/**\n* Parses a hierarchical storage identifier and decodes each key segment.\n*\n* Search parameters and fragments are not part of a storage identifier.\n*/\nfunction parseStorageUri(storageUri, expectedProtocol) {\n\tassertProtocol(expectedProtocol);\n\tif (storageUri.includes(\"?\") || storageUri.includes(\"#\")) throw new Error(`Invalid storage URI format: ${storageUri}`);\n\tconst match = /^([a-z][a-z\\d+.-]*):\\/\\/([^/]+)\\/(.*)$/.exec(storageUri);\n\tif (!match) throw new Error(`Invalid storage URI format: ${storageUri}`);\n\tconst [, protocol, bucket, encodedKey] = match;\n\tif (protocol !== expectedProtocol) throw new Error(`Invalid storage URI protocol. Expected ${expectedProtocol}, got ${protocol}`);\n\tassertBucket(bucket);\n\tlet segments;\n\ttry {\n\t\tsegments = getKeySegments(encodedKey).map((segment) => {\n\t\t\tconst decoded = decodeURIComponent(segment);\n\t\t\tif (decoded.includes(\"/\") || decoded.includes(\"\\\\\")) throw new Error(\"encoded hierarchy separator\");\n\t\t\tif (encodeURIComponent(decoded) !== segment) throw new Error(\"non-canonical segment\");\n\t\t\treturn decoded;\n\t\t});\n\t} catch {\n\t\tthrow new Error(`Invalid storage URI format: ${storageUri}`);\n\t}\n\treturn {\n\t\tprotocol,\n\t\tbucket,\n\t\tkey: segments.join(\"/\")\n\t};\n}\n//#endregion\nexport { createStorageUri, parseStorageUri };\n", "import { getContentAddressedAssetStoragePath, isContentAddressedAssetFileHash } from \"./contentAddressedAssets.mjs\";\nimport { createStorageKeyBuilder } from \"./createStorageKeyBuilder.mjs\";\nimport { createStorageUri, parseStorageUri } from \"./parseStorageUri.mjs\";\n//#region src/assetStorageLayout.ts\nconst isBrotliManifestAssetPath = (assetPath) => /(^|\\/)index\\.[^/]+\\.bundle$/.test(assetPath.replace(/\\\\/g, \"/\"));\nconst getManifestAssetDownloadPath = (assetPath) => isBrotliManifestAssetPath(assetPath) ? `${assetPath}.br` : assetPath;\nconst createStorageUriWithRelativePath = ({ baseStorageUri, relativePath }) => {\n\tconst parsed = parseStorageUri(baseStorageUri, new URL(baseStorageUri).protocol.replace(\":\", \"\"));\n\tconst childKey = createStorageKeyBuilder(void 0)(relativePath);\n\tif (!childKey) throw new Error(\"Relative storage key must not be empty.\");\n\treturn createStorageUri({\n\t\tprotocol: parsed.protocol,\n\t\tbucket: parsed.bucket,\n\t\tkey: createStorageKeyBuilder(parsed.key)(childKey)\n\t});\n};\nconst replaceStorageUriKeySuffix = ({ storageUri, keySuffix, replacement }) => {\n\tconst parsed = parseStorageUri(storageUri, new URL(storageUri).protocol.replace(\":\", \"\"));\n\tconst normalizedSuffix = createStorageKeyBuilder(void 0)(keySuffix);\n\tconst normalizedReplacement = createStorageKeyBuilder(void 0)(replacement);\n\tif (!normalizedSuffix || !normalizedReplacement) throw new Error(\"Storage URI key suffix and replacement must not be empty.\");\n\tconst keySegments = parsed.key.split(\"/\");\n\tconst suffixSegments = normalizedSuffix.split(\"/\");\n\tconst suffixOffset = keySegments.length - suffixSegments.length;\n\tif (suffixOffset < 0 || suffixSegments.some((segment, index) => keySegments[suffixOffset + index] !== segment)) throw new Error(\"Storage URI key does not end with the expected suffix.\");\n\tconst prefix = keySegments.slice(0, suffixOffset).join(\"/\");\n\treturn createStorageUri({\n\t\tprotocol: parsed.protocol,\n\t\tbucket: parsed.bucket,\n\t\tkey: createStorageKeyBuilder(prefix)(normalizedReplacement)\n\t});\n};\nconst resolveManifestAssetStorageFileHash = ({ downloadFileHash, fileHash }) => isContentAddressedAssetFileHash(downloadFileHash) ? downloadFileHash : fileHash;\nconst getManifestAssetStoragePath = ({ assetPath, downloadFileHash, fileHash }) => getContentAddressedAssetStoragePath({\n\tassetPath,\n\tfileHash: resolveManifestAssetStorageFileHash({\n\t\tdownloadFileHash,\n\t\tfileHash\n\t})\n});\nconst resolveManifestAssetStorageUri = ({ assetBaseStorageUri, assetPath, downloadFileHash, fileHash }) => createStorageUriWithRelativePath({\n\tbaseStorageUri: assetBaseStorageUri,\n\trelativePath: getManifestAssetStoragePath({\n\t\tassetPath,\n\t\tdownloadFileHash,\n\t\tfileHash\n\t})\n});\n//#endregion\nexport { createStorageUriWithRelativePath, getManifestAssetDownloadPath, getManifestAssetStoragePath, isBrotliManifestAssetPath, replaceStorageUriKeySuffix, resolveManifestAssetStorageFileHash, resolveManifestAssetStorageUri };\n", "//#region src/databasePluginCrudValidationErrors.ts\nvar DatabasePluginInputError = class extends Error {\n\tname = \"DatabasePluginInputError\";\n\tconstructor(code) {\n\t\tsuper(`Invalid database plugin input: ${code}`);\n\t\tthis.code = code;\n\t}\n};\n//#endregion\nexport { DatabasePluginInputError };\n", "//#region src/databaseJsonValue.ts\nconst isDatabaseJsonValue = (value) => {\n\tconst ancestors = /* @__PURE__ */ new WeakSet();\n\tconst validate = (input) => {\n\t\tif (input === null || typeof input === \"string\" || typeof input === \"boolean\") return true;\n\t\tif (typeof input === \"number\") return Number.isFinite(input);\n\t\tif (typeof input !== \"object\") return false;\n\t\tif (ancestors.has(input)) return false;\n\t\tancestors.add(input);\n\t\ttry {\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tif (Object.getPrototypeOf(input) !== Array.prototype) return false;\n\t\t\t\tif (Reflect.ownKeys(input).length !== input.length + 1) return false;\n\t\t\t\tfor (let index = 0; index < input.length; index += 1) {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(input, String(index));\n\t\t\t\t\tif (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor) || !validate(descriptor.value)) return false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst prototype = Object.getPrototypeOf(input);\n\t\t\tif (prototype !== Object.prototype && prototype !== null) return false;\n\t\t\tfor (const key of Reflect.ownKeys(input)) {\n\t\t\t\tif (typeof key !== \"string\" || key === \"__proto__\") return false;\n\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(input, key);\n\t\t\t\tif (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor) || !validate(descriptor.value)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} finally {\n\t\t\tancestors.delete(input);\n\t\t}\n\t};\n\treturn validate(value);\n};\nconst isDatabaseJsonObject = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value) && isDatabaseJsonValue(value);\nconst isDatabaseMetadataObject = (value) => isDatabaseJsonObject(value) && (!Object.hasOwn(value, \"app_version\") || typeof value[\"app_version\"] === \"string\");\n//#endregion\nexport { isDatabaseMetadataObject };\n", "//#region src/bundleArtifacts.ts\nconst stripBundleArtifactMetadata = (metadata) => metadata;\nconst getManifestStorageUri = (bundle) => bundle.manifestStorageUri ?? null;\nconst getManifestFileHash = (bundle) => bundle.manifestFileHash ?? null;\nconst getAssetBaseStorageUri = (bundle) => bundle.assetBaseStorageUri ?? null;\nconst isBundlePatchArtifact = (value) => {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst candidate = value;\n\treturn typeof candidate.baseBundleId === \"string\" && typeof candidate.baseFileHash === \"string\" && typeof candidate.patchFileHash === \"string\" && typeof candidate.patchStorageUri === \"string\";\n};\nconst readBundlePatchArray = (patches) => {\n\tif (!Array.isArray(patches)) return [];\n\treturn patches.filter(isBundlePatchArtifact);\n};\nconst getBundlePatches = (bundle) => {\n\tconst patches = readBundlePatchArray(bundle.patches);\n\tconst seenBaseBundleIds = /* @__PURE__ */ new Set();\n\treturn patches.filter((patch) => {\n\t\tif (seenBaseBundleIds.has(patch.baseBundleId)) return false;\n\t\tseenBaseBundleIds.add(patch.baseBundleId);\n\t\treturn true;\n\t});\n};\nconst getBundlePatch = (bundle, baseBundleId) => {\n\treturn getBundlePatches(bundle).find((patch) => patch.baseBundleId === baseBundleId) ?? null;\n};\nconst getPrimaryPatch = (bundle) => {\n\treturn getBundlePatches(bundle)[0] ?? null;\n};\nconst getPatchBaseBundleId = (bundle) => getPrimaryPatch(bundle)?.baseBundleId ?? null;\nconst getPatchBaseFileHash = (bundle) => getPrimaryPatch(bundle)?.baseFileHash ?? null;\nconst getPatchFileHash = (bundle) => getPrimaryPatch(bundle)?.patchFileHash ?? null;\nconst getPatchStorageUri = (bundle) => getPrimaryPatch(bundle)?.patchStorageUri ?? null;\n//#endregion\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\tif (normalizedRolloutCount >= 1e3) return Array.from({ length: NUMERIC_COHORT_SIZE }, (_, index) => index + 1);\n\tconst { multiplier, offset } = getRolloutShuffleParameters(bundleId);\n\treturn Array.from({ length: normalizedRolloutCount }, (_, position) => positiveMod(multiplier * position + offset, NUMERIC_COHORT_SIZE)).map((zeroBasedCohort) => zeroBasedCohort + 1).sort((left, right) => left - right);\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/releaseCatalog.ts\nconst RELEASE_CATALOG_SCHEMA_VERSION = 1;\nconst RELEASE_CATALOG_FALLBACK_POLICY = \"BUILTIN_IF_ACTIVE_INELIGIBLE\";\nconst MAX_CRASHED_BUNDLES = 10;\nconst MAX_TARGET_COHORTS_PER_RELEASE = 100;\nconst MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE = 512;\nconst MAX_COMPILED_CATALOG_BYTES = 256 * 1024;\nconst hashSelectionContext = (value) => {\n\tlet first = 2166136261;\n\tlet second = 2654435769;\n\tfor (let index = 0; index < value.length; index += 1) {\n\t\tconst code = value.charCodeAt(index);\n\t\tfirst = Math.imul(first ^ code, 16777619);\n\t\tsecond = Math.imul(second ^ code, 2246822507);\n\t}\n\treturn `v1:${(first >>> 0).toString(16).padStart(8, \"0\")}${(second >>> 0).toString(16).padStart(8, \"0\")}`;\n};\nfunction createReleaseSelectionContextHash(input) {\n\tconst crashedBundleIds = [...new Set(input.crashedBundleIds)].sort().slice(0, 10);\n\treturn hashSelectionContext(JSON.stringify({\n\t\tactiveBundleId: input.activeBundleId ?? null,\n\t\tactiveReleaseId: input.activeReleaseId ?? null,\n\t\tcohort: normalizeCohortValue(input.cohort ?? \"\"),\n\t\tcrashedBundleIds,\n\t\tminimumReleaseId: input.minimumReleaseId,\n\t\tselectorSchemaVersion: 1,\n\t\tstrategy: input.strategy,\n\t\tstrategyValue: input.strategyValue\n\t}));\n}\nfunction isReleaseEligibleForCohort(release, cohort) {\n\tif (isCohortEligibleForUpdate(release.releaseId, cohort, release.rolloutCohortCount, release.targetCohorts)) return true;\n\treturn cohort !== null && cohort !== void 0 && isCustomCohort(normalizeCohortValue(cohort)) && normalizeRolloutCohortCount(release.rolloutCohortCount) === 1e3;\n}\nfunction selectDesiredRelease(catalog, input) {\n\tconst crashedBundleIds = new Set(input.crashedBundleIds);\n\tconst activeReleaseId = input.activeReleaseId ?? null;\n\tconst hasActiveBundle = input.currentBundleId !== input.builtInBundleId;\n\tconst isSafeBundleRelease = (release) => release.kind === \"BUNDLE\" && release.bundleId !== null && !crashedBundleIds.has(release.bundleId) && release.bundleId >= input.minimumReleaseId;\n\tconst desiredBundle = (release, status) => ({\n\t\tbundleId: release.bundleId,\n\t\tkind: \"BUNDLE\",\n\t\trelease,\n\t\treleaseId: release.releaseId,\n\t\tstatus\n\t});\n\tfor (const release of catalog.releases) {\n\t\tif (!isReleaseEligibleForCohort(release, input.cohort)) continue;\n\t\tif (activeReleaseId !== null && release.releaseId <= activeReleaseId || activeReleaseId === null && hasActiveBundle && (release.bundleId === null || release.bundleId <= input.currentBundleId)) continue;\n\t\tif (isSafeBundleRelease(release)) return desiredBundle(release, \"UPDATE\");\n\t\tif (release.bundleId !== null) continue;\n\t\treturn {\n\t\t\tbundleId: input.builtInBundleId,\n\t\t\tkind: \"EMBEDDED\",\n\t\t\trelease,\n\t\t\treleaseId: release.releaseId,\n\t\t\tstatus: \"ROLLBACK\"\n\t\t};\n\t}\n\tif (activeReleaseId !== null || hasActiveBundle) {\n\t\tconst rollbackReleases = catalog.rollbackReleases ?? catalog.releases;\n\t\tconst current = rollbackReleases.find((release) => release.releaseId === activeReleaseId || activeReleaseId === null && release.bundleId === input.currentBundleId);\n\t\tif (current !== void 0 && isSafeBundleRelease(current) && isReleaseEligibleForCohort(current, input.cohort)) return desiredBundle(current, \"UPDATE\");\n\t\tconst rollback = rollbackReleases.find((release) => isSafeBundleRelease(release) && (activeReleaseId !== null ? release.releaseId < activeReleaseId : release.bundleId < input.currentBundleId));\n\t\tif (rollback !== void 0 && isSafeBundleRelease(rollback)) return desiredBundle(rollback, \"ROLLBACK\");\n\t\tif (input.currentBundleId <= input.minimumReleaseId) return null;\n\t}\n\tif (catalog.fallbackPolicy !== \"BUILTIN_IF_ACTIVE_INELIGIBLE\") return null;\n\treturn {\n\t\tbundleId: input.builtInBundleId,\n\t\tkind: \"BUILTIN\",\n\t\trelease: null,\n\t\treleaseId: null,\n\t\tstatus: \"ROLLBACK\"\n\t};\n}\nfunction assessCatalogAcceptance(incoming, highestSeen) {\n\tif (highestSeen === null) return {\n\t\taccepted: true,\n\t\tshouldAdvanceHighWater: true\n\t};\n\tif (incoming.generation < highestSeen.generation) return {\n\t\taccepted: false,\n\t\treason: \"STALE_GENERATION\"\n\t};\n\tif (incoming.generation === highestSeen.generation && incoming.catalogHash !== highestSeen.catalogHash) return {\n\t\taccepted: false,\n\t\treason: \"GENERATION_HASH_MISMATCH\"\n\t};\n\treturn {\n\t\taccepted: true,\n\t\tshouldAdvanceHighWater: incoming.generation > highestSeen.generation\n\t};\n}\nfunction authorizeReleaseTransition(input) {\n\tconst { active, desired, explicitScopeSwitch } = input;\n\tif (active === null || active.scopeKey === null || active.generation === null) return {\n\t\tauthorized: true,\n\t\treason: \"FIRST_AUTHENTICATED_SELECTION\"\n\t};\n\tif (desired.catalogId !== active.catalogId || desired.scopeKey !== active.scopeKey) {\n\t\tif (!explicitScopeSwitch) return {\n\t\t\tauthorized: false,\n\t\t\treason: \"UNSOLICITED_SCOPE\"\n\t\t};\n\t\tif (desired.releaseId === null || desired.kind === \"BUILTIN\") return {\n\t\t\tauthorized: false,\n\t\t\treason: \"EMPTY_TARGET_SCOPE\"\n\t\t};\n\t\treturn {\n\t\t\tauthorized: true,\n\t\t\treason: \"EXPLICIT_SCOPE_SWITCH\"\n\t\t};\n\t}\n\tif (desired.generation === null || desired.generation < active.generation) return {\n\t\tauthorized: false,\n\t\treason: \"STALE_GENERATION\"\n\t};\n\tif (desired.generation > active.generation) return {\n\t\tauthorized: true,\n\t\treason: \"NEWER_POLICY\"\n\t};\n\tif (desired.selectionContextHash !== active.selectionContextHash) return {\n\t\tauthorized: true,\n\t\treason: \"CONTEXT_RESELECTION\"\n\t};\n\treturn {\n\t\tauthorized: false,\n\t\treason: \"BACKWARD_NOT_AUTHORIZED\"\n\t};\n}\n//#endregion\n//#region src/releaseCatalogScope.ts\nconst BASE64URL_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nconst MAX_CATALOG_SEGMENT_LENGTH = 255;\nfunction assertCatalogSegment(value, name) {\n\tif (value.length === 0 || value.length > MAX_CATALOG_SEGMENT_LENGTH || !/^[A-Za-z0-9._~-]+$/.test(value)) throw new Error(`${name} must be 1-${MAX_CATALOG_SEGMENT_LENGTH} URL-safe ASCII characters`);\n}\nfunction encodeUtf8(value) {\n\tconst bytes = [];\n\tfor (const codePointText of value) {\n\t\tconst codePoint = codePointText.codePointAt(0);\n\t\tif (codePoint <= 127) bytes.push(codePoint);\n\t\telse if (codePoint <= 2047) bytes.push(192 | codePoint >> 6, 128 | codePoint & 63);\n\t\telse if (codePoint <= 65535) bytes.push(224 | codePoint >> 12, 128 | codePoint >> 6 & 63, 128 | codePoint & 63);\n\t\telse bytes.push(240 | codePoint >> 18, 128 | codePoint >> 12 & 63, 128 | codePoint >> 6 & 63, 128 | codePoint & 63);\n\t}\n\treturn bytes;\n}\nfunction decodeUtf8(bytes) {\n\tlet result = \"\";\n\tfor (let index = 0; index < bytes.length;) {\n\t\tconst first = bytes[index++];\n\t\tlet codePoint;\n\t\tlet continuationCount;\n\t\tif (first <= 127) {\n\t\t\tcodePoint = first;\n\t\t\tcontinuationCount = 0;\n\t\t} else if ((first & 224) === 192) {\n\t\t\tcodePoint = first & 31;\n\t\t\tcontinuationCount = 1;\n\t\t} else if ((first & 240) === 224) {\n\t\t\tcodePoint = first & 15;\n\t\t\tcontinuationCount = 2;\n\t\t} else if ((first & 248) === 240) {\n\t\t\tcodePoint = first & 7;\n\t\t\tcontinuationCount = 3;\n\t\t} else throw new Error(\"Invalid UTF-8 channel key\");\n\t\tfor (let offset = 0; offset < continuationCount; offset += 1) {\n\t\t\tconst continuation = bytes[index++];\n\t\t\tif (continuation === void 0 || (continuation & 192) !== 128) throw new Error(\"Invalid UTF-8 channel key\");\n\t\t\tcodePoint = codePoint << 6 | continuation & 63;\n\t\t}\n\t\tif (codePoint > 1114111 || codePoint >= 55296 && codePoint <= 57343 || continuationCount === 1 && codePoint < 128 || continuationCount === 2 && codePoint < 2048 || continuationCount === 3 && codePoint < 65536) throw new Error(\"Invalid UTF-8 channel key\");\n\t\tresult += String.fromCodePoint(codePoint);\n\t}\n\treturn result;\n}\nfunction base64UrlEncode(bytes) {\n\tlet result = \"\";\n\tfor (let index = 0; index < bytes.length; index += 3) {\n\t\tconst first = bytes[index];\n\t\tconst second = bytes[index + 1];\n\t\tconst third = bytes[index + 2];\n\t\tconst value = first << 16 | (second ?? 0) << 8 | (third ?? 0);\n\t\tresult += BASE64URL_ALPHABET[value >> 18 & 63];\n\t\tresult += BASE64URL_ALPHABET[value >> 12 & 63];\n\t\tif (second !== void 0) result += BASE64URL_ALPHABET[value >> 6 & 63];\n\t\tif (third !== void 0) result += BASE64URL_ALPHABET[value & 63];\n\t}\n\treturn result;\n}\nfunction base64UrlDecode(value) {\n\tif (!/^[A-Za-z0-9_-]*$/.test(value) || value.length % 4 === 1) throw new Error(\"Invalid channel key\");\n\tconst bytes = [];\n\tfor (let index = 0; index < value.length; index += 4) {\n\t\tconst chunk = value.slice(index, index + 4);\n\t\tconst encoded = [...chunk].map((character) => BASE64URL_ALPHABET.indexOf(character));\n\t\tif (encoded.some((part) => part < 0)) throw new Error(\"Invalid channel key\");\n\t\tconst bits = encoded[0] << 18 | encoded[1] << 12 | (encoded[2] ?? 0) << 6 | (encoded[3] ?? 0);\n\t\tbytes.push(bits >> 16 & 255);\n\t\tif (chunk.length >= 3) bytes.push(bits >> 8 & 255);\n\t\tif (chunk.length === 4) bytes.push(bits & 255);\n\t}\n\treturn bytes;\n}\nfunction normalizeChannelName(channel) {\n\treturn channel.trim().normalize(\"NFC\");\n}\nfunction assertCanonicalChannelName(channel) {\n\tconst normalized = normalizeChannelName(channel);\n\tif (normalized.length === 0 || normalized !== channel) throw new Error(\"Channel name must be non-empty, trimmed, and NFC-normalized\");\n\tlet codePointCount = 0;\n\tfor (const _codePoint of normalized) {\n\t\tcodePointCount += 1;\n\t\tif (codePointCount > 255) throw new Error(\"Channel name must not exceed 255 characters\");\n\t}\n}\nfunction encodeChannelKey(channel) {\n\tassertCanonicalChannelName(channel);\n\treturn base64UrlEncode(encodeUtf8(channel));\n}\nfunction decodeChannelKey(channelKey) {\n\tconst channel = decodeUtf8(base64UrlDecode(channelKey));\n\tassertCanonicalChannelName(channel);\n\tif (encodeChannelKey(channel) !== channelKey) throw new Error(\"Channel key is not canonically encoded\");\n\treturn channel;\n}\nfunction createReleaseCatalogScopeKey(input) {\n\tdecodeChannelKey(input.channelKey);\n\tif (input.strategy === \"APP_VERSION\") return `v1:app-version:${input.platform}:${input.channelKey}`;\n\tassertCatalogSegment(input.fingerprintHash, \"Fingerprint hash\");\n\treturn `v1:fingerprint:${input.platform}:${input.channelKey}:${input.fingerprintHash}`;\n}\nfunction parseReleaseCatalogScopeKey(scopeKey) {\n\tconst segments = scopeKey.split(\":\");\n\tconst [version, strategy, platform, channelKey] = segments;\n\tif (version !== \"v1\" || platform !== \"ios\" && platform !== \"android\" || channelKey === void 0) throw new Error(\"Invalid release catalog scope key\");\n\tconst input = strategy === \"app-version\" && segments.length === 4 ? {\n\t\tchannelKey,\n\t\tplatform,\n\t\tstrategy: \"APP_VERSION\"\n\t} : strategy === \"fingerprint\" && segments.length === 5 && segments[4] !== void 0 ? {\n\t\tchannelKey,\n\t\tfingerprintHash: segments[4],\n\t\tplatform,\n\t\tstrategy: \"FINGERPRINT\"\n\t} : (() => {\n\t\tthrow new Error(\"Invalid release catalog scope key\");\n\t})();\n\tif (createReleaseCatalogScopeKey(input) !== scopeKey) throw new Error(\"Release catalog scope key is not canonical\");\n\treturn input;\n}\n//#endregion\n//#region src/uuid.ts\nconst NIL_UUID = \"00000000-0000-0000-0000-000000000000\";\nconst UUID_V7_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\nconst isUUIDv7 = (value) => typeof value === \"string\" && UUID_V7_PATTERN.test(value);\n//#endregion\nexport { DEFAULT_ROLLOUT_COHORT_COUNT, INVALID_COHORT_ERROR_MESSAGE, MAX_COHORT_LENGTH, MAX_COMPILED_CATALOG_BYTES, MAX_CRASHED_BUNDLES, MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE, MAX_TARGET_COHORTS_PER_RELEASE, NIL_UUID, NUMERIC_COHORT_SIZE, RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, assertCanonicalChannelName, assessCatalogAcceptance, authorizeReleaseTransition, createReleaseCatalogScopeKey, createReleaseSelectionContextHash, decodeChannelKey, encodeChannelKey, getAssetBaseStorageUri, getBundlePatch, getBundlePatches, getDefaultNumericCohort, getManifestFileHash, getManifestStorageUri, getNumericCohortRolloutPosition, getNumericCohortValue, getPatchBaseBundleId, getPatchBaseFileHash, getPatchFileHash, getPatchStorageUri, getRolledOutNumericCohorts, isCohortEligibleForUpdate, isCustomCohort, isNumericCohort, isReleaseEligibleForCohort, isUUIDv7, isValidCohort, normalizeChannelName, normalizeCohortValue, normalizeRolloutCohortCount, parseReleaseCatalogScopeKey, selectDesiredRelease, stripBundleArtifactMetadata };\n", "import { isUUIDv7, isUUIDv7 as isUUIDv7$1 } from \"@hot-updater/core\";\n//#region src/uuidv7.ts\nconst extractTimestampFromUUIDv7 = (uuid) => {\n\tif (!isUUIDv7(uuid)) throw new TypeError(\"Expected a canonical lowercase UUIDv7\");\n\tconst timestampHex = uuid.split(\"-\").join(\"\").slice(0, 12);\n\treturn Number.parseInt(timestampHex, 16);\n};\nfunction createUUIDv7FromTimestampHex(timestampHex) {\n\tconst randomBytes = new Uint8Array(10);\n\tcrypto.getRandomValues(randomBytes);\n\tconst randomHex = Array.from(randomBytes).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n\tconst randA = randomHex.slice(0, 3);\n\tconst randBHex = randomHex.slice(3, 19);\n\tconst versionAndRandA = `7${randA}`;\n\tconst variantAndFirstRandB = (128 | parseInt(randBHex.slice(0, 2), 16) & 63).toString(16).padStart(2, \"0\");\n\treturn [\n\t\ttimestampHex.slice(0, 8),\n\t\ttimestampHex.slice(8, 12),\n\t\tversionAndRandA,\n\t\tvariantAndFirstRandB + randBHex.slice(2, 4),\n\t\trandBHex.slice(4, 16)\n\t].join(\"-\");\n}\nconst createUUIDv7 = () => createUUIDv7FromTimestampHex(Date.now().toString(16).padStart(12, \"0\"));\nconst createUUIDv7After = (floor, nowMs = Date.now()) => {\n\tconst timestamp = Math.max(nowMs, floor === null ? 0 : extractTimestampFromUUIDv7(floor) + 1);\n\tif (!Number.isSafeInteger(timestamp) || timestamp < 0 || timestamp >= 2 ** 48) throw new RangeError(\"UUIDv7 timestamp is out of range\");\n\treturn createUUIDv7FromTimestampHex(timestamp.toString(16).padStart(12, \"0\"));\n};\nconst createUUIDv7WithSameTimestamp = (originalUuid) => {\n\treturn createUUIDv7FromTimestampHex(originalUuid.split(\"-\").join(\"\").slice(0, 12));\n};\n//#endregion\nexport { createUUIDv7, createUUIDv7After, createUUIDv7WithSameTimestamp, extractTimestampFromUUIDv7, isUUIDv7$1 as isUUIDv7 };\n", "//#region src/types/databaseFields.ts\nconst databaseFields = {\n\tbundles: [\n\t\t\"id\",\n\t\t\"platform\",\n\t\t\"file_hash\",\n\t\t\"git_commit_hash\",\n\t\t\"storage_uri\",\n\t\t\"archive_byte_size\",\n\t\t\"metadata\",\n\t\t\"manifest_storage_uri\",\n\t\t\"manifest_file_hash\",\n\t\t\"asset_base_storage_uri\"\n\t],\n\tbundle_patches: [\n\t\t\"id\",\n\t\t\"bundle_id\",\n\t\t\"base_bundle_id\",\n\t\t\"base_file_hash\",\n\t\t\"patch_file_hash\",\n\t\t\"patch_storage_uri\",\n\t\t\"byte_size\",\n\t\t\"order_index\"\n\t],\n\treleases: [\n\t\t\"id\",\n\t\t\"revision\",\n\t\t\"scope_key\",\n\t\t\"channel_id\",\n\t\t\"platform\",\n\t\t\"kind\",\n\t\t\"bundle_id\",\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\",\n\t\t\"enabled\",\n\t\t\"should_force_update\",\n\t\t\"message\",\n\t\t\"rollout_cohort_count\",\n\t\t\"target_cohorts\",\n\t\t\"operation\",\n\t\t\"source_release_id\",\n\t\t\"created_at_ms\",\n\t\t\"updated_at_ms\"\n\t],\n\trelease_catalogs: [\n\t\t\"scope_key\",\n\t\t\"catalog_id\",\n\t\t\"strategy\",\n\t\t\"channel_id\",\n\t\t\"channel_key\",\n\t\t\"platform\",\n\t\t\"fingerprint_hash\",\n\t\t\"generation\",\n\t\t\"payload\",\n\t\t\"catalog_hash\",\n\t\t\"byte_size\",\n\t\t\"is_tombstone\",\n\t\t\"updated_at_ms\"\n\t],\n\tchannels: [\"id\", \"name\"],\n\tbundle_events: [\n\t\t\"id\",\n\t\t\"type\",\n\t\t\"install_id\",\n\t\t\"user_id\",\n\t\t\"username\",\n\t\t\"from_bundle_id\",\n\t\t\"from_release_id\",\n\t\t\"to_release_id\",\n\t\t\"to_bundle_id\",\n\t\t\"platform\",\n\t\t\"app_version\",\n\t\t\"channel\",\n\t\t\"cohort\",\n\t\t\"update_strategy\",\n\t\t\"fingerprint_hash\",\n\t\t\"sdk_version\",\n\t\t\"received_at_ms\"\n\t],\n\tapi_keys: [\n\t\t\"id\",\n\t\t\"hash\",\n\t\t\"name\",\n\t\t\"prefix\",\n\t\t\"role\",\n\t\t\"created_at_ms\",\n\t\t\"revoked_at_ms\"\n\t]\n};\n//#endregion\nexport { databaseFields };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isDatabaseMetadataObject } from \"./databaseJsonValue.mjs\";\nimport { databaseFields } from \"./types/databaseFields.mjs\";\nimport { isUUIDv7 } from \"./uuidv7.mjs\";\n//#region src/databasePluginCrudValidationFields.ts\nconst isRecord = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst isChannelText = (value) => {\n\tif (typeof value !== \"string\" || value.length === 0) return false;\n\tlet codePointCount = 0;\n\tfor (const _codePoint of value) {\n\t\tcodePointCount += 1;\n\t\tif (codePointCount > 255) return false;\n\t}\n\treturn true;\n};\nconst modelValidators = {\n\tbundles: {\n\t\tid: (value) => typeof value === \"string\",\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tshould_force_update: (value) => typeof value === \"boolean\",\n\t\tenabled: (value) => typeof value === \"boolean\",\n\t\tfile_hash: (value) => typeof value === \"string\",\n\t\tgit_commit_hash: (value) => value === null || typeof value === \"string\",\n\t\tmessage: (value) => value === null || typeof value === \"string\",\n\t\tchannel: isChannelText,\n\t\tchannel_id: isChannelText,\n\t\tstorage_uri: (value) => typeof value === \"string\",\n\t\tarchive_byte_size: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\ttarget_app_version: (value) => value === null || typeof value === \"string\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tmetadata: isDatabaseMetadataObject,\n\t\trollout_cohort_count: (value) => typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 1e3,\n\t\ttarget_cohorts: (value) => value === null || Array.isArray(value) && value.every((item) => typeof item === \"string\"),\n\t\tmanifest_storage_uri: (value) => value === null || typeof value === \"string\",\n\t\tmanifest_file_hash: (value) => value === null || typeof value === \"string\",\n\t\tasset_base_storage_uri: (value) => value === null || typeof value === \"string\"\n\t},\n\tbundle_patches: {\n\t\tid: (value) => typeof value === \"string\",\n\t\tbundle_id: (value) => typeof value === \"string\",\n\t\tbase_bundle_id: (value) => typeof value === \"string\",\n\t\tbase_file_hash: (value) => typeof value === \"string\",\n\t\tpatch_file_hash: (value) => typeof value === \"string\",\n\t\tpatch_storage_uri: (value) => typeof value === \"string\",\n\t\tbyte_size: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\torder_index: (value) => typeof value === \"number\" && Number.isInteger(value) && value >= 0\n\t},\n\treleases: {\n\t\tid: isUUIDv7,\n\t\trevision: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1,\n\t\tscope_key: (value) => typeof value === \"string\" && value.length > 0,\n\t\tchannel_id: isChannelText,\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tkind: (value) => value === \"BUNDLE\" || value === \"EMBEDDED\",\n\t\tbundle_id: (value) => value === null || typeof value === \"string\",\n\t\tstrategy: (value) => value === \"APP_VERSION\" || value === \"FINGERPRINT\",\n\t\ttarget_app_version: (value) => value === null || typeof value === \"string\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tenabled: (value) => typeof value === \"boolean\",\n\t\tshould_force_update: (value) => typeof value === \"boolean\",\n\t\tmessage: (value) => value === null || typeof value === \"string\",\n\t\trollout_cohort_count: (value) => typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 1e3,\n\t\ttarget_cohorts: (value) => Array.isArray(value) && value.every((item) => typeof item === \"string\"),\n\t\toperation: (value) => value === \"DEPLOY\" || value === \"PROMOTE\" || value === \"ROLLBACK\",\n\t\tsource_release_id: (value) => value === null || isUUIDv7(value),\n\t\tcreated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\tupdated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t},\n\trelease_catalogs: {\n\t\tscope_key: (value) => typeof value === \"string\" && value.length > 0,\n\t\tcatalog_id: (value) => typeof value === \"string\" && value.length > 0,\n\t\tstrategy: (value) => value === \"APP_VERSION\" || value === \"FINGERPRINT\",\n\t\tchannel_id: isChannelText,\n\t\tchannel_key: (value) => typeof value === \"string\" && value.length > 0,\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tgeneration: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1,\n\t\tpayload: (value) => typeof value === \"string\",\n\t\tcatalog_hash: (value) => typeof value === \"string\" && value.length > 0,\n\t\tbyte_size: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\tis_tombstone: (value) => typeof value === \"boolean\",\n\t\tupdated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t},\n\tchannels: {\n\t\tid: isChannelText,\n\t\tname: isChannelText\n\t},\n\tbundle_events: {\n\t\tid: (value) => typeof value === \"string\",\n\t\ttype: (value) => value === \"UPDATE_APPLIED\" || value === \"RECOVERED\" || value === \"RELEASE_ADOPTED\" || value === \"UNCHANGED\",\n\t\tinstall_id: (value) => typeof value === \"string\",\n\t\tuser_id: (value) => value === null || typeof value === \"string\",\n\t\tusername: (value) => value === null || typeof value === \"string\",\n\t\tfrom_bundle_id: (value) => value === null || typeof value === \"string\",\n\t\tfrom_release_id: (value) => value === null || typeof value === \"string\",\n\t\tto_release_id: (value) => value === null || typeof value === \"string\",\n\t\tto_bundle_id: (value) => typeof value === \"string\",\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tapp_version: (value) => typeof value === \"string\",\n\t\tchannel: (value) => typeof value === \"string\",\n\t\tcohort: (value) => typeof value === \"string\",\n\t\tupdate_strategy: (value) => value === null || value === \"fingerprint\" || value === \"appVersion\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tsdk_version: (value) => value === null || typeof value === \"string\",\n\t\treceived_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t},\n\tapi_keys: {\n\t\tid: (value) => typeof value === \"string\",\n\t\thash: (value) => typeof value === \"string\",\n\t\tname: (value) => typeof value === \"string\",\n\t\tprefix: (value) => typeof value === \"string\",\n\t\trole: (value) => value === \"client\",\n\t\tcreated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\trevoked_at_ms: (value) => value === null || typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t}\n};\nconst stringFields = new Set([\n\t\"id\",\n\t\"platform\",\n\t\"file_hash\",\n\t\"git_commit_hash\",\n\t\"message\",\n\t\"channel\",\n\t\"channel_id\",\n\t\"storage_uri\",\n\t\"target_app_version\",\n\t\"fingerprint_hash\",\n\t\"bundle_id\",\n\t\"base_bundle_id\",\n\t\"base_file_hash\",\n\t\"patch_file_hash\",\n\t\"patch_storage_uri\",\n\t\"scope_key\",\n\t\"catalog_id\",\n\t\"channel_key\",\n\t\"kind\",\n\t\"bundle_id\",\n\t\"strategy\",\n\t\"operation\",\n\t\"source_release_id\",\n\t\"payload\",\n\t\"catalog_hash\",\n\t\"type\",\n\t\"install_id\",\n\t\"user_id\",\n\t\"username\",\n\t\"from_bundle_id\",\n\t\"to_bundle_id\",\n\t\"app_version\",\n\t\"cohort\",\n\t\"update_strategy\",\n\t\"sdk_version\",\n\t\"hash\",\n\t\"name\",\n\t\"prefix\",\n\t\"role\"\n]);\nconst numberFields = new Set([\n\t\"archive_byte_size\",\n\t\"byte_size\",\n\t\"rollout_cohort_count\",\n\t\"order_index\",\n\t\"revision\",\n\t\"generation\",\n\t\"byte_size\",\n\t\"updated_at_ms\",\n\t\"received_at_ms\",\n\t\"created_at_ms\",\n\t\"revoked_at_ms\"\n]);\nconst booleanFields = new Set([\n\t\"should_force_update\",\n\t\"enabled\",\n\t\"is_tombstone\"\n]);\nconst sortableFields = {\n\tbundles: new Set([\n\t\t\"id\",\n\t\t\"platform\",\n\t\t\"file_hash\",\n\t\t\"git_commit_hash\",\n\t\t\"message\",\n\t\t\"channel\",\n\t\t\"channel_id\",\n\t\t\"storage_uri\",\n\t\t\"archive_byte_size\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\",\n\t\t\"rollout_cohort_count\",\n\t\t\"manifest_storage_uri\",\n\t\t\"manifest_file_hash\",\n\t\t\"asset_base_storage_uri\"\n\t]),\n\tbundle_patches: new Set([\n\t\t\"id\",\n\t\t\"bundle_id\",\n\t\t\"base_bundle_id\",\n\t\t\"base_file_hash\",\n\t\t\"patch_file_hash\",\n\t\t\"patch_storage_uri\",\n\t\t\"byte_size\",\n\t\t\"order_index\"\n\t]),\n\treleases: new Set([\n\t\t\"id\",\n\t\t\"revision\",\n\t\t\"scope_key\",\n\t\t\"channel_id\",\n\t\t\"platform\",\n\t\t\"kind\",\n\t\t\"bundle_id\",\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\",\n\t\t\"enabled\",\n\t\t\"should_force_update\",\n\t\t\"message\",\n\t\t\"rollout_cohort_count\",\n\t\t\"operation\",\n\t\t\"source_release_id\",\n\t\t\"created_at_ms\",\n\t\t\"updated_at_ms\"\n\t]),\n\trelease_catalogs: new Set([\n\t\t\"scope_key\",\n\t\t\"catalog_id\",\n\t\t\"strategy\",\n\t\t\"channel_id\",\n\t\t\"channel_key\",\n\t\t\"platform\",\n\t\t\"fingerprint_hash\",\n\t\t\"generation\",\n\t\t\"catalog_hash\",\n\t\t\"byte_size\",\n\t\t\"is_tombstone\",\n\t\t\"updated_at_ms\"\n\t]),\n\tchannels: new Set([\"id\", \"name\"]),\n\tbundle_events: new Set([\n\t\t\"id\",\n\t\t\"type\",\n\t\t\"install_id\",\n\t\t\"user_id\",\n\t\t\"username\",\n\t\t\"from_bundle_id\",\n\t\t\"from_release_id\",\n\t\t\"to_release_id\",\n\t\t\"to_bundle_id\",\n\t\t\"platform\",\n\t\t\"app_version\",\n\t\t\"channel\",\n\t\t\"cohort\",\n\t\t\"update_strategy\",\n\t\t\"fingerprint_hash\",\n\t\t\"sdk_version\",\n\t\t\"received_at_ms\"\n\t]),\n\tapi_keys: new Set([\n\t\t\"id\",\n\t\t\"hash\",\n\t\t\"name\",\n\t\t\"prefix\",\n\t\t\"role\",\n\t\t\"created_at_ms\",\n\t\t\"revoked_at_ms\"\n\t])\n};\nconst validateModel = (model) => {\n\tif (typeof model !== \"string\" || !Object.hasOwn(databaseFields, model)) throw new DatabasePluginInputError(\"invalid-model\");\n};\nconst validateField = (model, field) => {\n\tif (!databaseFields[model].includes(field)) throw new DatabasePluginInputError(\"invalid-field\");\n};\nconst validateFields = (model, fields) => {\n\tfor (const field of fields) validateField(model, field);\n};\nconst isStringField = (field) => stringFields.has(field);\nconst isNumberField = (field) => numberFields.has(field);\nconst isBooleanField = (field) => booleanFields.has(field);\n//#endregion\nexport { isBooleanField, isChannelText, isNumberField, isRecord, isStringField, modelValidators, sortableFields, validateField, validateFields, validateModel };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { databaseFields } from \"./types/databaseFields.mjs\";\nimport { isRecord, modelValidators, validateFields } from \"./databasePluginCrudValidationFields.mjs\";\n//#region src/databasePluginCrudValidationRows.ts\nconst hasValidReleaseInvariants = (data) => {\n\tconst kind = data.kind;\n\tconst bundleId = data.bundle_id;\n\tconst strategy = data.strategy;\n\tconst targetAppVersion = data.target_app_version;\n\tconst fingerprintHash = data.fingerprint_hash;\n\treturn (kind === \"BUNDLE\" && typeof bundleId === \"string\" || kind === \"EMBEDDED\" && bundleId === null) && (strategy === \"APP_VERSION\" && typeof targetAppVersion === \"string\" && fingerprintHash === null || strategy === \"FINGERPRINT\" && targetAppVersion === null && typeof fingerprintHash === \"string\");\n};\nconst hasValidBundleEventInvariants = (data) => (data.type === \"UPDATE_APPLIED\" || data.type === \"RECOVERED\" || data.type === \"RELEASE_ADOPTED\") && typeof data.from_bundle_id === \"string\" && (data.update_strategy === \"fingerprint\" || data.update_strategy === \"appVersion\") || data.type === \"UNCHANGED\" && data.from_bundle_id === null && data.update_strategy === null;\nconst validateCreateData = (model, data) => {\n\tif (!isRecord(data)) throw new DatabasePluginInputError(\"invalid-data\");\n\tvalidateFields(model, Object.keys(data));\n\tfor (const field of databaseFields[model]) {\n\t\tconst validator = modelValidators[model][field];\n\t\tif (!Object.hasOwn(data, field) || !validator || !validator(Reflect.get(data, field))) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n\tif (model === \"bundles\" && data.target_app_version === null && data.fingerprint_hash === null) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (model === \"releases\" && !hasValidReleaseInvariants(data)) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (model === \"release_catalogs\" && (data.strategy === \"APP_VERSION\" && data.fingerprint_hash !== null || data.strategy === \"FINGERPRINT\" && typeof data.fingerprint_hash !== \"string\")) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (model === \"bundle_events\" && !hasValidBundleEventInvariants(data)) throw new DatabasePluginInputError(\"invalid-data\");\n};\nconst selectRow = (row, input) => {\n\tconst { select } = input;\n\tif (!select) return row;\n\treturn Object.fromEntries(select.map((field) => [field, Reflect.get(row, field)]));\n};\nconst validateResult = (model, row, select) => {\n\tif (!isRecord(row)) throw new DatabasePluginInputError(\"invalid-result\");\n\tconst fields = select ?? databaseFields[model];\n\tfor (const field of fields) {\n\t\tconst validator = modelValidators[model][field];\n\t\tif (!Object.hasOwn(row, field) || !validator || !validator(Reflect.get(row, field))) throw new DatabasePluginInputError(\"invalid-result\");\n\t}\n\tif (model === \"bundles\" && Object.hasOwn(row, \"target_app_version\") && Object.hasOwn(row, \"fingerprint_hash\") && Reflect.get(row, \"target_app_version\") === null && Reflect.get(row, \"fingerprint_hash\") === null) throw new DatabasePluginInputError(\"invalid-result\");\n\tif (model === \"releases\" && [\n\t\t\"kind\",\n\t\t\"bundle_id\",\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\"\n\t].every((field) => Object.hasOwn(row, field)) && !hasValidReleaseInvariants(row)) throw new DatabasePluginInputError(\"invalid-result\");\n\tif (model === \"bundle_events\" && [\n\t\t\"type\",\n\t\t\"from_bundle_id\",\n\t\t\"update_strategy\"\n\t].every((field) => Object.hasOwn(row, field)) && !hasValidBundleEventInvariants(row)) throw new DatabasePluginInputError(\"invalid-result\");\n};\n//#endregion\nexport { selectRow, validateCreateData, validateResult };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isRecord, modelValidators, validateField } from \"./databasePluginCrudValidationFields.mjs\";\nimport { validateResult } from \"./databasePluginCrudValidationRows.mjs\";\n//#region src/databasePluginCrudValidationMutations.ts\nconst validateMutationWhere = (where) => {\n\tif (where.length === 0) throw new DatabasePluginInputError(\"empty-mutation-where\");\n};\nconst validateUpdateWhere = (model, where) => {\n\tconst selector = where[0];\n\tconst primaryField = model === \"release_catalogs\" ? \"scope_key\" : \"id\";\n\tif (where.length !== 1 || !isRecord(selector) || selector.field !== primaryField || selector.operator !== void 0 && selector.operator !== \"eq\" || typeof selector.value !== \"string\" || selector.connector !== void 0 || selector.mode !== void 0) throw new DatabasePluginInputError(\"invalid-update-selector\");\n};\nconst validateBundleUpdateData = (update) => {\n\tif (!isRecord(update)) throw new DatabasePluginInputError(\"invalid-data\");\n\tfor (const [field, value] of Object.entries(update)) {\n\t\tif (field === \"id\") throw new DatabasePluginInputError(\"invalid-data\");\n\t\tvalidateField(\"bundles\", field);\n\t\tconst validator = modelValidators.bundles[field];\n\t\tif (!validator || !validator(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst validateApiKeyUpdateData = (update) => {\n\tif (!isRecord(update) || Reflect.ownKeys(update).length !== 1 || !Object.hasOwn(update, \"revoked_at_ms\") || !modelValidators.api_keys.revoked_at_ms(Reflect.get(update, \"revoked_at_ms\"))) throw new DatabasePluginInputError(\"invalid-data\");\n};\nconst RELEASE_MUTABLE_FIELDS = new Set([\n\t\"revision\",\n\t\"scope_key\",\n\t\"target_app_version\",\n\t\"fingerprint_hash\",\n\t\"enabled\",\n\t\"should_force_update\",\n\t\"message\",\n\t\"rollout_cohort_count\",\n\t\"target_cohorts\",\n\t\"updated_at_ms\"\n]);\nconst validateReleaseUpdateData = (update) => {\n\tif (!isRecord(update) || Reflect.ownKeys(update).length === 0) throw new DatabasePluginInputError(\"invalid-data\");\n\tfor (const [field, value] of Object.entries(update)) {\n\t\tif (!RELEASE_MUTABLE_FIELDS.has(field)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\tconst validator = modelValidators.releases[field];\n\t\tif (!validator || !validator(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst validateReleaseCatalogUpdateData = (update) => {\n\tif (!isRecord(update)) throw new DatabasePluginInputError(\"invalid-data\");\n\tconst expectedFields = Object.keys(modelValidators.release_catalogs).filter((field) => field !== \"scope_key\");\n\tif (Reflect.ownKeys(update).length !== expectedFields.length || expectedFields.some((field) => !Object.hasOwn(update, field))) throw new DatabasePluginInputError(\"invalid-data\");\n\tfor (const [field, value] of Object.entries(update)) {\n\t\tconst validator = modelValidators.release_catalogs[field];\n\t\tif (!validator || !validator(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst validateReleaseTargetUpdate = async (implementation, input) => {\n\tif (!Object.hasOwn(input.update, \"target_app_version\") && !Object.hasOwn(input.update, \"fingerprint_hash\")) return;\n\tconst id = input.where[0]?.value;\n\tif (typeof id !== \"string\") return;\n\tconst current = await implementation.findOne({\n\t\tmodel: \"releases\",\n\t\twhere: [{\n\t\t\tfield: \"id\",\n\t\t\tvalue: id\n\t\t}],\n\t\tselect: [\n\t\t\t\"strategy\",\n\t\t\t\"target_app_version\",\n\t\t\t\"fingerprint_hash\"\n\t\t]\n\t});\n\tif (current === null) return;\n\tvalidateResult(\"releases\", current, [\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\"\n\t]);\n\tconst strategy = Reflect.get(current, \"strategy\");\n\tconst targetAppVersion = Object.hasOwn(input.update, \"target_app_version\") ? input.update.target_app_version : Reflect.get(current, \"target_app_version\");\n\tconst fingerprintHash = Object.hasOwn(input.update, \"fingerprint_hash\") ? input.update.fingerprint_hash : Reflect.get(current, \"fingerprint_hash\");\n\tif (!(strategy === \"APP_VERSION\" && typeof targetAppVersion === \"string\" && fingerprintHash === null || strategy === \"FINGERPRINT\" && targetAppVersion === null && typeof fingerprintHash === \"string\")) throw new DatabasePluginInputError(\"invalid-data\");\n};\n//#endregion\nexport { validateApiKeyUpdateData, validateBundleUpdateData, validateMutationWhere, validateReleaseCatalogUpdateData, validateReleaseTargetUpdate, validateReleaseUpdateData, validateUpdateWhere };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isBooleanField, isNumberField, isRecord, isStringField, modelValidators, sortableFields, validateField, validateFields } from \"./databasePluginCrudValidationFields.mjs\";\n//#region src/databasePluginCrudValidationQueries.ts\nconst validateSelect = (model, select) => {\n\tif (select === void 0) return;\n\tif (!Array.isArray(select) || select.length === 0) throw new DatabasePluginInputError(\"empty-select\");\n\tif (!select.every((field) => typeof field === \"string\")) throw new DatabasePluginInputError(\"invalid-query\");\n\tvalidateFields(model, select);\n};\nconst validateWhereValue = (model, condition) => {\n\tconst field = condition.field;\n\tif (typeof field !== \"string\") throw new DatabasePluginInputError(\"invalid-query\");\n\tvalidateField(model, field);\n\tconst operator = condition.operator ?? \"eq\";\n\tconst value = condition.value;\n\tconst mode = condition.mode;\n\tif (mode !== void 0 && mode !== \"sensitive\" && mode !== \"insensitive\") throw new DatabasePluginInputError(\"invalid-query\");\n\tswitch (operator) {\n\t\tcase \"eq\":\n\t\tcase \"ne\":\n\t\t\tif (!(isStringField(field) || isNumberField(field) || isBooleanField(field)) || !modelValidators[model][field]?.(value) || mode !== void 0 && (!isStringField(field) || typeof value !== \"string\")) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\t\tif (mode !== void 0 || !(isStringField(field) || isNumberField(field)) || value === null || !modelValidators[model][field]?.(value)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tcase \"in\":\n\t\tcase \"not_in\":\n\t\t\tif (!Array.isArray(value) || mode !== void 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\tif (!(isStringField(field) || isNumberField(field) || isBooleanField(field))) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\tif (!value.every((item) => modelValidators[model][field]?.(item))) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tcase \"contains\":\n\t\tcase \"starts_with\":\n\t\tcase \"ends_with\":\n\t\t\tif (!isStringField(field) || typeof value !== \"string\" || !modelValidators[model][field]?.(value)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tdefault: throw new DatabasePluginInputError(\"invalid-query\");\n\t}\n};\nconst validateWhere = (model, where) => {\n\tif (where === void 0) return;\n\tif (!Array.isArray(where)) throw new DatabasePluginInputError(\"invalid-query\");\n\tfor (const item of where) {\n\t\tif (!isRecord(item)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (item.connector !== void 0 && item.connector !== \"AND\" && item.connector !== \"OR\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tvalidateWhereValue(model, item);\n\t}\n};\nconst validateDistinctFields = (model, fields) => {\n\tif (fields === void 0) return void 0;\n\tif (!Array.isArray(fields) || fields.length === 0) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tif (!fields.every((field) => typeof field === \"string\")) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tvalidateFields(model, fields);\n\treturn fields;\n};\nconst validateOrderBy = (model, orderBy) => {\n\tif (orderBy === void 0) return void 0;\n\tif (!Array.isArray(orderBy) || orderBy.length === 0) throw new DatabasePluginInputError(\"invalid-query\");\n\tconst fields = /* @__PURE__ */ new Set();\n\treturn orderBy.map((clause) => {\n\t\tif (!isRecord(clause) || typeof clause.field !== \"string\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tvalidateField(model, clause.field);\n\t\tif (!sortableFields[model].has(clause.field)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (clause.direction !== \"asc\" && clause.direction !== \"desc\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (clause.nulls !== void 0 && clause.nulls !== \"first\" && clause.nulls !== \"last\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (fields.has(clause.field)) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tfields.add(clause.field);\n\t\treturn clause;\n\t});\n};\nconst validateDistinctOn = (model, distinctOn, orderBy) => {\n\tif (distinctOn === void 0) return;\n\tif (!isRecord(distinctOn)) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tconst fields = validateDistinctFields(model, distinctOn.fields);\n\tif (fields === void 0 || orderBy === void 0) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tfor (const [index, field] of fields.entries()) if (orderBy[index]?.field !== field) throw new DatabasePluginInputError(\"invalid-distinct\");\n};\nconst validatePagination = (limit, offset) => {\n\tconst effectiveLimit = limit ?? 100;\n\tconst effectiveOffset = offset ?? 0;\n\tif (limit !== void 0 && (!Number.isSafeInteger(limit) || limit < 0) || offset !== void 0 && (!Number.isSafeInteger(offset) || offset < 0) || !Number.isSafeInteger(effectiveOffset + effectiveLimit)) throw new DatabasePluginInputError(\"invalid-pagination\");\n};\nconst validateBundlePagination = (options) => {\n\tif (!Number.isSafeInteger(options.limit) || options.limit <= 0 || options.page !== void 0 && (!Number.isSafeInteger(options.page) || options.page <= 0) || options.page !== void 0 && options.cursor !== void 0) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst cursor = options.cursor;\n\tif (cursor === void 0) return;\n\tif (!isRecord(cursor)) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst hasAfter = Object.hasOwn(cursor, \"after\");\n\tif (hasAfter === Object.hasOwn(cursor, \"before\")) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst value = hasAfter ? cursor.after : cursor.before;\n\tif (typeof value !== \"string\" || value.length === 0) throw new DatabasePluginInputError(\"invalid-pagination\");\n};\n//#endregion\nexport { validateBundlePagination, validateDistinctFields, validateDistinctOn, validateOrderBy, validatePagination, validateSelect, validateWhere };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { validateModel } from \"./databasePluginCrudValidationFields.mjs\";\nimport { selectRow, validateCreateData, validateResult } from \"./databasePluginCrudValidationRows.mjs\";\nimport { validateApiKeyUpdateData, validateBundleUpdateData, validateMutationWhere, validateReleaseCatalogUpdateData, validateReleaseTargetUpdate, validateReleaseUpdateData, validateUpdateWhere } from \"./databasePluginCrudValidationMutations.mjs\";\nimport { validateDistinctFields, validateDistinctOn, validateOrderBy, validatePagination, validateSelect, validateWhere } from \"./databasePluginCrudValidationQueries.mjs\";\n//#region src/databasePluginCrud.ts\nconst createDatabasePluginCrud = (implementation) => {\n\tasync function create(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateCreateData(input.model, input.data);\n\t\tif (input.onConflict !== void 0 && !(input.onConflict === \"ignore\" && (input.model === \"channels\" || input.model === \"api_keys\"))) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tvalidateSelect(input.model, input.select);\n\t\tconst row = await implementation.create(input);\n\t\tvalidateResult(input.model, row, input.select);\n\t\treturn selectRow(row, input);\n\t}\n\tasync function update(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateMutationWhere(input.where);\n\t\tvalidateUpdateWhere(input.model, input.where);\n\t\tif (input.model === \"bundles\") validateBundleUpdateData(input.update);\n\t\telse if (input.model === \"releases\") validateReleaseUpdateData(input.update);\n\t\telse if (input.model === \"release_catalogs\") validateReleaseCatalogUpdateData(input.update);\n\t\telse if (input.model === \"api_keys\") validateApiKeyUpdateData(input.update);\n\t\telse throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tvalidateSelect(input.model, input.select);\n\t\tif (input.model === \"bundles\") {} else if (input.model === \"releases\") await validateReleaseTargetUpdate(implementation, input);\n\t\tconst row = await implementation.update(input);\n\t\tif (row === null) return null;\n\t\tvalidateResult(input.model, row, input.select);\n\t\treturn selectRow(row, input);\n\t}\n\tasync function deleteRows(input) {\n\t\tvalidateModel(input.model);\n\t\tif (input.model !== \"bundles\" && input.model !== \"bundle_patches\" && input.model !== \"releases\" && input.model !== \"channels\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateMutationWhere(input.where);\n\t\tawait implementation.delete(input);\n\t}\n\tasync function count(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateDistinctFields(input.model, input.distinct);\n\t\tconst value = await implementation.count(input);\n\t\tif (!Number.isSafeInteger(value) || value < 0) throw new DatabasePluginInputError(\"invalid-result\");\n\t\treturn value;\n\t}\n\tasync function findOne(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateSelect(input.model, input.select);\n\t\tconst row = await implementation.findOne(input);\n\t\tif (row === null) return null;\n\t\tvalidateResult(input.model, row, input.select);\n\t\treturn selectRow(row, input);\n\t}\n\tasync function findMany(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidatePagination(input.limit, input.offset);\n\t\tvalidateSelect(input.model, input.select);\n\t\tconst validatedOrderBy = validateOrderBy(input.model, input.orderBy);\n\t\tvalidateDistinctOn(input.model, input.distinctOn, validatedOrderBy);\n\t\tconst normalizedInput = {\n\t\t\t...input,\n\t\t\torderBy: input.orderBy,\n\t\t\tlimit: input.limit ?? 100,\n\t\t\toffset: input.offset ?? 0\n\t\t};\n\t\tconst rows = await implementation.findMany(normalizedInput);\n\t\tif (!Array.isArray(rows)) throw new DatabasePluginInputError(\"invalid-result\");\n\t\trows.forEach((row) => validateResult(input.model, row, input.select));\n\t\treturn rows.map((row) => selectRow(row, input));\n\t}\n\treturn {\n\t\tcreate,\n\t\tupdate,\n\t\tdelete: deleteRows,\n\t\tcount,\n\t\tfindOne,\n\t\tfindMany\n\t};\n};\n//#endregion\nexport { createDatabasePluginCrud };\n", "import { createDatabasePluginCrud } from \"./databasePluginCrud.mjs\";\n//#region src/databasePluginTransaction.ts\nconst createTransactionDatabasePlugin = (implementation) => {\n\treturn createDatabasePluginCrud(implementation);\n};\n//#endregion\nexport { createTransactionDatabasePlugin };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isChannelText, isRecord } from \"./databasePluginCrudValidationFields.mjs\";\nimport { validateCreateData, validateResult } from \"./databasePluginCrudValidationRows.mjs\";\nimport { validateApiKeyUpdateData, validateBundleUpdateData, validateReleaseUpdateData } from \"./databasePluginCrudValidationMutations.mjs\";\nimport { createDatabasePluginCrud } from \"./databasePluginCrud.mjs\";\nimport { createTransactionDatabasePlugin } from \"./databasePluginTransaction.mjs\";\n//#region src/createDatabasePlugin.ts\nconst PAGE_SIZE = 100;\nconst compareChannelRows = (left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0;\nvar DatabaseAtomicCommitUnsupportedError = class extends Error {\n\tname = \"DatabaseAtomicCommitUnsupportedError\";\n\tconstructor(pluginName) {\n\t\tsuper(`Database plugin \"${pluginName}\" cannot atomically commit changes across models.`);\n\t\tthis.pluginName = pluginName;\n\t}\n};\n/**\n* Internal provider signal for a delete rejected by a live reference.\n*\n* Provider implementations throw this after translating their native\n* foreign-key or reference-condition error. The public database contract\n* observes only the indexed `referenced` commit conflict.\n*/\nvar DatabaseRowReferencedError = class extends Error {\n\tname = \"DatabaseRowReferencedError\";\n\tconstructor() {\n\t\tsuper(\"The database row is still referenced.\");\n\t}\n};\nvar DatabaseCommitConflictError = class extends Error {\n\tname = \"DatabaseCommitConflictError\";\n\tconstructor(result) {\n\t\tsuper(\"Database commit precondition failed.\");\n\t\tthis.result = result;\n\t}\n};\nconst toBundleWhere = (where) => {\n\tif (!where) return [];\n\tconst filters = [];\n\tif (where.platform !== void 0) filters.push({\n\t\tfield: \"platform\",\n\t\tvalue: where.platform\n\t});\n\tif (where.id?.eq !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\tvalue: where.id.eq\n\t});\n\tif (where.id?.gt !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"gt\",\n\t\tvalue: where.id.gt\n\t});\n\tif (where.id?.gte !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"gte\",\n\t\tvalue: where.id.gte\n\t});\n\tif (where.id?.lt !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"lt\",\n\t\tvalue: where.id.lt\n\t});\n\tif (where.id?.lte !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"lte\",\n\t\tvalue: where.id.lte\n\t});\n\tif (where.id?.in !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"in\",\n\t\tvalue: where.id.in\n\t});\n\treturn filters;\n};\nconst assertReleaseReferences = async (database, row) => {\n\tif (await database.findOne({\n\t\tmodel: \"channels\",\n\t\twhere: [{\n\t\t\tfield: \"id\",\n\t\t\tvalue: row.channel_id\n\t\t}]\n\t}) === null) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (row.bundle_id !== null) {\n\t\tconst bundle = await database.findOne({\n\t\t\tmodel: \"bundles\",\n\t\t\twhere: [{\n\t\t\t\tfield: \"id\",\n\t\t\t\tvalue: row.bundle_id\n\t\t\t}]\n\t\t});\n\t\tif (bundle === null || bundle.platform !== row.platform) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst applyChange = async (database, change, changeIndex) => {\n\tswitch (change.model) {\n\t\tcase \"bundles\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\tdata: change.row\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (await database.update({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}],\n\t\t\t\t\tupdate: change.update\n\t\t\t\t}) === null) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"not_found\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (await database.count({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t}) > 0) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"referenced\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tawait database.delete({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"releases\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait assertReleaseReferences(database, change.row);\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\tdata: change.row\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (await database.update({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}],\n\t\t\t\t\tupdate: change.update\n\t\t\t\t}) === null) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"not_found\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tawait database.delete({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"releaseCatalogs\":\n\t\t\tif (await database.findOne({\n\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\twhere: [{\n\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\tvalue: change.row.scope_key\n\t\t\t\t}]\n\t\t\t}) === null) await database.create({\n\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\tdata: change.row\n\t\t\t});\n\t\t\telse {\n\t\t\t\tconst { scope_key: _scopeKey, ...update } = change.row;\n\t\t\t\tawait database.update({\n\t\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\tvalue: change.row.scope_key\n\t\t\t\t\t}],\n\t\t\t\t\tupdate\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"bundlePatches\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"bundle_patches\",\n\t\t\t\t\tdata: change.row\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tawait database.delete({\n\t\t\t\t\tmodel: \"bundle_patches\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\tvalue: change.where.bundleId\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"channels\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"channels\",\n\t\t\t\t\tdata: change.row,\n\t\t\t\t\tonConflict: change.onConflict\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (await database.count({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"channel_id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t}) > 0) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"referenced\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tawait database.delete({\n\t\t\t\t\t\tmodel: \"channels\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof DatabaseRowReferencedError) throw new DatabaseCommitConflictError({\n\t\t\t\t\t\tcommitted: false,\n\t\t\t\t\t\tconflict: {\n\t\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\t\treason: \"referenced\"\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"analytics\":\n\t\t\tawait database.create({\n\t\t\t\tmodel: \"bundle_events\",\n\t\t\t\tdata: change.row\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"apiKeys\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\tdata: change.row,\n\t\t\t\t\tonConflict: change.onConflict\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (await database.update({\n\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}],\n\t\t\t\t\tupdate: { revoked_at_ms: change.update.revokedAtMs }\n\t\t\t\t}) === null) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"not_found\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t}\n};\nconst expectationVersion = async (database, expectation) => {\n\tif (expectation.model === \"releases\") return (await database.findOne({\n\t\tmodel: \"releases\",\n\t\twhere: [{\n\t\t\tfield: \"id\",\n\t\t\tvalue: expectation.id\n\t\t}],\n\t\tselect: [\"revision\"]\n\t}))?.revision ?? null;\n\treturn (await database.findOne({\n\t\tmodel: \"release_catalogs\",\n\t\twhere: [{\n\t\t\tfield: \"scope_key\",\n\t\t\tvalue: expectation.scopeKey\n\t\t}],\n\t\tselect: [\"generation\"]\n\t}))?.generation ?? null;\n};\nconst applyExpectations = async (database, expectations) => {\n\tfor (const expectation of expectations) {\n\t\tconst expectedVersion = expectation.model === \"releases\" ? expectation.revision : expectation.generation;\n\t\tconst actualVersion = await expectationVersion(database, expectation);\n\t\tif (actualVersion !== expectedVersion) throw new DatabaseCommitConflictError({\n\t\t\tcommitted: false,\n\t\t\tconflict: {\n\t\t\t\tactualVersion,\n\t\t\t\tchangeIndex: -1,\n\t\t\t\texpectedVersion,\n\t\t\t\tkey: expectation.model === \"releases\" ? expectation.id : expectation.scopeKey,\n\t\t\t\tmodel: expectation.model,\n\t\t\t\treason: \"version_conflict\"\n\t\t\t}\n\t\t});\n\t}\n};\nconst applyChanges = async (database, input) => {\n\tawait applyExpectations(database, input.expectations ?? []);\n\tfor (const [changeIndex, change] of input.changes.entries()) await applyChange(database, change, changeIndex);\n\treturn { committed: true };\n};\nconst hasOnlyKeys = (value, keys) => {\n\treturn Reflect.ownKeys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key));\n};\nconst validateWhere = (where, field, validateValue = (value) => typeof value === \"string\") => {\n\tif (!isRecord(where) || !hasOnlyKeys(where, [field]) || !validateValue(Reflect.get(where, field))) throw new DatabasePluginInputError(\"invalid-data\");\n};\nconst validateDatabaseChange = (change) => {\n\tif (!isRecord(change)) throw new DatabasePluginInputError(\"invalid-data\");\n\tswitch (change.model) {\n\t\tcase \"bundles\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateCreateData(\"bundles\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\",\n\t\t\t\t\t\"update\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\tvalidateBundleUpdateData(change.update);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"bundlePatches\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateCreateData(\"bundle_patches\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"bundleId\");\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"releases\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateCreateData(\"releases\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\",\n\t\t\t\t\t\"update\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\tvalidateReleaseUpdateData(change.update);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"releaseCatalogs\":\n\t\t\tif (change.operation !== \"put\" || !hasOnlyKeys(change, [\n\t\t\t\t\"model\",\n\t\t\t\t\"operation\",\n\t\t\t\t\"row\"\n\t\t\t])) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\tvalidateCreateData(\"release_catalogs\", change.row);\n\t\t\treturn;\n\t\tcase \"channels\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\",\n\t\t\t\t\t\"onConflict\"\n\t\t\t\t]) || change.onConflict !== \"ignore\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\t\tvalidateCreateData(\"channels\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\", isChannelText);\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"analytics\":\n\t\t\tif (change.operation !== \"insert\" || !hasOnlyKeys(change, [\n\t\t\t\t\"model\",\n\t\t\t\t\"operation\",\n\t\t\t\t\"row\"\n\t\t\t])) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\tvalidateCreateData(\"bundle_events\", change.row);\n\t\t\treturn;\n\t\tcase \"apiKeys\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\",\n\t\t\t\t\t\"onConflict\"\n\t\t\t\t]) || change.onConflict !== \"ignore\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\t\tvalidateCreateData(\"api_keys\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\",\n\t\t\t\t\t\"update\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\tif (!isRecord(change.update)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tif (!hasOnlyKeys(change.update, [\"revokedAtMs\"])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateApiKeyUpdateData({ revoked_at_ms: change.update.revokedAtMs });\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tdefault: throw new DatabasePluginInputError(\"invalid-model\");\n\t}\n};\nconst validateDatabaseCommitExpectation = (expectation) => {\n\tif (!isRecord(expectation)) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (expectation.model === \"releases\") {\n\t\tif (!hasOnlyKeys(expectation, [\n\t\t\t\"model\",\n\t\t\t\"id\",\n\t\t\t\"revision\"\n\t\t]) || typeof expectation.id !== \"string\" || !(expectation.revision === null || typeof expectation.revision === \"number\" && Number.isSafeInteger(expectation.revision) && expectation.revision >= 1)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\treturn;\n\t}\n\tif (expectation.model === \"releaseCatalogs\") {\n\t\tif (!hasOnlyKeys(expectation, [\n\t\t\t\"model\",\n\t\t\t\"scopeKey\",\n\t\t\t\"generation\"\n\t\t]) || typeof expectation.scopeKey !== \"string\" || !(expectation.generation === null || typeof expectation.generation === \"number\" && Number.isSafeInteger(expectation.generation) && expectation.generation >= 1)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\treturn;\n\t}\n\tthrow new DatabasePluginInputError(\"invalid-model\");\n};\nfunction validateDatabaseCommit(input) {\n\tif (!isRecord(input) || !Array.isArray(input.changes) || (Object.hasOwn(input, \"expectations\") ? !hasOnlyKeys(input, [\"changes\", \"expectations\"]) || !Array.isArray(input.expectations) : !hasOnlyKeys(input, [\"changes\"]))) throw new DatabasePluginInputError(\"invalid-data\");\n\tinput.changes.forEach(validateDatabaseChange);\n\tif (Array.isArray(input.expectations)) input.expectations.forEach(validateDatabaseCommitExpectation);\n}\nconst validateChannelInsertResult = (input, result) => {\n\tvalidateResult(\"channels\", result.row, void 0);\n\tif (typeof result.inserted !== \"boolean\" || result.row.name !== input.row.name || result.inserted && result.row.id !== input.row.id) throw new DatabasePluginInputError(\"invalid-result\");\n};\nconst validateChannelDeleteResult = (result) => {\n\tif (result.deleted) return;\n\tif (result.reason !== \"not_found\" && result.reason !== \"not_empty\") throw new DatabasePluginInputError(\"invalid-result\");\n};\nconst createDatabasePluginAdapter = (name, implementation) => {\n\tconst crud = createDatabasePluginCrud(implementation);\n\tconst transaction = implementation.transaction;\n\tconst executeCommit = implementation.commit ? implementation.commit : async (input) => {\n\t\tif (transaction) try {\n\t\t\treturn await transaction((database) => applyChanges(createTransactionDatabasePlugin(database), input));\n\t\t} catch (error) {\n\t\t\tif (error instanceof DatabaseCommitConflictError) return error.result;\n\t\t\tthrow error;\n\t\t}\n\t\tif ((input.expectations?.length ?? 0) > 0 || input.changes.length > 1 || input.changes.some((change) => change.model === \"channels\" && change.operation === \"delete\")) throw new DatabaseAtomicCommitUnsupportedError(name);\n\t\ttry {\n\t\t\treturn await applyChanges(crud, input);\n\t\t} catch (error) {\n\t\t\tif (error instanceof DatabaseCommitConflictError) return error.result;\n\t\t\tthrow error;\n\t\t}\n\t};\n\tconst commit = async (input) => {\n\t\tvalidateDatabaseCommit(input);\n\t\treturn executeCommit(input);\n\t};\n\tconst findApiKeyByHash = (database, hash) => database.findOne({\n\t\tmodel: \"api_keys\",\n\t\twhere: [{\n\t\t\tfield: \"hash\",\n\t\t\tvalue: hash\n\t\t}]\n\t});\n\treturn {\n\t\tmodels: {\n\t\t\tbundles: {\n\t\t\t\tfindById: (id) => crud.findOne({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: id\n\t\t\t\t\t}]\n\t\t\t\t}),\n\t\t\t\tfindMany: (query) => crud.findMany({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: toBundleWhere(query.where),\n\t\t\t\t\tlimit: query.limit,\n\t\t\t\t\toffset: query.offset,\n\t\t\t\t\torderBy: [query.orderBy]\n\t\t\t\t}),\n\t\t\t\tcount: (where) => crud.count({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: toBundleWhere(where)\n\t\t\t\t})\n\t\t\t},\n\t\t\tbundlePatches: { async findByBundleIds(bundleIds) {\n\t\t\t\tif (bundleIds.length === 0) return [];\n\t\t\t\tconst rows = [];\n\t\t\t\tfor (let offset = 0;; offset += PAGE_SIZE) {\n\t\t\t\t\tconst page = await crud.findMany({\n\t\t\t\t\t\tmodel: \"bundle_patches\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\t\toperator: \"in\",\n\t\t\t\t\t\t\tvalue: bundleIds\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tlimit: PAGE_SIZE,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\trows.push(...page);\n\t\t\t\t\tif (page.length < PAGE_SIZE) return rows;\n\t\t\t\t}\n\t\t\t} },\n\t\t\treleases: {\n\t\t\t\tfindById: (id) => crud.findOne({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: id\n\t\t\t\t\t}]\n\t\t\t\t}),\n\t\t\t\tfindMany(input) {\n\t\t\t\t\tif (!Number.isSafeInteger(input.limit) || input.limit <= 0 || input.afterReleaseId !== void 0 && input.beforeReleaseId !== void 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\t\t\tconst query = crud.findMany({\n\t\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\t\twhere: [\n\t\t\t\t\t\t\t...input.afterReleaseId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\t\toperator: \"gt\",\n\t\t\t\t\t\t\t\tvalue: input.afterReleaseId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.beforeReleaseId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\t\toperator: \"lt\",\n\t\t\t\t\t\t\t\tvalue: input.beforeReleaseId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.bundleId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\t\t\tvalue: input.bundleId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.channelId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"channel_id\",\n\t\t\t\t\t\t\t\tvalue: input.channelId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.enabled === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"enabled\",\n\t\t\t\t\t\t\t\tvalue: input.enabled\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.platform === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"platform\",\n\t\t\t\t\t\t\t\tvalue: input.platform\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.targetAppVersion === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"target_app_version\",\n\t\t\t\t\t\t\t\tvalue: input.targetAppVersion\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t],\n\t\t\t\t\t\tlimit: input.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tdirection: input.afterReleaseId === void 0 ? \"desc\" : \"asc\"\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\treturn input.afterReleaseId === void 0 ? query : query.then((rows) => [...rows].reverse());\n\t\t\t\t},\n\t\t\t\tfindManyByScope(input) {\n\t\t\t\t\tif (input.consistency !== \"strong\" || !Number.isSafeInteger(input.limit) || input.limit <= 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\t\t\treturn crud.findMany({\n\t\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\t\tvalue: input.scopeKey\n\t\t\t\t\t\t}, ...input.afterReleaseId === void 0 ? [] : [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\toperator: \"gt\",\n\t\t\t\t\t\t\tvalue: input.afterReleaseId\n\t\t\t\t\t\t}]],\n\t\t\t\t\t\tlimit: input.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tdirection: \"asc\"\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\treleaseCatalogs: {\n\t\t\t\tfindByScopeKey: (scopeKey) => crud.findOne({\n\t\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\tvalue: scopeKey\n\t\t\t\t\t}]\n\t\t\t\t}),\n\t\t\t\tfindMany(input) {\n\t\t\t\t\tif (!Number.isSafeInteger(input.limit) || input.limit <= 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\t\t\treturn crud.findMany({\n\t\t\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\t\t\twhere: input.afterScopeKey === void 0 ? [] : [{\n\t\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\t\toperator: \"gt\",\n\t\t\t\t\t\t\tvalue: input.afterScopeKey\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tlimit: input.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\t\tdirection: \"asc\"\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\tchannels: {\n\t\t\t\tasync insert(input) {\n\t\t\t\t\tif (input.onConflict !== \"returnExisting\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\t\t\tvalidateCreateData(\"channels\", input.row);\n\t\t\t\t\tconst result = await implementation.insertChannel(input);\n\t\t\t\t\tvalidateChannelInsertResult(input, result);\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\tasync list(_input) {\n\t\t\t\t\tconst channels = [];\n\t\t\t\t\tfor (let offset = 0;; offset += PAGE_SIZE) {\n\t\t\t\t\t\tconst page = await crud.findMany({\n\t\t\t\t\t\t\tmodel: \"channels\",\n\t\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\t\tfield: \"name\",\n\t\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\tlimit: PAGE_SIZE,\n\t\t\t\t\t\t\toffset\n\t\t\t\t\t\t});\n\t\t\t\t\t\tchannels.push(...page);\n\t\t\t\t\t\tif (page.length < PAGE_SIZE) {\n\t\t\t\t\t\t\tchannels.sort(compareChannelRows);\n\t\t\t\t\t\t\treturn { channels };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tasync delete(input) {\n\t\t\t\t\tif (!isChannelText(input.id)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\t\tconst result = await implementation.deleteChannel(input);\n\t\t\t\t\tvalidateChannelDeleteResult(result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tanalytics: {\n\t\t\t\tasync append(row) {\n\t\t\t\t\tawait crud.create({\n\t\t\t\t\t\tmodel: \"bundle_events\",\n\t\t\t\t\t\tdata: row\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tasync scan(input) {\n\t\t\t\t\tconst rows = [];\n\t\t\t\t\tfor (let offset = 0; rows.length < input.limit; offset += PAGE_SIZE) {\n\t\t\t\t\t\tconst page = await crud.findMany({\n\t\t\t\t\t\t\tmodel: \"bundle_events\",\n\t\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\t\tfield: \"received_at_ms\",\n\t\t\t\t\t\t\t\toperator: \"lt\",\n\t\t\t\t\t\t\t\tvalue: input.beforeReceivedAtMs\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\t\tfield: \"received_at_ms\",\n\t\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\tlimit: PAGE_SIZE,\n\t\t\t\t\t\t\toffset\n\t\t\t\t\t\t});\n\t\t\t\t\t\trows.push(...page.filter((row) => input.after === void 0 || row.received_at_ms > input.after.receivedAtMs || row.received_at_ms === input.after.receivedAtMs && row.id > input.after.id));\n\t\t\t\t\t\tif (page.length < PAGE_SIZE) break;\n\t\t\t\t\t}\n\t\t\t\t\treturn rows.slice(0, input.limit);\n\t\t\t\t}\n\t\t\t},\n\t\t\tapiKeys: {\n\t\t\t\tasync create(row) {\n\t\t\t\t\tconst run = async (database) => {\n\t\t\t\t\t\tif (await findApiKeyByHash(database, row.hash) !== null) return \"existing\";\n\t\t\t\t\t\tawait database.create({\n\t\t\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\t\t\tdata: row\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn \"created\";\n\t\t\t\t\t};\n\t\t\t\t\treturn transaction ? transaction((database) => run(createTransactionDatabasePlugin(database))) : run(crud);\n\t\t\t\t},\n\t\t\t\tfindByHash: (hash) => findApiKeyByHash(crud, hash),\n\t\t\t\tlist: () => crud.findMany({\n\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\torderBy: [{\n\t\t\t\t\t\tfield: \"created_at_ms\",\n\t\t\t\t\t\tdirection: \"desc\"\n\t\t\t\t\t}, {\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t}],\n\t\t\t\t\tlimit: Number.MAX_SAFE_INTEGER,\n\t\t\t\t\toffset: 0\n\t\t\t\t}),\n\t\t\t\tasync revoke({ id, revokedAtMs }) {\n\t\t\t\t\treturn crud.update({\n\t\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tvalue: id\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tupdate: { revoked_at_ms: revokedAtMs }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcommit,\n\t\t...implementation.dispose ? { dispose: implementation.dispose } : {}\n\t};\n};\nconst createDatabasePlugin = (options) => ({ ...options });\n//#endregion\nexport { DatabaseAtomicCommitUnsupportedError, DatabaseRowReferencedError, createDatabasePlugin, createDatabasePluginAdapter };\n", "//#region src/createStoragePlugin.ts\nconst createStoragePlugin = (options) => ({ ...options });\nfunction assertStorageOperations(plugin, operations) {\n\tfor (const operation of operations) if (typeof plugin[operation] !== \"function\") throw new Error(`Storage plugin \"${plugin.name}\" does not implement ${operation}.`);\n}\n//#endregion\nexport { assertStorageOperations, createStoragePlugin };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isDatabaseMetadataObject } from \"./databaseJsonValue.mjs\";\nimport { stripBundleArtifactMetadata } from \"@hot-updater/core\";\n//#region src/databaseMetadata.ts\nconst bundleMetadataToRow = (metadata) => {\n\tconst value = stripBundleArtifactMetadata(metadata);\n\tif (value === void 0) return {};\n\tif (!isDatabaseMetadataObject(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\treturn value;\n};\n//#endregion\nexport { bundleMetadataToRow };\n", "import { bundleMetadataToRow } from \"./databaseMetadata.mjs\";\nimport { getAssetBaseStorageUri, getBundlePatches, getManifestFileHash, getManifestStorageUri, stripBundleArtifactMetadata } from \"@hot-updater/core\";\n//#region src/databaseRows.ts\nconst releaseToRow = (release, scopeKey) => ({\n\tid: release.id,\n\trevision: release.revision,\n\tscope_key: scopeKey,\n\tchannel_id: release.channelId,\n\tplatform: release.platform,\n\tkind: release.kind,\n\tbundle_id: release.bundleId,\n\tstrategy: release.strategy,\n\ttarget_app_version: release.targetAppVersion,\n\tfingerprint_hash: release.fingerprintHash,\n\tenabled: release.enabled,\n\tshould_force_update: release.shouldForceUpdate,\n\tmessage: release.message,\n\trollout_cohort_count: release.rolloutCohortCount,\n\ttarget_cohorts: release.targetCohorts,\n\toperation: release.operation,\n\tsource_release_id: release.sourceReleaseId,\n\tcreated_at_ms: release.createdAtMs,\n\tupdated_at_ms: release.updatedAtMs\n});\nconst releaseRowToRelease = (row) => ({\n\tid: row.id,\n\trevision: row.revision,\n\tchannelId: row.channel_id,\n\tplatform: row.platform,\n\tkind: row.kind,\n\tbundleId: row.bundle_id,\n\tstrategy: row.strategy,\n\ttargetAppVersion: row.target_app_version,\n\tfingerprintHash: row.fingerprint_hash,\n\tenabled: row.enabled,\n\tshouldForceUpdate: row.should_force_update,\n\tmessage: row.message,\n\trolloutCohortCount: row.rollout_cohort_count,\n\ttargetCohorts: row.target_cohorts,\n\toperation: row.operation,\n\tsourceReleaseId: row.source_release_id,\n\tcreatedAtMs: row.created_at_ms,\n\tupdatedAtMs: row.updated_at_ms\n});\nconst BundleRowHydrationErrorReason = {\n\tduplicatePatchId: \"duplicate_patch_id\",\n\torphanPatchOwner: \"orphan_patch_owner\",\n\torphanPatchBase: \"orphan_patch_base\"\n};\nvar BundleRowHydrationError = class extends Error {\n\tname = \"BundleRowHydrationError\";\n\treason;\n\tpatchId;\n\tbundleId;\n\tconstructor({ reason, patchId, bundleId }) {\n\t\tsuper(`Cannot hydrate bundle rows: ${reason} for patch \"${patchId}\" and bundle \"${bundleId}\".`);\n\t\tthis.reason = reason;\n\t\tthis.patchId = patchId;\n\t\tthis.bundleId = bundleId;\n\t}\n};\nconst bundleToRow = (bundle) => {\n\tconst metadata = bundleMetadataToRow(bundle.metadata);\n\treturn {\n\t\tid: bundle.id,\n\t\tplatform: bundle.platform,\n\t\tfile_hash: bundle.fileHash,\n\t\tgit_commit_hash: bundle.gitCommitHash,\n\t\tstorage_uri: bundle.storageUri,\n\t\tarchive_byte_size: bundle.archiveByteSize,\n\t\tmetadata,\n\t\tmanifest_storage_uri: getManifestStorageUri(bundle),\n\t\tmanifest_file_hash: getManifestFileHash(bundle),\n\t\tasset_base_storage_uri: getAssetBaseStorageUri(bundle)\n\t};\n};\nconst bundleToPatchRows = (bundle) => getBundlePatches(bundle).map((patch, orderIndex) => ({\n\tid: `${bundle.id}:${patch.baseBundleId}`,\n\tbundle_id: bundle.id,\n\tbase_bundle_id: patch.baseBundleId,\n\tbase_file_hash: patch.baseFileHash,\n\tpatch_file_hash: patch.patchFileHash,\n\tpatch_storage_uri: patch.patchStorageUri,\n\tbyte_size: patch.byteSize,\n\torder_index: orderIndex\n}));\nconst comparePatchRows = (left, right) => left.order_index - right.order_index || left.id.localeCompare(right.id);\nconst patchRowToArtifact = (row) => ({\n\tbaseBundleId: row.base_bundle_id,\n\tbaseFileHash: row.base_file_hash,\n\tbyteSize: row.byte_size,\n\tpatchFileHash: row.patch_file_hash,\n\tpatchStorageUri: row.patch_storage_uri\n});\nconst rowToBundle = (row, patchRows = []) => {\n\tconst patches = patchRows.slice().sort(comparePatchRows).map(patchRowToArtifact);\n\treturn {\n\t\tid: row.id,\n\t\tplatform: row.platform,\n\t\tfileHash: row.file_hash,\n\t\tgitCommitHash: row.git_commit_hash,\n\t\tstorageUri: row.storage_uri,\n\t\tarchiveByteSize: row.archive_byte_size,\n\t\tmetadata: stripBundleArtifactMetadata(row.metadata),\n\t\tmanifestStorageUri: row.manifest_storage_uri,\n\t\tmanifestFileHash: row.manifest_file_hash,\n\t\tassetBaseStorageUri: row.asset_base_storage_uri,\n\t\tpatches\n\t};\n};\nconst rowsToBundles = (bundleRows, patchRows, referencedBundleRows) => {\n\tconst ownerIds = new Set(bundleRows.map(({ id }) => id));\n\tconst baseIds = new Set(ownerIds);\n\tfor (const row of referencedBundleRows) baseIds.add(row.id);\n\tconst patchIds = /* @__PURE__ */ new Set();\n\tconst patchesByOwner = /* @__PURE__ */ new Map();\n\tfor (const patch of patchRows) {\n\t\tif (patchIds.has(patch.id)) throw new BundleRowHydrationError({\n\t\t\treason: BundleRowHydrationErrorReason.duplicatePatchId,\n\t\t\tpatchId: patch.id,\n\t\t\tbundleId: patch.bundle_id\n\t\t});\n\t\tpatchIds.add(patch.id);\n\t\tif (!ownerIds.has(patch.bundle_id)) throw new BundleRowHydrationError({\n\t\t\treason: BundleRowHydrationErrorReason.orphanPatchOwner,\n\t\t\tpatchId: patch.id,\n\t\t\tbundleId: patch.bundle_id\n\t\t});\n\t\tif (!baseIds.has(patch.base_bundle_id)) throw new BundleRowHydrationError({\n\t\t\treason: BundleRowHydrationErrorReason.orphanPatchBase,\n\t\t\tpatchId: patch.id,\n\t\t\tbundleId: patch.base_bundle_id\n\t\t});\n\t\tconst ownerPatches = patchesByOwner.get(patch.bundle_id) ?? [];\n\t\townerPatches.push(patch);\n\t\tpatchesByOwner.set(patch.bundle_id, ownerPatches);\n\t}\n\treturn bundleRows.map((row) => rowToBundle(row, patchesByOwner.get(row.id) ?? []));\n};\n//#endregion\nexport { BundleRowHydrationError, BundleRowHydrationErrorReason, bundleToPatchRows, bundleToRow, releaseRowToRelease, releaseToRow, rowToBundle, rowsToBundles };\n", "import { bundleMetadataToRow } from \"./databaseMetadata.mjs\";\nimport { getBundlePatches } from \"@hot-updater/core\";\n//#region src/databaseClientUpdates.ts\nvar DatabasePatchUpdateUnsupportedError = class extends Error {\n\tname = \"DatabasePatchUpdateUnsupportedError\";\n\tconstructor(bundleId, pluginName) {\n\t\tsuper(`Database plugin \"${pluginName}\" cannot atomically replace patches for bundle \"${bundleId}\".`);\n\t\tthis.bundleId = bundleId;\n\t\tthis.pluginName = pluginName;\n\t}\n};\nconst bundleUpdateToRow = (update, _channelId) => {\n\treturn {\n\t\t...update.platform !== void 0 ? { platform: update.platform } : {},\n\t\t...update.fileHash !== void 0 ? { file_hash: update.fileHash } : {},\n\t\t...update.gitCommitHash !== void 0 ? { git_commit_hash: update.gitCommitHash } : {},\n\t\t...update.storageUri !== void 0 ? { storage_uri: update.storageUri } : {},\n\t\t...update.archiveByteSize !== void 0 ? { archive_byte_size: update.archiveByteSize } : {},\n\t\t...update.metadata !== void 0 ? { metadata: bundleMetadataToRow(update.metadata) } : {},\n\t\t...update.manifestStorageUri !== void 0 ? { manifest_storage_uri: update.manifestStorageUri } : {},\n\t\t...update.manifestFileHash !== void 0 ? { manifest_file_hash: update.manifestFileHash } : {},\n\t\t...update.assetBaseStorageUri !== void 0 ? { asset_base_storage_uri: update.assetBaseStorageUri } : {}\n\t};\n};\nconst bundleUpdateToPatchRows = (bundleId, update) => getBundlePatches({ patches: update.patches }).map((patch, orderIndex) => ({\n\tid: `${bundleId}:${patch.baseBundleId}`,\n\tbundle_id: bundleId,\n\tbase_bundle_id: patch.baseBundleId,\n\tbase_file_hash: patch.baseFileHash,\n\tpatch_file_hash: patch.patchFileHash,\n\tpatch_storage_uri: patch.patchStorageUri,\n\tbyte_size: patch.byteSize,\n\torder_index: orderIndex\n}));\n//#endregion\nexport { DatabasePatchUpdateUnsupportedError, bundleUpdateToPatchRows, bundleUpdateToRow };\n", "import { calculatePagination } from \"./calculatePagination.mjs\";\nimport { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { validateBundlePagination } from \"./databasePluginCrudValidationQueries.mjs\";\nimport { rowsToBundles } from \"./databaseRows.mjs\";\n//#region src/databaseClientReads.ts\nconst PAGE_SIZE = 100;\nconst mergeIdFilter = (where, id) => ({\n\t...where,\n\tid: {\n\t\t...where?.id,\n\t\t...id\n\t}\n});\nconst loadBundleRows = async (database, where) => {\n\tconst finiteIds = where?.id?.in;\n\tif (finiteIds) {\n\t\tif (finiteIds.length === 0) return [];\n\t\treturn [...await database.models.bundles.findMany({\n\t\t\twhere,\n\t\t\tlimit: finiteIds.length,\n\t\t\toffset: 0,\n\t\t\torderBy: {\n\t\t\t\tfield: \"id\",\n\t\t\t\tdirection: \"asc\"\n\t\t\t}\n\t\t})];\n\t}\n\tconst [cutoff] = await database.models.bundles.findMany({\n\t\twhere,\n\t\tlimit: 1,\n\t\toffset: 0,\n\t\torderBy: {\n\t\t\tfield: \"id\",\n\t\t\tdirection: \"desc\"\n\t\t}\n\t});\n\tif (!cutoff) return [];\n\tconst rows = [];\n\tlet after;\n\tfor (;;) {\n\t\tconst page = await database.models.bundles.findMany({\n\t\t\twhere: mergeIdFilter(where, {\n\t\t\t\tlte: cutoff.id,\n\t\t\t\t...after ? { gt: after } : {}\n\t\t\t}),\n\t\t\tlimit: PAGE_SIZE,\n\t\t\toffset: 0,\n\t\t\torderBy: {\n\t\t\t\tfield: \"id\",\n\t\t\t\tdirection: \"asc\"\n\t\t\t}\n\t\t});\n\t\trows.push(...page);\n\t\tif (page.length < PAGE_SIZE) return rows;\n\t\tafter = page.at(-1)?.id;\n\t}\n};\nconst hydrateRows = async (database, ownerRows) => {\n\tconst patchRows = await database.models.bundlePatches.findByBundleIds(ownerRows.map(({ id }) => id));\n\tconst ownerIds = new Set(ownerRows.map(({ id }) => id));\n\tconst referencedIds = [...new Set(patchRows.map(({ base_bundle_id }) => base_bundle_id).filter((id) => !ownerIds.has(id)))];\n\treturn rowsToBundles(ownerRows, patchRows, referencedIds.length === 0 ? [] : await loadBundleRows(database, { id: { in: referencedIds } }));\n};\nconst cursorIdFilter = (cursor, direction) => {\n\tif (cursor?.after) return { [direction === \"desc\" ? \"lt\" : \"gt\"]: cursor.after };\n\tif (cursor?.before) return { [direction === \"desc\" ? \"gt\" : \"lt\"]: cursor.before };\n};\nconst responsePage = async (database, options) => {\n\tvalidateBundlePagination(options);\n\tconst direction = options.orderBy?.direction ?? \"desc\";\n\tconst offset = options.page ? Math.max(0, options.page - 1) * options.limit : 0;\n\tconst cursor = options.page ? void 0 : options.cursor;\n\tconst queryLimit = cursor ? options.limit + 1 : options.limit;\n\tif (!Number.isSafeInteger(offset) || !Number.isSafeInteger(queryLimit) || !Number.isSafeInteger(offset + queryLimit)) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst cursorFilter = cursorIdFilter(cursor, direction);\n\tconst where = cursorFilter ? mergeIdFilter(options.where, cursorFilter) : options.where;\n\tconst queryDirection = cursor?.before ? direction === \"desc\" ? \"asc\" : \"desc\" : direction;\n\tconst [queriedRows, total] = await Promise.all([database.models.bundles.findMany({\n\t\twhere,\n\t\tlimit: queryLimit,\n\t\toffset,\n\t\torderBy: {\n\t\t\tfield: \"id\",\n\t\t\tdirection: queryDirection\n\t\t}\n\t}), database.models.bundles.count(options.where)]);\n\tconst hasMore = cursor ? queriedRows.length > options.limit : false;\n\tconst pageRows = cursor ? queriedRows.slice(0, options.limit) : queriedRows;\n\tconst ownerRows = cursor?.before ? pageRows.toReversed() : pageRows;\n\tconst pagination = calculatePagination(total, {\n\t\tlimit: options.limit,\n\t\toffset\n\t});\n\tconst hasPreviousPage = cursor ? Boolean(cursor.after) || hasMore : pagination.hasPreviousPage;\n\tconst hasNextPage = cursor ? Boolean(cursor.before) || hasMore : pagination.hasNextPage;\n\tconst firstId = ownerRows[0]?.id;\n\tconst lastId = ownerRows.at(-1)?.id;\n\treturn {\n\t\tdata: await hydrateRows(database, ownerRows),\n\t\tpagination: {\n\t\t\t...pagination,\n\t\t\thasNextPage,\n\t\t\thasPreviousPage,\n\t\t\t...hasNextPage && lastId ? { nextCursor: lastId } : {},\n\t\t\t...hasPreviousPage && firstId ? { previousCursor: firstId } : {},\n\t\t\t...!firstId && cursor?.after ? { previousCursor: cursor.after } : {},\n\t\t\t...!lastId && cursor?.before ? { nextCursor: cursor.before } : {}\n\t\t}\n\t};\n};\n//#endregion\nexport { hydrateRows, responsePage };\n", "import { DatabaseAtomicCommitUnsupportedError, DatabaseRowReferencedError } from \"./createDatabasePlugin.mjs\";\nimport { bundleToPatchRows, bundleToRow } from \"./databaseRows.mjs\";\nimport { hydrateRows, responsePage } from \"./databaseClientReads.mjs\";\nimport { DatabasePatchUpdateUnsupportedError, bundleUpdateToPatchRows, bundleUpdateToRow } from \"./databaseClientUpdates.mjs\";\n//#region src/databaseClient.ts\nvar DatabaseBundleNotFoundError = class extends Error {\n\tname = \"DatabaseBundleNotFoundError\";\n\tconstructor(bundleId) {\n\t\tsuper(`Bundle \"${bundleId}\" was not found.`);\n\t\tthis.bundleId = bundleId;\n\t}\n};\nvar DatabasePatchInsertUnsupportedError = class extends Error {\n\tname = \"DatabasePatchInsertUnsupportedError\";\n\tconstructor(bundleId, pluginName) {\n\t\tsuper(`Database plugin \"${pluginName}\" cannot atomically insert patches for bundle \"${bundleId}\".`);\n\t\tthis.bundleId = bundleId;\n\t\tthis.pluginName = pluginName;\n\t}\n};\nconst insertChanges = (bundle) => [{\n\tmodel: \"bundles\",\n\toperation: \"insert\",\n\trow: bundleToRow(bundle)\n}, ...bundleToPatchRows(bundle).map((row) => ({\n\tmodel: \"bundlePatches\",\n\toperation: \"insert\",\n\trow\n}))];\nconst updateChanges = (bundleId, update) => {\n\tconst rowUpdate = bundleUpdateToRow(update);\n\treturn [{\n\t\tmodel: \"bundles\",\n\t\toperation: \"update\",\n\t\twhere: { id: bundleId },\n\t\tupdate: rowUpdate\n\t}, ...Object.hasOwn(update, \"patches\") ? [{\n\t\tmodel: \"bundlePatches\",\n\t\toperation: \"delete\",\n\t\twhere: { bundleId }\n\t}, ...bundleUpdateToPatchRows(bundleId, update).map((row) => ({\n\t\tmodel: \"bundlePatches\",\n\t\toperation: \"insert\",\n\t\trow\n\t}))] : []];\n};\nconst deleteChanges = (bundleId) => [{\n\tmodel: \"bundles\",\n\toperation: \"delete\",\n\twhere: { id: bundleId }\n}];\nconst createDatabaseClient = (plugin) => {\n\tconst getBundleById = async (id) => {\n\t\tconst row = await plugin.models.bundles.findById(id);\n\t\tif (!row) return null;\n\t\treturn (await hydrateRows(plugin, [row]))[0] ?? null;\n\t};\n\tconst insertChannel = (input) => plugin.models.channels.insert(input);\n\tconst createMutationClient = (commit) => ({\n\t\tgetBundleById,\n\t\tgetBundles: (options) => responsePage(plugin, options),\n\t\tasync getChannels() {\n\t\t\treturn (await plugin.models.channels.list({})).channels;\n\t\t},\n\t\tinsertChannel,\n\t\tasync insertBundle(bundle) {\n\t\t\ttry {\n\t\t\t\tawait commit(insertChanges(bundle));\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof DatabaseAtomicCommitUnsupportedError && bundleToPatchRows(bundle).length > 0) throw new DatabasePatchInsertUnsupportedError(bundle.id, plugin.name);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tasync updateBundleById(bundleId, update) {\n\t\t\ttry {\n\t\t\t\tif (!(await commit(updateChanges(bundleId, update))).committed) throw new DatabaseBundleNotFoundError(bundleId);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof DatabaseAtomicCommitUnsupportedError && Object.hasOwn(update, \"patches\")) throw new DatabasePatchUpdateUnsupportedError(bundleId, plugin.name);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tasync deleteBundleById(bundleId) {\n\t\t\tconst result = await commit(deleteChanges(bundleId));\n\t\t\tif (!result.committed && result.conflict.reason === \"referenced\") throw new DatabaseRowReferencedError();\n\t\t}\n\t});\n\tconst runMutation = async (operation) => {\n\t\tconst changes = [];\n\t\tconst result = await operation(createMutationClient(async (input) => {\n\t\t\tchanges.push(...input);\n\t\t\treturn { committed: true };\n\t\t}));\n\t\tif (changes.length === 0) return result;\n\t\tconst commitResult = await plugin.commit({ changes });\n\t\tif (!commitResult.committed) {\n\t\t\tconst change = changes[commitResult.conflict.changeIndex];\n\t\t\tif (commitResult.conflict.reason === \"referenced\" && change?.model === \"bundles\" && change.operation === \"delete\") throw new DatabaseRowReferencedError();\n\t\t\tif (change?.model === \"bundles\" && change.operation === \"update\") throw new DatabaseBundleNotFoundError(change.where.id);\n\t\t\tthrow new Error(`Database plugin \"${plugin.name}\" rejected a commit.`);\n\t\t}\n\t\treturn result;\n\t};\n\treturn {\n\t\t...createMutationClient((changes) => plugin.commit({ changes })),\n\t\tdeleteChannel: (input) => plugin.models.channels.delete(input),\n\t\tmutate: runMutation\n\t};\n};\n//#endregion\nexport { DatabaseBundleNotFoundError, DatabasePatchInsertUnsupportedError, createDatabaseClient };\n", "//#region ../../node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.js\nconst LETTER_DASH_NUMBER = \"[a-zA-Z0-9-]\";\nconst NUMERIC_IDENTIFIER = String.raw`0|[1-9]\\d*`;\nconst NUMERIC_IDENTIFIER_LOOSE = String.raw`\\d+`;\nconst NON_NUMERIC_IDENTIFIER = String.raw`\\d*[a-zA-Z-]${LETTER_DASH_NUMBER}*`;\nconst MAIN_VERSION = String.raw`(${NUMERIC_IDENTIFIER})\\.(${NUMERIC_IDENTIFIER})\\.(${NUMERIC_IDENTIFIER})`;\nconst MAIN_VERSION_LOOSE = String.raw`(${NUMERIC_IDENTIFIER_LOOSE})\\.(${NUMERIC_IDENTIFIER_LOOSE})\\.(${NUMERIC_IDENTIFIER_LOOSE})`;\nconst PRERELEASE_IDENTIFIER = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER})`;\nconst PRERELEASE_IDENTIFIER_LOOSE = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER_LOOSE})`;\nconst PRERELEASE = String.raw`(?:-(${PRERELEASE_IDENTIFIER}(?:\\.${PRERELEASE_IDENTIFIER})*))`;\nconst PRERELEASE_LOOSE = String.raw`(?:-?(${PRERELEASE_IDENTIFIER_LOOSE}(?:\\.${PRERELEASE_IDENTIFIER_LOOSE})*))`;\nconst BUILD_IDENTIFIER = `${LETTER_DASH_NUMBER}+`;\nconst BUILD = String.raw`(?:\\+(${BUILD_IDENTIFIER}(?:\\.${BUILD_IDENTIFIER})*))`;\nconst FULL_PLAIN = `v?${MAIN_VERSION}${PRERELEASE}?${BUILD}?`;\nconst LOOSE_PLAIN = String.raw`[v=\\s]*${MAIN_VERSION_LOOSE}${PRERELEASE_LOOSE}?${BUILD}?`;\nconst GREATER_LESS_THAN = \"((?:<|>)?=?)\";\nconst XRANGE_IDENTIFIER = String.raw`${NUMERIC_IDENTIFIER}|x|X|\\*`;\nconst XRANGE_IDENTIFIER_LOOSE = String.raw`${NUMERIC_IDENTIFIER_LOOSE}|x|X|\\*`;\nconst XRANGE_PLAIN = String.raw`[v=\\s]*(${XRANGE_IDENTIFIER})(?:\\.(${XRANGE_IDENTIFIER})(?:\\.(${XRANGE_IDENTIFIER})(?:${PRERELEASE})?${BUILD}?)?)?`;\nconst XRANGE_PLAIN_LOOSE = String.raw`[v=\\s]*(${XRANGE_IDENTIFIER_LOOSE})(?:\\.(${XRANGE_IDENTIFIER_LOOSE})(?:\\.(${XRANGE_IDENTIFIER_LOOSE})(?:${PRERELEASE_LOOSE})?${BUILD}?)?)?`;\nconst LONE_TILDE = \"(?:~>?)\";\nconst LONE_CARET = String.raw`(?:\\^)`;\nconst COERCE_PLAIN = String.raw`(^|[^\\d])(\\d{1,${16}})(?:\\.(\\d{1,${16}}))?(?:\\.(\\d{1,${16}}))?`;\nconst COERCE = String.raw`${COERCE_PLAIN}(?:$|[^\\d])`;\nconst COERCE_FULL = String.raw`${COERCE_PLAIN}(?:${PRERELEASE})?(?:${BUILD})?(?:$|[^\\d])`;\nfunction makeSafeRegexSource(source) {\n\tconst replacements = [\n\t\t[String.raw`\\s`, 1],\n\t\t[String.raw`\\d`, 256],\n\t\t[LETTER_DASH_NUMBER, 250]\n\t];\n\tfor (const [token, maximum] of replacements) source = source.split(`${token}*`).join(`${token}{0,${maximum}}`).split(`${token}+`).join(`${token}{1,${maximum}}`);\n\treturn source;\n}\nfunction safeRegex(source, flags) {\n\treturn new RegExp(makeSafeRegexSource(source), flags);\n}\nconst NUMERIC$1 = /^\\d+$/;\nfunction compareIdentifiers(left, right) {\n\tif (typeof left === \"number\" && typeof right === \"number\") return left === right ? 0 : left < right ? -1 : 1;\n\tconst leftNumeric = NUMERIC$1.test(String(left));\n\tconst rightNumeric = NUMERIC$1.test(String(right));\n\tconst normalizedLeft = leftNumeric ? Number(left) : left;\n\tconst normalizedRight = rightNumeric ? Number(right) : right;\n\treturn normalizedLeft === normalizedRight ? 0 : leftNumeric && !rightNumeric ? -1 : rightNumeric && !leftNumeric ? 1 : normalizedLeft < normalizedRight ? -1 : 1;\n}\nconst FULL = safeRegex(`^${FULL_PLAIN}$`);\nconst LOOSE = safeRegex(`^${LOOSE_PLAIN}$`);\nsafeRegex(`^${PRERELEASE}$`);\nsafeRegex(`^${PRERELEASE_LOOSE}$`);\nconst COERCE_EXACT = safeRegex(COERCE);\nconst COERCE_FULL_EXACT = safeRegex(COERCE_FULL);\nconst NUMERIC = /^\\d+$/;\nfunction formatComparableVersion(version) {\n\tconst base = `${version.major}.${version.minor}.${version.patch}`;\n\treturn version.prerelease?.length ? `${base}-${version.prerelease.join(\".\")}` : base;\n}\nfunction formatFullVersion(version) {\n\tconst comparable = formatComparableVersion(version);\n\treturn version.build?.length ? `${comparable}+${version.build.join(\".\")}` : comparable;\n}\nfunction parse(version, options = {}) {\n\tif (typeof version !== \"string\") return version;\n\tif (version.length > 256) throw new TypeError(`Version exceeds the maximum length of 256 characters`);\n\tconst match = version.trim().match(options.loose ? LOOSE : FULL);\n\tif (!match) throw new TypeError(`Invalid version syntax: ${version}`);\n\tconst major = Number(match[1]);\n\tconst minor = Number(match[2]);\n\tconst patch = Number(match[3]);\n\tif (major > Number.MAX_SAFE_INTEGER || major < 0) throw new TypeError(`Invalid major version: ${match[1]}`);\n\tif (minor > Number.MAX_SAFE_INTEGER || minor < 0) throw new TypeError(`Invalid minor version: ${match[2]}`);\n\tif (patch > Number.MAX_SAFE_INTEGER || patch < 0) throw new TypeError(`Invalid patch version: ${match[3]}`);\n\tconst prerelease = match[4] ? match[4].split(\".\").map((identifier) => {\n\t\tif (NUMERIC.test(identifier)) {\n\t\t\tconst numeric = Number(identifier);\n\t\t\tif (numeric >= 0 && numeric < Number.MAX_SAFE_INTEGER) return numeric;\n\t\t}\n\t\treturn identifier;\n\t}) : void 0;\n\treturn {\n\t\tbuild: match[5]?.split(\".\"),\n\t\tmajor,\n\t\tminor,\n\t\tpatch,\n\t\tprerelease\n\t};\n}\nfunction tryParse(version, options = {}) {\n\ttry {\n\t\treturn parse(version, options);\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction compareMainParsed(left, right) {\n\treturn left.major === right.major ? left.minor === right.minor ? left.patch === right.patch ? 0 : left.patch < right.patch ? -1 : 1 : left.minor < right.minor ? -1 : 1 : left.major < right.major ? -1 : 1;\n}\nfunction comparePrereleaseParsed(left, right) {\n\tconst leftPrerelease = left.prerelease;\n\tconst rightPrerelease = right.prerelease;\n\tif (leftPrerelease?.length && !rightPrerelease?.length) return -1;\n\tif (!leftPrerelease?.length && rightPrerelease?.length) return 1;\n\tif (!leftPrerelease?.length && !rightPrerelease?.length) return 0;\n\tfor (let index = 0;; index++) {\n\t\tconst leftIdentifier = leftPrerelease?.[index];\n\t\tconst rightIdentifier = rightPrerelease?.[index];\n\t\tif (leftIdentifier === void 0 && rightIdentifier === void 0) return 0;\n\t\tif (rightIdentifier === void 0) return 1;\n\t\tif (leftIdentifier === void 0) return -1;\n\t\tif (leftIdentifier !== rightIdentifier) return compareIdentifiers(leftIdentifier, rightIdentifier);\n\t}\n}\nfunction compareParsed(left, right) {\n\treturn compareMainParsed(left, right) || comparePrereleaseParsed(left, right);\n}\nfunction coerceParsedVersion(value, options = {}) {\n\tif (typeof value === \"object\") return value;\n\tconst input = typeof value === \"number\" ? String(value) : value;\n\tif (typeof input !== \"string\") return null;\n\tlet match = null;\n\tif (options.rtl) {\n\t\tconst expression = safeRegex(options.includePrerelease ? COERCE_FULL : COERCE, \"g\");\n\t\tlet next;\n\t\twhile ((next = expression.exec(input)) && (!match || match.index + match[0].length !== input.length)) {\n\t\t\tif (!match || next.index + next[0].length !== match.index + match[0].length) match = next;\n\t\t\texpression.lastIndex = next.index + next[1].length + next[2].length;\n\t\t}\n\t} else match = (options.includePrerelease ? COERCE_FULL_EXACT : COERCE_EXACT).exec(input);\n\tif (!match) return null;\n\tconst major = match[2];\n\treturn tryParse(`${major}.${match[3] || \"0\"}.${match[4] || \"0\"}${options.includePrerelease && match[5] ? `-${match[5]}` : \"\"}${options.includePrerelease && match[6] ? `+${match[6]}` : \"\"}`, options);\n}\nconst STRICT_COMPARATOR = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*(${FULL_PLAIN})$|^$`);\nconst LOOSE_COMPARATOR$1 = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*(${LOOSE_PLAIN})$|^$`);\nfunction parseComparator(comparator, options = {}) {\n\tconst normalized = comparator.trim().replaceAll(/\\s+/g, \" \");\n\tconst match = normalized.match(options.loose ? LOOSE_COMPARATOR$1 : STRICT_COMPARATOR);\n\tif (!match) throw new TypeError(`Invalid comparator: ${normalized}`);\n\tconst operator = match[1] === \"=\" ? \"\" : match[1] || \"\";\n\tconst version = match[2] ? parse(match[2], options) : null;\n\treturn {\n\t\toperator,\n\t\toptions,\n\t\tvalue: version ? `${operator}${formatComparableVersion(version)}` : \"\",\n\t\tversion\n\t};\n}\nfunction testParsedComparator(comparator, version) {\n\tif (!comparator.version) return true;\n\tconst comparison = compareParsed(version, comparator.version);\n\tswitch (comparator.operator) {\n\t\tcase \"\": return comparison === 0;\n\t\tcase \">\": return comparison > 0;\n\t\tcase \">=\": return comparison >= 0;\n\t\tcase \"<\": return comparison < 0;\n\t\tcase \"<=\": return comparison <= 0;\n\t}\n}\nfunction comparatorAllowsPrerelease(comparator, version) {\n\tconst allowed = comparator.version;\n\treturn allowed !== null && !!allowed.prerelease?.length && allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch;\n}\nfunction testComparatorSet(set, version, options) {\n\tif (set.some((comparator) => !testParsedComparator(comparator, version))) return false;\n\treturn !version.prerelease?.length || !!options.includePrerelease || set.some((comparator) => comparatorAllowsPrerelease(comparator, version));\n}\nfunction compare(left, right, options = {}) {\n\treturn compareParsed(parse(left, options), parse(right, options));\n}\nconst BUILD_STRIP = new RegExp(BUILD, \"g\");\nconst BUILD_SAFE = safeRegex(BUILD);\nconst STRICT_HYPHEN = safeRegex(String.raw`^\\s*(${XRANGE_PLAIN})\\s+-\\s+(${XRANGE_PLAIN})\\s*$`);\nconst LOOSE_HYPHEN = safeRegex(String.raw`^\\s*(${XRANGE_PLAIN_LOOSE})\\s+-\\s+(${XRANGE_PLAIN_LOOSE})\\s*$`);\nconst COMPARATOR_TRIM = safeRegex(String.raw`(\\s*)${GREATER_LESS_THAN}\\s*(${LOOSE_PLAIN}|${XRANGE_PLAIN})`, \"g\");\nconst TILDE_TRIM = safeRegex(String.raw`(\\s*)${LONE_TILDE}\\s+`, \"g\");\nconst CARET_TRIM = safeRegex(String.raw`(\\s*)${LONE_CARET}\\s+`, \"g\");\nconst STRICT_TILDE = safeRegex(`^${LONE_TILDE}${XRANGE_PLAIN}$`);\nconst LOOSE_TILDE = safeRegex(`^${LONE_TILDE}${XRANGE_PLAIN_LOOSE}$`);\nconst STRICT_CARET = safeRegex(`^${LONE_CARET}${XRANGE_PLAIN}$`);\nconst LOOSE_CARET = safeRegex(`^${LONE_CARET}${XRANGE_PLAIN_LOOSE}$`);\nconst STRICT_XRANGE = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*${XRANGE_PLAIN}$`);\nconst LOOSE_XRANGE = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*${XRANGE_PLAIN_LOOSE}$`);\nconst STAR = safeRegex(String.raw`(<|>)?=?\\s*\\*`);\nconst GTE_ZERO = /^\\s*>=\\s*0\\.0\\.0\\s*$/;\nconst GTE_ZERO_PRERELEASE = /^\\s*>=\\s*0\\.0\\.0-0\\s*$/;\nconst LOOSE_COMPARATOR = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*(${LOOSE_PLAIN})$|^$`);\nfunction isWildcard(value) {\n\treturn !value || String(value).toLowerCase() === \"x\" || String(value) === \"*\";\n}\nfunction hasInvalidWildcardOrder(major, minor, patch) {\n\treturn isWildcard(major) && !isWildcard(minor) || isWildcard(minor) && Boolean(patch) && !isWildcard(patch);\n}\nfunction replaceTilde(comparator, options) {\n\tconst expression = options.loose ? LOOSE_TILDE : STRICT_TILDE;\n\tconst lowerPrerelease = options.includePrerelease ? \"-0\" : \"\";\n\treturn comparator.replace(expression, (_match, major, minor, patch, prerelease) => {\n\t\tif (isWildcard(major)) return \"\";\n\t\tif (isWildcard(minor)) return `>=${major}.0.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (isWildcard(patch)) return `>=${major}.${minor}.0${lowerPrerelease} <${major}.${Number(minor) + 1}.0-0`;\n\t\treturn prerelease ? `>=${major}.${minor}.${patch}-${prerelease} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0`;\n\t});\n}\nfunction replaceTildes(comparator, options) {\n\treturn comparator.trim().split(/\\s+/).map((part) => replaceTilde(part, options)).join(\" \");\n}\nfunction replaceCaret(comparator, options) {\n\tconst expression = options.loose ? LOOSE_CARET : STRICT_CARET;\n\tconst lowerPrerelease = options.includePrerelease ? \"-0\" : \"\";\n\treturn comparator.replace(expression, (_match, major, minor, patch, prerelease) => {\n\t\tif (isWildcard(major)) return \"\";\n\t\tif (isWildcard(minor)) return `>=${major}.0.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (isWildcard(patch)) return major === \"0\" ? `>=${major}.${minor}.0${lowerPrerelease} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (prerelease) return major === \"0\" ? minor === \"0\" ? `>=${major}.${minor}.${patch}-${prerelease} <${major}.${minor}.${Number(patch) + 1}-0` : `>=${major}.${minor}.${patch}-${prerelease} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.${patch}-${prerelease} <${Number(major) + 1}.0.0-0`;\n\t\treturn major === \"0\" ? minor === \"0\" ? `>=${major}.${minor}.${patch} <${major}.${minor}.${Number(patch) + 1}-0` : `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.${patch} <${Number(major) + 1}.0.0-0`;\n\t});\n}\nfunction replaceCarets(comparator, options) {\n\treturn comparator.trim().split(/\\s+/).map((part) => replaceCaret(part, options)).join(\" \");\n}\nfunction replaceXRange(comparator, options) {\n\tconst expression = options.loose ? LOOSE_XRANGE : STRICT_XRANGE;\n\treturn comparator.trim().replace(expression, (match, rawOperator, rawMajor, rawMinor, rawPatch) => {\n\t\tlet operator = rawOperator;\n\t\tlet major = rawMajor;\n\t\tlet minor = rawMinor;\n\t\tlet patch = rawPatch;\n\t\tif (hasInvalidWildcardOrder(String(major), minor === void 0 ? void 0 : String(minor), patch === void 0 ? void 0 : String(patch))) return comparator;\n\t\tconst wildcardMajor = isWildcard(major);\n\t\tconst wildcardMinor = wildcardMajor || isWildcard(minor);\n\t\tconst wildcardPatch = wildcardMinor || isWildcard(patch);\n\t\tif (operator === \"=\" && wildcardPatch) operator = \"\";\n\t\tif (wildcardMajor) return operator === \">\" || operator === \"<\" ? \"<0.0.0-0\" : \"*\";\n\t\tlet prerelease = options.includePrerelease ? \"-0\" : \"\";\n\t\tif (operator && wildcardPatch) {\n\t\t\tif (wildcardMinor) minor = 0;\n\t\t\tpatch = 0;\n\t\t\tif (operator === \">\") {\n\t\t\t\toperator = \">=\";\n\t\t\t\tif (wildcardMinor) {\n\t\t\t\t\tmajor = Number(major) + 1;\n\t\t\t\t\tminor = 0;\n\t\t\t\t} else minor = Number(minor) + 1;\n\t\t\t} else if (operator === \"<=\") {\n\t\t\t\toperator = \"<\";\n\t\t\t\tif (wildcardMinor) major = Number(major) + 1;\n\t\t\t\telse minor = Number(minor) + 1;\n\t\t\t}\n\t\t\tif (operator === \"<\") prerelease = \"-0\";\n\t\t\treturn `${operator}${major}.${minor}.${patch}${prerelease}`;\n\t\t}\n\t\tif (wildcardMinor) return `>=${major}.0.0${prerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (wildcardPatch) return `>=${major}.${minor}.0${prerelease} <${major}.${Number(minor) + 1}.0-0`;\n\t\treturn match;\n\t});\n}\nfunction replaceXRanges(comparator, options) {\n\treturn comparator.split(/\\s+/).map((part) => replaceXRange(part, options)).join(\" \");\n}\nfunction replaceHyphenRange(range, options) {\n\tconst expression = options.loose ? LOOSE_HYPHEN : STRICT_HYPHEN;\n\treturn range.replace(expression, (_match, rawFrom, fromMajor, fromMinor, fromPatch, fromPrerelease, _fromBuild, rawTo, toMajor, toMinor, toPatch, toPrerelease) => {\n\t\tlet from = rawFrom;\n\t\tlet to = rawTo;\n\t\tif (isWildcard(fromMajor)) from = \"\";\n\t\telse if (isWildcard(fromMinor)) from = `>=${fromMajor}.0.0${options.includePrerelease ? \"-0\" : \"\"}`;\n\t\telse if (isWildcard(fromPatch)) from = `>=${fromMajor}.${fromMinor}.0${options.includePrerelease ? \"-0\" : \"\"}`;\n\t\telse if (fromPrerelease) from = `>=${from}`;\n\t\telse from = `>=${from}${options.includePrerelease ? \"-0\" : \"\"}`;\n\t\tif (isWildcard(toMajor)) to = \"\";\n\t\telse if (isWildcard(toMinor)) to = `<${Number(toMajor) + 1}.0.0-0`;\n\t\telse if (isWildcard(toPatch)) to = `<${toMajor}.${Number(toMinor) + 1}.0-0`;\n\t\telse if (toPrerelease) to = `<=${toMajor}.${toMinor}.${toPatch}-${toPrerelease}`;\n\t\telse if (options.includePrerelease) to = `<${toMajor}.${toMinor}.${Number(toPatch) + 1}-0`;\n\t\telse to = `<=${to}`;\n\t\treturn `${from} ${to}`.trim();\n\t});\n}\nfunction expandComparator(comparator, options) {\n\treturn replaceXRanges(replaceTildes(replaceCarets(comparator.replace(BUILD_SAFE, \"\"), options), options), options).trim().replace(STAR, \"\");\n}\nfunction parseSimpleRange(input, options) {\n\tlet parts = replaceHyphenRange(input.replace(BUILD_STRIP, \"\"), options).replace(COMPARATOR_TRIM, \"$1$2$3\").replace(TILDE_TRIM, \"$1~\").replace(CARET_TRIM, \"$1^\").split(\" \").map((part) => expandComparator(part, options)).join(\" \").split(/\\s+/).map((part) => part.trim().replace(options.includePrerelease ? GTE_ZERO_PRERELEASE : GTE_ZERO, \"\"));\n\tif (options.loose) parts = parts.filter((part) => LOOSE_COMPARATOR.test(part));\n\tconst unique = /* @__PURE__ */ new Map();\n\tfor (const comparator of parts.map((part) => parseComparator(part, options))) {\n\t\tif (comparator.value === \"<0.0.0-0\") return [comparator];\n\t\tunique.set(comparator.value, comparator);\n\t}\n\tif (unique.size > 1) unique.delete(\"\");\n\treturn [...unique.values()];\n}\nfunction parseRange(range, options = {}) {\n\tif (typeof range !== \"string\") return range;\n\tconst parsedOptions = { ...options };\n\tconst raw = range.trim().replaceAll(/\\s+/g, \" \");\n\tlet sets = raw.split(\"||\").map((part) => parseSimpleRange(part.trim(), parsedOptions)).filter((set) => set.length);\n\tif (!sets.length) throw new TypeError(`Range contains no valid comparator sets: ${raw}`);\n\tif (sets.length > 1) {\n\t\tconst first = sets[0];\n\t\tsets = sets.filter((set) => set[0]?.value !== \"<0.0.0-0\");\n\t\tif (!sets.length) sets = [first];\n\t\telse if (sets.length > 1) {\n\t\t\tconst any = sets.find((set) => set.length === 1 && set[0]?.value === \"\");\n\t\t\tif (any) sets = [any];\n\t\t}\n\t}\n\treturn {\n\t\tnormalized: sets.map((set) => set.map((comparator) => comparator.value).join(\" \")).join(\"||\"),\n\t\toptions: parsedOptions,\n\t\traw,\n\t\tsets\n\t};\n}\nfunction tryParseRange(range, options = {}) {\n\ttry {\n\t\treturn parseRange(range, options);\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction testParsedRange(range, version) {\n\treturn range.sets.some((set) => testComparatorSet(set, version, range.options));\n}\nfunction testRangeVersion(range, version) {\n\tconst parsed = tryParse(version, range.options);\n\treturn parsed ? testParsedRange(range, parsed) : false;\n}\nfunction satisfies(version, range, options = {}) {\n\tconst parsed = tryParseRange(range, options);\n\treturn parsed ? testRangeVersion(parsed, version) : false;\n}\nfunction normalize(version, options = {}) {\n\tconst parsed = tryParse(version, options);\n\treturn parsed ? formatComparableVersion(parsed) : null;\n}\nfunction coerce(value, options = {}) {\n\tconst parsed = coerceParsedVersion(value, options);\n\treturn parsed ? formatFullVersion(parsed) : null;\n}\n//#endregion\nexport { coerce, compare, normalize, parseRange, satisfies };\n", "import { isUUIDv7 as isUUIDv7$1 } from \"./uuidv7.mjs\";\nimport { coerce, compare, normalize, parseRange, satisfies } from \"./node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs\";\nimport { MAX_COMPILED_CATALOG_BYTES, MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE, MAX_TARGET_COHORTS_PER_RELEASE, NUMERIC_COHORT_SIZE, RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, getNumericCohortValue, getRolledOutNumericCohorts, isCustomCohort, normalizeCohortValue, normalizeRolloutCohortCount } from \"@hot-updater/core\";\n//#region src/releaseCatalogCompiler.ts\nvar ReleaseCatalogCompilationError = class extends Error {\n\tcode;\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.name = \"ReleaseCatalogCompilationError\";\n\t\tthis.code = code;\n\t}\n};\nfunction compareBounds(left, right) {\n\treturn compare(left, right);\n}\nfunction strongerLower(current, candidate) {\n\tif (current === null) return candidate;\n\tconst compared = compareBounds(candidate.version, current.version);\n\tif (compared > 0) return candidate;\n\tif (compared < 0) return current;\n\treturn {\n\t\tversion: current.version,\n\t\tinclusive: current.inclusive && candidate.inclusive\n\t};\n}\nfunction strongerUpper(current, candidate) {\n\tif (current === null) return candidate;\n\tconst compared = compareBounds(candidate.version, current.version);\n\tif (compared < 0) return candidate;\n\tif (compared > 0) return current;\n\treturn {\n\t\tversion: current.version,\n\t\tinclusive: current.inclusive && candidate.inclusive\n\t};\n}\nfunction comparatorVersion(comparator) {\n\tconst version = comparator.version && normalize(comparator.version);\n\tif (version === null) throw new ReleaseCatalogCompilationError(\"INVALID_TARGET_RANGE\", `Invalid comparator: ${comparator.value}`);\n\treturn version;\n}\nfunction comparatorSetToInterval(comparators) {\n\tlet lower = null;\n\tlet upper = null;\n\tfor (const comparator of comparators) {\n\t\tif (comparator.version === null) continue;\n\t\tconst version = comparatorVersion(comparator);\n\t\tif (comparator.operator === \"\") {\n\t\t\tlower = strongerLower(lower, {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion\n\t\t\t});\n\t\t\tupper = strongerUpper(upper, {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion\n\t\t\t});\n\t\t} else if (comparator.operator === \">\") lower = strongerLower(lower, {\n\t\t\tinclusive: false,\n\t\t\tversion\n\t\t});\n\t\telse if (comparator.operator === \">=\") lower = strongerLower(lower, {\n\t\t\tinclusive: true,\n\t\t\tversion\n\t\t});\n\t\telse if (comparator.operator === \"<\") upper = strongerUpper(upper, {\n\t\t\tinclusive: false,\n\t\t\tversion\n\t\t});\n\t\telse if (comparator.operator === \"<=\") upper = strongerUpper(upper, {\n\t\t\tinclusive: true,\n\t\t\tversion\n\t\t});\n\t}\n\tif (lower !== null && upper !== null) {\n\t\tconst compared = compareBounds(lower.version, upper.version);\n\t\tif (compared > 0 || compared === 0 && (!lower.inclusive || !upper.inclusive)) return null;\n\t}\n\treturn {\n\t\tlower,\n\t\tupper\n\t};\n}\nfunction rangeToIntervals(range) {\n\ttry {\n\t\treturn parseRange(range).sets.flatMap((comparators) => {\n\t\t\tconst interval = comparatorSetToInterval(comparators);\n\t\t\treturn interval === null ? [] : [interval];\n\t\t});\n\t} catch {\n\t\tthrow new ReleaseCatalogCompilationError(\"INVALID_TARGET_RANGE\", `Invalid target app-version range: ${range}`);\n\t}\n}\nfunction releaseDescriptor(release) {\n\treturn {\n\t\treleaseId: release.id,\n\t\tkind: release.kind,\n\t\tbundleId: release.bundleId,\n\t\trolloutCohortCount: release.rolloutCohortCount,\n\t\ttargetCohorts: [...new Set(release.targetCohorts)].sort(),\n\t\tshouldForceUpdate: release.shouldForceUpdate,\n\t\tmessage: release.message\n\t};\n}\nfunction validateReleases(releases, strategy) {\n\tconst enabled = releases.filter((release) => release.enabled).sort((left, right) => right.id.localeCompare(left.id));\n\tconst seenIds = /* @__PURE__ */ new Set();\n\tfor (const release of enabled) {\n\t\tif (!isUUIDv7$1(release.id)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} must use a canonical lowercase UUIDv7 ID`);\n\t\tif (seenIds.has(release.id)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Duplicate Release ID: ${release.id}`);\n\t\tseenIds.add(release.id);\n\t\tif (release.strategy !== strategy) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has the wrong strategy`);\n\t\tif (release.kind === \"BUNDLE\" && release.bundleId === null || release.kind === \"EMBEDDED\" && release.bundleId !== null) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has an invalid kind/Bundle combination`);\n\t\tif (release.targetCohorts.length > MAX_TARGET_COHORTS_PER_RELEASE) throw new ReleaseCatalogCompilationError(\"TARGET_COHORT_LIMIT\", `Release ${release.id} exceeds ${MAX_TARGET_COHORTS_PER_RELEASE} target cohorts`);\n\t\tif (strategy === \"APP_VERSION\" && (release.targetAppVersion === null || release.fingerprintHash !== null)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has an invalid app-version target`);\n\t\tif (strategy === \"FINGERPRINT\" && (release.fingerprintHash === null || release.targetAppVersion !== null)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has an invalid fingerprint target`);\n\t}\n\treturn enabled.filter((release) => release.kind === \"BUNDLE\");\n}\nfunction collectFrontierReleaseIds(releases) {\n\tif (releases.every((release) => normalizeRolloutCohortCount(release.rolloutCohortCount) >= NUMERIC_COHORT_SIZE)) {\n\t\tconst retained = /* @__PURE__ */ new Set();\n\t\tconst bundleIds = /* @__PURE__ */ new Set();\n\t\tlet embedded = false;\n\t\tfor (const release of releases) {\n\t\t\tif (release.kind === \"EMBEDDED\") {\n\t\t\t\tif (!embedded) {\n\t\t\t\t\tembedded = true;\n\t\t\t\t\tretained.add(release.id);\n\t\t\t\t}\n\t\t\t} else if (release.bundleId !== null && bundleIds.size < 11 && !bundleIds.has(release.bundleId)) {\n\t\t\t\tbundleIds.add(release.bundleId);\n\t\t\t\tretained.add(release.id);\n\t\t\t}\n\t\t\tif (embedded && bundleIds.size >= 11) break;\n\t\t}\n\t\treturn retained;\n\t}\n\tconst explicitTargetCohorts = new Set(releases.flatMap((release) => release.targetCohorts));\n\tconst cohortStates = [\n\t\tvoid 0,\n\t\t...Array.from({ length: 1e3 }, (_, index) => String(index + 1)),\n\t\t...[...explicitTargetCohorts].sort(),\n\t\t\"release-catalog-non-targeted-cohort\"\n\t].map((cohort) => {\n\t\tconst normalized = cohort === void 0 ? void 0 : normalizeCohortValue(cohort);\n\t\treturn {\n\t\t\tisCustom: normalized !== void 0 && isCustomCohort(normalized),\n\t\t\tnormalized,\n\t\t\tnumeric: normalized === void 0 ? null : getNumericCohortValue(normalized),\n\t\t\tbundleIds: /* @__PURE__ */ new Set(),\n\t\t\tembedded: false,\n\t\t\tcomplete: false\n\t\t};\n\t});\n\tconst stateIndexesByCohort = /* @__PURE__ */ new Map();\n\tconst fullRolloutStateIndexes = [];\n\tfor (const [index, state] of cohortStates.entries()) {\n\t\tif (state.normalized !== void 0) {\n\t\t\tconst indexes = stateIndexesByCohort.get(state.normalized) ?? [];\n\t\t\tindexes.push(index);\n\t\t\tstateIndexesByCohort.set(state.normalized, indexes);\n\t\t}\n\t\tif (state.normalized === void 0 || state.numeric !== null || state.isCustom) fullRolloutStateIndexes.push(index);\n\t}\n\tconst retained = /* @__PURE__ */ new Set();\n\tlet incompleteStateCount = cohortStates.length;\n\tfor (const release of releases) {\n\t\tconst rolloutCohortCount = normalizeRolloutCohortCount(release.rolloutCohortCount);\n\t\tconst eligibleStateIndexes = /* @__PURE__ */ new Set();\n\t\tif (rolloutCohortCount >= NUMERIC_COHORT_SIZE) for (const index of fullRolloutStateIndexes) eligibleStateIndexes.add(index);\n\t\telse if (rolloutCohortCount > 0) for (const numericCohort of getRolledOutNumericCohorts(release.id, rolloutCohortCount)) for (const index of stateIndexesByCohort.get(String(numericCohort)) ?? []) eligibleStateIndexes.add(index);\n\t\tfor (const targetCohort of new Set(release.targetCohorts.map(normalizeCohortValue))) for (const index of stateIndexesByCohort.get(targetCohort) ?? []) eligibleStateIndexes.add(index);\n\t\tfor (const index of eligibleStateIndexes) {\n\t\t\tconst state = cohortStates[index];\n\t\t\tif (state.complete) continue;\n\t\t\tif (release.kind === \"EMBEDDED\") {\n\t\t\t\tif (!state.embedded) {\n\t\t\t\t\tstate.embedded = true;\n\t\t\t\t\tretained.add(release.id);\n\t\t\t\t}\n\t\t\t} else if (release.bundleId !== null && state.bundleIds.size < 11 && !state.bundleIds.has(release.bundleId)) {\n\t\t\t\tstate.bundleIds.add(release.bundleId);\n\t\t\t\tretained.add(release.id);\n\t\t\t}\n\t\t\tif (state.embedded && state.bundleIds.size >= 11) {\n\t\t\t\tstate.complete = true;\n\t\t\t\tincompleteStateCount -= 1;\n\t\t\t}\n\t\t}\n\t\tif (incompleteStateCount === 0) break;\n\t}\n\treturn retained;\n}\nfunction intervalContainsSegment(interval, segment) {\n\tif (interval.lower !== null) {\n\t\tif (segment.lower === null) return false;\n\t\tconst compared = compareBounds(segment.lower.version, interval.lower.version);\n\t\tif (compared < 0 || compared === 0 && segment.lower.inclusive && !interval.lower.inclusive) return false;\n\t}\n\tif (interval.upper !== null) {\n\t\tif (segment.upper === null) return false;\n\t\tconst compared = compareBounds(segment.upper.version, interval.upper.version);\n\t\tif (compared > 0 || compared === 0 && segment.upper.inclusive && !interval.upper.inclusive) return false;\n\t}\n\treturn true;\n}\nfunction atomicVersionSegments(intervals) {\n\tconst endpoints = [...new Set(intervals.flatMap((interval) => [interval.lower?.version, interval.upper?.version].filter((version) => version !== void 0)))].sort(compareBounds);\n\tif (endpoints.length === 0) return [{\n\t\tlower: null,\n\t\tupper: null\n\t}];\n\tconst segments = [{\n\t\tlower: null,\n\t\tupper: {\n\t\t\tinclusive: false,\n\t\t\tversion: endpoints[0]\n\t\t}\n\t}];\n\tfor (let index = 0; index < endpoints.length; index += 1) {\n\t\tconst endpoint = endpoints[index];\n\t\tsegments.push({\n\t\t\tlower: {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion: endpoint\n\t\t\t},\n\t\t\tupper: {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion: endpoint\n\t\t\t}\n\t\t});\n\t\tconst next = endpoints[index + 1];\n\t\tif (next !== void 0) segments.push({\n\t\t\tlower: {\n\t\t\t\tinclusive: false,\n\t\t\t\tversion: endpoint\n\t\t\t},\n\t\t\tupper: {\n\t\t\t\tinclusive: false,\n\t\t\t\tversion: next\n\t\t\t}\n\t\t});\n\t}\n\tsegments.push({\n\t\tlower: {\n\t\t\tinclusive: false,\n\t\t\tversion: endpoints.at(-1)\n\t\t},\n\t\tupper: null\n\t});\n\treturn segments;\n}\nfunction sameIndexes(left, right) {\n\treturn left.length === right.length && left.every((value, index) => value === right[index]);\n}\nfunction mergeSegments(segments) {\n\tconst merged = [];\n\tfor (const segment of segments) {\n\t\tconst previous = merged.at(-1);\n\t\tif (previous && sameIndexes(previous.releaseIndexes, segment.releaseIndexes) && sameIndexes(previous.rollbackReleaseIndexes, segment.rollbackReleaseIndexes)) merged[merged.length - 1] = {\n\t\t\t...previous,\n\t\t\tupper: segment.upper\n\t\t};\n\t\telse merged.push(segment);\n\t}\n\treturn merged;\n}\nfunction compileAppVersion(releases) {\n\tconst ranges = /* @__PURE__ */ new Map();\n\tfor (const release of releases) ranges.set(release.id, rangeToIntervals(release.targetAppVersion));\n\tconst segmentReleases = atomicVersionSegments([...ranges.values()].flat()).map((segment) => {\n\t\tconst applicable = releases.filter((release) => ranges.get(release.id).some((range) => intervalContainsSegment(range, segment)));\n\t\treturn {\n\t\t\trollbackIds: new Set(applicable.map(({ id }) => id)),\n\t\t\tsegment,\n\t\t\tretainedIds: collectFrontierReleaseIds(applicable)\n\t\t};\n\t});\n\tconst retainedIds = new Set(segmentReleases.flatMap(({ retainedIds, rollbackIds }) => [...retainedIds, ...rollbackIds]));\n\tconst retainedReleases = releases.filter((release) => retainedIds.has(release.id));\n\tconst descriptorIndex = new Map(retainedReleases.map((release, index) => [release.id, index]));\n\treturn {\n\t\tenvelope: {\n\t\t\tfallbackPolicy: RELEASE_CATALOG_FALLBACK_POLICY,\n\t\t\tschemaVersion: RELEASE_CATALOG_SCHEMA_VERSION,\n\t\t\tsegments: mergeSegments(segmentReleases.map(({ segment, retainedIds, rollbackIds }) => ({\n\t\t\t\t...segment,\n\t\t\t\treleaseIndexes: releases.filter((release) => retainedIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0),\n\t\t\t\trollbackReleaseIndexes: releases.filter((release) => rollbackIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0)\n\t\t\t})).filter((segment) => segment.releaseIndexes.length > 0 || segment.rollbackReleaseIndexes.length > 0)),\n\t\t\tstrategy: \"APP_VERSION\"\n\t\t},\n\t\tretainedReleases\n\t};\n}\nfunction compileFingerprint(releases) {\n\tconst retainedIds = collectFrontierReleaseIds(releases);\n\tconst retainedReleases = releases;\n\treturn {\n\t\tenvelope: {\n\t\t\tfallbackPolicy: RELEASE_CATALOG_FALLBACK_POLICY,\n\t\t\treleaseIndexes: retainedReleases.map((release, index) => retainedIds.has(release.id) ? index : -1).filter((index) => index >= 0),\n\t\t\trollbackReleaseIndexes: retainedReleases.map((_, index) => index),\n\t\t\tschemaVersion: RELEASE_CATALOG_SCHEMA_VERSION,\n\t\t\tstrategy: \"FINGERPRINT\"\n\t\t},\n\t\tretainedReleases\n\t};\n}\nasync function sha256(value) {\n\tconst digest = await globalThis.crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value));\n\treturn `sha256:${[...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\nfunction canonicalStringify(value) {\n\tif (value === null || typeof value !== \"object\") return JSON.stringify(value);\n\tif (Array.isArray(value)) return `[${value.map(canonicalStringify).join(\",\")}]`;\n\tconst record = value;\n\treturn `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonicalStringify(record[key])}`).join(\",\")}}`;\n}\nasync function compileReleaseCatalog(input) {\n\tconst releases = validateReleases(input.releases, input.strategy);\n\tconst targetCohorts = new Set(releases.flatMap((release) => release.targetCohorts));\n\tif (targetCohorts.size > MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE) throw new ReleaseCatalogCompilationError(\"DISTINCT_TARGET_COHORT_LIMIT\", `Scope exceeds ${MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE} distinct target cohorts`);\n\tconst { envelope, retainedReleases } = input.strategy === \"APP_VERSION\" ? compileAppVersion(releases) : compileFingerprint(releases);\n\tconst payload = {\n\t\t...envelope,\n\t\treleaseDescriptors: retainedReleases.map(releaseDescriptor)\n\t};\n\tconst canonicalPayload = canonicalStringify(payload);\n\tconst byteSize = new TextEncoder().encode(canonicalPayload).byteLength;\n\tif (byteSize > MAX_COMPILED_CATALOG_BYTES) throw new ReleaseCatalogCompilationError(\"CATALOG_OVERSIZE\", `Compiled Release catalog is ${byteSize} bytes; maximum is ${MAX_COMPILED_CATALOG_BYTES}`);\n\treturn {\n\t\tbyteSize,\n\t\tcanonicalPayload,\n\t\tcatalogHash: await sha256(canonicalPayload),\n\t\tdiagnostics: {\n\t\t\tbyteSize,\n\t\t\tdescriptorCount: payload.releaseDescriptors.length,\n\t\t\tdistinctTargetCohortCount: targetCohorts.size,\n\t\t\treleaseCount: releases.length,\n\t\t\tsegmentCount: payload.strategy === \"APP_VERSION\" ? payload.segments.length : 1\n\t\t},\n\t\tpayload\n\t};\n}\nfunction versionInSegment(version, segment) {\n\tif (segment.lower !== null) {\n\t\tconst compared = compareBounds(version, segment.lower.version);\n\t\tif (compared < 0 || compared === 0 && !segment.lower.inclusive) return false;\n\t}\n\tif (segment.upper !== null) {\n\t\tconst compared = compareBounds(version, segment.upper.version);\n\t\tif (compared > 0 || compared === 0 && !segment.upper.inclusive) return false;\n\t}\n\treturn true;\n}\nfunction canonicalizeAppVersion(appVersion) {\n\treturn coerce(appVersion);\n}\nfunction projectCompiledCatalog(catalog, appVersion) {\n\tlet indexes;\n\tif (catalog.strategy === \"FINGERPRINT\") indexes = catalog.releaseIndexes;\n\telse {\n\t\tconst canonicalVersion = appVersion && canonicalizeAppVersion(appVersion);\n\t\tif (!canonicalVersion) return [];\n\t\tindexes = catalog.segments.find((segment) => versionInSegment(canonicalVersion, segment))?.releaseIndexes ?? [];\n\t}\n\treturn indexes.map((index) => catalog.releaseDescriptors[index]);\n}\nfunction projectCompiledRollbackCatalog(catalog, appVersion) {\n\tlet indexes;\n\tif (catalog.strategy === \"FINGERPRINT\") indexes = catalog.rollbackReleaseIndexes ?? catalog.releaseIndexes;\n\telse {\n\t\tconst canonicalVersion = appVersion && canonicalizeAppVersion(appVersion);\n\t\tif (!canonicalVersion) return [];\n\t\tconst segment = catalog.segments.find((candidate) => versionInSegment(canonicalVersion, candidate));\n\t\tindexes = segment?.rollbackReleaseIndexes ?? segment?.releaseIndexes ?? [];\n\t}\n\treturn indexes.map((index) => catalog.releaseDescriptors[index]);\n}\nfunction referenceCompatibleReleases(releases, appVersion) {\n\tconst canonicalVersion = canonicalizeAppVersion(appVersion);\n\tif (!canonicalVersion) return [];\n\treturn releases.filter((release) => release.enabled && release.targetAppVersion !== null && satisfies(canonicalVersion, release.targetAppVersion));\n}\n//#endregion\nexport { ReleaseCatalogCompilationError, canonicalizeAppVersion, compileReleaseCatalog, projectCompiledCatalog, projectCompiledRollbackCatalog, referenceCompatibleReleases };\n", "import { createUUIDv7 } from \"./uuidv7.mjs\";\nimport { releaseRowToRelease } from \"./databaseRows.mjs\";\nimport { compileReleaseCatalog } from \"./releaseCatalogCompiler.mjs\";\nimport { createReleaseCatalogScopeKey, encodeChannelKey } from \"@hot-updater/core\";\n//#region src/releaseCatalogMutation.ts\nconst RELEASE_PAGE_SIZE = 1e3;\nconst DEFAULT_MAX_ATTEMPTS = 3;\nvar ReleaseCatalogMutationError = class extends Error {\n\tname = \"ReleaseCatalogMutationError\";\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t}\n};\nconst readScopeReleases = async (database, scopeKey) => {\n\tconst releases = [];\n\tlet afterReleaseId;\n\tfor (;;) {\n\t\tconst page = await database.models.releases.findManyByScope({\n\t\t\tscopeKey,\n\t\t\t...afterReleaseId === void 0 ? {} : { afterReleaseId },\n\t\t\tlimit: RELEASE_PAGE_SIZE,\n\t\t\tconsistency: \"strong\"\n\t\t});\n\t\tfor (const row of page) {\n\t\t\tif (row.scope_key !== scopeKey) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release \"${row.id}\" was returned for the wrong catalog scope`);\n\t\t\tif (releases.at(-1)?.id === row.id) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release \"${row.id}\" was returned more than once`);\n\t\t\treleases.push(row);\n\t\t}\n\t\tif (page.length < RELEASE_PAGE_SIZE) return releases;\n\t\tconst next = page.at(-1)?.id;\n\t\tif (next === void 0 || next === afterReleaseId) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Release scope paging did not advance\");\n\t\tafterReleaseId = next;\n\t}\n};\nconst validateScope = (scope) => {\n\tconst channelKey = encodeChannelKey(scope.channelName);\n\tif (scope.strategy === \"FINGERPRINT\" !== (scope.fingerprintHash !== null)) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Release catalog strategy and fingerprint are inconsistent\");\n\tconst expectedScopeKey = scope.strategy === \"APP_VERSION\" ? createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tplatform: scope.platform,\n\t\tstrategy: \"APP_VERSION\"\n\t}) : createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tfingerprintHash: scope.fingerprintHash ?? \"\",\n\t\tplatform: scope.platform,\n\t\tstrategy: \"FINGERPRINT\"\n\t});\n\tif (scope.scopeKey !== expectedScopeKey) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Release catalog scope metadata is inconsistent\");\n};\nconst applyMutation = (rows, scope, mutation) => {\n\tconst currentIndex = mutation.operation === \"insert\" ? -1 : rows.findIndex(({ id }) => id === mutation.id);\n\tconst current = currentIndex < 0 ? void 0 : rows[currentIndex];\n\tif (mutation.operation === \"insert\") {\n\t\tconst latestId = rows.at(-1)?.id;\n\t\tif (mutation.row.scope_key !== scope.scopeKey || mutation.row.channel_id !== scope.channelId || mutation.row.platform !== scope.platform || mutation.row.strategy !== scope.strategy || mutation.row.fingerprint_hash !== scope.fingerprintHash || mutation.row.revision !== 1) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Inserted Release does not match its catalog scope\");\n\t\tif (latestId !== void 0 && mutation.row.id <= latestId) throw new ReleaseCatalogMutationError(\"NON_MONOTONIC_RELEASE_ID\", `Release \"${mutation.row.id}\" must sort after \"${latestId}\"`);\n\t\treturn {\n\t\t\tchange: {\n\t\t\t\tmodel: \"releases\",\n\t\t\t\toperation: \"insert\",\n\t\t\t\trow: mutation.row\n\t\t\t},\n\t\t\texpectedRevision: null,\n\t\t\tnextRows: [...rows, mutation.row],\n\t\t\trelease: mutation.row\n\t\t};\n\t}\n\tif (current === void 0) throw new ReleaseCatalogMutationError(\"RELEASE_NOT_FOUND\", `Release \"${mutation.id}\" was not found in scope \"${scope.scopeKey}\"`);\n\tif (mutation.operation === \"delete\") return {\n\t\tchange: {\n\t\t\tmodel: \"releases\",\n\t\t\toperation: \"delete\",\n\t\t\twhere: { id: mutation.id }\n\t\t},\n\t\texpectedRevision: current.revision,\n\t\tnextRows: rows.filter(({ id }) => id !== mutation.id),\n\t\trelease: null\n\t};\n\tconst release = {\n\t\t...current,\n\t\t...mutation.update,\n\t\trevision: current.revision + 1\n\t};\n\treturn {\n\t\tchange: {\n\t\t\tmodel: \"releases\",\n\t\t\toperation: \"update\",\n\t\t\twhere: { id: mutation.id },\n\t\t\tupdate: {\n\t\t\t\t...mutation.update,\n\t\t\t\trevision: release.revision\n\t\t\t}\n\t\t},\n\t\texpectedRevision: current.revision,\n\t\tnextRows: rows.map((row) => row.id === release.id ? release : row),\n\t\trelease\n\t};\n};\nconst catalogIdentity = (current, rows) => {\n\tif (current !== null) return current.catalog_id;\n\tif (rows.length > 0) throw new ReleaseCatalogMutationError(\"CATALOG_IDENTITY_MISSING\", \"Catalog history is missing. Restore its catalog row from backup before rebuilding or deploying.\");\n\treturn createUUIDv7();\n};\nconst readCatalogScope = async (database, scopeKey) => {\n\tlet currentCatalog = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\tlet rows = await readScopeReleases(database, scopeKey);\n\tif (currentCatalog === null && rows.length > 0) {\n\t\tcurrentCatalog = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\t\tif (currentCatalog !== null) rows = await readScopeReleases(database, scopeKey);\n\t}\n\treturn {\n\t\tcurrentCatalog,\n\t\trows\n\t};\n};\nconst prepareReleaseCatalogMutation = async (database, mutationInput) => {\n\tconst { rows, currentCatalog } = await readCatalogScope(database, mutationInput.scope.scopeKey);\n\tconst applied = applyMutation(rows, mutationInput.scope, mutationInput.mutation);\n\tconst compilation = await compileReleaseCatalog({\n\t\tstrategy: mutationInput.scope.strategy,\n\t\treleases: applied.nextRows.map(releaseRowToRelease)\n\t});\n\tconst generation = (currentCatalog?.generation ?? 0) + 1;\n\tif (!Number.isSafeInteger(generation)) throw new ReleaseCatalogMutationError(\"CATALOG_GENERATION_EXHAUSTED\", `Catalog \"${mutationInput.scope.scopeKey}\" exhausted its generation counter`);\n\treturn {\n\t\tapplied,\n\t\tcatalog: {\n\t\t\tscope_key: mutationInput.scope.scopeKey,\n\t\t\tcatalog_id: catalogIdentity(currentCatalog, rows),\n\t\t\tstrategy: mutationInput.scope.strategy,\n\t\t\tchannel_id: mutationInput.scope.channelId,\n\t\t\tchannel_key: encodeChannelKey(mutationInput.scope.channelName),\n\t\t\tplatform: mutationInput.scope.platform,\n\t\t\tfingerprint_hash: mutationInput.scope.fingerprintHash,\n\t\t\tgeneration,\n\t\t\tpayload: compilation.canonicalPayload,\n\t\t\tcatalog_hash: compilation.catalogHash,\n\t\t\tbyte_size: compilation.byteSize,\n\t\t\tis_tombstone: compilation.payload.releaseDescriptors.length === 0,\n\t\t\tupdated_at_ms: mutationInput.updatedAtMs ?? Date.now()\n\t\t},\n\t\tcompilation,\n\t\tcurrentCatalog,\n\t\tmutationInput\n\t};\n};\nasync function preflightReleaseCatalogMutation(input) {\n\tvalidateScope(input.scope);\n\tconst prepared = await prepareReleaseCatalogMutation(input.database, input);\n\treturn {\n\t\tcatalog: prepared.catalog,\n\t\tcurrentCatalog: prepared.currentCatalog,\n\t\tdiagnostics: prepared.compilation.diagnostics,\n\t\texpectedReleaseRevision: prepared.applied.expectedRevision,\n\t\trelease: prepared.applied.release\n\t};\n}\nasync function commitReleaseCatalogMutations(input) {\n\tif (input.mutations.length === 0) return [];\n\tconst scopeKeys = /* @__PURE__ */ new Set();\n\tfor (const mutation of input.mutations) {\n\t\tvalidateScope(mutation.scope);\n\t\tif (scopeKeys.has(mutation.scope.scopeKey)) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `A batch cannot mutate catalog scope \"${mutation.scope.scopeKey}\" more than once`);\n\t\tscopeKeys.add(mutation.scope.scopeKey);\n\t}\n\tconst maxAttempts = input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n\tif (!Number.isSafeInteger(maxAttempts) || maxAttempts <= 0) throw new RangeError(\"maxAttempts must be a positive safe integer\");\n\tfor (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n\t\tconst prepared = await Promise.all(input.mutations.map((mutationInput) => prepareReleaseCatalogMutation(input.database, mutationInput)));\n\t\tconst result = await input.database.commit({\n\t\t\texpectations: prepared.flatMap(({ applied, currentCatalog, mutationInput }) => [{\n\t\t\t\tmodel: \"releases\",\n\t\t\t\tid: mutationInput.mutation.operation === \"insert\" ? mutationInput.mutation.row.id : mutationInput.mutation.id,\n\t\t\t\trevision: applied.expectedRevision\n\t\t\t}, {\n\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\tscopeKey: mutationInput.scope.scopeKey,\n\t\t\t\tgeneration: currentCatalog?.generation ?? null\n\t\t\t}]),\n\t\t\tchanges: prepared.flatMap(({ applied, catalog, mutationInput }) => [\n\t\t\t\t...mutationInput.companionChanges ?? [],\n\t\t\t\tapplied.change,\n\t\t\t\t{\n\t\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\t\toperation: \"put\",\n\t\t\t\t\trow: catalog\n\t\t\t\t},\n\t\t\t\t...mutationInput.trailingChanges ?? []\n\t\t\t])\n\t\t});\n\t\tif (result.committed) return prepared.map(({ applied, catalog }) => ({\n\t\t\tattempts: attempt,\n\t\t\tcatalog,\n\t\t\trelease: applied.release\n\t\t}));\n\t\tif (result.conflict.reason !== \"version_conflict\") throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release mutation failed: ${result.conflict.reason}`);\n\t}\n\tthrow new ReleaseCatalogMutationError(\"VERSION_CONFLICT\", `Release catalog mutation batch conflicted ${maxAttempts} times`);\n}\nasync function commitReleaseCatalogMutation(input) {\n\tconst [result] = await commitReleaseCatalogMutations({\n\t\tdatabase: input.database,\n\t\tmaxAttempts: input.maxAttempts,\n\t\tmutations: [input]\n\t});\n\treturn result;\n}\nconst catalogProjectionMatches = (current, scope, compilation) => current.strategy === scope.strategy && current.channel_id === scope.channelId && current.channel_key === encodeChannelKey(scope.channelName) && current.platform === scope.platform && current.fingerprint_hash === scope.fingerprintHash && current.payload === compilation.canonicalPayload && current.catalog_hash === compilation.catalogHash && current.byte_size === compilation.byteSize && current.is_tombstone === (compilation.payload.releaseDescriptors.length === 0);\nasync function preflightReleaseCatalogRebuild(input) {\n\tvalidateScope(input.scope);\n\tconst { rows, currentCatalog } = await readCatalogScope(input.database, input.scope.scopeKey);\n\tconst compilation = await compileReleaseCatalog({\n\t\treleases: rows.map(releaseRowToRelease),\n\t\tstrategy: input.scope.strategy\n\t});\n\tconst changed = currentCatalog === null || !catalogProjectionMatches(currentCatalog, input.scope, compilation);\n\tconst generation = changed ? (currentCatalog?.generation ?? 0) + 1 : currentCatalog.generation;\n\tif (!Number.isSafeInteger(generation)) throw new ReleaseCatalogMutationError(\"CATALOG_GENERATION_EXHAUSTED\", `Catalog \"${input.scope.scopeKey}\" exhausted its generation counter`);\n\treturn {\n\t\tchanged,\n\t\tcurrentCatalog,\n\t\tdiagnostics: compilation.diagnostics,\n\t\tprojectedCatalog: {\n\t\t\tcatalog_id: catalogIdentity(currentCatalog, rows),\n\t\t\tbyte_size: compilation.byteSize,\n\t\t\tcatalog_hash: compilation.catalogHash,\n\t\t\tchannel_id: input.scope.channelId,\n\t\t\tchannel_key: encodeChannelKey(input.scope.channelName),\n\t\t\tfingerprint_hash: input.scope.fingerprintHash,\n\t\t\tgeneration,\n\t\t\tis_tombstone: compilation.payload.releaseDescriptors.length === 0,\n\t\t\tpayload: compilation.canonicalPayload,\n\t\t\tplatform: input.scope.platform,\n\t\t\tscope_key: input.scope.scopeKey,\n\t\t\tstrategy: input.scope.strategy,\n\t\t\tupdated_at_ms: changed || currentCatalog === null ? input.updatedAtMs ?? Date.now() : currentCatalog.updated_at_ms\n\t\t}\n\t};\n}\nasync function rebuildReleaseCatalog(input) {\n\tvalidateScope(input.scope);\n\tconst maxAttempts = input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n\tif (!Number.isSafeInteger(maxAttempts) || maxAttempts <= 0) throw new RangeError(\"maxAttempts must be a positive safe integer\");\n\tfor (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n\t\tconst { rows, currentCatalog } = await readCatalogScope(input.database, input.scope.scopeKey);\n\t\tconst compilation = await compileReleaseCatalog({\n\t\t\treleases: rows.map(releaseRowToRelease),\n\t\t\tstrategy: input.scope.strategy\n\t\t});\n\t\tif (currentCatalog !== null && catalogProjectionMatches(currentCatalog, input.scope, compilation)) return {\n\t\t\tattempts: attempt,\n\t\t\tcatalog: currentCatalog,\n\t\t\tchanged: false,\n\t\t\tdiagnostics: compilation.diagnostics\n\t\t};\n\t\tconst generation = (currentCatalog?.generation ?? 0) + 1;\n\t\tif (!Number.isSafeInteger(generation)) throw new ReleaseCatalogMutationError(\"CATALOG_GENERATION_EXHAUSTED\", `Catalog \"${input.scope.scopeKey}\" exhausted its generation counter`);\n\t\tconst catalog = {\n\t\t\tcatalog_id: catalogIdentity(currentCatalog, rows),\n\t\t\tbyte_size: compilation.byteSize,\n\t\t\tcatalog_hash: compilation.catalogHash,\n\t\t\tchannel_id: input.scope.channelId,\n\t\t\tchannel_key: encodeChannelKey(input.scope.channelName),\n\t\t\tfingerprint_hash: input.scope.fingerprintHash,\n\t\t\tgeneration,\n\t\t\tis_tombstone: compilation.payload.releaseDescriptors.length === 0,\n\t\t\tpayload: compilation.canonicalPayload,\n\t\t\tplatform: input.scope.platform,\n\t\t\tscope_key: input.scope.scopeKey,\n\t\t\tstrategy: input.scope.strategy,\n\t\t\tupdated_at_ms: input.updatedAtMs ?? Date.now()\n\t\t};\n\t\tconst result = await input.database.commit({\n\t\t\tchanges: [{\n\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\toperation: \"put\",\n\t\t\t\trow: catalog\n\t\t\t}],\n\t\t\texpectations: [{\n\t\t\t\tgeneration: currentCatalog?.generation ?? null,\n\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\tscopeKey: input.scope.scopeKey\n\t\t\t}]\n\t\t});\n\t\tif (result.committed) return {\n\t\t\tattempts: attempt,\n\t\t\tcatalog,\n\t\t\tchanged: true,\n\t\t\tdiagnostics: compilation.diagnostics\n\t\t};\n\t\tif (result.conflict.reason !== \"version_conflict\") throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release catalog rebuild failed: ${result.conflict.reason}`);\n\t}\n\tthrow new ReleaseCatalogMutationError(\"VERSION_CONFLICT\", `Release catalog rebuild conflicted ${maxAttempts} times`);\n}\n//#endregion\nexport { ReleaseCatalogMutationError, commitReleaseCatalogMutation, commitReleaseCatalogMutations, preflightReleaseCatalogMutation, preflightReleaseCatalogRebuild, rebuildReleaseCatalog };\n", "import { createUUIDv7After, isUUIDv7 as isUUIDv7$1 } from \"./uuidv7.mjs\";\nimport { ReleaseCatalogMutationError, commitReleaseCatalogMutation, commitReleaseCatalogMutations, preflightReleaseCatalogMutation } from \"./releaseCatalogMutation.mjs\";\nimport { createReleaseCatalogScopeKey, decodeChannelKey, encodeChannelKey } from \"@hot-updater/core\";\n//#region src/releaseManagement.ts\nconst RELEASE_PAGE_SIZE = 1e3;\nvar ReleaseManagementError = class extends Error {\n\tname = \"ReleaseManagementError\";\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t}\n};\nconst readReleaseScope = async (database, scopeKey) => {\n\tconst rows = [];\n\tlet afterReleaseId;\n\tfor (;;) {\n\t\tconst page = await database.models.releases.findManyByScope({\n\t\t\tscopeKey,\n\t\t\t...afterReleaseId === void 0 ? {} : { afterReleaseId },\n\t\t\tconsistency: \"strong\",\n\t\t\tlimit: RELEASE_PAGE_SIZE\n\t\t});\n\t\trows.push(...page);\n\t\tif (page.length < RELEASE_PAGE_SIZE) return rows;\n\t\tconst nextCursor = page.at(-1)?.id;\n\t\tif (nextCursor === void 0 || nextCursor === afterReleaseId) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release paging did not advance for scope \"${scopeKey}\".`);\n\t\tafterReleaseId = nextCursor;\n\t}\n};\nconst createForwardReleaseId = (rows, candidates, nowMs) => {\n\treturn createUUIDv7After([...candidates, rows.at(-1)?.id ?? null].filter((value) => value !== null && isUUIDv7$1(value)).sort().at(-1) ?? null, nowMs);\n};\nconst prepareTargetScope = async ({ channelName, database, fingerprintHash, platform, strategy }) => {\n\tconst channelKey = encodeChannelKey(channelName);\n\tconst channel = (await database.models.channels.list({})).channels.find(({ name }) => name === channelName) ?? (await database.models.channels.insert({\n\t\trow: {\n\t\t\tid: `channel:${channelKey}`,\n\t\t\tname: channelName\n\t\t},\n\t\tonConflict: \"returnExisting\"\n\t})).row;\n\tconst scopeKey = strategy === \"APP_VERSION\" ? createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tplatform,\n\t\tstrategy\n\t}) : createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tfingerprintHash: fingerprintHash ?? \"\",\n\t\tplatform,\n\t\tstrategy\n\t});\n\treturn { scope: {\n\t\tchannelId: channel.id,\n\t\tchannelName,\n\t\tfingerprintHash,\n\t\tplatform,\n\t\tscopeKey,\n\t\tstrategy\n\t} };\n};\nconst loadReleaseTarget = async (input) => {\n\tconst release = await input.database.models.releases.findById(input.releaseId);\n\tif (release === null) throw new ReleaseManagementError(\"RELEASE_NOT_FOUND\", `Release \"${input.releaseId}\" was not found.`);\n\tif (input.expectedRevision !== void 0 && input.expectedRevision !== release.revision) throw new ReleaseManagementError(\"VERSION_CONFLICT\", `Release \"${release.id}\" is revision ${release.revision}; expected ${input.expectedRevision}.`);\n\tconst catalog = await input.database.models.releaseCatalogs.findByScopeKey(release.scope_key);\n\tif (catalog === null) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release \"${release.id}\" has no catalog projection.`);\n\treturn {\n\t\trelease,\n\t\tscope: {\n\t\t\tchannelId: release.channel_id,\n\t\t\tchannelName: decodeChannelKey(catalog.channel_key),\n\t\t\tfingerprintHash: release.fingerprint_hash,\n\t\t\tplatform: release.platform,\n\t\t\tscopeKey: release.scope_key,\n\t\t\tstrategy: release.strategy\n\t\t}\n\t};\n};\nconst releasePolicyUpdate = (release, patch, updatedAtMs) => {\n\tif (patch.fingerprintHash !== void 0 && patch.fingerprintHash !== release.fingerprint_hash) throw new ReleaseManagementError(\"SCOPE_MOVE_UNSUPPORTED\", \"Changing a fingerprint target requires an atomic Release scope move.\");\n\treturn {\n\t\t...patch.enabled === void 0 ? {} : { enabled: patch.enabled },\n\t\t...patch.message === void 0 ? {} : { message: patch.message },\n\t\t...patch.rolloutCohortCount === void 0 ? {} : { rollout_cohort_count: patch.rolloutCohortCount },\n\t\t...patch.shouldForceUpdate === void 0 ? {} : { should_force_update: patch.shouldForceUpdate },\n\t\t...patch.targetAppVersion === void 0 ? {} : { target_app_version: patch.targetAppVersion },\n\t\t...patch.targetCohorts === void 0 ? {} : { target_cohorts: [...patch.targetCohorts] },\n\t\tupdated_at_ms: updatedAtMs\n\t};\n};\nasync function updateReleasePolicy(input) {\n\tconst { release, scope } = await loadReleaseTarget(input);\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\treturn commitReleaseCatalogMutation({\n\t\tdatabase: input.database,\n\t\tmutation: {\n\t\t\tid: release.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: releasePolicyUpdate(release, input.patch, updatedAtMs)\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs\n\t});\n}\nasync function preflightReleasePolicy(input) {\n\tconst { release, scope } = await loadReleaseTarget(input);\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\treturn preflightReleaseCatalogMutation({\n\t\tdatabase: input.database,\n\t\tmutation: {\n\t\t\tid: release.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: releasePolicyUpdate(release, input.patch, updatedAtMs)\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs\n\t});\n}\nasync function deleteRelease(input) {\n\tconst { release, scope } = await loadReleaseTarget(input);\n\tif (release.enabled) throw new ReleaseManagementError(\"ENABLED_RELEASE\", `Disable Release \"${release.id}\" before hard deletion.`);\n\treturn commitReleaseCatalogMutation({\n\t\tdatabase: input.database,\n\t\tmutation: {\n\t\t\tid: release.id,\n\t\t\toperation: \"delete\"\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs: input.updatedAtMs\n\t});\n}\nasync function promoteRelease(input) {\n\tconst { release: source, scope: sourceScope } = await loadReleaseTarget(input);\n\tif (source.kind !== \"BUNDLE\" || source.bundle_id === null) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Only a Bundle Release can be promoted.\");\n\tconst targetChannel = input.targetChannel.trim();\n\tif (targetChannel.length === 0) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Promotion requires a target channel.\");\n\tconst { scope: targetScope } = await prepareTargetScope({\n\t\tchannelName: targetChannel,\n\t\tdatabase: input.database,\n\t\tfingerprintHash: source.fingerprint_hash,\n\t\tplatform: source.platform,\n\t\tstrategy: source.strategy\n\t});\n\tif (targetScope.scopeKey === sourceScope.scopeKey) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Source and target Release scopes are the same.\");\n\tconst targetRows = await readReleaseScope(input.database, targetScope.scopeKey);\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\tconst targetMutation = {\n\t\tmutation: {\n\t\t\toperation: \"insert\",\n\t\t\trow: {\n\t\t\t\t...source,\n\t\t\t\tid: createForwardReleaseId(targetRows, [source.id, source.bundle_id], updatedAtMs),\n\t\t\t\trevision: 1,\n\t\t\t\tscope_key: targetScope.scopeKey,\n\t\t\t\tchannel_id: targetScope.channelId,\n\t\t\t\tenabled: true,\n\t\t\t\trollout_cohort_count: 1e3,\n\t\t\t\ttarget_cohorts: [],\n\t\t\t\toperation: \"PROMOTE\",\n\t\t\t\tsource_release_id: source.id,\n\t\t\t\tcreated_at_ms: updatedAtMs,\n\t\t\t\tupdated_at_ms: updatedAtMs\n\t\t\t}\n\t\t},\n\t\tscope: targetScope,\n\t\tupdatedAtMs\n\t};\n\tconst sourceMutation = input.action === \"move\" ? {\n\t\tmutation: {\n\t\t\tid: source.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: {\n\t\t\t\tenabled: false,\n\t\t\t\tupdated_at_ms: updatedAtMs\n\t\t\t}\n\t\t},\n\t\tscope: sourceScope,\n\t\tupdatedAtMs\n\t} : null;\n\tconst results = await commitReleaseCatalogMutations({\n\t\tdatabase: input.database,\n\t\tmutations: sourceMutation === null ? [targetMutation] : [sourceMutation, targetMutation]\n\t});\n\treturn {\n\t\tsource: sourceMutation === null ? null : results[0],\n\t\ttarget: results.at(-1)\n\t};\n}\nconst prepareRollbackRelease = async (input) => {\n\tconst { release: source, scope } = await loadReleaseTarget(input);\n\tif (!source.enabled) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Rollback requires an enabled Release.\");\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\treturn {\n\t\tmutation: {\n\t\t\tid: source.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: {\n\t\t\t\tenabled: false,\n\t\t\t\tupdated_at_ms: updatedAtMs\n\t\t\t}\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs\n\t};\n};\nasync function rollbackReleases(input) {\n\tconst mutations = await Promise.all(input.rollbacks.map((rollback) => prepareRollbackRelease({\n\t\t...rollback,\n\t\tdatabase: input.database\n\t})));\n\treturn commitReleaseCatalogMutations({\n\t\tdatabase: input.database,\n\t\tmutations\n\t});\n}\nasync function rollbackRelease(input) {\n\tconst [result] = await rollbackReleases({\n\t\tdatabase: input.database,\n\t\trollbacks: [input]\n\t});\n\treturn result;\n}\n//#endregion\nexport { ReleaseManagementError, deleteRelease, preflightReleasePolicy, promoteRelease, rollbackRelease, rollbackReleases, updateReleasePolicy };\n", "//#region src/storageDownloadPath.ts\nconst encodeBase64Url = (value) => {\n\tlet binary = \"\";\n\tfor (const byte of new TextEncoder().encode(value)) binary += String.fromCharCode(byte);\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/, \"\");\n};\nconst decodeBase64Url = (value) => {\n\ttry {\n\t\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\t\tconst binary = atob(base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\"));\n\t\treturn new TextDecoder(void 0, { fatal: true }).decode(Uint8Array.from(binary, (character) => character.charCodeAt(0)));\n\t} catch {\n\t\treturn null;\n\t}\n};\nconst encodeBytes = (bytes) => {\n\tlet binary = \"\";\n\tfor (const byte of bytes) binary += String.fromCharCode(byte);\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/, \"\");\n};\nconst createStorageDownloadPath = (storageUri, signature) => `/storage/${encodeBase64Url(storageUri)}/${encodeURIComponent(signature)}`;\nconst parseStorageDownloadPath = (path) => {\n\tconst match = /^\\/storage\\/([^/]+)\\/([^/]+)$/.exec(path);\n\tif (!match) return null;\n\tconst storageUri = decodeBase64Url(match[1]);\n\tif (storageUri === null) return null;\n\ttry {\n\t\treturn {\n\t\t\tsignature: decodeURIComponent(match[2]),\n\t\t\tstorageUri\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n};\nconst createStorageDownloadUrl = (signingKey) => {\n\tconst key = crypto.subtle.importKey(\"raw\", new TextEncoder().encode(signingKey), {\n\t\thash: \"SHA-256\",\n\t\tname: \"HMAC\"\n\t}, false, [\"sign\"]);\n\treturn async ({ storageUri }) => {\n\t\treturn { url: createStorageDownloadPath(storageUri, encodeBytes(new Uint8Array(await crypto.subtle.sign(\"HMAC\", await key, new TextEncoder().encode(storageUri))))) };\n\t};\n};\n//#endregion\nexport { createStorageDownloadPath, createStorageDownloadUrl, parseStorageDownloadPath };\n", "import { requirePlatformParam, requireRouteParam } from \"./handlerParameters.mjs\";\nimport { canonicalizeAppVersion } from \"@hot-updater/plugin-core\";\n//#region src/handlerReleaseCatalogRoutes.ts\nconst CATALOG_CONTENT_TYPE = \"application/vnd.hot-updater.release-catalog+json; version=1\";\nconst ORIGIN_CACHE_TTL_MS = 5e3;\nconst ORIGIN_CACHE_MAX_ENTRIES = 128;\nconst privateNotFound = () => Response.json({ error: \"Not found\" }, {\n\tstatus: 404,\n\theaders: { \"cache-control\": \"private, no-store\" }\n});\nconst responseHash = async (body) => {\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(body));\n\treturn [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n};\nconst catalogResponse = async (catalog, request, clientAccessHeaderName) => {\n\tif (catalog === null) return privateNotFound();\n\tconst body = JSON.stringify(catalog);\n\tconst etag = `\"sha256:${await responseHash(body)}\"`;\n\tconst headers = {\n\t\t\"cache-control\": \"public, max-age=0, s-maxage=5\",\n\t\t\"content-type\": CATALOG_CONTENT_TYPE,\n\t\tetag,\n\t\tvary: `Accept-Encoding, ${clientAccessHeaderName}`\n\t};\n\tif (request.headers.get(\"if-none-match\") === etag) return new Response(null, {\n\t\theaders,\n\t\tstatus: 304\n\t});\n\treturn new Response(body, {\n\t\theaders,\n\t\tstatus: 200\n\t});\n};\nconst createReleaseCatalogRouteHandlers = (clientAccessHeaderName = \"x-api-key\") => {\n\tconst cache = /* @__PURE__ */ new Map();\n\tconst inFlight = /* @__PURE__ */ new Map();\n\tconst loadCatalog = async (key, load) => {\n\t\tconst cached = cache.get(key);\n\t\tif (cached !== void 0 && cached.expiresAt > Date.now()) {\n\t\t\tcache.delete(key);\n\t\t\tcache.set(key, cached);\n\t\t\treturn cached.catalog;\n\t\t}\n\t\tif (cached !== void 0) cache.delete(key);\n\t\tconst pending = inFlight.get(key);\n\t\tif (pending !== void 0) return pending;\n\t\tconst next = load().then((catalog) => {\n\t\t\tif (catalog !== null) {\n\t\t\t\tcache.set(key, {\n\t\t\t\t\tcatalog,\n\t\t\t\t\texpiresAt: Date.now() + ORIGIN_CACHE_TTL_MS\n\t\t\t\t});\n\t\t\t\twhile (cache.size > ORIGIN_CACHE_MAX_ENTRIES) {\n\t\t\t\t\tconst oldestKey = cache.keys().next().value;\n\t\t\t\t\tif (oldestKey === void 0) break;\n\t\t\t\t\tcache.delete(oldestKey);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn catalog;\n\t\t});\n\t\tinFlight.set(key, next);\n\t\ttry {\n\t\t\treturn await next;\n\t\t} finally {\n\t\t\tinFlight.delete(key);\n\t\t}\n\t};\n\treturn {\n\t\tappVersionReleaseCatalog: async (params, request, api) => {\n\t\t\tif (api.getReleaseCatalog === void 0) return privateNotFound();\n\t\t\tconst rawAppVersion = requireRouteParam(params, \"appVersion\");\n\t\t\tconst appVersion = canonicalizeAppVersion(rawAppVersion);\n\t\t\tif (appVersion === null || appVersion !== rawAppVersion) return Response.json({ error: \"Invalid app version\" }, {\n\t\t\t\tstatus: 400,\n\t\t\t\theaders: { \"cache-control\": \"private, no-store\" }\n\t\t\t});\n\t\t\tconst input = {\n\t\t\t\tappVersion,\n\t\t\t\tchannelKey: requireRouteParam(params, \"channelKey\"),\n\t\t\t\tplatform: requirePlatformParam(params),\n\t\t\t\tstrategy: \"APP_VERSION\"\n\t\t\t};\n\t\t\treturn catalogResponse(await loadCatalog(`app-version:${JSON.stringify(input)}`, () => api.getReleaseCatalog(input)), request, clientAccessHeaderName);\n\t\t},\n\t\tfingerprintReleaseCatalog: async (params, request, api) => {\n\t\t\tif (api.getReleaseCatalog === void 0) return privateNotFound();\n\t\t\tconst input = {\n\t\t\t\tchannelKey: requireRouteParam(params, \"channelKey\"),\n\t\t\t\tfingerprintHash: requireRouteParam(params, \"fingerprintHash\"),\n\t\t\t\tplatform: requirePlatformParam(params),\n\t\t\t\tstrategy: \"FINGERPRINT\"\n\t\t\t};\n\t\t\treturn catalogResponse(await loadCatalog(`fingerprint:${JSON.stringify(input)}`, () => api.getReleaseCatalog(input)), request, clientAccessHeaderName);\n\t\t},\n\t\tartifact: async (params, _request, api) => {\n\t\t\tif (api.getArtifactInfo === void 0) return privateNotFound();\n\t\t\tconst info = await api.getArtifactInfo(requireRouteParam(params, \"targetBundleId\"), requireRouteParam(params, \"currentBundleId\"));\n\t\t\tif (info === null) return privateNotFound();\n\t\t\treturn new Response(JSON.stringify(info), {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: {\n\t\t\t\t\t\"cache-control\": \"private, no-store\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n//#endregion\nexport { createReleaseCatalogRouteHandlers };\n", "import { HandlerBadRequestError } from \"./handlerErrors.mjs\";\nimport { decodeMaybe, requireRouteParam } from \"./handlerParameters.mjs\";\nimport { ReleaseCatalogMutationError, ReleaseManagementError } from \"@hot-updater/plugin-core\";\n//#region src/handlerReleaseManagementRoutes.ts\nconst unavailable = () => Response.json({ error: \"Not found\" }, { status: 404 });\nconst isRecord = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst parseRevision = (value) => {\n\tif (value === void 0 || value === null || value === \"\") return void 0;\n\tconst revision = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isSafeInteger(revision) || revision < 1) throw new HandlerBadRequestError(\"Invalid expected Release revision\");\n\treturn revision;\n};\nconst parsePolicyInput = async (request) => {\n\tconst body = await request.json();\n\tif (!isRecord(body) || !isRecord(body.patch)) throw new HandlerBadRequestError(\"Invalid Release policy mutation\");\n\treturn {\n\t\texpectedRevision: parseRevision(body.expectedRevision),\n\t\tpatch: body.patch\n\t};\n};\nconst mutationResponse = async (operation) => {\n\ttry {\n\t\treturn Response.json({ data: await operation() });\n\t} catch (error) {\n\t\tif (error instanceof ReleaseManagementError || error instanceof ReleaseCatalogMutationError) {\n\t\t\tconst status = error.code === \"RELEASE_NOT_FOUND\" ? 404 : error.code === \"VERSION_CONFLICT\" ? 409 : 400;\n\t\t\treturn Response.json({\n\t\t\t\tcode: error.code,\n\t\t\t\terror: error.message\n\t\t\t}, { status });\n\t\t}\n\t\tthrow error;\n\t}\n};\nconst createReleaseManagementRouteHandlers = () => ({\n\tgetRelease: async (params, _request, api) => {\n\t\tif (api.getReleaseById === void 0) return unavailable();\n\t\tconst row = await api.getReleaseById(requireRouteParam(params, \"id\"));\n\t\treturn row === null ? unavailable() : Response.json({ data: row }, { status: 200 });\n\t},\n\tgetReleases: async (_params, request, api) => {\n\t\tconst url = new URL(request.url);\n\t\tconst scopeKey = url.searchParams.get(\"scopeKey\");\n\t\tconst limit = Number(url.searchParams.get(\"limit\") ?? \"100\");\n\t\tif (!Number.isSafeInteger(limit) || limit <= 0 || limit > 1e3) throw new HandlerBadRequestError(\"Invalid Release scope query\");\n\t\tif (scopeKey !== null) {\n\t\t\tif (scopeKey.length === 0 || api.getReleasesByScope === void 0) throw new HandlerBadRequestError(\"Invalid Release scope query\");\n\t\t\tconst afterReleaseId = url.searchParams.get(\"afterReleaseId\") ?? void 0;\n\t\t\treturn Response.json({ data: await api.getReleasesByScope({\n\t\t\t\t...afterReleaseId === void 0 ? {} : { afterReleaseId },\n\t\t\t\tlimit,\n\t\t\t\tscopeKey\n\t\t\t}) });\n\t\t}\n\t\tif (api.getReleases === void 0) return unavailable();\n\t\tconst enabledValue = url.searchParams.get(\"enabled\");\n\t\tconst enabled = enabledValue === null ? void 0 : enabledValue === \"true\" ? true : enabledValue === \"false\" ? false : null;\n\t\tconst platformValue = url.searchParams.get(\"platform\");\n\t\tconst platform = platformValue === null ? void 0 : platformValue === \"ios\" || platformValue === \"android\" ? platformValue : null;\n\t\tif (enabled === null || platform === null) throw new HandlerBadRequestError(\"Invalid Release list filter\");\n\t\treturn Response.json({ data: await api.getReleases({\n\t\t\tafterReleaseId: url.searchParams.get(\"afterReleaseId\") ?? void 0,\n\t\t\tbeforeReleaseId: url.searchParams.get(\"beforeReleaseId\") ?? void 0,\n\t\t\tbundleId: url.searchParams.get(\"bundleId\") ?? void 0,\n\t\t\tchannelId: url.searchParams.get(\"channelId\") ?? void 0,\n\t\t\tenabled,\n\t\t\tlimit,\n\t\t\tplatform,\n\t\t\ttargetAppVersion: url.searchParams.get(\"targetAppVersion\") ?? void 0\n\t\t}) });\n\t},\n\tgetReleaseCatalogRow: async (params, _request, api) => {\n\t\tif (api.getReleaseCatalogByScopeKey === void 0) return unavailable();\n\t\tconst row = await api.getReleaseCatalogByScopeKey(decodeMaybe(requireRouteParam(params, \"scopeKey\")) ?? \"\");\n\t\treturn row === null ? unavailable() : Response.json({ data: row }, { status: 200 });\n\t},\n\tgetReleaseCatalogs: async (_params, request, api) => {\n\t\tif (api.getReleaseCatalogs === void 0) return unavailable();\n\t\tconst url = new URL(request.url);\n\t\tconst limit = Number(url.searchParams.get(\"limit\") ?? \"100\");\n\t\tif (!Number.isSafeInteger(limit) || limit <= 0 || limit > 1e3) throw new HandlerBadRequestError(\"Invalid Release catalog list query\");\n\t\treturn Response.json({ data: await api.getReleaseCatalogs({\n\t\t\tafterScopeKey: url.searchParams.get(\"afterScopeKey\") ?? void 0,\n\t\t\tlimit\n\t\t}) });\n\t},\n\tupdateRelease: async (params, request, api) => {\n\t\tif (api.updateReleasePolicy === void 0) return unavailable();\n\t\tconst input = await parsePolicyInput(request);\n\t\treturn mutationResponse(() => api.updateReleasePolicy({\n\t\t\t...input,\n\t\t\treleaseId: requireRouteParam(params, \"id\")\n\t\t}));\n\t},\n\tpreflightRelease: async (params, request, api) => {\n\t\tif (api.preflightReleasePolicy === void 0) return unavailable();\n\t\tconst input = await parsePolicyInput(request);\n\t\treturn mutationResponse(() => api.preflightReleasePolicy({\n\t\t\t...input,\n\t\t\treleaseId: requireRouteParam(params, \"id\")\n\t\t}));\n\t},\n\tdeleteRelease: async (params, request, api) => {\n\t\tif (api.deleteRelease === void 0) return unavailable();\n\t\tconst releaseId = requireRouteParam(params, \"id\");\n\t\tconst url = new URL(request.url);\n\t\tif (url.searchParams.get(\"confirm\") !== releaseId) throw new HandlerBadRequestError(\"Release hard deletion requires confirm=<release-id>\");\n\t\treturn mutationResponse(() => api.deleteRelease({\n\t\t\texpectedRevision: parseRevision(url.searchParams.get(\"expectedRevision\")),\n\t\t\treleaseId\n\t\t}));\n\t},\n\trebuildReleaseCatalog: async (params, _request, api) => {\n\t\tif (api.rebuildReleaseCatalog === void 0) return unavailable();\n\t\treturn mutationResponse(() => api.rebuildReleaseCatalog(decodeMaybe(requireRouteParam(params, \"scopeKey\")) ?? \"\"));\n\t},\n\tcommitDatabase: async (_params, request, api) => {\n\t\tif (api.commitDatabase === void 0) return unavailable();\n\t\tconst input = await request.json();\n\t\treturn Response.json({ data: await api.commitDatabase(input) });\n\t}\n});\n//#endregion\nexport { createReleaseManagementRouteHandlers };\n", "//#region src/internalRouter.ts\nconst normalizePath = (path) => {\n\tif (!path) return \"/\";\n\tif (path === \"/\") return path;\n\tconst withLeadingSlash = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn withLeadingSlash.endsWith(\"/\") ? withLeadingSlash.slice(0, -1) : withLeadingSlash;\n};\nconst toSegments = (path) => {\n\tconst normalized = normalizePath(path);\n\treturn normalized === \"/\" ? [] : normalized.slice(1).split(\"/\");\n};\nfunction createRouter() {\n\treturn { routes: [] };\n}\nfunction addRoute(router, method, path, data) {\n\tconst segments = toSegments(path);\n\tconst paramNames = segments.filter((segment) => segment.startsWith(\":\")).map((segment) => segment.slice(1));\n\trouter.routes.push({\n\t\tdata,\n\t\tmethod: method.toUpperCase(),\n\t\tparamNames,\n\t\tsegments\n\t});\n}\nfunction findRoute(router, method, path) {\n\tconst normalizedMethod = method.toUpperCase();\n\tconst pathSegments = toSegments(path);\n\tfor (const route of router.routes) {\n\t\tif (route.method !== normalizedMethod) continue;\n\t\tif (route.segments.length !== pathSegments.length) continue;\n\t\tconst params = {};\n\t\tlet matched = true;\n\t\tfor (let index = 0; index < route.segments.length; index += 1) {\n\t\t\tconst routeSegment = route.segments[index];\n\t\t\tconst pathSegment = pathSegments[index];\n\t\t\tif (routeSegment.startsWith(\":\")) {\n\t\t\t\tparams[routeSegment.slice(1)] = pathSegment;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (routeSegment !== pathSegment) {\n\t\t\t\tmatched = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matched) return {\n\t\t\tdata: route.data,\n\t\t\tparams\n\t\t};\n\t}\n}\n//#endregion\nexport { addRoute, createRouter, findRoute };\n", "import { createAnalyticsRouteHandlers, registerAnalyticsAdminRoutes, registerAnalyticsClientRoutes } from \"./analytics/routes.mjs\";\nimport { HandlerBadRequestError } from \"./handlerErrors.mjs\";\nimport { createBundleRouteHandlers } from \"./handlerBundleRoutes.mjs\";\nimport { createReleaseCatalogRouteHandlers } from \"./handlerReleaseCatalogRoutes.mjs\";\nimport { createReleaseManagementRouteHandlers } from \"./handlerReleaseManagementRoutes.mjs\";\nimport { createVersionRouteHandlers } from \"./handlerVersionRoutes.mjs\";\nimport { addRoute, createRouter, findRoute } from \"./internalRouter.mjs\";\n//#region src/handler.ts\nconst withPrivateNoStore = (response) => {\n\tconst headers = new Headers(response.headers);\n\theaders.set(\"cache-control\", \"private, no-store\");\n\treturn new Response(response.body, {\n\t\theaders,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText\n\t});\n};\nconst errorResponse = (error, status) => Response.json({ error }, {\n\theaders: { \"cache-control\": \"private, no-store\" },\n\tstatus\n});\nconst requiresApiKey = (handlerName) => handlerName === \"appVersionReleaseCatalog\" || handlerName === \"fingerprintReleaseCatalog\" || handlerName === \"artifact\" || handlerName === \"appendBundleEvent\";\nconst createRequestHandler = ({ api, apiKeyAuth, privateResponses = false, routeHandlers, router }) => async (request) => {\n\ttry {\n\t\tconst match = findRoute(router, request.method, new URL(request.url).pathname);\n\t\tif (!match) return errorResponse(\"Not found\", 404);\n\t\tif (apiKeyAuth !== void 0 && requiresApiKey(match.data)) {\n\t\t\tlet authenticated;\n\t\t\ttry {\n\t\t\t\tauthenticated = await apiKeyAuth.authenticate(request);\n\t\t\t} catch {\n\t\t\t\treturn errorResponse(\"Service unavailable\", 503);\n\t\t\t}\n\t\t\tif (!authenticated) return errorResponse(\"Unauthorized\", 401);\n\t\t}\n\t\tconst handler = routeHandlers[match.data];\n\t\tif (!handler) return errorResponse(\"Handler not found\", 500);\n\t\tconst response = await handler(match.params, request, api);\n\t\treturn privateResponses ? withPrivateNoStore(response) : response;\n\t} catch (error) {\n\t\tif (error instanceof HandlerBadRequestError) return errorResponse(error.message, 400);\n\t\tconsole.error(\"Hot Updater handler error:\", error);\n\t\treturn Response.json({ error: \"Internal server error\" }, {\n\t\t\theaders: { \"cache-control\": \"private, no-store\" },\n\t\t\tstatus: 500\n\t\t});\n\t}\n};\nconst createDownloadStorageRouteHandler = (downloadStorageObject) => async (params) => {\n\tconst token = params.token;\n\tconst signature = params.signature;\n\tif (!token || !signature) return errorResponse(\"Not found\", 404);\n\tconst response = await downloadStorageObject(token, signature);\n\tif (!response) return errorResponse(\"Not found\", 404);\n\tconst headers = new Headers(response.headers);\n\tif (!headers.has(\"cache-control\")) headers.set(\"cache-control\", \"public, max-age=31536000, immutable\");\n\treturn new Response(response.body, {\n\t\theaders,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText\n\t});\n};\nfunction createHandlers(api) {\n\treturn createHotUpdaterHandlers(api);\n}\nfunction createHotUpdaterHandlers(api, analytics, apiKeyAuth, downloadStorageObject) {\n\tconst routeHandlers = {\n\t\t...createVersionRouteHandlers(),\n\t\t...createReleaseCatalogRouteHandlers(apiKeyAuth?.headerName),\n\t\t...createReleaseManagementRouteHandlers(),\n\t\t...createBundleRouteHandlers(),\n\t\t...analytics === void 0 ? {} : createAnalyticsRouteHandlers(analytics),\n\t\t...downloadStorageObject === void 0 ? {} : { downloadStorageObject: createDownloadStorageRouteHandler(downloadStorageObject) }\n\t};\n\tconst clientRouter = createRouter();\n\tconst addClientRoute = (method, path, handler) => addRoute(clientRouter, method, path, handler);\n\taddClientRoute(\"GET\", \"/version\", \"version\");\n\tif (downloadStorageObject !== void 0) addClientRoute(\"GET\", \"/storage/:token/:signature\", \"downloadStorageObject\");\n\taddClientRoute(\"GET\", \"/release-catalogs/app-version/:platform/:channelKey/:appVersion\", \"appVersionReleaseCatalog\");\n\taddClientRoute(\"GET\", \"/release-catalogs/fingerprint/:platform/:channelKey/:fingerprintHash\", \"fingerprintReleaseCatalog\");\n\taddClientRoute(\"GET\", \"/artifacts/:targetBundleId/from/:currentBundleId\", \"artifact\");\n\tif (analytics !== void 0) registerAnalyticsClientRoutes(addClientRoute);\n\tconst adminRouter = createRouter();\n\tconst addAdminRoute = (method, path, handler) => addRoute(adminRouter, method, path, handler);\n\taddAdminRoute(\"GET\", \"/releases/:id\", \"getRelease\");\n\taddAdminRoute(\"GET\", \"/releases\", \"getReleases\");\n\taddAdminRoute(\"PATCH\", \"/releases/:id\", \"updateRelease\");\n\taddAdminRoute(\"POST\", \"/releases/:id/preflight\", \"preflightRelease\");\n\taddAdminRoute(\"DELETE\", \"/releases/:id\", \"deleteRelease\");\n\taddAdminRoute(\"GET\", \"/release-catalogs/:scopeKey\", \"getReleaseCatalogRow\");\n\taddAdminRoute(\"GET\", \"/release-catalogs\", \"getReleaseCatalogs\");\n\taddAdminRoute(\"POST\", \"/release-catalogs/:scopeKey/rebuild\", \"rebuildReleaseCatalog\");\n\taddAdminRoute(\"POST\", \"/database/commit\", \"commitDatabase\");\n\taddAdminRoute(\"GET\", \"/channels\", \"getChannels\");\n\taddAdminRoute(\"POST\", \"/channels\", \"createChannel\");\n\taddAdminRoute(\"DELETE\", \"/channels/:id\", \"deleteChannel\");\n\taddAdminRoute(\"GET\", \"/bundles/:id\", \"getBundle\");\n\taddAdminRoute(\"GET\", \"/bundles\", \"getBundles\");\n\taddAdminRoute(\"POST\", \"/bundles\", \"createBundles\");\n\taddAdminRoute(\"PATCH\", \"/bundles/:id\", \"updateBundle\");\n\taddAdminRoute(\"DELETE\", \"/bundles/:id\", \"deleteBundle\");\n\tif (analytics !== void 0) registerAnalyticsAdminRoutes(addAdminRoute);\n\treturn Object.freeze({\n\t\tclient: createRequestHandler({\n\t\t\tapi,\n\t\t\tapiKeyAuth,\n\t\t\trouteHandlers,\n\t\t\trouter: clientRouter\n\t\t}),\n\t\tadmin: createRequestHandler({\n\t\t\tapi,\n\t\t\tprivateResponses: true,\n\t\t\trouteHandlers,\n\t\t\trouter: adminRouter\n\t\t})\n\t});\n}\n//#endregion\nexport { createHandlers, createHotUpdaterHandlers };\n", "//#region src/analytics/bounded/activeOverview.ts\nconst HOUR_MS = 3600 * 1e3;\nconst DAY_MS = 24 * HOUR_MS;\nconst ACTIVE_BUNDLE_EVENT_TYPES = [\n\t\"UPDATE_APPLIED\",\n\t\"RECOVERED\",\n\t\"RELEASE_ADOPTED\",\n\t\"UNCHANGED\"\n];\nconst activeWindowDefinitions = {\n\t\"24h\": {\n\t\tbucketCount: 24,\n\t\tbucketSizeMs: HOUR_MS\n\t},\n\t\"7d\": {\n\t\tbucketCount: 7,\n\t\tbucketSizeMs: DAY_MS\n\t},\n\t\"30d\": {\n\t\tbucketCount: 30,\n\t\tbucketSizeMs: DAY_MS\n\t}\n};\nfunction getActiveWindowDefinition(window) {\n\treturn activeWindowDefinitions[window];\n}\nfunction compareCodePoints(left, right) {\n\tif (left < right) return -1;\n\tif (left > right) return 1;\n\treturn 0;\n}\nfunction isNewer(candidate, current) {\n\treturn candidate.received_at_ms > current.received_at_ms || candidate.received_at_ms === current.received_at_ms && compareCodePoints(candidate.id, current.id) > 0;\n}\nfunction collectActiveInstallationOverview(request) {\n\tconst definition = getActiveWindowDefinition(request.window);\n\tconst windowStartMs = request.asOfMs - definition.bucketCount * definition.bucketSizeMs;\n\tconst rows = request.rows.filter((row) => row.received_at_ms >= windowStartMs && row.received_at_ms < request.asOfMs);\n\tconst latestByInstall = /* @__PURE__ */ new Map();\n\tfor (const row of rows) {\n\t\tconst current = latestByInstall.get(row.install_id);\n\t\tif (current === void 0 || isNewer(row, current)) latestByInstall.set(row.install_id, row);\n\t}\n\tconst selectedRows = [...latestByInstall.values()].filter((row) => request.userId === void 0 || row.user_id === request.userId);\n\tconst selectedInstallIds = new Set(selectedRows.map((row) => row.install_id));\n\tconst bundleCounts = /* @__PURE__ */ new Map();\n\tfor (const row of selectedRows) bundleCounts.set(row.to_bundle_id, (bundleCounts.get(row.to_bundle_id) ?? 0) + 1);\n\tconst latestByBucket = Array.from({ length: definition.bucketCount }, () => /* @__PURE__ */ new Map());\n\tfor (const row of rows) {\n\t\tif (!selectedInstallIds.has(row.install_id)) continue;\n\t\tconst bucket = latestByBucket[Math.floor((row.received_at_ms - windowStartMs) / definition.bucketSizeMs)];\n\t\tif (bucket === void 0) continue;\n\t\tconst current = bucket.get(row.install_id);\n\t\tif (current === void 0 || isNewer(row, current)) bucket.set(row.install_id, row);\n\t}\n\tconst bundleCountsByBucket = latestByBucket.map((bucket) => {\n\t\tconst counts = /* @__PURE__ */ new Map();\n\t\tfor (const row of bucket.values()) counts.set(row.to_bundle_id, (counts.get(row.to_bundle_id) ?? 0) + 1);\n\t\treturn counts;\n\t});\n\tconst bundleObservationTotals = /* @__PURE__ */ new Map();\n\tfor (const counts of bundleCountsByBucket) for (const [bundleId, count] of counts) bundleObservationTotals.set(bundleId, (bundleObservationTotals.get(bundleId) ?? 0) + count);\n\treturn {\n\t\tasOfMs: request.asOfMs,\n\t\twindow: request.window,\n\t\tactiveInstallations: selectedInstallIds.size,\n\t\tseries: latestByBucket.map((bucket, index) => ({\n\t\t\tbucketStartMs: windowStartMs + index * definition.bucketSizeMs,\n\t\t\tvalue: bucket.size\n\t\t})),\n\t\tbundleSeries: [...bundleObservationTotals].sort(([leftId, leftTotal], [rightId, rightTotal]) => rightTotal - leftTotal || compareCodePoints(leftId, rightId)).map(([bundleId]) => ({\n\t\t\tbundleId,\n\t\t\tseries: bundleCountsByBucket.map((counts, index) => ({\n\t\t\t\tbucketStartMs: windowStartMs + index * definition.bucketSizeMs,\n\t\t\t\tvalue: counts.get(bundleId) ?? 0\n\t\t\t}))\n\t\t})),\n\t\tbundles: [...bundleCounts].map(([bundleId, installations]) => ({\n\t\t\tbundleId,\n\t\t\tinstallations\n\t\t})).sort((left, right) => right.installations - left.installations || compareCodePoints(left.bundleId, right.bundleId))\n\t};\n}\n//#endregion\nexport { ACTIVE_BUNDLE_EVENT_TYPES, collectActiveInstallationOverview, getActiveWindowDefinition };\n", "import { AnalyticsScanLimitExceededError } from \"../errors.mjs\";\nimport { ACTIVE_BUNDLE_EVENT_TYPES, getActiveWindowDefinition } from \"./activeOverview.mjs\";\n//#region src/analytics/bounded/scan.ts\nconst ANALYTICS_SCAN_MAX_ROWS = 5e4;\nconst ANALYTICS_MATERIALIZATION_LIMIT = ANALYTICS_SCAN_MAX_ROWS + 1;\nconst ANALYTICS_SCAN_PAGE_SIZE = 1e3;\nconst ANALYTICS_LOWER_BOUND_ID = \"00000000-0000-0000-0000-000000000000\";\nconst compareCodePoints = (left, right) => {\n\tif (left < right) return -1;\n\tif (left > right) return 1;\n\treturn 0;\n};\nconst compareEventNewest = (left, right) => right.received_at_ms - left.received_at_ms || compareCodePoints(right.id, left.id);\nconst compareEventOldest = (left, right) => left.received_at_ms - right.received_at_ms || compareCodePoints(left.id, right.id);\nconst materializeEventRows = async (scope) => {\n\tconst rows = [];\n\tconst seenIds = /* @__PURE__ */ new Set();\n\tlet after = scope.lowerBoundMs === void 0 ? void 0 : {\n\t\treceivedAtMs: scope.lowerBoundMs,\n\t\tid: ANALYTICS_LOWER_BOUND_ID\n\t};\n\twhile (rows.length < ANALYTICS_MATERIALIZATION_LIMIT) {\n\t\tconst limit = Math.min(ANALYTICS_SCAN_PAGE_SIZE, ANALYTICS_MATERIALIZATION_LIMIT - rows.length);\n\t\tconst page = await scope.persistence.scan({\n\t\t\tbeforeReceivedAtMs: scope.cutoffMs,\n\t\t\t...after === void 0 ? {} : { after },\n\t\t\tlimit\n\t\t});\n\t\tif (page.length === 0) break;\n\t\tif (page.length > limit) throw new AnalyticsPersistenceOrderError();\n\t\tlet previous = after === void 0 ? void 0 : {\n\t\t\treceived_at_ms: after.receivedAtMs,\n\t\t\tid: after.id\n\t\t};\n\t\tfor (const row of page) {\n\t\t\tif (row.received_at_ms >= scope.cutoffMs || previous !== void 0 && compareEventOldest(previous, row) >= 0 || seenIds.has(row.id)) throw new AnalyticsPersistenceOrderError();\n\t\t\tseenIds.add(row.id);\n\t\t\trows.push(row);\n\t\t\tprevious = row;\n\t\t}\n\t\tconst last = page.at(-1);\n\t\tif (last !== void 0) after = {\n\t\t\treceivedAtMs: last.received_at_ms,\n\t\t\tid: last.id\n\t\t};\n\t\tif (rows.length > 5e4) throw new AnalyticsScanLimitExceededError(ANALYTICS_SCAN_MAX_ROWS);\n\t}\n\treturn rows;\n};\nvar AnalyticsPersistenceOrderError = class extends Error {\n\tname = \"AnalyticsPersistenceOrderError\";\n\tconstructor() {\n\t\tsuper(\"Analytics persistence did not advance its scan cursor.\");\n\t}\n};\nconst materializeActiveRows = async (scope, window) => {\n\tconst definition = getActiveWindowDefinition(window);\n\tconst durationMs = definition.bucketCount * definition.bucketSizeMs;\n\treturn (await materializeEventRows({\n\t\t...scope,\n\t\tlowerBoundMs: scope.cutoffMs - durationMs\n\t})).filter((row) => row.received_at_ms >= scope.cutoffMs - durationMs && ACTIVE_BUNDLE_EVENT_TYPES.includes(row.type));\n};\nconst startOfUtcHour = (value) => {\n\tconst date = new Date(value);\n\treturn Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours());\n};\nconst startOfUtcDay = (value) => {\n\tconst date = new Date(value);\n\treturn Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n};\nconst getWindowRange = (window, now) => {\n\tif (window === \"24h\") return {\n\t\tsizeMs: 3600 * 1e3,\n\t\trangeStart: startOfUtcHour(now) - 1380 * 60 * 1e3\n\t};\n\tconst days = window === \"7d\" ? 7 : 30;\n\treturn {\n\t\tsizeMs: 1440 * 60 * 1e3,\n\t\trangeStart: startOfUtcDay(now) - (days - 1) * 24 * 60 * 60 * 1e3\n\t};\n};\nconst materializeRowsForWindow = async (scope, window) => {\n\tif (window === \"all\") return materializeEventRows(scope);\n\tconst range = getWindowRange(window, scope.cutoffMs);\n\treturn (await materializeEventRows({\n\t\t...scope,\n\t\tlowerBoundMs: range.rangeStart\n\t})).filter(({ received_at_ms }) => received_at_ms >= range.rangeStart);\n};\nconst bucketStart = (receivedAtMs, sizeMs) => sizeMs === 3600 * 1e3 ? startOfUtcHour(receivedAtMs) : startOfUtcDay(receivedAtMs);\nconst createSeries = (request) => {\n\tconst range = request.window === \"all\" ? void 0 : getWindowRange(request.window, request.cutoffMs);\n\tconst sizeMs = range?.sizeMs ?? 1440 * 60 * 1e3;\n\tconst installIdsByBucket = /* @__PURE__ */ new Map();\n\tlet oldestMs = request.cutoffMs;\n\tfor (const row of request.rows) {\n\t\toldestMs = Math.min(oldestMs, row.received_at_ms);\n\t\tconst start = bucketStart(row.received_at_ms, sizeMs);\n\t\tconst installIds = installIdsByBucket.get(start) ?? /* @__PURE__ */ new Set();\n\t\tinstallIds.add(row.install_id);\n\t\tinstallIdsByBucket.set(start, installIds);\n\t}\n\tconst first = range?.rangeStart ?? startOfUtcDay(oldestMs);\n\tconst last = bucketStart(request.cutoffMs, sizeMs);\n\treturn Array.from({ length: Math.floor((last - first) / sizeMs) + 1 }, (_, index) => {\n\t\tconst start = first + index * sizeMs;\n\t\treturn {\n\t\t\tbucketStartMs: start,\n\t\t\tvalue: installIdsByBucket.get(start)?.size ?? 0\n\t\t};\n\t});\n};\nconst collectEventActivity = (request) => {\n\tconst range = request.window === \"all\" ? void 0 : getWindowRange(request.window, request.cutoffMs);\n\tconst rows = range === void 0 ? request.rows : request.rows.filter(({ received_at_ms }) => received_at_ms >= range.rangeStart && received_at_ms < request.cutoffMs);\n\tconst installs = /* @__PURE__ */ new Set();\n\tconst installsByCohort = /* @__PURE__ */ new Map();\n\tfor (const row of rows) {\n\t\tinstalls.add(row.install_id);\n\t\tconst cohort = installsByCohort.get(row.cohort) ?? /* @__PURE__ */ new Set();\n\t\tcohort.add(row.install_id);\n\t\tinstallsByCohort.set(row.cohort, cohort);\n\t}\n\treturn {\n\t\tsummary: installs.size,\n\t\tcohorts: [...installsByCohort].sort(([left], [right]) => compareCodePoints(left, right)).map(([cohort, installIds]) => ({\n\t\t\tcohort,\n\t\t\tvalue: installIds.size\n\t\t})),\n\t\tseries: createSeries({\n\t\t\t...request,\n\t\t\trows\n\t\t})\n\t};\n};\n//#endregion\nexport { ANALYTICS_SCAN_MAX_ROWS, collectEventActivity, compareCodePoints, compareEventNewest, materializeActiveRows, materializeEventRows, materializeRowsForWindow };\n", "import { compareCodePoints, compareEventNewest } from \"./scan.mjs\";\n//#region src/analytics/bounded/installationSearch.ts\nfunction toSearchRow(row) {\n\treturn {\n\t\tinstallId: row.install_id,\n\t\tusername: row.username,\n\t\tuserId: row.user_id,\n\t\tlastKnownBundleId: row.to_bundle_id,\n\t\tlatestStatus: row.type,\n\t\tplatform: row.platform,\n\t\tappVersion: row.app_version,\n\t\tchannel: row.channel,\n\t\tcohort: row.cohort,\n\t\treceivedAtMs: row.received_at_ms\n\t};\n}\nfunction matchesIdentity(row, query) {\n\treturn row.install_id.toLowerCase().includes(query) || row.user_id?.toLowerCase().includes(query) === true || row.username?.toLowerCase().includes(query) === true;\n}\nfunction searchEventInstallations(request) {\n\tconst query = request.query.toLowerCase();\n\tconst matchingInstallIds = /* @__PURE__ */ new Set();\n\tfor (const row of request.rows) if (query.length === 0 || matchesIdentity(row, query)) matchingInstallIds.add(row.install_id);\n\tconst latestByInstall = /* @__PURE__ */ new Map();\n\tfor (const row of request.rows) {\n\t\tif (!matchingInstallIds.has(row.install_id)) continue;\n\t\tconst current = latestByInstall.get(row.install_id);\n\t\tif (current === void 0 || compareEventNewest(row, current) < 0) latestByInstall.set(row.install_id, row);\n\t}\n\tconst matchingRows = [...latestByInstall.values()].sort((left, right) => compareCodePoints(left.install_id, right.install_id));\n\tconst pageSize = Math.min(Math.max(request.limit, 0), 100);\n\treturn {\n\t\tdata: matchingRows.slice(request.offset, request.offset + pageSize).map(toSearchRow),\n\t\tpagination: {\n\t\t\ttotal: matchingRows.length,\n\t\t\tlimit: request.limit,\n\t\t\toffset: request.offset\n\t\t}\n\t};\n}\n//#endregion\nexport { searchEventInstallations };\n", "import { createUUIDv7 } from \"@hot-updater/plugin-core\";\n//#region src/analytics/bounded/persistence.ts\nfunction createBundleEventRow(input) {\n\tconst base = {\n\t\tid: createUUIDv7(),\n\t\tinstall_id: input.installId,\n\t\tuser_id: input.userId ?? null,\n\t\tusername: input.username ?? null,\n\t\tfrom_release_id: input.fromReleaseId,\n\t\tto_release_id: input.toReleaseId,\n\t\tto_bundle_id: input.toBundleId,\n\t\tplatform: input.platform,\n\t\tapp_version: input.appVersion,\n\t\tchannel: input.channel,\n\t\tcohort: input.cohort,\n\t\tfingerprint_hash: input.fingerprintHash,\n\t\tsdk_version: input.sdkVersion ?? null,\n\t\treceived_at_ms: Date.now()\n\t};\n\tswitch (input.type) {\n\t\tcase \"UPDATE_APPLIED\":\n\t\tcase \"RECOVERED\":\n\t\tcase \"RELEASE_ADOPTED\": return {\n\t\t\t...base,\n\t\t\ttype: input.type,\n\t\t\tfrom_bundle_id: input.fromBundleId,\n\t\t\tupdate_strategy: input.updateStrategy\n\t\t};\n\t\tcase \"UNCHANGED\": return {\n\t\t\t...base,\n\t\t\ttype: input.type,\n\t\t\tfrom_bundle_id: null,\n\t\t\tupdate_strategy: null\n\t\t};\n\t}\n}\n//#endregion\nexport { createBundleEventRow };\n", "import { collectActiveInstallationOverview } from \"./activeOverview.mjs\";\nimport { ANALYTICS_SCAN_MAX_ROWS, collectEventActivity, compareCodePoints, compareEventNewest, materializeActiveRows, materializeEventRows, materializeRowsForWindow } from \"./scan.mjs\";\nimport { searchEventInstallations } from \"./installationSearch.mjs\";\nimport { createBundleEventRow } from \"./persistence.mjs\";\n//#region src/analytics/bounded/provider.ts\nconst isTransitionEventRow = (row) => row.type === \"UPDATE_APPLIED\" || row.type === \"RECOVERED\";\nconst toHistoryRow = (row) => ({\n\tid: row.id,\n\ttype: row.type,\n\tfromBundleId: row.from_bundle_id,\n\ttoBundleId: row.to_bundle_id,\n\tusername: row.username,\n\tuserId: row.user_id,\n\tplatform: row.platform,\n\tappVersion: row.app_version,\n\tchannel: row.channel,\n\tcohort: row.cohort,\n\treceivedAtMs: row.received_at_ms\n});\nconst isInstalledForBundle = (row, bundleId) => row.type === \"UPDATE_APPLIED\" && row.to_bundle_id === bundleId;\nconst isRecoveredFromBundle = (row, bundleId) => row.type === \"RECOVERED\" && row.from_bundle_id === bundleId;\nconst countDistinctInstallations = (rows) => new Set(rows.map(({ install_id }) => install_id)).size;\nconst getAnalyticsResult = async (persistence, bundleId, window, limit, offset) => {\n\tconst scope = {\n\t\tpersistence,\n\t\tcutoffMs: Date.now()\n\t};\n\tconst rows = (await materializeRowsForWindow(scope, window)).filter(isTransitionEventRow);\n\tconst installedRows = rows.filter((row) => isInstalledForBundle(row, bundleId));\n\tconst recoveredRows = rows.filter((row) => isRecoveredFromBundle(row, bundleId));\n\tconst installed = collectEventActivity({\n\t\trows: installedRows,\n\t\twindow,\n\t\tcutoffMs: scope.cutoffMs\n\t});\n\tconst recovered = collectEventActivity({\n\t\trows: recoveredRows,\n\t\twindow,\n\t\tcutoffMs: scope.cutoffMs\n\t});\n\tconst recentRows = [...installedRows, ...recoveredRows].sort(compareEventNewest);\n\treturn {\n\t\tsummary: {\n\t\t\tinstalled: installed.summary,\n\t\t\trecovered: recovered.summary\n\t\t},\n\t\tseries: {\n\t\t\tinstalled: installed.series,\n\t\t\trecovered: recovered.series\n\t\t},\n\t\tcohorts: {\n\t\t\tinstalled: installed.cohorts,\n\t\t\trecovered: recovered.cohorts\n\t\t},\n\t\trecentEvents: {\n\t\t\tdata: recentRows.slice(offset, offset + limit).map(toHistoryRow),\n\t\t\tpagination: {\n\t\t\t\ttotal: recentRows.length,\n\t\t\t\tlimit,\n\t\t\t\toffset\n\t\t\t}\n\t\t}\n\t};\n};\nconst getAnalyticsSummaries = async (persistence, bundleIds, window) => {\n\tconst normalizedBundleIds = [...new Set(bundleIds)];\n\tif (normalizedBundleIds.length === 0) return [];\n\tconst requestedBundleIds = new Set(normalizedBundleIds);\n\tconst installedByBundleId = /* @__PURE__ */ new Map();\n\tconst recoveredByBundleId = /* @__PURE__ */ new Map();\n\tconst rows = (await materializeRowsForWindow({\n\t\tpersistence,\n\t\tcutoffMs: Date.now()\n\t}, window)).filter(isTransitionEventRow);\n\tfor (const row of rows) {\n\t\tconst bundleId = row.type === \"UPDATE_APPLIED\" ? row.to_bundle_id : row.from_bundle_id;\n\t\tif (!requestedBundleIds.has(bundleId)) continue;\n\t\tconst counts = row.type === \"UPDATE_APPLIED\" ? installedByBundleId : recoveredByBundleId;\n\t\tconst installIds = counts.get(bundleId) ?? /* @__PURE__ */ new Set();\n\t\tinstallIds.add(row.install_id);\n\t\tcounts.set(bundleId, installIds);\n\t}\n\treturn normalizedBundleIds.map((bundleId) => ({\n\t\tbundleId,\n\t\tinstalled: installedByBundleId.get(bundleId)?.size ?? 0,\n\t\trecovered: recoveredByBundleId.get(bundleId)?.size ?? 0\n\t}));\n};\nconst createAnalyticsProvider = (persistence) => Object.freeze({\n\tmode: \"bounded\",\n\tmaxMatchingRows: ANALYTICS_SCAN_MAX_ROWS,\n\tasync appendBundleEvent(input) {\n\t\tawait persistence.append(createBundleEventRow(input));\n\t},\n\tasync getBundleEventSummary(bundleId) {\n\t\tconst rows = (await materializeEventRows({\n\t\t\tpersistence,\n\t\t\tcutoffMs: Date.now()\n\t\t})).filter(isTransitionEventRow);\n\t\treturn {\n\t\t\tinstalled: countDistinctInstallations(rows.filter((row) => isInstalledForBundle(row, bundleId))),\n\t\t\trecovered: countDistinctInstallations(rows.filter((row) => isRecoveredFromBundle(row, bundleId)))\n\t\t};\n\t},\n\tgetBundleEventSummaries(bundleIds, window) {\n\t\treturn getAnalyticsSummaries(persistence, bundleIds, window);\n\t},\n\tgetBundleEventAnalytics(bundleId, window, limit, offset) {\n\t\treturn getAnalyticsResult(persistence, bundleId, window, limit, offset);\n\t},\n\tasync getBundleEventOverview() {\n\t\tconst rows = await materializeEventRows({\n\t\t\tpersistence,\n\t\t\tcutoffMs: Date.now()\n\t\t});\n\t\tconst latestByInstall = /* @__PURE__ */ new Map();\n\t\tfor (const row of rows) {\n\t\t\tconst current = latestByInstall.get(row.install_id);\n\t\t\tif (current === void 0 || compareEventNewest(row, current) < 0) latestByInstall.set(row.install_id, row);\n\t\t}\n\t\tconst counts = /* @__PURE__ */ new Map();\n\t\tfor (const row of latestByInstall.values()) counts.set(row.to_bundle_id, (counts.get(row.to_bundle_id) ?? 0) + 1);\n\t\treturn {\n\t\t\ttrackedInstallations: latestByInstall.size,\n\t\t\tbundles: [...counts].map(([bundleId, installations]) => ({\n\t\t\t\tbundleId,\n\t\t\t\tinstallations\n\t\t\t})).sort((left, right) => right.installations - left.installations || compareCodePoints(left.bundleId, right.bundleId))\n\t\t};\n\t},\n\tasync getActiveInstallationOverview(input) {\n\t\tconst asOfMs = Date.now();\n\t\treturn collectActiveInstallationOverview({\n\t\t\trows: await materializeActiveRows({\n\t\t\t\tpersistence,\n\t\t\t\tcutoffMs: asOfMs\n\t\t\t}, input.window),\n\t\t\tasOfMs,\n\t\t\twindow: input.window,\n\t\t\t...input.userId === void 0 ? {} : { userId: input.userId }\n\t\t});\n\t},\n\tasync searchInstallations(query, limit, offset) {\n\t\treturn searchEventInstallations({\n\t\t\trows: await materializeEventRows({\n\t\t\t\tpersistence,\n\t\t\t\tcutoffMs: Date.now()\n\t\t\t}),\n\t\t\tquery,\n\t\t\tlimit,\n\t\t\toffset\n\t\t});\n\t},\n\tasync getInstallationHistory(installId, limit, offset) {\n\t\tconst ordered = (await materializeEventRows({\n\t\t\tpersistence,\n\t\t\tcutoffMs: Date.now()\n\t\t})).filter((row) => row.install_id === installId && isTransitionEventRow(row)).toSorted(compareEventNewest);\n\t\treturn {\n\t\t\tdata: ordered.slice(offset, offset + limit).map(toHistoryRow),\n\t\t\tpagination: {\n\t\t\t\ttotal: ordered.length,\n\t\t\t\tlimit,\n\t\t\t\toffset\n\t\t\t}\n\t\t};\n\t}\n});\n//#endregion\nexport { createAnalyticsProvider };\n", "//#region src/apiKeys.ts\nconst API_KEY_HEADER_NAME = \"x-api-key\";\nconst BASE64URL_32_PATTERN = /^[A-Za-z0-9_-]{43}$/u;\nconst bytesToBase64Url = (bytes) => {\n\tlet binary = \"\";\n\tfor (const byte of bytes) binary += String.fromCharCode(byte);\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/u, \"\");\n};\nconst isApiKey = (value) => {\n\tif (!BASE64URL_32_PATTERN.test(value)) return false;\n\ttry {\n\t\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\t\tconst binary = atob(`${base64}=`);\n\t\tconst bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n\t\treturn bytes.byteLength === 32 && bytesToBase64Url(bytes) === value;\n\t} catch {\n\t\treturn false;\n\t}\n};\nconst normalizeApiKeyHeaderName = (value = API_KEY_HEADER_NAME) => {\n\tif (typeof value !== \"string\" || value.length === 0) throw new TypeError(\"clientAccess.headerName must be a valid header name.\");\n\ttry {\n\t\tconst headers = new Headers();\n\t\theaders.set(value, \"\");\n\t\treturn headers.keys().next().value;\n\t} catch {\n\t\tthrow new TypeError(\"clientAccess.headerName must be a valid header name.\");\n\t}\n};\nconst hashApiKey = async (apiKey) => {\n\tif (!isApiKey(apiKey)) throw new TypeError(\"API key must be a canonical 32-byte base64url value.\");\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(apiKey));\n\treturn bytesToBase64Url(new Uint8Array(digest));\n};\nconst apiKeyId = () => {\n\tconst bytes = new Uint8Array(16);\n\tcrypto.getRandomValues(bytes);\n\treturn `api-${bytesToBase64Url(bytes)}`;\n};\nconst normalizeApiKeyName = (name) => {\n\tconst normalized = name.trim();\n\tif (normalized.length === 0 || normalized.length > 64 || /[\\p{Cc}\\p{Cf}]/u.test(normalized)) throw new TypeError(\"API key names must contain 1-64 visible characters.\");\n\treturn normalized;\n};\nconst toApiKeyMetadata = ({ hash: _hash, ...metadata }) => Object.freeze(metadata);\nconst registerApiKey = async (input) => {\n\tconst hash = await hashApiKey(input.apiKey);\n\tconst createdAtMs = input.createdAtMs ?? Date.now();\n\tif (!Number.isSafeInteger(createdAtMs) || createdAtMs < 0) throw new TypeError(\"API key creation time must be non-negative.\");\n\tconst record = Object.freeze({\n\t\tcreated_at_ms: createdAtMs,\n\t\thash,\n\t\tid: apiKeyId(),\n\t\tname: normalizeApiKeyName(input.name),\n\t\tprefix: input.apiKey.slice(0, 6),\n\t\trevoked_at_ms: null,\n\t\trole: \"client\"\n\t});\n\tif (await input.apiKeys.create(record) === \"existing\") {\n\t\tconst existing = await input.apiKeys.findByHash(hash);\n\t\tif (existing === null || existing.revoked_at_ms !== null) throw new Error(\"The API key has been revoked.\");\n\t\treturn Object.freeze({\n\t\t\tapiKey: input.apiKey,\n\t\t\trecord: toApiKeyMetadata(existing)\n\t\t});\n\t}\n\treturn Object.freeze({\n\t\tapiKey: input.apiKey,\n\t\trecord: toApiKeyMetadata(record)\n\t});\n};\nconst createApiKey = (input) => {\n\tconst bytes = new Uint8Array(32);\n\tcrypto.getRandomValues(bytes);\n\treturn registerApiKey({\n\t\tapiKey: bytesToBase64Url(bytes),\n\t\tapiKeys: input.apiKeys,\n\t\tname: input.name\n\t});\n};\n/**\n* Provisions the client API key used by managed init.\n*\n* A saved plaintext key is registered idempotently; otherwise a new key is\n* created. Callers must persist or display the returned plaintext because the\n* database stores only its hash.\n*/\nconst provisionApiKey = (input) => {\n\tconst existingApiKey = input.existingApiKey?.trim();\n\treturn existingApiKey ? registerApiKey({\n\t\tapiKey: existingApiKey,\n\t\tapiKeys: input.apiKeys,\n\t\tname: input.name\n\t}) : createApiKey({\n\t\tapiKeys: input.apiKeys,\n\t\tname: input.name\n\t});\n};\nconst authenticateApiKey = async (input) => {\n\tconst apiKey = input.request.headers.get(normalizeApiKeyHeaderName(input.headerName));\n\tif (apiKey === null || !isApiKey(apiKey)) return false;\n\tconst hash = await hashApiKey(apiKey);\n\tawait input.beforeLookup?.();\n\tconst record = await input.apiKeys.findByHash(hash);\n\treturn record !== null && record.hash === hash && record.role === \"client\" && record.revoked_at_ms === null;\n};\nconst createApiKeyManagement = (input) => Object.freeze({\n\tasync create({ name }) {\n\t\tawait input.beforeOperation();\n\t\tconst created = await createApiKey({\n\t\t\tapiKeys: input.apiKeys,\n\t\t\tname\n\t\t});\n\t\treturn Object.freeze({\n\t\t\tapiKey: created.apiKey,\n\t\t\trecord: created.record\n\t\t});\n\t},\n\tasync list() {\n\t\tawait input.beforeOperation();\n\t\treturn Object.freeze((await input.apiKeys.list()).map(toApiKeyMetadata));\n\t},\n\tasync revoke({ id }) {\n\t\tawait input.beforeOperation();\n\t\tconst record = await input.apiKeys.revoke({\n\t\t\tid,\n\t\t\trevokedAtMs: Date.now()\n\t\t});\n\t\treturn record === null ? null : toApiKeyMetadata(record);\n\t}\n});\n//#endregion\nexport { API_KEY_HEADER_NAME, authenticateApiKey, createApiKey, createApiKeyManagement, normalizeApiKeyHeaderName, provisionApiKey, registerApiKey };\n", "import { getManifestAssetDownloadPath, isContentAddressedAssetFileHash, resolveManifestAssetStorageUri } from \"@hot-updater/plugin-core\";\nimport { getAssetBaseStorageUri, getBundlePatch, getManifestFileHash, getManifestStorageUri } from \"@hot-updater/core\";\n//#region src/db/updateArtifacts.ts\nconst HBC_ASSET_PATH_RE = /\\.bundle$/;\nconst asByteSize = (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : null;\nconst sumByteSizes = (byteSizes) => {\n\tlet total = 0;\n\tfor (const byteSize of byteSizes) {\n\t\tif (byteSize === null || total > Number.MAX_SAFE_INTEGER - byteSize) return null;\n\t\ttotal += byteSize;\n\t}\n\treturn total;\n};\nconst shouldUseArchive = (targetBundle, downloadByteSize) => {\n\tconst archiveByteSize = asByteSize(targetBundle.archiveByteSize);\n\treturn archiveByteSize !== null && downloadByteSize !== null && downloadByteSize >= archiveByteSize;\n};\nconst resolveUniqueHbcAssetPath = (manifest) => {\n\tconst candidates = Object.keys(manifest.assets).sort((left, right) => left.localeCompare(right)).filter((candidate) => HBC_ASSET_PATH_RE.test(candidate));\n\treturn candidates.length === 1 ? candidates[0] : null;\n};\nconst isBundleManifest = (value) => {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst manifest = value;\n\tif (typeof manifest.bundleId !== \"string\") return false;\n\tif (!manifest.assets || typeof manifest.assets !== \"object\") return false;\n\treturn Object.values(manifest.assets).every((asset) => {\n\t\tif (!asset || typeof asset !== \"object\" || Array.isArray(asset)) return false;\n\t\tconst manifestAsset = asset;\n\t\treturn typeof manifestAsset.fileHash === \"string\" && (manifestAsset.signature === void 0 || typeof manifestAsset.signature === \"string\");\n\t});\n};\nasync function fetchBundleManifest(storageUri, readStorageText) {\n\tconst storageText = await readStorageText(storageUri);\n\tif (storageText === null) return null;\n\tlet payload;\n\ttry {\n\t\tpayload = JSON.parse(storageText);\n\t} catch {\n\t\treturn null;\n\t}\n\tif (!isBundleManifest(payload)) return null;\n\treturn {\n\t\tbyteSize: asByteSize(new TextEncoder().encode(storageText).byteLength),\n\t\tmanifest: payload\n\t};\n}\nfunction resolveHbcPatchPlan({ currentBundle, targetBundle, targetManifest }) {\n\tconst matchingPatch = currentBundle ? getBundlePatch(targetBundle, currentBundle.id) : null;\n\tconst patchAssetPath = resolveUniqueHbcAssetPath(targetManifest);\n\tif (!currentBundle || !matchingPatch || !patchAssetPath || !matchingPatch.patchStorageUri || !matchingPatch.patchFileHash || !matchingPatch.baseFileHash) return null;\n\treturn {\n\t\tassetPath: patchAssetPath,\n\t\tpatch: {\n\t\t\tbaseBundleId: matchingPatch.baseBundleId,\n\t\t\tbaseFileHash: matchingPatch.baseFileHash,\n\t\t\tbyteSize: asByteSize(matchingPatch.byteSize),\n\t\t\tpatchFileHash: matchingPatch.patchFileHash,\n\t\t\tstorageUri: matchingPatch.patchStorageUri\n\t\t}\n\t};\n}\nfunction createManifestArtifactPlan({ assetBaseStorageUri, currentManifest, currentBundle, targetBundle, targetManifest, targetManifestByteSize }) {\n\tconst patchCandidate = resolveHbcPatchPlan({\n\t\tcurrentBundle,\n\t\ttargetBundle,\n\t\ttargetManifest\n\t});\n\tconst changedAssets = Object.entries(targetManifest.assets).flatMap(([assetPath, asset]) => {\n\t\tif ((currentManifest?.assets[assetPath])?.fileHash === asset.fileHash) return [];\n\t\tconst downloadByteSize = asByteSize(asset.downloadByteSize);\n\t\tconst downloadPath = getManifestAssetDownloadPath(assetPath);\n\t\tconst isTransformedDownload = downloadPath !== assetPath;\n\t\tconst hasValidDownloadFileHash = isContentAddressedAssetFileHash(asset.downloadFileHash);\n\t\tconst file = {\n\t\t\tbyteSize: downloadByteSize !== null && (hasValidDownloadFileHash || !isTransformedDownload && asset.downloadFileHash === void 0) ? downloadByteSize : null,\n\t\t\tstorageUri: resolveManifestAssetStorageUri({\n\t\t\t\tassetBaseStorageUri,\n\t\t\t\tassetPath: downloadPath,\n\t\t\t\tdownloadFileHash: asset.downloadFileHash,\n\t\t\t\tfileHash: asset.fileHash\n\t\t\t})\n\t\t};\n\t\tif (isTransformedDownload) file.compression = \"br\";\n\t\tconst patch = patchCandidate?.assetPath === assetPath ? patchCandidate.patch : null;\n\t\treturn [{\n\t\t\tassetPath,\n\t\t\tfile,\n\t\t\tfileHash: asset.fileHash,\n\t\t\tpatch\n\t\t}];\n\t});\n\tconst allPossibleByteSizesKnown = targetManifestByteSize !== null && changedAssets.every((asset) => asset.file.byteSize !== null && (asset.patch === null || asset.patch.byteSize !== null));\n\tconst primaryByteSizes = changedAssets.map((asset) => {\n\t\tif (!asset.patch) return asset.file.byteSize;\n\t\tif (asset.patch.byteSize === null || asset.file.byteSize === null) return null;\n\t\treturn Math.min(asset.patch.byteSize, asset.file.byteSize);\n\t});\n\treturn {\n\t\tallPossibleByteSizesKnown,\n\t\tchangedAssets,\n\t\tmanifestByteSize: targetManifestByteSize,\n\t\tminimumDownloadByteSize: allPossibleByteSizesKnown ? sumByteSizes([targetManifestByteSize, ...primaryByteSizes]) : null\n\t};\n}\nasync function resolveChangedAssets(plan, resolveFileUrl) {\n\tconst patchAsset = plan.changedAssets.find((asset) => asset.patch !== null);\n\tlet resolvedPatch = null;\n\tif (patchAsset?.patch) {\n\t\tconst patchUrl = await resolveFileUrl(patchAsset.patch.storageUri);\n\t\tif (patchUrl) resolvedPatch = {\n\t\t\tassetPath: patchAsset.assetPath,\n\t\t\tpatch: {\n\t\t\t\talgorithm: \"bsdiff\",\n\t\t\t\tbaseBundleId: patchAsset.patch.baseBundleId,\n\t\t\t\tbaseFileHash: patchAsset.patch.baseFileHash,\n\t\t\t\tpatchFileHash: patchAsset.patch.patchFileHash,\n\t\t\t\tpatchUrl\n\t\t\t}\n\t\t};\n\t}\n\tconst changedEntries = await Promise.all(plan.changedAssets.map(async (asset) => {\n\t\tlet patch = resolvedPatch?.assetPath === asset.assetPath ? resolvedPatch.patch : null;\n\t\tlet fileUrl = null;\n\t\ttry {\n\t\t\tfileUrl = await resolveFileUrl(asset.file.storageUri);\n\t\t} catch (error) {\n\t\t\tif (!patch) throw error;\n\t\t}\n\t\tif (fileUrl && patch && asset.file.byteSize !== null && asset.patch !== null && asset.patch.byteSize !== null && asset.patch.byteSize >= asset.file.byteSize) patch = null;\n\t\tif (!fileUrl && !patch) return null;\n\t\tconst changedAsset = { fileHash: asset.fileHash };\n\t\tif (fileUrl) {\n\t\t\tchangedAsset.file = { url: fileUrl };\n\t\t\tif (asset.file.compression) changedAsset.file.compression = asset.file.compression;\n\t\t}\n\t\tif (patch) changedAsset.patch = patch;\n\t\treturn {\n\t\t\tasset: [asset.assetPath, changedAsset],\n\t\t\tprimaryByteSize: patch ? asset.patch?.byteSize ?? null : asset.file.byteSize\n\t\t};\n\t}));\n\tif (changedEntries.some((entry) => entry === null)) return null;\n\tconst resolvedEntries = changedEntries.filter((entry) => entry !== null);\n\treturn {\n\t\tchangedAssets: Object.fromEntries(resolvedEntries.map((entry) => entry.asset)),\n\t\tprimaryByteSizes: resolvedEntries.map((entry) => entry.primaryByteSize)\n\t};\n}\nasync function resolveManifestArtifacts({ archiveUrlUsable, currentBundle, resolveFileUrl, readStorageText, targetBundle }) {\n\tconst manifestStorageUri = targetBundle ? getManifestStorageUri(targetBundle) : null;\n\tconst manifestFileHash = targetBundle ? getManifestFileHash(targetBundle) : null;\n\tconst assetBaseStorageUri = targetBundle ? getAssetBaseStorageUri(targetBundle) : null;\n\tif (!targetBundle || !manifestStorageUri || !manifestFileHash || !assetBaseStorageUri) return null;\n\tconst currentManifestStorageUri = currentBundle ? getManifestStorageUri(currentBundle) : null;\n\tconst [targetManifestResult, currentManifestResult] = await Promise.all([fetchBundleManifest(manifestStorageUri, readStorageText), currentManifestStorageUri ? fetchBundleManifest(currentManifestStorageUri, readStorageText) : null]);\n\tif (!targetManifestResult) return null;\n\tconst plan = createManifestArtifactPlan({\n\t\tassetBaseStorageUri,\n\t\tcurrentManifest: currentManifestResult?.manifest ?? null,\n\t\tcurrentBundle,\n\t\ttargetBundle,\n\t\ttargetManifest: targetManifestResult.manifest,\n\t\ttargetManifestByteSize: targetManifestResult.byteSize\n\t});\n\tif (archiveUrlUsable && plan.allPossibleByteSizesKnown && shouldUseArchive(targetBundle, plan.minimumDownloadByteSize)) return null;\n\tconst manifestUrl = await resolveFileUrl(manifestStorageUri);\n\tif (!manifestUrl) return null;\n\tconst resolved = await resolveChangedAssets(plan, resolveFileUrl);\n\tif (!resolved) return null;\n\tconst resolvedDownloadByteSize = sumByteSizes([plan.manifestByteSize, ...resolved.primaryByteSizes]);\n\tif (archiveUrlUsable && shouldUseArchive(targetBundle, resolvedDownloadByteSize)) return null;\n\treturn {\n\t\tchangedAssets: resolved.changedAssets,\n\t\tmanifestFileHash,\n\t\tmanifestUrl\n\t};\n}\n//#endregion\nexport { resolveManifestArtifacts };\n", "import { resolveManifestArtifacts } from \"./updateArtifacts.mjs\";\nimport { createDatabaseClient, projectCompiledCatalog, projectCompiledRollbackCatalog } from \"@hot-updater/plugin-core\";\nimport { NIL_UUID, RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, createReleaseCatalogScopeKey } from \"@hot-updater/core\";\n//#region src/db/releaseCatalog.ts\nconst parseCompiledCatalog = (payload, strategy) => {\n\tconst parsed = JSON.parse(payload);\n\tif (typeof parsed !== \"object\" || parsed === null || Reflect.get(parsed, \"schemaVersion\") !== RELEASE_CATALOG_SCHEMA_VERSION || Reflect.get(parsed, \"strategy\") !== strategy || Reflect.get(parsed, \"fallbackPolicy\") !== RELEASE_CATALOG_FALLBACK_POLICY || !Array.isArray(Reflect.get(parsed, \"releaseDescriptors\"))) throw new Error(\"Stored Release catalog payload is invalid\");\n\tif (strategy === \"APP_VERSION\" && !Array.isArray(Reflect.get(parsed, \"segments\"))) throw new Error(\"Stored app-version Release catalog is invalid\");\n\tif (strategy === \"FINGERPRINT\" && !Array.isArray(Reflect.get(parsed, \"releaseIndexes\"))) throw new Error(\"Stored fingerprint Release catalog is invalid\");\n\treturn parsed;\n};\nconst createReleaseCatalogReader = (database) => async (input) => {\n\tconst scopeKey = input.strategy === \"APP_VERSION\" ? createReleaseCatalogScopeKey({\n\t\tchannelKey: input.channelKey,\n\t\tplatform: input.platform,\n\t\tstrategy: \"APP_VERSION\"\n\t}) : createReleaseCatalogScopeKey({\n\t\tchannelKey: input.channelKey,\n\t\tfingerprintHash: input.fingerprintHash,\n\t\tplatform: input.platform,\n\t\tstrategy: \"FINGERPRINT\"\n\t});\n\tconst row = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\tif (row === null || row.platform !== input.platform || row.strategy !== input.strategy || row.channel_key !== input.channelKey || row.scope_key !== scopeKey || row.fingerprint_hash !== (input.strategy === \"FINGERPRINT\" ? input.fingerprintHash : null)) return null;\n\tconst compiled = parseCompiledCatalog(row.payload, input.strategy);\n\tconst releases = projectCompiledCatalog(compiled, input.strategy === \"APP_VERSION\" ? input.appVersion : void 0);\n\tconst rollbackReleases = projectCompiledRollbackCatalog(compiled, input.strategy === \"APP_VERSION\" ? input.appVersion : void 0);\n\treturn {\n\t\tcatalogId: row.catalog_id,\n\t\tcatalogHash: row.catalog_hash,\n\t\tfallbackPolicy: RELEASE_CATALOG_FALLBACK_POLICY,\n\t\tgeneration: row.generation,\n\t\treleases,\n\t\trollbackReleases,\n\t\tschemaVersion: RELEASE_CATALOG_SCHEMA_VERSION,\n\t\tscopeKey\n\t};\n};\nconst createArtifactResolver = (input) => {\n\tconst databaseClient = createDatabaseClient(input.database);\n\treturn async (targetBundleId, currentBundleId) => {\n\t\tconst [targetBundle, currentBundle] = await Promise.all([databaseClient.getBundleById(targetBundleId), currentBundleId === NIL_UUID ? null : databaseClient.getBundleById(currentBundleId)]);\n\t\tif (targetBundle === null) return null;\n\t\tconst fileUrl = await input.resolveFileUrl(targetBundle.storageUri);\n\t\tconst base = {\n\t\t\tfileHash: targetBundle.fileHash,\n\t\t\tfileUrl\n\t\t};\n\t\tif (input.readStorageText === void 0) return base;\n\t\tconst manifest = await resolveManifestArtifacts({\n\t\t\tarchiveUrlUsable: fileUrl !== null,\n\t\t\tcurrentBundle,\n\t\t\treadStorageText: input.readStorageText,\n\t\t\tresolveFileUrl: input.resolveFileUrl,\n\t\t\ttargetBundle\n\t\t});\n\t\treturn manifest === null ? base : {\n\t\t\t...base,\n\t\t\t...manifest\n\t\t};\n\t};\n};\n//#endregion\nexport { createArtifactResolver, createReleaseCatalogReader };\n", "import { createArtifactResolver, createReleaseCatalogReader } from \"./releaseCatalog.mjs\";\nimport { createDatabaseClient, deleteRelease, preflightReleasePolicy, rebuildReleaseCatalog, updateReleasePolicy } from \"@hot-updater/plugin-core\";\nimport { decodeChannelKey } from \"@hot-updater/core\";\n//#region src/db/databasePluginCore.ts\nfunction createDatabasePluginCore(database, resolveFileUrl, options) {\n\tconst client = createDatabaseClient(database);\n\tconst beforeOperation = options?.beforeOperation;\n\tconst getReleaseCatalog = createReleaseCatalogReader(database);\n\tconst getArtifact = createArtifactResolver({\n\t\tdatabase,\n\t\treadStorageText: options?.readStorageText,\n\t\tresolveFileUrl\n\t});\n\treturn {\n\t\tapi: {\n\t\t\tasync getBundleById(id) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn client.getBundleById(id);\n\t\t\t},\n\t\t\tasync getReleaseCatalog(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn getReleaseCatalog(input);\n\t\t\t},\n\t\t\tasync getArtifactInfo(targetBundleId, currentBundleId) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn getArtifact(targetBundleId, currentBundleId);\n\t\t\t},\n\t\t\tasync getReleaseById(id) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releases.findById(id);\n\t\t\t},\n\t\t\tasync getReleasesByScope(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releases.findManyByScope({\n\t\t\t\t\t...input,\n\t\t\t\t\tconsistency: \"strong\"\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync getReleases(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releases.findMany(input);\n\t\t\t},\n\t\t\tasync getReleaseCatalogByScopeKey(scopeKey) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\t\t\t},\n\t\t\tasync getReleaseCatalogs(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releaseCatalogs.findMany(input);\n\t\t\t},\n\t\t\tasync updateReleasePolicy(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn updateReleasePolicy({\n\t\t\t\t\tdatabase,\n\t\t\t\t\t...input\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync preflightReleasePolicy(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn preflightReleasePolicy({\n\t\t\t\t\tdatabase,\n\t\t\t\t\t...input\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync deleteRelease(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn deleteRelease({\n\t\t\t\t\tdatabase,\n\t\t\t\t\t...input\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync rebuildReleaseCatalog(scopeKey) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tconst catalog = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\t\t\t\tif (catalog === null) throw new Error(`Release catalog \"${scopeKey}\" was not found.`);\n\t\t\t\treturn rebuildReleaseCatalog({\n\t\t\t\t\tdatabase,\n\t\t\t\t\tscope: {\n\t\t\t\t\t\tchannelId: catalog.channel_id,\n\t\t\t\t\t\tchannelName: decodeChannelKey(catalog.channel_key),\n\t\t\t\t\t\tfingerprintHash: catalog.fingerprint_hash,\n\t\t\t\t\t\tplatform: catalog.platform,\n\t\t\t\t\t\tscopeKey: catalog.scope_key,\n\t\t\t\t\t\tstrategy: catalog.strategy\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync commitDatabase(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.commit(input);\n\t\t\t},\n\t\t\tasync getChannels() {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn client.getChannels();\n\t\t\t},\n\t\t\tasync insertChannel(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.channels.insert(input);\n\t\t\t},\n\t\t\tasync deleteChannel(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.channels.delete(input);\n\t\t\t},\n\t\t\tasync getBundles(options) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn client.getBundles(options);\n\t\t\t},\n\t\t\tasync insertBundle(bundle) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.insertBundle(bundle);\n\t\t\t},\n\t\t\tasync insertBundles(bundles) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.mutate(async (transaction) => {\n\t\t\t\t\tfor (const bundle of bundles) await transaction.insertBundle(bundle);\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync updateBundleById(bundleId, update) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.updateBundleById(bundleId, update);\n\t\t\t},\n\t\t\tasync deleteBundleById(bundleId) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.deleteBundleById(bundleId);\n\t\t\t}\n\t\t},\n\t\tadapterName: database.name,\n\t\tcreateMigrator: () => {\n\t\t\tthrow new Error(\"createMigrator is only available for Kysely/MongoDB database plugins.\");\n\t\t},\n\t\tgenerateSchema: () => {\n\t\t\tthrow new Error(\"generateSchema is only available for Drizzle/Prisma database plugins.\");\n\t\t}\n\t};\n}\n//#endregion\nexport { createDatabasePluginCore };\n", "//#region src/schema/types.ts\nconst HOT_UPDATER_SCHEMA_VERSION = \"1.0.0\";\nconst HOT_UPDATER_CORE_SCHEMA_KEY = \"schema.core\";\nconst HOT_UPDATER_SETTINGS_TABLE = \"private_hot_updater_settings\";\n//#endregion\nexport { HOT_UPDATER_CORE_SCHEMA_KEY, HOT_UPDATER_SCHEMA_VERSION, HOT_UPDATER_SETTINGS_TABLE };\n", "import { HOT_UPDATER_SCHEMA_VERSION } from \"../schema/types.mjs\";\n//#region src/db/fixedMigratorShared.ts\nconst getEmptyMigrationResult = () => ({\n\toperations: [],\n\texecute: async () => {},\n\tgetSQL: () => \"\"\n});\nconst assertSupportedMigrationMode = (options) => {\n\tif (options.mode === \"from-database\") throw new Error(\"Hot Updater migrations support only mode: 'from-schema'.\");\n};\nconst unsupportedSchemaUpgradeMessage = (version) => `Hot Updater v1 cannot migrate schema ${version} in place. Create a new empty database and run migrate or generate against schema ${HOT_UPDATER_SCHEMA_VERSION}.`;\nconst assertCurrentOrEmptySchemaVersion = (currentVersion) => {\n\tif (currentVersion !== void 0 && currentVersion !== \"1.0.0\") throw new Error(unsupportedSchemaUpgradeMessage(currentVersion));\n};\nconst inferLegacyCoreSchemaVersion = (legacyVersion) => legacyVersion;\nconst isCurrentSchemaVersion = (currentVersion) => currentVersion === HOT_UPDATER_SCHEMA_VERSION;\n//#endregion\nexport { assertCurrentOrEmptySchemaVersion, assertSupportedMigrationMode, getEmptyMigrationResult, inferLegacyCoreSchemaVersion, isCurrentSchemaVersion, unsupportedSchemaUpgradeMessage };\n", "import \"../schema/types.mjs\";\nimport { unsupportedSchemaUpgradeMessage } from \"./fixedMigratorShared.mjs\";\n//#region src/db/schemaReadiness.ts\nvar HotUpdaterSchemaMigrationRequiredError = class extends Error {\n\tconstructor(adapterName, currentVersion) {\n\t\tsuper(currentVersion === void 0 ? `Hot Updater database schema is not initialized for ${adapterName}. Run \\`hot-updater db migrate\\` before using this adapter.` : unsupportedSchemaUpgradeMessage(currentVersion));\n\t\tthis.adapterName = adapterName;\n\t\tthis.currentVersion = currentVersion;\n\t\tthis.name = \"HotUpdaterSchemaMigrationRequiredError\";\n\t}\n};\nconst createSchemaReadinessChecker = (adapterName, createMigrator) => {\n\tif (!createMigrator) return async () => {};\n\tlet ready = false;\n\treturn async () => {\n\t\tif (ready) return;\n\t\tconst version = await createMigrator().getVersion();\n\t\tif (version !== \"1.0.0\") throw new HotUpdaterSchemaMigrationRequiredError(adapterName, version);\n\t\tready = true;\n\t};\n};\n//#endregion\nexport { HotUpdaterSchemaMigrationRequiredError, createSchemaReadinessChecker };\n", "//#region src/db/types.ts\nconst sqlProviders = [\n\t\"sqlite\",\n\t\"cockroachdb\",\n\t\"mysql\",\n\t\"postgresql\",\n\t\"mssql\"\n];\nconst noSqlProviders = [\"mongodb\"];\n[...sqlProviders, ...noSqlProviders];\nfunction isDatabasePlugin(plugin) {\n\treturn typeof plugin === \"object\" && plugin !== null && \"name\" in plugin && typeof plugin.name === \"string\" && \"models\" in plugin && typeof plugin.models === \"object\" && plugin.models !== null && \"bundles\" in plugin.models && typeof plugin.models.bundles === \"object\" && plugin.models.bundles !== null && \"findById\" in plugin.models.bundles && typeof plugin.models.bundles.findById === \"function\" && \"findMany\" in plugin.models.bundles && typeof plugin.models.bundles.findMany === \"function\" && \"count\" in plugin.models.bundles && typeof plugin.models.bundles.count === \"function\" && \"bundlePatches\" in plugin.models && typeof plugin.models.bundlePatches === \"object\" && plugin.models.bundlePatches !== null && \"findByBundleIds\" in plugin.models.bundlePatches && typeof plugin.models.bundlePatches.findByBundleIds === \"function\" && \"channels\" in plugin.models && typeof plugin.models.channels === \"object\" && plugin.models.channels !== null && \"insert\" in plugin.models.channels && typeof plugin.models.channels.insert === \"function\" && \"list\" in plugin.models.channels && typeof plugin.models.channels.list === \"function\" && \"delete\" in plugin.models.channels && typeof plugin.models.channels.delete === \"function\" && \"analytics\" in plugin.models && typeof plugin.models.analytics === \"object\" && plugin.models.analytics !== null && \"append\" in plugin.models.analytics && typeof plugin.models.analytics.append === \"function\" && \"scan\" in plugin.models.analytics && typeof plugin.models.analytics.scan === \"function\" && \"apiKeys\" in plugin.models && typeof plugin.models.apiKeys === \"object\" && plugin.models.apiKeys !== null && \"create\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.create === \"function\" && \"findByHash\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.findByHash === \"function\" && \"list\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.list === \"function\" && \"revoke\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.revoke === \"function\" && \"commit\" in plugin && typeof plugin.commit === \"function\" && (!(\"dispose\" in plugin) || plugin.dispose === void 0 || typeof plugin.dispose === \"function\");\n}\nfunction getSQLProvider(provider) {\n\tif (!provider) return;\n\treturn sqlProviders.includes(provider) ? provider : void 0;\n}\n//#endregion\nexport { getSQLProvider, isDatabasePlugin };\n", "import { parseStorageDownloadPath } from \"@hot-updater/plugin-core\";\n//#region src/storageAccess.ts\nconst assertRemoteUrl = (value) => {\n\tconst protocol = new URL(value).protocol;\n\tif (protocol !== \"http:\" && protocol !== \"https:\") throw new Error(\"Storage getDownloadUrl must resolve to an HTTP(S) URL.\");\n\treturn value;\n};\nconst getStorageProtocol = (storageUri) => new URL(storageUri).protocol.replace(\":\", \"\");\nconst isRemoteUrlProtocol = (protocol) => protocol === \"http\" || protocol === \"https\";\nconst resolveDownloadPath = (value, storageUri) => {\n\tconst parsed = parseStorageDownloadPath(value);\n\tif (!parsed || parsed.storageUri !== storageUri) throw new Error(\"Storage getDownloadUrl must return an HTTP(S) URL or a valid storage download path.\");\n\treturn value;\n};\nconst tokensEqual = (left, right) => {\n\tconst leftBytes = new TextEncoder().encode(left);\n\tconst rightBytes = new TextEncoder().encode(right);\n\tlet difference = leftBytes.length ^ rightBytes.length;\n\tconst length = Math.max(leftBytes.length, rightBytes.length);\n\tfor (let index = 0; index < length; index += 1) difference |= (leftBytes[index] ?? 0) ^ (rightBytes[index] ?? 0);\n\treturn difference === 0;\n};\nconst createStorageAccess = (storagePlugins) => {\n\tconst protocols = /* @__PURE__ */ new Set();\n\tfor (const storage of storagePlugins) {\n\t\tif (protocols.has(storage.protocol)) throw new Error(`Multiple storage plugins handle protocol: ${storage.protocol}`);\n\t\tprotocols.add(storage.protocol);\n\t}\n\tconst findStorage = (protocol) => storagePlugins.find((item) => item.protocol === protocol);\n\tconst readStorageResponse = async (storageUri) => {\n\t\tconst protocol = getStorageProtocol(storageUri);\n\t\tconst storage = findStorage(protocol);\n\t\tif (storage) return (await storage.get({ storageUri })).response;\n\t\tif (isRemoteUrlProtocol(protocol)) {\n\t\t\tconst response = await fetch(storageUri);\n\t\t\treturn response.ok ? response : null;\n\t\t}\n\t\tthrow new Error(`No storage plugin for protocol: ${protocol}`);\n\t};\n\tconst resolveFileUrl = async (storageUri) => {\n\t\tif (!storageUri) return null;\n\t\tconst protocol = getStorageProtocol(storageUri);\n\t\tconst storage = findStorage(protocol);\n\t\tif (!storage) {\n\t\t\tif (isRemoteUrlProtocol(protocol)) return storageUri;\n\t\t\tthrow new Error(`No storage plugin for protocol: ${protocol}`);\n\t\t}\n\t\tif (!storage.getDownloadUrl) throw new Error(`Storage plugin \"${storage.name}\" does not implement getDownloadUrl.`);\n\t\tconst { url: downloadUrl } = await storage.getDownloadUrl({ storageUri });\n\t\ttry {\n\t\t\treturn assertRemoteUrl(downloadUrl);\n\t\t} catch (error) {\n\t\t\tif (/^[a-z][a-z\\d+.-]*:/i.test(downloadUrl)) throw error;\n\t\t}\n\t\treturn resolveDownloadPath(downloadUrl, storageUri);\n\t};\n\tconst readStorageText = async (storageUri) => {\n\t\treturn (await readStorageResponse(storageUri))?.text() ?? null;\n\t};\n\treturn {\n\t\tdownloadStorageObject: storagePlugins.some((storage) => storage.getDownloadUrl !== void 0) ? async (storageUriToken, encodedSignature) => {\n\t\t\tconst requestedPath = `/storage/${storageUriToken}/${encodedSignature}`;\n\t\t\tconst requested = parseStorageDownloadPath(requestedPath);\n\t\t\tif (!requested) return null;\n\t\t\tlet storage;\n\t\t\ttry {\n\t\t\t\tstorage = findStorage(getStorageProtocol(requested.storageUri));\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!storage?.getDownloadUrl) return null;\n\t\t\tconst { url: downloadUrl } = await storage.getDownloadUrl({ storageUri: requested.storageUri });\n\t\t\ttry {\n\t\t\t\tnew URL(downloadUrl);\n\t\t\t\treturn null;\n\t\t\t} catch {\n\t\t\t\tif (/^[a-z][a-z\\d+.-]*:/i.test(downloadUrl)) return null;\n\t\t\t}\n\t\t\tif (!tokensEqual(downloadUrl, requestedPath)) return null;\n\t\t\treturn (await storage.get({ storageUri: requested.storageUri })).response;\n\t\t} : void 0,\n\t\treadStorageText,\n\t\tresolveFileUrl\n\t};\n};\n//#endregion\nexport { createStorageAccess };\n", "import { createHotUpdaterHandlers } from \"./handler.mjs\";\nimport { createAnalyticsProvider } from \"./analytics/bounded/provider.mjs\";\nimport { authenticateApiKey, createApiKeyManagement, normalizeApiKeyHeaderName } from \"./apiKeys.mjs\";\nimport { createDatabasePluginCore } from \"./db/databasePluginCore.mjs\";\nimport { createSchemaReadinessChecker } from \"./db/schemaReadiness.mjs\";\nimport { isDatabasePlugin } from \"./db/types.mjs\";\nimport { createStorageAccess } from \"./storageAccess.mjs\";\nimport { assertStorageOperations } from \"@hot-updater/plugin-core\";\n//#region src/createHotUpdaterCore.ts\nconst normalizeClientAccess = (value) => {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(\"clientAccess must be an object.\");\n\tconst policy = value;\n\tif (policy.type === \"public\") return { type: \"public\" };\n\tif (policy.type === \"api-key\") return {\n\t\theaderName: normalizeApiKeyHeaderName(policy.headerName),\n\t\ttype: \"api-key\"\n\t};\n\tthrow new TypeError(\"clientAccess.type must be either \\\"public\\\" or \\\"api-key\\\".\");\n};\nconst hotUpdaterCoreMetadata = Symbol.for(\"@hot-updater/server/core-metadata\");\nfunction getHotUpdaterCoreMetadata(hotUpdater) {\n\treturn hotUpdater[hotUpdaterCoreMetadata];\n}\nfunction createHotUpdaterCore(options) {\n\tfor (const key of [\"authorityId\", \"catalogId\"]) if (Object.hasOwn(options, key)) throw new TypeError(`Remove ${key} from createHotUpdater options. Catalog identity is managed internally.`);\n\tconst database = options.database;\n\tconst { downloadStorageObject, readStorageText, resolveFileUrl } = createStorageAccess((options.storage ?? []).map((storage) => {\n\t\tassertStorageOperations(storage, [\"get\", \"getDownloadUrl\"]);\n\t\treturn storage;\n\t}));\n\tconst adapterCapabilities = database;\n\tif (!isDatabasePlugin(database)) throw new Error(\"@hot-updater/server only supports database plugins.\");\n\tconst plugin = database;\n\tconst assertSchemaReady = createSchemaReadinessChecker(adapterCapabilities.adapterName ?? plugin.name, adapterCapabilities.createMigrator);\n\tconst core = createDatabasePluginCore(plugin, resolveFileUrl, {\n\t\tbeforeOperation: assertSchemaReady,\n\t\treadStorageText\n\t});\n\tconst clientAccess = normalizeClientAccess(options.clientAccess);\n\tconst analytics = createAnalyticsProvider({\n\t\tasync append(row) {\n\t\t\tawait assertSchemaReady();\n\t\t\treturn plugin.models.analytics.append(row);\n\t\t},\n\t\tasync scan(input) {\n\t\t\tawait assertSchemaReady();\n\t\t\treturn plugin.models.analytics.scan(input);\n\t\t}\n\t});\n\tconst apiKeys = createApiKeyManagement({\n\t\tapiKeys: plugin.models.apiKeys,\n\t\tbeforeOperation: assertSchemaReady\n\t});\n\tconst handlers = createHotUpdaterHandlers(core.api, analytics, clientAccess.type === \"api-key\" ? {\n\t\tauthenticate: (request) => authenticateApiKey({\n\t\t\tapiKeys: plugin.models.apiKeys,\n\t\t\tbeforeLookup: assertSchemaReady,\n\t\t\theaderName: clientAccess.headerName,\n\t\t\trequest\n\t\t}),\n\t\theaderName: clientAccess.headerName\n\t} : void 0, downloadStorageObject);\n\tconst api = Object.assign({\n\t\tadapterName: adapterCapabilities.adapterName ?? core.adapterName,\n\t\tanalytics,\n\t\tapiKeys,\n\t\thandlers\n\t}, core.api);\n\tObject.defineProperty(api, hotUpdaterCoreMetadata, {\n\t\tenumerable: false,\n\t\tvalue: {\n\t\t\tadapterCapabilities,\n\t\t\tcore\n\t\t}\n\t});\n\treturn {\n\t\tapi,\n\t\tadapterCapabilities,\n\t\tcore\n\t};\n}\nfunction createHotUpdater(options) {\n\treturn createHotUpdaterCore(options).api;\n}\n//#endregion\nexport { createHotUpdater, getHotUpdaterCoreMetadata };\n", "import { createHotUpdater } from \"@hot-updater/server\";\nimport { env } from \"cloudflare:workers\";\nimport { Hono } from \"hono\";\n\nimport { d1Database, r2Storage } from \"../../src/worker\";\n\nexport type CloudflareWorkerEnv = {\n DB: {\n batch: D1Database[\"batch\"];\n prepare: D1Database[\"prepare\"];\n };\n BUCKET: R2Bucket;\n BUCKET_NAME: string;\n STORAGE_DOWNLOAD_URL_SIGNING_KEY: string;\n};\n\nexport const HOT_UPDATER_BASE_PATH = \"/\";\n\nconst hotUpdater = createHotUpdater({\n database: d1Database(env.DB),\n clientAccess: { type: \"api-key\" },\n storage: [\n r2Storage({\n bucket: env.BUCKET,\n bucketName: env.BUCKET_NAME,\n downloadUrlSigningKey: env.STORAGE_DOWNLOAD_URL_SIGNING_KEY,\n }),\n ],\n});\n\nconst app = new Hono<{ Bindings: CloudflareWorkerEnv }>();\n\napp.mount(HOT_UPDATER_BASE_PATH, (request: Request) =>\n hotUpdater.handlers.client(request),\n);\n\nexport default app;\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/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/buffer.ts\nimport { sha256 } from \"./crypto.js\";\nvar equal = (a, b) => {\n if (a === b) {\n return true;\n }\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n const va = new DataView(a);\n const vb = new DataView(b);\n let i = va.byteLength;\n while (i--) {\n if (va.getUint8(i) !== vb.getUint8(i)) {\n return false;\n }\n }\n return true;\n};\nvar constantTimeEqualString = (a, b) => {\n const aLen = a.length;\n const bLen = b.length;\n const maxLen = Math.max(aLen, bLen);\n let out = aLen ^ bLen;\n for (let i = 0; i < maxLen; i++) {\n const aChar = i < aLen ? a.charCodeAt(i) : 0;\n const bChar = i < bLen ? b.charCodeAt(i) : 0;\n out |= aChar ^ bChar;\n }\n return out === 0;\n};\nvar timingSafeEqualString = async (a, b, hashFunction) => {\n if (!hashFunction) {\n hashFunction = sha256;\n }\n const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n if (sa == null || sb == null || typeof sa !== \"string\" || typeof sb !== \"string\") {\n return false;\n }\n const hashEqual = constantTimeEqualString(sa, sb);\n const originalEqual = constantTimeEqualString(a, b);\n return hashEqual && originalEqual;\n};\nvar timingSafeEqual = async (a, b, hashFunction) => {\n if (typeof a === \"string\" && typeof b === \"string\") {\n return timingSafeEqualString(a, b, hashFunction);\n }\n if (!hashFunction) {\n hashFunction = sha256;\n }\n const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n if (!sa || !sb || typeof sa !== \"string\" || typeof sb !== \"string\") {\n return false;\n }\n return timingSafeEqualString(sa, sb);\n};\nvar bufferToString = (buffer) => {\n if (buffer instanceof ArrayBuffer) {\n const enc = new TextDecoder(\"utf-8\");\n return enc.decode(buffer);\n }\n return buffer;\n};\nvar bufferToFormData = (arrayBuffer, contentType) => {\n const response = new Response(arrayBuffer, {\n headers: {\n // Normalize the media type (case-insensitive) while keeping parameters like the boundary\n \"Content-Type\": contentType.replace(/^[^;]+/, (mediaType) => mediaType.toLowerCase())\n }\n });\n return response.formData();\n};\nexport {\n bufferToFormData,\n bufferToString,\n equal,\n timingSafeEqual\n};\n", "// src/utils/body.ts\nimport { bufferToFormData } from \"./buffer.js\";\nvar isRawRequest = (request) => \"headers\" in request;\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n const contentType = headers.get(\"Content-Type\");\n const mediaType = contentType?.split(\";\")[0].trim().toLowerCase();\n if (mediaType === \"multipart/form-data\" || mediaType === \"application/x-www-form-urlencoded\") {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n if (!isRawRequest(request) && request.bodyCache.formData) {\n return convertFormDataToBodyData(\n await request.bodyCache.formData,\n options\n );\n }\n const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n const arrayBuffer = await request.arrayBuffer();\n const formDataPromise = bufferToFormData(arrayBuffer, headers.get(\"Content-Type\") || \"\");\n if (!isRawRequest(request)) {\n request.bodyCache.formData = formDataPromise;\n }\n const formData = await formDataPromise;\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 = /* @__PURE__ */ Object.create(null);\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/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 = /* @__PURE__ */ Object.create(null);\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 * `.bytes()` parses the request body as a `Uint8Array`.\n *\n * @see {@link https://hono.dev/docs/api/request#bytes}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.bytes()\n * })\n * ```\n */\n bytes() {\n return this.#cachedBody(\"arrayBuffer\").then((buffer) => new Uint8Array(buffer));\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 body = await req[cacheKey]();\n const headers = req.header();\n if (body instanceof FormData) {\n delete headers[\"content-type\"];\n }\n const requestInit = {\n body,\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers,\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\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/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/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler, r.basePath);\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 = this.getPath(request).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, baseRoutePath) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = {\n basePath: baseRoutePath !== void 0 ? mergePath(this._basePath, baseRoutePath) : this._basePath,\n path,\n method,\n handler\n };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar 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 (m[0].length === restPathString.length && child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n node.#params,\n params\n );\n }\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", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "import type {\n BundlePatchRow,\n BundleRow,\n BundleEventRow,\n ChannelRow,\n ApiKeyRow,\n ReleaseCatalogRow,\n ReleaseRow,\n} from \"@hot-updater/plugin-core\";\nimport { isDatabaseMetadataObject } from \"@hot-updater/plugin-core\";\nimport type {\n DatabaseModel,\n DatabaseRow,\n} from \"@hot-updater/plugin-core/internal\";\n\nclass InvalidD1RowError extends Error {\n readonly name = \"InvalidD1RowError\";\n readonly model: DatabaseModel;\n\n constructor(model: DatabaseModel) {\n super(`D1 returned an invalid ${model} row`);\n this.model = model;\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): string => {\n const value = row[field];\n if (typeof value !== \"string\") throw new InvalidD1RowError(model);\n return value;\n};\n\nconst nullableString = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): string | null => {\n const value = row[field];\n if (value === null) return null;\n if (typeof value !== \"string\") throw new InvalidD1RowError(model);\n return value;\n};\n\nconst numberValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): number => {\n const value = row[field];\n if (typeof value !== \"number\") throw new InvalidD1RowError(model);\n return value;\n};\n\nconst byteSizeValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): number => {\n const value = row[field];\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0) {\n throw new InvalidD1RowError(model);\n }\n return value;\n};\n\nconst booleanValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): boolean => {\n const value = row[field];\n if (value === true || value === 1) return true;\n if (value === false || value === 0) return false;\n throw new InvalidD1RowError(model);\n};\n\nconst jsonValue = (value: unknown, model: DatabaseModel): unknown => {\n if (typeof value !== \"string\") throw new InvalidD1RowError(model);\n try {\n return JSON.parse(value);\n } catch (error) {\n if (error instanceof SyntaxError) throw new InvalidD1RowError(model);\n throw error;\n }\n};\n\nconst metadata = (row: Record<string, unknown>) => {\n const value = jsonValue(row[\"metadata\"], \"bundles\");\n if (!isDatabaseMetadataObject(value)) {\n throw new InvalidD1RowError(\"bundles\");\n }\n return value;\n};\n\nconst bundleRow = (row: Record<string, unknown>): BundleRow => {\n const platform = stringValue(row, \"platform\", \"bundles\");\n if (platform !== \"ios\" && platform !== \"android\") {\n throw new InvalidD1RowError(\"bundles\");\n }\n return {\n id: stringValue(row, \"id\", \"bundles\"),\n platform,\n file_hash: stringValue(row, \"file_hash\", \"bundles\"),\n git_commit_hash: nullableString(row, \"git_commit_hash\", \"bundles\"),\n storage_uri: stringValue(row, \"storage_uri\", \"bundles\"),\n archive_byte_size:\n row[\"archive_byte_size\"] === undefined\n ? 0\n : byteSizeValue(row, \"archive_byte_size\", \"bundles\"),\n metadata: metadata(row),\n manifest_storage_uri: nullableString(\n row,\n \"manifest_storage_uri\",\n \"bundles\",\n ),\n manifest_file_hash: nullableString(row, \"manifest_file_hash\", \"bundles\"),\n asset_base_storage_uri: nullableString(\n row,\n \"asset_base_storage_uri\",\n \"bundles\",\n ),\n };\n};\n\nconst patchRow = (row: Record<string, unknown>): BundlePatchRow => ({\n id: stringValue(row, \"id\", \"bundle_patches\"),\n bundle_id: stringValue(row, \"bundle_id\", \"bundle_patches\"),\n base_bundle_id: stringValue(row, \"base_bundle_id\", \"bundle_patches\"),\n base_file_hash: stringValue(row, \"base_file_hash\", \"bundle_patches\"),\n patch_file_hash: stringValue(row, \"patch_file_hash\", \"bundle_patches\"),\n patch_storage_uri: stringValue(row, \"patch_storage_uri\", \"bundle_patches\"),\n byte_size: byteSizeValue(row, \"byte_size\", \"bundle_patches\"),\n order_index: numberValue(row, \"order_index\", \"bundle_patches\"),\n});\n\nconst channelRow = (row: Record<string, unknown>): ChannelRow => ({\n id: stringValue(row, \"id\", \"channels\"),\n name: stringValue(row, \"name\", \"channels\"),\n});\n\nconst eventRow = (row: Record<string, unknown>): BundleEventRow => {\n const type = stringValue(row, \"type\", \"bundle_events\");\n const platform = stringValue(row, \"platform\", \"bundle_events\");\n const fromBundleId = nullableString(row, \"from_bundle_id\", \"bundle_events\");\n const updateStrategy = nullableString(\n row,\n \"update_strategy\",\n \"bundle_events\",\n );\n if (\n (platform !== \"ios\" && platform !== \"android\") ||\n !(\n ((type === \"UPDATE_APPLIED\" ||\n type === \"RECOVERED\" ||\n type === \"RELEASE_ADOPTED\") &&\n typeof fromBundleId === \"string\" &&\n (updateStrategy === \"fingerprint\" ||\n updateStrategy === \"appVersion\")) ||\n (type === \"UNCHANGED\" && fromBundleId === null && updateStrategy === null)\n )\n ) {\n throw new InvalidD1RowError(\"bundle_events\");\n }\n return {\n id: stringValue(row, \"id\", \"bundle_events\"),\n type,\n install_id: stringValue(row, \"install_id\", \"bundle_events\"),\n user_id: nullableString(row, \"user_id\", \"bundle_events\"),\n username: nullableString(row, \"username\", \"bundle_events\"),\n from_release_id: nullableString(row, \"from_release_id\", \"bundle_events\"),\n from_bundle_id: fromBundleId,\n to_release_id: nullableString(row, \"to_release_id\", \"bundle_events\"),\n to_bundle_id: stringValue(row, \"to_bundle_id\", \"bundle_events\"),\n platform,\n app_version: stringValue(row, \"app_version\", \"bundle_events\"),\n channel: stringValue(row, \"channel\", \"bundle_events\"),\n cohort: stringValue(row, \"cohort\", \"bundle_events\"),\n update_strategy: updateStrategy,\n fingerprint_hash: nullableString(row, \"fingerprint_hash\", \"bundle_events\"),\n sdk_version: nullableString(row, \"sdk_version\", \"bundle_events\"),\n received_at_ms: numberValue(row, \"received_at_ms\", \"bundle_events\"),\n } as BundleEventRow;\n};\n\nconst apiKeyRow = (row: Record<string, unknown>): ApiKeyRow => {\n const role = stringValue(row, \"role\", \"api_keys\");\n if (role !== \"client\") throw new InvalidD1RowError(\"api_keys\");\n const revokedAt = row[\"revoked_at_ms\"];\n return {\n id: stringValue(row, \"id\", \"api_keys\"),\n hash: stringValue(row, \"hash\", \"api_keys\"),\n name: stringValue(row, \"name\", \"api_keys\"),\n prefix: stringValue(row, \"prefix\", \"api_keys\"),\n role,\n created_at_ms: numberValue(row, \"created_at_ms\", \"api_keys\"),\n revoked_at_ms:\n revokedAt === null ? null : numberValue(row, \"revoked_at_ms\", \"api_keys\"),\n };\n};\n\nconst releaseTargetCohorts = (\n row: Record<string, unknown>,\n): readonly string[] => {\n const value = jsonValue(row[\"target_cohorts\"], \"releases\");\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw new InvalidD1RowError(\"releases\");\n }\n return value.filter((item): item is string => typeof item === \"string\");\n};\n\nconst releaseRow = (row: Record<string, unknown>): ReleaseRow => {\n const platform = stringValue(row, \"platform\", \"releases\");\n const kind = stringValue(row, \"kind\", \"releases\");\n const strategy = stringValue(row, \"strategy\", \"releases\");\n const operation = stringValue(row, \"operation\", \"releases\");\n if (\n (platform !== \"ios\" && platform !== \"android\") ||\n (kind !== \"BUNDLE\" && kind !== \"EMBEDDED\") ||\n (strategy !== \"APP_VERSION\" && strategy !== \"FINGERPRINT\") ||\n (operation !== \"DEPLOY\" &&\n operation !== \"PROMOTE\" &&\n operation !== \"ROLLBACK\")\n ) {\n throw new InvalidD1RowError(\"releases\");\n }\n return {\n id: stringValue(row, \"id\", \"releases\"),\n revision: numberValue(row, \"revision\", \"releases\"),\n scope_key: stringValue(row, \"scope_key\", \"releases\"),\n channel_id: stringValue(row, \"channel_id\", \"releases\"),\n platform,\n kind,\n bundle_id: nullableString(row, \"bundle_id\", \"releases\"),\n strategy,\n target_app_version: nullableString(row, \"target_app_version\", \"releases\"),\n fingerprint_hash: nullableString(row, \"fingerprint_hash\", \"releases\"),\n enabled: booleanValue(row, \"enabled\", \"releases\"),\n should_force_update: booleanValue(row, \"should_force_update\", \"releases\"),\n message: nullableString(row, \"message\", \"releases\"),\n rollout_cohort_count: numberValue(row, \"rollout_cohort_count\", \"releases\"),\n target_cohorts: releaseTargetCohorts(row),\n operation,\n source_release_id: nullableString(row, \"source_release_id\", \"releases\"),\n created_at_ms: numberValue(row, \"created_at_ms\", \"releases\"),\n updated_at_ms: numberValue(row, \"updated_at_ms\", \"releases\"),\n };\n};\n\nconst releaseCatalogRow = (row: Record<string, unknown>): ReleaseCatalogRow => {\n const platform = stringValue(row, \"platform\", \"release_catalogs\");\n const strategy = stringValue(row, \"strategy\", \"release_catalogs\");\n if (\n (platform !== \"ios\" && platform !== \"android\") ||\n (strategy !== \"APP_VERSION\" && strategy !== \"FINGERPRINT\")\n ) {\n throw new InvalidD1RowError(\"release_catalogs\");\n }\n return {\n scope_key: stringValue(row, \"scope_key\", \"release_catalogs\"),\n catalog_id: stringValue(row, \"catalog_id\", \"release_catalogs\"),\n strategy,\n channel_id: stringValue(row, \"channel_id\", \"release_catalogs\"),\n channel_key: stringValue(row, \"channel_key\", \"release_catalogs\"),\n platform,\n fingerprint_hash: nullableString(\n row,\n \"fingerprint_hash\",\n \"release_catalogs\",\n ),\n generation: numberValue(row, \"generation\", \"release_catalogs\"),\n payload: stringValue(row, \"payload\", \"release_catalogs\"),\n catalog_hash: stringValue(row, \"catalog_hash\", \"release_catalogs\"),\n byte_size: numberValue(row, \"byte_size\", \"release_catalogs\"),\n is_tombstone: booleanValue(row, \"is_tombstone\", \"release_catalogs\"),\n updated_at_ms: numberValue(row, \"updated_at_ms\", \"release_catalogs\"),\n };\n};\n\nexport function parseD1Row(model: \"bundles\", value: unknown): BundleRow;\nexport function parseD1Row(model: \"channels\", value: unknown): ChannelRow;\nexport function parseD1Row(\n model: \"bundle_patches\",\n value: unknown,\n): BundlePatchRow;\nexport function parseD1Row(\n model: \"bundle_events\",\n value: unknown,\n): BundleEventRow;\nexport function parseD1Row(model: \"api_keys\", value: unknown): ApiKeyRow;\nexport function parseD1Row(model: \"releases\", value: unknown): ReleaseRow;\nexport function parseD1Row(\n model: \"release_catalogs\",\n value: unknown,\n): ReleaseCatalogRow;\nexport function parseD1Row(\n model: DatabaseModel,\n value: unknown,\n): DatabaseRow<DatabaseModel>;\nexport function parseD1Row(\n model: DatabaseModel,\n value: unknown,\n): DatabaseRow<DatabaseModel> {\n if (!isRecord(value)) throw new InvalidD1RowError(model);\n switch (model) {\n case \"bundles\":\n return bundleRow(value);\n case \"bundle_patches\":\n return patchRow(value);\n case \"channels\":\n return channelRow(value);\n case \"bundle_events\":\n return eventRow(value);\n case \"api_keys\":\n return apiKeyRow(value);\n case \"releases\":\n return releaseRow(value);\n case \"release_catalogs\":\n return releaseCatalogRow(value);\n }\n}\n", "import type {\n DatabaseStringComparisonMode,\n DatabaseWhereConnector,\n DatabaseWhereOperator,\n} from \"@hot-updater/plugin-core/internal\";\n\nexport type D1Query = {\n readonly sql: string;\n readonly params: readonly string[];\n};\n\ntype D1Predicate = {\n readonly field: string;\n readonly operator?: DatabaseWhereOperator;\n readonly value: unknown;\n readonly connector?: DatabaseWhereConnector;\n readonly mode?: DatabaseStringComparisonMode;\n};\n\ntype D1Sort = {\n readonly field: string;\n readonly direction: \"asc\" | \"desc\";\n readonly nulls?: \"first\" | \"last\";\n};\n\nclass InvalidD1PredicateError extends Error {\n readonly name = \"InvalidD1PredicateError\";\n}\n\nconst encodeD1Value = (value: unknown): string => {\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new TypeError(\"D1 values must be JSON-serializable.\");\n }\n return encoded;\n};\n\nconst bind = (value: unknown): D1Query => ({\n sql: \"json_extract(?, '$')\",\n params: [encodeD1Value(value)],\n});\n\nconst escapeLikePattern = (value: string): string =>\n value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"%\", \"\\\\%\").replaceAll(\"_\", \"\\\\_\");\n\nconst stringPredicate = (\n condition: D1Predicate,\n operator: \"contains\" | \"ends_with\" | \"starts_with\",\n): D1Query => {\n if (typeof condition.value !== \"string\") {\n throw new InvalidD1PredicateError();\n }\n\n if (condition.mode !== \"insensitive\") {\n const parameter = bind(condition.value);\n const column = `${condition.field} COLLATE BINARY`;\n const value = `${parameter.sql} COLLATE BINARY`;\n if (operator === \"contains\" || operator === \"starts_with\") {\n return {\n sql: `instr(${column}, ${value}) ${operator === \"contains\" ? \"> 0\" : \"= 1\"}`,\n params: parameter.params,\n };\n }\n return {\n sql: `substr(${column}, length(${condition.field}) - length(${parameter.sql}) + 1) = ${value}`,\n params: [...parameter.params, ...parameter.params],\n };\n }\n\n const literal = escapeLikePattern(condition.value);\n const pattern =\n operator === \"contains\"\n ? `%${literal}%`\n : operator === \"starts_with\"\n ? `${literal}%`\n : `%${literal}`;\n const parameter = bind(pattern);\n return {\n sql: `lower(${condition.field}) LIKE lower(${parameter.sql}) ESCAPE '\\\\'`,\n params: parameter.params,\n };\n};\n\nconst predicate = (condition: D1Predicate): D1Query => {\n const operator = condition.operator ?? \"eq\";\n switch (operator) {\n case \"eq\":\n case \"ne\": {\n if (condition.value === null) {\n return {\n sql: `${condition.field} IS ${operator === \"ne\" ? \"NOT \" : \"\"}NULL`,\n params: [],\n };\n }\n const parameter = bind(condition.value);\n const insensitive =\n \"mode\" in condition && condition.mode === \"insensitive\";\n const column = insensitive\n ? `lower(${condition.field})`\n : condition.field;\n const value = insensitive ? `lower(${parameter.sql})` : parameter.sql;\n return {\n sql: `${column} ${operator === \"eq\" ? \"=\" : \"<>\"} ${value}`,\n params: parameter.params,\n };\n }\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\": {\n const sqlOperator = {\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n }[operator];\n const parameter = bind(condition.value);\n return {\n sql: `${condition.field} ${sqlOperator} ${parameter.sql}`,\n params: parameter.params,\n };\n }\n case \"in\":\n case \"not_in\": {\n if (!Array.isArray(condition.value)) {\n throw new InvalidD1PredicateError();\n }\n if (condition.value.length === 0) {\n return { sql: operator === \"not_in\" ? \"1 = 1\" : \"1 = 0\", params: [] };\n }\n return {\n sql: `${condition.field} ${operator === \"not_in\" ? \"NOT \" : \"\"}IN (SELECT value FROM json_each(?))`,\n params: [encodeD1Value(condition.value)],\n };\n }\n case \"contains\":\n case \"starts_with\":\n case \"ends_with\":\n return stringPredicate(condition, operator);\n }\n};\n\nexport const buildD1Where = (\n where: readonly D1Predicate[] | undefined,\n): D1Query => {\n const [first, ...rest] = where ?? [];\n if (first === undefined) return { sql: \"\", params: [] };\n const initial = predicate(first);\n let sql = initial.sql;\n const params = [...initial.params];\n for (const condition of rest) {\n const next = predicate(condition);\n sql = `(${sql} ${condition.connector === \"OR\" ? \"OR\" : \"AND\"} ${next.sql})`;\n params.push(...next.params);\n }\n return { sql: ` WHERE ${sql}`, params };\n};\n\nexport const buildD1Order = (orderBy: readonly D1Sort[] | undefined): string =>\n orderBy === undefined\n ? \"\"\n : ` ORDER BY ${orderBy\n .map(\n (clause) =>\n `${clause.field} ${clause.direction.toUpperCase()}${\n clause.nulls ? ` NULLS ${clause.nulls.toUpperCase()}` : \"\"\n }`,\n )\n .join(\", \")}`;\n\nexport const d1Placeholders = (count: number): string =>\n Array.from({ length: count }, () => \"json_extract(?, '$')\").join(\", \");\n\nexport const encodeD1Values = (values: readonly unknown[]): readonly string[] =>\n values.map(encodeD1Value);\n", "import type {\n CountDatabaseImplementationInput,\n DatabaseImplementationResult,\n DatabaseModel,\n FindManyDatabaseImplementationInput,\n} from \"@hot-updater/plugin-core/internal\";\n\nimport type { D1Executor } from \"./d1Implementation\";\nimport { parseD1Row } from \"./d1Rows\";\nimport { buildD1Order, buildD1Where, encodeD1Values } from \"./d1Sql\";\n\nexport const d1TableNames = {\n bundles: \"bundles\",\n bundle_patches: \"bundle_patches\",\n channels: \"channels\",\n bundle_events: \"bundle_events\",\n api_keys: \"api_keys\",\n release_catalogs: \"release_catalogs\",\n releases: \"releases\",\n} as const satisfies Record<DatabaseModel, string>;\n\nexport class D1QueryResultError extends Error {\n readonly name = \"D1QueryResultError\";\n readonly operation = \"count\";\n\n constructor(readonly result: unknown) {\n super(\"D1 count query returned a malformed first row\");\n }\n}\n\nexport const countD1Rows = async (\n executor: D1Executor,\n input: CountDatabaseImplementationInput,\n): Promise<number> => {\n const where = buildD1Where(input.where);\n const table = d1TableNames[input.model];\n const source =\n input.distinct === undefined\n ? `${table}${where.sql}`\n : `(SELECT DISTINCT ${input.distinct.join(\", \")} FROM ${table}${where.sql}) AS distinct_rows`;\n const rows = await executor.query(\n `SELECT COUNT(*) AS count FROM ${source}`,\n where.params,\n );\n const row = rows[0];\n if (typeof row !== \"object\" || row === null || Array.isArray(row)) {\n throw new D1QueryResultError(row);\n }\n const count = Reflect.get(row, \"count\");\n if (typeof count !== \"number\" || !Number.isFinite(count)) {\n throw new D1QueryResultError(row);\n }\n return count;\n};\n\nexport const findManyD1Rows = async (\n executor: D1Executor,\n input: FindManyDatabaseImplementationInput,\n): Promise<readonly DatabaseImplementationResult[]> => {\n const where = buildD1Where(input.where);\n const orderBy = input.orderBy;\n const order = buildD1Order(orderBy);\n const table = d1TableNames[input.model];\n const source =\n input.distinctOn === undefined\n ? `SELECT * FROM ${table}${where.sql}${order}`\n : `SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${input.distinctOn.fields.join(\", \")}${order}) AS __hot_updater_rank FROM ${table}${where.sql}) AS distinct_rows WHERE __hot_updater_rank = 1${order}`;\n const pageParams = encodeD1Values([input.limit, input.offset]);\n const rows = await executor.query(\n `${source} LIMIT json_extract(?, '$') OFFSET json_extract(?, '$')`,\n [...where.params, ...pageParams],\n );\n switch (input.model) {\n case \"bundles\":\n return rows.map((row) => parseD1Row(\"bundles\", row));\n case \"bundle_patches\":\n return rows.map((row) => parseD1Row(\"bundle_patches\", row));\n case \"channels\":\n return rows.map((row) => parseD1Row(\"channels\", row));\n case \"bundle_events\":\n return rows.map((row) => parseD1Row(\"bundle_events\", row));\n case \"api_keys\":\n return rows.map((row) => parseD1Row(\"api_keys\", row));\n case \"releases\":\n return rows.map((row) => parseD1Row(\"releases\", row));\n case \"release_catalogs\":\n return rows.map((row) => parseD1Row(\"release_catalogs\", row));\n }\n};\n", "import type {\n BundlePatchRow,\n BundleRow,\n ChannelInsertInput,\n ChannelInsertResult,\n ChannelRow,\n ChannelDeleteInput,\n ChannelDeleteResult,\n DatabaseChange,\n DatabaseCommit,\n DatabaseCommitExpectation,\n DatabaseCommitResult,\n} from \"@hot-updater/plugin-core\";\nimport type {\n CreateDatabaseImplementationInput,\n DatabasePluginImplementation,\n DeleteDatabaseImplementationInput,\n FindOneDatabaseImplementationInput,\n UpdateDatabaseImplementationInput,\n} from \"@hot-updater/plugin-core/internal\";\n\nimport { countD1Rows, d1TableNames, findManyD1Rows } from \"./d1Query\";\nimport { parseD1Row } from \"./d1Rows\";\nimport { buildD1Where, d1Placeholders, encodeD1Values } from \"./d1Sql\";\n\nexport interface D1Executor {\n query(sql: string, params: readonly string[]): Promise<readonly unknown[]>;\n batch(\n statements: readonly D1Statement[],\n ): Promise<readonly (readonly unknown[])[]>;\n}\n\nexport interface D1Statement {\n readonly sql: string;\n readonly params: readonly string[];\n}\n\ntype D1Guard = {\n readonly sql: string;\n readonly params: readonly string[];\n};\n\nconst EXPECTATION_CONFLICT_MARKER = \"HOT_UPDATER_COMMIT_EXPECTATION_CONFLICT\";\n\nconst expectationGuard = (\n expectations: readonly DatabaseCommitExpectation[],\n): D1Guard => {\n const clauses: string[] = [];\n const params: string[] = [];\n for (const expectation of expectations) {\n const isRelease = expectation.model === \"releases\";\n const table = isRelease ? \"releases\" : \"release_catalogs\";\n const keyField = isRelease ? \"id\" : \"scope_key\";\n const versionField = isRelease ? \"revision\" : \"generation\";\n const key = isRelease ? expectation.id : expectation.scopeKey;\n const version = isRelease ? expectation.revision : expectation.generation;\n if (version === null) {\n clauses.push(\n `NOT EXISTS (SELECT 1 FROM ${table} WHERE ${keyField} = json_extract(?, '$'))`,\n );\n params.push(...encodeD1Values([key]));\n } else {\n clauses.push(\n `EXISTS (SELECT 1 FROM ${table} WHERE ${keyField} = json_extract(?, '$') AND ${versionField} = json_extract(?, '$'))`,\n );\n params.push(...encodeD1Values([key, version]));\n }\n }\n return { sql: clauses.join(\" AND \") || \"1\", params };\n};\n\nconst readVersion = (\n row: unknown,\n field: \"generation\" | \"revision\",\n): number | null => {\n if (typeof row !== \"object\" || row === null) return null;\n const value = Reflect.get(row, field);\n return typeof value === \"number\" ? value : null;\n};\n\nconst expectationConflict = async (\n executor: D1Executor,\n expectations: readonly DatabaseCommitExpectation[],\n): Promise<DatabaseCommitResult | null> => {\n for (const expectation of expectations) {\n const isRelease = expectation.model === \"releases\";\n const table = isRelease ? \"releases\" : \"release_catalogs\";\n const keyField = isRelease ? \"id\" : \"scope_key\";\n const versionField = isRelease ? \"revision\" : \"generation\";\n const key = isRelease ? expectation.id : expectation.scopeKey;\n const expectedVersion = isRelease\n ? expectation.revision\n : expectation.generation;\n const rows = await executor.query(\n `SELECT ${versionField} FROM ${table} WHERE ${keyField} = json_extract(?, '$') LIMIT 1`,\n encodeD1Values([key]),\n );\n const actualVersion = readVersion(rows[0], versionField);\n if (actualVersion !== expectedVersion) {\n return {\n committed: false,\n conflict: {\n actualVersion,\n changeIndex: -1,\n expectedVersion,\n key,\n model: expectation.model,\n reason: \"version_conflict\",\n },\n };\n }\n }\n return null;\n};\n\nconst isExpectationConflictError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes(EXPECTATION_CONFLICT_MARKER) ||\n message.toLowerCase().includes(\"malformed json\")\n );\n};\n\nconst bundleValues = (row: BundleRow): readonly unknown[] => [\n row.id,\n row.platform,\n row.file_hash,\n row.git_commit_hash,\n row.storage_uri,\n row.archive_byte_size,\n row.metadata,\n row.manifest_storage_uri,\n row.manifest_file_hash,\n row.asset_base_storage_uri,\n];\n\nconst patchValues = (row: BundlePatchRow): readonly unknown[] => [\n row.id,\n row.bundle_id,\n row.base_bundle_id,\n row.base_file_hash,\n row.patch_file_hash,\n row.patch_storage_uri,\n row.byte_size,\n row.order_index,\n];\n\nconst channelValues = (row: ChannelRow): readonly unknown[] => [\n row.id,\n row.name,\n];\n\nconst insertQuery = (\n input: CreateDatabaseImplementationInput,\n guard?: D1Guard,\n conflictMode: \"returnExisting\" | \"ignore\" = \"returnExisting\",\n): D1Statement => {\n let columns: readonly string[];\n let values: readonly unknown[];\n switch (input.model) {\n case \"bundles\":\n columns = [\n \"id\",\n \"platform\",\n \"file_hash\",\n \"git_commit_hash\",\n \"storage_uri\",\n \"archive_byte_size\",\n \"metadata\",\n \"manifest_storage_uri\",\n \"manifest_file_hash\",\n \"asset_base_storage_uri\",\n ];\n values = bundleValues(input.data);\n break;\n case \"bundle_patches\":\n columns = [\n \"id\",\n \"bundle_id\",\n \"base_bundle_id\",\n \"base_file_hash\",\n \"patch_file_hash\",\n \"patch_storage_uri\",\n \"byte_size\",\n \"order_index\",\n ];\n values = patchValues(input.data);\n break;\n case \"channels\":\n columns = [\"id\", \"name\"];\n values = channelValues(input.data);\n break;\n case \"bundle_events\":\n case \"api_keys\":\n case \"release_catalogs\":\n case \"releases\":\n columns = Object.keys(input.data);\n values = Object.values(input.data);\n break;\n }\n\n const conflict =\n input.onConflict !== \"ignore\"\n ? \"\"\n : input.model === \"channels\"\n ? conflictMode === \"ignore\"\n ? \" ON CONFLICT(name) DO NOTHING\"\n : \" ON CONFLICT(name) DO UPDATE SET name = excluded.name\"\n : input.model === \"api_keys\"\n ? conflictMode === \"ignore\"\n ? \" ON CONFLICT(hash) DO NOTHING\"\n : \" ON CONFLICT(hash) DO UPDATE SET hash = excluded.hash\"\n : \"\";\n\n return {\n sql: `INSERT INTO ${d1TableNames[input.model]} (${columns.join(\", \")}) ${\n guard === undefined\n ? `VALUES (${d1Placeholders(values.length)})`\n : `SELECT ${d1Placeholders(values.length)} WHERE ${guard.sql}`\n }${conflict} RETURNING *`,\n params: [...encodeD1Values(values), ...(guard?.params ?? [])],\n };\n};\n\nconst updateEntries = (\n update: UpdateDatabaseImplementationInput[\"update\"],\n): readonly [string, unknown][] => Object.entries(update);\n\nconst updateQuery = (\n input: UpdateDatabaseImplementationInput,\n guard?: D1Guard,\n): D1Statement => {\n const entries = updateEntries(input.update);\n const where = buildD1Where(input.where);\n if (entries.length === 0) {\n return {\n sql: `SELECT * FROM ${d1TableNames[input.model]}${where.sql}${guard ? ` AND ${guard.sql}` : \"\"} LIMIT 1`,\n params: [...where.params, ...(guard?.params ?? [])],\n };\n }\n const assignments = entries\n .map(([field]) => `${field} = json_extract(?, '$')`)\n .join(\", \");\n return {\n sql: `UPDATE ${d1TableNames[input.model]} SET ${assignments}${where.sql}${guard ? ` AND ${guard.sql}` : \"\"} RETURNING *`,\n params: [\n ...encodeD1Values(entries.map(([, value]) => value)),\n ...where.params,\n ...(guard?.params ?? []),\n ],\n };\n};\n\nconst deleteQuery = (\n input: DeleteDatabaseImplementationInput,\n guard?: D1Guard,\n): D1Statement => {\n const where = buildD1Where(input.where);\n return {\n sql: `DELETE FROM ${d1TableNames[input.model]}${where.sql}${guard ? ` AND ${guard.sql}` : \"\"}`,\n params: [...where.params, ...(guard?.params ?? [])],\n };\n};\n\ntype D1RequiredRow = {\n readonly model: \"bundles\" | \"api_keys\" | \"releases\";\n readonly id: string;\n readonly changeIndex: number;\n};\n\ntype D1Check = {\n readonly changeIndex: number;\n readonly resultIndex: number;\n readonly conflictWhen: \"empty\" | \"nonempty\";\n readonly reason: \"not_found\" | \"referenced\";\n};\n\ntype D1CommitPlan = {\n readonly checks: readonly D1Check[];\n readonly statements: readonly D1Statement[];\n};\n\nconst insertedKey = (change: DatabaseChange): string | undefined => {\n if (change.operation !== \"insert\") return undefined;\n if (change.model === \"bundles\") return `bundles:${change.row.id}`;\n if (change.model === \"apiKeys\") {\n return `api_keys:${change.row.id}`;\n }\n if (change.model === \"releases\") {\n return `releases:${change.row.id}`;\n }\n return undefined;\n};\n\nconst requiredRow = (\n change: DatabaseChange,\n changeIndex: number,\n): D1RequiredRow | undefined => {\n if (change.operation !== \"update\") return undefined;\n if (change.model === \"bundles\") {\n return {\n model: \"bundles\",\n id: change.where.id,\n changeIndex,\n };\n }\n if (change.model === \"apiKeys\") {\n return {\n model: \"api_keys\",\n id: change.where.id,\n changeIndex,\n };\n }\n if (change.model === \"releases\") {\n return {\n model: \"releases\",\n id: change.where.id,\n changeIndex,\n };\n }\n return undefined;\n};\n\ntype D1ChannelDeletePrecondition = {\n readonly id: string;\n readonly excludedReleaseIds: readonly string[];\n readonly addedReferenceReleaseIds: readonly string[];\n};\n\nconst channelDeletePrecondition = (\n changes: readonly DatabaseChange[],\n changeIndex: number,\n channelId: string,\n): D1ChannelDeletePrecondition => {\n const releaseEffects = new Map<string, string | null>();\n for (const change of changes.slice(0, changeIndex)) {\n if (change.model !== \"releases\") continue;\n switch (change.operation) {\n case \"insert\":\n releaseEffects.set(change.row.id, change.row.channel_id);\n break;\n case \"update\":\n break;\n case \"delete\":\n releaseEffects.set(change.where.id, null);\n break;\n }\n }\n return {\n id: channelId,\n excludedReleaseIds: [...releaseEffects.keys()],\n addedReferenceReleaseIds: [...releaseEffects]\n .filter(([, finalChannelId]) => finalChannelId === channelId)\n .map(([releaseId]) => releaseId),\n };\n};\n\nconst changeQuery = (change: DatabaseChange, guard: D1Guard): D1Statement => {\n switch (change.model) {\n case \"bundles\":\n switch (change.operation) {\n case \"insert\":\n return insertQuery({ model: \"bundles\", data: change.row }, guard);\n case \"update\":\n return updateQuery(\n {\n model: \"bundles\",\n where: [{ field: \"id\", value: change.where.id }],\n update: change.update,\n },\n guard,\n );\n case \"delete\":\n return deleteQuery(\n {\n model: \"bundles\",\n where: [{ field: \"id\", value: change.where.id }],\n },\n guard,\n );\n }\n case \"bundlePatches\":\n return change.operation === \"insert\"\n ? insertQuery({ model: \"bundle_patches\", data: change.row }, guard)\n : deleteQuery(\n {\n model: \"bundle_patches\",\n where: [{ field: \"bundle_id\", value: change.where.bundleId }],\n },\n guard,\n );\n case \"releases\":\n switch (change.operation) {\n case \"insert\":\n return insertQuery({ model: \"releases\", data: change.row }, guard);\n case \"update\":\n return updateQuery(\n {\n model: \"releases\",\n where: [{ field: \"id\", value: change.where.id }],\n update: change.update,\n },\n guard,\n );\n case \"delete\":\n return deleteQuery(\n {\n model: \"releases\",\n where: [{ field: \"id\", value: change.where.id }],\n },\n guard,\n );\n }\n case \"releaseCatalogs\":\n return {\n sql: `INSERT INTO release_catalogs (${Object.keys(change.row).join(\", \")}) SELECT ${d1Placeholders(Object.keys(change.row).length)} WHERE ${guard.sql} ON CONFLICT(scope_key) DO UPDATE SET ${Object.keys(\n change.row,\n )\n .filter((field) => field !== \"scope_key\")\n .map((field) => `${field} = excluded.${field}`)\n .join(\", \")} RETURNING *`,\n params: [...encodeD1Values(Object.values(change.row)), ...guard.params],\n };\n case \"channels\":\n return change.operation === \"insert\"\n ? insertQuery(\n {\n model: \"channels\",\n data: change.row,\n onConflict: change.onConflict,\n },\n guard,\n \"ignore\",\n )\n : {\n sql: `DELETE FROM channels WHERE id = json_extract(?, '$') AND NOT EXISTS (SELECT 1 FROM releases WHERE channel_id = json_extract(?, '$')) AND ${guard.sql}`,\n params: [\n ...encodeD1Values([change.where.id, change.where.id]),\n ...guard.params,\n ],\n };\n case \"analytics\":\n return insertQuery({ model: \"bundle_events\", data: change.row }, guard);\n case \"apiKeys\":\n return change.operation === \"insert\"\n ? insertQuery(\n {\n model: \"api_keys\",\n data: change.row,\n onConflict: change.onConflict,\n },\n guard,\n \"ignore\",\n )\n : updateQuery(\n {\n model: \"api_keys\",\n where: [{ field: \"id\", value: change.where.id }],\n update: { revoked_at_ms: change.update.revokedAtMs },\n },\n guard,\n );\n }\n};\n\nconst createCommitPlan = (input: DatabaseCommit): D1CommitPlan => {\n const checks: D1Check[] = [];\n const statements: D1Statement[] = [];\n const expectations = input.expectations ?? [];\n if (expectations.length > 0) {\n const guard = expectationGuard(expectations);\n statements.push({\n sql: `SELECT CASE WHEN ${guard.sql} THEN 1 ELSE json_extract('${EXPECTATION_CONFLICT_MARKER}', '$') END AS expectation_guard`,\n params: guard.params,\n });\n }\n const requiredRows: D1RequiredRow[] = [];\n const channelDeletes: D1ChannelDeletePrecondition[] = [];\n const inserted = new Set<string>();\n for (const [changeIndex, change] of input.changes.entries()) {\n const required = requiredRow(change, changeIndex);\n if (required !== undefined) {\n if (!inserted.has(`${required.model}:${required.id}`)) {\n requiredRows.push(required);\n checks.push({\n changeIndex,\n resultIndex: statements.length,\n conflictWhen: \"empty\",\n reason: \"not_found\",\n });\n statements.push({\n sql: `SELECT id FROM ${d1TableNames[required.model]} WHERE id = json_extract(?, '$') LIMIT 1`,\n params: encodeD1Values([required.id]),\n });\n }\n }\n if (change.model === \"channels\" && change.operation === \"delete\") {\n const precondition = channelDeletePrecondition(\n input.changes,\n changeIndex,\n change.where.id,\n );\n channelDeletes.push(precondition);\n checks.push({\n changeIndex,\n resultIndex: statements.length,\n conflictWhen: \"nonempty\",\n reason: \"referenced\",\n });\n statements.push({\n sql: \"SELECT id FROM releases WHERE channel_id = json_extract(?, '$') AND id NOT IN (SELECT value FROM json_each(?)) UNION ALL SELECT value AS id FROM json_each(?) LIMIT 1\",\n params: encodeD1Values([\n precondition.id,\n precondition.excludedReleaseIds,\n precondition.addedReferenceReleaseIds,\n ]),\n });\n }\n const key = insertedKey(change);\n if (key !== undefined) inserted.add(key);\n }\n\n const guard: D1Guard = {\n sql: `NOT EXISTS (\n SELECT 1 FROM json_each(?) AS required\n WHERE NOT EXISTS (\n SELECT 1 FROM bundles\n WHERE json_extract(required.value, '$.model') = 'bundles'\n AND bundles.id = json_extract(required.value, '$.id')\n UNION ALL\n SELECT 1 FROM api_keys\n WHERE json_extract(required.value, '$.model') = 'api_keys'\n AND api_keys.id = json_extract(required.value, '$.id')\n UNION ALL\n SELECT 1 FROM channels\n WHERE json_extract(required.value, '$.model') = 'channels'\n AND channels.id = json_extract(required.value, '$.id')\n UNION ALL\n SELECT 1 FROM releases\n WHERE json_extract(required.value, '$.model') = 'releases'\n AND releases.id = json_extract(required.value, '$.id')\n )\n ) AND NOT EXISTS (\n SELECT 1 FROM json_each(?) AS channel_delete\n WHERE EXISTS (\n SELECT 1 FROM releases\n WHERE releases.channel_id = json_extract(channel_delete.value, '$.id')\n AND releases.id NOT IN (\n SELECT value FROM json_each(\n json_extract(channel_delete.value, '$.excludedReleaseIds')\n )\n )\n UNION ALL\n SELECT value FROM json_each(\n json_extract(channel_delete.value, '$.addedReferenceReleaseIds')\n )\n )\n )`,\n params: encodeD1Values([\n requiredRows.map(({ model, id }) => ({ model, id })),\n channelDeletes,\n ]),\n };\n\n statements.push(...input.changes.map((change) => changeQuery(change, guard)));\n return { checks, statements };\n};\n\nconst resultForPlan = (\n plan: D1CommitPlan,\n results: readonly (readonly unknown[])[],\n): DatabaseCommitResult => {\n const missing = plan.checks.find(({ conflictWhen, resultIndex }) =>\n conflictWhen === \"empty\"\n ? (results[resultIndex]?.length ?? 0) === 0\n : (results[resultIndex]?.length ?? 0) > 0,\n );\n return missing === undefined\n ? { committed: true }\n : {\n committed: false,\n conflict: {\n changeIndex: missing.changeIndex,\n reason: missing.reason,\n },\n };\n};\n\nconst insertChannel = async (\n executor: D1Executor,\n input: ChannelInsertInput,\n): Promise<ChannelInsertResult> => {\n const insert = insertQuery(\n { model: \"channels\", data: input.row, onConflict: \"ignore\" },\n undefined,\n \"ignore\",\n );\n const select = {\n sql: \"SELECT id, name FROM channels WHERE name = json_extract(?, '$') LIMIT 1\",\n params: encodeD1Values([input.row.name]),\n };\n const [insertedRows = [], canonicalRows = []] = await executor.batch([\n insert,\n select,\n ]);\n return {\n row: parseD1Row(\"channels\", canonicalRows[0]),\n inserted: insertedRows.length > 0,\n };\n};\n\nconst deleteChannel = async (\n executor: D1Executor,\n input: ChannelDeleteInput,\n): Promise<ChannelDeleteResult> => {\n const [channelRows = [], referenceRows = [], deletedRows = []] =\n await executor.batch([\n {\n sql: \"SELECT id FROM channels WHERE id = json_extract(?, '$') LIMIT 1\",\n params: encodeD1Values([input.id]),\n },\n {\n sql: \"SELECT id FROM releases WHERE channel_id = json_extract(?, '$') LIMIT 1\",\n params: encodeD1Values([input.id]),\n },\n {\n sql: \"DELETE FROM channels WHERE id = json_extract(?, '$') AND NOT EXISTS (SELECT 1 FROM releases WHERE channel_id = json_extract(?, '$')) RETURNING id\",\n params: encodeD1Values([input.id, input.id]),\n },\n ]);\n if (channelRows.length === 0) return { deleted: false, reason: \"not_found\" };\n if (referenceRows.length > 0) return { deleted: false, reason: \"not_empty\" };\n return deletedRows.length > 0\n ? { deleted: true }\n : { deleted: false, reason: \"not_empty\" };\n};\n\nexport const createD1Implementation = (\n executor: D1Executor,\n): DatabasePluginImplementation => ({\n async create(input) {\n const query = insertQuery(input);\n const rows = await executor.query(query.sql, query.params);\n switch (input.model) {\n case \"bundles\":\n return parseD1Row(\"bundles\", rows[0]);\n case \"bundle_patches\":\n return parseD1Row(\"bundle_patches\", rows[0]);\n case \"channels\":\n return parseD1Row(\"channels\", rows[0]);\n case \"bundle_events\":\n return parseD1Row(\"bundle_events\", rows[0]);\n case \"api_keys\":\n return parseD1Row(\"api_keys\", rows[0]);\n case \"releases\":\n return parseD1Row(\"releases\", rows[0]);\n case \"release_catalogs\":\n return parseD1Row(\"release_catalogs\", rows[0]);\n }\n },\n async update(input) {\n const query = updateQuery(input);\n const rows = await executor.query(query.sql, query.params);\n if (rows[0] === undefined) return null;\n switch (input.model) {\n case \"bundles\":\n return parseD1Row(\"bundles\", rows[0]);\n case \"api_keys\":\n return parseD1Row(\"api_keys\", rows[0]);\n case \"releases\":\n return parseD1Row(\"releases\", rows[0]);\n case \"release_catalogs\":\n return parseD1Row(\"release_catalogs\", rows[0]);\n }\n },\n async delete(input) {\n const query = deleteQuery(input);\n await executor.query(query.sql, query.params);\n },\n count: (input) => countD1Rows(executor, input),\n async findOne(input: FindOneDatabaseImplementationInput) {\n const where = buildD1Where(input.where);\n const rows = await executor.query(\n `SELECT * FROM ${d1TableNames[input.model]}${where.sql} LIMIT 1`,\n where.params,\n );\n if (rows[0] === undefined) return null;\n switch (input.model) {\n case \"bundles\":\n return parseD1Row(\"bundles\", rows[0]);\n case \"bundle_patches\":\n return parseD1Row(\"bundle_patches\", rows[0]);\n case \"channels\":\n return parseD1Row(\"channels\", rows[0]);\n case \"api_keys\":\n return parseD1Row(\"api_keys\", rows[0]);\n case \"releases\":\n return parseD1Row(\"releases\", rows[0]);\n case \"release_catalogs\":\n return parseD1Row(\"release_catalogs\", rows[0]);\n }\n },\n findMany: (input) => findManyD1Rows(executor, input),\n insertChannel: (input) => insertChannel(executor, input),\n deleteChannel: (input) => deleteChannel(executor, input),\n async commit(input) {\n if (input.changes.length === 0) return { committed: true };\n const expectations = input.expectations ?? [];\n const conflict = await expectationConflict(executor, expectations);\n if (conflict !== null) return conflict;\n const plan = createCommitPlan(input);\n try {\n return resultForPlan(plan, await executor.batch(plan.statements));\n } catch (error) {\n if (expectations.length === 0 || !isExpectationConflictError(error)) {\n throw error;\n }\n return (\n (await expectationConflict(executor, expectations)) ?? {\n committed: false,\n conflict: {\n actualVersion:\n expectations[0].model === \"releases\"\n ? expectations[0].revision\n : expectations[0].generation,\n changeIndex: -1,\n expectedVersion:\n expectations[0].model === \"releases\"\n ? expectations[0].revision\n : expectations[0].generation,\n key:\n expectations[0].model === \"releases\"\n ? expectations[0].id\n : expectations[0].scopeKey,\n model: expectations[0].model,\n reason: \"version_conflict\",\n },\n }\n );\n }\n },\n});\n", "import { createDatabasePlugin } from \"@hot-updater/plugin-core\";\nimport { createDatabasePluginAdapter } from \"@hot-updater/plugin-core/internal\";\n\nimport { createD1Implementation } from \"../d1Implementation\";\n\ntype D1Result = {\n readonly results?: readonly unknown[];\n};\n\ntype D1BoundStatement = {\n all: () => Promise<D1Result>;\n};\n\ntype D1PreparedStatement = {\n bind: (...values: readonly unknown[]) => D1BoundStatement;\n};\n\nexport type D1Like = {\n prepare(sql: string): D1PreparedStatement;\n batch(statements: D1BoundStatement[]): Promise<readonly D1Result[]>;\n};\n\nexport interface CloudflareWorkerDatabaseEnv {\n readonly DB: D1Like;\n}\n\nexport const d1Database = (database: D1Like) => {\n const implementation = createD1Implementation({\n async query(sql, params) {\n const result = await database\n .prepare(sql)\n .bind(...params)\n .all();\n return result.results ?? [];\n },\n async batch(statements) {\n const results = await database.batch(\n statements.map(({ sql, params }) =>\n database.prepare(sql).bind(...params),\n ),\n );\n return results.map(({ results }) => results ?? []);\n },\n });\n const adapter = createDatabasePluginAdapter(\"d1Database\", implementation);\n return createDatabasePlugin({\n name: \"d1Database\",\n models: adapter.models,\n commit: adapter.commit,\n ...(adapter.dispose ? { dispose: adapter.dispose } : {}),\n });\n};\n", "import {\n createStorageKeyBuilder,\n createStorageDownloadUrl,\n createStoragePlugin,\n createStorageUri,\n parseStorageUri,\n type StoragePluginWith,\n} from \"@hot-updater/plugin-core\";\n\nexport interface CloudflareWorkerStorageConfig {\n readonly bucket: R2Bucket;\n readonly bucketName: string;\n readonly basePath?: string;\n readonly downloadUrlSigningKey: string;\n}\n\nexport const r2WorkerStorage = (\n config: CloudflareWorkerStorageConfig,\n): StoragePluginWith<\n \"put\" | \"get\" | \"getDownloadUrl\" | \"exists\" | \"delete\"\n> => {\n const getStorageKey = createStorageKeyBuilder(config.basePath);\n const getDownloadUrl = createStorageDownloadUrl(config.downloadUrlSigningKey);\n\n const parseAndValidate = (storageUri: string) => {\n const parsed = parseStorageUri(storageUri, \"r2\");\n if (parsed.bucket !== config.bucketName) {\n throw new Error(\n `Bucket name mismatch: expected \"${config.bucketName}\", but found \"${parsed.bucket}\".`,\n );\n }\n return parsed;\n };\n\n return createStoragePlugin({\n name: \"r2Storage\",\n protocol: \"r2\",\n async put({ key, body, contentLength, contentType }) {\n const storageKey = getStorageKey(key);\n const uploadOptions = {\n httpMetadata: {\n contentType,\n cacheControl: \"max-age=31536000\",\n },\n };\n if (contentLength === undefined) {\n const bufferedBody = new Uint8Array(\n await new Response(body).arrayBuffer(),\n );\n await config.bucket.put(storageKey, bufferedBody, uploadOptions);\n } else {\n const fixedLengthBody = new FixedLengthStream(contentLength);\n await Promise.all([\n body.pipeTo(fixedLengthBody.writable),\n config.bucket.put(\n storageKey,\n fixedLengthBody.readable,\n uploadOptions,\n ),\n ]);\n }\n return {\n storageUri: createStorageUri({\n protocol: \"r2\",\n bucket: config.bucketName,\n key: storageKey,\n }),\n };\n },\n async get({ storageUri }) {\n const { key } = parseAndValidate(storageUri);\n const object = await config.bucket.get(key);\n if (!object) return { response: null };\n const headers = new Headers();\n object.writeHttpMetadata(headers);\n headers.set(\"etag\", object.httpEtag);\n headers.set(\"content-length\", String(object.size));\n return { response: new Response(object.body, { headers }) };\n },\n async getDownloadUrl({ storageUri }) {\n parseAndValidate(storageUri);\n return getDownloadUrl({ storageUri });\n },\n async exists({ storageUri }) {\n const { key } = parseAndValidate(storageUri);\n return { exists: (await config.bucket.head(key)) !== null };\n },\n async delete({ storageUri }) {\n const { key } = parseAndValidate(storageUri);\n await config.bucket.delete(key);\n return { deleted: true };\n },\n });\n};\n"],
|
|
6
|
-
"mappings": "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",
|
|
7
|
-
"names": ["match", "metadata", "
|
|
5
|
+
"sourcesContent": ["//#region package.json\nvar version = \"1.0.0-rc.1\";\n//#endregion\nexport { version };\n", "import { version } from \"./package.mjs\";\n//#region src/version.ts\nconst HOT_UPDATER_SERVER_VERSION = version;\n//#endregion\nexport { HOT_UPDATER_SERVER_VERSION };\n", "import { HOT_UPDATER_SERVER_VERSION } from \"./version.mjs\";\n//#region src/handlerVersionRoutes.ts\nconst HOT_UPDATER_INFRASTRUCTURE_GENERATION = 1;\nconst createVersionRouteHandlers = () => ({ version: async () => Response.json({\n\tinfrastructureGeneration: 1,\n\tversion: HOT_UPDATER_SERVER_VERSION\n}) });\n//#endregion\nexport { HOT_UPDATER_INFRASTRUCTURE_GENERATION, createVersionRouteHandlers };\n", "//#region src/handlerErrors.ts\nvar HandlerBadRequestError = class extends Error {\n\tname = \"HandlerBadRequestError\";\n\tconstructor(message) {\n\t\tsuper(message);\n\t}\n};\n//#endregion\nexport { HandlerBadRequestError };\n", "import { HandlerBadRequestError } from \"./handlerErrors.mjs\";\n//#region src/handlerParameters.ts\nconst decodeMaybe = (value) => {\n\tif (value === void 0) return void 0;\n\ttry {\n\t\treturn decodeURIComponent(value);\n\t} catch {\n\t\treturn value;\n\t}\n};\nconst isPlatform = (value) => value === \"ios\" || value === \"android\";\nconst requireRouteParam = (params, key) => {\n\tconst value = params[key];\n\tif (!value) throw new HandlerBadRequestError(`Missing route parameter: ${key}`);\n\treturn value;\n};\nconst requirePlatformParam = (params) => {\n\tconst platform = requireRouteParam(params, \"platform\");\n\tif (!isPlatform(platform)) throw new HandlerBadRequestError(`Invalid platform: ${platform}. Expected 'ios' or 'android'.`);\n\treturn platform;\n};\nconst parseStringArraySearchParam = (url, key) => {\n\tconst values = url.searchParams.getAll(key);\n\treturn values.length > 0 ? values : void 0;\n};\nconst parsePositiveIntegerSearchParam = (url, key, bounds) => {\n\tconst value = url.searchParams.get(key);\n\tif (value === null) return bounds.defaultValue;\n\tconst parsed = Number(value);\n\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > bounds.maxValue) throw new HandlerBadRequestError(`The '${key}' query parameter must be a positive integer between 1 and ${bounds.maxValue}.`);\n\treturn parsed;\n};\n//#endregion\nexport { decodeMaybe, isPlatform, parsePositiveIntegerSearchParam, parseStringArraySearchParam, requirePlatformParam, requireRouteParam };\n", "import { HandlerBadRequestError } from \"./handlerErrors.mjs\";\nimport { decodeMaybe, isPlatform, parsePositiveIntegerSearchParam, parseStringArraySearchParam, requireRouteParam } from \"./handlerParameters.mjs\";\n//#region src/handlerBundleRoutes.ts\nconst BUNDLE_LIST_BOUNDS = {\n\tdefaultValue: 50,\n\tmaxValue: 100\n};\nconst isChannelText = (value) => {\n\tif (typeof value !== \"string\" || value.length === 0) return false;\n\tlet codePoints = 0;\n\tfor (const _codePoint of value) {\n\t\tcodePoints += 1;\n\t\tif (codePoints > 255) return false;\n\t}\n\treturn true;\n};\nconst requireChannelInsertInput = (value) => {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value) || !(\"row\" in value) || !value.row || typeof value.row !== \"object\" || Array.isArray(value.row) || !(\"id\" in value.row) || !isChannelText(value.row.id) || !(\"name\" in value.row) || !isChannelText(value.row.name) || !(\"onConflict\" in value) || value.onConflict !== \"returnExisting\") throw new HandlerBadRequestError(\"Invalid Channel insert payload\");\n\treturn {\n\t\trow: {\n\t\t\tid: value.row.id,\n\t\t\tname: value.row.name\n\t\t},\n\t\tonConflict: value.onConflict\n\t};\n};\nconst requireBundlePatchPayload = (payload, bundleId) => {\n\tif (!payload || typeof payload !== \"object\" || Array.isArray(payload)) throw new HandlerBadRequestError(\"Invalid bundle payload\");\n\tconst bundlePatch = payload;\n\tif (bundlePatch.id !== void 0 && bundlePatch.id !== bundleId) throw new HandlerBadRequestError(\"Bundle id mismatch\");\n\tconst { id: _ignoredId, ...rest } = bundlePatch;\n\treturn rest;\n};\nconst createBundleRouteHandlers = () => ({\n\tgetBundle: async (params, _request, api) => {\n\t\tconst bundle = await api.getBundleById(requireRouteParam(params, \"id\"));\n\t\tif (!bundle) return new Response(JSON.stringify({ error: \"Bundle not found\" }), {\n\t\t\tstatus: 404,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t\treturn new Response(JSON.stringify(bundle), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tgetBundles: async (_params, request, api) => {\n\t\tconst url = new URL(request.url);\n\t\tconst platform = url.searchParams.get(\"platform\");\n\t\tconst limit = parsePositiveIntegerSearchParam(url, \"limit\", BUNDLE_LIST_BOUNDS);\n\t\tconst pageParam = url.searchParams.get(\"page\");\n\t\tconst offset = url.searchParams.get(\"offset\");\n\t\tconst after = url.searchParams.get(\"after\") ?? void 0;\n\t\tconst before = url.searchParams.get(\"before\") ?? void 0;\n\t\tconst orderDirection = url.searchParams.get(\"orderDirection\");\n\t\tconst idEq = url.searchParams.get(\"idEq\") ?? void 0;\n\t\tconst idGt = url.searchParams.get(\"idGt\") ?? void 0;\n\t\tconst idGte = url.searchParams.get(\"idGte\") ?? void 0;\n\t\tconst idLt = url.searchParams.get(\"idLt\") ?? void 0;\n\t\tconst idLte = url.searchParams.get(\"idLte\") ?? void 0;\n\t\tconst idIn = parseStringArraySearchParam(url, \"idIn\");\n\t\tconst page = pageParam === null ? void 0 : Number.isSafeInteger(Number(pageParam)) && Number(pageParam) > 0 && Number.isSafeInteger((Number(pageParam) - 1) * limit) ? Number(pageParam) : null;\n\t\tif (offset !== null) throw new HandlerBadRequestError(\"The 'offset' query parameter has been removed. Use 'after' or 'before' cursor pagination instead.\");\n\t\tif (page === null) throw new HandlerBadRequestError(\"The 'page' query parameter must be a positive integer.\");\n\t\tif (after !== void 0 && before !== void 0) throw new HandlerBadRequestError(\"The 'after' and 'before' query parameters cannot be combined.\");\n\t\tif (page !== void 0 && (after !== void 0 || before !== void 0)) throw new HandlerBadRequestError(\"The 'page' query parameter cannot be combined with 'after' or 'before'.\");\n\t\tif (platform !== null && !isPlatform(platform)) throw new HandlerBadRequestError(`Invalid platform: ${platform}. Expected 'ios' or 'android'.`);\n\t\tif (orderDirection !== null && orderDirection !== \"asc\" && orderDirection !== \"desc\") throw new HandlerBadRequestError(\"The 'orderDirection' query parameter must be 'asc' or 'desc'.\");\n\t\tconst pagination = page === void 0 ? {\n\t\t\tcursor: after !== void 0 ? { after } : before !== void 0 ? { before } : void 0,\n\t\t\tpage: void 0\n\t\t} : {\n\t\t\tcursor: void 0,\n\t\t\tpage\n\t\t};\n\t\tconst result = await api.getBundles({\n\t\t\twhere: {\n\t\t\t\t...platform && { platform },\n\t\t\t\t...idEq || idGt || idGte || idLt || idLte || idIn?.length ? { id: {\n\t\t\t\t\t...idEq && { eq: idEq },\n\t\t\t\t\t...idGt && { gt: idGt },\n\t\t\t\t\t...idGte && { gte: idGte },\n\t\t\t\t\t...idLt && { lt: idLt },\n\t\t\t\t\t...idLte && { lte: idLte },\n\t\t\t\t\t...idIn?.length && { in: idIn }\n\t\t\t\t} } : {}\n\t\t\t},\n\t\t\tlimit,\n\t\t\t...pagination,\n\t\t\t...orderDirection && { orderBy: {\n\t\t\t\tfield: \"id\",\n\t\t\t\tdirection: orderDirection\n\t\t\t} }\n\t\t});\n\t\treturn new Response(JSON.stringify(result), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tcreateBundles: async (_params, request, api) => {\n\t\tconst body = await request.json();\n\t\tconst bundles = Array.isArray(body) ? body : [body];\n\t\tif (api.insertBundles) await api.insertBundles(bundles);\n\t\telse {\n\t\t\tif (bundles.length > 1) throw new HandlerBadRequestError(\"This server does not support atomic bundle batches\");\n\t\t\tconst bundle = bundles[0];\n\t\t\tif (bundle !== void 0) await api.insertBundle(bundle);\n\t\t}\n\t\treturn new Response(JSON.stringify({ success: true }), {\n\t\t\tstatus: 201,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tupdateBundle: async (params, request, api) => {\n\t\tconst bundleId = requireRouteParam(params, \"id\");\n\t\tconst body = await request.json();\n\t\tconst payload = Array.isArray(body) ? body[0] : body;\n\t\tawait api.updateBundleById(bundleId, requireBundlePatchPayload(payload, bundleId));\n\t\treturn new Response(JSON.stringify({ success: true }), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tdeleteBundle: async (params, _request, api) => {\n\t\tawait api.deleteBundleById(requireRouteParam(params, \"id\"));\n\t\treturn new Response(JSON.stringify({ success: true }), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tgetChannels: async (_params, _request, api) => {\n\t\tconst response = { data: { channels: await api.getChannels() } };\n\t\treturn new Response(JSON.stringify(response), {\n\t\t\tstatus: 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tcreateChannel: async (_params, request, api) => {\n\t\tconst result = await api.insertChannel(requireChannelInsertInput(await request.json()));\n\t\treturn new Response(JSON.stringify({ data: result }), {\n\t\t\tstatus: result.inserted ? 201 : 200,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t},\n\tdeleteChannel: async (params, _request, api) => {\n\t\tconst result = await api.deleteChannel({ id: decodeMaybe(requireRouteParam(params, \"id\")) ?? \"\" });\n\t\tif (result.deleted) return new Response(null, { status: 204 });\n\t\tconst status = result.reason === \"not_found\" ? 404 : 409;\n\t\treturn new Response(JSON.stringify({ data: result }), {\n\t\t\tstatus,\n\t\t\theaders: { \"Content-Type\": \"application/json\" }\n\t\t});\n\t}\n});\n//#endregion\nexport { createBundleRouteHandlers };\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", "//#region src/contentAddressedAssets.ts\nconst CONTENT_ADDRESSED_ASSET_PREFIX = \"assets\";\nconst SHA256_FILE_HASH_RE = /^[0-9a-f]{64}$/;\nconst isContentAddressedAssetFileHash = (value) => {\n\treturn typeof value === \"string\" && SHA256_FILE_HASH_RE.test(value);\n};\nconst getContentAddressedAssetStoragePath = ({ assetPath, fileHash }) => {\n\tconst extension = assetPath.endsWith(\".br\") ? \".br\" : assetPath.includes(\".\") ? `.${assetPath.split(\".\").pop()}` : \"\";\n\treturn `sha256/${fileHash.slice(0, 2)}/${fileHash}${extension}`;\n};\n//#endregion\nexport { CONTENT_ADDRESSED_ASSET_PREFIX, getContentAddressedAssetStoragePath, isContentAddressedAssetFileHash };\n", "//#region src/createStorageKeyBuilder.ts\nconst normalizeStorageKeyParts = (values) => {\n\tif (values.some((value) => value.includes(\"\\\\\"))) throw new Error(\"Storage keys must use '/' as the hierarchy separator.\");\n\tconst segments = values.flatMap((value) => value.split(\"/\").filter(Boolean));\n\tif (segments.some((segment) => segment === \".\" || segment === \"..\")) throw new Error(\"Storage key segments must not be '.' or '..'.\");\n\treturn segments;\n};\nconst createStorageKeyBuilder = (basePath) => {\n\tconst baseSegments = normalizeStorageKeyParts([basePath ?? \"\"]);\n\treturn (...args) => [...baseSegments, ...normalizeStorageKeyParts(args)].join(\"/\");\n};\n//#endregion\nexport { createStorageKeyBuilder };\n", "//#region src/parseStorageUri.ts\nconst PROTOCOL_PATTERN = /^[a-z][a-z\\d+.-]*$/;\nconst INVALID_BUCKET_CHARACTER_PATTERN = /[\\s/?#%@:\\\\]/;\nconst assertProtocol = (protocol) => {\n\tif (!PROTOCOL_PATTERN.test(protocol)) throw new Error(`Invalid storage URI protocol: ${protocol}`);\n};\nconst assertBucket = (bucket) => {\n\tif (bucket.length === 0 || INVALID_BUCKET_CHARACTER_PATTERN.test(bucket)) throw new Error(`Invalid storage URI bucket: ${bucket}`);\n};\nconst getKeySegments = (key) => {\n\tif (key.length === 0) throw new Error(\"Invalid storage URI key: key must not be empty\");\n\tconst segments = key.split(\"/\");\n\tif (segments.some((segment) => segment.length === 0 || segment === \".\" || segment === \"..\" || segment.includes(\"\\\\\"))) throw new Error(\"Invalid storage URI key: segments must not be empty, '.', '..' or contain '\\\\'\");\n\treturn segments;\n};\n/**\n* Creates a hierarchical storage identifier in the form\n* `protocol://bucket/slash-separated-encoded-key`.\n*/\nconst createStorageUri = ({ protocol, bucket, key }) => {\n\tassertProtocol(protocol);\n\tassertBucket(bucket);\n\treturn `${protocol}://${bucket}/${getKeySegments(key).map(encodeURIComponent).join(\"/\")}`;\n};\n/**\n* Parses a hierarchical storage identifier and decodes each key segment.\n*\n* Search parameters and fragments are not part of a storage identifier.\n*/\nfunction parseStorageUri(storageUri, expectedProtocol) {\n\tassertProtocol(expectedProtocol);\n\tif (storageUri.includes(\"?\") || storageUri.includes(\"#\")) throw new Error(`Invalid storage URI format: ${storageUri}`);\n\tconst match = /^([a-z][a-z\\d+.-]*):\\/\\/([^/]+)\\/(.*)$/.exec(storageUri);\n\tif (!match) throw new Error(`Invalid storage URI format: ${storageUri}`);\n\tconst [, protocol, bucket, encodedKey] = match;\n\tif (protocol !== expectedProtocol) throw new Error(`Invalid storage URI protocol. Expected ${expectedProtocol}, got ${protocol}`);\n\tassertBucket(bucket);\n\tlet segments;\n\ttry {\n\t\tsegments = getKeySegments(encodedKey).map((segment) => {\n\t\t\tconst decoded = decodeURIComponent(segment);\n\t\t\tif (decoded.includes(\"/\") || decoded.includes(\"\\\\\")) throw new Error(\"encoded hierarchy separator\");\n\t\t\tif (encodeURIComponent(decoded) !== segment) throw new Error(\"non-canonical segment\");\n\t\t\treturn decoded;\n\t\t});\n\t} catch {\n\t\tthrow new Error(`Invalid storage URI format: ${storageUri}`);\n\t}\n\treturn {\n\t\tprotocol,\n\t\tbucket,\n\t\tkey: segments.join(\"/\")\n\t};\n}\n//#endregion\nexport { createStorageUri, parseStorageUri };\n", "import { getContentAddressedAssetStoragePath, isContentAddressedAssetFileHash } from \"./contentAddressedAssets.mjs\";\nimport { createStorageKeyBuilder } from \"./createStorageKeyBuilder.mjs\";\nimport { createStorageUri, parseStorageUri } from \"./parseStorageUri.mjs\";\n//#region src/assetStorageLayout.ts\nconst isBrotliManifestAssetPath = (assetPath) => /(^|\\/)index\\.[^/]+\\.bundle$/.test(assetPath.replace(/\\\\/g, \"/\"));\nconst getManifestAssetDownloadPath = (assetPath) => isBrotliManifestAssetPath(assetPath) ? `${assetPath}.br` : assetPath;\nconst createStorageUriWithRelativePath = ({ baseStorageUri, relativePath }) => {\n\tconst parsed = parseStorageUri(baseStorageUri, new URL(baseStorageUri).protocol.replace(\":\", \"\"));\n\tconst childKey = createStorageKeyBuilder(void 0)(relativePath);\n\tif (!childKey) throw new Error(\"Relative storage key must not be empty.\");\n\treturn createStorageUri({\n\t\tprotocol: parsed.protocol,\n\t\tbucket: parsed.bucket,\n\t\tkey: createStorageKeyBuilder(parsed.key)(childKey)\n\t});\n};\nconst replaceStorageUriKeySuffix = ({ storageUri, keySuffix, replacement }) => {\n\tconst parsed = parseStorageUri(storageUri, new URL(storageUri).protocol.replace(\":\", \"\"));\n\tconst normalizedSuffix = createStorageKeyBuilder(void 0)(keySuffix);\n\tconst normalizedReplacement = createStorageKeyBuilder(void 0)(replacement);\n\tif (!normalizedSuffix || !normalizedReplacement) throw new Error(\"Storage URI key suffix and replacement must not be empty.\");\n\tconst keySegments = parsed.key.split(\"/\");\n\tconst suffixSegments = normalizedSuffix.split(\"/\");\n\tconst suffixOffset = keySegments.length - suffixSegments.length;\n\tif (suffixOffset < 0 || suffixSegments.some((segment, index) => keySegments[suffixOffset + index] !== segment)) throw new Error(\"Storage URI key does not end with the expected suffix.\");\n\tconst prefix = keySegments.slice(0, suffixOffset).join(\"/\");\n\treturn createStorageUri({\n\t\tprotocol: parsed.protocol,\n\t\tbucket: parsed.bucket,\n\t\tkey: createStorageKeyBuilder(prefix)(normalizedReplacement)\n\t});\n};\nconst resolveManifestAssetStorageFileHash = ({ downloadFileHash, fileHash }) => isContentAddressedAssetFileHash(downloadFileHash) ? downloadFileHash : fileHash;\nconst getManifestAssetStoragePath = ({ assetPath, downloadFileHash, fileHash }) => getContentAddressedAssetStoragePath({\n\tassetPath,\n\tfileHash: resolveManifestAssetStorageFileHash({\n\t\tdownloadFileHash,\n\t\tfileHash\n\t})\n});\nconst resolveManifestAssetStorageUri = ({ assetBaseStorageUri, assetPath, downloadFileHash, fileHash }) => createStorageUriWithRelativePath({\n\tbaseStorageUri: assetBaseStorageUri,\n\trelativePath: getManifestAssetStoragePath({\n\t\tassetPath,\n\t\tdownloadFileHash,\n\t\tfileHash\n\t})\n});\n//#endregion\nexport { createStorageUriWithRelativePath, getManifestAssetDownloadPath, getManifestAssetStoragePath, isBrotliManifestAssetPath, replaceStorageUriKeySuffix, resolveManifestAssetStorageFileHash, resolveManifestAssetStorageUri };\n", "//#region src/databasePluginCrudValidationErrors.ts\nvar DatabasePluginInputError = class extends Error {\n\tname = \"DatabasePluginInputError\";\n\tconstructor(code) {\n\t\tsuper(`Invalid database plugin input: ${code}`);\n\t\tthis.code = code;\n\t}\n};\n//#endregion\nexport { DatabasePluginInputError };\n", "//#region src/databaseJsonValue.ts\nconst isDatabaseJsonValue = (value) => {\n\tconst ancestors = /* @__PURE__ */ new WeakSet();\n\tconst validate = (input) => {\n\t\tif (input === null || typeof input === \"string\" || typeof input === \"boolean\") return true;\n\t\tif (typeof input === \"number\") return Number.isFinite(input);\n\t\tif (typeof input !== \"object\") return false;\n\t\tif (ancestors.has(input)) return false;\n\t\tancestors.add(input);\n\t\ttry {\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tif (Object.getPrototypeOf(input) !== Array.prototype) return false;\n\t\t\t\tif (Reflect.ownKeys(input).length !== input.length + 1) return false;\n\t\t\t\tfor (let index = 0; index < input.length; index += 1) {\n\t\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(input, String(index));\n\t\t\t\t\tif (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor) || !validate(descriptor.value)) return false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst prototype = Object.getPrototypeOf(input);\n\t\t\tif (prototype !== Object.prototype && prototype !== null) return false;\n\t\t\tfor (const key of Reflect.ownKeys(input)) {\n\t\t\t\tif (typeof key !== \"string\" || key === \"__proto__\") return false;\n\t\t\t\tconst descriptor = Object.getOwnPropertyDescriptor(input, key);\n\t\t\t\tif (descriptor === void 0 || !descriptor.enumerable || !(\"value\" in descriptor) || !validate(descriptor.value)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} finally {\n\t\t\tancestors.delete(input);\n\t\t}\n\t};\n\treturn validate(value);\n};\nconst isDatabaseJsonObject = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value) && isDatabaseJsonValue(value);\nconst isDatabaseMetadataObject = (value) => isDatabaseJsonObject(value) && (!Object.hasOwn(value, \"app_version\") || typeof value[\"app_version\"] === \"string\");\n//#endregion\nexport { isDatabaseMetadataObject };\n", "//#region src/bundleArtifacts.ts\nconst stripBundleArtifactMetadata = (metadata) => metadata;\nconst getManifestStorageUri = (bundle) => bundle.manifestStorageUri ?? null;\nconst getManifestFileHash = (bundle) => bundle.manifestFileHash ?? null;\nconst getAssetBaseStorageUri = (bundle) => bundle.assetBaseStorageUri ?? null;\nconst isBundlePatchArtifact = (value) => {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst candidate = value;\n\treturn typeof candidate.baseBundleId === \"string\" && typeof candidate.baseFileHash === \"string\" && typeof candidate.patchFileHash === \"string\" && typeof candidate.patchStorageUri === \"string\";\n};\nconst readBundlePatchArray = (patches) => {\n\tif (!Array.isArray(patches)) return [];\n\treturn patches.filter(isBundlePatchArtifact);\n};\nconst getBundlePatches = (bundle) => {\n\tconst patches = readBundlePatchArray(bundle.patches);\n\tconst seenBaseBundleIds = /* @__PURE__ */ new Set();\n\treturn patches.filter((patch) => {\n\t\tif (seenBaseBundleIds.has(patch.baseBundleId)) return false;\n\t\tseenBaseBundleIds.add(patch.baseBundleId);\n\t\treturn true;\n\t});\n};\nconst getBundlePatch = (bundle, baseBundleId) => {\n\treturn getBundlePatches(bundle).find((patch) => patch.baseBundleId === baseBundleId) ?? null;\n};\nconst getPrimaryPatch = (bundle) => {\n\treturn getBundlePatches(bundle)[0] ?? null;\n};\nconst getPatchBaseBundleId = (bundle) => getPrimaryPatch(bundle)?.baseBundleId ?? null;\nconst getPatchBaseFileHash = (bundle) => getPrimaryPatch(bundle)?.baseFileHash ?? null;\nconst getPatchFileHash = (bundle) => getPrimaryPatch(bundle)?.patchFileHash ?? null;\nconst getPatchStorageUri = (bundle) => getPrimaryPatch(bundle)?.patchStorageUri ?? null;\n//#endregion\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\tif (normalizedRolloutCount >= 1e3) return Array.from({ length: NUMERIC_COHORT_SIZE }, (_, index) => index + 1);\n\tconst { multiplier, offset } = getRolloutShuffleParameters(bundleId);\n\treturn Array.from({ length: normalizedRolloutCount }, (_, position) => positiveMod(multiplier * position + offset, NUMERIC_COHORT_SIZE)).map((zeroBasedCohort) => zeroBasedCohort + 1).sort((left, right) => left - right);\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/releaseCatalog.ts\nconst RELEASE_CATALOG_SCHEMA_VERSION = 1;\nconst RELEASE_CATALOG_FALLBACK_POLICY = \"BUILTIN_IF_ACTIVE_INELIGIBLE\";\nconst MAX_CRASHED_BUNDLES = 10;\nconst MAX_TARGET_COHORTS_PER_RELEASE = 100;\nconst MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE = 512;\nconst MAX_COMPILED_CATALOG_BYTES = 256 * 1024;\nconst hashSelectionContext = (value) => {\n\tlet first = 2166136261;\n\tlet second = 2654435769;\n\tfor (let index = 0; index < value.length; index += 1) {\n\t\tconst code = value.charCodeAt(index);\n\t\tfirst = Math.imul(first ^ code, 16777619);\n\t\tsecond = Math.imul(second ^ code, 2246822507);\n\t}\n\treturn `v1:${(first >>> 0).toString(16).padStart(8, \"0\")}${(second >>> 0).toString(16).padStart(8, \"0\")}`;\n};\nfunction createReleaseSelectionContextHash(input) {\n\tconst crashedBundleIds = [...new Set(input.crashedBundleIds)].sort().slice(0, 10);\n\treturn hashSelectionContext(JSON.stringify({\n\t\tactiveBundleId: input.activeBundleId ?? null,\n\t\tactiveReleaseId: input.activeReleaseId ?? null,\n\t\tcohort: normalizeCohortValue(input.cohort ?? \"\"),\n\t\tcrashedBundleIds,\n\t\tminimumReleaseId: input.minimumReleaseId,\n\t\tselectorSchemaVersion: 1,\n\t\tstrategy: input.strategy,\n\t\tstrategyValue: input.strategyValue\n\t}));\n}\nfunction isReleaseEligibleForCohort(release, cohort) {\n\tif (isCohortEligibleForUpdate(release.releaseId, cohort, release.rolloutCohortCount, release.targetCohorts)) return true;\n\treturn cohort !== null && cohort !== void 0 && isCustomCohort(normalizeCohortValue(cohort)) && normalizeRolloutCohortCount(release.rolloutCohortCount) === 1e3;\n}\nfunction selectDesiredRelease(catalog, input) {\n\tconst crashedBundleIds = new Set(input.crashedBundleIds);\n\tconst activeReleaseId = input.activeReleaseId ?? null;\n\tconst hasActiveBundle = input.currentBundleId !== input.builtInBundleId;\n\tconst isSafeBundleRelease = (release) => release.kind === \"BUNDLE\" && release.bundleId !== null && !crashedBundleIds.has(release.bundleId) && release.bundleId >= input.minimumReleaseId;\n\tconst desiredBundle = (release, status) => ({\n\t\tbundleId: release.bundleId,\n\t\tkind: \"BUNDLE\",\n\t\trelease,\n\t\treleaseId: release.releaseId,\n\t\tstatus\n\t});\n\tfor (const release of catalog.releases) {\n\t\tif (!isReleaseEligibleForCohort(release, input.cohort)) continue;\n\t\tif (activeReleaseId !== null && release.releaseId <= activeReleaseId || activeReleaseId === null && hasActiveBundle && (release.bundleId === null || release.bundleId <= input.currentBundleId)) continue;\n\t\tif (isSafeBundleRelease(release)) return desiredBundle(release, \"UPDATE\");\n\t\tif (release.bundleId !== null) continue;\n\t\treturn {\n\t\t\tbundleId: input.builtInBundleId,\n\t\t\tkind: \"EMBEDDED\",\n\t\t\trelease,\n\t\t\treleaseId: release.releaseId,\n\t\t\tstatus: \"ROLLBACK\"\n\t\t};\n\t}\n\tif (activeReleaseId !== null || hasActiveBundle) {\n\t\tconst rollbackReleases = catalog.rollbackReleases ?? catalog.releases;\n\t\tconst current = rollbackReleases.find((release) => release.releaseId === activeReleaseId || activeReleaseId === null && release.bundleId === input.currentBundleId);\n\t\tif (current !== void 0 && isSafeBundleRelease(current) && isReleaseEligibleForCohort(current, input.cohort)) return desiredBundle(current, \"UPDATE\");\n\t\tconst rollback = rollbackReleases.find((release) => isSafeBundleRelease(release) && (activeReleaseId !== null ? release.releaseId < activeReleaseId : release.bundleId < input.currentBundleId));\n\t\tif (rollback !== void 0 && isSafeBundleRelease(rollback)) return desiredBundle(rollback, \"ROLLBACK\");\n\t\tif (input.currentBundleId <= input.minimumReleaseId) return null;\n\t}\n\tif (catalog.fallbackPolicy !== \"BUILTIN_IF_ACTIVE_INELIGIBLE\") return null;\n\treturn {\n\t\tbundleId: input.builtInBundleId,\n\t\tkind: \"BUILTIN\",\n\t\trelease: null,\n\t\treleaseId: null,\n\t\tstatus: \"ROLLBACK\"\n\t};\n}\nfunction assessCatalogAcceptance(incoming, highestSeen) {\n\tif (highestSeen === null) return {\n\t\taccepted: true,\n\t\tshouldAdvanceHighWater: true\n\t};\n\tif (incoming.generation < highestSeen.generation) return {\n\t\taccepted: false,\n\t\treason: \"STALE_GENERATION\"\n\t};\n\tif (incoming.generation === highestSeen.generation && incoming.catalogHash !== highestSeen.catalogHash) return {\n\t\taccepted: false,\n\t\treason: \"GENERATION_HASH_MISMATCH\"\n\t};\n\treturn {\n\t\taccepted: true,\n\t\tshouldAdvanceHighWater: incoming.generation > highestSeen.generation\n\t};\n}\nfunction authorizeReleaseTransition(input) {\n\tconst { active, desired, explicitScopeSwitch } = input;\n\tif (active === null || active.scopeKey === null || active.generation === null) return {\n\t\tauthorized: true,\n\t\treason: \"FIRST_AUTHENTICATED_SELECTION\"\n\t};\n\tif (desired.catalogId !== active.catalogId || desired.scopeKey !== active.scopeKey) {\n\t\tif (!explicitScopeSwitch) return {\n\t\t\tauthorized: false,\n\t\t\treason: \"UNSOLICITED_SCOPE\"\n\t\t};\n\t\tif (desired.releaseId === null || desired.kind === \"BUILTIN\") return {\n\t\t\tauthorized: false,\n\t\t\treason: \"EMPTY_TARGET_SCOPE\"\n\t\t};\n\t\treturn {\n\t\t\tauthorized: true,\n\t\t\treason: \"EXPLICIT_SCOPE_SWITCH\"\n\t\t};\n\t}\n\tif (desired.generation === null || desired.generation < active.generation) return {\n\t\tauthorized: false,\n\t\treason: \"STALE_GENERATION\"\n\t};\n\tif (desired.generation > active.generation) return {\n\t\tauthorized: true,\n\t\treason: \"NEWER_POLICY\"\n\t};\n\tif (desired.selectionContextHash !== active.selectionContextHash) return {\n\t\tauthorized: true,\n\t\treason: \"CONTEXT_RESELECTION\"\n\t};\n\treturn {\n\t\tauthorized: false,\n\t\treason: \"BACKWARD_NOT_AUTHORIZED\"\n\t};\n}\n//#endregion\n//#region src/releaseCatalogScope.ts\nconst BASE64URL_ALPHABET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nconst MAX_CATALOG_SEGMENT_LENGTH = 255;\nfunction assertCatalogSegment(value, name) {\n\tif (value.length === 0 || value.length > MAX_CATALOG_SEGMENT_LENGTH || !/^[A-Za-z0-9._~-]+$/.test(value)) throw new Error(`${name} must be 1-${MAX_CATALOG_SEGMENT_LENGTH} URL-safe ASCII characters`);\n}\nfunction encodeUtf8(value) {\n\tconst bytes = [];\n\tfor (const codePointText of value) {\n\t\tconst codePoint = codePointText.codePointAt(0);\n\t\tif (codePoint <= 127) bytes.push(codePoint);\n\t\telse if (codePoint <= 2047) bytes.push(192 | codePoint >> 6, 128 | codePoint & 63);\n\t\telse if (codePoint <= 65535) bytes.push(224 | codePoint >> 12, 128 | codePoint >> 6 & 63, 128 | codePoint & 63);\n\t\telse bytes.push(240 | codePoint >> 18, 128 | codePoint >> 12 & 63, 128 | codePoint >> 6 & 63, 128 | codePoint & 63);\n\t}\n\treturn bytes;\n}\nfunction decodeUtf8(bytes) {\n\tlet result = \"\";\n\tfor (let index = 0; index < bytes.length;) {\n\t\tconst first = bytes[index++];\n\t\tlet codePoint;\n\t\tlet continuationCount;\n\t\tif (first <= 127) {\n\t\t\tcodePoint = first;\n\t\t\tcontinuationCount = 0;\n\t\t} else if ((first & 224) === 192) {\n\t\t\tcodePoint = first & 31;\n\t\t\tcontinuationCount = 1;\n\t\t} else if ((first & 240) === 224) {\n\t\t\tcodePoint = first & 15;\n\t\t\tcontinuationCount = 2;\n\t\t} else if ((first & 248) === 240) {\n\t\t\tcodePoint = first & 7;\n\t\t\tcontinuationCount = 3;\n\t\t} else throw new Error(\"Invalid UTF-8 channel key\");\n\t\tfor (let offset = 0; offset < continuationCount; offset += 1) {\n\t\t\tconst continuation = bytes[index++];\n\t\t\tif (continuation === void 0 || (continuation & 192) !== 128) throw new Error(\"Invalid UTF-8 channel key\");\n\t\t\tcodePoint = codePoint << 6 | continuation & 63;\n\t\t}\n\t\tif (codePoint > 1114111 || codePoint >= 55296 && codePoint <= 57343 || continuationCount === 1 && codePoint < 128 || continuationCount === 2 && codePoint < 2048 || continuationCount === 3 && codePoint < 65536) throw new Error(\"Invalid UTF-8 channel key\");\n\t\tresult += String.fromCodePoint(codePoint);\n\t}\n\treturn result;\n}\nfunction base64UrlEncode(bytes) {\n\tlet result = \"\";\n\tfor (let index = 0; index < bytes.length; index += 3) {\n\t\tconst first = bytes[index];\n\t\tconst second = bytes[index + 1];\n\t\tconst third = bytes[index + 2];\n\t\tconst value = first << 16 | (second ?? 0) << 8 | (third ?? 0);\n\t\tresult += BASE64URL_ALPHABET[value >> 18 & 63];\n\t\tresult += BASE64URL_ALPHABET[value >> 12 & 63];\n\t\tif (second !== void 0) result += BASE64URL_ALPHABET[value >> 6 & 63];\n\t\tif (third !== void 0) result += BASE64URL_ALPHABET[value & 63];\n\t}\n\treturn result;\n}\nfunction base64UrlDecode(value) {\n\tif (!/^[A-Za-z0-9_-]*$/.test(value) || value.length % 4 === 1) throw new Error(\"Invalid channel key\");\n\tconst bytes = [];\n\tfor (let index = 0; index < value.length; index += 4) {\n\t\tconst chunk = value.slice(index, index + 4);\n\t\tconst encoded = [...chunk].map((character) => BASE64URL_ALPHABET.indexOf(character));\n\t\tif (encoded.some((part) => part < 0)) throw new Error(\"Invalid channel key\");\n\t\tconst bits = encoded[0] << 18 | encoded[1] << 12 | (encoded[2] ?? 0) << 6 | (encoded[3] ?? 0);\n\t\tbytes.push(bits >> 16 & 255);\n\t\tif (chunk.length >= 3) bytes.push(bits >> 8 & 255);\n\t\tif (chunk.length === 4) bytes.push(bits & 255);\n\t}\n\treturn bytes;\n}\nfunction normalizeChannelName(channel) {\n\treturn channel.trim().normalize(\"NFC\");\n}\nfunction assertCanonicalChannelName(channel) {\n\tconst normalized = normalizeChannelName(channel);\n\tif (normalized.length === 0 || normalized !== channel) throw new Error(\"Channel name must be non-empty, trimmed, and NFC-normalized\");\n\tlet codePointCount = 0;\n\tfor (const _codePoint of normalized) {\n\t\tcodePointCount += 1;\n\t\tif (codePointCount > 255) throw new Error(\"Channel name must not exceed 255 characters\");\n\t}\n}\nfunction encodeChannelKey(channel) {\n\tassertCanonicalChannelName(channel);\n\treturn base64UrlEncode(encodeUtf8(channel));\n}\nfunction decodeChannelKey(channelKey) {\n\tconst channel = decodeUtf8(base64UrlDecode(channelKey));\n\tassertCanonicalChannelName(channel);\n\tif (encodeChannelKey(channel) !== channelKey) throw new Error(\"Channel key is not canonically encoded\");\n\treturn channel;\n}\nfunction createReleaseCatalogScopeKey(input) {\n\tdecodeChannelKey(input.channelKey);\n\tif (input.strategy === \"APP_VERSION\") return `v1:app-version:${input.platform}:${input.channelKey}`;\n\tassertCatalogSegment(input.fingerprintHash, \"Fingerprint hash\");\n\treturn `v1:fingerprint:${input.platform}:${input.channelKey}:${input.fingerprintHash}`;\n}\nfunction parseReleaseCatalogScopeKey(scopeKey) {\n\tconst segments = scopeKey.split(\":\");\n\tconst [version, strategy, platform, channelKey] = segments;\n\tif (version !== \"v1\" || platform !== \"ios\" && platform !== \"android\" || channelKey === void 0) throw new Error(\"Invalid release catalog scope key\");\n\tconst input = strategy === \"app-version\" && segments.length === 4 ? {\n\t\tchannelKey,\n\t\tplatform,\n\t\tstrategy: \"APP_VERSION\"\n\t} : strategy === \"fingerprint\" && segments.length === 5 && segments[4] !== void 0 ? {\n\t\tchannelKey,\n\t\tfingerprintHash: segments[4],\n\t\tplatform,\n\t\tstrategy: \"FINGERPRINT\"\n\t} : (() => {\n\t\tthrow new Error(\"Invalid release catalog scope key\");\n\t})();\n\tif (createReleaseCatalogScopeKey(input) !== scopeKey) throw new Error(\"Release catalog scope key is not canonical\");\n\treturn input;\n}\n//#endregion\n//#region src/uuid.ts\nconst NIL_UUID = \"00000000-0000-0000-0000-000000000000\";\nconst UUID_V7_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\nconst isUUIDv7 = (value) => typeof value === \"string\" && UUID_V7_PATTERN.test(value);\n//#endregion\nexport { DEFAULT_ROLLOUT_COHORT_COUNT, INVALID_COHORT_ERROR_MESSAGE, MAX_COHORT_LENGTH, MAX_COMPILED_CATALOG_BYTES, MAX_CRASHED_BUNDLES, MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE, MAX_TARGET_COHORTS_PER_RELEASE, NIL_UUID, NUMERIC_COHORT_SIZE, RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, assertCanonicalChannelName, assessCatalogAcceptance, authorizeReleaseTransition, createReleaseCatalogScopeKey, createReleaseSelectionContextHash, decodeChannelKey, encodeChannelKey, getAssetBaseStorageUri, getBundlePatch, getBundlePatches, getDefaultNumericCohort, getManifestFileHash, getManifestStorageUri, getNumericCohortRolloutPosition, getNumericCohortValue, getPatchBaseBundleId, getPatchBaseFileHash, getPatchFileHash, getPatchStorageUri, getRolledOutNumericCohorts, isCohortEligibleForUpdate, isCustomCohort, isNumericCohort, isReleaseEligibleForCohort, isUUIDv7, isValidCohort, normalizeChannelName, normalizeCohortValue, normalizeRolloutCohortCount, parseReleaseCatalogScopeKey, selectDesiredRelease, stripBundleArtifactMetadata };\n", "import { isUUIDv7, isUUIDv7 as isUUIDv7$1 } from \"@hot-updater/core\";\n//#region src/uuidv7.ts\nconst extractTimestampFromUUIDv7 = (uuid) => {\n\tif (!isUUIDv7(uuid)) throw new TypeError(\"Expected a canonical lowercase UUIDv7\");\n\tconst timestampHex = uuid.split(\"-\").join(\"\").slice(0, 12);\n\treturn Number.parseInt(timestampHex, 16);\n};\nfunction createUUIDv7FromTimestampHex(timestampHex) {\n\tconst randomBytes = new Uint8Array(10);\n\tcrypto.getRandomValues(randomBytes);\n\tconst randomHex = Array.from(randomBytes).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n\tconst randA = randomHex.slice(0, 3);\n\tconst randBHex = randomHex.slice(3, 19);\n\tconst versionAndRandA = `7${randA}`;\n\tconst variantAndFirstRandB = (128 | parseInt(randBHex.slice(0, 2), 16) & 63).toString(16).padStart(2, \"0\");\n\treturn [\n\t\ttimestampHex.slice(0, 8),\n\t\ttimestampHex.slice(8, 12),\n\t\tversionAndRandA,\n\t\tvariantAndFirstRandB + randBHex.slice(2, 4),\n\t\trandBHex.slice(4, 16)\n\t].join(\"-\");\n}\nconst createUUIDv7 = () => createUUIDv7FromTimestampHex(Date.now().toString(16).padStart(12, \"0\"));\nconst createUUIDv7After = (floor, nowMs = Date.now()) => {\n\tconst timestamp = Math.max(nowMs, floor === null ? 0 : extractTimestampFromUUIDv7(floor) + 1);\n\tif (!Number.isSafeInteger(timestamp) || timestamp < 0 || timestamp >= 2 ** 48) throw new RangeError(\"UUIDv7 timestamp is out of range\");\n\treturn createUUIDv7FromTimestampHex(timestamp.toString(16).padStart(12, \"0\"));\n};\nconst createUUIDv7WithSameTimestamp = (originalUuid) => {\n\treturn createUUIDv7FromTimestampHex(originalUuid.split(\"-\").join(\"\").slice(0, 12));\n};\n//#endregion\nexport { createUUIDv7, createUUIDv7After, createUUIDv7WithSameTimestamp, extractTimestampFromUUIDv7, isUUIDv7$1 as isUUIDv7 };\n", "//#region src/types/databaseFields.ts\nconst databaseFields = {\n\tbundles: [\n\t\t\"id\",\n\t\t\"platform\",\n\t\t\"file_hash\",\n\t\t\"git_commit_hash\",\n\t\t\"storage_uri\",\n\t\t\"archive_byte_size\",\n\t\t\"metadata\",\n\t\t\"manifest_storage_uri\",\n\t\t\"manifest_file_hash\",\n\t\t\"asset_base_storage_uri\"\n\t],\n\tbundle_patches: [\n\t\t\"id\",\n\t\t\"bundle_id\",\n\t\t\"base_bundle_id\",\n\t\t\"base_file_hash\",\n\t\t\"patch_file_hash\",\n\t\t\"patch_storage_uri\",\n\t\t\"byte_size\",\n\t\t\"order_index\"\n\t],\n\treleases: [\n\t\t\"id\",\n\t\t\"revision\",\n\t\t\"scope_key\",\n\t\t\"channel_id\",\n\t\t\"platform\",\n\t\t\"kind\",\n\t\t\"bundle_id\",\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\",\n\t\t\"enabled\",\n\t\t\"should_force_update\",\n\t\t\"message\",\n\t\t\"rollout_cohort_count\",\n\t\t\"target_cohorts\",\n\t\t\"operation\",\n\t\t\"source_release_id\",\n\t\t\"created_at_ms\",\n\t\t\"updated_at_ms\"\n\t],\n\trelease_catalogs: [\n\t\t\"scope_key\",\n\t\t\"catalog_id\",\n\t\t\"strategy\",\n\t\t\"channel_id\",\n\t\t\"channel_key\",\n\t\t\"platform\",\n\t\t\"fingerprint_hash\",\n\t\t\"generation\",\n\t\t\"payload\",\n\t\t\"catalog_hash\",\n\t\t\"byte_size\",\n\t\t\"is_tombstone\",\n\t\t\"updated_at_ms\"\n\t],\n\tchannels: [\"id\", \"name\"],\n\tbundle_events: [\n\t\t\"id\",\n\t\t\"type\",\n\t\t\"install_id\",\n\t\t\"user_id\",\n\t\t\"username\",\n\t\t\"from_bundle_id\",\n\t\t\"from_release_id\",\n\t\t\"to_release_id\",\n\t\t\"to_bundle_id\",\n\t\t\"platform\",\n\t\t\"app_version\",\n\t\t\"channel\",\n\t\t\"cohort\",\n\t\t\"update_strategy\",\n\t\t\"fingerprint_hash\",\n\t\t\"sdk_version\",\n\t\t\"received_at_ms\"\n\t],\n\tapi_keys: [\n\t\t\"id\",\n\t\t\"hash\",\n\t\t\"name\",\n\t\t\"prefix\",\n\t\t\"role\",\n\t\t\"created_at_ms\",\n\t\t\"revoked_at_ms\"\n\t]\n};\n//#endregion\nexport { databaseFields };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isDatabaseMetadataObject } from \"./databaseJsonValue.mjs\";\nimport { databaseFields } from \"./types/databaseFields.mjs\";\nimport { isUUIDv7 } from \"./uuidv7.mjs\";\n//#region src/databasePluginCrudValidationFields.ts\nconst isRecord = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst isChannelText = (value) => {\n\tif (typeof value !== \"string\" || value.length === 0) return false;\n\tlet codePointCount = 0;\n\tfor (const _codePoint of value) {\n\t\tcodePointCount += 1;\n\t\tif (codePointCount > 255) return false;\n\t}\n\treturn true;\n};\nconst modelValidators = {\n\tbundles: {\n\t\tid: (value) => typeof value === \"string\",\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tshould_force_update: (value) => typeof value === \"boolean\",\n\t\tenabled: (value) => typeof value === \"boolean\",\n\t\tfile_hash: (value) => typeof value === \"string\",\n\t\tgit_commit_hash: (value) => value === null || typeof value === \"string\",\n\t\tmessage: (value) => value === null || typeof value === \"string\",\n\t\tchannel: isChannelText,\n\t\tchannel_id: isChannelText,\n\t\tstorage_uri: (value) => typeof value === \"string\",\n\t\tarchive_byte_size: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\ttarget_app_version: (value) => value === null || typeof value === \"string\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tmetadata: isDatabaseMetadataObject,\n\t\trollout_cohort_count: (value) => typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 1e3,\n\t\ttarget_cohorts: (value) => value === null || Array.isArray(value) && value.every((item) => typeof item === \"string\"),\n\t\tmanifest_storage_uri: (value) => value === null || typeof value === \"string\",\n\t\tmanifest_file_hash: (value) => value === null || typeof value === \"string\",\n\t\tasset_base_storage_uri: (value) => value === null || typeof value === \"string\"\n\t},\n\tbundle_patches: {\n\t\tid: (value) => typeof value === \"string\",\n\t\tbundle_id: (value) => typeof value === \"string\",\n\t\tbase_bundle_id: (value) => typeof value === \"string\",\n\t\tbase_file_hash: (value) => typeof value === \"string\",\n\t\tpatch_file_hash: (value) => typeof value === \"string\",\n\t\tpatch_storage_uri: (value) => typeof value === \"string\",\n\t\tbyte_size: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\torder_index: (value) => typeof value === \"number\" && Number.isInteger(value) && value >= 0\n\t},\n\treleases: {\n\t\tid: isUUIDv7,\n\t\trevision: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1,\n\t\tscope_key: (value) => typeof value === \"string\" && value.length > 0,\n\t\tchannel_id: isChannelText,\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tkind: (value) => value === \"BUNDLE\" || value === \"EMBEDDED\",\n\t\tbundle_id: (value) => value === null || typeof value === \"string\",\n\t\tstrategy: (value) => value === \"APP_VERSION\" || value === \"FINGERPRINT\",\n\t\ttarget_app_version: (value) => value === null || typeof value === \"string\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tenabled: (value) => typeof value === \"boolean\",\n\t\tshould_force_update: (value) => typeof value === \"boolean\",\n\t\tmessage: (value) => value === null || typeof value === \"string\",\n\t\trollout_cohort_count: (value) => typeof value === \"number\" && Number.isInteger(value) && value >= 0 && value <= 1e3,\n\t\ttarget_cohorts: (value) => Array.isArray(value) && value.every((item) => typeof item === \"string\"),\n\t\toperation: (value) => value === \"DEPLOY\" || value === \"PROMOTE\" || value === \"ROLLBACK\",\n\t\tsource_release_id: (value) => value === null || isUUIDv7(value),\n\t\tcreated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\tupdated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t},\n\trelease_catalogs: {\n\t\tscope_key: (value) => typeof value === \"string\" && value.length > 0,\n\t\tcatalog_id: (value) => typeof value === \"string\" && value.length > 0,\n\t\tstrategy: (value) => value === \"APP_VERSION\" || value === \"FINGERPRINT\",\n\t\tchannel_id: isChannelText,\n\t\tchannel_key: (value) => typeof value === \"string\" && value.length > 0,\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tgeneration: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 1,\n\t\tpayload: (value) => typeof value === \"string\",\n\t\tcatalog_hash: (value) => typeof value === \"string\" && value.length > 0,\n\t\tbyte_size: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\tis_tombstone: (value) => typeof value === \"boolean\",\n\t\tupdated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t},\n\tchannels: {\n\t\tid: isChannelText,\n\t\tname: isChannelText\n\t},\n\tbundle_events: {\n\t\tid: (value) => typeof value === \"string\",\n\t\ttype: (value) => value === \"UPDATE_APPLIED\" || value === \"RECOVERED\" || value === \"RELEASE_ADOPTED\" || value === \"UNCHANGED\",\n\t\tinstall_id: (value) => typeof value === \"string\",\n\t\tuser_id: (value) => value === null || typeof value === \"string\",\n\t\tusername: (value) => value === null || typeof value === \"string\",\n\t\tfrom_bundle_id: (value) => value === null || typeof value === \"string\",\n\t\tfrom_release_id: (value) => value === null || typeof value === \"string\",\n\t\tto_release_id: (value) => value === null || typeof value === \"string\",\n\t\tto_bundle_id: (value) => typeof value === \"string\",\n\t\tplatform: (value) => value === \"ios\" || value === \"android\",\n\t\tapp_version: (value) => typeof value === \"string\",\n\t\tchannel: (value) => typeof value === \"string\",\n\t\tcohort: (value) => typeof value === \"string\",\n\t\tupdate_strategy: (value) => value === null || value === \"fingerprint\" || value === \"appVersion\",\n\t\tfingerprint_hash: (value) => value === null || typeof value === \"string\",\n\t\tsdk_version: (value) => value === null || typeof value === \"string\",\n\t\treceived_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t},\n\tapi_keys: {\n\t\tid: (value) => typeof value === \"string\",\n\t\thash: (value) => typeof value === \"string\",\n\t\tname: (value) => typeof value === \"string\",\n\t\tprefix: (value) => typeof value === \"string\",\n\t\trole: (value) => value === \"client\",\n\t\tcreated_at_ms: (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0,\n\t\trevoked_at_ms: (value) => value === null || typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0\n\t}\n};\nconst stringFields = new Set([\n\t\"id\",\n\t\"platform\",\n\t\"file_hash\",\n\t\"git_commit_hash\",\n\t\"message\",\n\t\"channel\",\n\t\"channel_id\",\n\t\"storage_uri\",\n\t\"target_app_version\",\n\t\"fingerprint_hash\",\n\t\"bundle_id\",\n\t\"base_bundle_id\",\n\t\"base_file_hash\",\n\t\"patch_file_hash\",\n\t\"patch_storage_uri\",\n\t\"scope_key\",\n\t\"catalog_id\",\n\t\"channel_key\",\n\t\"kind\",\n\t\"bundle_id\",\n\t\"strategy\",\n\t\"operation\",\n\t\"source_release_id\",\n\t\"payload\",\n\t\"catalog_hash\",\n\t\"type\",\n\t\"install_id\",\n\t\"user_id\",\n\t\"username\",\n\t\"from_bundle_id\",\n\t\"to_bundle_id\",\n\t\"app_version\",\n\t\"cohort\",\n\t\"update_strategy\",\n\t\"sdk_version\",\n\t\"hash\",\n\t\"name\",\n\t\"prefix\",\n\t\"role\"\n]);\nconst numberFields = new Set([\n\t\"archive_byte_size\",\n\t\"byte_size\",\n\t\"rollout_cohort_count\",\n\t\"order_index\",\n\t\"revision\",\n\t\"generation\",\n\t\"byte_size\",\n\t\"updated_at_ms\",\n\t\"received_at_ms\",\n\t\"created_at_ms\",\n\t\"revoked_at_ms\"\n]);\nconst booleanFields = new Set([\n\t\"should_force_update\",\n\t\"enabled\",\n\t\"is_tombstone\"\n]);\nconst sortableFields = {\n\tbundles: new Set([\n\t\t\"id\",\n\t\t\"platform\",\n\t\t\"file_hash\",\n\t\t\"git_commit_hash\",\n\t\t\"message\",\n\t\t\"channel\",\n\t\t\"channel_id\",\n\t\t\"storage_uri\",\n\t\t\"archive_byte_size\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\",\n\t\t\"rollout_cohort_count\",\n\t\t\"manifest_storage_uri\",\n\t\t\"manifest_file_hash\",\n\t\t\"asset_base_storage_uri\"\n\t]),\n\tbundle_patches: new Set([\n\t\t\"id\",\n\t\t\"bundle_id\",\n\t\t\"base_bundle_id\",\n\t\t\"base_file_hash\",\n\t\t\"patch_file_hash\",\n\t\t\"patch_storage_uri\",\n\t\t\"byte_size\",\n\t\t\"order_index\"\n\t]),\n\treleases: new Set([\n\t\t\"id\",\n\t\t\"revision\",\n\t\t\"scope_key\",\n\t\t\"channel_id\",\n\t\t\"platform\",\n\t\t\"kind\",\n\t\t\"bundle_id\",\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\",\n\t\t\"enabled\",\n\t\t\"should_force_update\",\n\t\t\"message\",\n\t\t\"rollout_cohort_count\",\n\t\t\"operation\",\n\t\t\"source_release_id\",\n\t\t\"created_at_ms\",\n\t\t\"updated_at_ms\"\n\t]),\n\trelease_catalogs: new Set([\n\t\t\"scope_key\",\n\t\t\"catalog_id\",\n\t\t\"strategy\",\n\t\t\"channel_id\",\n\t\t\"channel_key\",\n\t\t\"platform\",\n\t\t\"fingerprint_hash\",\n\t\t\"generation\",\n\t\t\"catalog_hash\",\n\t\t\"byte_size\",\n\t\t\"is_tombstone\",\n\t\t\"updated_at_ms\"\n\t]),\n\tchannels: new Set([\"id\", \"name\"]),\n\tbundle_events: new Set([\n\t\t\"id\",\n\t\t\"type\",\n\t\t\"install_id\",\n\t\t\"user_id\",\n\t\t\"username\",\n\t\t\"from_bundle_id\",\n\t\t\"from_release_id\",\n\t\t\"to_release_id\",\n\t\t\"to_bundle_id\",\n\t\t\"platform\",\n\t\t\"app_version\",\n\t\t\"channel\",\n\t\t\"cohort\",\n\t\t\"update_strategy\",\n\t\t\"fingerprint_hash\",\n\t\t\"sdk_version\",\n\t\t\"received_at_ms\"\n\t]),\n\tapi_keys: new Set([\n\t\t\"id\",\n\t\t\"hash\",\n\t\t\"name\",\n\t\t\"prefix\",\n\t\t\"role\",\n\t\t\"created_at_ms\",\n\t\t\"revoked_at_ms\"\n\t])\n};\nconst validateModel = (model) => {\n\tif (typeof model !== \"string\" || !Object.hasOwn(databaseFields, model)) throw new DatabasePluginInputError(\"invalid-model\");\n};\nconst validateField = (model, field) => {\n\tif (!databaseFields[model].includes(field)) throw new DatabasePluginInputError(\"invalid-field\");\n};\nconst validateFields = (model, fields) => {\n\tfor (const field of fields) validateField(model, field);\n};\nconst isStringField = (field) => stringFields.has(field);\nconst isNumberField = (field) => numberFields.has(field);\nconst isBooleanField = (field) => booleanFields.has(field);\n//#endregion\nexport { isBooleanField, isChannelText, isNumberField, isRecord, isStringField, modelValidators, sortableFields, validateField, validateFields, validateModel };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { databaseFields } from \"./types/databaseFields.mjs\";\nimport { isRecord, modelValidators, validateFields } from \"./databasePluginCrudValidationFields.mjs\";\n//#region src/databasePluginCrudValidationRows.ts\nconst hasValidReleaseInvariants = (data) => {\n\tconst kind = data.kind;\n\tconst bundleId = data.bundle_id;\n\tconst strategy = data.strategy;\n\tconst targetAppVersion = data.target_app_version;\n\tconst fingerprintHash = data.fingerprint_hash;\n\treturn (kind === \"BUNDLE\" && typeof bundleId === \"string\" || kind === \"EMBEDDED\" && bundleId === null) && (strategy === \"APP_VERSION\" && typeof targetAppVersion === \"string\" && fingerprintHash === null || strategy === \"FINGERPRINT\" && targetAppVersion === null && typeof fingerprintHash === \"string\");\n};\nconst hasValidBundleEventInvariants = (data) => (data.type === \"UPDATE_APPLIED\" || data.type === \"RECOVERED\" || data.type === \"RELEASE_ADOPTED\") && typeof data.from_bundle_id === \"string\" && (data.update_strategy === \"fingerprint\" || data.update_strategy === \"appVersion\") || data.type === \"UNCHANGED\" && data.from_bundle_id === null && data.update_strategy === null;\nconst validateCreateData = (model, data) => {\n\tif (!isRecord(data)) throw new DatabasePluginInputError(\"invalid-data\");\n\tvalidateFields(model, Object.keys(data));\n\tfor (const field of databaseFields[model]) {\n\t\tconst validator = modelValidators[model][field];\n\t\tif (!Object.hasOwn(data, field) || !validator || !validator(Reflect.get(data, field))) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n\tif (model === \"bundles\" && data.target_app_version === null && data.fingerprint_hash === null) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (model === \"releases\" && !hasValidReleaseInvariants(data)) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (model === \"release_catalogs\" && (data.strategy === \"APP_VERSION\" && data.fingerprint_hash !== null || data.strategy === \"FINGERPRINT\" && typeof data.fingerprint_hash !== \"string\")) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (model === \"bundle_events\" && !hasValidBundleEventInvariants(data)) throw new DatabasePluginInputError(\"invalid-data\");\n};\nconst selectRow = (row, input) => {\n\tconst { select } = input;\n\tif (!select) return row;\n\treturn Object.fromEntries(select.map((field) => [field, Reflect.get(row, field)]));\n};\nconst validateResult = (model, row, select) => {\n\tif (!isRecord(row)) throw new DatabasePluginInputError(\"invalid-result\");\n\tconst fields = select ?? databaseFields[model];\n\tfor (const field of fields) {\n\t\tconst validator = modelValidators[model][field];\n\t\tif (!Object.hasOwn(row, field) || !validator || !validator(Reflect.get(row, field))) throw new DatabasePluginInputError(\"invalid-result\");\n\t}\n\tif (model === \"bundles\" && Object.hasOwn(row, \"target_app_version\") && Object.hasOwn(row, \"fingerprint_hash\") && Reflect.get(row, \"target_app_version\") === null && Reflect.get(row, \"fingerprint_hash\") === null) throw new DatabasePluginInputError(\"invalid-result\");\n\tif (model === \"releases\" && [\n\t\t\"kind\",\n\t\t\"bundle_id\",\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\"\n\t].every((field) => Object.hasOwn(row, field)) && !hasValidReleaseInvariants(row)) throw new DatabasePluginInputError(\"invalid-result\");\n\tif (model === \"bundle_events\" && [\n\t\t\"type\",\n\t\t\"from_bundle_id\",\n\t\t\"update_strategy\"\n\t].every((field) => Object.hasOwn(row, field)) && !hasValidBundleEventInvariants(row)) throw new DatabasePluginInputError(\"invalid-result\");\n};\n//#endregion\nexport { selectRow, validateCreateData, validateResult };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isRecord, modelValidators, validateField } from \"./databasePluginCrudValidationFields.mjs\";\nimport { validateResult } from \"./databasePluginCrudValidationRows.mjs\";\n//#region src/databasePluginCrudValidationMutations.ts\nconst validateMutationWhere = (where) => {\n\tif (where.length === 0) throw new DatabasePluginInputError(\"empty-mutation-where\");\n};\nconst validateUpdateWhere = (model, where) => {\n\tconst selector = where[0];\n\tconst primaryField = model === \"release_catalogs\" ? \"scope_key\" : \"id\";\n\tif (where.length !== 1 || !isRecord(selector) || selector.field !== primaryField || selector.operator !== void 0 && selector.operator !== \"eq\" || typeof selector.value !== \"string\" || selector.connector !== void 0 || selector.mode !== void 0) throw new DatabasePluginInputError(\"invalid-update-selector\");\n};\nconst validateBundleUpdateData = (update) => {\n\tif (!isRecord(update)) throw new DatabasePluginInputError(\"invalid-data\");\n\tfor (const [field, value] of Object.entries(update)) {\n\t\tif (field === \"id\") throw new DatabasePluginInputError(\"invalid-data\");\n\t\tvalidateField(\"bundles\", field);\n\t\tconst validator = modelValidators.bundles[field];\n\t\tif (!validator || !validator(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst validateApiKeyUpdateData = (update) => {\n\tif (!isRecord(update) || Reflect.ownKeys(update).length !== 1 || !Object.hasOwn(update, \"revoked_at_ms\") || !modelValidators.api_keys.revoked_at_ms(Reflect.get(update, \"revoked_at_ms\"))) throw new DatabasePluginInputError(\"invalid-data\");\n};\nconst RELEASE_MUTABLE_FIELDS = new Set([\n\t\"revision\",\n\t\"scope_key\",\n\t\"target_app_version\",\n\t\"fingerprint_hash\",\n\t\"enabled\",\n\t\"should_force_update\",\n\t\"message\",\n\t\"rollout_cohort_count\",\n\t\"target_cohorts\",\n\t\"updated_at_ms\"\n]);\nconst validateReleaseUpdateData = (update) => {\n\tif (!isRecord(update) || Reflect.ownKeys(update).length === 0) throw new DatabasePluginInputError(\"invalid-data\");\n\tfor (const [field, value] of Object.entries(update)) {\n\t\tif (!RELEASE_MUTABLE_FIELDS.has(field)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\tconst validator = modelValidators.releases[field];\n\t\tif (!validator || !validator(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst validateReleaseCatalogUpdateData = (update) => {\n\tif (!isRecord(update)) throw new DatabasePluginInputError(\"invalid-data\");\n\tconst expectedFields = Object.keys(modelValidators.release_catalogs).filter((field) => field !== \"scope_key\");\n\tif (Reflect.ownKeys(update).length !== expectedFields.length || expectedFields.some((field) => !Object.hasOwn(update, field))) throw new DatabasePluginInputError(\"invalid-data\");\n\tfor (const [field, value] of Object.entries(update)) {\n\t\tconst validator = modelValidators.release_catalogs[field];\n\t\tif (!validator || !validator(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst validateReleaseTargetUpdate = async (implementation, input) => {\n\tif (!Object.hasOwn(input.update, \"target_app_version\") && !Object.hasOwn(input.update, \"fingerprint_hash\")) return;\n\tconst id = input.where[0]?.value;\n\tif (typeof id !== \"string\") return;\n\tconst current = await implementation.findOne({\n\t\tmodel: \"releases\",\n\t\twhere: [{\n\t\t\tfield: \"id\",\n\t\t\tvalue: id\n\t\t}],\n\t\tselect: [\n\t\t\t\"strategy\",\n\t\t\t\"target_app_version\",\n\t\t\t\"fingerprint_hash\"\n\t\t]\n\t});\n\tif (current === null) return;\n\tvalidateResult(\"releases\", current, [\n\t\t\"strategy\",\n\t\t\"target_app_version\",\n\t\t\"fingerprint_hash\"\n\t]);\n\tconst strategy = Reflect.get(current, \"strategy\");\n\tconst targetAppVersion = Object.hasOwn(input.update, \"target_app_version\") ? input.update.target_app_version : Reflect.get(current, \"target_app_version\");\n\tconst fingerprintHash = Object.hasOwn(input.update, \"fingerprint_hash\") ? input.update.fingerprint_hash : Reflect.get(current, \"fingerprint_hash\");\n\tif (!(strategy === \"APP_VERSION\" && typeof targetAppVersion === \"string\" && fingerprintHash === null || strategy === \"FINGERPRINT\" && targetAppVersion === null && typeof fingerprintHash === \"string\")) throw new DatabasePluginInputError(\"invalid-data\");\n};\n//#endregion\nexport { validateApiKeyUpdateData, validateBundleUpdateData, validateMutationWhere, validateReleaseCatalogUpdateData, validateReleaseTargetUpdate, validateReleaseUpdateData, validateUpdateWhere };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isBooleanField, isNumberField, isRecord, isStringField, modelValidators, sortableFields, validateField, validateFields } from \"./databasePluginCrudValidationFields.mjs\";\n//#region src/databasePluginCrudValidationQueries.ts\nconst validateSelect = (model, select) => {\n\tif (select === void 0) return;\n\tif (!Array.isArray(select) || select.length === 0) throw new DatabasePluginInputError(\"empty-select\");\n\tif (!select.every((field) => typeof field === \"string\")) throw new DatabasePluginInputError(\"invalid-query\");\n\tvalidateFields(model, select);\n};\nconst validateWhereValue = (model, condition) => {\n\tconst field = condition.field;\n\tif (typeof field !== \"string\") throw new DatabasePluginInputError(\"invalid-query\");\n\tvalidateField(model, field);\n\tconst operator = condition.operator ?? \"eq\";\n\tconst value = condition.value;\n\tconst mode = condition.mode;\n\tif (mode !== void 0 && mode !== \"sensitive\" && mode !== \"insensitive\") throw new DatabasePluginInputError(\"invalid-query\");\n\tswitch (operator) {\n\t\tcase \"eq\":\n\t\tcase \"ne\":\n\t\t\tif (!(isStringField(field) || isNumberField(field) || isBooleanField(field)) || !modelValidators[model][field]?.(value) || mode !== void 0 && (!isStringField(field) || typeof value !== \"string\")) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tcase \"gt\":\n\t\tcase \"gte\":\n\t\tcase \"lt\":\n\t\tcase \"lte\":\n\t\t\tif (mode !== void 0 || !(isStringField(field) || isNumberField(field)) || value === null || !modelValidators[model][field]?.(value)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tcase \"in\":\n\t\tcase \"not_in\":\n\t\t\tif (!Array.isArray(value) || mode !== void 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\tif (!(isStringField(field) || isNumberField(field) || isBooleanField(field))) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\tif (!value.every((item) => modelValidators[model][field]?.(item))) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tcase \"contains\":\n\t\tcase \"starts_with\":\n\t\tcase \"ends_with\":\n\t\t\tif (!isStringField(field) || typeof value !== \"string\" || !modelValidators[model][field]?.(value)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\treturn;\n\t\tdefault: throw new DatabasePluginInputError(\"invalid-query\");\n\t}\n};\nconst validateWhere = (model, where) => {\n\tif (where === void 0) return;\n\tif (!Array.isArray(where)) throw new DatabasePluginInputError(\"invalid-query\");\n\tfor (const item of where) {\n\t\tif (!isRecord(item)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (item.connector !== void 0 && item.connector !== \"AND\" && item.connector !== \"OR\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tvalidateWhereValue(model, item);\n\t}\n};\nconst validateDistinctFields = (model, fields) => {\n\tif (fields === void 0) return void 0;\n\tif (!Array.isArray(fields) || fields.length === 0) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tif (!fields.every((field) => typeof field === \"string\")) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tvalidateFields(model, fields);\n\treturn fields;\n};\nconst validateOrderBy = (model, orderBy) => {\n\tif (orderBy === void 0) return void 0;\n\tif (!Array.isArray(orderBy) || orderBy.length === 0) throw new DatabasePluginInputError(\"invalid-query\");\n\tconst fields = /* @__PURE__ */ new Set();\n\treturn orderBy.map((clause) => {\n\t\tif (!isRecord(clause) || typeof clause.field !== \"string\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tvalidateField(model, clause.field);\n\t\tif (!sortableFields[model].has(clause.field)) throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (clause.direction !== \"asc\" && clause.direction !== \"desc\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (clause.nulls !== void 0 && clause.nulls !== \"first\" && clause.nulls !== \"last\") throw new DatabasePluginInputError(\"invalid-query\");\n\t\tif (fields.has(clause.field)) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tfields.add(clause.field);\n\t\treturn clause;\n\t});\n};\nconst validateDistinctOn = (model, distinctOn, orderBy) => {\n\tif (distinctOn === void 0) return;\n\tif (!isRecord(distinctOn)) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tconst fields = validateDistinctFields(model, distinctOn.fields);\n\tif (fields === void 0 || orderBy === void 0) throw new DatabasePluginInputError(\"invalid-distinct\");\n\tfor (const [index, field] of fields.entries()) if (orderBy[index]?.field !== field) throw new DatabasePluginInputError(\"invalid-distinct\");\n};\nconst validatePagination = (limit, offset) => {\n\tconst effectiveLimit = limit ?? 100;\n\tconst effectiveOffset = offset ?? 0;\n\tif (limit !== void 0 && (!Number.isSafeInteger(limit) || limit < 0) || offset !== void 0 && (!Number.isSafeInteger(offset) || offset < 0) || !Number.isSafeInteger(effectiveOffset + effectiveLimit)) throw new DatabasePluginInputError(\"invalid-pagination\");\n};\nconst validateBundlePagination = (options) => {\n\tif (!Number.isSafeInteger(options.limit) || options.limit <= 0 || options.page !== void 0 && (!Number.isSafeInteger(options.page) || options.page <= 0) || options.page !== void 0 && options.cursor !== void 0) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst cursor = options.cursor;\n\tif (cursor === void 0) return;\n\tif (!isRecord(cursor)) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst hasAfter = Object.hasOwn(cursor, \"after\");\n\tif (hasAfter === Object.hasOwn(cursor, \"before\")) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst value = hasAfter ? cursor.after : cursor.before;\n\tif (typeof value !== \"string\" || value.length === 0) throw new DatabasePluginInputError(\"invalid-pagination\");\n};\n//#endregion\nexport { validateBundlePagination, validateDistinctFields, validateDistinctOn, validateOrderBy, validatePagination, validateSelect, validateWhere };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { validateModel } from \"./databasePluginCrudValidationFields.mjs\";\nimport { selectRow, validateCreateData, validateResult } from \"./databasePluginCrudValidationRows.mjs\";\nimport { validateApiKeyUpdateData, validateBundleUpdateData, validateMutationWhere, validateReleaseCatalogUpdateData, validateReleaseTargetUpdate, validateReleaseUpdateData, validateUpdateWhere } from \"./databasePluginCrudValidationMutations.mjs\";\nimport { validateDistinctFields, validateDistinctOn, validateOrderBy, validatePagination, validateSelect, validateWhere } from \"./databasePluginCrudValidationQueries.mjs\";\n//#region src/databasePluginCrud.ts\nconst createDatabasePluginCrud = (implementation) => {\n\tasync function create(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateCreateData(input.model, input.data);\n\t\tif (input.onConflict !== void 0 && !(input.onConflict === \"ignore\" && (input.model === \"channels\" || input.model === \"api_keys\"))) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tvalidateSelect(input.model, input.select);\n\t\tconst row = await implementation.create(input);\n\t\tvalidateResult(input.model, row, input.select);\n\t\treturn selectRow(row, input);\n\t}\n\tasync function update(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateMutationWhere(input.where);\n\t\tvalidateUpdateWhere(input.model, input.where);\n\t\tif (input.model === \"bundles\") validateBundleUpdateData(input.update);\n\t\telse if (input.model === \"releases\") validateReleaseUpdateData(input.update);\n\t\telse if (input.model === \"release_catalogs\") validateReleaseCatalogUpdateData(input.update);\n\t\telse if (input.model === \"api_keys\") validateApiKeyUpdateData(input.update);\n\t\telse throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tvalidateSelect(input.model, input.select);\n\t\tif (input.model === \"bundles\") {} else if (input.model === \"releases\") await validateReleaseTargetUpdate(implementation, input);\n\t\tconst row = await implementation.update(input);\n\t\tif (row === null) return null;\n\t\tvalidateResult(input.model, row, input.select);\n\t\treturn selectRow(row, input);\n\t}\n\tasync function deleteRows(input) {\n\t\tvalidateModel(input.model);\n\t\tif (input.model !== \"bundles\" && input.model !== \"bundle_patches\" && input.model !== \"releases\" && input.model !== \"channels\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateMutationWhere(input.where);\n\t\tawait implementation.delete(input);\n\t}\n\tasync function count(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateDistinctFields(input.model, input.distinct);\n\t\tconst value = await implementation.count(input);\n\t\tif (!Number.isSafeInteger(value) || value < 0) throw new DatabasePluginInputError(\"invalid-result\");\n\t\treturn value;\n\t}\n\tasync function findOne(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidateSelect(input.model, input.select);\n\t\tconst row = await implementation.findOne(input);\n\t\tif (row === null) return null;\n\t\tvalidateResult(input.model, row, input.select);\n\t\treturn selectRow(row, input);\n\t}\n\tasync function findMany(input) {\n\t\tvalidateModel(input.model);\n\t\tvalidateWhere(input.model, input.where);\n\t\tvalidatePagination(input.limit, input.offset);\n\t\tvalidateSelect(input.model, input.select);\n\t\tconst validatedOrderBy = validateOrderBy(input.model, input.orderBy);\n\t\tvalidateDistinctOn(input.model, input.distinctOn, validatedOrderBy);\n\t\tconst normalizedInput = {\n\t\t\t...input,\n\t\t\torderBy: input.orderBy,\n\t\t\tlimit: input.limit ?? 100,\n\t\t\toffset: input.offset ?? 0\n\t\t};\n\t\tconst rows = await implementation.findMany(normalizedInput);\n\t\tif (!Array.isArray(rows)) throw new DatabasePluginInputError(\"invalid-result\");\n\t\trows.forEach((row) => validateResult(input.model, row, input.select));\n\t\treturn rows.map((row) => selectRow(row, input));\n\t}\n\treturn {\n\t\tcreate,\n\t\tupdate,\n\t\tdelete: deleteRows,\n\t\tcount,\n\t\tfindOne,\n\t\tfindMany\n\t};\n};\n//#endregion\nexport { createDatabasePluginCrud };\n", "import { createDatabasePluginCrud } from \"./databasePluginCrud.mjs\";\n//#region src/databasePluginTransaction.ts\nconst createTransactionDatabasePlugin = (implementation) => {\n\treturn createDatabasePluginCrud(implementation);\n};\n//#endregion\nexport { createTransactionDatabasePlugin };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isChannelText, isRecord } from \"./databasePluginCrudValidationFields.mjs\";\nimport { validateCreateData, validateResult } from \"./databasePluginCrudValidationRows.mjs\";\nimport { validateApiKeyUpdateData, validateBundleUpdateData, validateReleaseUpdateData } from \"./databasePluginCrudValidationMutations.mjs\";\nimport { createDatabasePluginCrud } from \"./databasePluginCrud.mjs\";\nimport { createTransactionDatabasePlugin } from \"./databasePluginTransaction.mjs\";\n//#region src/createDatabasePlugin.ts\nconst PAGE_SIZE = 100;\nconst compareChannelRows = (left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0;\nvar DatabaseAtomicCommitUnsupportedError = class extends Error {\n\tname = \"DatabaseAtomicCommitUnsupportedError\";\n\tconstructor(pluginName) {\n\t\tsuper(`Database plugin \"${pluginName}\" cannot atomically commit changes across models.`);\n\t\tthis.pluginName = pluginName;\n\t}\n};\n/**\n* Internal provider signal for a delete rejected by a live reference.\n*\n* Provider implementations throw this after translating their native\n* foreign-key or reference-condition error. The public database contract\n* observes only the indexed `referenced` commit conflict.\n*/\nvar DatabaseRowReferencedError = class extends Error {\n\tname = \"DatabaseRowReferencedError\";\n\tconstructor() {\n\t\tsuper(\"The database row is still referenced.\");\n\t}\n};\nvar DatabaseCommitConflictError = class extends Error {\n\tname = \"DatabaseCommitConflictError\";\n\tconstructor(result) {\n\t\tsuper(\"Database commit precondition failed.\");\n\t\tthis.result = result;\n\t}\n};\nconst toBundleWhere = (where) => {\n\tif (!where) return [];\n\tconst filters = [];\n\tif (where.platform !== void 0) filters.push({\n\t\tfield: \"platform\",\n\t\tvalue: where.platform\n\t});\n\tif (where.id?.eq !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\tvalue: where.id.eq\n\t});\n\tif (where.id?.gt !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"gt\",\n\t\tvalue: where.id.gt\n\t});\n\tif (where.id?.gte !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"gte\",\n\t\tvalue: where.id.gte\n\t});\n\tif (where.id?.lt !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"lt\",\n\t\tvalue: where.id.lt\n\t});\n\tif (where.id?.lte !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"lte\",\n\t\tvalue: where.id.lte\n\t});\n\tif (where.id?.in !== void 0) filters.push({\n\t\tfield: \"id\",\n\t\toperator: \"in\",\n\t\tvalue: where.id.in\n\t});\n\treturn filters;\n};\nconst assertReleaseReferences = async (database, row) => {\n\tif (await database.findOne({\n\t\tmodel: \"channels\",\n\t\twhere: [{\n\t\t\tfield: \"id\",\n\t\t\tvalue: row.channel_id\n\t\t}]\n\t}) === null) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (row.bundle_id !== null) {\n\t\tconst bundle = await database.findOne({\n\t\t\tmodel: \"bundles\",\n\t\t\twhere: [{\n\t\t\t\tfield: \"id\",\n\t\t\t\tvalue: row.bundle_id\n\t\t\t}]\n\t\t});\n\t\tif (bundle === null || bundle.platform !== row.platform) throw new DatabasePluginInputError(\"invalid-data\");\n\t}\n};\nconst applyChange = async (database, change, changeIndex) => {\n\tswitch (change.model) {\n\t\tcase \"bundles\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\tdata: change.row\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (await database.update({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}],\n\t\t\t\t\tupdate: change.update\n\t\t\t\t}) === null) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"not_found\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (await database.count({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t}) > 0) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"referenced\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tawait database.delete({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"releases\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait assertReleaseReferences(database, change.row);\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\tdata: change.row\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (await database.update({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}],\n\t\t\t\t\tupdate: change.update\n\t\t\t\t}) === null) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"not_found\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tawait database.delete({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"releaseCatalogs\":\n\t\t\tif (await database.findOne({\n\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\twhere: [{\n\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\tvalue: change.row.scope_key\n\t\t\t\t}]\n\t\t\t}) === null) await database.create({\n\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\tdata: change.row\n\t\t\t});\n\t\t\telse {\n\t\t\t\tconst { scope_key: _scopeKey, ...update } = change.row;\n\t\t\t\tawait database.update({\n\t\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\tvalue: change.row.scope_key\n\t\t\t\t\t}],\n\t\t\t\t\tupdate\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"bundlePatches\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"bundle_patches\",\n\t\t\t\t\tdata: change.row\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tawait database.delete({\n\t\t\t\t\tmodel: \"bundle_patches\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\tvalue: change.where.bundleId\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"channels\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"channels\",\n\t\t\t\t\tdata: change.row,\n\t\t\t\t\tonConflict: change.onConflict\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (await database.count({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"channel_id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}]\n\t\t\t\t}) > 0) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"referenced\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\ttry {\n\t\t\t\t\tawait database.delete({\n\t\t\t\t\t\tmodel: \"channels\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (error instanceof DatabaseRowReferencedError) throw new DatabaseCommitConflictError({\n\t\t\t\t\t\tcommitted: false,\n\t\t\t\t\t\tconflict: {\n\t\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\t\treason: \"referenced\"\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t}\n\t\tcase \"insights\":\n\t\t\tawait database.create({\n\t\t\t\tmodel: \"bundle_events\",\n\t\t\t\tdata: change.row\n\t\t\t});\n\t\t\treturn;\n\t\tcase \"apiKeys\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tawait database.create({\n\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\tdata: change.row,\n\t\t\t\t\tonConflict: change.onConflict\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (await database.update({\n\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: change.where.id\n\t\t\t\t\t}],\n\t\t\t\t\tupdate: { revoked_at_ms: change.update.revokedAtMs }\n\t\t\t\t}) === null) throw new DatabaseCommitConflictError({\n\t\t\t\t\tcommitted: false,\n\t\t\t\t\tconflict: {\n\t\t\t\t\t\tchangeIndex,\n\t\t\t\t\t\treason: \"not_found\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t}\n\t}\n};\nconst expectationVersion = async (database, expectation) => {\n\tif (expectation.model === \"releases\") return (await database.findOne({\n\t\tmodel: \"releases\",\n\t\twhere: [{\n\t\t\tfield: \"id\",\n\t\t\tvalue: expectation.id\n\t\t}],\n\t\tselect: [\"revision\"]\n\t}))?.revision ?? null;\n\treturn (await database.findOne({\n\t\tmodel: \"release_catalogs\",\n\t\twhere: [{\n\t\t\tfield: \"scope_key\",\n\t\t\tvalue: expectation.scopeKey\n\t\t}],\n\t\tselect: [\"generation\"]\n\t}))?.generation ?? null;\n};\nconst applyExpectations = async (database, expectations) => {\n\tfor (const expectation of expectations) {\n\t\tconst expectedVersion = expectation.model === \"releases\" ? expectation.revision : expectation.generation;\n\t\tconst actualVersion = await expectationVersion(database, expectation);\n\t\tif (actualVersion !== expectedVersion) throw new DatabaseCommitConflictError({\n\t\t\tcommitted: false,\n\t\t\tconflict: {\n\t\t\t\tactualVersion,\n\t\t\t\tchangeIndex: -1,\n\t\t\t\texpectedVersion,\n\t\t\t\tkey: expectation.model === \"releases\" ? expectation.id : expectation.scopeKey,\n\t\t\t\tmodel: expectation.model,\n\t\t\t\treason: \"version_conflict\"\n\t\t\t}\n\t\t});\n\t}\n};\nconst applyChanges = async (database, input) => {\n\tawait applyExpectations(database, input.expectations ?? []);\n\tfor (const [changeIndex, change] of input.changes.entries()) await applyChange(database, change, changeIndex);\n\treturn { committed: true };\n};\nconst hasOnlyKeys = (value, keys) => {\n\treturn Reflect.ownKeys(value).length === keys.length && keys.every((key) => Object.hasOwn(value, key));\n};\nconst validateWhere = (where, field, validateValue = (value) => typeof value === \"string\") => {\n\tif (!isRecord(where) || !hasOnlyKeys(where, [field]) || !validateValue(Reflect.get(where, field))) throw new DatabasePluginInputError(\"invalid-data\");\n};\nconst validateDatabaseChange = (change) => {\n\tif (!isRecord(change)) throw new DatabasePluginInputError(\"invalid-data\");\n\tswitch (change.model) {\n\t\tcase \"bundles\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateCreateData(\"bundles\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\",\n\t\t\t\t\t\"update\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\tvalidateBundleUpdateData(change.update);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"bundlePatches\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateCreateData(\"bundle_patches\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"bundleId\");\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"releases\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateCreateData(\"releases\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\",\n\t\t\t\t\t\"update\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\tvalidateReleaseUpdateData(change.update);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"releaseCatalogs\":\n\t\t\tif (change.operation !== \"put\" || !hasOnlyKeys(change, [\n\t\t\t\t\"model\",\n\t\t\t\t\"operation\",\n\t\t\t\t\"row\"\n\t\t\t])) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\tvalidateCreateData(\"release_catalogs\", change.row);\n\t\t\treturn;\n\t\tcase \"channels\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\",\n\t\t\t\t\t\"onConflict\"\n\t\t\t\t]) || change.onConflict !== \"ignore\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\t\tvalidateCreateData(\"channels\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"delete\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\", isChannelText);\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tcase \"insights\":\n\t\t\tif (change.operation !== \"insert\" || !hasOnlyKeys(change, [\n\t\t\t\t\"model\",\n\t\t\t\t\"operation\",\n\t\t\t\t\"row\"\n\t\t\t])) throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\tvalidateCreateData(\"bundle_events\", change.row);\n\t\t\treturn;\n\t\tcase \"apiKeys\": switch (change.operation) {\n\t\t\tcase \"insert\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"row\",\n\t\t\t\t\t\"onConflict\"\n\t\t\t\t]) || change.onConflict !== \"ignore\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\t\tvalidateCreateData(\"api_keys\", change.row);\n\t\t\t\treturn;\n\t\t\tcase \"update\":\n\t\t\t\tif (!hasOnlyKeys(change, [\n\t\t\t\t\t\"model\",\n\t\t\t\t\t\"operation\",\n\t\t\t\t\t\"where\",\n\t\t\t\t\t\"update\"\n\t\t\t\t])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateWhere(change.where, \"id\");\n\t\t\t\tif (!isRecord(change.update)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tif (!hasOnlyKeys(change.update, [\"revokedAtMs\"])) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\tvalidateApiKeyUpdateData({ revoked_at_ms: change.update.revokedAtMs });\n\t\t\t\treturn;\n\t\t\tdefault: throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t}\n\t\tdefault: throw new DatabasePluginInputError(\"invalid-model\");\n\t}\n};\nconst validateDatabaseCommitExpectation = (expectation) => {\n\tif (!isRecord(expectation)) throw new DatabasePluginInputError(\"invalid-data\");\n\tif (expectation.model === \"releases\") {\n\t\tif (!hasOnlyKeys(expectation, [\n\t\t\t\"model\",\n\t\t\t\"id\",\n\t\t\t\"revision\"\n\t\t]) || typeof expectation.id !== \"string\" || !(expectation.revision === null || typeof expectation.revision === \"number\" && Number.isSafeInteger(expectation.revision) && expectation.revision >= 1)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\treturn;\n\t}\n\tif (expectation.model === \"releaseCatalogs\") {\n\t\tif (!hasOnlyKeys(expectation, [\n\t\t\t\"model\",\n\t\t\t\"scopeKey\",\n\t\t\t\"generation\"\n\t\t]) || typeof expectation.scopeKey !== \"string\" || !(expectation.generation === null || typeof expectation.generation === \"number\" && Number.isSafeInteger(expectation.generation) && expectation.generation >= 1)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\treturn;\n\t}\n\tthrow new DatabasePluginInputError(\"invalid-model\");\n};\nfunction validateDatabaseCommit(input) {\n\tif (!isRecord(input) || !Array.isArray(input.changes) || (Object.hasOwn(input, \"expectations\") ? !hasOnlyKeys(input, [\"changes\", \"expectations\"]) || !Array.isArray(input.expectations) : !hasOnlyKeys(input, [\"changes\"]))) throw new DatabasePluginInputError(\"invalid-data\");\n\tinput.changes.forEach(validateDatabaseChange);\n\tif (Array.isArray(input.expectations)) input.expectations.forEach(validateDatabaseCommitExpectation);\n}\nconst validateChannelInsertResult = (input, result) => {\n\tvalidateResult(\"channels\", result.row, void 0);\n\tif (typeof result.inserted !== \"boolean\" || result.row.name !== input.row.name || result.inserted && result.row.id !== input.row.id) throw new DatabasePluginInputError(\"invalid-result\");\n};\nconst validateChannelDeleteResult = (result) => {\n\tif (result.deleted) return;\n\tif (result.reason !== \"not_found\" && result.reason !== \"not_empty\") throw new DatabasePluginInputError(\"invalid-result\");\n};\nconst createDatabasePluginAdapter = (name, implementation) => {\n\tconst crud = createDatabasePluginCrud(implementation);\n\tconst transaction = implementation.transaction;\n\tconst executeCommit = implementation.commit ? implementation.commit : async (input) => {\n\t\tif (transaction) try {\n\t\t\treturn await transaction((database) => applyChanges(createTransactionDatabasePlugin(database), input));\n\t\t} catch (error) {\n\t\t\tif (error instanceof DatabaseCommitConflictError) return error.result;\n\t\t\tthrow error;\n\t\t}\n\t\tif ((input.expectations?.length ?? 0) > 0 || input.changes.length > 1 || input.changes.some((change) => change.model === \"channels\" && change.operation === \"delete\")) throw new DatabaseAtomicCommitUnsupportedError(name);\n\t\ttry {\n\t\t\treturn await applyChanges(crud, input);\n\t\t} catch (error) {\n\t\t\tif (error instanceof DatabaseCommitConflictError) return error.result;\n\t\t\tthrow error;\n\t\t}\n\t};\n\tconst commit = async (input) => {\n\t\tvalidateDatabaseCommit(input);\n\t\treturn executeCommit(input);\n\t};\n\tconst findApiKeyByHash = (database, hash) => database.findOne({\n\t\tmodel: \"api_keys\",\n\t\twhere: [{\n\t\t\tfield: \"hash\",\n\t\t\tvalue: hash\n\t\t}]\n\t});\n\treturn {\n\t\tmodels: {\n\t\t\tbundles: {\n\t\t\t\tfindById: (id) => crud.findOne({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: id\n\t\t\t\t\t}]\n\t\t\t\t}),\n\t\t\t\tfindMany: (query) => crud.findMany({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: toBundleWhere(query.where),\n\t\t\t\t\tlimit: query.limit,\n\t\t\t\t\toffset: query.offset,\n\t\t\t\t\torderBy: [query.orderBy]\n\t\t\t\t}),\n\t\t\t\tcount: (where) => crud.count({\n\t\t\t\t\tmodel: \"bundles\",\n\t\t\t\t\twhere: toBundleWhere(where)\n\t\t\t\t})\n\t\t\t},\n\t\t\tbundlePatches: { async findByBundleIds(bundleIds) {\n\t\t\t\tif (bundleIds.length === 0) return [];\n\t\t\t\tconst rows = [];\n\t\t\t\tfor (let offset = 0;; offset += PAGE_SIZE) {\n\t\t\t\t\tconst page = await crud.findMany({\n\t\t\t\t\t\tmodel: \"bundle_patches\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\t\toperator: \"in\",\n\t\t\t\t\t\t\tvalue: bundleIds\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tlimit: PAGE_SIZE,\n\t\t\t\t\t\toffset,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\trows.push(...page);\n\t\t\t\t\tif (page.length < PAGE_SIZE) return rows;\n\t\t\t\t}\n\t\t\t} },\n\t\t\treleases: {\n\t\t\t\tfindById: (id) => crud.findOne({\n\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tvalue: id\n\t\t\t\t\t}]\n\t\t\t\t}),\n\t\t\t\tfindMany(input) {\n\t\t\t\t\tif (!Number.isSafeInteger(input.limit) || input.limit <= 0 || input.afterReleaseId !== void 0 && input.beforeReleaseId !== void 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\t\t\tconst query = crud.findMany({\n\t\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\t\twhere: [\n\t\t\t\t\t\t\t...input.afterReleaseId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\t\toperator: \"gt\",\n\t\t\t\t\t\t\t\tvalue: input.afterReleaseId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.beforeReleaseId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\t\toperator: \"lt\",\n\t\t\t\t\t\t\t\tvalue: input.beforeReleaseId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.bundleId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"bundle_id\",\n\t\t\t\t\t\t\t\tvalue: input.bundleId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.channelId === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"channel_id\",\n\t\t\t\t\t\t\t\tvalue: input.channelId\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.enabled === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"enabled\",\n\t\t\t\t\t\t\t\tvalue: input.enabled\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.platform === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"platform\",\n\t\t\t\t\t\t\t\tvalue: input.platform\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\t...input.targetAppVersion === void 0 ? [] : [{\n\t\t\t\t\t\t\t\tfield: \"target_app_version\",\n\t\t\t\t\t\t\t\tvalue: input.targetAppVersion\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t],\n\t\t\t\t\t\tlimit: input.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tdirection: input.afterReleaseId === void 0 ? \"desc\" : \"asc\"\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\treturn input.afterReleaseId === void 0 ? query : query.then((rows) => [...rows].reverse());\n\t\t\t\t},\n\t\t\t\tfindManyByScope(input) {\n\t\t\t\t\tif (input.consistency !== \"strong\" || !Number.isSafeInteger(input.limit) || input.limit <= 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\t\t\treturn crud.findMany({\n\t\t\t\t\t\tmodel: \"releases\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\t\tvalue: input.scopeKey\n\t\t\t\t\t\t}, ...input.afterReleaseId === void 0 ? [] : [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\toperator: \"gt\",\n\t\t\t\t\t\t\tvalue: input.afterReleaseId\n\t\t\t\t\t\t}]],\n\t\t\t\t\t\tlimit: input.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tdirection: \"asc\"\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\treleaseCatalogs: {\n\t\t\t\tfindByScopeKey: (scopeKey) => crud.findOne({\n\t\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\t\twhere: [{\n\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\tvalue: scopeKey\n\t\t\t\t\t}]\n\t\t\t\t}),\n\t\t\t\tfindMany(input) {\n\t\t\t\t\tif (!Number.isSafeInteger(input.limit) || input.limit <= 0) throw new DatabasePluginInputError(\"invalid-query\");\n\t\t\t\t\treturn crud.findMany({\n\t\t\t\t\t\tmodel: \"release_catalogs\",\n\t\t\t\t\t\twhere: input.afterScopeKey === void 0 ? [] : [{\n\t\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\t\toperator: \"gt\",\n\t\t\t\t\t\t\tvalue: input.afterScopeKey\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tlimit: input.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\tfield: \"scope_key\",\n\t\t\t\t\t\t\tdirection: \"asc\"\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\tchannels: {\n\t\t\t\tasync insert(input) {\n\t\t\t\t\tif (input.onConflict !== \"returnExisting\") throw new DatabasePluginInputError(\"invalid-operation\");\n\t\t\t\t\tvalidateCreateData(\"channels\", input.row);\n\t\t\t\t\tconst result = await implementation.insertChannel(input);\n\t\t\t\t\tvalidateChannelInsertResult(input, result);\n\t\t\t\t\treturn result;\n\t\t\t\t},\n\t\t\t\tasync list(_input) {\n\t\t\t\t\tconst channels = [];\n\t\t\t\t\tfor (let offset = 0;; offset += PAGE_SIZE) {\n\t\t\t\t\t\tconst page = await crud.findMany({\n\t\t\t\t\t\t\tmodel: \"channels\",\n\t\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\t\tfield: \"name\",\n\t\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\tlimit: PAGE_SIZE,\n\t\t\t\t\t\t\toffset\n\t\t\t\t\t\t});\n\t\t\t\t\t\tchannels.push(...page);\n\t\t\t\t\t\tif (page.length < PAGE_SIZE) {\n\t\t\t\t\t\t\tchannels.sort(compareChannelRows);\n\t\t\t\t\t\t\treturn { channels };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tasync delete(input) {\n\t\t\t\t\tif (!isChannelText(input.id)) throw new DatabasePluginInputError(\"invalid-data\");\n\t\t\t\t\tconst result = await implementation.deleteChannel(input);\n\t\t\t\t\tvalidateChannelDeleteResult(result);\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinsights: {\n\t\t\t\tasync append(row) {\n\t\t\t\t\tawait crud.create({\n\t\t\t\t\t\tmodel: \"bundle_events\",\n\t\t\t\t\t\tdata: row\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tasync scan(input) {\n\t\t\t\t\tconst rows = [];\n\t\t\t\t\tfor (let offset = 0; rows.length < input.limit; offset += PAGE_SIZE) {\n\t\t\t\t\t\tconst page = await crud.findMany({\n\t\t\t\t\t\t\tmodel: \"bundle_events\",\n\t\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\t\tfield: \"received_at_ms\",\n\t\t\t\t\t\t\t\toperator: \"lt\",\n\t\t\t\t\t\t\t\tvalue: input.beforeReceivedAtMs\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\torderBy: [{\n\t\t\t\t\t\t\t\tfield: \"received_at_ms\",\n\t\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t\t\t}],\n\t\t\t\t\t\t\tlimit: PAGE_SIZE,\n\t\t\t\t\t\t\toffset\n\t\t\t\t\t\t});\n\t\t\t\t\t\trows.push(...page.filter((row) => input.after === void 0 || row.received_at_ms > input.after.receivedAtMs || row.received_at_ms === input.after.receivedAtMs && row.id > input.after.id));\n\t\t\t\t\t\tif (page.length < PAGE_SIZE) break;\n\t\t\t\t\t}\n\t\t\t\t\treturn rows.slice(0, input.limit);\n\t\t\t\t}\n\t\t\t},\n\t\t\tapiKeys: {\n\t\t\t\tasync create(row) {\n\t\t\t\t\tconst run = async (database) => {\n\t\t\t\t\t\tif (await findApiKeyByHash(database, row.hash) !== null) return \"existing\";\n\t\t\t\t\t\tawait database.create({\n\t\t\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\t\t\tdata: row\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn \"created\";\n\t\t\t\t\t};\n\t\t\t\t\treturn transaction ? transaction((database) => run(createTransactionDatabasePlugin(database))) : run(crud);\n\t\t\t\t},\n\t\t\t\tfindByHash: (hash) => findApiKeyByHash(crud, hash),\n\t\t\t\tlist: () => crud.findMany({\n\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\torderBy: [{\n\t\t\t\t\t\tfield: \"created_at_ms\",\n\t\t\t\t\t\tdirection: \"desc\"\n\t\t\t\t\t}, {\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tdirection: \"asc\"\n\t\t\t\t\t}],\n\t\t\t\t\tlimit: Number.MAX_SAFE_INTEGER,\n\t\t\t\t\toffset: 0\n\t\t\t\t}),\n\t\t\t\tasync revoke({ id, revokedAtMs }) {\n\t\t\t\t\treturn crud.update({\n\t\t\t\t\t\tmodel: \"api_keys\",\n\t\t\t\t\t\twhere: [{\n\t\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\t\tvalue: id\n\t\t\t\t\t\t}],\n\t\t\t\t\t\tupdate: { revoked_at_ms: revokedAtMs }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcommit,\n\t\t...implementation.dispose ? { dispose: implementation.dispose } : {}\n\t};\n};\nconst createDatabasePlugin = (options) => ({ ...options });\n//#endregion\nexport { DatabaseAtomicCommitUnsupportedError, DatabaseRowReferencedError, createDatabasePlugin, createDatabasePluginAdapter };\n", "//#region src/createStoragePlugin.ts\nconst createStoragePlugin = (options) => ({ ...options });\nfunction assertStorageOperations(plugin, operations) {\n\tfor (const operation of operations) if (typeof plugin[operation] !== \"function\") throw new Error(`Storage plugin \"${plugin.name}\" does not implement ${operation}.`);\n}\n//#endregion\nexport { assertStorageOperations, createStoragePlugin };\n", "import { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { isDatabaseMetadataObject } from \"./databaseJsonValue.mjs\";\nimport { stripBundleArtifactMetadata } from \"@hot-updater/core\";\n//#region src/databaseMetadata.ts\nconst bundleMetadataToRow = (metadata) => {\n\tconst value = stripBundleArtifactMetadata(metadata);\n\tif (value === void 0) return {};\n\tif (!isDatabaseMetadataObject(value)) throw new DatabasePluginInputError(\"invalid-data\");\n\treturn value;\n};\n//#endregion\nexport { bundleMetadataToRow };\n", "import { bundleMetadataToRow } from \"./databaseMetadata.mjs\";\nimport { getAssetBaseStorageUri, getBundlePatches, getManifestFileHash, getManifestStorageUri, stripBundleArtifactMetadata } from \"@hot-updater/core\";\n//#region src/databaseRows.ts\nconst releaseToRow = (release, scopeKey) => ({\n\tid: release.id,\n\trevision: release.revision,\n\tscope_key: scopeKey,\n\tchannel_id: release.channelId,\n\tplatform: release.platform,\n\tkind: release.kind,\n\tbundle_id: release.bundleId,\n\tstrategy: release.strategy,\n\ttarget_app_version: release.targetAppVersion,\n\tfingerprint_hash: release.fingerprintHash,\n\tenabled: release.enabled,\n\tshould_force_update: release.shouldForceUpdate,\n\tmessage: release.message,\n\trollout_cohort_count: release.rolloutCohortCount,\n\ttarget_cohorts: release.targetCohorts,\n\toperation: release.operation,\n\tsource_release_id: release.sourceReleaseId,\n\tcreated_at_ms: release.createdAtMs,\n\tupdated_at_ms: release.updatedAtMs\n});\nconst releaseRowToRelease = (row) => ({\n\tid: row.id,\n\trevision: row.revision,\n\tchannelId: row.channel_id,\n\tplatform: row.platform,\n\tkind: row.kind,\n\tbundleId: row.bundle_id,\n\tstrategy: row.strategy,\n\ttargetAppVersion: row.target_app_version,\n\tfingerprintHash: row.fingerprint_hash,\n\tenabled: row.enabled,\n\tshouldForceUpdate: row.should_force_update,\n\tmessage: row.message,\n\trolloutCohortCount: row.rollout_cohort_count,\n\ttargetCohorts: row.target_cohorts,\n\toperation: row.operation,\n\tsourceReleaseId: row.source_release_id,\n\tcreatedAtMs: row.created_at_ms,\n\tupdatedAtMs: row.updated_at_ms\n});\nconst BundleRowHydrationErrorReason = {\n\tduplicatePatchId: \"duplicate_patch_id\",\n\torphanPatchOwner: \"orphan_patch_owner\",\n\torphanPatchBase: \"orphan_patch_base\"\n};\nvar BundleRowHydrationError = class extends Error {\n\tname = \"BundleRowHydrationError\";\n\treason;\n\tpatchId;\n\tbundleId;\n\tconstructor({ reason, patchId, bundleId }) {\n\t\tsuper(`Cannot hydrate bundle rows: ${reason} for patch \"${patchId}\" and bundle \"${bundleId}\".`);\n\t\tthis.reason = reason;\n\t\tthis.patchId = patchId;\n\t\tthis.bundleId = bundleId;\n\t}\n};\nconst bundleToRow = (bundle) => {\n\tconst metadata = bundleMetadataToRow(bundle.metadata);\n\treturn {\n\t\tid: bundle.id,\n\t\tplatform: bundle.platform,\n\t\tfile_hash: bundle.fileHash,\n\t\tgit_commit_hash: bundle.gitCommitHash,\n\t\tstorage_uri: bundle.storageUri,\n\t\tarchive_byte_size: bundle.archiveByteSize,\n\t\tmetadata,\n\t\tmanifest_storage_uri: getManifestStorageUri(bundle),\n\t\tmanifest_file_hash: getManifestFileHash(bundle),\n\t\tasset_base_storage_uri: getAssetBaseStorageUri(bundle)\n\t};\n};\nconst bundleToPatchRows = (bundle) => getBundlePatches(bundle).map((patch, orderIndex) => ({\n\tid: `${bundle.id}:${patch.baseBundleId}`,\n\tbundle_id: bundle.id,\n\tbase_bundle_id: patch.baseBundleId,\n\tbase_file_hash: patch.baseFileHash,\n\tpatch_file_hash: patch.patchFileHash,\n\tpatch_storage_uri: patch.patchStorageUri,\n\tbyte_size: patch.byteSize,\n\torder_index: orderIndex\n}));\nconst comparePatchRows = (left, right) => left.order_index - right.order_index || left.id.localeCompare(right.id);\nconst patchRowToArtifact = (row) => ({\n\tbaseBundleId: row.base_bundle_id,\n\tbaseFileHash: row.base_file_hash,\n\tbyteSize: row.byte_size,\n\tpatchFileHash: row.patch_file_hash,\n\tpatchStorageUri: row.patch_storage_uri\n});\nconst rowToBundle = (row, patchRows = []) => {\n\tconst patches = patchRows.slice().sort(comparePatchRows).map(patchRowToArtifact);\n\treturn {\n\t\tid: row.id,\n\t\tplatform: row.platform,\n\t\tfileHash: row.file_hash,\n\t\tgitCommitHash: row.git_commit_hash,\n\t\tstorageUri: row.storage_uri,\n\t\tarchiveByteSize: row.archive_byte_size,\n\t\tmetadata: stripBundleArtifactMetadata(row.metadata),\n\t\tmanifestStorageUri: row.manifest_storage_uri,\n\t\tmanifestFileHash: row.manifest_file_hash,\n\t\tassetBaseStorageUri: row.asset_base_storage_uri,\n\t\tpatches\n\t};\n};\nconst rowsToBundles = (bundleRows, patchRows, referencedBundleRows) => {\n\tconst ownerIds = new Set(bundleRows.map(({ id }) => id));\n\tconst baseIds = new Set(ownerIds);\n\tfor (const row of referencedBundleRows) baseIds.add(row.id);\n\tconst patchIds = /* @__PURE__ */ new Set();\n\tconst patchesByOwner = /* @__PURE__ */ new Map();\n\tfor (const patch of patchRows) {\n\t\tif (patchIds.has(patch.id)) throw new BundleRowHydrationError({\n\t\t\treason: BundleRowHydrationErrorReason.duplicatePatchId,\n\t\t\tpatchId: patch.id,\n\t\t\tbundleId: patch.bundle_id\n\t\t});\n\t\tpatchIds.add(patch.id);\n\t\tif (!ownerIds.has(patch.bundle_id)) throw new BundleRowHydrationError({\n\t\t\treason: BundleRowHydrationErrorReason.orphanPatchOwner,\n\t\t\tpatchId: patch.id,\n\t\t\tbundleId: patch.bundle_id\n\t\t});\n\t\tif (!baseIds.has(patch.base_bundle_id)) throw new BundleRowHydrationError({\n\t\t\treason: BundleRowHydrationErrorReason.orphanPatchBase,\n\t\t\tpatchId: patch.id,\n\t\t\tbundleId: patch.base_bundle_id\n\t\t});\n\t\tconst ownerPatches = patchesByOwner.get(patch.bundle_id) ?? [];\n\t\townerPatches.push(patch);\n\t\tpatchesByOwner.set(patch.bundle_id, ownerPatches);\n\t}\n\treturn bundleRows.map((row) => rowToBundle(row, patchesByOwner.get(row.id) ?? []));\n};\n//#endregion\nexport { BundleRowHydrationError, BundleRowHydrationErrorReason, bundleToPatchRows, bundleToRow, releaseRowToRelease, releaseToRow, rowToBundle, rowsToBundles };\n", "import { bundleMetadataToRow } from \"./databaseMetadata.mjs\";\nimport { getBundlePatches } from \"@hot-updater/core\";\n//#region src/databaseClientUpdates.ts\nvar DatabasePatchUpdateUnsupportedError = class extends Error {\n\tname = \"DatabasePatchUpdateUnsupportedError\";\n\tconstructor(bundleId, pluginName) {\n\t\tsuper(`Database plugin \"${pluginName}\" cannot atomically replace patches for bundle \"${bundleId}\".`);\n\t\tthis.bundleId = bundleId;\n\t\tthis.pluginName = pluginName;\n\t}\n};\nconst bundleUpdateToRow = (update, _channelId) => {\n\treturn {\n\t\t...update.platform !== void 0 ? { platform: update.platform } : {},\n\t\t...update.fileHash !== void 0 ? { file_hash: update.fileHash } : {},\n\t\t...update.gitCommitHash !== void 0 ? { git_commit_hash: update.gitCommitHash } : {},\n\t\t...update.storageUri !== void 0 ? { storage_uri: update.storageUri } : {},\n\t\t...update.archiveByteSize !== void 0 ? { archive_byte_size: update.archiveByteSize } : {},\n\t\t...update.metadata !== void 0 ? { metadata: bundleMetadataToRow(update.metadata) } : {},\n\t\t...update.manifestStorageUri !== void 0 ? { manifest_storage_uri: update.manifestStorageUri } : {},\n\t\t...update.manifestFileHash !== void 0 ? { manifest_file_hash: update.manifestFileHash } : {},\n\t\t...update.assetBaseStorageUri !== void 0 ? { asset_base_storage_uri: update.assetBaseStorageUri } : {}\n\t};\n};\nconst bundleUpdateToPatchRows = (bundleId, update) => getBundlePatches({ patches: update.patches }).map((patch, orderIndex) => ({\n\tid: `${bundleId}:${patch.baseBundleId}`,\n\tbundle_id: bundleId,\n\tbase_bundle_id: patch.baseBundleId,\n\tbase_file_hash: patch.baseFileHash,\n\tpatch_file_hash: patch.patchFileHash,\n\tpatch_storage_uri: patch.patchStorageUri,\n\tbyte_size: patch.byteSize,\n\torder_index: orderIndex\n}));\n//#endregion\nexport { DatabasePatchUpdateUnsupportedError, bundleUpdateToPatchRows, bundleUpdateToRow };\n", "import { calculatePagination } from \"./calculatePagination.mjs\";\nimport { DatabasePluginInputError } from \"./databasePluginCrudValidationErrors.mjs\";\nimport { validateBundlePagination } from \"./databasePluginCrudValidationQueries.mjs\";\nimport { rowsToBundles } from \"./databaseRows.mjs\";\n//#region src/databaseClientReads.ts\nconst PAGE_SIZE = 100;\nconst mergeIdFilter = (where, id) => ({\n\t...where,\n\tid: {\n\t\t...where?.id,\n\t\t...id\n\t}\n});\nconst loadBundleRows = async (database, where) => {\n\tconst finiteIds = where?.id?.in;\n\tif (finiteIds) {\n\t\tif (finiteIds.length === 0) return [];\n\t\treturn [...await database.models.bundles.findMany({\n\t\t\twhere,\n\t\t\tlimit: finiteIds.length,\n\t\t\toffset: 0,\n\t\t\torderBy: {\n\t\t\t\tfield: \"id\",\n\t\t\t\tdirection: \"asc\"\n\t\t\t}\n\t\t})];\n\t}\n\tconst [cutoff] = await database.models.bundles.findMany({\n\t\twhere,\n\t\tlimit: 1,\n\t\toffset: 0,\n\t\torderBy: {\n\t\t\tfield: \"id\",\n\t\t\tdirection: \"desc\"\n\t\t}\n\t});\n\tif (!cutoff) return [];\n\tconst rows = [];\n\tlet after;\n\tfor (;;) {\n\t\tconst page = await database.models.bundles.findMany({\n\t\t\twhere: mergeIdFilter(where, {\n\t\t\t\tlte: cutoff.id,\n\t\t\t\t...after ? { gt: after } : {}\n\t\t\t}),\n\t\t\tlimit: PAGE_SIZE,\n\t\t\toffset: 0,\n\t\t\torderBy: {\n\t\t\t\tfield: \"id\",\n\t\t\t\tdirection: \"asc\"\n\t\t\t}\n\t\t});\n\t\trows.push(...page);\n\t\tif (page.length < PAGE_SIZE) return rows;\n\t\tafter = page.at(-1)?.id;\n\t}\n};\nconst hydrateRows = async (database, ownerRows) => {\n\tconst patchRows = await database.models.bundlePatches.findByBundleIds(ownerRows.map(({ id }) => id));\n\tconst ownerIds = new Set(ownerRows.map(({ id }) => id));\n\tconst referencedIds = [...new Set(patchRows.map(({ base_bundle_id }) => base_bundle_id).filter((id) => !ownerIds.has(id)))];\n\treturn rowsToBundles(ownerRows, patchRows, referencedIds.length === 0 ? [] : await loadBundleRows(database, { id: { in: referencedIds } }));\n};\nconst cursorIdFilter = (cursor, direction) => {\n\tif (cursor?.after) return { [direction === \"desc\" ? \"lt\" : \"gt\"]: cursor.after };\n\tif (cursor?.before) return { [direction === \"desc\" ? \"gt\" : \"lt\"]: cursor.before };\n};\nconst responsePage = async (database, options) => {\n\tvalidateBundlePagination(options);\n\tconst direction = options.orderBy?.direction ?? \"desc\";\n\tconst offset = options.page ? Math.max(0, options.page - 1) * options.limit : 0;\n\tconst cursor = options.page ? void 0 : options.cursor;\n\tconst queryLimit = cursor ? options.limit + 1 : options.limit;\n\tif (!Number.isSafeInteger(offset) || !Number.isSafeInteger(queryLimit) || !Number.isSafeInteger(offset + queryLimit)) throw new DatabasePluginInputError(\"invalid-pagination\");\n\tconst cursorFilter = cursorIdFilter(cursor, direction);\n\tconst where = cursorFilter ? mergeIdFilter(options.where, cursorFilter) : options.where;\n\tconst queryDirection = cursor?.before ? direction === \"desc\" ? \"asc\" : \"desc\" : direction;\n\tconst [queriedRows, total] = await Promise.all([database.models.bundles.findMany({\n\t\twhere,\n\t\tlimit: queryLimit,\n\t\toffset,\n\t\torderBy: {\n\t\t\tfield: \"id\",\n\t\t\tdirection: queryDirection\n\t\t}\n\t}), database.models.bundles.count(options.where)]);\n\tconst hasMore = cursor ? queriedRows.length > options.limit : false;\n\tconst pageRows = cursor ? queriedRows.slice(0, options.limit) : queriedRows;\n\tconst ownerRows = cursor?.before ? pageRows.toReversed() : pageRows;\n\tconst pagination = calculatePagination(total, {\n\t\tlimit: options.limit,\n\t\toffset\n\t});\n\tconst hasPreviousPage = cursor ? Boolean(cursor.after) || hasMore : pagination.hasPreviousPage;\n\tconst hasNextPage = cursor ? Boolean(cursor.before) || hasMore : pagination.hasNextPage;\n\tconst firstId = ownerRows[0]?.id;\n\tconst lastId = ownerRows.at(-1)?.id;\n\treturn {\n\t\tdata: await hydrateRows(database, ownerRows),\n\t\tpagination: {\n\t\t\t...pagination,\n\t\t\thasNextPage,\n\t\t\thasPreviousPage,\n\t\t\t...hasNextPage && lastId ? { nextCursor: lastId } : {},\n\t\t\t...hasPreviousPage && firstId ? { previousCursor: firstId } : {},\n\t\t\t...!firstId && cursor?.after ? { previousCursor: cursor.after } : {},\n\t\t\t...!lastId && cursor?.before ? { nextCursor: cursor.before } : {}\n\t\t}\n\t};\n};\n//#endregion\nexport { hydrateRows, responsePage };\n", "import { DatabaseAtomicCommitUnsupportedError, DatabaseRowReferencedError } from \"./createDatabasePlugin.mjs\";\nimport { bundleToPatchRows, bundleToRow } from \"./databaseRows.mjs\";\nimport { hydrateRows, responsePage } from \"./databaseClientReads.mjs\";\nimport { DatabasePatchUpdateUnsupportedError, bundleUpdateToPatchRows, bundleUpdateToRow } from \"./databaseClientUpdates.mjs\";\n//#region src/databaseClient.ts\nvar DatabaseBundleNotFoundError = class extends Error {\n\tname = \"DatabaseBundleNotFoundError\";\n\tconstructor(bundleId) {\n\t\tsuper(`Bundle \"${bundleId}\" was not found.`);\n\t\tthis.bundleId = bundleId;\n\t}\n};\nvar DatabasePatchInsertUnsupportedError = class extends Error {\n\tname = \"DatabasePatchInsertUnsupportedError\";\n\tconstructor(bundleId, pluginName) {\n\t\tsuper(`Database plugin \"${pluginName}\" cannot atomically insert patches for bundle \"${bundleId}\".`);\n\t\tthis.bundleId = bundleId;\n\t\tthis.pluginName = pluginName;\n\t}\n};\nconst insertChanges = (bundle) => [{\n\tmodel: \"bundles\",\n\toperation: \"insert\",\n\trow: bundleToRow(bundle)\n}, ...bundleToPatchRows(bundle).map((row) => ({\n\tmodel: \"bundlePatches\",\n\toperation: \"insert\",\n\trow\n}))];\nconst updateChanges = (bundleId, update) => {\n\tconst rowUpdate = bundleUpdateToRow(update);\n\treturn [{\n\t\tmodel: \"bundles\",\n\t\toperation: \"update\",\n\t\twhere: { id: bundleId },\n\t\tupdate: rowUpdate\n\t}, ...Object.hasOwn(update, \"patches\") ? [{\n\t\tmodel: \"bundlePatches\",\n\t\toperation: \"delete\",\n\t\twhere: { bundleId }\n\t}, ...bundleUpdateToPatchRows(bundleId, update).map((row) => ({\n\t\tmodel: \"bundlePatches\",\n\t\toperation: \"insert\",\n\t\trow\n\t}))] : []];\n};\nconst deleteChanges = (bundleId) => [{\n\tmodel: \"bundles\",\n\toperation: \"delete\",\n\twhere: { id: bundleId }\n}];\nconst createDatabaseClient = (plugin) => {\n\tconst getBundleById = async (id) => {\n\t\tconst row = await plugin.models.bundles.findById(id);\n\t\tif (!row) return null;\n\t\treturn (await hydrateRows(plugin, [row]))[0] ?? null;\n\t};\n\tconst insertChannel = (input) => plugin.models.channels.insert(input);\n\tconst createMutationClient = (commit) => ({\n\t\tgetBundleById,\n\t\tgetBundles: (options) => responsePage(plugin, options),\n\t\tasync getChannels() {\n\t\t\treturn (await plugin.models.channels.list({})).channels;\n\t\t},\n\t\tinsertChannel,\n\t\tasync insertBundle(bundle) {\n\t\t\ttry {\n\t\t\t\tawait commit(insertChanges(bundle));\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof DatabaseAtomicCommitUnsupportedError && bundleToPatchRows(bundle).length > 0) throw new DatabasePatchInsertUnsupportedError(bundle.id, plugin.name);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tasync updateBundleById(bundleId, update) {\n\t\t\ttry {\n\t\t\t\tif (!(await commit(updateChanges(bundleId, update))).committed) throw new DatabaseBundleNotFoundError(bundleId);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof DatabaseAtomicCommitUnsupportedError && Object.hasOwn(update, \"patches\")) throw new DatabasePatchUpdateUnsupportedError(bundleId, plugin.name);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\tasync deleteBundleById(bundleId) {\n\t\t\tconst result = await commit(deleteChanges(bundleId));\n\t\t\tif (!result.committed && result.conflict.reason === \"referenced\") throw new DatabaseRowReferencedError();\n\t\t}\n\t});\n\tconst runMutation = async (operation) => {\n\t\tconst changes = [];\n\t\tconst result = await operation(createMutationClient(async (input) => {\n\t\t\tchanges.push(...input);\n\t\t\treturn { committed: true };\n\t\t}));\n\t\tif (changes.length === 0) return result;\n\t\tconst commitResult = await plugin.commit({ changes });\n\t\tif (!commitResult.committed) {\n\t\t\tconst change = changes[commitResult.conflict.changeIndex];\n\t\t\tif (commitResult.conflict.reason === \"referenced\" && change?.model === \"bundles\" && change.operation === \"delete\") throw new DatabaseRowReferencedError();\n\t\t\tif (change?.model === \"bundles\" && change.operation === \"update\") throw new DatabaseBundleNotFoundError(change.where.id);\n\t\t\tthrow new Error(`Database plugin \"${plugin.name}\" rejected a commit.`);\n\t\t}\n\t\treturn result;\n\t};\n\treturn {\n\t\t...createMutationClient((changes) => plugin.commit({ changes })),\n\t\tdeleteChannel: (input) => plugin.models.channels.delete(input),\n\t\tmutate: runMutation\n\t};\n};\n//#endregion\nexport { DatabaseBundleNotFoundError, DatabasePatchInsertUnsupportedError, createDatabaseClient };\n", "//#region ../../node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.js\nconst LETTER_DASH_NUMBER = \"[a-zA-Z0-9-]\";\nconst NUMERIC_IDENTIFIER = String.raw`0|[1-9]\\d*`;\nconst NUMERIC_IDENTIFIER_LOOSE = String.raw`\\d+`;\nconst NON_NUMERIC_IDENTIFIER = String.raw`\\d*[a-zA-Z-]${LETTER_DASH_NUMBER}*`;\nconst MAIN_VERSION = String.raw`(${NUMERIC_IDENTIFIER})\\.(${NUMERIC_IDENTIFIER})\\.(${NUMERIC_IDENTIFIER})`;\nconst MAIN_VERSION_LOOSE = String.raw`(${NUMERIC_IDENTIFIER_LOOSE})\\.(${NUMERIC_IDENTIFIER_LOOSE})\\.(${NUMERIC_IDENTIFIER_LOOSE})`;\nconst PRERELEASE_IDENTIFIER = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER})`;\nconst PRERELEASE_IDENTIFIER_LOOSE = `(?:${NON_NUMERIC_IDENTIFIER}|${NUMERIC_IDENTIFIER_LOOSE})`;\nconst PRERELEASE = String.raw`(?:-(${PRERELEASE_IDENTIFIER}(?:\\.${PRERELEASE_IDENTIFIER})*))`;\nconst PRERELEASE_LOOSE = String.raw`(?:-?(${PRERELEASE_IDENTIFIER_LOOSE}(?:\\.${PRERELEASE_IDENTIFIER_LOOSE})*))`;\nconst BUILD_IDENTIFIER = `${LETTER_DASH_NUMBER}+`;\nconst BUILD = String.raw`(?:\\+(${BUILD_IDENTIFIER}(?:\\.${BUILD_IDENTIFIER})*))`;\nconst FULL_PLAIN = `v?${MAIN_VERSION}${PRERELEASE}?${BUILD}?`;\nconst LOOSE_PLAIN = String.raw`[v=\\s]*${MAIN_VERSION_LOOSE}${PRERELEASE_LOOSE}?${BUILD}?`;\nconst GREATER_LESS_THAN = \"((?:<|>)?=?)\";\nconst XRANGE_IDENTIFIER = String.raw`${NUMERIC_IDENTIFIER}|x|X|\\*`;\nconst XRANGE_IDENTIFIER_LOOSE = String.raw`${NUMERIC_IDENTIFIER_LOOSE}|x|X|\\*`;\nconst XRANGE_PLAIN = String.raw`[v=\\s]*(${XRANGE_IDENTIFIER})(?:\\.(${XRANGE_IDENTIFIER})(?:\\.(${XRANGE_IDENTIFIER})(?:${PRERELEASE})?${BUILD}?)?)?`;\nconst XRANGE_PLAIN_LOOSE = String.raw`[v=\\s]*(${XRANGE_IDENTIFIER_LOOSE})(?:\\.(${XRANGE_IDENTIFIER_LOOSE})(?:\\.(${XRANGE_IDENTIFIER_LOOSE})(?:${PRERELEASE_LOOSE})?${BUILD}?)?)?`;\nconst LONE_TILDE = \"(?:~>?)\";\nconst LONE_CARET = String.raw`(?:\\^)`;\nconst COERCE_PLAIN = String.raw`(^|[^\\d])(\\d{1,${16}})(?:\\.(\\d{1,${16}}))?(?:\\.(\\d{1,${16}}))?`;\nconst COERCE = String.raw`${COERCE_PLAIN}(?:$|[^\\d])`;\nconst COERCE_FULL = String.raw`${COERCE_PLAIN}(?:${PRERELEASE})?(?:${BUILD})?(?:$|[^\\d])`;\nfunction makeSafeRegexSource(source) {\n\tconst replacements = [\n\t\t[String.raw`\\s`, 1],\n\t\t[String.raw`\\d`, 256],\n\t\t[LETTER_DASH_NUMBER, 250]\n\t];\n\tfor (const [token, maximum] of replacements) source = source.split(`${token}*`).join(`${token}{0,${maximum}}`).split(`${token}+`).join(`${token}{1,${maximum}}`);\n\treturn source;\n}\nfunction safeRegex(source, flags) {\n\treturn new RegExp(makeSafeRegexSource(source), flags);\n}\nconst NUMERIC$1 = /^\\d+$/;\nfunction compareIdentifiers(left, right) {\n\tif (typeof left === \"number\" && typeof right === \"number\") return left === right ? 0 : left < right ? -1 : 1;\n\tconst leftNumeric = NUMERIC$1.test(String(left));\n\tconst rightNumeric = NUMERIC$1.test(String(right));\n\tconst normalizedLeft = leftNumeric ? Number(left) : left;\n\tconst normalizedRight = rightNumeric ? Number(right) : right;\n\treturn normalizedLeft === normalizedRight ? 0 : leftNumeric && !rightNumeric ? -1 : rightNumeric && !leftNumeric ? 1 : normalizedLeft < normalizedRight ? -1 : 1;\n}\nconst FULL = safeRegex(`^${FULL_PLAIN}$`);\nconst LOOSE = safeRegex(`^${LOOSE_PLAIN}$`);\nsafeRegex(`^${PRERELEASE}$`);\nsafeRegex(`^${PRERELEASE_LOOSE}$`);\nconst COERCE_EXACT = safeRegex(COERCE);\nconst COERCE_FULL_EXACT = safeRegex(COERCE_FULL);\nconst NUMERIC = /^\\d+$/;\nfunction formatComparableVersion(version) {\n\tconst base = `${version.major}.${version.minor}.${version.patch}`;\n\treturn version.prerelease?.length ? `${base}-${version.prerelease.join(\".\")}` : base;\n}\nfunction formatFullVersion(version) {\n\tconst comparable = formatComparableVersion(version);\n\treturn version.build?.length ? `${comparable}+${version.build.join(\".\")}` : comparable;\n}\nfunction parse(version, options = {}) {\n\tif (typeof version !== \"string\") return version;\n\tif (version.length > 256) throw new TypeError(`Version exceeds the maximum length of 256 characters`);\n\tconst match = version.trim().match(options.loose ? LOOSE : FULL);\n\tif (!match) throw new TypeError(`Invalid version syntax: ${version}`);\n\tconst major = Number(match[1]);\n\tconst minor = Number(match[2]);\n\tconst patch = Number(match[3]);\n\tif (major > Number.MAX_SAFE_INTEGER || major < 0) throw new TypeError(`Invalid major version: ${match[1]}`);\n\tif (minor > Number.MAX_SAFE_INTEGER || minor < 0) throw new TypeError(`Invalid minor version: ${match[2]}`);\n\tif (patch > Number.MAX_SAFE_INTEGER || patch < 0) throw new TypeError(`Invalid patch version: ${match[3]}`);\n\tconst prerelease = match[4] ? match[4].split(\".\").map((identifier) => {\n\t\tif (NUMERIC.test(identifier)) {\n\t\t\tconst numeric = Number(identifier);\n\t\t\tif (numeric >= 0 && numeric < Number.MAX_SAFE_INTEGER) return numeric;\n\t\t}\n\t\treturn identifier;\n\t}) : void 0;\n\treturn {\n\t\tbuild: match[5]?.split(\".\"),\n\t\tmajor,\n\t\tminor,\n\t\tpatch,\n\t\tprerelease\n\t};\n}\nfunction tryParse(version, options = {}) {\n\ttry {\n\t\treturn parse(version, options);\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction compareMainParsed(left, right) {\n\treturn left.major === right.major ? left.minor === right.minor ? left.patch === right.patch ? 0 : left.patch < right.patch ? -1 : 1 : left.minor < right.minor ? -1 : 1 : left.major < right.major ? -1 : 1;\n}\nfunction comparePrereleaseParsed(left, right) {\n\tconst leftPrerelease = left.prerelease;\n\tconst rightPrerelease = right.prerelease;\n\tif (leftPrerelease?.length && !rightPrerelease?.length) return -1;\n\tif (!leftPrerelease?.length && rightPrerelease?.length) return 1;\n\tif (!leftPrerelease?.length && !rightPrerelease?.length) return 0;\n\tfor (let index = 0;; index++) {\n\t\tconst leftIdentifier = leftPrerelease?.[index];\n\t\tconst rightIdentifier = rightPrerelease?.[index];\n\t\tif (leftIdentifier === void 0 && rightIdentifier === void 0) return 0;\n\t\tif (rightIdentifier === void 0) return 1;\n\t\tif (leftIdentifier === void 0) return -1;\n\t\tif (leftIdentifier !== rightIdentifier) return compareIdentifiers(leftIdentifier, rightIdentifier);\n\t}\n}\nfunction compareParsed(left, right) {\n\treturn compareMainParsed(left, right) || comparePrereleaseParsed(left, right);\n}\nfunction coerceParsedVersion(value, options = {}) {\n\tif (typeof value === \"object\") return value;\n\tconst input = typeof value === \"number\" ? String(value) : value;\n\tif (typeof input !== \"string\") return null;\n\tlet match = null;\n\tif (options.rtl) {\n\t\tconst expression = safeRegex(options.includePrerelease ? COERCE_FULL : COERCE, \"g\");\n\t\tlet next;\n\t\twhile ((next = expression.exec(input)) && (!match || match.index + match[0].length !== input.length)) {\n\t\t\tif (!match || next.index + next[0].length !== match.index + match[0].length) match = next;\n\t\t\texpression.lastIndex = next.index + next[1].length + next[2].length;\n\t\t}\n\t} else match = (options.includePrerelease ? COERCE_FULL_EXACT : COERCE_EXACT).exec(input);\n\tif (!match) return null;\n\tconst major = match[2];\n\treturn tryParse(`${major}.${match[3] || \"0\"}.${match[4] || \"0\"}${options.includePrerelease && match[5] ? `-${match[5]}` : \"\"}${options.includePrerelease && match[6] ? `+${match[6]}` : \"\"}`, options);\n}\nconst STRICT_COMPARATOR = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*(${FULL_PLAIN})$|^$`);\nconst LOOSE_COMPARATOR$1 = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*(${LOOSE_PLAIN})$|^$`);\nfunction parseComparator(comparator, options = {}) {\n\tconst normalized = comparator.trim().replaceAll(/\\s+/g, \" \");\n\tconst match = normalized.match(options.loose ? LOOSE_COMPARATOR$1 : STRICT_COMPARATOR);\n\tif (!match) throw new TypeError(`Invalid comparator: ${normalized}`);\n\tconst operator = match[1] === \"=\" ? \"\" : match[1] || \"\";\n\tconst version = match[2] ? parse(match[2], options) : null;\n\treturn {\n\t\toperator,\n\t\toptions,\n\t\tvalue: version ? `${operator}${formatComparableVersion(version)}` : \"\",\n\t\tversion\n\t};\n}\nfunction testParsedComparator(comparator, version) {\n\tif (!comparator.version) return true;\n\tconst comparison = compareParsed(version, comparator.version);\n\tswitch (comparator.operator) {\n\t\tcase \"\": return comparison === 0;\n\t\tcase \">\": return comparison > 0;\n\t\tcase \">=\": return comparison >= 0;\n\t\tcase \"<\": return comparison < 0;\n\t\tcase \"<=\": return comparison <= 0;\n\t}\n}\nfunction comparatorAllowsPrerelease(comparator, version) {\n\tconst allowed = comparator.version;\n\treturn allowed !== null && !!allowed.prerelease?.length && allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch;\n}\nfunction testComparatorSet(set, version, options) {\n\tif (set.some((comparator) => !testParsedComparator(comparator, version))) return false;\n\treturn !version.prerelease?.length || !!options.includePrerelease || set.some((comparator) => comparatorAllowsPrerelease(comparator, version));\n}\nfunction compare(left, right, options = {}) {\n\treturn compareParsed(parse(left, options), parse(right, options));\n}\nconst BUILD_STRIP = new RegExp(BUILD, \"g\");\nconst BUILD_SAFE = safeRegex(BUILD);\nconst STRICT_HYPHEN = safeRegex(String.raw`^\\s*(${XRANGE_PLAIN})\\s+-\\s+(${XRANGE_PLAIN})\\s*$`);\nconst LOOSE_HYPHEN = safeRegex(String.raw`^\\s*(${XRANGE_PLAIN_LOOSE})\\s+-\\s+(${XRANGE_PLAIN_LOOSE})\\s*$`);\nconst COMPARATOR_TRIM = safeRegex(String.raw`(\\s*)${GREATER_LESS_THAN}\\s*(${LOOSE_PLAIN}|${XRANGE_PLAIN})`, \"g\");\nconst TILDE_TRIM = safeRegex(String.raw`(\\s*)${LONE_TILDE}\\s+`, \"g\");\nconst CARET_TRIM = safeRegex(String.raw`(\\s*)${LONE_CARET}\\s+`, \"g\");\nconst STRICT_TILDE = safeRegex(`^${LONE_TILDE}${XRANGE_PLAIN}$`);\nconst LOOSE_TILDE = safeRegex(`^${LONE_TILDE}${XRANGE_PLAIN_LOOSE}$`);\nconst STRICT_CARET = safeRegex(`^${LONE_CARET}${XRANGE_PLAIN}$`);\nconst LOOSE_CARET = safeRegex(`^${LONE_CARET}${XRANGE_PLAIN_LOOSE}$`);\nconst STRICT_XRANGE = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*${XRANGE_PLAIN}$`);\nconst LOOSE_XRANGE = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*${XRANGE_PLAIN_LOOSE}$`);\nconst STAR = safeRegex(String.raw`(<|>)?=?\\s*\\*`);\nconst GTE_ZERO = /^\\s*>=\\s*0\\.0\\.0\\s*$/;\nconst GTE_ZERO_PRERELEASE = /^\\s*>=\\s*0\\.0\\.0-0\\s*$/;\nconst LOOSE_COMPARATOR = safeRegex(String.raw`^${GREATER_LESS_THAN}\\s*(${LOOSE_PLAIN})$|^$`);\nfunction isWildcard(value) {\n\treturn !value || String(value).toLowerCase() === \"x\" || String(value) === \"*\";\n}\nfunction hasInvalidWildcardOrder(major, minor, patch) {\n\treturn isWildcard(major) && !isWildcard(minor) || isWildcard(minor) && Boolean(patch) && !isWildcard(patch);\n}\nfunction replaceTilde(comparator, options) {\n\tconst expression = options.loose ? LOOSE_TILDE : STRICT_TILDE;\n\tconst lowerPrerelease = options.includePrerelease ? \"-0\" : \"\";\n\treturn comparator.replace(expression, (_match, major, minor, patch, prerelease) => {\n\t\tif (isWildcard(major)) return \"\";\n\t\tif (isWildcard(minor)) return `>=${major}.0.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (isWildcard(patch)) return `>=${major}.${minor}.0${lowerPrerelease} <${major}.${Number(minor) + 1}.0-0`;\n\t\treturn prerelease ? `>=${major}.${minor}.${patch}-${prerelease} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0`;\n\t});\n}\nfunction replaceTildes(comparator, options) {\n\treturn comparator.trim().split(/\\s+/).map((part) => replaceTilde(part, options)).join(\" \");\n}\nfunction replaceCaret(comparator, options) {\n\tconst expression = options.loose ? LOOSE_CARET : STRICT_CARET;\n\tconst lowerPrerelease = options.includePrerelease ? \"-0\" : \"\";\n\treturn comparator.replace(expression, (_match, major, minor, patch, prerelease) => {\n\t\tif (isWildcard(major)) return \"\";\n\t\tif (isWildcard(minor)) return `>=${major}.0.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (isWildcard(patch)) return major === \"0\" ? `>=${major}.${minor}.0${lowerPrerelease} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.0${lowerPrerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (prerelease) return major === \"0\" ? minor === \"0\" ? `>=${major}.${minor}.${patch}-${prerelease} <${major}.${minor}.${Number(patch) + 1}-0` : `>=${major}.${minor}.${patch}-${prerelease} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.${patch}-${prerelease} <${Number(major) + 1}.0.0-0`;\n\t\treturn major === \"0\" ? minor === \"0\" ? `>=${major}.${minor}.${patch} <${major}.${minor}.${Number(patch) + 1}-0` : `>=${major}.${minor}.${patch} <${major}.${Number(minor) + 1}.0-0` : `>=${major}.${minor}.${patch} <${Number(major) + 1}.0.0-0`;\n\t});\n}\nfunction replaceCarets(comparator, options) {\n\treturn comparator.trim().split(/\\s+/).map((part) => replaceCaret(part, options)).join(\" \");\n}\nfunction replaceXRange(comparator, options) {\n\tconst expression = options.loose ? LOOSE_XRANGE : STRICT_XRANGE;\n\treturn comparator.trim().replace(expression, (match, rawOperator, rawMajor, rawMinor, rawPatch) => {\n\t\tlet operator = rawOperator;\n\t\tlet major = rawMajor;\n\t\tlet minor = rawMinor;\n\t\tlet patch = rawPatch;\n\t\tif (hasInvalidWildcardOrder(String(major), minor === void 0 ? void 0 : String(minor), patch === void 0 ? void 0 : String(patch))) return comparator;\n\t\tconst wildcardMajor = isWildcard(major);\n\t\tconst wildcardMinor = wildcardMajor || isWildcard(minor);\n\t\tconst wildcardPatch = wildcardMinor || isWildcard(patch);\n\t\tif (operator === \"=\" && wildcardPatch) operator = \"\";\n\t\tif (wildcardMajor) return operator === \">\" || operator === \"<\" ? \"<0.0.0-0\" : \"*\";\n\t\tlet prerelease = options.includePrerelease ? \"-0\" : \"\";\n\t\tif (operator && wildcardPatch) {\n\t\t\tif (wildcardMinor) minor = 0;\n\t\t\tpatch = 0;\n\t\t\tif (operator === \">\") {\n\t\t\t\toperator = \">=\";\n\t\t\t\tif (wildcardMinor) {\n\t\t\t\t\tmajor = Number(major) + 1;\n\t\t\t\t\tminor = 0;\n\t\t\t\t} else minor = Number(minor) + 1;\n\t\t\t} else if (operator === \"<=\") {\n\t\t\t\toperator = \"<\";\n\t\t\t\tif (wildcardMinor) major = Number(major) + 1;\n\t\t\t\telse minor = Number(minor) + 1;\n\t\t\t}\n\t\t\tif (operator === \"<\") prerelease = \"-0\";\n\t\t\treturn `${operator}${major}.${minor}.${patch}${prerelease}`;\n\t\t}\n\t\tif (wildcardMinor) return `>=${major}.0.0${prerelease} <${Number(major) + 1}.0.0-0`;\n\t\tif (wildcardPatch) return `>=${major}.${minor}.0${prerelease} <${major}.${Number(minor) + 1}.0-0`;\n\t\treturn match;\n\t});\n}\nfunction replaceXRanges(comparator, options) {\n\treturn comparator.split(/\\s+/).map((part) => replaceXRange(part, options)).join(\" \");\n}\nfunction replaceHyphenRange(range, options) {\n\tconst expression = options.loose ? LOOSE_HYPHEN : STRICT_HYPHEN;\n\treturn range.replace(expression, (_match, rawFrom, fromMajor, fromMinor, fromPatch, fromPrerelease, _fromBuild, rawTo, toMajor, toMinor, toPatch, toPrerelease) => {\n\t\tlet from = rawFrom;\n\t\tlet to = rawTo;\n\t\tif (isWildcard(fromMajor)) from = \"\";\n\t\telse if (isWildcard(fromMinor)) from = `>=${fromMajor}.0.0${options.includePrerelease ? \"-0\" : \"\"}`;\n\t\telse if (isWildcard(fromPatch)) from = `>=${fromMajor}.${fromMinor}.0${options.includePrerelease ? \"-0\" : \"\"}`;\n\t\telse if (fromPrerelease) from = `>=${from}`;\n\t\telse from = `>=${from}${options.includePrerelease ? \"-0\" : \"\"}`;\n\t\tif (isWildcard(toMajor)) to = \"\";\n\t\telse if (isWildcard(toMinor)) to = `<${Number(toMajor) + 1}.0.0-0`;\n\t\telse if (isWildcard(toPatch)) to = `<${toMajor}.${Number(toMinor) + 1}.0-0`;\n\t\telse if (toPrerelease) to = `<=${toMajor}.${toMinor}.${toPatch}-${toPrerelease}`;\n\t\telse if (options.includePrerelease) to = `<${toMajor}.${toMinor}.${Number(toPatch) + 1}-0`;\n\t\telse to = `<=${to}`;\n\t\treturn `${from} ${to}`.trim();\n\t});\n}\nfunction expandComparator(comparator, options) {\n\treturn replaceXRanges(replaceTildes(replaceCarets(comparator.replace(BUILD_SAFE, \"\"), options), options), options).trim().replace(STAR, \"\");\n}\nfunction parseSimpleRange(input, options) {\n\tlet parts = replaceHyphenRange(input.replace(BUILD_STRIP, \"\"), options).replace(COMPARATOR_TRIM, \"$1$2$3\").replace(TILDE_TRIM, \"$1~\").replace(CARET_TRIM, \"$1^\").split(\" \").map((part) => expandComparator(part, options)).join(\" \").split(/\\s+/).map((part) => part.trim().replace(options.includePrerelease ? GTE_ZERO_PRERELEASE : GTE_ZERO, \"\"));\n\tif (options.loose) parts = parts.filter((part) => LOOSE_COMPARATOR.test(part));\n\tconst unique = /* @__PURE__ */ new Map();\n\tfor (const comparator of parts.map((part) => parseComparator(part, options))) {\n\t\tif (comparator.value === \"<0.0.0-0\") return [comparator];\n\t\tunique.set(comparator.value, comparator);\n\t}\n\tif (unique.size > 1) unique.delete(\"\");\n\treturn [...unique.values()];\n}\nfunction parseRange(range, options = {}) {\n\tif (typeof range !== \"string\") return range;\n\tconst parsedOptions = { ...options };\n\tconst raw = range.trim().replaceAll(/\\s+/g, \" \");\n\tlet sets = raw.split(\"||\").map((part) => parseSimpleRange(part.trim(), parsedOptions)).filter((set) => set.length);\n\tif (!sets.length) throw new TypeError(`Range contains no valid comparator sets: ${raw}`);\n\tif (sets.length > 1) {\n\t\tconst first = sets[0];\n\t\tsets = sets.filter((set) => set[0]?.value !== \"<0.0.0-0\");\n\t\tif (!sets.length) sets = [first];\n\t\telse if (sets.length > 1) {\n\t\t\tconst any = sets.find((set) => set.length === 1 && set[0]?.value === \"\");\n\t\t\tif (any) sets = [any];\n\t\t}\n\t}\n\treturn {\n\t\tnormalized: sets.map((set) => set.map((comparator) => comparator.value).join(\" \")).join(\"||\"),\n\t\toptions: parsedOptions,\n\t\traw,\n\t\tsets\n\t};\n}\nfunction tryParseRange(range, options = {}) {\n\ttry {\n\t\treturn parseRange(range, options);\n\t} catch {\n\t\treturn null;\n\t}\n}\nfunction testParsedRange(range, version) {\n\treturn range.sets.some((set) => testComparatorSet(set, version, range.options));\n}\nfunction testRangeVersion(range, version) {\n\tconst parsed = tryParse(version, range.options);\n\treturn parsed ? testParsedRange(range, parsed) : false;\n}\nfunction satisfies(version, range, options = {}) {\n\tconst parsed = tryParseRange(range, options);\n\treturn parsed ? testRangeVersion(parsed, version) : false;\n}\nfunction normalize(version, options = {}) {\n\tconst parsed = tryParse(version, options);\n\treturn parsed ? formatComparableVersion(parsed) : null;\n}\nfunction coerce(value, options = {}) {\n\tconst parsed = coerceParsedVersion(value, options);\n\treturn parsed ? formatFullVersion(parsed) : null;\n}\n//#endregion\nexport { coerce, compare, normalize, parseRange, satisfies };\n", "import { isUUIDv7 as isUUIDv7$1 } from \"./uuidv7.mjs\";\nimport { coerce, compare, normalize, parseRange, satisfies } from \"./node_modules/.pnpm/verkit@0.3.2/node_modules/verkit/dist/index.mjs\";\nimport { MAX_COMPILED_CATALOG_BYTES, MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE, MAX_TARGET_COHORTS_PER_RELEASE, NUMERIC_COHORT_SIZE, RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, getNumericCohortValue, getRolledOutNumericCohorts, isCustomCohort, normalizeCohortValue, normalizeRolloutCohortCount } from \"@hot-updater/core\";\n//#region src/releaseCatalogCompiler.ts\nvar ReleaseCatalogCompilationError = class extends Error {\n\tcode;\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.name = \"ReleaseCatalogCompilationError\";\n\t\tthis.code = code;\n\t}\n};\nfunction compareBounds(left, right) {\n\treturn compare(left, right);\n}\nfunction strongerLower(current, candidate) {\n\tif (current === null) return candidate;\n\tconst compared = compareBounds(candidate.version, current.version);\n\tif (compared > 0) return candidate;\n\tif (compared < 0) return current;\n\treturn {\n\t\tversion: current.version,\n\t\tinclusive: current.inclusive && candidate.inclusive\n\t};\n}\nfunction strongerUpper(current, candidate) {\n\tif (current === null) return candidate;\n\tconst compared = compareBounds(candidate.version, current.version);\n\tif (compared < 0) return candidate;\n\tif (compared > 0) return current;\n\treturn {\n\t\tversion: current.version,\n\t\tinclusive: current.inclusive && candidate.inclusive\n\t};\n}\nfunction comparatorVersion(comparator) {\n\tconst version = comparator.version && normalize(comparator.version);\n\tif (version === null) throw new ReleaseCatalogCompilationError(\"INVALID_TARGET_RANGE\", `Invalid comparator: ${comparator.value}`);\n\treturn version;\n}\nfunction comparatorSetToInterval(comparators) {\n\tlet lower = null;\n\tlet upper = null;\n\tfor (const comparator of comparators) {\n\t\tif (comparator.version === null) continue;\n\t\tconst version = comparatorVersion(comparator);\n\t\tif (comparator.operator === \"\") {\n\t\t\tlower = strongerLower(lower, {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion\n\t\t\t});\n\t\t\tupper = strongerUpper(upper, {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion\n\t\t\t});\n\t\t} else if (comparator.operator === \">\") lower = strongerLower(lower, {\n\t\t\tinclusive: false,\n\t\t\tversion\n\t\t});\n\t\telse if (comparator.operator === \">=\") lower = strongerLower(lower, {\n\t\t\tinclusive: true,\n\t\t\tversion\n\t\t});\n\t\telse if (comparator.operator === \"<\") upper = strongerUpper(upper, {\n\t\t\tinclusive: false,\n\t\t\tversion\n\t\t});\n\t\telse if (comparator.operator === \"<=\") upper = strongerUpper(upper, {\n\t\t\tinclusive: true,\n\t\t\tversion\n\t\t});\n\t}\n\tif (lower !== null && upper !== null) {\n\t\tconst compared = compareBounds(lower.version, upper.version);\n\t\tif (compared > 0 || compared === 0 && (!lower.inclusive || !upper.inclusive)) return null;\n\t}\n\treturn {\n\t\tlower,\n\t\tupper\n\t};\n}\nfunction rangeToIntervals(range) {\n\ttry {\n\t\treturn parseRange(range).sets.flatMap((comparators) => {\n\t\t\tconst interval = comparatorSetToInterval(comparators);\n\t\t\treturn interval === null ? [] : [interval];\n\t\t});\n\t} catch {\n\t\tthrow new ReleaseCatalogCompilationError(\"INVALID_TARGET_RANGE\", `Invalid target app-version range: ${range}`);\n\t}\n}\nfunction releaseDescriptor(release) {\n\treturn {\n\t\treleaseId: release.id,\n\t\tkind: release.kind,\n\t\tbundleId: release.bundleId,\n\t\trolloutCohortCount: release.rolloutCohortCount,\n\t\ttargetCohorts: [...new Set(release.targetCohorts)].sort(),\n\t\tshouldForceUpdate: release.shouldForceUpdate,\n\t\tmessage: release.message\n\t};\n}\nfunction validateReleases(releases, strategy) {\n\tconst enabled = releases.filter((release) => release.enabled).sort((left, right) => right.id.localeCompare(left.id));\n\tconst seenIds = /* @__PURE__ */ new Set();\n\tfor (const release of enabled) {\n\t\tif (!isUUIDv7$1(release.id)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} must use a canonical lowercase UUIDv7 ID`);\n\t\tif (seenIds.has(release.id)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Duplicate Release ID: ${release.id}`);\n\t\tseenIds.add(release.id);\n\t\tif (release.strategy !== strategy) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has the wrong strategy`);\n\t\tif (release.kind === \"BUNDLE\" && release.bundleId === null || release.kind === \"EMBEDDED\" && release.bundleId !== null) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has an invalid kind/Bundle combination`);\n\t\tif (release.targetCohorts.length > MAX_TARGET_COHORTS_PER_RELEASE) throw new ReleaseCatalogCompilationError(\"TARGET_COHORT_LIMIT\", `Release ${release.id} exceeds ${MAX_TARGET_COHORTS_PER_RELEASE} target cohorts`);\n\t\tif (strategy === \"APP_VERSION\" && (release.targetAppVersion === null || release.fingerprintHash !== null)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has an invalid app-version target`);\n\t\tif (strategy === \"FINGERPRINT\" && (release.fingerprintHash === null || release.targetAppVersion !== null)) throw new ReleaseCatalogCompilationError(\"INVALID_RELEASE\", `Release ${release.id} has an invalid fingerprint target`);\n\t}\n\treturn enabled.filter((release) => release.kind === \"BUNDLE\");\n}\nfunction collectFrontierReleaseIds(releases) {\n\tif (releases.every((release) => normalizeRolloutCohortCount(release.rolloutCohortCount) >= NUMERIC_COHORT_SIZE)) {\n\t\tconst retained = /* @__PURE__ */ new Set();\n\t\tconst bundleIds = /* @__PURE__ */ new Set();\n\t\tlet embedded = false;\n\t\tfor (const release of releases) {\n\t\t\tif (release.kind === \"EMBEDDED\") {\n\t\t\t\tif (!embedded) {\n\t\t\t\t\tembedded = true;\n\t\t\t\t\tretained.add(release.id);\n\t\t\t\t}\n\t\t\t} else if (release.bundleId !== null && bundleIds.size < 11 && !bundleIds.has(release.bundleId)) {\n\t\t\t\tbundleIds.add(release.bundleId);\n\t\t\t\tretained.add(release.id);\n\t\t\t}\n\t\t\tif (embedded && bundleIds.size >= 11) break;\n\t\t}\n\t\treturn retained;\n\t}\n\tconst explicitTargetCohorts = new Set(releases.flatMap((release) => release.targetCohorts));\n\tconst cohortStates = [\n\t\tvoid 0,\n\t\t...Array.from({ length: 1e3 }, (_, index) => String(index + 1)),\n\t\t...[...explicitTargetCohorts].sort(),\n\t\t\"release-catalog-non-targeted-cohort\"\n\t].map((cohort) => {\n\t\tconst normalized = cohort === void 0 ? void 0 : normalizeCohortValue(cohort);\n\t\treturn {\n\t\t\tisCustom: normalized !== void 0 && isCustomCohort(normalized),\n\t\t\tnormalized,\n\t\t\tnumeric: normalized === void 0 ? null : getNumericCohortValue(normalized),\n\t\t\tbundleIds: /* @__PURE__ */ new Set(),\n\t\t\tembedded: false,\n\t\t\tcomplete: false\n\t\t};\n\t});\n\tconst stateIndexesByCohort = /* @__PURE__ */ new Map();\n\tconst fullRolloutStateIndexes = [];\n\tfor (const [index, state] of cohortStates.entries()) {\n\t\tif (state.normalized !== void 0) {\n\t\t\tconst indexes = stateIndexesByCohort.get(state.normalized) ?? [];\n\t\t\tindexes.push(index);\n\t\t\tstateIndexesByCohort.set(state.normalized, indexes);\n\t\t}\n\t\tif (state.normalized === void 0 || state.numeric !== null || state.isCustom) fullRolloutStateIndexes.push(index);\n\t}\n\tconst retained = /* @__PURE__ */ new Set();\n\tlet incompleteStateCount = cohortStates.length;\n\tfor (const release of releases) {\n\t\tconst rolloutCohortCount = normalizeRolloutCohortCount(release.rolloutCohortCount);\n\t\tconst eligibleStateIndexes = /* @__PURE__ */ new Set();\n\t\tif (rolloutCohortCount >= NUMERIC_COHORT_SIZE) for (const index of fullRolloutStateIndexes) eligibleStateIndexes.add(index);\n\t\telse if (rolloutCohortCount > 0) for (const numericCohort of getRolledOutNumericCohorts(release.id, rolloutCohortCount)) for (const index of stateIndexesByCohort.get(String(numericCohort)) ?? []) eligibleStateIndexes.add(index);\n\t\tfor (const targetCohort of new Set(release.targetCohorts.map(normalizeCohortValue))) for (const index of stateIndexesByCohort.get(targetCohort) ?? []) eligibleStateIndexes.add(index);\n\t\tfor (const index of eligibleStateIndexes) {\n\t\t\tconst state = cohortStates[index];\n\t\t\tif (state.complete) continue;\n\t\t\tif (release.kind === \"EMBEDDED\") {\n\t\t\t\tif (!state.embedded) {\n\t\t\t\t\tstate.embedded = true;\n\t\t\t\t\tretained.add(release.id);\n\t\t\t\t}\n\t\t\t} else if (release.bundleId !== null && state.bundleIds.size < 11 && !state.bundleIds.has(release.bundleId)) {\n\t\t\t\tstate.bundleIds.add(release.bundleId);\n\t\t\t\tretained.add(release.id);\n\t\t\t}\n\t\t\tif (state.embedded && state.bundleIds.size >= 11) {\n\t\t\t\tstate.complete = true;\n\t\t\t\tincompleteStateCount -= 1;\n\t\t\t}\n\t\t}\n\t\tif (incompleteStateCount === 0) break;\n\t}\n\treturn retained;\n}\nfunction intervalContainsSegment(interval, segment) {\n\tif (interval.lower !== null) {\n\t\tif (segment.lower === null) return false;\n\t\tconst compared = compareBounds(segment.lower.version, interval.lower.version);\n\t\tif (compared < 0 || compared === 0 && segment.lower.inclusive && !interval.lower.inclusive) return false;\n\t}\n\tif (interval.upper !== null) {\n\t\tif (segment.upper === null) return false;\n\t\tconst compared = compareBounds(segment.upper.version, interval.upper.version);\n\t\tif (compared > 0 || compared === 0 && segment.upper.inclusive && !interval.upper.inclusive) return false;\n\t}\n\treturn true;\n}\nfunction atomicVersionSegments(intervals) {\n\tconst endpoints = [...new Set(intervals.flatMap((interval) => [interval.lower?.version, interval.upper?.version].filter((version) => version !== void 0)))].sort(compareBounds);\n\tif (endpoints.length === 0) return [{\n\t\tlower: null,\n\t\tupper: null\n\t}];\n\tconst segments = [{\n\t\tlower: null,\n\t\tupper: {\n\t\t\tinclusive: false,\n\t\t\tversion: endpoints[0]\n\t\t}\n\t}];\n\tfor (let index = 0; index < endpoints.length; index += 1) {\n\t\tconst endpoint = endpoints[index];\n\t\tsegments.push({\n\t\t\tlower: {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion: endpoint\n\t\t\t},\n\t\t\tupper: {\n\t\t\t\tinclusive: true,\n\t\t\t\tversion: endpoint\n\t\t\t}\n\t\t});\n\t\tconst next = endpoints[index + 1];\n\t\tif (next !== void 0) segments.push({\n\t\t\tlower: {\n\t\t\t\tinclusive: false,\n\t\t\t\tversion: endpoint\n\t\t\t},\n\t\t\tupper: {\n\t\t\t\tinclusive: false,\n\t\t\t\tversion: next\n\t\t\t}\n\t\t});\n\t}\n\tsegments.push({\n\t\tlower: {\n\t\t\tinclusive: false,\n\t\t\tversion: endpoints.at(-1)\n\t\t},\n\t\tupper: null\n\t});\n\treturn segments;\n}\nfunction sameIndexes(left, right) {\n\treturn left.length === right.length && left.every((value, index) => value === right[index]);\n}\nfunction mergeSegments(segments) {\n\tconst merged = [];\n\tfor (const segment of segments) {\n\t\tconst previous = merged.at(-1);\n\t\tif (previous && sameIndexes(previous.releaseIndexes, segment.releaseIndexes) && sameIndexes(previous.rollbackReleaseIndexes, segment.rollbackReleaseIndexes)) merged[merged.length - 1] = {\n\t\t\t...previous,\n\t\t\tupper: segment.upper\n\t\t};\n\t\telse merged.push(segment);\n\t}\n\treturn merged;\n}\nfunction compileAppVersion(releases) {\n\tconst ranges = /* @__PURE__ */ new Map();\n\tfor (const release of releases) ranges.set(release.id, rangeToIntervals(release.targetAppVersion));\n\tconst segmentReleases = atomicVersionSegments([...ranges.values()].flat()).map((segment) => {\n\t\tconst applicable = releases.filter((release) => ranges.get(release.id).some((range) => intervalContainsSegment(range, segment)));\n\t\treturn {\n\t\t\trollbackIds: new Set(applicable.map(({ id }) => id)),\n\t\t\tsegment,\n\t\t\tretainedIds: collectFrontierReleaseIds(applicable)\n\t\t};\n\t});\n\tconst retainedIds = new Set(segmentReleases.flatMap(({ retainedIds, rollbackIds }) => [...retainedIds, ...rollbackIds]));\n\tconst retainedReleases = releases.filter((release) => retainedIds.has(release.id));\n\tconst descriptorIndex = new Map(retainedReleases.map((release, index) => [release.id, index]));\n\treturn {\n\t\tenvelope: {\n\t\t\tfallbackPolicy: RELEASE_CATALOG_FALLBACK_POLICY,\n\t\t\tschemaVersion: RELEASE_CATALOG_SCHEMA_VERSION,\n\t\t\tsegments: mergeSegments(segmentReleases.map(({ segment, retainedIds, rollbackIds }) => ({\n\t\t\t\t...segment,\n\t\t\t\treleaseIndexes: releases.filter((release) => retainedIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0),\n\t\t\t\trollbackReleaseIndexes: releases.filter((release) => rollbackIds.has(release.id)).map((release) => descriptorIndex.get(release.id)).filter((index) => index !== void 0)\n\t\t\t})).filter((segment) => segment.releaseIndexes.length > 0 || segment.rollbackReleaseIndexes.length > 0)),\n\t\t\tstrategy: \"APP_VERSION\"\n\t\t},\n\t\tretainedReleases\n\t};\n}\nfunction compileFingerprint(releases) {\n\tconst retainedIds = collectFrontierReleaseIds(releases);\n\tconst retainedReleases = releases;\n\treturn {\n\t\tenvelope: {\n\t\t\tfallbackPolicy: RELEASE_CATALOG_FALLBACK_POLICY,\n\t\t\treleaseIndexes: retainedReleases.map((release, index) => retainedIds.has(release.id) ? index : -1).filter((index) => index >= 0),\n\t\t\trollbackReleaseIndexes: retainedReleases.map((_, index) => index),\n\t\t\tschemaVersion: RELEASE_CATALOG_SCHEMA_VERSION,\n\t\t\tstrategy: \"FINGERPRINT\"\n\t\t},\n\t\tretainedReleases\n\t};\n}\nasync function sha256(value) {\n\tconst digest = await globalThis.crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(value));\n\treturn `sha256:${[...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\nfunction canonicalStringify(value) {\n\tif (value === null || typeof value !== \"object\") return JSON.stringify(value);\n\tif (Array.isArray(value)) return `[${value.map(canonicalStringify).join(\",\")}]`;\n\tconst record = value;\n\treturn `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonicalStringify(record[key])}`).join(\",\")}}`;\n}\nasync function compileReleaseCatalog(input) {\n\tconst releases = validateReleases(input.releases, input.strategy);\n\tconst targetCohorts = new Set(releases.flatMap((release) => release.targetCohorts));\n\tif (targetCohorts.size > MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE) throw new ReleaseCatalogCompilationError(\"DISTINCT_TARGET_COHORT_LIMIT\", `Scope exceeds ${MAX_DISTINCT_TARGET_COHORTS_PER_SCOPE} distinct target cohorts`);\n\tconst { envelope, retainedReleases } = input.strategy === \"APP_VERSION\" ? compileAppVersion(releases) : compileFingerprint(releases);\n\tconst payload = {\n\t\t...envelope,\n\t\treleaseDescriptors: retainedReleases.map(releaseDescriptor)\n\t};\n\tconst canonicalPayload = canonicalStringify(payload);\n\tconst byteSize = new TextEncoder().encode(canonicalPayload).byteLength;\n\tif (byteSize > MAX_COMPILED_CATALOG_BYTES) throw new ReleaseCatalogCompilationError(\"CATALOG_OVERSIZE\", `Compiled Release catalog is ${byteSize} bytes; maximum is ${MAX_COMPILED_CATALOG_BYTES}`);\n\treturn {\n\t\tbyteSize,\n\t\tcanonicalPayload,\n\t\tcatalogHash: await sha256(canonicalPayload),\n\t\tdiagnostics: {\n\t\t\tbyteSize,\n\t\t\tdescriptorCount: payload.releaseDescriptors.length,\n\t\t\tdistinctTargetCohortCount: targetCohorts.size,\n\t\t\treleaseCount: releases.length,\n\t\t\tsegmentCount: payload.strategy === \"APP_VERSION\" ? payload.segments.length : 1\n\t\t},\n\t\tpayload\n\t};\n}\nfunction versionInSegment(version, segment) {\n\tif (segment.lower !== null) {\n\t\tconst compared = compareBounds(version, segment.lower.version);\n\t\tif (compared < 0 || compared === 0 && !segment.lower.inclusive) return false;\n\t}\n\tif (segment.upper !== null) {\n\t\tconst compared = compareBounds(version, segment.upper.version);\n\t\tif (compared > 0 || compared === 0 && !segment.upper.inclusive) return false;\n\t}\n\treturn true;\n}\nfunction canonicalizeAppVersion(appVersion) {\n\treturn coerce(appVersion);\n}\nfunction projectCompiledCatalog(catalog, appVersion) {\n\tlet indexes;\n\tif (catalog.strategy === \"FINGERPRINT\") indexes = catalog.releaseIndexes;\n\telse {\n\t\tconst canonicalVersion = appVersion && canonicalizeAppVersion(appVersion);\n\t\tif (!canonicalVersion) return [];\n\t\tindexes = catalog.segments.find((segment) => versionInSegment(canonicalVersion, segment))?.releaseIndexes ?? [];\n\t}\n\treturn indexes.map((index) => catalog.releaseDescriptors[index]);\n}\nfunction projectCompiledRollbackCatalog(catalog, appVersion) {\n\tlet indexes;\n\tif (catalog.strategy === \"FINGERPRINT\") indexes = catalog.rollbackReleaseIndexes ?? catalog.releaseIndexes;\n\telse {\n\t\tconst canonicalVersion = appVersion && canonicalizeAppVersion(appVersion);\n\t\tif (!canonicalVersion) return [];\n\t\tconst segment = catalog.segments.find((candidate) => versionInSegment(canonicalVersion, candidate));\n\t\tindexes = segment?.rollbackReleaseIndexes ?? segment?.releaseIndexes ?? [];\n\t}\n\treturn indexes.map((index) => catalog.releaseDescriptors[index]);\n}\nfunction referenceCompatibleReleases(releases, appVersion) {\n\tconst canonicalVersion = canonicalizeAppVersion(appVersion);\n\tif (!canonicalVersion) return [];\n\treturn releases.filter((release) => release.enabled && release.targetAppVersion !== null && satisfies(canonicalVersion, release.targetAppVersion));\n}\n//#endregion\nexport { ReleaseCatalogCompilationError, canonicalizeAppVersion, compileReleaseCatalog, projectCompiledCatalog, projectCompiledRollbackCatalog, referenceCompatibleReleases };\n", "import { createUUIDv7 } from \"./uuidv7.mjs\";\nimport { releaseRowToRelease } from \"./databaseRows.mjs\";\nimport { compileReleaseCatalog } from \"./releaseCatalogCompiler.mjs\";\nimport { createReleaseCatalogScopeKey, encodeChannelKey } from \"@hot-updater/core\";\n//#region src/releaseCatalogMutation.ts\nconst RELEASE_PAGE_SIZE = 1e3;\nconst DEFAULT_MAX_ATTEMPTS = 3;\nvar ReleaseCatalogMutationError = class extends Error {\n\tname = \"ReleaseCatalogMutationError\";\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t}\n};\nconst readScopeReleases = async (database, scopeKey) => {\n\tconst releases = [];\n\tlet afterReleaseId;\n\tfor (;;) {\n\t\tconst page = await database.models.releases.findManyByScope({\n\t\t\tscopeKey,\n\t\t\t...afterReleaseId === void 0 ? {} : { afterReleaseId },\n\t\t\tlimit: RELEASE_PAGE_SIZE,\n\t\t\tconsistency: \"strong\"\n\t\t});\n\t\tfor (const row of page) {\n\t\t\tif (row.scope_key !== scopeKey) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release \"${row.id}\" was returned for the wrong catalog scope`);\n\t\t\tif (releases.at(-1)?.id === row.id) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release \"${row.id}\" was returned more than once`);\n\t\t\treleases.push(row);\n\t\t}\n\t\tif (page.length < RELEASE_PAGE_SIZE) return releases;\n\t\tconst next = page.at(-1)?.id;\n\t\tif (next === void 0 || next === afterReleaseId) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Release scope paging did not advance\");\n\t\tafterReleaseId = next;\n\t}\n};\nconst validateScope = (scope) => {\n\tconst channelKey = encodeChannelKey(scope.channelName);\n\tif (scope.strategy === \"FINGERPRINT\" !== (scope.fingerprintHash !== null)) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Release catalog strategy and fingerprint are inconsistent\");\n\tconst expectedScopeKey = scope.strategy === \"APP_VERSION\" ? createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tplatform: scope.platform,\n\t\tstrategy: \"APP_VERSION\"\n\t}) : createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tfingerprintHash: scope.fingerprintHash ?? \"\",\n\t\tplatform: scope.platform,\n\t\tstrategy: \"FINGERPRINT\"\n\t});\n\tif (scope.scopeKey !== expectedScopeKey) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Release catalog scope metadata is inconsistent\");\n};\nconst applyMutation = (rows, scope, mutation) => {\n\tconst currentIndex = mutation.operation === \"insert\" ? -1 : rows.findIndex(({ id }) => id === mutation.id);\n\tconst current = currentIndex < 0 ? void 0 : rows[currentIndex];\n\tif (mutation.operation === \"insert\") {\n\t\tconst latestId = rows.at(-1)?.id;\n\t\tif (mutation.row.scope_key !== scope.scopeKey || mutation.row.channel_id !== scope.channelId || mutation.row.platform !== scope.platform || mutation.row.strategy !== scope.strategy || mutation.row.fingerprint_hash !== scope.fingerprintHash || mutation.row.revision !== 1) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", \"Inserted Release does not match its catalog scope\");\n\t\tif (latestId !== void 0 && mutation.row.id <= latestId) throw new ReleaseCatalogMutationError(\"NON_MONOTONIC_RELEASE_ID\", `Release \"${mutation.row.id}\" must sort after \"${latestId}\"`);\n\t\treturn {\n\t\t\tchange: {\n\t\t\t\tmodel: \"releases\",\n\t\t\t\toperation: \"insert\",\n\t\t\t\trow: mutation.row\n\t\t\t},\n\t\t\texpectedRevision: null,\n\t\t\tnextRows: [...rows, mutation.row],\n\t\t\trelease: mutation.row\n\t\t};\n\t}\n\tif (current === void 0) throw new ReleaseCatalogMutationError(\"RELEASE_NOT_FOUND\", `Release \"${mutation.id}\" was not found in scope \"${scope.scopeKey}\"`);\n\tif (mutation.operation === \"delete\") return {\n\t\tchange: {\n\t\t\tmodel: \"releases\",\n\t\t\toperation: \"delete\",\n\t\t\twhere: { id: mutation.id }\n\t\t},\n\t\texpectedRevision: current.revision,\n\t\tnextRows: rows.filter(({ id }) => id !== mutation.id),\n\t\trelease: null\n\t};\n\tconst release = {\n\t\t...current,\n\t\t...mutation.update,\n\t\trevision: current.revision + 1\n\t};\n\treturn {\n\t\tchange: {\n\t\t\tmodel: \"releases\",\n\t\t\toperation: \"update\",\n\t\t\twhere: { id: mutation.id },\n\t\t\tupdate: {\n\t\t\t\t...mutation.update,\n\t\t\t\trevision: release.revision\n\t\t\t}\n\t\t},\n\t\texpectedRevision: current.revision,\n\t\tnextRows: rows.map((row) => row.id === release.id ? release : row),\n\t\trelease\n\t};\n};\nconst catalogIdentity = (current, rows) => {\n\tif (current !== null) return current.catalog_id;\n\tif (rows.length > 0) throw new ReleaseCatalogMutationError(\"CATALOG_IDENTITY_MISSING\", \"Catalog history is missing. Restore its catalog row from backup before rebuilding or deploying.\");\n\treturn createUUIDv7();\n};\nconst readCatalogScope = async (database, scopeKey) => {\n\tlet currentCatalog = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\tlet rows = await readScopeReleases(database, scopeKey);\n\tif (currentCatalog === null && rows.length > 0) {\n\t\tcurrentCatalog = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\t\tif (currentCatalog !== null) rows = await readScopeReleases(database, scopeKey);\n\t}\n\treturn {\n\t\tcurrentCatalog,\n\t\trows\n\t};\n};\nconst prepareReleaseCatalogMutation = async (database, mutationInput) => {\n\tconst { rows, currentCatalog } = await readCatalogScope(database, mutationInput.scope.scopeKey);\n\tconst applied = applyMutation(rows, mutationInput.scope, mutationInput.mutation);\n\tconst compilation = await compileReleaseCatalog({\n\t\tstrategy: mutationInput.scope.strategy,\n\t\treleases: applied.nextRows.map(releaseRowToRelease)\n\t});\n\tconst generation = (currentCatalog?.generation ?? 0) + 1;\n\tif (!Number.isSafeInteger(generation)) throw new ReleaseCatalogMutationError(\"CATALOG_GENERATION_EXHAUSTED\", `Catalog \"${mutationInput.scope.scopeKey}\" exhausted its generation counter`);\n\treturn {\n\t\tapplied,\n\t\tcatalog: {\n\t\t\tscope_key: mutationInput.scope.scopeKey,\n\t\t\tcatalog_id: catalogIdentity(currentCatalog, rows),\n\t\t\tstrategy: mutationInput.scope.strategy,\n\t\t\tchannel_id: mutationInput.scope.channelId,\n\t\t\tchannel_key: encodeChannelKey(mutationInput.scope.channelName),\n\t\t\tplatform: mutationInput.scope.platform,\n\t\t\tfingerprint_hash: mutationInput.scope.fingerprintHash,\n\t\t\tgeneration,\n\t\t\tpayload: compilation.canonicalPayload,\n\t\t\tcatalog_hash: compilation.catalogHash,\n\t\t\tbyte_size: compilation.byteSize,\n\t\t\tis_tombstone: compilation.payload.releaseDescriptors.length === 0,\n\t\t\tupdated_at_ms: mutationInput.updatedAtMs ?? Date.now()\n\t\t},\n\t\tcompilation,\n\t\tcurrentCatalog,\n\t\tmutationInput\n\t};\n};\nasync function preflightReleaseCatalogMutation(input) {\n\tvalidateScope(input.scope);\n\tconst prepared = await prepareReleaseCatalogMutation(input.database, input);\n\treturn {\n\t\tcatalog: prepared.catalog,\n\t\tcurrentCatalog: prepared.currentCatalog,\n\t\tdiagnostics: prepared.compilation.diagnostics,\n\t\texpectedReleaseRevision: prepared.applied.expectedRevision,\n\t\trelease: prepared.applied.release\n\t};\n}\nasync function commitReleaseCatalogMutations(input) {\n\tif (input.mutations.length === 0) return [];\n\tconst scopeKeys = /* @__PURE__ */ new Set();\n\tfor (const mutation of input.mutations) {\n\t\tvalidateScope(mutation.scope);\n\t\tif (scopeKeys.has(mutation.scope.scopeKey)) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `A batch cannot mutate catalog scope \"${mutation.scope.scopeKey}\" more than once`);\n\t\tscopeKeys.add(mutation.scope.scopeKey);\n\t}\n\tconst maxAttempts = input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n\tif (!Number.isSafeInteger(maxAttempts) || maxAttempts <= 0) throw new RangeError(\"maxAttempts must be a positive safe integer\");\n\tfor (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n\t\tconst prepared = await Promise.all(input.mutations.map((mutationInput) => prepareReleaseCatalogMutation(input.database, mutationInput)));\n\t\tconst result = await input.database.commit({\n\t\t\texpectations: prepared.flatMap(({ applied, currentCatalog, mutationInput }) => [{\n\t\t\t\tmodel: \"releases\",\n\t\t\t\tid: mutationInput.mutation.operation === \"insert\" ? mutationInput.mutation.row.id : mutationInput.mutation.id,\n\t\t\t\trevision: applied.expectedRevision\n\t\t\t}, {\n\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\tscopeKey: mutationInput.scope.scopeKey,\n\t\t\t\tgeneration: currentCatalog?.generation ?? null\n\t\t\t}]),\n\t\t\tchanges: prepared.flatMap(({ applied, catalog, mutationInput }) => [\n\t\t\t\t...mutationInput.companionChanges ?? [],\n\t\t\t\tapplied.change,\n\t\t\t\t{\n\t\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\t\toperation: \"put\",\n\t\t\t\t\trow: catalog\n\t\t\t\t},\n\t\t\t\t...mutationInput.trailingChanges ?? []\n\t\t\t])\n\t\t});\n\t\tif (result.committed) return prepared.map(({ applied, catalog }) => ({\n\t\t\tattempts: attempt,\n\t\t\tcatalog,\n\t\t\trelease: applied.release\n\t\t}));\n\t\tif (result.conflict.reason !== \"version_conflict\") throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release mutation failed: ${result.conflict.reason}`);\n\t}\n\tthrow new ReleaseCatalogMutationError(\"VERSION_CONFLICT\", `Release catalog mutation batch conflicted ${maxAttempts} times`);\n}\nasync function commitReleaseCatalogMutation(input) {\n\tconst [result] = await commitReleaseCatalogMutations({\n\t\tdatabase: input.database,\n\t\tmaxAttempts: input.maxAttempts,\n\t\tmutations: [input]\n\t});\n\treturn result;\n}\nconst catalogProjectionMatches = (current, scope, compilation) => current.strategy === scope.strategy && current.channel_id === scope.channelId && current.channel_key === encodeChannelKey(scope.channelName) && current.platform === scope.platform && current.fingerprint_hash === scope.fingerprintHash && current.payload === compilation.canonicalPayload && current.catalog_hash === compilation.catalogHash && current.byte_size === compilation.byteSize && current.is_tombstone === (compilation.payload.releaseDescriptors.length === 0);\nasync function preflightReleaseCatalogRebuild(input) {\n\tvalidateScope(input.scope);\n\tconst { rows, currentCatalog } = await readCatalogScope(input.database, input.scope.scopeKey);\n\tconst compilation = await compileReleaseCatalog({\n\t\treleases: rows.map(releaseRowToRelease),\n\t\tstrategy: input.scope.strategy\n\t});\n\tconst changed = currentCatalog === null || !catalogProjectionMatches(currentCatalog, input.scope, compilation);\n\tconst generation = changed ? (currentCatalog?.generation ?? 0) + 1 : currentCatalog.generation;\n\tif (!Number.isSafeInteger(generation)) throw new ReleaseCatalogMutationError(\"CATALOG_GENERATION_EXHAUSTED\", `Catalog \"${input.scope.scopeKey}\" exhausted its generation counter`);\n\treturn {\n\t\tchanged,\n\t\tcurrentCatalog,\n\t\tdiagnostics: compilation.diagnostics,\n\t\tprojectedCatalog: {\n\t\t\tcatalog_id: catalogIdentity(currentCatalog, rows),\n\t\t\tbyte_size: compilation.byteSize,\n\t\t\tcatalog_hash: compilation.catalogHash,\n\t\t\tchannel_id: input.scope.channelId,\n\t\t\tchannel_key: encodeChannelKey(input.scope.channelName),\n\t\t\tfingerprint_hash: input.scope.fingerprintHash,\n\t\t\tgeneration,\n\t\t\tis_tombstone: compilation.payload.releaseDescriptors.length === 0,\n\t\t\tpayload: compilation.canonicalPayload,\n\t\t\tplatform: input.scope.platform,\n\t\t\tscope_key: input.scope.scopeKey,\n\t\t\tstrategy: input.scope.strategy,\n\t\t\tupdated_at_ms: changed || currentCatalog === null ? input.updatedAtMs ?? Date.now() : currentCatalog.updated_at_ms\n\t\t}\n\t};\n}\nasync function rebuildReleaseCatalog(input) {\n\tvalidateScope(input.scope);\n\tconst maxAttempts = input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;\n\tif (!Number.isSafeInteger(maxAttempts) || maxAttempts <= 0) throw new RangeError(\"maxAttempts must be a positive safe integer\");\n\tfor (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n\t\tconst { rows, currentCatalog } = await readCatalogScope(input.database, input.scope.scopeKey);\n\t\tconst compilation = await compileReleaseCatalog({\n\t\t\treleases: rows.map(releaseRowToRelease),\n\t\t\tstrategy: input.scope.strategy\n\t\t});\n\t\tif (currentCatalog !== null && catalogProjectionMatches(currentCatalog, input.scope, compilation)) return {\n\t\t\tattempts: attempt,\n\t\t\tcatalog: currentCatalog,\n\t\t\tchanged: false,\n\t\t\tdiagnostics: compilation.diagnostics\n\t\t};\n\t\tconst generation = (currentCatalog?.generation ?? 0) + 1;\n\t\tif (!Number.isSafeInteger(generation)) throw new ReleaseCatalogMutationError(\"CATALOG_GENERATION_EXHAUSTED\", `Catalog \"${input.scope.scopeKey}\" exhausted its generation counter`);\n\t\tconst catalog = {\n\t\t\tcatalog_id: catalogIdentity(currentCatalog, rows),\n\t\t\tbyte_size: compilation.byteSize,\n\t\t\tcatalog_hash: compilation.catalogHash,\n\t\t\tchannel_id: input.scope.channelId,\n\t\t\tchannel_key: encodeChannelKey(input.scope.channelName),\n\t\t\tfingerprint_hash: input.scope.fingerprintHash,\n\t\t\tgeneration,\n\t\t\tis_tombstone: compilation.payload.releaseDescriptors.length === 0,\n\t\t\tpayload: compilation.canonicalPayload,\n\t\t\tplatform: input.scope.platform,\n\t\t\tscope_key: input.scope.scopeKey,\n\t\t\tstrategy: input.scope.strategy,\n\t\t\tupdated_at_ms: input.updatedAtMs ?? Date.now()\n\t\t};\n\t\tconst result = await input.database.commit({\n\t\t\tchanges: [{\n\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\toperation: \"put\",\n\t\t\t\trow: catalog\n\t\t\t}],\n\t\t\texpectations: [{\n\t\t\t\tgeneration: currentCatalog?.generation ?? null,\n\t\t\t\tmodel: \"releaseCatalogs\",\n\t\t\t\tscopeKey: input.scope.scopeKey\n\t\t\t}]\n\t\t});\n\t\tif (result.committed) return {\n\t\t\tattempts: attempt,\n\t\t\tcatalog,\n\t\t\tchanged: true,\n\t\t\tdiagnostics: compilation.diagnostics\n\t\t};\n\t\tif (result.conflict.reason !== \"version_conflict\") throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release catalog rebuild failed: ${result.conflict.reason}`);\n\t}\n\tthrow new ReleaseCatalogMutationError(\"VERSION_CONFLICT\", `Release catalog rebuild conflicted ${maxAttempts} times`);\n}\n//#endregion\nexport { ReleaseCatalogMutationError, commitReleaseCatalogMutation, commitReleaseCatalogMutations, preflightReleaseCatalogMutation, preflightReleaseCatalogRebuild, rebuildReleaseCatalog };\n", "import { createUUIDv7After, isUUIDv7 as isUUIDv7$1 } from \"./uuidv7.mjs\";\nimport { ReleaseCatalogMutationError, commitReleaseCatalogMutation, commitReleaseCatalogMutations, preflightReleaseCatalogMutation } from \"./releaseCatalogMutation.mjs\";\nimport { createReleaseCatalogScopeKey, decodeChannelKey, encodeChannelKey } from \"@hot-updater/core\";\n//#region src/releaseManagement.ts\nconst RELEASE_PAGE_SIZE = 1e3;\nvar ReleaseManagementError = class extends Error {\n\tname = \"ReleaseManagementError\";\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t}\n};\nconst readReleaseScope = async (database, scopeKey) => {\n\tconst rows = [];\n\tlet afterReleaseId;\n\tfor (;;) {\n\t\tconst page = await database.models.releases.findManyByScope({\n\t\t\tscopeKey,\n\t\t\t...afterReleaseId === void 0 ? {} : { afterReleaseId },\n\t\t\tconsistency: \"strong\",\n\t\t\tlimit: RELEASE_PAGE_SIZE\n\t\t});\n\t\trows.push(...page);\n\t\tif (page.length < RELEASE_PAGE_SIZE) return rows;\n\t\tconst nextCursor = page.at(-1)?.id;\n\t\tif (nextCursor === void 0 || nextCursor === afterReleaseId) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release paging did not advance for scope \"${scopeKey}\".`);\n\t\tafterReleaseId = nextCursor;\n\t}\n};\nconst createForwardReleaseId = (rows, candidates, nowMs) => {\n\treturn createUUIDv7After([...candidates, rows.at(-1)?.id ?? null].filter((value) => value !== null && isUUIDv7$1(value)).sort().at(-1) ?? null, nowMs);\n};\nconst prepareTargetScope = async ({ channelName, database, fingerprintHash, platform, strategy }) => {\n\tconst channelKey = encodeChannelKey(channelName);\n\tconst channel = (await database.models.channels.list({})).channels.find(({ name }) => name === channelName) ?? (await database.models.channels.insert({\n\t\trow: {\n\t\t\tid: `channel:${channelKey}`,\n\t\t\tname: channelName\n\t\t},\n\t\tonConflict: \"returnExisting\"\n\t})).row;\n\tconst scopeKey = strategy === \"APP_VERSION\" ? createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tplatform,\n\t\tstrategy\n\t}) : createReleaseCatalogScopeKey({\n\t\tchannelKey,\n\t\tfingerprintHash: fingerprintHash ?? \"\",\n\t\tplatform,\n\t\tstrategy\n\t});\n\treturn { scope: {\n\t\tchannelId: channel.id,\n\t\tchannelName,\n\t\tfingerprintHash,\n\t\tplatform,\n\t\tscopeKey,\n\t\tstrategy\n\t} };\n};\nconst loadReleaseTarget = async (input) => {\n\tconst release = await input.database.models.releases.findById(input.releaseId);\n\tif (release === null) throw new ReleaseManagementError(\"RELEASE_NOT_FOUND\", `Release \"${input.releaseId}\" was not found.`);\n\tif (input.expectedRevision !== void 0 && input.expectedRevision !== release.revision) throw new ReleaseManagementError(\"VERSION_CONFLICT\", `Release \"${release.id}\" is revision ${release.revision}; expected ${input.expectedRevision}.`);\n\tconst catalog = await input.database.models.releaseCatalogs.findByScopeKey(release.scope_key);\n\tif (catalog === null) throw new ReleaseCatalogMutationError(\"INVALID_SCOPE\", `Release \"${release.id}\" has no catalog projection.`);\n\treturn {\n\t\trelease,\n\t\tscope: {\n\t\t\tchannelId: release.channel_id,\n\t\t\tchannelName: decodeChannelKey(catalog.channel_key),\n\t\t\tfingerprintHash: release.fingerprint_hash,\n\t\t\tplatform: release.platform,\n\t\t\tscopeKey: release.scope_key,\n\t\t\tstrategy: release.strategy\n\t\t}\n\t};\n};\nconst releasePolicyUpdate = (release, patch, updatedAtMs) => {\n\tif (patch.fingerprintHash !== void 0 && patch.fingerprintHash !== release.fingerprint_hash) throw new ReleaseManagementError(\"SCOPE_MOVE_UNSUPPORTED\", \"Changing a fingerprint target requires an atomic Release scope move.\");\n\treturn {\n\t\t...patch.enabled === void 0 ? {} : { enabled: patch.enabled },\n\t\t...patch.message === void 0 ? {} : { message: patch.message },\n\t\t...patch.rolloutCohortCount === void 0 ? {} : { rollout_cohort_count: patch.rolloutCohortCount },\n\t\t...patch.shouldForceUpdate === void 0 ? {} : { should_force_update: patch.shouldForceUpdate },\n\t\t...patch.targetAppVersion === void 0 ? {} : { target_app_version: patch.targetAppVersion },\n\t\t...patch.targetCohorts === void 0 ? {} : { target_cohorts: [...patch.targetCohorts] },\n\t\tupdated_at_ms: updatedAtMs\n\t};\n};\nasync function updateReleasePolicy(input) {\n\tconst { release, scope } = await loadReleaseTarget(input);\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\treturn commitReleaseCatalogMutation({\n\t\tdatabase: input.database,\n\t\tmutation: {\n\t\t\tid: release.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: releasePolicyUpdate(release, input.patch, updatedAtMs)\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs\n\t});\n}\nasync function preflightReleasePolicy(input) {\n\tconst { release, scope } = await loadReleaseTarget(input);\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\treturn preflightReleaseCatalogMutation({\n\t\tdatabase: input.database,\n\t\tmutation: {\n\t\t\tid: release.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: releasePolicyUpdate(release, input.patch, updatedAtMs)\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs\n\t});\n}\nasync function deleteRelease(input) {\n\tconst { release, scope } = await loadReleaseTarget(input);\n\tif (release.enabled) throw new ReleaseManagementError(\"ENABLED_RELEASE\", `Disable Release \"${release.id}\" before hard deletion.`);\n\treturn commitReleaseCatalogMutation({\n\t\tdatabase: input.database,\n\t\tmutation: {\n\t\t\tid: release.id,\n\t\t\toperation: \"delete\"\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs: input.updatedAtMs\n\t});\n}\nasync function promoteRelease(input) {\n\tconst { release: source, scope: sourceScope } = await loadReleaseTarget(input);\n\tif (source.kind !== \"BUNDLE\" || source.bundle_id === null) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Only a Bundle Release can be promoted.\");\n\tconst targetChannel = input.targetChannel.trim();\n\tif (targetChannel.length === 0) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Promotion requires a target channel.\");\n\tconst { scope: targetScope } = await prepareTargetScope({\n\t\tchannelName: targetChannel,\n\t\tdatabase: input.database,\n\t\tfingerprintHash: source.fingerprint_hash,\n\t\tplatform: source.platform,\n\t\tstrategy: source.strategy\n\t});\n\tif (targetScope.scopeKey === sourceScope.scopeKey) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Source and target Release scopes are the same.\");\n\tconst targetRows = await readReleaseScope(input.database, targetScope.scopeKey);\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\tconst targetMutation = {\n\t\tmutation: {\n\t\t\toperation: \"insert\",\n\t\t\trow: {\n\t\t\t\t...source,\n\t\t\t\tid: createForwardReleaseId(targetRows, [source.id, source.bundle_id], updatedAtMs),\n\t\t\t\trevision: 1,\n\t\t\t\tscope_key: targetScope.scopeKey,\n\t\t\t\tchannel_id: targetScope.channelId,\n\t\t\t\tenabled: true,\n\t\t\t\trollout_cohort_count: 1e3,\n\t\t\t\ttarget_cohorts: [],\n\t\t\t\toperation: \"PROMOTE\",\n\t\t\t\tsource_release_id: source.id,\n\t\t\t\tcreated_at_ms: updatedAtMs,\n\t\t\t\tupdated_at_ms: updatedAtMs\n\t\t\t}\n\t\t},\n\t\tscope: targetScope,\n\t\tupdatedAtMs\n\t};\n\tconst sourceMutation = input.action === \"move\" ? {\n\t\tmutation: {\n\t\t\tid: source.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: {\n\t\t\t\tenabled: false,\n\t\t\t\tupdated_at_ms: updatedAtMs\n\t\t\t}\n\t\t},\n\t\tscope: sourceScope,\n\t\tupdatedAtMs\n\t} : null;\n\tconst results = await commitReleaseCatalogMutations({\n\t\tdatabase: input.database,\n\t\tmutations: sourceMutation === null ? [targetMutation] : [sourceMutation, targetMutation]\n\t});\n\treturn {\n\t\tsource: sourceMutation === null ? null : results[0],\n\t\ttarget: results.at(-1)\n\t};\n}\nconst prepareRollbackRelease = async (input) => {\n\tconst { release: source, scope } = await loadReleaseTarget(input);\n\tif (!source.enabled) throw new ReleaseManagementError(\"TARGET_RELEASE_INVALID\", \"Rollback requires an enabled Release.\");\n\tconst updatedAtMs = input.updatedAtMs ?? Date.now();\n\treturn {\n\t\tmutation: {\n\t\t\tid: source.id,\n\t\t\toperation: \"update\",\n\t\t\tupdate: {\n\t\t\t\tenabled: false,\n\t\t\t\tupdated_at_ms: updatedAtMs\n\t\t\t}\n\t\t},\n\t\tscope,\n\t\tupdatedAtMs\n\t};\n};\nasync function rollbackReleases(input) {\n\tconst mutations = await Promise.all(input.rollbacks.map((rollback) => prepareRollbackRelease({\n\t\t...rollback,\n\t\tdatabase: input.database\n\t})));\n\treturn commitReleaseCatalogMutations({\n\t\tdatabase: input.database,\n\t\tmutations\n\t});\n}\nasync function rollbackRelease(input) {\n\tconst [result] = await rollbackReleases({\n\t\tdatabase: input.database,\n\t\trollbacks: [input]\n\t});\n\treturn result;\n}\n//#endregion\nexport { ReleaseManagementError, deleteRelease, preflightReleasePolicy, promoteRelease, rollbackRelease, rollbackReleases, updateReleasePolicy };\n", "//#region src/storageDownloadPath.ts\nconst encodeBase64Url = (value) => {\n\tlet binary = \"\";\n\tfor (const byte of new TextEncoder().encode(value)) binary += String.fromCharCode(byte);\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/, \"\");\n};\nconst decodeBase64Url = (value) => {\n\ttry {\n\t\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\t\tconst binary = atob(base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\"));\n\t\treturn new TextDecoder(void 0, { fatal: true }).decode(Uint8Array.from(binary, (character) => character.charCodeAt(0)));\n\t} catch {\n\t\treturn null;\n\t}\n};\nconst encodeBytes = (bytes) => {\n\tlet binary = \"\";\n\tfor (const byte of bytes) binary += String.fromCharCode(byte);\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/, \"\");\n};\nconst createStorageDownloadPath = (storageUri, signature) => `/storage/${encodeBase64Url(storageUri)}/${encodeURIComponent(signature)}`;\nconst parseStorageDownloadPath = (path) => {\n\tconst match = /^\\/storage\\/([^/]+)\\/([^/]+)$/.exec(path);\n\tif (!match) return null;\n\tconst storageUri = decodeBase64Url(match[1]);\n\tif (storageUri === null) return null;\n\ttry {\n\t\treturn {\n\t\t\tsignature: decodeURIComponent(match[2]),\n\t\t\tstorageUri\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n};\nconst createStorageDownloadUrl = (signingKey) => {\n\tconst key = crypto.subtle.importKey(\"raw\", new TextEncoder().encode(signingKey), {\n\t\thash: \"SHA-256\",\n\t\tname: \"HMAC\"\n\t}, false, [\"sign\"]);\n\treturn async ({ storageUri }) => {\n\t\treturn { url: createStorageDownloadPath(storageUri, encodeBytes(new Uint8Array(await crypto.subtle.sign(\"HMAC\", await key, new TextEncoder().encode(storageUri))))) };\n\t};\n};\n//#endregion\nexport { createStorageDownloadPath, createStorageDownloadUrl, parseStorageDownloadPath };\n", "import { requirePlatformParam, requireRouteParam } from \"./handlerParameters.mjs\";\nimport { canonicalizeAppVersion } from \"@hot-updater/plugin-core\";\n//#region src/handlerReleaseCatalogRoutes.ts\nconst CATALOG_CONTENT_TYPE = \"application/vnd.hot-updater.release-catalog+json; version=1\";\nconst ORIGIN_CACHE_TTL_MS = 5e3;\nconst ORIGIN_CACHE_MAX_ENTRIES = 128;\nconst privateNotFound = () => Response.json({ error: \"Not found\" }, {\n\tstatus: 404,\n\theaders: { \"cache-control\": \"private, no-store\" }\n});\nconst responseHash = async (body) => {\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(body));\n\treturn [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n};\nconst catalogResponse = async (catalog, request, clientAccessHeaderName) => {\n\tif (catalog === null) return privateNotFound();\n\tconst body = JSON.stringify(catalog);\n\tconst etag = `\"sha256:${await responseHash(body)}\"`;\n\tconst headers = {\n\t\t\"cache-control\": \"public, max-age=0, s-maxage=5\",\n\t\t\"content-type\": CATALOG_CONTENT_TYPE,\n\t\tetag,\n\t\tvary: `Accept-Encoding, ${clientAccessHeaderName}`\n\t};\n\tif (request.headers.get(\"if-none-match\") === etag) return new Response(null, {\n\t\theaders,\n\t\tstatus: 304\n\t});\n\treturn new Response(body, {\n\t\theaders,\n\t\tstatus: 200\n\t});\n};\nconst createReleaseCatalogRouteHandlers = (clientAccessHeaderName = \"x-api-key\") => {\n\tconst cache = /* @__PURE__ */ new Map();\n\tconst inFlight = /* @__PURE__ */ new Map();\n\tconst loadCatalog = async (key, load) => {\n\t\tconst cached = cache.get(key);\n\t\tif (cached !== void 0 && cached.expiresAt > Date.now()) {\n\t\t\tcache.delete(key);\n\t\t\tcache.set(key, cached);\n\t\t\treturn cached.catalog;\n\t\t}\n\t\tif (cached !== void 0) cache.delete(key);\n\t\tconst pending = inFlight.get(key);\n\t\tif (pending !== void 0) return pending;\n\t\tconst next = load().then((catalog) => {\n\t\t\tif (catalog !== null) {\n\t\t\t\tcache.set(key, {\n\t\t\t\t\tcatalog,\n\t\t\t\t\texpiresAt: Date.now() + ORIGIN_CACHE_TTL_MS\n\t\t\t\t});\n\t\t\t\twhile (cache.size > ORIGIN_CACHE_MAX_ENTRIES) {\n\t\t\t\t\tconst oldestKey = cache.keys().next().value;\n\t\t\t\t\tif (oldestKey === void 0) break;\n\t\t\t\t\tcache.delete(oldestKey);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn catalog;\n\t\t});\n\t\tinFlight.set(key, next);\n\t\ttry {\n\t\t\treturn await next;\n\t\t} finally {\n\t\t\tinFlight.delete(key);\n\t\t}\n\t};\n\treturn {\n\t\tappVersionReleaseCatalog: async (params, request, api) => {\n\t\t\tif (api.getReleaseCatalog === void 0) return privateNotFound();\n\t\t\tconst rawAppVersion = requireRouteParam(params, \"appVersion\");\n\t\t\tconst appVersion = canonicalizeAppVersion(rawAppVersion);\n\t\t\tif (appVersion === null || appVersion !== rawAppVersion) return Response.json({ error: \"Invalid app version\" }, {\n\t\t\t\tstatus: 400,\n\t\t\t\theaders: { \"cache-control\": \"private, no-store\" }\n\t\t\t});\n\t\t\tconst input = {\n\t\t\t\tappVersion,\n\t\t\t\tchannelKey: requireRouteParam(params, \"channelKey\"),\n\t\t\t\tplatform: requirePlatformParam(params),\n\t\t\t\tstrategy: \"APP_VERSION\"\n\t\t\t};\n\t\t\treturn catalogResponse(await loadCatalog(`app-version:${JSON.stringify(input)}`, () => api.getReleaseCatalog(input)), request, clientAccessHeaderName);\n\t\t},\n\t\tfingerprintReleaseCatalog: async (params, request, api) => {\n\t\t\tif (api.getReleaseCatalog === void 0) return privateNotFound();\n\t\t\tconst input = {\n\t\t\t\tchannelKey: requireRouteParam(params, \"channelKey\"),\n\t\t\t\tfingerprintHash: requireRouteParam(params, \"fingerprintHash\"),\n\t\t\t\tplatform: requirePlatformParam(params),\n\t\t\t\tstrategy: \"FINGERPRINT\"\n\t\t\t};\n\t\t\treturn catalogResponse(await loadCatalog(`fingerprint:${JSON.stringify(input)}`, () => api.getReleaseCatalog(input)), request, clientAccessHeaderName);\n\t\t},\n\t\tartifact: async (params, _request, api) => {\n\t\t\tif (api.getArtifactInfo === void 0) return privateNotFound();\n\t\t\tconst info = await api.getArtifactInfo(requireRouteParam(params, \"targetBundleId\"), requireRouteParam(params, \"currentBundleId\"));\n\t\t\tif (info === null) return privateNotFound();\n\t\t\treturn new Response(JSON.stringify(info), {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: {\n\t\t\t\t\t\"cache-control\": \"private, no-store\",\n\t\t\t\t\t\"content-type\": \"application/json\"\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n//#endregion\nexport { createReleaseCatalogRouteHandlers };\n", "import { HandlerBadRequestError } from \"./handlerErrors.mjs\";\nimport { decodeMaybe, requireRouteParam } from \"./handlerParameters.mjs\";\nimport { ReleaseCatalogMutationError, ReleaseManagementError } from \"@hot-updater/plugin-core\";\n//#region src/handlerReleaseManagementRoutes.ts\nconst unavailable = () => Response.json({ error: \"Not found\" }, { status: 404 });\nconst isRecord = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst parseRevision = (value) => {\n\tif (value === void 0 || value === null || value === \"\") return void 0;\n\tconst revision = typeof value === \"number\" ? value : Number(value);\n\tif (!Number.isSafeInteger(revision) || revision < 1) throw new HandlerBadRequestError(\"Invalid expected Release revision\");\n\treturn revision;\n};\nconst parsePolicyInput = async (request) => {\n\tconst body = await request.json();\n\tif (!isRecord(body) || !isRecord(body.patch)) throw new HandlerBadRequestError(\"Invalid Release policy mutation\");\n\treturn {\n\t\texpectedRevision: parseRevision(body.expectedRevision),\n\t\tpatch: body.patch\n\t};\n};\nconst mutationResponse = async (operation) => {\n\ttry {\n\t\treturn Response.json({ data: await operation() });\n\t} catch (error) {\n\t\tif (error instanceof ReleaseManagementError || error instanceof ReleaseCatalogMutationError) {\n\t\t\tconst status = error.code === \"RELEASE_NOT_FOUND\" ? 404 : error.code === \"VERSION_CONFLICT\" ? 409 : 400;\n\t\t\treturn Response.json({\n\t\t\t\tcode: error.code,\n\t\t\t\terror: error.message\n\t\t\t}, { status });\n\t\t}\n\t\tthrow error;\n\t}\n};\nconst createReleaseManagementRouteHandlers = () => ({\n\tgetRelease: async (params, _request, api) => {\n\t\tif (api.getReleaseById === void 0) return unavailable();\n\t\tconst row = await api.getReleaseById(requireRouteParam(params, \"id\"));\n\t\treturn row === null ? unavailable() : Response.json({ data: row }, { status: 200 });\n\t},\n\tgetReleases: async (_params, request, api) => {\n\t\tconst url = new URL(request.url);\n\t\tconst scopeKey = url.searchParams.get(\"scopeKey\");\n\t\tconst limit = Number(url.searchParams.get(\"limit\") ?? \"100\");\n\t\tif (!Number.isSafeInteger(limit) || limit <= 0 || limit > 1e3) throw new HandlerBadRequestError(\"Invalid Release scope query\");\n\t\tif (scopeKey !== null) {\n\t\t\tif (scopeKey.length === 0 || api.getReleasesByScope === void 0) throw new HandlerBadRequestError(\"Invalid Release scope query\");\n\t\t\tconst afterReleaseId = url.searchParams.get(\"afterReleaseId\") ?? void 0;\n\t\t\treturn Response.json({ data: await api.getReleasesByScope({\n\t\t\t\t...afterReleaseId === void 0 ? {} : { afterReleaseId },\n\t\t\t\tlimit,\n\t\t\t\tscopeKey\n\t\t\t}) });\n\t\t}\n\t\tif (api.getReleases === void 0) return unavailable();\n\t\tconst enabledValue = url.searchParams.get(\"enabled\");\n\t\tconst enabled = enabledValue === null ? void 0 : enabledValue === \"true\" ? true : enabledValue === \"false\" ? false : null;\n\t\tconst platformValue = url.searchParams.get(\"platform\");\n\t\tconst platform = platformValue === null ? void 0 : platformValue === \"ios\" || platformValue === \"android\" ? platformValue : null;\n\t\tif (enabled === null || platform === null) throw new HandlerBadRequestError(\"Invalid Release list filter\");\n\t\treturn Response.json({ data: await api.getReleases({\n\t\t\tafterReleaseId: url.searchParams.get(\"afterReleaseId\") ?? void 0,\n\t\t\tbeforeReleaseId: url.searchParams.get(\"beforeReleaseId\") ?? void 0,\n\t\t\tbundleId: url.searchParams.get(\"bundleId\") ?? void 0,\n\t\t\tchannelId: url.searchParams.get(\"channelId\") ?? void 0,\n\t\t\tenabled,\n\t\t\tlimit,\n\t\t\tplatform,\n\t\t\ttargetAppVersion: url.searchParams.get(\"targetAppVersion\") ?? void 0\n\t\t}) });\n\t},\n\tgetReleaseCatalogRow: async (params, _request, api) => {\n\t\tif (api.getReleaseCatalogByScopeKey === void 0) return unavailable();\n\t\tconst row = await api.getReleaseCatalogByScopeKey(decodeMaybe(requireRouteParam(params, \"scopeKey\")) ?? \"\");\n\t\treturn row === null ? unavailable() : Response.json({ data: row }, { status: 200 });\n\t},\n\tgetReleaseCatalogs: async (_params, request, api) => {\n\t\tif (api.getReleaseCatalogs === void 0) return unavailable();\n\t\tconst url = new URL(request.url);\n\t\tconst limit = Number(url.searchParams.get(\"limit\") ?? \"100\");\n\t\tif (!Number.isSafeInteger(limit) || limit <= 0 || limit > 1e3) throw new HandlerBadRequestError(\"Invalid Release catalog list query\");\n\t\treturn Response.json({ data: await api.getReleaseCatalogs({\n\t\t\tafterScopeKey: url.searchParams.get(\"afterScopeKey\") ?? void 0,\n\t\t\tlimit\n\t\t}) });\n\t},\n\tupdateRelease: async (params, request, api) => {\n\t\tif (api.updateReleasePolicy === void 0) return unavailable();\n\t\tconst input = await parsePolicyInput(request);\n\t\treturn mutationResponse(() => api.updateReleasePolicy({\n\t\t\t...input,\n\t\t\treleaseId: requireRouteParam(params, \"id\")\n\t\t}));\n\t},\n\tpreflightRelease: async (params, request, api) => {\n\t\tif (api.preflightReleasePolicy === void 0) return unavailable();\n\t\tconst input = await parsePolicyInput(request);\n\t\treturn mutationResponse(() => api.preflightReleasePolicy({\n\t\t\t...input,\n\t\t\treleaseId: requireRouteParam(params, \"id\")\n\t\t}));\n\t},\n\tdeleteRelease: async (params, request, api) => {\n\t\tif (api.deleteRelease === void 0) return unavailable();\n\t\tconst releaseId = requireRouteParam(params, \"id\");\n\t\tconst url = new URL(request.url);\n\t\tif (url.searchParams.get(\"confirm\") !== releaseId) throw new HandlerBadRequestError(\"Release hard deletion requires confirm=<release-id>\");\n\t\treturn mutationResponse(() => api.deleteRelease({\n\t\t\texpectedRevision: parseRevision(url.searchParams.get(\"expectedRevision\")),\n\t\t\treleaseId\n\t\t}));\n\t},\n\trebuildReleaseCatalog: async (params, _request, api) => {\n\t\tif (api.rebuildReleaseCatalog === void 0) return unavailable();\n\t\treturn mutationResponse(() => api.rebuildReleaseCatalog(decodeMaybe(requireRouteParam(params, \"scopeKey\")) ?? \"\"));\n\t},\n\tcommitDatabase: async (_params, request, api) => {\n\t\tif (api.commitDatabase === void 0) return unavailable();\n\t\tconst input = await request.json();\n\t\treturn Response.json({ data: await api.commitDatabase(input) });\n\t}\n});\n//#endregion\nexport { createReleaseManagementRouteHandlers };\n", "//#region src/insights/errors.ts\nvar InsightsScanLimitExceededError = class extends Error {\n\tconstructor(limit) {\n\t\tsuper(`Insights event scan exceeded ${limit} rows.`);\n\t\tthis.limit = limit;\n\t\tthis.name = \"InsightsScanLimitExceededError\";\n\t}\n};\nvar InsightsBadRequestError = class extends Error {\n\tname = \"InsightsBadRequestError\";\n};\nvar InsightsPayloadTooLargeError = class extends Error {\n\tname = \"InsightsPayloadTooLargeError\";\n\tconstructor(maximumBytes) {\n\t\tsuper(`Event payload exceeds ${maximumBytes} bytes`);\n\t\tthis.maximumBytes = maximumBytes;\n\t}\n};\n//#endregion\nexport { InsightsBadRequestError, InsightsPayloadTooLargeError, InsightsScanLimitExceededError };\n", "import { InsightsBadRequestError, InsightsPayloadTooLargeError } from \"./errors.mjs\";\n//#region src/insights/eventInput.ts\nconst MAX_EVENT_STRING_LENGTH = 1024;\nconst EVENT_BODY_MAX_BYTES = 16 * 1024;\nconst eventKeys = new Set([\n\t\"type\",\n\t\"installId\",\n\t\"toBundleId\",\n\t\"userId\",\n\t\"username\",\n\t\"platform\",\n\t\"appVersion\",\n\t\"channel\",\n\t\"cohort\",\n\t\"fingerprintHash\",\n\t\"fromBundleId\",\n\t\"fromReleaseId\",\n\t\"toReleaseId\",\n\t\"updateStrategy\",\n\t\"sdkVersion\"\n]);\nfunction isRecord(value) {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction requireStringField(payload, key) {\n\tconst value = payload[key];\n\tif (typeof value !== \"string\" || value.length === 0 || value.length > MAX_EVENT_STRING_LENGTH) throw new InsightsBadRequestError(`Invalid event field: ${key}`);\n\treturn value;\n}\nfunction requireNullableStringField(payload, key) {\n\tif (payload[key] === null) return null;\n\treturn requireStringField(payload, key);\n}\nasync function readBoundedText(request) {\n\tconst contentLength = request.headers.get(\"content-length\");\n\tconst declaredByteLength = Number(contentLength);\n\tif (contentLength !== null && Number.isSafeInteger(declaredByteLength) && declaredByteLength > 16384) throw new InsightsPayloadTooLargeError(EVENT_BODY_MAX_BYTES);\n\tif (request.body === null) return \"\";\n\tconst reader = request.body.getReader();\n\tconst decoder = new TextDecoder();\n\tlet byteLength = 0;\n\tlet text = \"\";\n\twhile (true) {\n\t\tconst result = await reader.read();\n\t\tif (result.done) break;\n\t\tbyteLength += result.value.byteLength;\n\t\tif (byteLength > 16384) {\n\t\t\tawait reader.cancel();\n\t\t\tthrow new InsightsPayloadTooLargeError(EVENT_BODY_MAX_BYTES);\n\t\t}\n\t\ttext += decoder.decode(result.value, { stream: true });\n\t}\n\treturn text + decoder.decode();\n}\nasync function parseJson(request) {\n\tconst text = await readBoundedText(request);\n\ttry {\n\t\treturn JSON.parse(text);\n\t} catch (error) {\n\t\tif (error instanceof SyntaxError) throw new InsightsBadRequestError(\"Invalid event payload\");\n\t\tthrow error;\n\t}\n}\nfunction requireEvent(payload) {\n\tif (!isRecord(payload) || Object.keys(payload).some((key) => !eventKeys.has(key))) throw new InsightsBadRequestError(\"Invalid event payload\");\n\tconst platform = requireStringField(payload, \"platform\");\n\tif (platform !== \"ios\" && platform !== \"android\") throw new InsightsBadRequestError(\"Invalid event field: platform\");\n\tconst base = {\n\t\tinstallId: requireStringField(payload, \"installId\"),\n\t\ttoBundleId: requireStringField(payload, \"toBundleId\"),\n\t\t...payload.userId === void 0 ? {} : { userId: requireStringField(payload, \"userId\") },\n\t\t...payload.username === void 0 ? {} : { username: requireStringField(payload, \"username\") },\n\t\tplatform,\n\t\tappVersion: requireStringField(payload, \"appVersion\"),\n\t\tchannel: requireStringField(payload, \"channel\"),\n\t\tcohort: requireStringField(payload, \"cohort\"),\n\t\tfingerprintHash: requireNullableStringField(payload, \"fingerprintHash\"),\n\t\tsdkVersion: payload.sdkVersion === void 0 ? null : requireNullableStringField(payload, \"sdkVersion\"),\n\t\tfromReleaseId: requireNullableStringField(payload, \"fromReleaseId\"),\n\t\ttoReleaseId: requireNullableStringField(payload, \"toReleaseId\")\n\t};\n\tconst type = requireStringField(payload, \"type\");\n\tswitch (type) {\n\t\tcase \"UPDATE_APPLIED\":\n\t\tcase \"RECOVERED\":\n\t\tcase \"RELEASE_ADOPTED\": {\n\t\t\tconst updateStrategy = requireStringField(payload, \"updateStrategy\");\n\t\t\tif (updateStrategy !== \"fingerprint\" && updateStrategy !== \"appVersion\") throw new InsightsBadRequestError(\"Invalid event field: updateStrategy\");\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype,\n\t\t\t\tfromBundleId: requireStringField(payload, \"fromBundleId\"),\n\t\t\t\tupdateStrategy\n\t\t\t};\n\t\t}\n\t\tcase \"UNCHANGED\":\n\t\t\tif (payload.fromBundleId !== null || payload.updateStrategy !== null) throw new InsightsBadRequestError(\"Invalid unchanged event shape\");\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\ttype,\n\t\t\t\tfromBundleId: null,\n\t\t\t\tupdateStrategy: null\n\t\t\t};\n\t\tdefault: throw new InsightsBadRequestError(\"Invalid event field: type\");\n\t}\n}\nasync function parseBundleEventRequest(request) {\n\treturn requireEvent(await parseJson(request));\n}\n//#endregion\nexport { parseBundleEventRequest };\n", "import { InsightsBadRequestError } from \"./errors.mjs\";\n//#region src/insights/queryInput.ts\nconst EVENT_LIST_BOUNDS = {\n\tdefaultValue: 50,\n\tmaximum: 100,\n\tminimum: 1\n};\nconst EVENT_LIST_OFFSET_BOUNDS = {\n\tdefaultValue: 0,\n\tminimum: 0\n};\nconst MAX_USER_ID_LENGTH = 1024;\nfunction parseInteger(url, key, bounds) {\n\tconst value = url.searchParams.get(key);\n\tif (value === null) return bounds.defaultValue;\n\tconst parsed = Number(value);\n\tif (!Number.isSafeInteger(parsed) || parsed < bounds.minimum || bounds.maximum !== void 0 && parsed > bounds.maximum) throw new InsightsBadRequestError(`Invalid '${key}' query parameter.`);\n\treturn parsed;\n}\nconst parsePagination = (request) => {\n\tconst url = new URL(request.url);\n\treturn {\n\t\tlimit: parseInteger(url, \"limit\", EVENT_LIST_BOUNDS),\n\t\toffset: parseInteger(url, \"offset\", EVENT_LIST_OFFSET_BOUNDS)\n\t};\n};\nconst parseInsightsQuery = (request) => {\n\tconst window = new URL(request.url).searchParams.get(\"window\") ?? \"24h\";\n\tif (window !== \"24h\" && window !== \"7d\" && window !== \"30d\" && window !== \"all\") throw new InsightsBadRequestError(\"Invalid 'window' query parameter.\");\n\treturn {\n\t\t...parsePagination(request),\n\t\twindow\n\t};\n};\nconst parseActiveInstallationInput = (request) => {\n\tconst url = new URL(request.url);\n\tconst windows = url.searchParams.getAll(\"window\");\n\tif (windows.length > 1) throw new InsightsBadRequestError(\"Duplicate 'window' query parameter.\");\n\tconst window = windows[0] ?? \"30d\";\n\tif (window !== \"24h\" && window !== \"7d\" && window !== \"30d\") throw new InsightsBadRequestError(\"Invalid 'window' query parameter.\");\n\tconst userIds = url.searchParams.getAll(\"userId\");\n\tif (userIds.length > 1) throw new InsightsBadRequestError(\"Duplicate 'userId' query parameter.\");\n\tconst userId = userIds[0];\n\tif (userId !== void 0 && (userId.length === 0 || userId.length > MAX_USER_ID_LENGTH)) throw new InsightsBadRequestError(\"Invalid 'userId' query parameter.\");\n\treturn userId === void 0 ? { window } : {\n\t\twindow,\n\t\tuserId\n\t};\n};\nconst parseSearchInput = (request) => ({\n\t...parsePagination(request),\n\tquery: new URL(request.url).searchParams.get(\"query\")?.trim() ?? \"\"\n});\n//#endregion\nexport { parseActiveInstallationInput, parseInsightsQuery, parsePagination, parseSearchInput };\n", "import { InsightsBadRequestError, InsightsPayloadTooLargeError, InsightsScanLimitExceededError } from \"./errors.mjs\";\nimport { parseBundleEventRequest } from \"./eventInput.mjs\";\nimport { parseActiveInstallationInput, parseInsightsQuery, parsePagination, parseSearchInput } from \"./queryInput.mjs\";\n//#region src/insights/routes.ts\nconst json = (body, status) => Response.json(body, {\n\theaders: { \"cache-control\": \"private, no-store\" },\n\tstatus\n});\nconst requireParam = (params, key) => {\n\tconst value = params[key];\n\tif (value === void 0 || value.length === 0) throw new InsightsBadRequestError(`Missing route parameter: ${key}`);\n\treturn value;\n};\nconst run = async (operation) => {\n\ttry {\n\t\treturn await operation();\n\t} catch (error) {\n\t\tif (error instanceof InsightsBadRequestError) return json({ error: error.message }, 400);\n\t\tif (error instanceof InsightsPayloadTooLargeError) return json({ error: error.message }, 413);\n\t\tif (error instanceof InsightsScanLimitExceededError) return json({ error: {\n\t\t\tcode: \"INSIGHTS_SCAN_LIMIT_EXCEEDED\",\n\t\t\tlimit: error.limit\n\t\t} }, 503);\n\t\tthrow error;\n\t}\n};\nconst query = (operation) => run(async () => json(await operation(), 200));\nconst createInsightsRouteHandlers = (provider) => ({\n\tappendBundleEvent: async (_params, request) => run(async () => {\n\t\tawait provider.appendBundleEvent(await parseBundleEventRequest(request));\n\t\treturn new Response(null, { status: 204 });\n\t}),\n\tgetBundleEventSummary: (params) => query(() => provider.getBundleEventSummary(requireParam(params, \"id\"))),\n\tgetBundleEventInsights: (params, request) => query(() => {\n\t\tconst input = parseInsightsQuery(request);\n\t\treturn provider.getBundleEventInsights(requireParam(params, \"id\"), input.window, input.limit, input.offset);\n\t}),\n\tgetBundleEventOverview: () => query(() => provider.getBundleEventOverview()),\n\tgetActiveInstallationOverview: (_params, request) => query(() => provider.getActiveInstallationOverview(parseActiveInstallationInput(request))),\n\tsearchInstallations: (_params, request) => query(() => {\n\t\tconst input = parseSearchInput(request);\n\t\treturn provider.searchInstallations(input.query, input.limit, input.offset);\n\t}),\n\tgetInstallationHistory: (params, request) => query(() => {\n\t\tconst input = parsePagination(request);\n\t\treturn provider.getInstallationHistory(requireParam(params, \"installId\"), input.limit, input.offset);\n\t})\n});\nconst registerInsightsClientRoutes = (add) => {\n\tadd(\"POST\", \"/events\", \"appendBundleEvent\");\n};\nconst registerInsightsAdminRoutes = (add) => {\n\tadd(\"GET\", \"/bundles/:id/events/summary\", \"getBundleEventSummary\");\n\tadd(\"GET\", \"/bundles/:id/events/insights\", \"getBundleEventInsights\");\n\tadd(\"GET\", \"/installations/overview\", \"getBundleEventOverview\");\n\tadd(\"GET\", \"/installations/active\", \"getActiveInstallationOverview\");\n\tadd(\"GET\", \"/installations\", \"searchInstallations\");\n\tadd(\"GET\", \"/installations/:installId/events\", \"getInstallationHistory\");\n};\n//#endregion\nexport { createInsightsRouteHandlers, registerInsightsAdminRoutes, registerInsightsClientRoutes };\n", "//#region src/internalRouter.ts\nconst normalizePath = (path) => {\n\tif (!path) return \"/\";\n\tif (path === \"/\") return path;\n\tconst withLeadingSlash = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn withLeadingSlash.endsWith(\"/\") ? withLeadingSlash.slice(0, -1) : withLeadingSlash;\n};\nconst toSegments = (path) => {\n\tconst normalized = normalizePath(path);\n\treturn normalized === \"/\" ? [] : normalized.slice(1).split(\"/\");\n};\nfunction createRouter() {\n\treturn { routes: [] };\n}\nfunction addRoute(router, method, path, data) {\n\tconst segments = toSegments(path);\n\tconst paramNames = segments.filter((segment) => segment.startsWith(\":\")).map((segment) => segment.slice(1));\n\trouter.routes.push({\n\t\tdata,\n\t\tmethod: method.toUpperCase(),\n\t\tparamNames,\n\t\tsegments\n\t});\n}\nfunction findRoute(router, method, path) {\n\tconst normalizedMethod = method.toUpperCase();\n\tconst pathSegments = toSegments(path);\n\tfor (const route of router.routes) {\n\t\tif (route.method !== normalizedMethod) continue;\n\t\tif (route.segments.length !== pathSegments.length) continue;\n\t\tconst params = {};\n\t\tlet matched = true;\n\t\tfor (let index = 0; index < route.segments.length; index += 1) {\n\t\t\tconst routeSegment = route.segments[index];\n\t\t\tconst pathSegment = pathSegments[index];\n\t\t\tif (routeSegment.startsWith(\":\")) {\n\t\t\t\tparams[routeSegment.slice(1)] = pathSegment;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (routeSegment !== pathSegment) {\n\t\t\t\tmatched = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matched) return {\n\t\t\tdata: route.data,\n\t\t\tparams\n\t\t};\n\t}\n}\n//#endregion\nexport { addRoute, createRouter, findRoute };\n", "import { HandlerBadRequestError } from \"./handlerErrors.mjs\";\nimport { createBundleRouteHandlers } from \"./handlerBundleRoutes.mjs\";\nimport { createReleaseCatalogRouteHandlers } from \"./handlerReleaseCatalogRoutes.mjs\";\nimport { createReleaseManagementRouteHandlers } from \"./handlerReleaseManagementRoutes.mjs\";\nimport { createVersionRouteHandlers } from \"./handlerVersionRoutes.mjs\";\nimport { createInsightsRouteHandlers, registerInsightsAdminRoutes, registerInsightsClientRoutes } from \"./insights/routes.mjs\";\nimport { addRoute, createRouter, findRoute } from \"./internalRouter.mjs\";\n//#region src/handler.ts\nconst withPrivateNoStore = (response) => {\n\tconst headers = new Headers(response.headers);\n\theaders.set(\"cache-control\", \"private, no-store\");\n\treturn new Response(response.body, {\n\t\theaders,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText\n\t});\n};\nconst errorResponse = (error, status) => Response.json({ error }, {\n\theaders: { \"cache-control\": \"private, no-store\" },\n\tstatus\n});\nconst requiresApiKey = (handlerName) => handlerName === \"appVersionReleaseCatalog\" || handlerName === \"fingerprintReleaseCatalog\" || handlerName === \"artifact\" || handlerName === \"appendBundleEvent\";\nconst createRequestHandler = ({ api, apiKeyAuth, privateResponses = false, routeHandlers, router }) => async (request) => {\n\ttry {\n\t\tconst match = findRoute(router, request.method, new URL(request.url).pathname);\n\t\tif (!match) return errorResponse(\"Not found\", 404);\n\t\tif (apiKeyAuth !== void 0 && requiresApiKey(match.data)) {\n\t\t\tlet authenticated;\n\t\t\ttry {\n\t\t\t\tauthenticated = await apiKeyAuth.authenticate(request);\n\t\t\t} catch {\n\t\t\t\treturn errorResponse(\"Service unavailable\", 503);\n\t\t\t}\n\t\t\tif (!authenticated) return errorResponse(\"Unauthorized\", 401);\n\t\t}\n\t\tconst handler = routeHandlers[match.data];\n\t\tif (!handler) return errorResponse(\"Handler not found\", 500);\n\t\tconst response = await handler(match.params, request, api);\n\t\treturn privateResponses ? withPrivateNoStore(response) : response;\n\t} catch (error) {\n\t\tif (error instanceof HandlerBadRequestError) return errorResponse(error.message, 400);\n\t\tconsole.error(\"Hot Updater handler error:\", error);\n\t\treturn Response.json({ error: \"Internal server error\" }, {\n\t\t\theaders: { \"cache-control\": \"private, no-store\" },\n\t\t\tstatus: 500\n\t\t});\n\t}\n};\nconst createDownloadStorageRouteHandler = (downloadStorageObject) => async (params) => {\n\tconst token = params.token;\n\tconst signature = params.signature;\n\tif (!token || !signature) return errorResponse(\"Not found\", 404);\n\tconst response = await downloadStorageObject(token, signature);\n\tif (!response) return errorResponse(\"Not found\", 404);\n\tconst headers = new Headers(response.headers);\n\tif (!headers.has(\"cache-control\")) headers.set(\"cache-control\", \"public, max-age=31536000, immutable\");\n\treturn new Response(response.body, {\n\t\theaders,\n\t\tstatus: response.status,\n\t\tstatusText: response.statusText\n\t});\n};\nfunction createHandlers(api) {\n\treturn createHotUpdaterHandlers(api);\n}\nfunction createHotUpdaterHandlers(api, insights, apiKeyAuth, downloadStorageObject) {\n\tconst routeHandlers = {\n\t\t...createVersionRouteHandlers(),\n\t\t...createReleaseCatalogRouteHandlers(apiKeyAuth?.headerName),\n\t\t...createReleaseManagementRouteHandlers(),\n\t\t...createBundleRouteHandlers(),\n\t\t...insights === void 0 ? {} : createInsightsRouteHandlers(insights),\n\t\t...downloadStorageObject === void 0 ? {} : { downloadStorageObject: createDownloadStorageRouteHandler(downloadStorageObject) }\n\t};\n\tconst clientRouter = createRouter();\n\tconst addClientRoute = (method, path, handler) => addRoute(clientRouter, method, path, handler);\n\taddClientRoute(\"GET\", \"/version\", \"version\");\n\tif (downloadStorageObject !== void 0) addClientRoute(\"GET\", \"/storage/:token/:signature\", \"downloadStorageObject\");\n\taddClientRoute(\"GET\", \"/release-catalogs/app-version/:platform/:channelKey/:appVersion\", \"appVersionReleaseCatalog\");\n\taddClientRoute(\"GET\", \"/release-catalogs/fingerprint/:platform/:channelKey/:fingerprintHash\", \"fingerprintReleaseCatalog\");\n\taddClientRoute(\"GET\", \"/artifacts/:targetBundleId/from/:currentBundleId\", \"artifact\");\n\tif (insights !== void 0) registerInsightsClientRoutes(addClientRoute);\n\tconst adminRouter = createRouter();\n\tconst addAdminRoute = (method, path, handler) => addRoute(adminRouter, method, path, handler);\n\taddAdminRoute(\"GET\", \"/releases/:id\", \"getRelease\");\n\taddAdminRoute(\"GET\", \"/releases\", \"getReleases\");\n\taddAdminRoute(\"PATCH\", \"/releases/:id\", \"updateRelease\");\n\taddAdminRoute(\"POST\", \"/releases/:id/preflight\", \"preflightRelease\");\n\taddAdminRoute(\"DELETE\", \"/releases/:id\", \"deleteRelease\");\n\taddAdminRoute(\"GET\", \"/release-catalogs/:scopeKey\", \"getReleaseCatalogRow\");\n\taddAdminRoute(\"GET\", \"/release-catalogs\", \"getReleaseCatalogs\");\n\taddAdminRoute(\"POST\", \"/release-catalogs/:scopeKey/rebuild\", \"rebuildReleaseCatalog\");\n\taddAdminRoute(\"POST\", \"/database/commit\", \"commitDatabase\");\n\taddAdminRoute(\"GET\", \"/channels\", \"getChannels\");\n\taddAdminRoute(\"POST\", \"/channels\", \"createChannel\");\n\taddAdminRoute(\"DELETE\", \"/channels/:id\", \"deleteChannel\");\n\taddAdminRoute(\"GET\", \"/bundles/:id\", \"getBundle\");\n\taddAdminRoute(\"GET\", \"/bundles\", \"getBundles\");\n\taddAdminRoute(\"POST\", \"/bundles\", \"createBundles\");\n\taddAdminRoute(\"PATCH\", \"/bundles/:id\", \"updateBundle\");\n\taddAdminRoute(\"DELETE\", \"/bundles/:id\", \"deleteBundle\");\n\tif (insights !== void 0) registerInsightsAdminRoutes(addAdminRoute);\n\treturn Object.freeze({\n\t\tclient: createRequestHandler({\n\t\t\tapi,\n\t\t\tapiKeyAuth,\n\t\t\trouteHandlers,\n\t\t\trouter: clientRouter\n\t\t}),\n\t\tadmin: createRequestHandler({\n\t\t\tapi,\n\t\t\tprivateResponses: true,\n\t\t\trouteHandlers,\n\t\t\trouter: adminRouter\n\t\t})\n\t});\n}\n//#endregion\nexport { createHandlers, createHotUpdaterHandlers };\n", "//#region src/insights/bounded/activeOverview.ts\nconst HOUR_MS = 3600 * 1e3;\nconst DAY_MS = 24 * HOUR_MS;\nconst ACTIVE_BUNDLE_EVENT_TYPES = [\n\t\"UPDATE_APPLIED\",\n\t\"RECOVERED\",\n\t\"RELEASE_ADOPTED\",\n\t\"UNCHANGED\"\n];\nconst activeWindowDefinitions = {\n\t\"24h\": {\n\t\tbucketCount: 24,\n\t\tbucketSizeMs: HOUR_MS\n\t},\n\t\"7d\": {\n\t\tbucketCount: 7,\n\t\tbucketSizeMs: DAY_MS\n\t},\n\t\"30d\": {\n\t\tbucketCount: 30,\n\t\tbucketSizeMs: DAY_MS\n\t}\n};\nfunction getActiveWindowDefinition(window) {\n\treturn activeWindowDefinitions[window];\n}\nfunction compareCodePoints(left, right) {\n\tif (left < right) return -1;\n\tif (left > right) return 1;\n\treturn 0;\n}\nfunction isNewer(candidate, current) {\n\treturn candidate.received_at_ms > current.received_at_ms || candidate.received_at_ms === current.received_at_ms && compareCodePoints(candidate.id, current.id) > 0;\n}\nfunction collectActiveInstallationOverview(request) {\n\tconst definition = getActiveWindowDefinition(request.window);\n\tconst windowStartMs = request.asOfMs - definition.bucketCount * definition.bucketSizeMs;\n\tconst rows = request.rows.filter((row) => row.received_at_ms >= windowStartMs && row.received_at_ms < request.asOfMs);\n\tconst latestByInstall = /* @__PURE__ */ new Map();\n\tfor (const row of rows) {\n\t\tconst current = latestByInstall.get(row.install_id);\n\t\tif (current === void 0 || isNewer(row, current)) latestByInstall.set(row.install_id, row);\n\t}\n\tconst selectedRows = [...latestByInstall.values()].filter((row) => request.userId === void 0 || row.user_id === request.userId);\n\tconst selectedInstallIds = new Set(selectedRows.map((row) => row.install_id));\n\tconst bundleCounts = /* @__PURE__ */ new Map();\n\tfor (const row of selectedRows) bundleCounts.set(row.to_bundle_id, (bundleCounts.get(row.to_bundle_id) ?? 0) + 1);\n\tconst latestByBucket = Array.from({ length: definition.bucketCount }, () => /* @__PURE__ */ new Map());\n\tfor (const row of rows) {\n\t\tif (!selectedInstallIds.has(row.install_id)) continue;\n\t\tconst bucket = latestByBucket[Math.floor((row.received_at_ms - windowStartMs) / definition.bucketSizeMs)];\n\t\tif (bucket === void 0) continue;\n\t\tconst current = bucket.get(row.install_id);\n\t\tif (current === void 0 || isNewer(row, current)) bucket.set(row.install_id, row);\n\t}\n\tconst bundleCountsByBucket = latestByBucket.map((bucket) => {\n\t\tconst counts = /* @__PURE__ */ new Map();\n\t\tfor (const row of bucket.values()) counts.set(row.to_bundle_id, (counts.get(row.to_bundle_id) ?? 0) + 1);\n\t\treturn counts;\n\t});\n\tconst bundleObservationTotals = /* @__PURE__ */ new Map();\n\tfor (const counts of bundleCountsByBucket) for (const [bundleId, count] of counts) bundleObservationTotals.set(bundleId, (bundleObservationTotals.get(bundleId) ?? 0) + count);\n\treturn {\n\t\tasOfMs: request.asOfMs,\n\t\twindow: request.window,\n\t\tactiveInstallations: selectedInstallIds.size,\n\t\tseries: latestByBucket.map((bucket, index) => ({\n\t\t\tbucketStartMs: windowStartMs + index * definition.bucketSizeMs,\n\t\t\tvalue: bucket.size\n\t\t})),\n\t\tbundleSeries: [...bundleObservationTotals].sort(([leftId, leftTotal], [rightId, rightTotal]) => rightTotal - leftTotal || compareCodePoints(leftId, rightId)).map(([bundleId]) => ({\n\t\t\tbundleId,\n\t\t\tseries: bundleCountsByBucket.map((counts, index) => ({\n\t\t\t\tbucketStartMs: windowStartMs + index * definition.bucketSizeMs,\n\t\t\t\tvalue: counts.get(bundleId) ?? 0\n\t\t\t}))\n\t\t})),\n\t\tbundles: [...bundleCounts].map(([bundleId, installations]) => ({\n\t\t\tbundleId,\n\t\t\tinstallations\n\t\t})).sort((left, right) => right.installations - left.installations || compareCodePoints(left.bundleId, right.bundleId))\n\t};\n}\n//#endregion\nexport { ACTIVE_BUNDLE_EVENT_TYPES, collectActiveInstallationOverview, getActiveWindowDefinition };\n", "import { InsightsScanLimitExceededError } from \"../errors.mjs\";\nimport { ACTIVE_BUNDLE_EVENT_TYPES, getActiveWindowDefinition } from \"./activeOverview.mjs\";\n//#region src/insights/bounded/scan.ts\nconst INSIGHTS_SCAN_MAX_ROWS = 5e4;\nconst INSIGHTS_MATERIALIZATION_LIMIT = INSIGHTS_SCAN_MAX_ROWS + 1;\nconst INSIGHTS_SCAN_PAGE_SIZE = 1e3;\nconst INSIGHTS_LOWER_BOUND_ID = \"00000000-0000-0000-0000-000000000000\";\nconst compareCodePoints = (left, right) => {\n\tif (left < right) return -1;\n\tif (left > right) return 1;\n\treturn 0;\n};\nconst compareEventNewest = (left, right) => right.received_at_ms - left.received_at_ms || compareCodePoints(right.id, left.id);\nconst compareEventOldest = (left, right) => left.received_at_ms - right.received_at_ms || compareCodePoints(left.id, right.id);\nconst materializeEventRows = async (scope) => {\n\tconst rows = [];\n\tconst seenIds = /* @__PURE__ */ new Set();\n\tlet after = scope.lowerBoundMs === void 0 ? void 0 : {\n\t\treceivedAtMs: scope.lowerBoundMs,\n\t\tid: INSIGHTS_LOWER_BOUND_ID\n\t};\n\twhile (rows.length < INSIGHTS_MATERIALIZATION_LIMIT) {\n\t\tconst limit = Math.min(INSIGHTS_SCAN_PAGE_SIZE, INSIGHTS_MATERIALIZATION_LIMIT - rows.length);\n\t\tconst page = await scope.persistence.scan({\n\t\t\tbeforeReceivedAtMs: scope.cutoffMs,\n\t\t\t...after === void 0 ? {} : { after },\n\t\t\tlimit\n\t\t});\n\t\tif (page.length === 0) break;\n\t\tif (page.length > limit) throw new InsightsPersistenceOrderError();\n\t\tlet previous = after === void 0 ? void 0 : {\n\t\t\treceived_at_ms: after.receivedAtMs,\n\t\t\tid: after.id\n\t\t};\n\t\tfor (const row of page) {\n\t\t\tif (row.received_at_ms >= scope.cutoffMs || previous !== void 0 && compareEventOldest(previous, row) >= 0 || seenIds.has(row.id)) throw new InsightsPersistenceOrderError();\n\t\t\tseenIds.add(row.id);\n\t\t\trows.push(row);\n\t\t\tprevious = row;\n\t\t}\n\t\tconst last = page.at(-1);\n\t\tif (last !== void 0) after = {\n\t\t\treceivedAtMs: last.received_at_ms,\n\t\t\tid: last.id\n\t\t};\n\t\tif (rows.length > 5e4) throw new InsightsScanLimitExceededError(INSIGHTS_SCAN_MAX_ROWS);\n\t}\n\treturn rows;\n};\nvar InsightsPersistenceOrderError = class extends Error {\n\tname = \"InsightsPersistenceOrderError\";\n\tconstructor() {\n\t\tsuper(\"Insights persistence did not advance its scan cursor.\");\n\t}\n};\nconst materializeActiveRows = async (scope, window) => {\n\tconst definition = getActiveWindowDefinition(window);\n\tconst durationMs = definition.bucketCount * definition.bucketSizeMs;\n\treturn (await materializeEventRows({\n\t\t...scope,\n\t\tlowerBoundMs: scope.cutoffMs - durationMs\n\t})).filter((row) => row.received_at_ms >= scope.cutoffMs - durationMs && ACTIVE_BUNDLE_EVENT_TYPES.includes(row.type));\n};\nconst startOfUtcHour = (value) => {\n\tconst date = new Date(value);\n\treturn Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours());\n};\nconst startOfUtcDay = (value) => {\n\tconst date = new Date(value);\n\treturn Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());\n};\nconst getWindowRange = (window, now) => {\n\tif (window === \"24h\") return {\n\t\tsizeMs: 3600 * 1e3,\n\t\trangeStart: startOfUtcHour(now) - 1380 * 60 * 1e3\n\t};\n\tconst days = window === \"7d\" ? 7 : 30;\n\treturn {\n\t\tsizeMs: 1440 * 60 * 1e3,\n\t\trangeStart: startOfUtcDay(now) - (days - 1) * 24 * 60 * 60 * 1e3\n\t};\n};\nconst materializeRowsForWindow = async (scope, window) => {\n\tif (window === \"all\") return materializeEventRows(scope);\n\tconst range = getWindowRange(window, scope.cutoffMs);\n\treturn (await materializeEventRows({\n\t\t...scope,\n\t\tlowerBoundMs: range.rangeStart\n\t})).filter(({ received_at_ms }) => received_at_ms >= range.rangeStart);\n};\nconst bucketStart = (receivedAtMs, sizeMs) => sizeMs === 3600 * 1e3 ? startOfUtcHour(receivedAtMs) : startOfUtcDay(receivedAtMs);\nconst createSeries = (request) => {\n\tconst range = request.window === \"all\" ? void 0 : getWindowRange(request.window, request.cutoffMs);\n\tconst sizeMs = range?.sizeMs ?? 1440 * 60 * 1e3;\n\tconst installIdsByBucket = /* @__PURE__ */ new Map();\n\tlet oldestMs = request.cutoffMs;\n\tfor (const row of request.rows) {\n\t\toldestMs = Math.min(oldestMs, row.received_at_ms);\n\t\tconst start = bucketStart(row.received_at_ms, sizeMs);\n\t\tconst installIds = installIdsByBucket.get(start) ?? /* @__PURE__ */ new Set();\n\t\tinstallIds.add(row.install_id);\n\t\tinstallIdsByBucket.set(start, installIds);\n\t}\n\tconst first = range?.rangeStart ?? startOfUtcDay(oldestMs);\n\tconst last = bucketStart(request.cutoffMs, sizeMs);\n\treturn Array.from({ length: Math.floor((last - first) / sizeMs) + 1 }, (_, index) => {\n\t\tconst start = first + index * sizeMs;\n\t\treturn {\n\t\t\tbucketStartMs: start,\n\t\t\tvalue: installIdsByBucket.get(start)?.size ?? 0\n\t\t};\n\t});\n};\nconst collectEventActivity = (request) => {\n\tconst range = request.window === \"all\" ? void 0 : getWindowRange(request.window, request.cutoffMs);\n\tconst rows = range === void 0 ? request.rows : request.rows.filter(({ received_at_ms }) => received_at_ms >= range.rangeStart && received_at_ms < request.cutoffMs);\n\tconst installs = /* @__PURE__ */ new Set();\n\tconst installsByCohort = /* @__PURE__ */ new Map();\n\tfor (const row of rows) {\n\t\tinstalls.add(row.install_id);\n\t\tconst cohort = installsByCohort.get(row.cohort) ?? /* @__PURE__ */ new Set();\n\t\tcohort.add(row.install_id);\n\t\tinstallsByCohort.set(row.cohort, cohort);\n\t}\n\treturn {\n\t\tsummary: installs.size,\n\t\tcohorts: [...installsByCohort].sort(([left], [right]) => compareCodePoints(left, right)).map(([cohort, installIds]) => ({\n\t\t\tcohort,\n\t\t\tvalue: installIds.size\n\t\t})),\n\t\tseries: createSeries({\n\t\t\t...request,\n\t\t\trows\n\t\t})\n\t};\n};\n//#endregion\nexport { INSIGHTS_SCAN_MAX_ROWS, collectEventActivity, compareCodePoints, compareEventNewest, materializeActiveRows, materializeEventRows, materializeRowsForWindow };\n", "import { compareCodePoints, compareEventNewest } from \"./scan.mjs\";\n//#region src/insights/bounded/installationSearch.ts\nfunction toSearchRow(row) {\n\treturn {\n\t\tinstallId: row.install_id,\n\t\tusername: row.username,\n\t\tuserId: row.user_id,\n\t\tlastKnownBundleId: row.to_bundle_id,\n\t\tlatestStatus: row.type,\n\t\tplatform: row.platform,\n\t\tappVersion: row.app_version,\n\t\tchannel: row.channel,\n\t\tcohort: row.cohort,\n\t\treceivedAtMs: row.received_at_ms\n\t};\n}\nfunction matchesIdentity(row, query) {\n\treturn row.install_id.toLowerCase().includes(query) || row.user_id?.toLowerCase().includes(query) === true || row.username?.toLowerCase().includes(query) === true;\n}\nfunction searchEventInstallations(request) {\n\tconst query = request.query.toLowerCase();\n\tconst matchingInstallIds = /* @__PURE__ */ new Set();\n\tfor (const row of request.rows) if (query.length === 0 || matchesIdentity(row, query)) matchingInstallIds.add(row.install_id);\n\tconst latestByInstall = /* @__PURE__ */ new Map();\n\tfor (const row of request.rows) {\n\t\tif (!matchingInstallIds.has(row.install_id)) continue;\n\t\tconst current = latestByInstall.get(row.install_id);\n\t\tif (current === void 0 || compareEventNewest(row, current) < 0) latestByInstall.set(row.install_id, row);\n\t}\n\tconst matchingRows = [...latestByInstall.values()].sort((left, right) => compareCodePoints(left.install_id, right.install_id));\n\tconst pageSize = Math.min(Math.max(request.limit, 0), 100);\n\treturn {\n\t\tdata: matchingRows.slice(request.offset, request.offset + pageSize).map(toSearchRow),\n\t\tpagination: {\n\t\t\ttotal: matchingRows.length,\n\t\t\tlimit: request.limit,\n\t\t\toffset: request.offset\n\t\t}\n\t};\n}\n//#endregion\nexport { searchEventInstallations };\n", "import { createUUIDv7 } from \"@hot-updater/plugin-core\";\n//#region src/insights/bounded/persistence.ts\nfunction createBundleEventRow(input) {\n\tconst base = {\n\t\tid: createUUIDv7(),\n\t\tinstall_id: input.installId,\n\t\tuser_id: input.userId ?? null,\n\t\tusername: input.username ?? null,\n\t\tfrom_release_id: input.fromReleaseId,\n\t\tto_release_id: input.toReleaseId,\n\t\tto_bundle_id: input.toBundleId,\n\t\tplatform: input.platform,\n\t\tapp_version: input.appVersion,\n\t\tchannel: input.channel,\n\t\tcohort: input.cohort,\n\t\tfingerprint_hash: input.fingerprintHash,\n\t\tsdk_version: input.sdkVersion ?? null,\n\t\treceived_at_ms: Date.now()\n\t};\n\tswitch (input.type) {\n\t\tcase \"UPDATE_APPLIED\":\n\t\tcase \"RECOVERED\":\n\t\tcase \"RELEASE_ADOPTED\": return {\n\t\t\t...base,\n\t\t\ttype: input.type,\n\t\t\tfrom_bundle_id: input.fromBundleId,\n\t\t\tupdate_strategy: input.updateStrategy\n\t\t};\n\t\tcase \"UNCHANGED\": return {\n\t\t\t...base,\n\t\t\ttype: input.type,\n\t\t\tfrom_bundle_id: null,\n\t\t\tupdate_strategy: null\n\t\t};\n\t}\n}\n//#endregion\nexport { createBundleEventRow };\n", "import { collectActiveInstallationOverview } from \"./activeOverview.mjs\";\nimport { INSIGHTS_SCAN_MAX_ROWS, collectEventActivity, compareCodePoints, compareEventNewest, materializeActiveRows, materializeEventRows, materializeRowsForWindow } from \"./scan.mjs\";\nimport { searchEventInstallations } from \"./installationSearch.mjs\";\nimport { createBundleEventRow } from \"./persistence.mjs\";\n//#region src/insights/bounded/provider.ts\nconst isTransitionEventRow = (row) => row.type === \"UPDATE_APPLIED\" || row.type === \"RECOVERED\";\nconst toHistoryRow = (row) => ({\n\tid: row.id,\n\ttype: row.type,\n\tfromBundleId: row.from_bundle_id,\n\ttoBundleId: row.to_bundle_id,\n\tusername: row.username,\n\tuserId: row.user_id,\n\tplatform: row.platform,\n\tappVersion: row.app_version,\n\tchannel: row.channel,\n\tcohort: row.cohort,\n\treceivedAtMs: row.received_at_ms\n});\nconst isInstalledForBundle = (row, bundleId) => row.type === \"UPDATE_APPLIED\" && row.to_bundle_id === bundleId;\nconst isRecoveredFromBundle = (row, bundleId) => row.type === \"RECOVERED\" && row.from_bundle_id === bundleId;\nconst countDistinctInstallations = (rows) => new Set(rows.map(({ install_id }) => install_id)).size;\nconst getInsightsResult = async (persistence, bundleId, window, limit, offset) => {\n\tconst scope = {\n\t\tpersistence,\n\t\tcutoffMs: Date.now()\n\t};\n\tconst rows = (await materializeRowsForWindow(scope, window)).filter(isTransitionEventRow);\n\tconst installedRows = rows.filter((row) => isInstalledForBundle(row, bundleId));\n\tconst recoveredRows = rows.filter((row) => isRecoveredFromBundle(row, bundleId));\n\tconst installed = collectEventActivity({\n\t\trows: installedRows,\n\t\twindow,\n\t\tcutoffMs: scope.cutoffMs\n\t});\n\tconst recovered = collectEventActivity({\n\t\trows: recoveredRows,\n\t\twindow,\n\t\tcutoffMs: scope.cutoffMs\n\t});\n\tconst recentRows = [...installedRows, ...recoveredRows].sort(compareEventNewest);\n\treturn {\n\t\tsummary: {\n\t\t\tinstalled: installed.summary,\n\t\t\trecovered: recovered.summary\n\t\t},\n\t\tseries: {\n\t\t\tinstalled: installed.series,\n\t\t\trecovered: recovered.series\n\t\t},\n\t\tcohorts: {\n\t\t\tinstalled: installed.cohorts,\n\t\t\trecovered: recovered.cohorts\n\t\t},\n\t\trecentEvents: {\n\t\t\tdata: recentRows.slice(offset, offset + limit).map(toHistoryRow),\n\t\t\tpagination: {\n\t\t\t\ttotal: recentRows.length,\n\t\t\t\tlimit,\n\t\t\t\toffset\n\t\t\t}\n\t\t}\n\t};\n};\nconst getInsightsSummaries = async (persistence, bundleIds, window) => {\n\tconst normalizedBundleIds = [...new Set(bundleIds)];\n\tif (normalizedBundleIds.length === 0) return [];\n\tconst requestedBundleIds = new Set(normalizedBundleIds);\n\tconst installedByBundleId = /* @__PURE__ */ new Map();\n\tconst recoveredByBundleId = /* @__PURE__ */ new Map();\n\tconst rows = (await materializeRowsForWindow({\n\t\tpersistence,\n\t\tcutoffMs: Date.now()\n\t}, window)).filter(isTransitionEventRow);\n\tfor (const row of rows) {\n\t\tconst bundleId = row.type === \"UPDATE_APPLIED\" ? row.to_bundle_id : row.from_bundle_id;\n\t\tif (!requestedBundleIds.has(bundleId)) continue;\n\t\tconst counts = row.type === \"UPDATE_APPLIED\" ? installedByBundleId : recoveredByBundleId;\n\t\tconst installIds = counts.get(bundleId) ?? /* @__PURE__ */ new Set();\n\t\tinstallIds.add(row.install_id);\n\t\tcounts.set(bundleId, installIds);\n\t}\n\treturn normalizedBundleIds.map((bundleId) => ({\n\t\tbundleId,\n\t\tinstalled: installedByBundleId.get(bundleId)?.size ?? 0,\n\t\trecovered: recoveredByBundleId.get(bundleId)?.size ?? 0\n\t}));\n};\nconst createInsightsProvider = (persistence) => Object.freeze({\n\tmode: \"bounded\",\n\tmaxMatchingRows: INSIGHTS_SCAN_MAX_ROWS,\n\tasync appendBundleEvent(input) {\n\t\tawait persistence.append(createBundleEventRow(input));\n\t},\n\tasync getBundleEventSummary(bundleId) {\n\t\tconst rows = (await materializeEventRows({\n\t\t\tpersistence,\n\t\t\tcutoffMs: Date.now()\n\t\t})).filter(isTransitionEventRow);\n\t\treturn {\n\t\t\tinstalled: countDistinctInstallations(rows.filter((row) => isInstalledForBundle(row, bundleId))),\n\t\t\trecovered: countDistinctInstallations(rows.filter((row) => isRecoveredFromBundle(row, bundleId)))\n\t\t};\n\t},\n\tgetBundleEventSummaries(bundleIds, window) {\n\t\treturn getInsightsSummaries(persistence, bundleIds, window);\n\t},\n\tgetBundleEventInsights(bundleId, window, limit, offset) {\n\t\treturn getInsightsResult(persistence, bundleId, window, limit, offset);\n\t},\n\tasync getBundleEventOverview() {\n\t\tconst rows = await materializeEventRows({\n\t\t\tpersistence,\n\t\t\tcutoffMs: Date.now()\n\t\t});\n\t\tconst latestByInstall = /* @__PURE__ */ new Map();\n\t\tfor (const row of rows) {\n\t\t\tconst current = latestByInstall.get(row.install_id);\n\t\t\tif (current === void 0 || compareEventNewest(row, current) < 0) latestByInstall.set(row.install_id, row);\n\t\t}\n\t\tconst counts = /* @__PURE__ */ new Map();\n\t\tfor (const row of latestByInstall.values()) counts.set(row.to_bundle_id, (counts.get(row.to_bundle_id) ?? 0) + 1);\n\t\treturn {\n\t\t\ttrackedInstallations: latestByInstall.size,\n\t\t\tbundles: [...counts].map(([bundleId, installations]) => ({\n\t\t\t\tbundleId,\n\t\t\t\tinstallations\n\t\t\t})).sort((left, right) => right.installations - left.installations || compareCodePoints(left.bundleId, right.bundleId))\n\t\t};\n\t},\n\tasync getActiveInstallationOverview(input) {\n\t\tconst asOfMs = Date.now();\n\t\treturn collectActiveInstallationOverview({\n\t\t\trows: await materializeActiveRows({\n\t\t\t\tpersistence,\n\t\t\t\tcutoffMs: asOfMs\n\t\t\t}, input.window),\n\t\t\tasOfMs,\n\t\t\twindow: input.window,\n\t\t\t...input.userId === void 0 ? {} : { userId: input.userId }\n\t\t});\n\t},\n\tasync searchInstallations(query, limit, offset) {\n\t\treturn searchEventInstallations({\n\t\t\trows: await materializeEventRows({\n\t\t\t\tpersistence,\n\t\t\t\tcutoffMs: Date.now()\n\t\t\t}),\n\t\t\tquery,\n\t\t\tlimit,\n\t\t\toffset\n\t\t});\n\t},\n\tasync getInstallationHistory(installId, limit, offset) {\n\t\tconst ordered = (await materializeEventRows({\n\t\t\tpersistence,\n\t\t\tcutoffMs: Date.now()\n\t\t})).filter((row) => row.install_id === installId && isTransitionEventRow(row)).toSorted(compareEventNewest);\n\t\treturn {\n\t\t\tdata: ordered.slice(offset, offset + limit).map(toHistoryRow),\n\t\t\tpagination: {\n\t\t\t\ttotal: ordered.length,\n\t\t\t\tlimit,\n\t\t\t\toffset\n\t\t\t}\n\t\t};\n\t}\n});\n//#endregion\nexport { createInsightsProvider };\n", "//#region src/apiKeys.ts\nconst API_KEY_HEADER_NAME = \"x-api-key\";\nconst BASE64URL_32_PATTERN = /^[A-Za-z0-9_-]{43}$/u;\nconst bytesToBase64Url = (bytes) => {\n\tlet binary = \"\";\n\tfor (const byte of bytes) binary += String.fromCharCode(byte);\n\treturn btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/u, \"\");\n};\nconst isApiKey = (value) => {\n\tif (!BASE64URL_32_PATTERN.test(value)) return false;\n\ttry {\n\t\tconst base64 = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n\t\tconst binary = atob(`${base64}=`);\n\t\tconst bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));\n\t\treturn bytes.byteLength === 32 && bytesToBase64Url(bytes) === value;\n\t} catch {\n\t\treturn false;\n\t}\n};\nconst normalizeApiKeyHeaderName = (value = API_KEY_HEADER_NAME) => {\n\tif (typeof value !== \"string\" || value.length === 0) throw new TypeError(\"clientAccess.headerName must be a valid header name.\");\n\ttry {\n\t\tconst headers = new Headers();\n\t\theaders.set(value, \"\");\n\t\treturn headers.keys().next().value;\n\t} catch {\n\t\tthrow new TypeError(\"clientAccess.headerName must be a valid header name.\");\n\t}\n};\nconst hashApiKey = async (apiKey) => {\n\tif (!isApiKey(apiKey)) throw new TypeError(\"API key must be a canonical 32-byte base64url value.\");\n\tconst digest = await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(apiKey));\n\treturn bytesToBase64Url(new Uint8Array(digest));\n};\nconst apiKeyId = () => {\n\tconst bytes = new Uint8Array(16);\n\tcrypto.getRandomValues(bytes);\n\treturn `api-${bytesToBase64Url(bytes)}`;\n};\nconst normalizeApiKeyName = (name) => {\n\tconst normalized = name.trim();\n\tif (normalized.length === 0 || normalized.length > 64 || /[\\p{Cc}\\p{Cf}]/u.test(normalized)) throw new TypeError(\"API key names must contain 1-64 visible characters.\");\n\treturn normalized;\n};\nconst toApiKeyMetadata = ({ hash: _hash, ...metadata }) => Object.freeze(metadata);\nconst registerApiKey = async (input) => {\n\tconst hash = await hashApiKey(input.apiKey);\n\tconst createdAtMs = input.createdAtMs ?? Date.now();\n\tif (!Number.isSafeInteger(createdAtMs) || createdAtMs < 0) throw new TypeError(\"API key creation time must be non-negative.\");\n\tconst record = Object.freeze({\n\t\tcreated_at_ms: createdAtMs,\n\t\thash,\n\t\tid: apiKeyId(),\n\t\tname: normalizeApiKeyName(input.name),\n\t\tprefix: input.apiKey.slice(0, 6),\n\t\trevoked_at_ms: null,\n\t\trole: \"client\"\n\t});\n\tif (await input.apiKeys.create(record) === \"existing\") {\n\t\tconst existing = await input.apiKeys.findByHash(hash);\n\t\tif (existing === null || existing.revoked_at_ms !== null) throw new Error(\"The API key has been revoked.\");\n\t\treturn Object.freeze({\n\t\t\tapiKey: input.apiKey,\n\t\t\trecord: toApiKeyMetadata(existing)\n\t\t});\n\t}\n\treturn Object.freeze({\n\t\tapiKey: input.apiKey,\n\t\trecord: toApiKeyMetadata(record)\n\t});\n};\nconst createApiKey = (input) => {\n\tconst bytes = new Uint8Array(32);\n\tcrypto.getRandomValues(bytes);\n\treturn registerApiKey({\n\t\tapiKey: bytesToBase64Url(bytes),\n\t\tapiKeys: input.apiKeys,\n\t\tname: input.name\n\t});\n};\n/**\n* Provisions the client API key used by managed init.\n*\n* A saved plaintext key is registered idempotently; otherwise a new key is\n* created. Callers must persist or display the returned plaintext because the\n* database stores only its hash.\n*/\nconst provisionApiKey = (input) => {\n\tconst existingApiKey = input.existingApiKey?.trim();\n\treturn existingApiKey ? registerApiKey({\n\t\tapiKey: existingApiKey,\n\t\tapiKeys: input.apiKeys,\n\t\tname: input.name\n\t}) : createApiKey({\n\t\tapiKeys: input.apiKeys,\n\t\tname: input.name\n\t});\n};\nconst authenticateApiKey = async (input) => {\n\tconst apiKey = input.request.headers.get(normalizeApiKeyHeaderName(input.headerName));\n\tif (apiKey === null || !isApiKey(apiKey)) return false;\n\tconst hash = await hashApiKey(apiKey);\n\tawait input.beforeLookup?.();\n\tconst record = await input.apiKeys.findByHash(hash);\n\treturn record !== null && record.hash === hash && record.role === \"client\" && record.revoked_at_ms === null;\n};\nconst createApiKeyManagement = (input) => Object.freeze({\n\tasync create({ name }) {\n\t\tawait input.beforeOperation();\n\t\tconst created = await createApiKey({\n\t\t\tapiKeys: input.apiKeys,\n\t\t\tname\n\t\t});\n\t\treturn Object.freeze({\n\t\t\tapiKey: created.apiKey,\n\t\t\trecord: created.record\n\t\t});\n\t},\n\tasync list() {\n\t\tawait input.beforeOperation();\n\t\treturn Object.freeze((await input.apiKeys.list()).map(toApiKeyMetadata));\n\t},\n\tasync revoke({ id }) {\n\t\tawait input.beforeOperation();\n\t\tconst record = await input.apiKeys.revoke({\n\t\t\tid,\n\t\t\trevokedAtMs: Date.now()\n\t\t});\n\t\treturn record === null ? null : toApiKeyMetadata(record);\n\t}\n});\n//#endregion\nexport { API_KEY_HEADER_NAME, authenticateApiKey, createApiKey, createApiKeyManagement, normalizeApiKeyHeaderName, provisionApiKey, registerApiKey };\n", "import { getManifestAssetDownloadPath, isContentAddressedAssetFileHash, resolveManifestAssetStorageUri } from \"@hot-updater/plugin-core\";\nimport { getAssetBaseStorageUri, getBundlePatch, getManifestFileHash, getManifestStorageUri } from \"@hot-updater/core\";\n//#region src/db/updateArtifacts.ts\nconst HBC_ASSET_PATH_RE = /\\.bundle$/;\nconst asByteSize = (value) => typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : null;\nconst sumByteSizes = (byteSizes) => {\n\tlet total = 0;\n\tfor (const byteSize of byteSizes) {\n\t\tif (byteSize === null || total > Number.MAX_SAFE_INTEGER - byteSize) return null;\n\t\ttotal += byteSize;\n\t}\n\treturn total;\n};\nconst shouldUseArchive = (targetBundle, downloadByteSize) => {\n\tconst archiveByteSize = asByteSize(targetBundle.archiveByteSize);\n\treturn archiveByteSize !== null && downloadByteSize !== null && downloadByteSize >= archiveByteSize;\n};\nconst resolveUniqueHbcAssetPath = (manifest) => {\n\tconst candidates = Object.keys(manifest.assets).sort((left, right) => left.localeCompare(right)).filter((candidate) => HBC_ASSET_PATH_RE.test(candidate));\n\treturn candidates.length === 1 ? candidates[0] : null;\n};\nconst isBundleManifest = (value) => {\n\tif (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n\tconst manifest = value;\n\tif (typeof manifest.bundleId !== \"string\") return false;\n\tif (!manifest.assets || typeof manifest.assets !== \"object\") return false;\n\treturn Object.values(manifest.assets).every((asset) => {\n\t\tif (!asset || typeof asset !== \"object\" || Array.isArray(asset)) return false;\n\t\tconst manifestAsset = asset;\n\t\treturn typeof manifestAsset.fileHash === \"string\" && (manifestAsset.signature === void 0 || typeof manifestAsset.signature === \"string\");\n\t});\n};\nasync function fetchBundleManifest(storageUri, readStorageText) {\n\tconst storageText = await readStorageText(storageUri);\n\tif (storageText === null) return null;\n\tlet payload;\n\ttry {\n\t\tpayload = JSON.parse(storageText);\n\t} catch {\n\t\treturn null;\n\t}\n\tif (!isBundleManifest(payload)) return null;\n\treturn {\n\t\tbyteSize: asByteSize(new TextEncoder().encode(storageText).byteLength),\n\t\tmanifest: payload\n\t};\n}\nfunction resolveHbcPatchPlan({ currentBundle, targetBundle, targetManifest }) {\n\tconst matchingPatch = currentBundle ? getBundlePatch(targetBundle, currentBundle.id) : null;\n\tconst patchAssetPath = resolveUniqueHbcAssetPath(targetManifest);\n\tif (!currentBundle || !matchingPatch || !patchAssetPath || !matchingPatch.patchStorageUri || !matchingPatch.patchFileHash || !matchingPatch.baseFileHash) return null;\n\treturn {\n\t\tassetPath: patchAssetPath,\n\t\tpatch: {\n\t\t\tbaseBundleId: matchingPatch.baseBundleId,\n\t\t\tbaseFileHash: matchingPatch.baseFileHash,\n\t\t\tbyteSize: asByteSize(matchingPatch.byteSize),\n\t\t\tpatchFileHash: matchingPatch.patchFileHash,\n\t\t\tstorageUri: matchingPatch.patchStorageUri\n\t\t}\n\t};\n}\nfunction createManifestArtifactPlan({ assetBaseStorageUri, currentManifest, currentBundle, targetBundle, targetManifest, targetManifestByteSize }) {\n\tconst patchCandidate = resolveHbcPatchPlan({\n\t\tcurrentBundle,\n\t\ttargetBundle,\n\t\ttargetManifest\n\t});\n\tconst changedAssets = Object.entries(targetManifest.assets).flatMap(([assetPath, asset]) => {\n\t\tif ((currentManifest?.assets[assetPath])?.fileHash === asset.fileHash) return [];\n\t\tconst downloadByteSize = asByteSize(asset.downloadByteSize);\n\t\tconst downloadPath = getManifestAssetDownloadPath(assetPath);\n\t\tconst isTransformedDownload = downloadPath !== assetPath;\n\t\tconst hasValidDownloadFileHash = isContentAddressedAssetFileHash(asset.downloadFileHash);\n\t\tconst file = {\n\t\t\tbyteSize: downloadByteSize !== null && (hasValidDownloadFileHash || !isTransformedDownload && asset.downloadFileHash === void 0) ? downloadByteSize : null,\n\t\t\tstorageUri: resolveManifestAssetStorageUri({\n\t\t\t\tassetBaseStorageUri,\n\t\t\t\tassetPath: downloadPath,\n\t\t\t\tdownloadFileHash: asset.downloadFileHash,\n\t\t\t\tfileHash: asset.fileHash\n\t\t\t})\n\t\t};\n\t\tif (isTransformedDownload) file.compression = \"br\";\n\t\tconst patch = patchCandidate?.assetPath === assetPath ? patchCandidate.patch : null;\n\t\treturn [{\n\t\t\tassetPath,\n\t\t\tfile,\n\t\t\tfileHash: asset.fileHash,\n\t\t\tpatch\n\t\t}];\n\t});\n\tconst allPossibleByteSizesKnown = targetManifestByteSize !== null && changedAssets.every((asset) => asset.file.byteSize !== null && (asset.patch === null || asset.patch.byteSize !== null));\n\tconst primaryByteSizes = changedAssets.map((asset) => {\n\t\tif (!asset.patch) return asset.file.byteSize;\n\t\tif (asset.patch.byteSize === null || asset.file.byteSize === null) return null;\n\t\treturn Math.min(asset.patch.byteSize, asset.file.byteSize);\n\t});\n\treturn {\n\t\tallPossibleByteSizesKnown,\n\t\tchangedAssets,\n\t\tmanifestByteSize: targetManifestByteSize,\n\t\tminimumDownloadByteSize: allPossibleByteSizesKnown ? sumByteSizes([targetManifestByteSize, ...primaryByteSizes]) : null\n\t};\n}\nasync function resolveChangedAssets(plan, resolveFileUrl) {\n\tconst patchAsset = plan.changedAssets.find((asset) => asset.patch !== null);\n\tlet resolvedPatch = null;\n\tif (patchAsset?.patch) {\n\t\tconst patchUrl = await resolveFileUrl(patchAsset.patch.storageUri);\n\t\tif (patchUrl) resolvedPatch = {\n\t\t\tassetPath: patchAsset.assetPath,\n\t\t\tpatch: {\n\t\t\t\talgorithm: \"bsdiff\",\n\t\t\t\tbaseBundleId: patchAsset.patch.baseBundleId,\n\t\t\t\tbaseFileHash: patchAsset.patch.baseFileHash,\n\t\t\t\tpatchFileHash: patchAsset.patch.patchFileHash,\n\t\t\t\tpatchUrl\n\t\t\t}\n\t\t};\n\t}\n\tconst changedEntries = await Promise.all(plan.changedAssets.map(async (asset) => {\n\t\tlet patch = resolvedPatch?.assetPath === asset.assetPath ? resolvedPatch.patch : null;\n\t\tlet fileUrl = null;\n\t\ttry {\n\t\t\tfileUrl = await resolveFileUrl(asset.file.storageUri);\n\t\t} catch (error) {\n\t\t\tif (!patch) throw error;\n\t\t}\n\t\tif (fileUrl && patch && asset.file.byteSize !== null && asset.patch !== null && asset.patch.byteSize !== null && asset.patch.byteSize >= asset.file.byteSize) patch = null;\n\t\tif (!fileUrl && !patch) return null;\n\t\tconst changedAsset = { fileHash: asset.fileHash };\n\t\tif (fileUrl) {\n\t\t\tchangedAsset.file = { url: fileUrl };\n\t\t\tif (asset.file.compression) changedAsset.file.compression = asset.file.compression;\n\t\t}\n\t\tif (patch) changedAsset.patch = patch;\n\t\treturn {\n\t\t\tasset: [asset.assetPath, changedAsset],\n\t\t\tprimaryByteSize: patch ? asset.patch?.byteSize ?? null : asset.file.byteSize\n\t\t};\n\t}));\n\tif (changedEntries.some((entry) => entry === null)) return null;\n\tconst resolvedEntries = changedEntries.filter((entry) => entry !== null);\n\treturn {\n\t\tchangedAssets: Object.fromEntries(resolvedEntries.map((entry) => entry.asset)),\n\t\tprimaryByteSizes: resolvedEntries.map((entry) => entry.primaryByteSize)\n\t};\n}\nasync function resolveManifestArtifacts({ archiveUrlUsable, currentBundle, resolveFileUrl, readStorageText, targetBundle }) {\n\tconst manifestStorageUri = targetBundle ? getManifestStorageUri(targetBundle) : null;\n\tconst manifestFileHash = targetBundle ? getManifestFileHash(targetBundle) : null;\n\tconst assetBaseStorageUri = targetBundle ? getAssetBaseStorageUri(targetBundle) : null;\n\tif (!targetBundle || !manifestStorageUri || !manifestFileHash || !assetBaseStorageUri) return null;\n\tconst currentManifestStorageUri = currentBundle ? getManifestStorageUri(currentBundle) : null;\n\tconst [targetManifestResult, currentManifestResult] = await Promise.all([fetchBundleManifest(manifestStorageUri, readStorageText), currentManifestStorageUri ? fetchBundleManifest(currentManifestStorageUri, readStorageText) : null]);\n\tif (!targetManifestResult) return null;\n\tconst plan = createManifestArtifactPlan({\n\t\tassetBaseStorageUri,\n\t\tcurrentManifest: currentManifestResult?.manifest ?? null,\n\t\tcurrentBundle,\n\t\ttargetBundle,\n\t\ttargetManifest: targetManifestResult.manifest,\n\t\ttargetManifestByteSize: targetManifestResult.byteSize\n\t});\n\tif (archiveUrlUsable && plan.allPossibleByteSizesKnown && shouldUseArchive(targetBundle, plan.minimumDownloadByteSize)) return null;\n\tconst manifestUrl = await resolveFileUrl(manifestStorageUri);\n\tif (!manifestUrl) return null;\n\tconst resolved = await resolveChangedAssets(plan, resolveFileUrl);\n\tif (!resolved) return null;\n\tconst resolvedDownloadByteSize = sumByteSizes([plan.manifestByteSize, ...resolved.primaryByteSizes]);\n\tif (archiveUrlUsable && shouldUseArchive(targetBundle, resolvedDownloadByteSize)) return null;\n\treturn {\n\t\tchangedAssets: resolved.changedAssets,\n\t\tmanifestFileHash,\n\t\tmanifestUrl\n\t};\n}\n//#endregion\nexport { resolveManifestArtifacts };\n", "import { resolveManifestArtifacts } from \"./updateArtifacts.mjs\";\nimport { createDatabaseClient, projectCompiledCatalog, projectCompiledRollbackCatalog } from \"@hot-updater/plugin-core\";\nimport { NIL_UUID, RELEASE_CATALOG_FALLBACK_POLICY, RELEASE_CATALOG_SCHEMA_VERSION, createReleaseCatalogScopeKey } from \"@hot-updater/core\";\n//#region src/db/releaseCatalog.ts\nconst parseCompiledCatalog = (payload, strategy) => {\n\tconst parsed = JSON.parse(payload);\n\tif (typeof parsed !== \"object\" || parsed === null || Reflect.get(parsed, \"schemaVersion\") !== RELEASE_CATALOG_SCHEMA_VERSION || Reflect.get(parsed, \"strategy\") !== strategy || Reflect.get(parsed, \"fallbackPolicy\") !== RELEASE_CATALOG_FALLBACK_POLICY || !Array.isArray(Reflect.get(parsed, \"releaseDescriptors\"))) throw new Error(\"Stored Release catalog payload is invalid\");\n\tif (strategy === \"APP_VERSION\" && !Array.isArray(Reflect.get(parsed, \"segments\"))) throw new Error(\"Stored app-version Release catalog is invalid\");\n\tif (strategy === \"FINGERPRINT\" && !Array.isArray(Reflect.get(parsed, \"releaseIndexes\"))) throw new Error(\"Stored fingerprint Release catalog is invalid\");\n\treturn parsed;\n};\nconst createReleaseCatalogReader = (database) => async (input) => {\n\tconst scopeKey = input.strategy === \"APP_VERSION\" ? createReleaseCatalogScopeKey({\n\t\tchannelKey: input.channelKey,\n\t\tplatform: input.platform,\n\t\tstrategy: \"APP_VERSION\"\n\t}) : createReleaseCatalogScopeKey({\n\t\tchannelKey: input.channelKey,\n\t\tfingerprintHash: input.fingerprintHash,\n\t\tplatform: input.platform,\n\t\tstrategy: \"FINGERPRINT\"\n\t});\n\tconst row = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\tif (row === null || row.platform !== input.platform || row.strategy !== input.strategy || row.channel_key !== input.channelKey || row.scope_key !== scopeKey || row.fingerprint_hash !== (input.strategy === \"FINGERPRINT\" ? input.fingerprintHash : null)) return null;\n\tconst compiled = parseCompiledCatalog(row.payload, input.strategy);\n\tconst releases = projectCompiledCatalog(compiled, input.strategy === \"APP_VERSION\" ? input.appVersion : void 0);\n\tconst rollbackReleases = projectCompiledRollbackCatalog(compiled, input.strategy === \"APP_VERSION\" ? input.appVersion : void 0);\n\treturn {\n\t\tcatalogId: row.catalog_id,\n\t\tcatalogHash: row.catalog_hash,\n\t\tfallbackPolicy: RELEASE_CATALOG_FALLBACK_POLICY,\n\t\tgeneration: row.generation,\n\t\treleases,\n\t\trollbackReleases,\n\t\tschemaVersion: RELEASE_CATALOG_SCHEMA_VERSION,\n\t\tscopeKey\n\t};\n};\nconst createArtifactResolver = (input) => {\n\tconst databaseClient = createDatabaseClient(input.database);\n\treturn async (targetBundleId, currentBundleId) => {\n\t\tconst [targetBundle, currentBundle] = await Promise.all([databaseClient.getBundleById(targetBundleId), currentBundleId === NIL_UUID ? null : databaseClient.getBundleById(currentBundleId)]);\n\t\tif (targetBundle === null) return null;\n\t\tconst fileUrl = await input.resolveFileUrl(targetBundle.storageUri);\n\t\tconst base = {\n\t\t\tfileHash: targetBundle.fileHash,\n\t\t\tfileUrl\n\t\t};\n\t\tif (input.readStorageText === void 0) return base;\n\t\tconst manifest = await resolveManifestArtifacts({\n\t\t\tarchiveUrlUsable: fileUrl !== null,\n\t\t\tcurrentBundle,\n\t\t\treadStorageText: input.readStorageText,\n\t\t\tresolveFileUrl: input.resolveFileUrl,\n\t\t\ttargetBundle\n\t\t});\n\t\treturn manifest === null ? base : {\n\t\t\t...base,\n\t\t\t...manifest\n\t\t};\n\t};\n};\n//#endregion\nexport { createArtifactResolver, createReleaseCatalogReader };\n", "import { createArtifactResolver, createReleaseCatalogReader } from \"./releaseCatalog.mjs\";\nimport { createDatabaseClient, deleteRelease, preflightReleasePolicy, rebuildReleaseCatalog, updateReleasePolicy } from \"@hot-updater/plugin-core\";\nimport { decodeChannelKey } from \"@hot-updater/core\";\n//#region src/db/databasePluginCore.ts\nfunction createDatabasePluginCore(database, resolveFileUrl, options) {\n\tconst client = createDatabaseClient(database);\n\tconst beforeOperation = options?.beforeOperation;\n\tconst getReleaseCatalog = createReleaseCatalogReader(database);\n\tconst getArtifact = createArtifactResolver({\n\t\tdatabase,\n\t\treadStorageText: options?.readStorageText,\n\t\tresolveFileUrl\n\t});\n\treturn {\n\t\tapi: {\n\t\t\tasync getBundleById(id) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn client.getBundleById(id);\n\t\t\t},\n\t\t\tasync getReleaseCatalog(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn getReleaseCatalog(input);\n\t\t\t},\n\t\t\tasync getArtifactInfo(targetBundleId, currentBundleId) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn getArtifact(targetBundleId, currentBundleId);\n\t\t\t},\n\t\t\tasync getReleaseById(id) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releases.findById(id);\n\t\t\t},\n\t\t\tasync getReleasesByScope(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releases.findManyByScope({\n\t\t\t\t\t...input,\n\t\t\t\t\tconsistency: \"strong\"\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync getReleases(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releases.findMany(input);\n\t\t\t},\n\t\t\tasync getReleaseCatalogByScopeKey(scopeKey) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\t\t\t},\n\t\t\tasync getReleaseCatalogs(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.releaseCatalogs.findMany(input);\n\t\t\t},\n\t\t\tasync updateReleasePolicy(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn updateReleasePolicy({\n\t\t\t\t\tdatabase,\n\t\t\t\t\t...input\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync preflightReleasePolicy(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn preflightReleasePolicy({\n\t\t\t\t\tdatabase,\n\t\t\t\t\t...input\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync deleteRelease(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn deleteRelease({\n\t\t\t\t\tdatabase,\n\t\t\t\t\t...input\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync rebuildReleaseCatalog(scopeKey) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tconst catalog = await database.models.releaseCatalogs.findByScopeKey(scopeKey);\n\t\t\t\tif (catalog === null) throw new Error(`Release catalog \"${scopeKey}\" was not found.`);\n\t\t\t\treturn rebuildReleaseCatalog({\n\t\t\t\t\tdatabase,\n\t\t\t\t\tscope: {\n\t\t\t\t\t\tchannelId: catalog.channel_id,\n\t\t\t\t\t\tchannelName: decodeChannelKey(catalog.channel_key),\n\t\t\t\t\t\tfingerprintHash: catalog.fingerprint_hash,\n\t\t\t\t\t\tplatform: catalog.platform,\n\t\t\t\t\t\tscopeKey: catalog.scope_key,\n\t\t\t\t\t\tstrategy: catalog.strategy\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync commitDatabase(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.commit(input);\n\t\t\t},\n\t\t\tasync getChannels() {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn client.getChannels();\n\t\t\t},\n\t\t\tasync insertChannel(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.channels.insert(input);\n\t\t\t},\n\t\t\tasync deleteChannel(input) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn database.models.channels.delete(input);\n\t\t\t},\n\t\t\tasync getBundles(options) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\treturn client.getBundles(options);\n\t\t\t},\n\t\t\tasync insertBundle(bundle) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.insertBundle(bundle);\n\t\t\t},\n\t\t\tasync insertBundles(bundles) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.mutate(async (transaction) => {\n\t\t\t\t\tfor (const bundle of bundles) await transaction.insertBundle(bundle);\n\t\t\t\t});\n\t\t\t},\n\t\t\tasync updateBundleById(bundleId, update) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.updateBundleById(bundleId, update);\n\t\t\t},\n\t\t\tasync deleteBundleById(bundleId) {\n\t\t\t\tawait beforeOperation?.();\n\t\t\t\tawait client.deleteBundleById(bundleId);\n\t\t\t}\n\t\t},\n\t\tadapterName: database.name,\n\t\tcreateMigrator: () => {\n\t\t\tthrow new Error(\"createMigrator is only available for Kysely/MongoDB database plugins.\");\n\t\t},\n\t\tgenerateSchema: () => {\n\t\t\tthrow new Error(\"generateSchema is only available for Drizzle/Prisma database plugins.\");\n\t\t}\n\t};\n}\n//#endregion\nexport { createDatabasePluginCore };\n", "//#region src/schema/types.ts\nconst HOT_UPDATER_SCHEMA_VERSION = \"1.0.0\";\nconst HOT_UPDATER_CORE_SCHEMA_KEY = \"schema.core\";\nconst HOT_UPDATER_SETTINGS_TABLE = \"private_hot_updater_settings\";\n//#endregion\nexport { HOT_UPDATER_CORE_SCHEMA_KEY, HOT_UPDATER_SCHEMA_VERSION, HOT_UPDATER_SETTINGS_TABLE };\n", "import { HOT_UPDATER_SCHEMA_VERSION } from \"../schema/types.mjs\";\n//#region src/db/fixedMigratorShared.ts\nconst getEmptyMigrationResult = () => ({\n\toperations: [],\n\texecute: async () => {},\n\tgetSQL: () => \"\"\n});\nconst assertSupportedMigrationMode = (options) => {\n\tif (options.mode === \"from-database\") throw new Error(\"Hot Updater migrations support only mode: 'from-schema'.\");\n};\nconst unsupportedSchemaUpgradeMessage = (version) => `Hot Updater v1 cannot migrate schema ${version} in place. Create a new empty database and run migrate or generate against schema ${HOT_UPDATER_SCHEMA_VERSION}.`;\nconst assertCurrentOrEmptySchemaVersion = (currentVersion) => {\n\tif (currentVersion !== void 0 && currentVersion !== \"1.0.0\") throw new Error(unsupportedSchemaUpgradeMessage(currentVersion));\n};\nconst inferLegacyCoreSchemaVersion = (legacyVersion) => legacyVersion;\nconst isCurrentSchemaVersion = (currentVersion) => currentVersion === HOT_UPDATER_SCHEMA_VERSION;\n//#endregion\nexport { assertCurrentOrEmptySchemaVersion, assertSupportedMigrationMode, getEmptyMigrationResult, inferLegacyCoreSchemaVersion, isCurrentSchemaVersion, unsupportedSchemaUpgradeMessage };\n", "import \"../schema/types.mjs\";\nimport { unsupportedSchemaUpgradeMessage } from \"./fixedMigratorShared.mjs\";\n//#region src/db/schemaReadiness.ts\nvar HotUpdaterSchemaMigrationRequiredError = class extends Error {\n\tconstructor(adapterName, currentVersion) {\n\t\tsuper(currentVersion === void 0 ? `Hot Updater database schema is not initialized for ${adapterName}. Run \\`hot-updater db migrate\\` before using this adapter.` : unsupportedSchemaUpgradeMessage(currentVersion));\n\t\tthis.adapterName = adapterName;\n\t\tthis.currentVersion = currentVersion;\n\t\tthis.name = \"HotUpdaterSchemaMigrationRequiredError\";\n\t}\n};\nconst createSchemaReadinessChecker = (adapterName, createMigrator) => {\n\tif (!createMigrator) return async () => {};\n\tlet ready = false;\n\treturn async () => {\n\t\tif (ready) return;\n\t\tconst version = await createMigrator().getVersion();\n\t\tif (version !== \"1.0.0\") throw new HotUpdaterSchemaMigrationRequiredError(adapterName, version);\n\t\tready = true;\n\t};\n};\n//#endregion\nexport { HotUpdaterSchemaMigrationRequiredError, createSchemaReadinessChecker };\n", "//#region src/db/types.ts\nconst sqlProviders = [\n\t\"sqlite\",\n\t\"cockroachdb\",\n\t\"mysql\",\n\t\"postgresql\",\n\t\"mssql\"\n];\nconst noSqlProviders = [\"mongodb\"];\n[...sqlProviders, ...noSqlProviders];\nfunction isDatabasePlugin(plugin) {\n\treturn typeof plugin === \"object\" && plugin !== null && \"name\" in plugin && typeof plugin.name === \"string\" && \"models\" in plugin && typeof plugin.models === \"object\" && plugin.models !== null && \"bundles\" in plugin.models && typeof plugin.models.bundles === \"object\" && plugin.models.bundles !== null && \"findById\" in plugin.models.bundles && typeof plugin.models.bundles.findById === \"function\" && \"findMany\" in plugin.models.bundles && typeof plugin.models.bundles.findMany === \"function\" && \"count\" in plugin.models.bundles && typeof plugin.models.bundles.count === \"function\" && \"bundlePatches\" in plugin.models && typeof plugin.models.bundlePatches === \"object\" && plugin.models.bundlePatches !== null && \"findByBundleIds\" in plugin.models.bundlePatches && typeof plugin.models.bundlePatches.findByBundleIds === \"function\" && \"channels\" in plugin.models && typeof plugin.models.channels === \"object\" && plugin.models.channels !== null && \"insert\" in plugin.models.channels && typeof plugin.models.channels.insert === \"function\" && \"list\" in plugin.models.channels && typeof plugin.models.channels.list === \"function\" && \"delete\" in plugin.models.channels && typeof plugin.models.channels.delete === \"function\" && \"insights\" in plugin.models && typeof plugin.models.insights === \"object\" && plugin.models.insights !== null && \"append\" in plugin.models.insights && typeof plugin.models.insights.append === \"function\" && \"scan\" in plugin.models.insights && typeof plugin.models.insights.scan === \"function\" && \"apiKeys\" in plugin.models && typeof plugin.models.apiKeys === \"object\" && plugin.models.apiKeys !== null && \"create\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.create === \"function\" && \"findByHash\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.findByHash === \"function\" && \"list\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.list === \"function\" && \"revoke\" in plugin.models.apiKeys && typeof plugin.models.apiKeys.revoke === \"function\" && \"commit\" in plugin && typeof plugin.commit === \"function\" && (!(\"dispose\" in plugin) || plugin.dispose === void 0 || typeof plugin.dispose === \"function\");\n}\nfunction getSQLProvider(provider) {\n\tif (!provider) return;\n\treturn sqlProviders.includes(provider) ? provider : void 0;\n}\n//#endregion\nexport { getSQLProvider, isDatabasePlugin };\n", "import { parseStorageDownloadPath } from \"@hot-updater/plugin-core\";\n//#region src/storageAccess.ts\nconst assertRemoteUrl = (value) => {\n\tconst protocol = new URL(value).protocol;\n\tif (protocol !== \"http:\" && protocol !== \"https:\") throw new Error(\"Storage getDownloadUrl must resolve to an HTTP(S) URL.\");\n\treturn value;\n};\nconst getStorageProtocol = (storageUri) => new URL(storageUri).protocol.replace(\":\", \"\");\nconst isRemoteUrlProtocol = (protocol) => protocol === \"http\" || protocol === \"https\";\nconst resolveDownloadPath = (value, storageUri) => {\n\tconst parsed = parseStorageDownloadPath(value);\n\tif (!parsed || parsed.storageUri !== storageUri) throw new Error(\"Storage getDownloadUrl must return an HTTP(S) URL or a valid storage download path.\");\n\treturn value;\n};\nconst tokensEqual = (left, right) => {\n\tconst leftBytes = new TextEncoder().encode(left);\n\tconst rightBytes = new TextEncoder().encode(right);\n\tlet difference = leftBytes.length ^ rightBytes.length;\n\tconst length = Math.max(leftBytes.length, rightBytes.length);\n\tfor (let index = 0; index < length; index += 1) difference |= (leftBytes[index] ?? 0) ^ (rightBytes[index] ?? 0);\n\treturn difference === 0;\n};\nconst createStorageAccess = (storagePlugins) => {\n\tconst protocols = /* @__PURE__ */ new Set();\n\tfor (const storage of storagePlugins) {\n\t\tif (protocols.has(storage.protocol)) throw new Error(`Multiple storage plugins handle protocol: ${storage.protocol}`);\n\t\tprotocols.add(storage.protocol);\n\t}\n\tconst findStorage = (protocol) => storagePlugins.find((item) => item.protocol === protocol);\n\tconst readStorageResponse = async (storageUri) => {\n\t\tconst protocol = getStorageProtocol(storageUri);\n\t\tconst storage = findStorage(protocol);\n\t\tif (storage) return (await storage.get({ storageUri })).response;\n\t\tif (isRemoteUrlProtocol(protocol)) {\n\t\t\tconst response = await fetch(storageUri);\n\t\t\treturn response.ok ? response : null;\n\t\t}\n\t\tthrow new Error(`No storage plugin for protocol: ${protocol}`);\n\t};\n\tconst resolveFileUrl = async (storageUri) => {\n\t\tif (!storageUri) return null;\n\t\tconst protocol = getStorageProtocol(storageUri);\n\t\tconst storage = findStorage(protocol);\n\t\tif (!storage) {\n\t\t\tif (isRemoteUrlProtocol(protocol)) return storageUri;\n\t\t\tthrow new Error(`No storage plugin for protocol: ${protocol}`);\n\t\t}\n\t\tif (!storage.getDownloadUrl) throw new Error(`Storage plugin \"${storage.name}\" does not implement getDownloadUrl.`);\n\t\tconst { url: downloadUrl } = await storage.getDownloadUrl({ storageUri });\n\t\ttry {\n\t\t\treturn assertRemoteUrl(downloadUrl);\n\t\t} catch (error) {\n\t\t\tif (/^[a-z][a-z\\d+.-]*:/i.test(downloadUrl)) throw error;\n\t\t}\n\t\treturn resolveDownloadPath(downloadUrl, storageUri);\n\t};\n\tconst readStorageText = async (storageUri) => {\n\t\treturn (await readStorageResponse(storageUri))?.text() ?? null;\n\t};\n\treturn {\n\t\tdownloadStorageObject: storagePlugins.some((storage) => storage.getDownloadUrl !== void 0) ? async (storageUriToken, encodedSignature) => {\n\t\t\tconst requestedPath = `/storage/${storageUriToken}/${encodedSignature}`;\n\t\t\tconst requested = parseStorageDownloadPath(requestedPath);\n\t\t\tif (!requested) return null;\n\t\t\tlet storage;\n\t\t\ttry {\n\t\t\t\tstorage = findStorage(getStorageProtocol(requested.storageUri));\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!storage?.getDownloadUrl) return null;\n\t\t\tconst { url: downloadUrl } = await storage.getDownloadUrl({ storageUri: requested.storageUri });\n\t\t\ttry {\n\t\t\t\tnew URL(downloadUrl);\n\t\t\t\treturn null;\n\t\t\t} catch {\n\t\t\t\tif (/^[a-z][a-z\\d+.-]*:/i.test(downloadUrl)) return null;\n\t\t\t}\n\t\t\tif (!tokensEqual(downloadUrl, requestedPath)) return null;\n\t\t\treturn (await storage.get({ storageUri: requested.storageUri })).response;\n\t\t} : void 0,\n\t\treadStorageText,\n\t\tresolveFileUrl\n\t};\n};\n//#endregion\nexport { createStorageAccess };\n", "import { createHotUpdaterHandlers } from \"./handler.mjs\";\nimport { createInsightsProvider } from \"./insights/bounded/provider.mjs\";\nimport { authenticateApiKey, createApiKeyManagement, normalizeApiKeyHeaderName } from \"./apiKeys.mjs\";\nimport { createDatabasePluginCore } from \"./db/databasePluginCore.mjs\";\nimport { createSchemaReadinessChecker } from \"./db/schemaReadiness.mjs\";\nimport { isDatabasePlugin } from \"./db/types.mjs\";\nimport { createStorageAccess } from \"./storageAccess.mjs\";\nimport { assertStorageOperations } from \"@hot-updater/plugin-core\";\n//#region src/createHotUpdaterCore.ts\nconst normalizeClientAccess = (value) => {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) throw new TypeError(\"clientAccess must be an object.\");\n\tconst policy = value;\n\tif (policy.type === \"public\") return { type: \"public\" };\n\tif (policy.type === \"api-key\") return {\n\t\theaderName: normalizeApiKeyHeaderName(policy.headerName),\n\t\ttype: \"api-key\"\n\t};\n\tthrow new TypeError(\"clientAccess.type must be either \\\"public\\\" or \\\"api-key\\\".\");\n};\nconst hotUpdaterCoreMetadata = Symbol.for(\"@hot-updater/server/core-metadata\");\nfunction getHotUpdaterCoreMetadata(hotUpdater) {\n\treturn hotUpdater[hotUpdaterCoreMetadata];\n}\nfunction createHotUpdaterCore(options) {\n\tfor (const key of [\"authorityId\", \"catalogId\"]) if (Object.hasOwn(options, key)) throw new TypeError(`Remove ${key} from createHotUpdater options. Catalog identity is managed internally.`);\n\tconst database = options.database;\n\tconst { downloadStorageObject, readStorageText, resolveFileUrl } = createStorageAccess((options.storage ?? []).map((storage) => {\n\t\tassertStorageOperations(storage, [\"get\", \"getDownloadUrl\"]);\n\t\treturn storage;\n\t}));\n\tconst adapterCapabilities = database;\n\tif (!isDatabasePlugin(database)) throw new Error(\"@hot-updater/server only supports database plugins.\");\n\tconst plugin = database;\n\tconst assertSchemaReady = createSchemaReadinessChecker(adapterCapabilities.adapterName ?? plugin.name, adapterCapabilities.createMigrator);\n\tconst core = createDatabasePluginCore(plugin, resolveFileUrl, {\n\t\tbeforeOperation: assertSchemaReady,\n\t\treadStorageText\n\t});\n\tconst clientAccess = normalizeClientAccess(options.clientAccess);\n\tconst insights = createInsightsProvider({\n\t\tasync append(row) {\n\t\t\tawait assertSchemaReady();\n\t\t\treturn plugin.models.insights.append(row);\n\t\t},\n\t\tasync scan(input) {\n\t\t\tawait assertSchemaReady();\n\t\t\treturn plugin.models.insights.scan(input);\n\t\t}\n\t});\n\tconst apiKeys = createApiKeyManagement({\n\t\tapiKeys: plugin.models.apiKeys,\n\t\tbeforeOperation: assertSchemaReady\n\t});\n\tconst handlers = createHotUpdaterHandlers(core.api, insights, clientAccess.type === \"api-key\" ? {\n\t\tauthenticate: (request) => authenticateApiKey({\n\t\t\tapiKeys: plugin.models.apiKeys,\n\t\t\tbeforeLookup: assertSchemaReady,\n\t\t\theaderName: clientAccess.headerName,\n\t\t\trequest\n\t\t}),\n\t\theaderName: clientAccess.headerName\n\t} : void 0, downloadStorageObject);\n\tconst api = Object.assign({\n\t\tadapterName: adapterCapabilities.adapterName ?? core.adapterName,\n\t\tinsights,\n\t\tapiKeys,\n\t\thandlers\n\t}, core.api);\n\tObject.defineProperty(api, hotUpdaterCoreMetadata, {\n\t\tenumerable: false,\n\t\tvalue: {\n\t\t\tadapterCapabilities,\n\t\t\tcore\n\t\t}\n\t});\n\treturn {\n\t\tapi,\n\t\tadapterCapabilities,\n\t\tcore\n\t};\n}\nfunction createHotUpdater(options) {\n\treturn createHotUpdaterCore(options).api;\n}\n//#endregion\nexport { createHotUpdater, getHotUpdaterCoreMetadata };\n", "import { createHotUpdater } from \"@hot-updater/server\";\nimport { env } from \"cloudflare:workers\";\nimport { Hono } from \"hono\";\n\nimport { d1Database, r2Storage } from \"../../src/worker\";\n\nexport type CloudflareWorkerEnv = {\n DB: {\n batch: D1Database[\"batch\"];\n prepare: D1Database[\"prepare\"];\n };\n BUCKET: R2Bucket;\n BUCKET_NAME: string;\n STORAGE_DOWNLOAD_URL_SIGNING_KEY: string;\n};\n\nexport const HOT_UPDATER_BASE_PATH = \"/\";\n\nconst hotUpdater = createHotUpdater({\n database: d1Database(env.DB),\n clientAccess: { type: \"api-key\" },\n storage: [\n r2Storage({\n bucket: env.BUCKET,\n bucketName: env.BUCKET_NAME,\n downloadUrlSigningKey: env.STORAGE_DOWNLOAD_URL_SIGNING_KEY,\n }),\n ],\n});\n\nconst app = new Hono<{ Bindings: CloudflareWorkerEnv }>();\n\napp.mount(HOT_UPDATER_BASE_PATH, (request: Request) =>\n hotUpdater.handlers.client(request),\n);\n\nexport default app;\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/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/buffer.ts\nimport { sha256 } from \"./crypto.js\";\nvar equal = (a, b) => {\n if (a === b) {\n return true;\n }\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n const va = new DataView(a);\n const vb = new DataView(b);\n let i = va.byteLength;\n while (i--) {\n if (va.getUint8(i) !== vb.getUint8(i)) {\n return false;\n }\n }\n return true;\n};\nvar constantTimeEqualString = (a, b) => {\n const aLen = a.length;\n const bLen = b.length;\n const maxLen = Math.max(aLen, bLen);\n let out = aLen ^ bLen;\n for (let i = 0; i < maxLen; i++) {\n const aChar = i < aLen ? a.charCodeAt(i) : 0;\n const bChar = i < bLen ? b.charCodeAt(i) : 0;\n out |= aChar ^ bChar;\n }\n return out === 0;\n};\nvar timingSafeEqualString = async (a, b, hashFunction) => {\n if (!hashFunction) {\n hashFunction = sha256;\n }\n const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n if (sa == null || sb == null || typeof sa !== \"string\" || typeof sb !== \"string\") {\n return false;\n }\n const hashEqual = constantTimeEqualString(sa, sb);\n const originalEqual = constantTimeEqualString(a, b);\n return hashEqual && originalEqual;\n};\nvar timingSafeEqual = async (a, b, hashFunction) => {\n if (typeof a === \"string\" && typeof b === \"string\") {\n return timingSafeEqualString(a, b, hashFunction);\n }\n if (!hashFunction) {\n hashFunction = sha256;\n }\n const [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n if (!sa || !sb || typeof sa !== \"string\" || typeof sb !== \"string\") {\n return false;\n }\n return timingSafeEqualString(sa, sb);\n};\nvar bufferToString = (buffer) => {\n if (buffer instanceof ArrayBuffer) {\n const enc = new TextDecoder(\"utf-8\");\n return enc.decode(buffer);\n }\n return buffer;\n};\nvar bufferToFormData = (arrayBuffer, contentType) => {\n const response = new Response(arrayBuffer, {\n headers: {\n // Normalize the media type (case-insensitive) while keeping parameters like the boundary\n \"Content-Type\": contentType.replace(/^[^;]+/, (mediaType) => mediaType.toLowerCase())\n }\n });\n return response.formData();\n};\nexport {\n bufferToFormData,\n bufferToString,\n equal,\n timingSafeEqual\n};\n", "// src/utils/body.ts\nimport { bufferToFormData } from \"./buffer.js\";\nvar isRawRequest = (request) => \"headers\" in request;\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n const contentType = headers.get(\"Content-Type\");\n const mediaType = contentType?.split(\";\")[0].trim().toLowerCase();\n if (mediaType === \"multipart/form-data\" || mediaType === \"application/x-www-form-urlencoded\") {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n if (!isRawRequest(request) && request.bodyCache.formData) {\n return convertFormDataToBodyData(\n await request.bodyCache.formData,\n options\n );\n }\n const headers = isRawRequest(request) ? request.headers : request.raw.headers;\n const arrayBuffer = await request.arrayBuffer();\n const formDataPromise = bufferToFormData(arrayBuffer, headers.get(\"Content-Type\") || \"\");\n if (!isRawRequest(request)) {\n request.bodyCache.formData = formDataPromise;\n }\n const formData = await formDataPromise;\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 = /* @__PURE__ */ Object.create(null);\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/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 = /* @__PURE__ */ Object.create(null);\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 * `.bytes()` parses the request body as a `Uint8Array`.\n *\n * @see {@link https://hono.dev/docs/api/request#bytes}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.bytes()\n * })\n * ```\n */\n bytes() {\n return this.#cachedBody(\"arrayBuffer\").then((buffer) => new Uint8Array(buffer));\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 body = await req[cacheKey]();\n const headers = req.header();\n if (body instanceof FormData) {\n delete headers[\"content-type\"];\n }\n const requestInit = {\n body,\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers,\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\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/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/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler, r.basePath);\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 = this.getPath(request).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, baseRoutePath) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = {\n basePath: baseRoutePath !== void 0 ? mergePath(this._basePath, baseRoutePath) : this._basePath,\n path,\n method,\n handler\n };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar 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 (m[0].length === restPathString.length && child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n node.#params,\n params\n );\n }\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", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "import type {\n BundlePatchRow,\n BundleRow,\n BundleEventRow,\n ChannelRow,\n ApiKeyRow,\n ReleaseCatalogRow,\n ReleaseRow,\n} from \"@hot-updater/plugin-core\";\nimport { isDatabaseMetadataObject } from \"@hot-updater/plugin-core\";\nimport type {\n DatabaseModel,\n DatabaseRow,\n} from \"@hot-updater/plugin-core/internal\";\n\nclass InvalidD1RowError extends Error {\n readonly name = \"InvalidD1RowError\";\n readonly model: DatabaseModel;\n\n constructor(model: DatabaseModel) {\n super(`D1 returned an invalid ${model} row`);\n this.model = model;\n }\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): string => {\n const value = row[field];\n if (typeof value !== \"string\") throw new InvalidD1RowError(model);\n return value;\n};\n\nconst nullableString = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): string | null => {\n const value = row[field];\n if (value === null) return null;\n if (typeof value !== \"string\") throw new InvalidD1RowError(model);\n return value;\n};\n\nconst numberValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): number => {\n const value = row[field];\n if (typeof value !== \"number\") throw new InvalidD1RowError(model);\n return value;\n};\n\nconst byteSizeValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): number => {\n const value = row[field];\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0) {\n throw new InvalidD1RowError(model);\n }\n return value;\n};\n\nconst booleanValue = (\n row: Record<string, unknown>,\n field: string,\n model: DatabaseModel,\n): boolean => {\n const value = row[field];\n if (value === true || value === 1) return true;\n if (value === false || value === 0) return false;\n throw new InvalidD1RowError(model);\n};\n\nconst jsonValue = (value: unknown, model: DatabaseModel): unknown => {\n if (typeof value !== \"string\") throw new InvalidD1RowError(model);\n try {\n return JSON.parse(value);\n } catch (error) {\n if (error instanceof SyntaxError) throw new InvalidD1RowError(model);\n throw error;\n }\n};\n\nconst metadata = (row: Record<string, unknown>) => {\n const value = jsonValue(row[\"metadata\"], \"bundles\");\n if (!isDatabaseMetadataObject(value)) {\n throw new InvalidD1RowError(\"bundles\");\n }\n return value;\n};\n\nconst bundleRow = (row: Record<string, unknown>): BundleRow => {\n const platform = stringValue(row, \"platform\", \"bundles\");\n if (platform !== \"ios\" && platform !== \"android\") {\n throw new InvalidD1RowError(\"bundles\");\n }\n return {\n id: stringValue(row, \"id\", \"bundles\"),\n platform,\n file_hash: stringValue(row, \"file_hash\", \"bundles\"),\n git_commit_hash: nullableString(row, \"git_commit_hash\", \"bundles\"),\n storage_uri: stringValue(row, \"storage_uri\", \"bundles\"),\n archive_byte_size:\n row[\"archive_byte_size\"] === undefined\n ? 0\n : byteSizeValue(row, \"archive_byte_size\", \"bundles\"),\n metadata: metadata(row),\n manifest_storage_uri: nullableString(\n row,\n \"manifest_storage_uri\",\n \"bundles\",\n ),\n manifest_file_hash: nullableString(row, \"manifest_file_hash\", \"bundles\"),\n asset_base_storage_uri: nullableString(\n row,\n \"asset_base_storage_uri\",\n \"bundles\",\n ),\n };\n};\n\nconst patchRow = (row: Record<string, unknown>): BundlePatchRow => ({\n id: stringValue(row, \"id\", \"bundle_patches\"),\n bundle_id: stringValue(row, \"bundle_id\", \"bundle_patches\"),\n base_bundle_id: stringValue(row, \"base_bundle_id\", \"bundle_patches\"),\n base_file_hash: stringValue(row, \"base_file_hash\", \"bundle_patches\"),\n patch_file_hash: stringValue(row, \"patch_file_hash\", \"bundle_patches\"),\n patch_storage_uri: stringValue(row, \"patch_storage_uri\", \"bundle_patches\"),\n byte_size: byteSizeValue(row, \"byte_size\", \"bundle_patches\"),\n order_index: numberValue(row, \"order_index\", \"bundle_patches\"),\n});\n\nconst channelRow = (row: Record<string, unknown>): ChannelRow => ({\n id: stringValue(row, \"id\", \"channels\"),\n name: stringValue(row, \"name\", \"channels\"),\n});\n\nconst eventRow = (row: Record<string, unknown>): BundleEventRow => {\n const type = stringValue(row, \"type\", \"bundle_events\");\n const platform = stringValue(row, \"platform\", \"bundle_events\");\n const fromBundleId = nullableString(row, \"from_bundle_id\", \"bundle_events\");\n const updateStrategy = nullableString(\n row,\n \"update_strategy\",\n \"bundle_events\",\n );\n if (\n (platform !== \"ios\" && platform !== \"android\") ||\n !(\n ((type === \"UPDATE_APPLIED\" ||\n type === \"RECOVERED\" ||\n type === \"RELEASE_ADOPTED\") &&\n typeof fromBundleId === \"string\" &&\n (updateStrategy === \"fingerprint\" ||\n updateStrategy === \"appVersion\")) ||\n (type === \"UNCHANGED\" && fromBundleId === null && updateStrategy === null)\n )\n ) {\n throw new InvalidD1RowError(\"bundle_events\");\n }\n return {\n id: stringValue(row, \"id\", \"bundle_events\"),\n type,\n install_id: stringValue(row, \"install_id\", \"bundle_events\"),\n user_id: nullableString(row, \"user_id\", \"bundle_events\"),\n username: nullableString(row, \"username\", \"bundle_events\"),\n from_release_id: nullableString(row, \"from_release_id\", \"bundle_events\"),\n from_bundle_id: fromBundleId,\n to_release_id: nullableString(row, \"to_release_id\", \"bundle_events\"),\n to_bundle_id: stringValue(row, \"to_bundle_id\", \"bundle_events\"),\n platform,\n app_version: stringValue(row, \"app_version\", \"bundle_events\"),\n channel: stringValue(row, \"channel\", \"bundle_events\"),\n cohort: stringValue(row, \"cohort\", \"bundle_events\"),\n update_strategy: updateStrategy,\n fingerprint_hash: nullableString(row, \"fingerprint_hash\", \"bundle_events\"),\n sdk_version: nullableString(row, \"sdk_version\", \"bundle_events\"),\n received_at_ms: numberValue(row, \"received_at_ms\", \"bundle_events\"),\n } as BundleEventRow;\n};\n\nconst apiKeyRow = (row: Record<string, unknown>): ApiKeyRow => {\n const role = stringValue(row, \"role\", \"api_keys\");\n if (role !== \"client\") throw new InvalidD1RowError(\"api_keys\");\n const revokedAt = row[\"revoked_at_ms\"];\n return {\n id: stringValue(row, \"id\", \"api_keys\"),\n hash: stringValue(row, \"hash\", \"api_keys\"),\n name: stringValue(row, \"name\", \"api_keys\"),\n prefix: stringValue(row, \"prefix\", \"api_keys\"),\n role,\n created_at_ms: numberValue(row, \"created_at_ms\", \"api_keys\"),\n revoked_at_ms:\n revokedAt === null ? null : numberValue(row, \"revoked_at_ms\", \"api_keys\"),\n };\n};\n\nconst releaseTargetCohorts = (\n row: Record<string, unknown>,\n): readonly string[] => {\n const value = jsonValue(row[\"target_cohorts\"], \"releases\");\n if (!Array.isArray(value) || value.some((item) => typeof item !== \"string\")) {\n throw new InvalidD1RowError(\"releases\");\n }\n return value.filter((item): item is string => typeof item === \"string\");\n};\n\nconst releaseRow = (row: Record<string, unknown>): ReleaseRow => {\n const platform = stringValue(row, \"platform\", \"releases\");\n const kind = stringValue(row, \"kind\", \"releases\");\n const strategy = stringValue(row, \"strategy\", \"releases\");\n const operation = stringValue(row, \"operation\", \"releases\");\n if (\n (platform !== \"ios\" && platform !== \"android\") ||\n (kind !== \"BUNDLE\" && kind !== \"EMBEDDED\") ||\n (strategy !== \"APP_VERSION\" && strategy !== \"FINGERPRINT\") ||\n (operation !== \"DEPLOY\" &&\n operation !== \"PROMOTE\" &&\n operation !== \"ROLLBACK\")\n ) {\n throw new InvalidD1RowError(\"releases\");\n }\n return {\n id: stringValue(row, \"id\", \"releases\"),\n revision: numberValue(row, \"revision\", \"releases\"),\n scope_key: stringValue(row, \"scope_key\", \"releases\"),\n channel_id: stringValue(row, \"channel_id\", \"releases\"),\n platform,\n kind,\n bundle_id: nullableString(row, \"bundle_id\", \"releases\"),\n strategy,\n target_app_version: nullableString(row, \"target_app_version\", \"releases\"),\n fingerprint_hash: nullableString(row, \"fingerprint_hash\", \"releases\"),\n enabled: booleanValue(row, \"enabled\", \"releases\"),\n should_force_update: booleanValue(row, \"should_force_update\", \"releases\"),\n message: nullableString(row, \"message\", \"releases\"),\n rollout_cohort_count: numberValue(row, \"rollout_cohort_count\", \"releases\"),\n target_cohorts: releaseTargetCohorts(row),\n operation,\n source_release_id: nullableString(row, \"source_release_id\", \"releases\"),\n created_at_ms: numberValue(row, \"created_at_ms\", \"releases\"),\n updated_at_ms: numberValue(row, \"updated_at_ms\", \"releases\"),\n };\n};\n\nconst releaseCatalogRow = (row: Record<string, unknown>): ReleaseCatalogRow => {\n const platform = stringValue(row, \"platform\", \"release_catalogs\");\n const strategy = stringValue(row, \"strategy\", \"release_catalogs\");\n if (\n (platform !== \"ios\" && platform !== \"android\") ||\n (strategy !== \"APP_VERSION\" && strategy !== \"FINGERPRINT\")\n ) {\n throw new InvalidD1RowError(\"release_catalogs\");\n }\n return {\n scope_key: stringValue(row, \"scope_key\", \"release_catalogs\"),\n catalog_id: stringValue(row, \"catalog_id\", \"release_catalogs\"),\n strategy,\n channel_id: stringValue(row, \"channel_id\", \"release_catalogs\"),\n channel_key: stringValue(row, \"channel_key\", \"release_catalogs\"),\n platform,\n fingerprint_hash: nullableString(\n row,\n \"fingerprint_hash\",\n \"release_catalogs\",\n ),\n generation: numberValue(row, \"generation\", \"release_catalogs\"),\n payload: stringValue(row, \"payload\", \"release_catalogs\"),\n catalog_hash: stringValue(row, \"catalog_hash\", \"release_catalogs\"),\n byte_size: numberValue(row, \"byte_size\", \"release_catalogs\"),\n is_tombstone: booleanValue(row, \"is_tombstone\", \"release_catalogs\"),\n updated_at_ms: numberValue(row, \"updated_at_ms\", \"release_catalogs\"),\n };\n};\n\nexport function parseD1Row(model: \"bundles\", value: unknown): BundleRow;\nexport function parseD1Row(model: \"channels\", value: unknown): ChannelRow;\nexport function parseD1Row(\n model: \"bundle_patches\",\n value: unknown,\n): BundlePatchRow;\nexport function parseD1Row(\n model: \"bundle_events\",\n value: unknown,\n): BundleEventRow;\nexport function parseD1Row(model: \"api_keys\", value: unknown): ApiKeyRow;\nexport function parseD1Row(model: \"releases\", value: unknown): ReleaseRow;\nexport function parseD1Row(\n model: \"release_catalogs\",\n value: unknown,\n): ReleaseCatalogRow;\nexport function parseD1Row(\n model: DatabaseModel,\n value: unknown,\n): DatabaseRow<DatabaseModel>;\nexport function parseD1Row(\n model: DatabaseModel,\n value: unknown,\n): DatabaseRow<DatabaseModel> {\n if (!isRecord(value)) throw new InvalidD1RowError(model);\n switch (model) {\n case \"bundles\":\n return bundleRow(value);\n case \"bundle_patches\":\n return patchRow(value);\n case \"channels\":\n return channelRow(value);\n case \"bundle_events\":\n return eventRow(value);\n case \"api_keys\":\n return apiKeyRow(value);\n case \"releases\":\n return releaseRow(value);\n case \"release_catalogs\":\n return releaseCatalogRow(value);\n }\n}\n", "import type {\n DatabaseStringComparisonMode,\n DatabaseWhereConnector,\n DatabaseWhereOperator,\n} from \"@hot-updater/plugin-core/internal\";\n\nexport type D1Query = {\n readonly sql: string;\n readonly params: readonly string[];\n};\n\ntype D1Predicate = {\n readonly field: string;\n readonly operator?: DatabaseWhereOperator;\n readonly value: unknown;\n readonly connector?: DatabaseWhereConnector;\n readonly mode?: DatabaseStringComparisonMode;\n};\n\ntype D1Sort = {\n readonly field: string;\n readonly direction: \"asc\" | \"desc\";\n readonly nulls?: \"first\" | \"last\";\n};\n\nclass InvalidD1PredicateError extends Error {\n readonly name = \"InvalidD1PredicateError\";\n}\n\nconst encodeD1Value = (value: unknown): string => {\n const encoded = JSON.stringify(value);\n if (encoded === undefined) {\n throw new TypeError(\"D1 values must be JSON-serializable.\");\n }\n return encoded;\n};\n\nconst bind = (value: unknown): D1Query => ({\n sql: \"json_extract(?, '$')\",\n params: [encodeD1Value(value)],\n});\n\nconst escapeLikePattern = (value: string): string =>\n value.replaceAll(\"\\\\\", \"\\\\\\\\\").replaceAll(\"%\", \"\\\\%\").replaceAll(\"_\", \"\\\\_\");\n\nconst stringPredicate = (\n condition: D1Predicate,\n operator: \"contains\" | \"ends_with\" | \"starts_with\",\n): D1Query => {\n if (typeof condition.value !== \"string\") {\n throw new InvalidD1PredicateError();\n }\n\n if (condition.mode !== \"insensitive\") {\n const parameter = bind(condition.value);\n const column = `${condition.field} COLLATE BINARY`;\n const value = `${parameter.sql} COLLATE BINARY`;\n if (operator === \"contains\" || operator === \"starts_with\") {\n return {\n sql: `instr(${column}, ${value}) ${operator === \"contains\" ? \"> 0\" : \"= 1\"}`,\n params: parameter.params,\n };\n }\n return {\n sql: `substr(${column}, length(${condition.field}) - length(${parameter.sql}) + 1) = ${value}`,\n params: [...parameter.params, ...parameter.params],\n };\n }\n\n const literal = escapeLikePattern(condition.value);\n const pattern =\n operator === \"contains\"\n ? `%${literal}%`\n : operator === \"starts_with\"\n ? `${literal}%`\n : `%${literal}`;\n const parameter = bind(pattern);\n return {\n sql: `lower(${condition.field}) LIKE lower(${parameter.sql}) ESCAPE '\\\\'`,\n params: parameter.params,\n };\n};\n\nconst predicate = (condition: D1Predicate): D1Query => {\n const operator = condition.operator ?? \"eq\";\n switch (operator) {\n case \"eq\":\n case \"ne\": {\n if (condition.value === null) {\n return {\n sql: `${condition.field} IS ${operator === \"ne\" ? \"NOT \" : \"\"}NULL`,\n params: [],\n };\n }\n const parameter = bind(condition.value);\n const insensitive =\n \"mode\" in condition && condition.mode === \"insensitive\";\n const column = insensitive\n ? `lower(${condition.field})`\n : condition.field;\n const value = insensitive ? `lower(${parameter.sql})` : parameter.sql;\n return {\n sql: `${column} ${operator === \"eq\" ? \"=\" : \"<>\"} ${value}`,\n params: parameter.params,\n };\n }\n case \"gt\":\n case \"gte\":\n case \"lt\":\n case \"lte\": {\n const sqlOperator = {\n gt: \">\",\n gte: \">=\",\n lt: \"<\",\n lte: \"<=\",\n }[operator];\n const parameter = bind(condition.value);\n return {\n sql: `${condition.field} ${sqlOperator} ${parameter.sql}`,\n params: parameter.params,\n };\n }\n case \"in\":\n case \"not_in\": {\n if (!Array.isArray(condition.value)) {\n throw new InvalidD1PredicateError();\n }\n if (condition.value.length === 0) {\n return { sql: operator === \"not_in\" ? \"1 = 1\" : \"1 = 0\", params: [] };\n }\n return {\n sql: `${condition.field} ${operator === \"not_in\" ? \"NOT \" : \"\"}IN (SELECT value FROM json_each(?))`,\n params: [encodeD1Value(condition.value)],\n };\n }\n case \"contains\":\n case \"starts_with\":\n case \"ends_with\":\n return stringPredicate(condition, operator);\n }\n};\n\nexport const buildD1Where = (\n where: readonly D1Predicate[] | undefined,\n): D1Query => {\n const [first, ...rest] = where ?? [];\n if (first === undefined) return { sql: \"\", params: [] };\n const initial = predicate(first);\n let sql = initial.sql;\n const params = [...initial.params];\n for (const condition of rest) {\n const next = predicate(condition);\n sql = `(${sql} ${condition.connector === \"OR\" ? \"OR\" : \"AND\"} ${next.sql})`;\n params.push(...next.params);\n }\n return { sql: ` WHERE ${sql}`, params };\n};\n\nexport const buildD1Order = (orderBy: readonly D1Sort[] | undefined): string =>\n orderBy === undefined\n ? \"\"\n : ` ORDER BY ${orderBy\n .map(\n (clause) =>\n `${clause.field} ${clause.direction.toUpperCase()}${\n clause.nulls ? ` NULLS ${clause.nulls.toUpperCase()}` : \"\"\n }`,\n )\n .join(\", \")}`;\n\nexport const d1Placeholders = (count: number): string =>\n Array.from({ length: count }, () => \"json_extract(?, '$')\").join(\", \");\n\nexport const encodeD1Values = (values: readonly unknown[]): readonly string[] =>\n values.map(encodeD1Value);\n", "import type {\n CountDatabaseImplementationInput,\n DatabaseImplementationResult,\n DatabaseModel,\n FindManyDatabaseImplementationInput,\n} from \"@hot-updater/plugin-core/internal\";\n\nimport type { D1Executor } from \"./d1Implementation\";\nimport { parseD1Row } from \"./d1Rows\";\nimport { buildD1Order, buildD1Where, encodeD1Values } from \"./d1Sql\";\n\nexport const d1TableNames = {\n bundles: \"bundles\",\n bundle_patches: \"bundle_patches\",\n channels: \"channels\",\n bundle_events: \"bundle_events\",\n api_keys: \"api_keys\",\n release_catalogs: \"release_catalogs\",\n releases: \"releases\",\n} as const satisfies Record<DatabaseModel, string>;\n\nexport class D1QueryResultError extends Error {\n readonly name = \"D1QueryResultError\";\n readonly operation = \"count\";\n\n constructor(readonly result: unknown) {\n super(\"D1 count query returned a malformed first row\");\n }\n}\n\nexport const countD1Rows = async (\n executor: D1Executor,\n input: CountDatabaseImplementationInput,\n): Promise<number> => {\n const where = buildD1Where(input.where);\n const table = d1TableNames[input.model];\n const source =\n input.distinct === undefined\n ? `${table}${where.sql}`\n : `(SELECT DISTINCT ${input.distinct.join(\", \")} FROM ${table}${where.sql}) AS distinct_rows`;\n const rows = await executor.query(\n `SELECT COUNT(*) AS count FROM ${source}`,\n where.params,\n );\n const row = rows[0];\n if (typeof row !== \"object\" || row === null || Array.isArray(row)) {\n throw new D1QueryResultError(row);\n }\n const count = Reflect.get(row, \"count\");\n if (typeof count !== \"number\" || !Number.isFinite(count)) {\n throw new D1QueryResultError(row);\n }\n return count;\n};\n\nexport const findManyD1Rows = async (\n executor: D1Executor,\n input: FindManyDatabaseImplementationInput,\n): Promise<readonly DatabaseImplementationResult[]> => {\n const where = buildD1Where(input.where);\n const orderBy = input.orderBy;\n const order = buildD1Order(orderBy);\n const table = d1TableNames[input.model];\n const source =\n input.distinctOn === undefined\n ? `SELECT * FROM ${table}${where.sql}${order}`\n : `SELECT * FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${input.distinctOn.fields.join(\", \")}${order}) AS __hot_updater_rank FROM ${table}${where.sql}) AS distinct_rows WHERE __hot_updater_rank = 1${order}`;\n const pageParams = encodeD1Values([input.limit, input.offset]);\n const rows = await executor.query(\n `${source} LIMIT json_extract(?, '$') OFFSET json_extract(?, '$')`,\n [...where.params, ...pageParams],\n );\n switch (input.model) {\n case \"bundles\":\n return rows.map((row) => parseD1Row(\"bundles\", row));\n case \"bundle_patches\":\n return rows.map((row) => parseD1Row(\"bundle_patches\", row));\n case \"channels\":\n return rows.map((row) => parseD1Row(\"channels\", row));\n case \"bundle_events\":\n return rows.map((row) => parseD1Row(\"bundle_events\", row));\n case \"api_keys\":\n return rows.map((row) => parseD1Row(\"api_keys\", row));\n case \"releases\":\n return rows.map((row) => parseD1Row(\"releases\", row));\n case \"release_catalogs\":\n return rows.map((row) => parseD1Row(\"release_catalogs\", row));\n }\n};\n", "import type {\n BundlePatchRow,\n BundleRow,\n ChannelInsertInput,\n ChannelInsertResult,\n ChannelRow,\n ChannelDeleteInput,\n ChannelDeleteResult,\n DatabaseChange,\n DatabaseCommit,\n DatabaseCommitExpectation,\n DatabaseCommitResult,\n} from \"@hot-updater/plugin-core\";\nimport type {\n CreateDatabaseImplementationInput,\n DatabasePluginImplementation,\n DeleteDatabaseImplementationInput,\n FindOneDatabaseImplementationInput,\n UpdateDatabaseImplementationInput,\n} from \"@hot-updater/plugin-core/internal\";\n\nimport { countD1Rows, d1TableNames, findManyD1Rows } from \"./d1Query\";\nimport { parseD1Row } from \"./d1Rows\";\nimport { buildD1Where, d1Placeholders, encodeD1Values } from \"./d1Sql\";\n\nexport interface D1Executor {\n query(sql: string, params: readonly string[]): Promise<readonly unknown[]>;\n batch(\n statements: readonly D1Statement[],\n ): Promise<readonly (readonly unknown[])[]>;\n}\n\nexport interface D1Statement {\n readonly sql: string;\n readonly params: readonly string[];\n}\n\ntype D1Guard = {\n readonly sql: string;\n readonly params: readonly string[];\n};\n\nconst EXPECTATION_CONFLICT_MARKER = \"HOT_UPDATER_COMMIT_EXPECTATION_CONFLICT\";\n\nconst expectationGuard = (\n expectations: readonly DatabaseCommitExpectation[],\n): D1Guard => {\n const clauses: string[] = [];\n const params: string[] = [];\n for (const expectation of expectations) {\n const isRelease = expectation.model === \"releases\";\n const table = isRelease ? \"releases\" : \"release_catalogs\";\n const keyField = isRelease ? \"id\" : \"scope_key\";\n const versionField = isRelease ? \"revision\" : \"generation\";\n const key = isRelease ? expectation.id : expectation.scopeKey;\n const version = isRelease ? expectation.revision : expectation.generation;\n if (version === null) {\n clauses.push(\n `NOT EXISTS (SELECT 1 FROM ${table} WHERE ${keyField} = json_extract(?, '$'))`,\n );\n params.push(...encodeD1Values([key]));\n } else {\n clauses.push(\n `EXISTS (SELECT 1 FROM ${table} WHERE ${keyField} = json_extract(?, '$') AND ${versionField} = json_extract(?, '$'))`,\n );\n params.push(...encodeD1Values([key, version]));\n }\n }\n return { sql: clauses.join(\" AND \") || \"1\", params };\n};\n\nconst readVersion = (\n row: unknown,\n field: \"generation\" | \"revision\",\n): number | null => {\n if (typeof row !== \"object\" || row === null) return null;\n const value = Reflect.get(row, field);\n return typeof value === \"number\" ? value : null;\n};\n\nconst expectationConflict = async (\n executor: D1Executor,\n expectations: readonly DatabaseCommitExpectation[],\n): Promise<DatabaseCommitResult | null> => {\n for (const expectation of expectations) {\n const isRelease = expectation.model === \"releases\";\n const table = isRelease ? \"releases\" : \"release_catalogs\";\n const keyField = isRelease ? \"id\" : \"scope_key\";\n const versionField = isRelease ? \"revision\" : \"generation\";\n const key = isRelease ? expectation.id : expectation.scopeKey;\n const expectedVersion = isRelease\n ? expectation.revision\n : expectation.generation;\n const rows = await executor.query(\n `SELECT ${versionField} FROM ${table} WHERE ${keyField} = json_extract(?, '$') LIMIT 1`,\n encodeD1Values([key]),\n );\n const actualVersion = readVersion(rows[0], versionField);\n if (actualVersion !== expectedVersion) {\n return {\n committed: false,\n conflict: {\n actualVersion,\n changeIndex: -1,\n expectedVersion,\n key,\n model: expectation.model,\n reason: \"version_conflict\",\n },\n };\n }\n }\n return null;\n};\n\nconst isExpectationConflictError = (error: unknown): boolean => {\n const message = error instanceof Error ? error.message : String(error);\n return (\n message.includes(EXPECTATION_CONFLICT_MARKER) ||\n message.toLowerCase().includes(\"malformed json\")\n );\n};\n\nconst bundleValues = (row: BundleRow): readonly unknown[] => [\n row.id,\n row.platform,\n row.file_hash,\n row.git_commit_hash,\n row.storage_uri,\n row.archive_byte_size,\n row.metadata,\n row.manifest_storage_uri,\n row.manifest_file_hash,\n row.asset_base_storage_uri,\n];\n\nconst patchValues = (row: BundlePatchRow): readonly unknown[] => [\n row.id,\n row.bundle_id,\n row.base_bundle_id,\n row.base_file_hash,\n row.patch_file_hash,\n row.patch_storage_uri,\n row.byte_size,\n row.order_index,\n];\n\nconst channelValues = (row: ChannelRow): readonly unknown[] => [\n row.id,\n row.name,\n];\n\nconst insertQuery = (\n input: CreateDatabaseImplementationInput,\n guard?: D1Guard,\n conflictMode: \"returnExisting\" | \"ignore\" = \"returnExisting\",\n): D1Statement => {\n let columns: readonly string[];\n let values: readonly unknown[];\n switch (input.model) {\n case \"bundles\":\n columns = [\n \"id\",\n \"platform\",\n \"file_hash\",\n \"git_commit_hash\",\n \"storage_uri\",\n \"archive_byte_size\",\n \"metadata\",\n \"manifest_storage_uri\",\n \"manifest_file_hash\",\n \"asset_base_storage_uri\",\n ];\n values = bundleValues(input.data);\n break;\n case \"bundle_patches\":\n columns = [\n \"id\",\n \"bundle_id\",\n \"base_bundle_id\",\n \"base_file_hash\",\n \"patch_file_hash\",\n \"patch_storage_uri\",\n \"byte_size\",\n \"order_index\",\n ];\n values = patchValues(input.data);\n break;\n case \"channels\":\n columns = [\"id\", \"name\"];\n values = channelValues(input.data);\n break;\n case \"bundle_events\":\n case \"api_keys\":\n case \"release_catalogs\":\n case \"releases\":\n columns = Object.keys(input.data);\n values = Object.values(input.data);\n break;\n }\n\n const conflict =\n input.onConflict !== \"ignore\"\n ? \"\"\n : input.model === \"channels\"\n ? conflictMode === \"ignore\"\n ? \" ON CONFLICT(name) DO NOTHING\"\n : \" ON CONFLICT(name) DO UPDATE SET name = excluded.name\"\n : input.model === \"api_keys\"\n ? conflictMode === \"ignore\"\n ? \" ON CONFLICT(hash) DO NOTHING\"\n : \" ON CONFLICT(hash) DO UPDATE SET hash = excluded.hash\"\n : \"\";\n\n return {\n sql: `INSERT INTO ${d1TableNames[input.model]} (${columns.join(\", \")}) ${\n guard === undefined\n ? `VALUES (${d1Placeholders(values.length)})`\n : `SELECT ${d1Placeholders(values.length)} WHERE ${guard.sql}`\n }${conflict} RETURNING *`,\n params: [...encodeD1Values(values), ...(guard?.params ?? [])],\n };\n};\n\nconst updateEntries = (\n update: UpdateDatabaseImplementationInput[\"update\"],\n): readonly [string, unknown][] => Object.entries(update);\n\nconst updateQuery = (\n input: UpdateDatabaseImplementationInput,\n guard?: D1Guard,\n): D1Statement => {\n const entries = updateEntries(input.update);\n const where = buildD1Where(input.where);\n if (entries.length === 0) {\n return {\n sql: `SELECT * FROM ${d1TableNames[input.model]}${where.sql}${guard ? ` AND ${guard.sql}` : \"\"} LIMIT 1`,\n params: [...where.params, ...(guard?.params ?? [])],\n };\n }\n const assignments = entries\n .map(([field]) => `${field} = json_extract(?, '$')`)\n .join(\", \");\n return {\n sql: `UPDATE ${d1TableNames[input.model]} SET ${assignments}${where.sql}${guard ? ` AND ${guard.sql}` : \"\"} RETURNING *`,\n params: [\n ...encodeD1Values(entries.map(([, value]) => value)),\n ...where.params,\n ...(guard?.params ?? []),\n ],\n };\n};\n\nconst deleteQuery = (\n input: DeleteDatabaseImplementationInput,\n guard?: D1Guard,\n): D1Statement => {\n const where = buildD1Where(input.where);\n return {\n sql: `DELETE FROM ${d1TableNames[input.model]}${where.sql}${guard ? ` AND ${guard.sql}` : \"\"}`,\n params: [...where.params, ...(guard?.params ?? [])],\n };\n};\n\ntype D1RequiredRow = {\n readonly model: \"bundles\" | \"api_keys\" | \"releases\";\n readonly id: string;\n readonly changeIndex: number;\n};\n\ntype D1Check = {\n readonly changeIndex: number;\n readonly resultIndex: number;\n readonly conflictWhen: \"empty\" | \"nonempty\";\n readonly reason: \"not_found\" | \"referenced\";\n};\n\ntype D1CommitPlan = {\n readonly checks: readonly D1Check[];\n readonly statements: readonly D1Statement[];\n};\n\nconst insertedKey = (change: DatabaseChange): string | undefined => {\n if (change.operation !== \"insert\") return undefined;\n if (change.model === \"bundles\") return `bundles:${change.row.id}`;\n if (change.model === \"apiKeys\") {\n return `api_keys:${change.row.id}`;\n }\n if (change.model === \"releases\") {\n return `releases:${change.row.id}`;\n }\n return undefined;\n};\n\nconst requiredRow = (\n change: DatabaseChange,\n changeIndex: number,\n): D1RequiredRow | undefined => {\n if (change.operation !== \"update\") return undefined;\n if (change.model === \"bundles\") {\n return {\n model: \"bundles\",\n id: change.where.id,\n changeIndex,\n };\n }\n if (change.model === \"apiKeys\") {\n return {\n model: \"api_keys\",\n id: change.where.id,\n changeIndex,\n };\n }\n if (change.model === \"releases\") {\n return {\n model: \"releases\",\n id: change.where.id,\n changeIndex,\n };\n }\n return undefined;\n};\n\ntype D1ChannelDeletePrecondition = {\n readonly id: string;\n readonly excludedReleaseIds: readonly string[];\n readonly addedReferenceReleaseIds: readonly string[];\n};\n\nconst channelDeletePrecondition = (\n changes: readonly DatabaseChange[],\n changeIndex: number,\n channelId: string,\n): D1ChannelDeletePrecondition => {\n const releaseEffects = new Map<string, string | null>();\n for (const change of changes.slice(0, changeIndex)) {\n if (change.model !== \"releases\") continue;\n switch (change.operation) {\n case \"insert\":\n releaseEffects.set(change.row.id, change.row.channel_id);\n break;\n case \"update\":\n break;\n case \"delete\":\n releaseEffects.set(change.where.id, null);\n break;\n }\n }\n return {\n id: channelId,\n excludedReleaseIds: [...releaseEffects.keys()],\n addedReferenceReleaseIds: [...releaseEffects]\n .filter(([, finalChannelId]) => finalChannelId === channelId)\n .map(([releaseId]) => releaseId),\n };\n};\n\nconst changeQuery = (change: DatabaseChange, guard: D1Guard): D1Statement => {\n switch (change.model) {\n case \"bundles\":\n switch (change.operation) {\n case \"insert\":\n return insertQuery({ model: \"bundles\", data: change.row }, guard);\n case \"update\":\n return updateQuery(\n {\n model: \"bundles\",\n where: [{ field: \"id\", value: change.where.id }],\n update: change.update,\n },\n guard,\n );\n case \"delete\":\n return deleteQuery(\n {\n model: \"bundles\",\n where: [{ field: \"id\", value: change.where.id }],\n },\n guard,\n );\n }\n case \"bundlePatches\":\n return change.operation === \"insert\"\n ? insertQuery({ model: \"bundle_patches\", data: change.row }, guard)\n : deleteQuery(\n {\n model: \"bundle_patches\",\n where: [{ field: \"bundle_id\", value: change.where.bundleId }],\n },\n guard,\n );\n case \"releases\":\n switch (change.operation) {\n case \"insert\":\n return insertQuery({ model: \"releases\", data: change.row }, guard);\n case \"update\":\n return updateQuery(\n {\n model: \"releases\",\n where: [{ field: \"id\", value: change.where.id }],\n update: change.update,\n },\n guard,\n );\n case \"delete\":\n return deleteQuery(\n {\n model: \"releases\",\n where: [{ field: \"id\", value: change.where.id }],\n },\n guard,\n );\n }\n case \"releaseCatalogs\":\n return {\n sql: `INSERT INTO release_catalogs (${Object.keys(change.row).join(\", \")}) SELECT ${d1Placeholders(Object.keys(change.row).length)} WHERE ${guard.sql} ON CONFLICT(scope_key) DO UPDATE SET ${Object.keys(\n change.row,\n )\n .filter((field) => field !== \"scope_key\")\n .map((field) => `${field} = excluded.${field}`)\n .join(\", \")} RETURNING *`,\n params: [...encodeD1Values(Object.values(change.row)), ...guard.params],\n };\n case \"channels\":\n return change.operation === \"insert\"\n ? insertQuery(\n {\n model: \"channels\",\n data: change.row,\n onConflict: change.onConflict,\n },\n guard,\n \"ignore\",\n )\n : {\n sql: `DELETE FROM channels WHERE id = json_extract(?, '$') AND NOT EXISTS (SELECT 1 FROM releases WHERE channel_id = json_extract(?, '$')) AND ${guard.sql}`,\n params: [\n ...encodeD1Values([change.where.id, change.where.id]),\n ...guard.params,\n ],\n };\n case \"insights\":\n return insertQuery({ model: \"bundle_events\", data: change.row }, guard);\n case \"apiKeys\":\n return change.operation === \"insert\"\n ? insertQuery(\n {\n model: \"api_keys\",\n data: change.row,\n onConflict: change.onConflict,\n },\n guard,\n \"ignore\",\n )\n : updateQuery(\n {\n model: \"api_keys\",\n where: [{ field: \"id\", value: change.where.id }],\n update: { revoked_at_ms: change.update.revokedAtMs },\n },\n guard,\n );\n }\n};\n\nconst createCommitPlan = (input: DatabaseCommit): D1CommitPlan => {\n const checks: D1Check[] = [];\n const statements: D1Statement[] = [];\n const expectations = input.expectations ?? [];\n if (expectations.length > 0) {\n const guard = expectationGuard(expectations);\n statements.push({\n sql: `SELECT CASE WHEN ${guard.sql} THEN 1 ELSE json_extract('${EXPECTATION_CONFLICT_MARKER}', '$') END AS expectation_guard`,\n params: guard.params,\n });\n }\n const requiredRows: D1RequiredRow[] = [];\n const channelDeletes: D1ChannelDeletePrecondition[] = [];\n const inserted = new Set<string>();\n for (const [changeIndex, change] of input.changes.entries()) {\n const required = requiredRow(change, changeIndex);\n if (required !== undefined) {\n if (!inserted.has(`${required.model}:${required.id}`)) {\n requiredRows.push(required);\n checks.push({\n changeIndex,\n resultIndex: statements.length,\n conflictWhen: \"empty\",\n reason: \"not_found\",\n });\n statements.push({\n sql: `SELECT id FROM ${d1TableNames[required.model]} WHERE id = json_extract(?, '$') LIMIT 1`,\n params: encodeD1Values([required.id]),\n });\n }\n }\n if (change.model === \"channels\" && change.operation === \"delete\") {\n const precondition = channelDeletePrecondition(\n input.changes,\n changeIndex,\n change.where.id,\n );\n channelDeletes.push(precondition);\n checks.push({\n changeIndex,\n resultIndex: statements.length,\n conflictWhen: \"nonempty\",\n reason: \"referenced\",\n });\n statements.push({\n sql: \"SELECT id FROM releases WHERE channel_id = json_extract(?, '$') AND id NOT IN (SELECT value FROM json_each(?)) UNION ALL SELECT value AS id FROM json_each(?) LIMIT 1\",\n params: encodeD1Values([\n precondition.id,\n precondition.excludedReleaseIds,\n precondition.addedReferenceReleaseIds,\n ]),\n });\n }\n const key = insertedKey(change);\n if (key !== undefined) inserted.add(key);\n }\n\n const guard: D1Guard = {\n sql: `NOT EXISTS (\n SELECT 1 FROM json_each(?) AS required\n WHERE NOT EXISTS (\n SELECT 1 FROM bundles\n WHERE json_extract(required.value, '$.model') = 'bundles'\n AND bundles.id = json_extract(required.value, '$.id')\n UNION ALL\n SELECT 1 FROM api_keys\n WHERE json_extract(required.value, '$.model') = 'api_keys'\n AND api_keys.id = json_extract(required.value, '$.id')\n UNION ALL\n SELECT 1 FROM channels\n WHERE json_extract(required.value, '$.model') = 'channels'\n AND channels.id = json_extract(required.value, '$.id')\n UNION ALL\n SELECT 1 FROM releases\n WHERE json_extract(required.value, '$.model') = 'releases'\n AND releases.id = json_extract(required.value, '$.id')\n )\n ) AND NOT EXISTS (\n SELECT 1 FROM json_each(?) AS channel_delete\n WHERE EXISTS (\n SELECT 1 FROM releases\n WHERE releases.channel_id = json_extract(channel_delete.value, '$.id')\n AND releases.id NOT IN (\n SELECT value FROM json_each(\n json_extract(channel_delete.value, '$.excludedReleaseIds')\n )\n )\n UNION ALL\n SELECT value FROM json_each(\n json_extract(channel_delete.value, '$.addedReferenceReleaseIds')\n )\n )\n )`,\n params: encodeD1Values([\n requiredRows.map(({ model, id }) => ({ model, id })),\n channelDeletes,\n ]),\n };\n\n statements.push(...input.changes.map((change) => changeQuery(change, guard)));\n return { checks, statements };\n};\n\nconst resultForPlan = (\n plan: D1CommitPlan,\n results: readonly (readonly unknown[])[],\n): DatabaseCommitResult => {\n const missing = plan.checks.find(({ conflictWhen, resultIndex }) =>\n conflictWhen === \"empty\"\n ? (results[resultIndex]?.length ?? 0) === 0\n : (results[resultIndex]?.length ?? 0) > 0,\n );\n return missing === undefined\n ? { committed: true }\n : {\n committed: false,\n conflict: {\n changeIndex: missing.changeIndex,\n reason: missing.reason,\n },\n };\n};\n\nconst insertChannel = async (\n executor: D1Executor,\n input: ChannelInsertInput,\n): Promise<ChannelInsertResult> => {\n const insert = insertQuery(\n { model: \"channels\", data: input.row, onConflict: \"ignore\" },\n undefined,\n \"ignore\",\n );\n const select = {\n sql: \"SELECT id, name FROM channels WHERE name = json_extract(?, '$') LIMIT 1\",\n params: encodeD1Values([input.row.name]),\n };\n const [insertedRows = [], canonicalRows = []] = await executor.batch([\n insert,\n select,\n ]);\n return {\n row: parseD1Row(\"channels\", canonicalRows[0]),\n inserted: insertedRows.length > 0,\n };\n};\n\nconst deleteChannel = async (\n executor: D1Executor,\n input: ChannelDeleteInput,\n): Promise<ChannelDeleteResult> => {\n const [channelRows = [], referenceRows = [], deletedRows = []] =\n await executor.batch([\n {\n sql: \"SELECT id FROM channels WHERE id = json_extract(?, '$') LIMIT 1\",\n params: encodeD1Values([input.id]),\n },\n {\n sql: \"SELECT id FROM releases WHERE channel_id = json_extract(?, '$') LIMIT 1\",\n params: encodeD1Values([input.id]),\n },\n {\n sql: \"DELETE FROM channels WHERE id = json_extract(?, '$') AND NOT EXISTS (SELECT 1 FROM releases WHERE channel_id = json_extract(?, '$')) RETURNING id\",\n params: encodeD1Values([input.id, input.id]),\n },\n ]);\n if (channelRows.length === 0) return { deleted: false, reason: \"not_found\" };\n if (referenceRows.length > 0) return { deleted: false, reason: \"not_empty\" };\n return deletedRows.length > 0\n ? { deleted: true }\n : { deleted: false, reason: \"not_empty\" };\n};\n\nexport const createD1Implementation = (\n executor: D1Executor,\n): DatabasePluginImplementation => ({\n async create(input) {\n const query = insertQuery(input);\n const rows = await executor.query(query.sql, query.params);\n switch (input.model) {\n case \"bundles\":\n return parseD1Row(\"bundles\", rows[0]);\n case \"bundle_patches\":\n return parseD1Row(\"bundle_patches\", rows[0]);\n case \"channels\":\n return parseD1Row(\"channels\", rows[0]);\n case \"bundle_events\":\n return parseD1Row(\"bundle_events\", rows[0]);\n case \"api_keys\":\n return parseD1Row(\"api_keys\", rows[0]);\n case \"releases\":\n return parseD1Row(\"releases\", rows[0]);\n case \"release_catalogs\":\n return parseD1Row(\"release_catalogs\", rows[0]);\n }\n },\n async update(input) {\n const query = updateQuery(input);\n const rows = await executor.query(query.sql, query.params);\n if (rows[0] === undefined) return null;\n switch (input.model) {\n case \"bundles\":\n return parseD1Row(\"bundles\", rows[0]);\n case \"api_keys\":\n return parseD1Row(\"api_keys\", rows[0]);\n case \"releases\":\n return parseD1Row(\"releases\", rows[0]);\n case \"release_catalogs\":\n return parseD1Row(\"release_catalogs\", rows[0]);\n }\n },\n async delete(input) {\n const query = deleteQuery(input);\n await executor.query(query.sql, query.params);\n },\n count: (input) => countD1Rows(executor, input),\n async findOne(input: FindOneDatabaseImplementationInput) {\n const where = buildD1Where(input.where);\n const rows = await executor.query(\n `SELECT * FROM ${d1TableNames[input.model]}${where.sql} LIMIT 1`,\n where.params,\n );\n if (rows[0] === undefined) return null;\n switch (input.model) {\n case \"bundles\":\n return parseD1Row(\"bundles\", rows[0]);\n case \"bundle_patches\":\n return parseD1Row(\"bundle_patches\", rows[0]);\n case \"channels\":\n return parseD1Row(\"channels\", rows[0]);\n case \"api_keys\":\n return parseD1Row(\"api_keys\", rows[0]);\n case \"releases\":\n return parseD1Row(\"releases\", rows[0]);\n case \"release_catalogs\":\n return parseD1Row(\"release_catalogs\", rows[0]);\n }\n },\n findMany: (input) => findManyD1Rows(executor, input),\n insertChannel: (input) => insertChannel(executor, input),\n deleteChannel: (input) => deleteChannel(executor, input),\n async commit(input) {\n if (input.changes.length === 0) return { committed: true };\n const expectations = input.expectations ?? [];\n const conflict = await expectationConflict(executor, expectations);\n if (conflict !== null) return conflict;\n const plan = createCommitPlan(input);\n try {\n return resultForPlan(plan, await executor.batch(plan.statements));\n } catch (error) {\n if (expectations.length === 0 || !isExpectationConflictError(error)) {\n throw error;\n }\n return (\n (await expectationConflict(executor, expectations)) ?? {\n committed: false,\n conflict: {\n actualVersion:\n expectations[0].model === \"releases\"\n ? expectations[0].revision\n : expectations[0].generation,\n changeIndex: -1,\n expectedVersion:\n expectations[0].model === \"releases\"\n ? expectations[0].revision\n : expectations[0].generation,\n key:\n expectations[0].model === \"releases\"\n ? expectations[0].id\n : expectations[0].scopeKey,\n model: expectations[0].model,\n reason: \"version_conflict\",\n },\n }\n );\n }\n },\n});\n", "import { createDatabasePlugin } from \"@hot-updater/plugin-core\";\nimport { createDatabasePluginAdapter } from \"@hot-updater/plugin-core/internal\";\n\nimport { createD1Implementation } from \"../d1Implementation\";\n\ntype D1Result = {\n readonly results?: readonly unknown[];\n};\n\ntype D1BoundStatement = {\n all: () => Promise<D1Result>;\n};\n\ntype D1PreparedStatement = {\n bind: (...values: readonly unknown[]) => D1BoundStatement;\n};\n\nexport type D1Like = {\n prepare(sql: string): D1PreparedStatement;\n batch(statements: D1BoundStatement[]): Promise<readonly D1Result[]>;\n};\n\nexport interface CloudflareWorkerDatabaseEnv {\n readonly DB: D1Like;\n}\n\nexport const d1Database = (database: D1Like) => {\n const implementation = createD1Implementation({\n async query(sql, params) {\n const result = await database\n .prepare(sql)\n .bind(...params)\n .all();\n return result.results ?? [];\n },\n async batch(statements) {\n const results = await database.batch(\n statements.map(({ sql, params }) =>\n database.prepare(sql).bind(...params),\n ),\n );\n return results.map(({ results }) => results ?? []);\n },\n });\n const adapter = createDatabasePluginAdapter(\"d1Database\", implementation);\n return createDatabasePlugin({\n name: \"d1Database\",\n models: adapter.models,\n commit: adapter.commit,\n ...(adapter.dispose ? { dispose: adapter.dispose } : {}),\n });\n};\n", "import {\n createStorageKeyBuilder,\n createStorageDownloadUrl,\n createStoragePlugin,\n createStorageUri,\n parseStorageUri,\n type StoragePluginWith,\n} from \"@hot-updater/plugin-core\";\n\nexport interface CloudflareWorkerStorageConfig {\n readonly bucket: R2Bucket;\n readonly bucketName: string;\n readonly basePath?: string;\n readonly downloadUrlSigningKey: string;\n}\n\nexport const r2WorkerStorage = (\n config: CloudflareWorkerStorageConfig,\n): StoragePluginWith<\n \"put\" | \"get\" | \"getDownloadUrl\" | \"exists\" | \"delete\"\n> => {\n const getStorageKey = createStorageKeyBuilder(config.basePath);\n const getDownloadUrl = createStorageDownloadUrl(config.downloadUrlSigningKey);\n\n const parseAndValidate = (storageUri: string) => {\n const parsed = parseStorageUri(storageUri, \"r2\");\n if (parsed.bucket !== config.bucketName) {\n throw new Error(\n `Bucket name mismatch: expected \"${config.bucketName}\", but found \"${parsed.bucket}\".`,\n );\n }\n return parsed;\n };\n\n return createStoragePlugin({\n name: \"r2Storage\",\n protocol: \"r2\",\n async put({ key, body, contentLength, contentType }) {\n const storageKey = getStorageKey(key);\n const uploadOptions = {\n httpMetadata: {\n contentType,\n cacheControl: \"max-age=31536000\",\n },\n };\n if (contentLength === undefined) {\n const bufferedBody = new Uint8Array(\n await new Response(body).arrayBuffer(),\n );\n await config.bucket.put(storageKey, bufferedBody, uploadOptions);\n } else {\n const fixedLengthBody = new FixedLengthStream(contentLength);\n await Promise.all([\n body.pipeTo(fixedLengthBody.writable),\n config.bucket.put(\n storageKey,\n fixedLengthBody.readable,\n uploadOptions,\n ),\n ]);\n }\n return {\n storageUri: createStorageUri({\n protocol: \"r2\",\n bucket: config.bucketName,\n key: storageKey,\n }),\n };\n },\n async get({ storageUri }) {\n const { key } = parseAndValidate(storageUri);\n const object = await config.bucket.get(key);\n if (!object) return { response: null };\n const headers = new Headers();\n object.writeHttpMetadata(headers);\n headers.set(\"etag\", object.httpEtag);\n headers.set(\"content-length\", String(object.size));\n return { response: new Response(object.body, { headers }) };\n },\n async getDownloadUrl({ storageUri }) {\n parseAndValidate(storageUri);\n return getDownloadUrl({ storageUri });\n },\n async exists({ storageUri }) {\n const { key } = parseAndValidate(storageUri);\n return { exists: (await config.bucket.head(key)) !== null };\n },\n async delete({ storageUri }) {\n const { key } = parseAndValidate(storageUri);\n await config.bucket.delete(key);\n return { deleted: true };\n },\n });\n};\n"],
|
|
6
|
+
"mappings": "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",
|
|
7
|
+
"names": ["match", "metadata", "isChannelText", "validateWhere", "isChannelText", "query", "run", "metadata", "metadata", "PAGE_SIZE", "insertChannel", "version", "match", "match", "raw", "version", "version", "retained", "retainedIds", "match", "isRecord", "isRecord", "match", "compareCodePoints", "query", "compareCodePoints", "compareCodePoints", "query", "metadata", "rollbackReleases", "options", "version", "version", "match", "raw", "app", "env", "Node", "_Node", "Node", "Hono", "isRecord", "parameter", "version", "guard", "query", "results", "Hono"]
|
|
8
8
|
}
|