@vltpkg/vsr 0.0.0-26 → 0.0.0-28
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/README.md +1 -0
- package/dist/assets/public/favicon.ico +0 -0
- package/dist/assets/public/fonts/courier-bold-italic.ttf +0 -0
- package/dist/assets/public/fonts/courier-bold.ttf +0 -0
- package/dist/assets/public/fonts/courier-italic.ttf +0 -0
- package/dist/assets/public/fonts/courier-regular.ttf +0 -0
- package/dist/assets/public/fonts/geist-mono.ttf +0 -0
- package/dist/assets/public/fonts/inter.ttf +0 -0
- package/dist/assets/public/images/bg.png +0 -0
- package/dist/assets/public/images/clients/logo-bun.png +0 -0
- package/dist/assets/public/images/clients/logo-deno.png +0 -0
- package/dist/assets/public/images/clients/logo-npm.png +0 -0
- package/dist/assets/public/images/clients/logo-pnpm.png +0 -0
- package/dist/assets/public/images/clients/logo-vlt.png +0 -0
- package/dist/assets/public/images/clients/logo-yarn.png +0 -0
- package/dist/assets/public/images/favicon/apple-touch-icon.png +0 -0
- package/dist/assets/public/images/favicon/favicon-96x96.png +0 -0
- package/dist/assets/public/images/favicon/favicon.ico +0 -0
- package/dist/assets/public/images/favicon/favicon.svg +3 -0
- package/dist/assets/public/images/favicon/site.webmanifest +21 -0
- package/dist/assets/public/images/favicon/web-app-manifest-192x192.png +0 -0
- package/dist/assets/public/images/favicon/web-app-manifest-512x512.png +0 -0
- package/dist/assets/public/index.html +70 -0
- package/dist/assets/public/index.js +1300 -0
- package/dist/assets/public/index.js.map +7 -0
- package/dist/assets/public/main.css +1 -0
- package/dist/assets/public/styles/styles.css +231 -0
- package/dist/bin/demo/package.json +6 -0
- package/dist/bin/demo/vlt.json +1 -0
- package/dist/bin/vsr.js +773 -0
- package/dist/index.js +28280 -0
- package/dist/index.js.map +8 -0
- package/package.json +6 -6
- package/scripts/build-bin.js +1 -0
- package/src/bin/vsr.ts +15 -3
- package/scripts/prepack.js +0 -27
- package/test/access.test.ts +0 -705
- package/test/audit.test.ts +0 -828
- package/test/dashboard.test.ts +0 -693
- package/test/dist-tags.test.ts +0 -678
- package/test/manifest.test.ts +0 -436
- package/test/packument.test.ts +0 -530
- package/test/ping.test.ts +0 -41
- package/test/search.test.ts +0 -472
- package/test/setup.ts +0 -130
- package/test/static.test.ts +0 -646
- package/test/tokens.test.ts +0 -389
- package/test/utils/auth.test.ts +0 -214
- package/test/utils/packages.test.ts +0 -235
- package/test/utils/response.test.ts +0 -184
- package/test/whoami.test.ts +0 -119
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/_internal/utils.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/internal/perf_hooks/performance.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/perf_hooks.mjs", "../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.7.0_unenv@2.0.0-rc.19_workerd@1.20250823.0/node_modules/@cloudflare/unenv-preset/dist/runtime/polyfill/performance.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/mock/noop.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/console.mjs", "../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.7.0_unenv@2.0.0-rc.19_workerd@1.20250823.0/node_modules/@cloudflare/unenv-preset/dist/runtime/node/console.mjs", "../../../node_modules/.pnpm/wrangler@4.33.1_@cloudflare+workers-types@4.20250830.0/node_modules/wrangler/_virtual_unenv_global_polyfill-@cloudflare-unenv-preset-node-console", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/internal/process/hrtime.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/internal/tty/write-stream.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/internal/tty/read-stream.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/tty.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/internal/process/node-version.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/internal/process/process.mjs", "../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.7.0_unenv@2.0.0-rc.19_workerd@1.20250823.0/node_modules/@cloudflare/unenv-preset/dist/runtime/node/process.mjs", "../../../node_modules/.pnpm/wrangler@4.33.1_@cloudflare+workers-types@4.20250830.0/node_modules/wrangler/_virtual_unenv_global_polyfill-@cloudflare-unenv-preset-node-process", "../wrangler.json", "../package.json", "../src/utils/docs.ts", "../config.ts", "../src/utils/config.ts", "../src/middleware/config.ts", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js", "../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js", "../../../node_modules/.pnpm/unenv@2.0.0-rc.19/node_modules/unenv/dist/runtime/node/module.mjs", "../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.7.0_unenv@2.0.0-rc.19_workerd@1.20250823.0/node_modules/@cloudflare/unenv-preset/dist/runtime/node/module.mjs", "node-built-in-modules:module", "../../../node_modules/.pnpm/validate-npm-package-name@6.0.2/node_modules/validate-npm-package-name/lib/index.js", "../src/utils/packages.ts", "../src/utils/auth.ts", "../src/utils/upstream.ts", "../src/index.ts", "../../../node_modules/.pnpm/@hono+zod-openapi@0.19.10_hono@4.9.5_zod@3.25.76/node_modules/@hono/zod-openapi/dist/index.js", "../../../node_modules/.pnpm/@asteasolutions+zod-to-openapi@7.3.4_zod@3.25.76/node_modules/@asteasolutions/zod-to-openapi/dist/index.mjs", "../../../node_modules/.pnpm/@hono+zod-validator@0.7.2_hono@4.9.5_zod@3.25.76/node_modules/@hono/zod-validator/dist/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/validator/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/validator/validator.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/helper/cookie/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/cookie.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/url.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/http-exception.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/buffer.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/crypto.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/hono.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/hono-base.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/compose.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/context.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/request.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/request/constants.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/body.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/html.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/constants.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/reg-exp-router/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/reg-exp-router/router.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/reg-exp-router/node.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/smart-router/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/smart-router/router.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/trie-router/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/trie-router/router.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/router/trie-router/node.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js", "../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/request-id/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/request-id/request-id.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/bearer-auth/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/combine/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/logger/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/color.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/secure-headers/index.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/secure-headers/secure-headers.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/utils/encode.js", "../../../node_modules/.pnpm/hono@4.9.5/node_modules/hono/dist/middleware/trailing-slash/index.js", "../src/middleware/telemetry.ts", "../../../node_modules/.pnpm/@hono+sentry@1.2.2_hono@4.9.5/node_modules/@hono/sentry/dist/index.js", "../../../node_modules/.pnpm/toucan-js@4.1.1/node_modules/toucan-js/dist/index.esm.js", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/utils/esm/index.js", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/is.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/string.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/version.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/worldwide.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/browser.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/debug-build.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/logger.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/dsn.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/error.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/object.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/stacktrace.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/instrument/handlers.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/time.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/instrument/globalError.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/instrument/globalUnhandledRejection.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/memo.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/misc.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/normalize.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/path.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/syncpromise.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/promisebuffer.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/node-stack-trace.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/envelope.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/ratelimit.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/eventbuilder.ts", "../../../node_modules/.pnpm/@sentry+utils@8.9.2/node_modules/@sentry/src/propagationContext.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/core/esm/index.js", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/debug-build.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/carrier.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/session.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/utils/spanOnScope.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/scope.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/defaultScopes.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/asyncContext/stackStrategy.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/asyncContext/index.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/currentScopes.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/metrics/metric-summary.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/semanticAttributes.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/tracing/spanstatus.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/utils/spanUtils.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/tracing/errors.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/constants.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/tracing/dynamicSamplingContext.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/utils/parseSampleRate.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/envelope.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/eventProcessors.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/utils/applyScopeDataToEvent.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/utils/prepareEvent.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/sessionflusher.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/api.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/integration.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/baseclient.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/checkin.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/server-runtime-client.ts", "../../../node_modules/.pnpm/@sentry+core@8.9.2/node_modules/@sentry/src/transports/base.ts", "../src/utils/spa.ts", "../src/utils/database.ts", "../src/db/client.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/d1/driver.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/entity.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/logger.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/relations.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/table.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/table.utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/column.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/pg-core/primary-keys.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/pg-core/table.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sql/sql.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/pg-core/columns/enum.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/pg-core/columns/common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/column-builder.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/pg-core/foreign-keys.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/tracing-utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/pg-core/unique-constraint.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/pg-core/utils/array.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/subquery.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/tracing.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/drizzle-orm/version.js", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/view-common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sql/expressions/conditions.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sql/expressions/select.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/db.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/selection-proxy.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/alias.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/delete.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/query-promise.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/table.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/all.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/blob.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/common.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/foreign-keys.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/unique-constraint.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/custom.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/integer.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/numeric.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/real.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/columns/text.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/utils.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/insert.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/query-builder.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/dialect.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/casing.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/errors.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/view-base.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/select.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/query-builders/query-builder.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/update.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/count.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/query.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/query-builders/raw.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/d1/session.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/cache/core/cache.ts", "../../../node_modules/.pnpm/drizzle-orm@0.44.5_@cloudflare+workers-types@4.20250830.0_@libsql+client@0.15.14_@opent_451dcb6ebf427bf30da6afc504b364af/node_modules/src/sqlite-core/session.ts", "../src/db/schema.ts", "../src/utils/response.ts", "../src/utils/routes.ts", "../src/routes/users.ts", "../src/routes/ping.ts", "../src/routes/docs.ts", "../../../node_modules/.pnpm/@scalar+hono-api-reference@0.9.16_hono@4.9.5/node_modules/@scalar/hono-api-reference/src/index.ts", "../../../node_modules/.pnpm/@scalar+hono-api-reference@0.9.16_hono@4.9.5/node_modules/@scalar/hono-api-reference/src/scalar.ts", "../../../node_modules/.pnpm/@scalar+core@0.3.14/node_modules/@scalar/core/dist/libs/html-rendering/index.js", "../../../node_modules/.pnpm/@scalar+core@0.3.14/node_modules/@scalar/core/dist/libs/html-rendering/html-rendering.js", "../src/routes/tokens.ts", "../src/routes/packages.ts", "../src/utils/cache.ts", "../src/routes/access.ts", "../src/routes/search.ts", "../src/routes/misc.ts", "../src/utils/tracing.ts", "../src/routes/static.ts", "../src/queue/index.ts"],
|
|
4
|
+
"sourceRoot": "dist",
|
|
5
|
+
"sourcesContent": ["/* @__NO_SIDE_EFFECTS__ */\nexport function rawHeaders(headers) {\n\tconst rawHeaders = [];\n\tfor (const key in headers) {\n\t\tif (Array.isArray(headers[key])) {\n\t\t\tfor (const h of headers[key]) {\n\t\t\t\trawHeaders.push(key, h);\n\t\t\t}\n\t\t} else {\n\t\t\trawHeaders.push(key, headers[key]);\n\t\t}\n\t}\n\treturn rawHeaders;\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function mergeFns(...functions) {\n\treturn function(...args) {\n\t\tfor (const fn of functions) {\n\t\t\tfn(...args);\n\t\t}\n\t};\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function createNotImplementedError(name) {\n\treturn new Error(`[unenv] ${name} is not implemented yet!`);\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function notImplemented(name) {\n\tconst fn = () => {\n\t\tthrow createNotImplementedError(name);\n\t};\n\treturn Object.assign(fn, { __unenv__: true });\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function notImplementedAsync(name) {\n\tconst fn = notImplemented(name);\n\tfn.__promisify__ = () => notImplemented(name + \".__promisify__\");\n\tfn.native = fn;\n\treturn fn;\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function notImplementedClass(name) {\n\treturn class {\n\t\t__unenv__ = true;\n\t\tconstructor() {\n\t\t\tthrow new Error(`[unenv] ${name} is not implemented yet!`);\n\t\t}\n\t};\n}\n", "import { createNotImplementedError } from \"../../../_internal/utils.mjs\";\nconst _timeOrigin = globalThis.performance?.timeOrigin ?? Date.now();\nconst _performanceNow = globalThis.performance?.now ? globalThis.performance.now.bind(globalThis.performance) : () => Date.now() - _timeOrigin;\nconst nodeTiming = {\n\tname: \"node\",\n\tentryType: \"node\",\n\tstartTime: 0,\n\tduration: 0,\n\tnodeStart: 0,\n\tv8Start: 0,\n\tbootstrapComplete: 0,\n\tenvironment: 0,\n\tloopStart: 0,\n\tloopExit: 0,\n\tidleTime: 0,\n\tuvMetricsInfo: {\n\t\tloopCount: 0,\n\t\tevents: 0,\n\t\teventsWaiting: 0\n\t},\n\tdetail: undefined,\n\ttoJSON() {\n\t\treturn this;\n\t}\n};\n// PerformanceEntry\nexport class PerformanceEntry {\n\t__unenv__ = true;\n\tdetail;\n\tentryType = \"event\";\n\tname;\n\tstartTime;\n\tconstructor(name, options) {\n\t\tthis.name = name;\n\t\tthis.startTime = options?.startTime || _performanceNow();\n\t\tthis.detail = options?.detail;\n\t}\n\tget duration() {\n\t\treturn _performanceNow() - this.startTime;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tentryType: this.entryType,\n\t\t\tstartTime: this.startTime,\n\t\t\tduration: this.duration,\n\t\t\tdetail: this.detail\n\t\t};\n\t}\n}\n// PerformanceMark\nexport const PerformanceMark = class PerformanceMark extends PerformanceEntry {\n\tentryType = \"mark\";\n\tconstructor() {\n\t\t// @ts-ignore\n\t\tsuper(...arguments);\n\t}\n\tget duration() {\n\t\treturn 0;\n\t}\n};\n// PerformanceMark\nexport class PerformanceMeasure extends PerformanceEntry {\n\tentryType = \"measure\";\n}\n// PerformanceResourceTiming\nexport class PerformanceResourceTiming extends PerformanceEntry {\n\tentryType = \"resource\";\n\tserverTiming = [];\n\tconnectEnd = 0;\n\tconnectStart = 0;\n\tdecodedBodySize = 0;\n\tdomainLookupEnd = 0;\n\tdomainLookupStart = 0;\n\tencodedBodySize = 0;\n\tfetchStart = 0;\n\tinitiatorType = \"\";\n\tname = \"\";\n\tnextHopProtocol = \"\";\n\tredirectEnd = 0;\n\tredirectStart = 0;\n\trequestStart = 0;\n\tresponseEnd = 0;\n\tresponseStart = 0;\n\tsecureConnectionStart = 0;\n\tstartTime = 0;\n\ttransferSize = 0;\n\tworkerStart = 0;\n\tresponseStatus = 0;\n}\n// PerformanceObserverEntryList\nexport class PerformanceObserverEntryList {\n\t__unenv__ = true;\n\tgetEntries() {\n\t\treturn [];\n\t}\n\tgetEntriesByName(_name, _type) {\n\t\treturn [];\n\t}\n\tgetEntriesByType(type) {\n\t\treturn [];\n\t}\n}\n// Performance\nexport class Performance {\n\t__unenv__ = true;\n\ttimeOrigin = _timeOrigin;\n\teventCounts = new Map();\n\t_entries = [];\n\t_resourceTimingBufferSize = 0;\n\tnavigation = undefined;\n\ttiming = undefined;\n\ttimerify(_fn, _options) {\n\t\tthrow createNotImplementedError(\"Performance.timerify\");\n\t}\n\tget nodeTiming() {\n\t\treturn nodeTiming;\n\t}\n\teventLoopUtilization() {\n\t\treturn {};\n\t}\n\tmarkResourceTiming() {\n\t\t// TODO: create a new PerformanceResourceTiming entry\n\t\t// so that performance.getEntries, getEntriesByName, and getEntriesByType return it\n\t\t// see: https://nodejs.org/api/perf_hooks.html#performancemarkresourcetimingtiminginfo-requestedurl-initiatortype-global-cachemode-bodyinfo-responsestatus-deliverytype\n\t\treturn new PerformanceResourceTiming(\"\");\n\t}\n\tonresourcetimingbufferfull = null;\n\tnow() {\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Performance/now\n\t\tif (this.timeOrigin === _timeOrigin) {\n\t\t\treturn _performanceNow();\n\t\t}\n\t\treturn Date.now() - this.timeOrigin;\n\t}\n\tclearMarks(markName) {\n\t\tthis._entries = markName ? this._entries.filter((e) => e.name !== markName) : this._entries.filter((e) => e.entryType !== \"mark\");\n\t}\n\tclearMeasures(measureName) {\n\t\tthis._entries = measureName ? this._entries.filter((e) => e.name !== measureName) : this._entries.filter((e) => e.entryType !== \"measure\");\n\t}\n\tclearResourceTimings() {\n\t\tthis._entries = this._entries.filter((e) => e.entryType !== \"resource\" || e.entryType !== \"navigation\");\n\t}\n\tgetEntries() {\n\t\treturn this._entries;\n\t}\n\tgetEntriesByName(name, type) {\n\t\treturn this._entries.filter((e) => e.name === name && (!type || e.entryType === type));\n\t}\n\tgetEntriesByType(type) {\n\t\treturn this._entries.filter((e) => e.entryType === type);\n\t}\n\tmark(name, options) {\n\t\t// @ts-expect-error constructor is not protected\n\t\tconst entry = new PerformanceMark(name, options);\n\t\tthis._entries.push(entry);\n\t\treturn entry;\n\t}\n\tmeasure(measureName, startOrMeasureOptions, endMark) {\n\t\tlet start;\n\t\tlet end;\n\t\tif (typeof startOrMeasureOptions === \"string\") {\n\t\t\tstart = this.getEntriesByName(startOrMeasureOptions, \"mark\")[0]?.startTime;\n\t\t\tend = this.getEntriesByName(endMark, \"mark\")[0]?.startTime;\n\t\t} else {\n\t\t\tstart = Number.parseFloat(startOrMeasureOptions?.start) || this.now();\n\t\t\tend = Number.parseFloat(startOrMeasureOptions?.end) || this.now();\n\t\t}\n\t\tconst entry = new PerformanceMeasure(measureName, {\n\t\t\tstartTime: start,\n\t\t\tdetail: {\n\t\t\t\tstart,\n\t\t\t\tend\n\t\t\t}\n\t\t});\n\t\tthis._entries.push(entry);\n\t\treturn entry;\n\t}\n\tsetResourceTimingBufferSize(maxSize) {\n\t\tthis._resourceTimingBufferSize = maxSize;\n\t}\n\taddEventListener(type, listener, options) {\n\t\tthrow createNotImplementedError(\"Performance.addEventListener\");\n\t}\n\tremoveEventListener(type, listener, options) {\n\t\tthrow createNotImplementedError(\"Performance.removeEventListener\");\n\t}\n\tdispatchEvent(event) {\n\t\tthrow createNotImplementedError(\"Performance.dispatchEvent\");\n\t}\n\ttoJSON() {\n\t\treturn this;\n\t}\n}\n// PerformanceObserver\nexport class PerformanceObserver {\n\t__unenv__ = true;\n\tstatic supportedEntryTypes = [];\n\t_callback = null;\n\tconstructor(callback) {\n\t\tthis._callback = callback;\n\t}\n\ttakeRecords() {\n\t\treturn [];\n\t}\n\tdisconnect() {\n\t\tthrow createNotImplementedError(\"PerformanceObserver.disconnect\");\n\t}\n\tobserve(options) {\n\t\tthrow createNotImplementedError(\"PerformanceObserver.observe\");\n\t}\n\tbind(fn) {\n\t\treturn fn;\n\t}\n\trunInAsyncScope(fn, thisArg, ...args) {\n\t\treturn fn.call(thisArg, ...args);\n\t}\n\tasyncId() {\n\t\treturn 0;\n\t}\n\ttriggerAsyncId() {\n\t\treturn 0;\n\t}\n\temitDestroy() {\n\t\treturn this;\n\t}\n}\n// workerd implements a subset of globalThis.performance (as of last check, only timeOrigin set to 0 + now() implemented)\n// We already use performance.now() from globalThis.performance, if provided (see top of this file)\n// If we detect this condition, we can just use polyfill instead.\nexport const performance = globalThis.performance && \"addEventListener\" in globalThis.performance ? globalThis.performance : new Performance();\n", "import { IntervalHistogram, RecordableHistogram } from \"./internal/perf_hooks/histogram.mjs\";\nimport { performance, Performance, PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceObserverEntryList, PerformanceObserver, PerformanceResourceTiming } from \"./internal/perf_hooks/performance.mjs\";\nexport * from \"./internal/perf_hooks/performance.mjs\";\n// prettier-ignore\nimport { NODE_PERFORMANCE_GC_MAJOR, NODE_PERFORMANCE_GC_MINOR, NODE_PERFORMANCE_GC_INCREMENTAL, NODE_PERFORMANCE_GC_WEAKCB, NODE_PERFORMANCE_GC_FLAGS_NO, NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED, NODE_PERFORMANCE_GC_FLAGS_FORCED, NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING, NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE, NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY, NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE, NODE_PERFORMANCE_ENTRY_TYPE_GC, NODE_PERFORMANCE_ENTRY_TYPE_HTTP, NODE_PERFORMANCE_ENTRY_TYPE_HTTP2, NODE_PERFORMANCE_ENTRY_TYPE_NET, NODE_PERFORMANCE_ENTRY_TYPE_DNS, NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP, NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN, NODE_PERFORMANCE_MILESTONE_ENVIRONMENT, NODE_PERFORMANCE_MILESTONE_NODE_START, NODE_PERFORMANCE_MILESTONE_V8_START, NODE_PERFORMANCE_MILESTONE_LOOP_START, NODE_PERFORMANCE_MILESTONE_LOOP_EXIT, NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE } from \"./internal/perf_hooks/constants.mjs\";\n// prettier-ignore\nexport const constants = {\n\tNODE_PERFORMANCE_GC_MAJOR,\n\tNODE_PERFORMANCE_GC_MINOR,\n\tNODE_PERFORMANCE_GC_INCREMENTAL,\n\tNODE_PERFORMANCE_GC_WEAKCB,\n\tNODE_PERFORMANCE_GC_FLAGS_NO,\n\tNODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED,\n\tNODE_PERFORMANCE_GC_FLAGS_FORCED,\n\tNODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING,\n\tNODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE,\n\tNODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY,\n\tNODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE,\n\tNODE_PERFORMANCE_ENTRY_TYPE_GC,\n\tNODE_PERFORMANCE_ENTRY_TYPE_HTTP,\n\tNODE_PERFORMANCE_ENTRY_TYPE_HTTP2,\n\tNODE_PERFORMANCE_ENTRY_TYPE_NET,\n\tNODE_PERFORMANCE_ENTRY_TYPE_DNS,\n\tNODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP,\n\tNODE_PERFORMANCE_MILESTONE_TIME_ORIGIN,\n\tNODE_PERFORMANCE_MILESTONE_ENVIRONMENT,\n\tNODE_PERFORMANCE_MILESTONE_NODE_START,\n\tNODE_PERFORMANCE_MILESTONE_V8_START,\n\tNODE_PERFORMANCE_MILESTONE_LOOP_START,\n\tNODE_PERFORMANCE_MILESTONE_LOOP_EXIT,\n\tNODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE\n};\nexport const monitorEventLoopDelay = function(_options) {\n\treturn new IntervalHistogram();\n};\nexport const createHistogram = function(_options) {\n\treturn new RecordableHistogram();\n};\nexport default {\n\tPerformance,\n\tPerformanceMark,\n\tPerformanceEntry,\n\tPerformanceMeasure,\n\tPerformanceObserverEntryList,\n\tPerformanceObserver,\n\tPerformanceResourceTiming,\n\tperformance,\n\tconstants,\n\tcreateHistogram,\n\tmonitorEventLoopDelay\n};\n", "import {\n performance,\n Performance,\n PerformanceEntry,\n PerformanceMark,\n PerformanceMeasure,\n PerformanceObserver,\n PerformanceObserverEntryList,\n PerformanceResourceTiming\n} from \"node:perf_hooks\";\nglobalThis.performance = performance;\nglobalThis.Performance = Performance;\nglobalThis.PerformanceEntry = PerformanceEntry;\nglobalThis.PerformanceMark = PerformanceMark;\nglobalThis.PerformanceMeasure = PerformanceMeasure;\nglobalThis.PerformanceObserver = PerformanceObserver;\nglobalThis.PerformanceObserverEntryList = PerformanceObserverEntryList;\nglobalThis.PerformanceResourceTiming = PerformanceResourceTiming;\n", "export default Object.assign(() => {}, { __unenv__: true });\n", "import { Writable } from \"node:stream\";\nimport noop from \"../mock/noop.mjs\";\nimport { notImplemented, notImplementedClass } from \"../_internal/utils.mjs\";\nconst _console = globalThis.console;\n// undocumented public APIs\nexport const _ignoreErrors = true;\nexport const _stderr = new Writable();\nexport const _stdout = new Writable();\nexport const log = _console?.log ?? noop;\nexport const info = _console?.info ?? log;\nexport const trace = _console?.trace ?? info;\nexport const debug = _console?.debug ?? log;\nexport const table = _console?.table ?? log;\nexport const error = _console?.error ?? log;\nexport const warn = _console?.warn ?? error;\n// https://developer.chrome.com/docs/devtools/console/api#createtask\nexport const createTask = _console?.createTask ?? /* @__PURE__ */ notImplemented(\"console.createTask\");\nexport const assert = /* @__PURE__ */ notImplemented(\"console.assert\");\n// noop\nexport const clear = _console?.clear ?? noop;\nexport const count = _console?.count ?? noop;\nexport const countReset = _console?.countReset ?? noop;\nexport const dir = _console?.dir ?? noop;\nexport const dirxml = _console?.dirxml ?? noop;\nexport const group = _console?.group ?? noop;\nexport const groupEnd = _console?.groupEnd ?? noop;\nexport const groupCollapsed = _console?.groupCollapsed ?? noop;\nexport const profile = _console?.profile ?? noop;\nexport const profileEnd = _console?.profileEnd ?? noop;\nexport const time = _console?.time ?? noop;\nexport const timeEnd = _console?.timeEnd ?? noop;\nexport const timeLog = _console?.timeLog ?? noop;\nexport const timeStamp = _console?.timeStamp ?? noop;\nexport const Console = _console?.Console ?? /* @__PURE__ */ notImplementedClass(\"console.Console\");\nexport const _times = /* @__PURE__ */ new Map();\nexport function context() {\n\t// TODO: Should be Console with all the methods\n\treturn _console;\n}\nexport const _stdoutErrorHandler = noop;\nexport const _stderrErrorHandler = noop;\nexport default {\n\t_times,\n\t_ignoreErrors,\n\t_stdoutErrorHandler,\n\t_stderrErrorHandler,\n\t_stdout,\n\t_stderr,\n\tassert,\n\tclear,\n\tConsole,\n\tcount,\n\tcountReset,\n\tdebug,\n\tdir,\n\tdirxml,\n\terror,\n\tcontext,\n\tcreateTask,\n\tgroup,\n\tgroupEnd,\n\tgroupCollapsed,\n\tinfo,\n\tlog,\n\tprofile,\n\tprofileEnd,\n\ttable,\n\ttime,\n\ttimeEnd,\n\ttimeLog,\n\ttimeStamp,\n\ttrace,\n\twarn\n};\n", "import {\n _ignoreErrors,\n _stderr,\n _stderrErrorHandler,\n _stdout,\n _stdoutErrorHandler,\n _times,\n Console\n} from \"unenv/node/console\";\nexport {\n Console,\n _ignoreErrors,\n _stderr,\n _stderrErrorHandler,\n _stdout,\n _stdoutErrorHandler,\n _times\n} from \"unenv/node/console\";\nconst workerdConsole = globalThis[\"console\"];\nexport const {\n assert,\n clear,\n // @ts-expect-error undocumented public API\n context,\n count,\n countReset,\n // @ts-expect-error undocumented public API\n createTask,\n debug,\n dir,\n dirxml,\n error,\n group,\n groupCollapsed,\n groupEnd,\n info,\n log,\n profile,\n profileEnd,\n table,\n time,\n timeEnd,\n timeLog,\n timeStamp,\n trace,\n warn\n} = workerdConsole;\nObject.assign(workerdConsole, {\n Console,\n _ignoreErrors,\n _stderr,\n _stderrErrorHandler,\n _stdout,\n _stdoutErrorHandler,\n _times\n});\nexport default workerdConsole;\n", "import { default as defaultExport } from \"@cloudflare/unenv-preset/node/console\";\nglobalThis.console = defaultExport;", "// https://nodejs.org/api/process.html#processhrtime\nexport const hrtime = /* @__PURE__ */ Object.assign(function hrtime(startTime) {\n\tconst now = Date.now();\n\t// millis to seconds\n\tconst seconds = Math.trunc(now / 1e3);\n\t// convert millis to nanos\n\tconst nanos = now % 1e3 * 1e6;\n\tif (startTime) {\n\t\tlet diffSeconds = seconds - startTime[0];\n\t\tlet diffNanos = nanos - startTime[0];\n\t\tif (diffNanos < 0) {\n\t\t\tdiffSeconds = diffSeconds - 1;\n\t\t\tdiffNanos = 1e9 + diffNanos;\n\t\t}\n\t\treturn [diffSeconds, diffNanos];\n\t}\n\treturn [seconds, nanos];\n}, { bigint: function bigint() {\n\t// Convert milliseconds to nanoseconds\n\treturn BigInt(Date.now() * 1e6);\n} });\n", "export class WriteStream {\n\tfd;\n\tcolumns = 80;\n\trows = 24;\n\tisTTY = false;\n\tconstructor(fd) {\n\t\tthis.fd = fd;\n\t}\n\tclearLine(dir, callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tclearScreenDown(callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tcursorTo(x, y, callback) {\n\t\tcallback && typeof callback === \"function\" && callback();\n\t\treturn false;\n\t}\n\tmoveCursor(dx, dy, callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tgetColorDepth(env) {\n\t\treturn 1;\n\t}\n\thasColors(count, env) {\n\t\treturn false;\n\t}\n\tgetWindowSize() {\n\t\treturn [this.columns, this.rows];\n\t}\n\twrite(str, encoding, cb) {\n\t\tif (str instanceof Uint8Array) {\n\t\t\tstr = new TextDecoder().decode(str);\n\t\t}\n\t\ttry {\n\t\t\tconsole.log(str);\n\t\t} catch {}\n\t\tcb && typeof cb === \"function\" && cb();\n\t\treturn false;\n\t}\n}\n", "export class ReadStream {\n\tfd;\n\tisRaw = false;\n\tisTTY = false;\n\tconstructor(fd) {\n\t\tthis.fd = fd;\n\t}\n\tsetRawMode(mode) {\n\t\tthis.isRaw = mode;\n\t\treturn this;\n\t}\n}\n", "import { WriteStream } from \"./internal/tty/write-stream.mjs\";\nexport { ReadStream } from \"./internal/tty/read-stream.mjs\";\nexport { WriteStream } from \"./internal/tty/write-stream.mjs\";\nexport const isatty = function() {\n\treturn false;\n};\nexport default {\n\tReadStream: WriteStream,\n\tWriteStream,\n\tisatty\n};\n", "// Extracted from .nvmrc\nexport const NODE_VERSION = \"22.14.0\";\n", "import { EventEmitter } from \"node:events\";\nimport { ReadStream, WriteStream } from \"node:tty\";\nimport { notImplemented, createNotImplementedError } from \"../../../_internal/utils.mjs\";\n// node-version.ts is generated at build time\nimport { NODE_VERSION } from \"./node-version.mjs\";\nexport class Process extends EventEmitter {\n\tenv;\n\thrtime;\n\tnextTick;\n\tconstructor(impl) {\n\t\tsuper();\n\t\tthis.env = impl.env;\n\t\tthis.hrtime = impl.hrtime;\n\t\tthis.nextTick = impl.nextTick;\n\t\tfor (const prop of [...Object.getOwnPropertyNames(Process.prototype), ...Object.getOwnPropertyNames(EventEmitter.prototype)]) {\n\t\t\tconst value = this[prop];\n\t\t\tif (typeof value === \"function\") {\n\t\t\t\tthis[prop] = value.bind(this);\n\t\t\t}\n\t\t}\n\t}\n\t// --- event emitter ---\n\temitWarning(warning, type, code) {\n\t\tconsole.warn(`${code ? `[${code}] ` : \"\"}${type ? `${type}: ` : \"\"}${warning}`);\n\t}\n\temit(...args) {\n\t\t// @ts-ignore\n\t\treturn super.emit(...args);\n\t}\n\tlisteners(eventName) {\n\t\treturn super.listeners(eventName);\n\t}\n\t// --- stdio (lazy initializers) ---\n\t#stdin;\n\t#stdout;\n\t#stderr;\n\tget stdin() {\n\t\treturn this.#stdin ??= new ReadStream(0);\n\t}\n\tget stdout() {\n\t\treturn this.#stdout ??= new WriteStream(1);\n\t}\n\tget stderr() {\n\t\treturn this.#stderr ??= new WriteStream(2);\n\t}\n\t// --- cwd ---\n\t#cwd = \"/\";\n\tchdir(cwd) {\n\t\tthis.#cwd = cwd;\n\t}\n\tcwd() {\n\t\treturn this.#cwd;\n\t}\n\t// --- dummy props and getters ---\n\tarch = \"\";\n\tplatform = \"\";\n\targv = [];\n\targv0 = \"\";\n\texecArgv = [];\n\texecPath = \"\";\n\ttitle = \"\";\n\tpid = 200;\n\tppid = 100;\n\tget version() {\n\t\treturn `v${NODE_VERSION}`;\n\t}\n\tget versions() {\n\t\treturn { node: NODE_VERSION };\n\t}\n\tget allowedNodeEnvironmentFlags() {\n\t\treturn new Set();\n\t}\n\tget sourceMapsEnabled() {\n\t\treturn false;\n\t}\n\tget debugPort() {\n\t\treturn 0;\n\t}\n\tget throwDeprecation() {\n\t\treturn false;\n\t}\n\tget traceDeprecation() {\n\t\treturn false;\n\t}\n\tget features() {\n\t\treturn {};\n\t}\n\tget release() {\n\t\treturn {};\n\t}\n\tget connected() {\n\t\treturn false;\n\t}\n\tget config() {\n\t\treturn {};\n\t}\n\tget moduleLoadList() {\n\t\treturn [];\n\t}\n\tconstrainedMemory() {\n\t\treturn 0;\n\t}\n\tavailableMemory() {\n\t\treturn 0;\n\t}\n\tuptime() {\n\t\treturn 0;\n\t}\n\tresourceUsage() {\n\t\treturn {};\n\t}\n\t// --- noop methods ---\n\tref() {\n\t\t// noop\n\t}\n\tunref() {\n\t\t// noop\n\t}\n\t// --- unimplemented methods ---\n\tumask() {\n\t\tthrow createNotImplementedError(\"process.umask\");\n\t}\n\tgetBuiltinModule() {\n\t\treturn undefined;\n\t}\n\tgetActiveResourcesInfo() {\n\t\tthrow createNotImplementedError(\"process.getActiveResourcesInfo\");\n\t}\n\texit() {\n\t\tthrow createNotImplementedError(\"process.exit\");\n\t}\n\treallyExit() {\n\t\tthrow createNotImplementedError(\"process.reallyExit\");\n\t}\n\tkill() {\n\t\tthrow createNotImplementedError(\"process.kill\");\n\t}\n\tabort() {\n\t\tthrow createNotImplementedError(\"process.abort\");\n\t}\n\tdlopen() {\n\t\tthrow createNotImplementedError(\"process.dlopen\");\n\t}\n\tsetSourceMapsEnabled() {\n\t\tthrow createNotImplementedError(\"process.setSourceMapsEnabled\");\n\t}\n\tloadEnvFile() {\n\t\tthrow createNotImplementedError(\"process.loadEnvFile\");\n\t}\n\tdisconnect() {\n\t\tthrow createNotImplementedError(\"process.disconnect\");\n\t}\n\tcpuUsage() {\n\t\tthrow createNotImplementedError(\"process.cpuUsage\");\n\t}\n\tsetUncaughtExceptionCaptureCallback() {\n\t\tthrow createNotImplementedError(\"process.setUncaughtExceptionCaptureCallback\");\n\t}\n\thasUncaughtExceptionCaptureCallback() {\n\t\tthrow createNotImplementedError(\"process.hasUncaughtExceptionCaptureCallback\");\n\t}\n\tinitgroups() {\n\t\tthrow createNotImplementedError(\"process.initgroups\");\n\t}\n\topenStdin() {\n\t\tthrow createNotImplementedError(\"process.openStdin\");\n\t}\n\tassert() {\n\t\tthrow createNotImplementedError(\"process.assert\");\n\t}\n\tbinding() {\n\t\tthrow createNotImplementedError(\"process.binding\");\n\t}\n\t// --- attached interfaces ---\n\tpermission = { has: /* @__PURE__ */ notImplemented(\"process.permission.has\") };\n\treport = {\n\t\tdirectory: \"\",\n\t\tfilename: \"\",\n\t\tsignal: \"SIGUSR2\",\n\t\tcompact: false,\n\t\treportOnFatalError: false,\n\t\treportOnSignal: false,\n\t\treportOnUncaughtException: false,\n\t\tgetReport: /* @__PURE__ */ notImplemented(\"process.report.getReport\"),\n\t\twriteReport: /* @__PURE__ */ notImplemented(\"process.report.writeReport\")\n\t};\n\tfinalization = {\n\t\tregister: /* @__PURE__ */ notImplemented(\"process.finalization.register\"),\n\t\tunregister: /* @__PURE__ */ notImplemented(\"process.finalization.unregister\"),\n\t\tregisterBeforeExit: /* @__PURE__ */ notImplemented(\"process.finalization.registerBeforeExit\")\n\t};\n\tmemoryUsage = Object.assign(() => ({\n\t\tarrayBuffers: 0,\n\t\trss: 0,\n\t\texternal: 0,\n\t\theapTotal: 0,\n\t\theapUsed: 0\n\t}), { rss: () => 0 });\n\t// --- undefined props ---\n\tmainModule = undefined;\n\tdomain = undefined;\n\t// optional\n\tsend = undefined;\n\texitCode = undefined;\n\tchannel = undefined;\n\tgetegid = undefined;\n\tgeteuid = undefined;\n\tgetgid = undefined;\n\tgetgroups = undefined;\n\tgetuid = undefined;\n\tsetegid = undefined;\n\tseteuid = undefined;\n\tsetgid = undefined;\n\tsetgroups = undefined;\n\tsetuid = undefined;\n\t// internals\n\t_events = undefined;\n\t_eventsCount = undefined;\n\t_exiting = undefined;\n\t_maxListeners = undefined;\n\t_debugEnd = undefined;\n\t_debugProcess = undefined;\n\t_fatalException = undefined;\n\t_getActiveHandles = undefined;\n\t_getActiveRequests = undefined;\n\t_kill = undefined;\n\t_preload_modules = undefined;\n\t_rawDebug = undefined;\n\t_startProfilerIdleNotifier = undefined;\n\t_stopProfilerIdleNotifier = undefined;\n\t_tickCallback = undefined;\n\t_disconnect = undefined;\n\t_handleQueue = undefined;\n\t_pendingMessage = undefined;\n\t_channel = undefined;\n\t_send = undefined;\n\t_linkedBinding = undefined;\n}\n", "import { hrtime as UnenvHrTime } from \"unenv/node/internal/process/hrtime\";\nimport { Process as UnenvProcess } from \"unenv/node/internal/process/process\";\nconst globalProcess = globalThis[\"process\"];\nexport const getBuiltinModule = globalProcess.getBuiltinModule;\nexport const { exit, platform, nextTick } = getBuiltinModule(\n \"node:process\"\n);\nconst unenvProcess = new UnenvProcess({\n env: globalProcess.env,\n hrtime: UnenvHrTime,\n nextTick\n});\nexport const {\n abort,\n addListener,\n allowedNodeEnvironmentFlags,\n hasUncaughtExceptionCaptureCallback,\n setUncaughtExceptionCaptureCallback,\n loadEnvFile,\n sourceMapsEnabled,\n arch,\n argv,\n argv0,\n chdir,\n config,\n connected,\n constrainedMemory,\n availableMemory,\n cpuUsage,\n cwd,\n debugPort,\n dlopen,\n disconnect,\n emit,\n emitWarning,\n env,\n eventNames,\n execArgv,\n execPath,\n finalization,\n features,\n getActiveResourcesInfo,\n getMaxListeners,\n hrtime,\n kill,\n listeners,\n listenerCount,\n memoryUsage,\n on,\n off,\n once,\n pid,\n ppid,\n prependListener,\n prependOnceListener,\n rawListeners,\n release,\n removeAllListeners,\n removeListener,\n report,\n resourceUsage,\n setMaxListeners,\n setSourceMapsEnabled,\n stderr,\n stdin,\n stdout,\n title,\n throwDeprecation,\n traceDeprecation,\n umask,\n uptime,\n version,\n versions,\n domain,\n initgroups,\n moduleLoadList,\n reallyExit,\n openStdin,\n assert,\n binding,\n send,\n exitCode,\n channel,\n getegid,\n geteuid,\n getgid,\n getgroups,\n getuid,\n setegid,\n seteuid,\n setgid,\n setgroups,\n setuid,\n permission,\n mainModule,\n _events,\n _eventsCount,\n _exiting,\n _maxListeners,\n _debugEnd,\n _debugProcess,\n _fatalException,\n _getActiveHandles,\n _getActiveRequests,\n _kill,\n _preload_modules,\n _rawDebug,\n _startProfilerIdleNotifier,\n _stopProfilerIdleNotifier,\n _tickCallback,\n _disconnect,\n _handleQueue,\n _pendingMessage,\n _channel,\n _send,\n _linkedBinding\n} = unenvProcess;\nconst _process = {\n abort,\n addListener,\n allowedNodeEnvironmentFlags,\n hasUncaughtExceptionCaptureCallback,\n setUncaughtExceptionCaptureCallback,\n loadEnvFile,\n sourceMapsEnabled,\n arch,\n argv,\n argv0,\n chdir,\n config,\n connected,\n constrainedMemory,\n availableMemory,\n cpuUsage,\n cwd,\n debugPort,\n dlopen,\n disconnect,\n emit,\n emitWarning,\n env,\n eventNames,\n execArgv,\n execPath,\n exit,\n finalization,\n features,\n getBuiltinModule,\n getActiveResourcesInfo,\n getMaxListeners,\n hrtime,\n kill,\n listeners,\n listenerCount,\n memoryUsage,\n nextTick,\n on,\n off,\n once,\n pid,\n platform,\n ppid,\n prependListener,\n prependOnceListener,\n rawListeners,\n release,\n removeAllListeners,\n removeListener,\n report,\n resourceUsage,\n setMaxListeners,\n setSourceMapsEnabled,\n stderr,\n stdin,\n stdout,\n title,\n throwDeprecation,\n traceDeprecation,\n umask,\n uptime,\n version,\n versions,\n // @ts-expect-error old API\n domain,\n initgroups,\n moduleLoadList,\n reallyExit,\n openStdin,\n assert,\n binding,\n send,\n exitCode,\n channel,\n getegid,\n geteuid,\n getgid,\n getgroups,\n getuid,\n setegid,\n seteuid,\n setgid,\n setgroups,\n setuid,\n permission,\n mainModule,\n _events,\n _eventsCount,\n _exiting,\n _maxListeners,\n _debugEnd,\n _debugProcess,\n _fatalException,\n _getActiveHandles,\n _getActiveRequests,\n _kill,\n _preload_modules,\n _rawDebug,\n _startProfilerIdleNotifier,\n _stopProfilerIdleNotifier,\n _tickCallback,\n _disconnect,\n _handleQueue,\n _pendingMessage,\n _channel,\n _send,\n _linkedBinding\n};\nexport default _process;\n", "import { default as defaultExport } from \"@cloudflare/unenv-preset/node/process\";\nglobalThis.process = defaultExport;", "{\n \"name\": \"vsr\",\n \"main\": \"src/index.ts\",\n \"compatibility_date\": \"2024-09-23\",\n \"d1_databases\": [\n {\n \"binding\": \"DB\",\n \"database_name\": \"vsr-local-database\",\n \"database_id\": \"74ce30e6-35cf-42b2-880e-be628f1e8bbb\",\n \"migrations_dir\": \"src/db/migrations\"\n }\n ],\n \"version_metadata\": {\n \"binding\": \"CF_VERSION_METADATA\"\n },\n \"compatibility_flags\": [\"nodejs_compat\"],\n \"workers_dev\": true,\n \"r2_buckets\": [\n {\n \"binding\": \"BUCKET\",\n \"bucket_name\": \"vsr-local-bucket\"\n }\n ],\n \"observability\": {\n \"logs\": {\n \"enabled\": true\n }\n },\n \"queues\": {\n \"producers\": [\n {\n \"queue\": \"cache-refresh-queue\",\n \"binding\": \"CACHE_REFRESH_QUEUE\"\n }\n ],\n \"consumers\": [\n {\n \"queue\": \"cache-refresh-queue\",\n \"max_batch_size\": 10,\n \"max_batch_timeout\": 5,\n \"max_retries\": 3\n }\n ]\n },\n \"assets\": {\n \"directory\": \"./dist/assets/\",\n \"binding\": \"ASSETS\"\n },\n \"dev\": {\n \"local_protocol\": \"http\",\n \"port\": 1337\n },\n \"placement\": {\n \"mode\": \"smart\"\n },\n \"vars\": {\n \"DAEMON_ENABLED\": false,\n \"TELEMETRY_ENABLED\": true,\n \"API_DOCS_ENABLED\": true,\n \"DEBUG_ENABLED\": true,\n \"SENTRY\": {\n \"dsn\": \"https://909b085eb764c00250ad312660c2fdf1@o4506397716054016.ingest.us.sentry.io/4509492612300800\"\n }\n }\n}\n", "{\n \"name\": \"@vltpkg/vsr\",\n \"version\": \"0.0.0-28\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/vltpkg/vltpkg.git\",\n \"directory\": \"src/registry\"\n },\n \"author\": \"vlt technology inc. <support@vlt.sh> (http://vlt.sh)\",\n \"bin\": \"./dist/bin/vsr.js\",\n \"dependencies\": {\n \"@hono/sentry\": \"^1.2.2\",\n \"@hono/zod-openapi\": \"^0.19.10\",\n \"@libsql/client\": \"^0.15.14\",\n \"@scalar/hono-api-reference\": \"^0.9.16\",\n \"@vltpkg/package-info\": \"workspace:*\",\n \"@vltpkg/package-json\": \"workspace:*\",\n \"@vltpkg/server\": \"workspace:*\",\n \"@vltpkg/vlt-json\": \"workspace:*\",\n \"drizzle-orm\": \"^0.44.5\",\n \"hono\": \"^4.9.5\",\n \"minargs\": \"^2.1.0\",\n \"path-scurry\": \"catalog:\",\n \"semver\": \"catalog:\",\n \"validate-npm-package-name\": \"6.0.2\",\n \"wrangler\": \"^4.33.1\",\n \"zod\": \"^3.25.76\"\n },\n \"devDependencies\": {\n \"@cloudflare/vitest-pool-workers\": \"^0.8.68\",\n \"@cloudflare/workers-types\": \"^4.20250829.0\",\n \"@types/node\": \"catalog:\",\n \"@types/validate-npm-package-name\": \"^4.0.2\",\n \"@vltpkg/gui\": \"workspace:*\",\n \"chokidar-cli\": \"^3.0.0\",\n \"drizzle-kit\": \"^0.31.4\",\n \"esbuild\": \"^0.25.9\",\n \"eslint\": \"catalog:\",\n \"typedoc\": \"catalog:\",\n \"typescript\": \"catalog:\",\n \"typescript-eslint\": \"catalog:\",\n \"vitest\": \"^3.2.4\"\n },\n \"license\": \"FSL-1.1-MIT\",\n \"engines\": {\n \"node\": \">=22\"\n },\n \"scripts\": {\n \"build\": \"pnpm build:dist && pnpm build:assets && pnpm build:worker && pnpm build:bin\",\n \"build:assets\": \"node scripts/build-assets.js\",\n \"build:bin\": \"node scripts/build-bin.js\",\n \"build:dist\": \"node -e \\\"const fs=require('fs'); fs.rmSync('./dist', {recursive: true, force: true}); fs.mkdirSync('./dist/assets/public', {recursive: true});\\\"\",\n \"build:worker\": \"npx wrangler deploy --dry-run --outdir dist\",\n \"db:drop\": \"npx wrangler d1 execute vsr-local-database --file=src/db/migrations/drop.sql --local --persist-to=local-store --no-remote && node -e \\\"const fs=require('fs'); fs.rmSync('local-store',{recursive:true,force:true}); fs.rmSync('.wrangler',{recursive:true,force:true});\\\"\",\n \"db:generate\": \"drizzle-kit generate\",\n \"db:migrate\": \"drizzle-kit migrate\",\n \"db:push\": \"drizzle-kit push\",\n \"db:setup\": \"npx wrangler d1 execute vsr-local-database --file=src/db/migrations/0000_initial.sql --local --persist-to=local-store --no-remote && npx wrangler d1 execute vsr-local-database --file=src/db/migrations/0001_wealthy_magdalene.sql --local --persist-to=local-store --no-remote\",\n \"db:studio\": \"drizzle-kit studio --port 4985\",\n \"deploy\": \"pnpm build && npx wrangler deploy\",\n \"format\": \"prettier --write . --log-level warn --ignore-path ../../.prettierignore --cache\",\n \"format:check\": \"prettier --check . --ignore-path ../../.prettierignore --cache\",\n \"lint\": \"eslint . --fix\",\n \"lint:check\": \"eslint .\",\n \"prepack\": \"pnpm build\",\n \"serve:build\": \"pnpm --silent build && node ./dist/bin/vsr.js --debug --daemon=false\",\n \"serve:build:daemon\": \"pnpm --silent build && node ./dist/bin/vsr.js --debug --daemon=true\",\n \"serve:death\": \"echo \\\"Killing wrangler dev processes...\\\" && (pkill -f 'wrangler.*dev' || true) && sleep 1 && (pids=$(lsof -ti :1337 2>/dev/null; lsof -ti :3000 2>/dev/null) && [ -n \\\"$pids\\\" ] && echo \\\"Force killing remaining processes: $pids\\\" && kill -9 $pids || echo \\\"No remaining processes found\\\") && echo \\\"Done.\\\"\",\n \"serve:watch\": \"chokidar './src/**/*' -c 'pnpm serve:death && pnpm serve:build'\",\n \"snap\": \"vitest --no-watch -u\",\n \"pretest\": \"pnpm build\",\n \"test\": \"vitest --no-watch\",\n \"posttest\": \"tsc --noEmit\",\n \"typecheck\": \"tsc --noEmit\",\n \"typecheck:worker\": \"tsc -p tsconfig.worker.json --noEmit\"\n },\n \"type\": \"module\"\n}\n", "export const apiBody = ({ YEAR }: { YEAR: number }) => {\n return `The **vlt serverless registry** is the modern JavaScript package registry.\n \n### Compatible Clients\n\n<table>\n <tbody>\n <tr>\n <td><a href=\"https://vlt.sh\" alt=\"vlt\"><strong><code>vlt</code></strong></a></td>\n <td><a href=\"https://npmjs.com/package/npm\" alt=\"npm\"><strong><code>npm</code></strong></a></td>\n <td><a href=\"https://yarnpkg.com/\" alt=\"yarn\"><strong><code>yarn</code></strong></a></td>\n <td><a href=\"https://pnpm.io/\" alt=\"pnpm\"><strong><code>pnpm</code></strong></a></td>\n <td><a href=\"https://deno.com/\" alt=\"deno\"><strong><code>deno</code></strong></a></td>\n <td><a href=\"https://bun.sh/\" alt=\"bun\"><strong><code>bun</code></strong></a></td>\n </tr>\n </tbody>\n</table>\n\n### Resources\n\n<ul alt=\"resources\">\n <li><a href=\"https://vlt.sh\">https://<strong>vlt.sh</strong></a></li>\n <li><a href=\"https://github.com/vltpkg/vsr\">https://github.com/<strong>vltpkg/vsr</strong></a></li>\n <li><a href=\"https://discord.gg/vltpkg\">https://discord.gg/<strong>vltpkg</strong></a></li>\n <li><a href=\"https://x.com/vltpkg\">https://x.com/<strong>vltpkg</strong></a></li>\n</ul>\n\n##### Trademark Disclaimer\n\n<p alt=\"trademark-disclaimer\">All trademarks, logos and brand names are the property of their respective owners. All company, product and service names used in this website are for identification purposes only. Use of these names, trademarks and brands does not imply endorsement.</p>\n\n### License\n\n<details alt=\"license\">\n<summary><strong>Functional Source License</strong>, Version 1.1, MIT Future License</summary>\n<h1>Functional Source License,<br />Version 1.1,<br />MIT Future License</h1>\n<h2>Abbreviation</h2>\n\nFSL-1.1-MIT\n\n<h2>Notice</h2>\n\nCopyright ${YEAR} vlt technology inc.\n\n<h2>Terms and Conditions</h2>\n\n<h3>Licensor (\"We\")</h3>\n\nThe party offering the Software under these Terms and Conditions.\n\n<h3>The Software</h3>\n\nThe \"Software\" is each version of the software that we make available under\nthese Terms and Conditions, as indicated by our inclusion of these Terms and\nConditions with the Software.\n\n<h3>License Grant</h3>\n\nSubject to your compliance with this License Grant and the Patents,\nRedistribution and Trademark clauses below, we hereby grant you the right to\nuse, copy, modify, create derivative works, publicly perform, publicly display\nand redistribute the Software for any Permitted Purpose identified below.\n\n<h3>Permitted Purpose</h3>\n\nA Permitted Purpose is any purpose other than a Competing Use. A Competing Use\nmeans making the Software available to others in a commercial product or\nservice that:\n\n1. substitutes for the Software;\n\n2. substitutes for any other product or service we offer using the Software\nthat exists as of the date we make the Software available; or\n\n3. offers the same or substantially similar functionality as the Software.\n\nPermitted Purposes specifically include using the Software:\n\n1. for your internal use and access;\n\n2. for non-commercial education;\n\n3. for non-commercial research; and\n\n4. in connection with professional services that you provide to a licensee\nusing the Software in accordance with these Terms and Conditions.\n\n<h3>Patents</h3>\n\nTo the extent your use for a Permitted Purpose would necessarily infringe our\npatents, the license grant above includes a license under our patents. If you\nmake a claim against any party that the Software infringes or contributes to\nthe infringement of any patent, then your patent license to the Software ends\nimmediately.\n\n<h3>Redistribution</h3>\n\nThe Terms and Conditions apply to all copies, modifications and derivatives of\nthe Software.\n\nIf you redistribute any copies, modifications or derivatives of the Software,\nyou must include a copy of or a link to these Terms and Conditions and not\nremove any copyright notices provided in or with the Software.\n\n<h3>Disclaimer</h3>\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND WITHOUT WARRANTIES OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES OF FITNESS FOR A PARTICULAR\nPURPOSE, MERCHANTABILITY, TITLE OR NON-INFRINGEMENT.\n\nIN NO EVENT WILL WE HAVE ANY LIABILITY TO YOU ARISING OUT OF OR RELATED TO THE\nSOFTWARE, INCLUDING INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES,\nEVEN IF WE HAVE BEEN INFORMED OF THEIR POSSIBILITY IN ADVANCE.\n\n<h3>Trademarks</h3>\n\nExcept for displaying the License Details and identifying us as the origin of\nthe Software, you have no right under these Terms and Conditions to use our\ntrademarks, trade names, service marks or product names.\n\n<h2>Grant of Future License</h2>\n\nWe hereby irrevocably grant you an additional license to use the Software under\nthe MIT license that is effective on the second anniversary of the date we make\nthe Software available. On or after that date, you may use the Software under\nthe MIT license, in which case the following will apply:\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n</dialog>`\n}\n", "// get openapi schema\nimport wranglerJson from './wrangler.json' with { type: 'json' }\nimport packageJson from './package.json' with { type: 'json' }\nimport { apiBody } from './src/utils/docs.ts'\nimport type {\n OriginConfig,\n CookieOptions,\n ApiDocsConfig,\n} from './types.ts'\n\nexport const YEAR = new Date().getFullYear()\n\nexport const WRANGLER_CONFIG = wranglerJson.dev\n\nexport const PORT = WRANGLER_CONFIG.port || (1337 as number)\n\nexport const TELEMETRY_ENABLED = true as boolean\n\nexport const HELP_ENABLED = false as boolean\n\n// Sentry configuration for error reporting (when telemetry is enabled)\nexport const SENTRY_CONFIG = {\n dsn: 'https://909b085eb764c00250ad312660c2fdf1@o4506397716054016.ingest.us.sentry.io/4509492612300800',\n sendDefaultPii: true,\n environment: 'development', // Will be overridden by environment variable\n sampleRate: 1.0,\n tracesSampleRate: 0.1, // Lower sample rate for performance traces\n}\n\nexport const DEBUG_ENABLED = false as boolean\n\nexport const API_DOCS_ENABLED = true as boolean\n\nexport const DAEMON_ENABLED = true as boolean\n\nexport const DAEMON_PORT = 3000 as number\n\n// Runtime configuration is now handled by configMiddleware\n// which enriches c.env with computed values like DAEMON_ENABLED, TELEMETRY_ENABLED, etc.\n\nexport const DAEMON_URL = `http://localhost:${DAEMON_PORT}`\n\nexport const VERSION: string = packageJson.version\n\nexport const URL = `http://localhost:${PORT}`\n\nexport const REDIRECT_URI = `${URL}/-/auth/callback`\n\n// how to handle packages requests\nexport const ORIGIN_CONFIG: OriginConfig = {\n default: 'local',\n upstreams: {\n local: {\n type: 'local',\n url: URL,\n allowPublish: true,\n },\n npm: {\n type: 'npm',\n url: 'https://registry.npmjs.org',\n },\n },\n}\n\n// Reserved route prefixes that cannot be used as upstream names\nexport const RESERVED_ROUTES: string[] = [\n '-',\n 'user',\n 'docs',\n 'search',\n 'tokens',\n 'auth',\n 'ping',\n 'package',\n 'v1',\n 'api',\n 'admin',\n '*', // Reserved for hash-based routes\n]\n\n// Backward compatibility - maintain old PROXY behavior\nexport const PROXY: boolean =\n Object.keys(ORIGIN_CONFIG.upstreams).length > 1\n\nexport const PROXY_URL: string | undefined =\n ORIGIN_CONFIG.upstreams[ORIGIN_CONFIG.default]?.url\n\n// the time in seconds to cache the registry\nexport const REQUEST_TIMEOUT: number = 60 * 1000\n\n// cookie options\nexport const COOKIE_OPTIONS: CookieOptions = {\n path: '/',\n httpOnly: true,\n secure: true,\n sameSite: 'strict',\n}\n\n// OpenAPI Docs\nexport const OPEN_API_CONFIG = {\n openapi: '3.1.0',\n info: {\n title: 'vlt serverless registry',\n version: VERSION,\n description: 'The vlt serverless registry API',\n },\n tags: [\n {\n name: 'Health Check',\n description: 'Registry health and status endpoints',\n },\n {\n name: 'Authentication',\n description: 'User authentication and token management',\n },\n {\n name: 'Packages',\n description: 'Package publishing, downloading, and management',\n },\n {\n name: 'Dist-Tags',\n description: 'Package version tagging and lifecycle management',\n },\n {\n name: 'Access Control',\n description:\n 'Package access permissions and collaborator management',\n },\n {\n name: 'Search',\n description: 'Package discovery and search functionality',\n },\n {\n name: 'Security',\n description: 'Security auditing and vulnerability scanning',\n },\n {\n name: 'Dashboard',\n description: 'Registry dashboard and administration',\n },\n {\n name: 'Static Assets',\n description: 'Static file serving and web assets',\n },\n {\n name: 'NPM Compatibility',\n description: 'Legacy npm client compatibility redirects',\n },\n ],\n}\n\n// the docs configuration for the API reference\nexport const SCALAR_API_CONFIG: ApiDocsConfig = {\n metaData: {\n title: 'vlt serverless registry',\n },\n hideModels: false,\n hideDownloadButton: false,\n darkMode: false,\n favicon: '/public/images/favicon/favicon.svg',\n defaultHttpClient: {\n targetKey: 'curl',\n clientKey: 'fetch',\n },\n authentication: {\n http: {\n bearer: {\n token: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',\n },\n basic: {\n username: 'user',\n password: 'pass',\n },\n },\n },\n hiddenClients: {\n python: true,\n c: true,\n go: true,\n java: true,\n ruby: true,\n shell: ['httpie', 'wget', 'fetch'],\n clojure: true,\n csharp: true,\n kotlin: true,\n objc: true,\n swift: true,\n r: true,\n powershell: false,\n ocaml: true,\n curl: false,\n http: true,\n php: true,\n node: ['request', 'unirest'],\n javascript: ['xhr', 'jquery'],\n },\n spec: {\n content: {\n openapi: OPEN_API_CONFIG.openapi,\n servers: [\n {\n url: URL,\n description: 'localhost',\n },\n ],\n info: {\n title: 'vlt serverless registry',\n version: VERSION,\n license: {\n identifier: 'FSL-1.1-MIT',\n name: 'Functional Source License, Version 1.1, MIT Future License',\n url: 'https://fsl.software/FSL-1.1-MIT.template.md',\n },\n description: apiBody({ YEAR }),\n },\n // Include tag ordering and descriptions\n tags: OPEN_API_CONFIG.tags,\n },\n },\n customCss: `@import '${URL}/public/styles/styles.css';`,\n}\n", "import { resolveConfig } from '../middleware/config.ts'\n\n/**\n * Global runtime configuration - can be used outside of routes\n * This will be populated when the server starts up with environment variables\n */\nlet globalRuntimeConfig: ReturnType<typeof resolveConfig> | null =\n null\n\n/**\n * Initialize the global runtime configuration\n * Should be called early in the application lifecycle\n */\nexport function initializeGlobalConfig(env?: any) {\n globalRuntimeConfig = resolveConfig(env)\n return globalRuntimeConfig\n}\n\n/**\n * Get the current runtime configuration\n * Falls back to resolving with no environment if not initialized\n */\nexport function getRuntimeConfig(env?: any) {\n if (globalRuntimeConfig) {\n return globalRuntimeConfig\n }\n // Fallback to resolving with the provided env or defaults\n return resolveConfig(env)\n}\n\n/**\n * Check if daemon is enabled at runtime\n */\nexport function isDaemonEnabled(env?: any): boolean {\n return getRuntimeConfig(env).DAEMON_ENABLED\n}\n\n/**\n * Check if telemetry is enabled at runtime\n */\nexport function isTelemetryEnabled(env?: any): boolean {\n return getRuntimeConfig(env).TELEMETRY_ENABLED\n}\n\n/**\n * Check if debug is enabled at runtime\n */\nexport function isDebugEnabled(env?: any): boolean {\n return getRuntimeConfig(env).DEBUG_ENABLED\n}\n", "import type { Context } from 'hono'\nimport {\n API_DOCS_ENABLED,\n DAEMON_ENABLED,\n DAEMON_PORT,\n DAEMON_URL,\n DEBUG_ENABLED,\n TELEMETRY_ENABLED,\n SENTRY_CONFIG,\n PORT,\n VERSION,\n URL,\n} from '../../config.ts'\n\n/**\n * Runtime configuration resolver - can be used outside of routes\n * Checks environment variables and falls back to defaults\n */\nexport function resolveConfig(env?: any) {\n const getBooleanFromEnv = (\n key: string,\n defaultValue: boolean,\n ): boolean => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n const value = env?.[key]\n return typeof value === 'string' ?\n value.toLowerCase() === 'true'\n : defaultValue\n }\n\n return {\n // Daemon configuration\n DAEMON_ENABLED: getBooleanFromEnv('ARG_DAEMON', DAEMON_ENABLED),\n\n // Telemetry configuration\n TELEMETRY_ENABLED: getBooleanFromEnv(\n 'ARG_TELEMETRY',\n TELEMETRY_ENABLED,\n ),\n\n // Debug configuration\n DEBUG_ENABLED: getBooleanFromEnv('ARG_DEBUG', DEBUG_ENABLED),\n\n // Static config values (pass through)\n API_DOCS_ENABLED,\n DAEMON_PORT,\n DAEMON_URL,\n SENTRY_CONFIG,\n PORT,\n VERSION,\n URL,\n }\n}\n\n/**\n * Configuration middleware that enriches the context with computed config values\n * Merges compile-time defaults with runtime environment variables\n */\nexport async function configMiddleware(\n c: Context,\n next: () => Promise<void>,\n): Promise<void> {\n // Use the resolver to get computed config\n const runtimeConfig = resolveConfig(c.env)\n\n // Initialize global config if not already done\n const { initializeGlobalConfig } = await import(\n '../utils/config.ts'\n )\n initializeGlobalConfig(c.env)\n\n // Enrich the context environment with computed values\n // Ensure c.env exists (it might be undefined in test environments)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n c.env = c.env || {}\n Object.assign(c.env, runtimeConfig)\n\n await next()\n}\n", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "import { notImplemented, notImplementedClass } from \"../_internal/utils.mjs\";\nexport const _cache = Object.create(null);\nexport const _extensions = {\n\t\".js\": /* @__PURE__ */ notImplemented(\"module.require.extensions['.js']\"),\n\t\".json\": /* @__PURE__ */ notImplemented(\"module.require.extensions['.json']\"),\n\t\".node\": /* @__PURE__ */ notImplemented(\"module.require.extensions['.node']\")\n};\nexport const createRequire = function(_filename) {\n\treturn Object.assign(/* @__PURE__ */ notImplemented(\"module.require\"), {\n\t\tresolve: Object.assign(/* @__PURE__ */ notImplemented(\"module.require.resolve\"), { paths: /* @__PURE__ */ notImplemented(\"module.require.resolve.paths\") }),\n\t\tcache: Object.create(null),\n\t\textensions: _extensions,\n\t\tmain: undefined\n\t});\n};\nexport const getCompileCacheDir = function() {\n\treturn undefined;\n};\nexport const enableCompileCache = function(_cacheDir) {\n\treturn {\n\t\tstatus: 0,\n\t\tmessage: \"not implemented\"\n\t};\n};\nexport const constants = Object.freeze({ compileCacheStatus: Object.freeze({\n\tFAILED: 0,\n\tENABLED: 1,\n\tALREADY_ENABLED: 2,\n\tDISABLED: 3\n}) });\n// prettier-ignore\nexport const builtinModules = [\n\t\"_http_agent\",\n\t\"_http_client\",\n\t\"_http_common\",\n\t\"_http_incoming\",\n\t\"_http_outgoing\",\n\t\"_http_server\",\n\t\"_stream_duplex\",\n\t\"_stream_passthrough\",\n\t\"_stream_readable\",\n\t\"_stream_transform\",\n\t\"_stream_wrap\",\n\t\"_stream_writable\",\n\t\"_tls_common\",\n\t\"_tls_wrap\",\n\t\"assert\",\n\t\"assert/strict\",\n\t\"async_hooks\",\n\t\"buffer\",\n\t\"child_process\",\n\t\"cluster\",\n\t\"console\",\n\t\"constants\",\n\t\"crypto\",\n\t\"dgram\",\n\t\"diagnostics_channel\",\n\t\"dns\",\n\t\"dns/promises\",\n\t\"domain\",\n\t\"events\",\n\t\"fs\",\n\t\"fs/promises\",\n\t\"http\",\n\t\"http2\",\n\t\"https\",\n\t\"inspector\",\n\t\"inspector/promises\",\n\t\"module\",\n\t\"net\",\n\t\"os\",\n\t\"path\",\n\t\"path/posix\",\n\t\"path/win32\",\n\t\"perf_hooks\",\n\t\"process\",\n\t\"punycode\",\n\t\"querystring\",\n\t\"readline\",\n\t\"readline/promises\",\n\t\"repl\",\n\t\"stream\",\n\t\"stream/consumers\",\n\t\"stream/promises\",\n\t\"stream/web\",\n\t\"string_decoder\",\n\t\"sys\",\n\t\"timers\",\n\t\"timers/promises\",\n\t\"tls\",\n\t\"trace_events\",\n\t\"tty\",\n\t\"url\",\n\t\"util\",\n\t\"util/types\",\n\t\"v8\",\n\t\"vm\",\n\t\"wasi\",\n\t\"worker_threads\",\n\t\"zlib\"\n];\nexport const isBuiltin = function(id) {\n\treturn id.startsWith(\"node:\") || builtinModules.includes(id);\n};\nexport const runMain = /* @__PURE__ */ notImplemented(\"module.runMain\");\nexport const register = /* @__PURE__ */ notImplemented(\"module.register\");\nexport const syncBuiltinESMExports = function() {\n\treturn [];\n};\nexport const findSourceMap = function(path, error) {\n\treturn undefined;\n};\nexport const flushCompileCache = function flushCompileCache() {\n\t/* silent noop */\n};\nexport const wrap = function(source) {\n\treturn `(function (exports, require, module, __filename, __dirname) { ${source}\\n});`;\n};\nexport const wrapper = [\"(function (exports, require, module, __filename, __dirname) { \", \"\\n});\"];\nexport const stripTypeScriptTypes = /* @__PURE__ */ notImplemented(\"module.stripTypeScriptTypes\");\nexport const SourceMap = /* @__PURE__ */ notImplementedClass(\"module.SourceMap\");\nexport const _debug = console.debug;\nexport const _findPath = /* @__PURE__ */ notImplemented(\"module._findPath\");\nexport const _initPaths = /* @__PURE__ */ notImplemented(\"module._initPaths\");\nexport const _load = /* @__PURE__ */ notImplemented(\"module._load\");\nexport const _nodeModulePaths = /* @__PURE__ */ notImplemented(\"module._nodeModulePaths\");\nexport const _preloadModules = /* @__PURE__ */ notImplemented(\"module._preloadModules\");\nexport const _resolveFilename = /* @__PURE__ */ notImplemented(\"module._resolveFilename\");\nexport const _resolveLookupPaths = /* @__PURE__ */ notImplemented(\"module._resolveLookupPaths\");\nexport const _stat = /* @__PURE__ */ notImplemented(\"module._stat\");\nexport const _readPackage = /* @__PURE__ */ notImplemented(\"module._readPackage\");\nexport const findPackageJSON = /* @__PURE__ */ notImplemented(\"module.findPackageJSON\");\nexport const getSourceMapsSupport = /* @__PURE__ */ notImplemented(\"module.getSourceMapsSupport\");\nexport const setSourceMapsSupport = /* @__PURE__ */ notImplemented(\"module.setSourceMapsSupport\");\nexport const _pathCache = Object.create(null);\nexport const globalPaths = [\"node_modules\"];\n// export class _Module implements NodeJS.Module {\n// require: NodeJS.Require;\n// id: string;\n// filename: string;\n// exports = Object.create(null);\n// parent = undefined;\n// loaded = true;\n// children = [];\n// isPreloading: boolean = false;\n// path: string = \"/\";\n// paths: string[] = [];\n// constructor(id = \"index.js\") {\n// this.id = id;\n// this.filename = id;\n// this.require = createRequire(id);\n// }\n// }\nexport const Module = {\n\tget Module() {\n\t\treturn Module;\n\t},\n\tSourceMap,\n\t_cache,\n\t_extensions,\n\t_debug,\n\t_pathCache,\n\t_findPath,\n\t_initPaths,\n\t_load,\n\t_nodeModulePaths,\n\t_preloadModules,\n\t_resolveFilename,\n\t_resolveLookupPaths,\n\t_stat,\n\t_readPackage,\n\tbuiltinModules,\n\tconstants,\n\tcreateRequire,\n\tenableCompileCache,\n\tfindSourceMap,\n\tgetCompileCacheDir,\n\tglobalPaths,\n\tisBuiltin,\n\tregister,\n\trunMain,\n\tsyncBuiltinESMExports,\n\twrap,\n\twrapper,\n\tflushCompileCache,\n\tstripTypeScriptTypes,\n\tfindPackageJSON,\n\tgetSourceMapsSupport,\n\tsetSourceMapsSupport\n};\nexport default Module;\n", "import { notImplemented } from \"unenv/_internal/utils\";\nimport {\n _cache,\n _debug,\n _extensions,\n _findPath,\n _initPaths,\n _load,\n _nodeModulePaths,\n _pathCache,\n _preloadModules,\n _resolveFilename,\n _resolveLookupPaths,\n builtinModules,\n constants,\n enableCompileCache,\n findSourceMap,\n getCompileCacheDir,\n globalPaths,\n isBuiltin,\n Module,\n register,\n runMain,\n SourceMap,\n syncBuiltinESMExports,\n wrap\n} from \"unenv/node/module\";\nexport {\n Module,\n SourceMap,\n _cache,\n _extensions,\n _debug,\n _pathCache,\n _findPath,\n _initPaths,\n _load,\n _nodeModulePaths,\n _preloadModules,\n _resolveFilename,\n _resolveLookupPaths,\n builtinModules,\n constants,\n enableCompileCache,\n findSourceMap,\n getCompileCacheDir,\n globalPaths,\n isBuiltin,\n register,\n runMain,\n syncBuiltinESMExports,\n wrap\n} from \"unenv/node/module\";\nconst workerdModule = process.getBuiltinModule(\"node:module\");\nexport const createRequire = (file) => {\n return Object.assign(workerdModule.createRequire(file), {\n resolve: Object.assign(\n /* @__PURE__ */ notImplemented(\"module.require.resolve\"),\n {\n paths: /* @__PURE__ */ notImplemented(\"module.require.resolve.paths\")\n }\n ),\n cache: /* @__PURE__ */ Object.create(null),\n extensions: _extensions,\n main: void 0\n });\n};\nexport default {\n Module,\n SourceMap,\n _cache,\n _extensions,\n _debug,\n _pathCache,\n _findPath,\n _initPaths,\n _load,\n _nodeModulePaths,\n _preloadModules,\n _resolveFilename,\n _resolveLookupPaths,\n builtinModules,\n enableCompileCache,\n constants,\n createRequire,\n findSourceMap,\n getCompileCacheDir,\n globalPaths,\n isBuiltin,\n register,\n runMain,\n syncBuiltinESMExports,\n wrap\n};\n", "import libDefault from 'module';\nmodule.exports = libDefault;", "'use strict'\nconst { builtinModules: builtins } = require('module')\n\nvar scopedPackagePattern = new RegExp('^(?:@([^/]+?)[/])?([^/]+?)$')\nvar exclusionList = [\n 'node_modules',\n 'favicon.ico',\n]\n\nfunction validate (name) {\n var warnings = []\n var errors = []\n\n if (name === null) {\n errors.push('name cannot be null')\n return done(warnings, errors)\n }\n\n if (name === undefined) {\n errors.push('name cannot be undefined')\n return done(warnings, errors)\n }\n\n if (typeof name !== 'string') {\n errors.push('name must be a string')\n return done(warnings, errors)\n }\n\n if (!name.length) {\n errors.push('name length must be greater than zero')\n }\n\n if (name.startsWith('.')) {\n errors.push('name cannot start with a period')\n }\n\n if (name.match(/^_/)) {\n errors.push('name cannot start with an underscore')\n }\n\n if (name.trim() !== name) {\n errors.push('name cannot contain leading or trailing spaces')\n }\n\n // No funny business\n exclusionList.forEach(function (excludedName) {\n if (name.toLowerCase() === excludedName) {\n errors.push(excludedName + ' is not a valid package name')\n }\n })\n\n // Generate warnings for stuff that used to be allowed\n\n // core module names like http, events, util, etc\n if (builtins.includes(name.toLowerCase())) {\n warnings.push(name + ' is a core module name')\n }\n\n if (name.length > 214) {\n warnings.push('name can no longer contain more than 214 characters')\n }\n\n // mIxeD CaSe nAMEs\n if (name.toLowerCase() !== name) {\n warnings.push('name can no longer contain capital letters')\n }\n\n if (/[~'!()*]/.test(name.split('/').slice(-1)[0])) {\n warnings.push('name can no longer contain special characters (\"~\\'!()*\")')\n }\n\n if (encodeURIComponent(name) !== name) {\n // Maybe it's a scoped package name, like @user/package\n var nameMatch = name.match(scopedPackagePattern)\n if (nameMatch) {\n var user = nameMatch[1]\n var pkg = nameMatch[2]\n\n if (pkg.startsWith('.')) {\n errors.push('name cannot start with a period')\n }\n\n if (encodeURIComponent(user) === user && encodeURIComponent(pkg) === pkg) {\n return done(warnings, errors)\n }\n }\n\n errors.push('name can only contain URL-friendly characters')\n }\n\n return done(warnings, errors)\n}\n\nvar done = function (warnings, errors) {\n var result = {\n validForNewPackages: errors.length === 0 && warnings.length === 0,\n validForOldPackages: errors.length === 0,\n warnings: warnings,\n errors: errors,\n }\n if (!result.warnings.length) {\n delete result.warnings\n }\n if (!result.errors.length) {\n delete result.errors\n }\n return result\n}\n\nmodule.exports = validate\n", "import * as semver from 'semver'\nimport validate from 'validate-npm-package-name'\nimport { URL } from '../../config.ts'\nimport type {\n HonoContext,\n PackageSpec,\n PackageManifest,\n ValidationResult,\n} from '../../types.ts'\n\n/**\n * Extracts package.json from a tarball buffer\n * @param {Uint8Array} _tarballBuffer - The tarball as a Uint8Array\n * @returns {Promise<PackageManifest | null>} The parsed package.json content\n */\nexport async function extractPackageJSON(\n _tarballBuffer: Uint8Array,\n): Promise<PackageManifest | null> {\n try {\n // This would need to be implemented with a tarball extraction library\n // For now, return null as a placeholder\n return null\n } catch (_error) {\n return null\n }\n}\n\n/**\n * Extracts package specification from context\n * @param {HonoContext} c - The Hono context\n * @returns {PackageSpec} Package specification object\n */\nexport function packageSpec(c: HonoContext): PackageSpec {\n const { scope, pkg } = c.req.param()\n\n if (scope && pkg) {\n // Scoped package\n const name =\n scope.startsWith('@') ? `${scope}/${pkg}` : `@${scope}/${pkg}`\n return { name, scope, pkg }\n } else if (scope) {\n // Unscoped package (scope is actually the package name)\n return { name: scope, pkg: scope }\n }\n\n return {}\n}\n\n/**\n * Creates a file path for a package tarball\n * @param {object} options - Object with pkg and version\n * @param {string} options.pkg - Package name\n * @param {string} options.version - Package version\n * @returns {string} Tarball file path\n */\nexport function createFile({\n pkg,\n version,\n}: {\n pkg: string\n version: string\n}): string {\n try {\n if (!pkg || !version) {\n throw new Error('Missing required parameters')\n }\n // Generate the tarball path similar to npm registry format\n const packageName = pkg.split('/').pop() || pkg\n return `${pkg}/-/${packageName}-${version}.tgz`\n } catch (_err) {\n // Failed to create file path\n throw new Error('Failed to generate tarball path')\n }\n}\n\n/**\n * Creates a version specification string\n * @param {string} packageName - The package name\n * @param {string} version - The version\n * @returns {string} Version specification string\n */\nexport function createVersionSpec(\n packageName: string,\n version: string,\n): string {\n return `${packageName}@${version}`\n}\n\n/**\n * Creates a full version object with proper manifest structure\n * @param {object} options - Object with pkg, version, and manifest\n * @param {string} options.pkg - Package name\n * @param {string} options.version - Package version\n * @param {any} options.manifest - Package manifest data\n * @returns {any} The manifest with proper name, version, and dist fields\n */\ninterface ManifestInput {\n name?: string\n version?: string\n dist?: {\n tarball?: string\n [key: string]: unknown\n }\n [key: string]: unknown\n}\n\nexport function createVersion({\n pkg,\n version,\n manifest,\n}: {\n pkg: string\n version: string\n manifest: unknown\n}): ManifestInput {\n // If manifest is a string, parse it\n let parsedManifest: ManifestInput\n if (typeof manifest === 'string') {\n try {\n parsedManifest = JSON.parse(manifest) as ManifestInput\n } catch (_e) {\n // If parsing fails, use empty object\n parsedManifest = {}\n }\n } else {\n parsedManifest = manifest as ManifestInput\n }\n\n // Create the final manifest with proper structure\n const result: ManifestInput = {\n ...parsedManifest,\n name: pkg,\n version: version,\n dist: {\n ...(parsedManifest.dist ?? {}),\n tarball:\n parsedManifest.dist?.tarball ??\n `https://registry.npmjs.org/${pkg}/-/${pkg.split('/').pop()}-${version}.tgz`,\n },\n }\n\n return result\n}\n\ninterface SlimManifestContext {\n protocol?: string\n host?: string\n upstream?: string\n}\n\ninterface ParsedManifest {\n name?: string\n version?: string\n description?: string\n keywords?: string[]\n homepage?: string\n bugs?: unknown\n license?: string\n author?: unknown\n contributors?: unknown[]\n funding?: unknown\n files?: string[]\n main?: string\n browser?: unknown\n bin?: Record<string, string>\n man?: unknown\n directories?: unknown\n repository?: unknown\n scripts?: Record<string, string>\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n bundledDependencies?: string[]\n peerDependenciesMeta?: Record<string, unknown>\n engines?: Record<string, string>\n os?: string[]\n cpu?: string[]\n types?: string\n typings?: string\n module?: string\n exports?: unknown\n imports?: unknown\n type?: string\n dist?: {\n tarball?: string\n integrity?: string\n shasum?: string\n [key: string]: unknown\n }\n [key: string]: unknown\n}\n\n/**\n * Creates a slimmed down version of a package manifest\n * Removes sensitive or unnecessary fields for public consumption\n * @param {unknown} manifest - The full package manifest\n * @param {SlimManifestContext} [context] - Optional context for URL rewriting\n * @returns {ParsedManifest} Slimmed manifest\n */\nexport function slimManifest(\n manifest: unknown,\n context?: SlimManifestContext,\n): ParsedManifest {\n if (!manifest) return {} as ParsedManifest\n\n try {\n // Parse manifest if it's a string\n let parsed: ParsedManifest\n if (typeof manifest === 'string') {\n try {\n parsed = JSON.parse(manifest) as ParsedManifest\n } catch (_e) {\n // If parsing fails, return empty manifest\n return {} as ParsedManifest\n }\n } else {\n parsed = manifest as ParsedManifest\n }\n\n // Create a new object with only the fields we want to keep\n const slimmed: ParsedManifest = {}\n\n // Only add properties that exist\n if (parsed.name !== undefined) slimmed.name = parsed.name\n if (parsed.version !== undefined) slimmed.version = parsed.version\n if (parsed.description !== undefined)\n slimmed.description = parsed.description\n if (parsed.keywords !== undefined)\n slimmed.keywords = parsed.keywords\n if (parsed.homepage !== undefined)\n slimmed.homepage = parsed.homepage\n if (parsed.bugs !== undefined) slimmed.bugs = parsed.bugs\n if (parsed.license !== undefined) slimmed.license = parsed.license\n if (parsed.author !== undefined) slimmed.author = parsed.author\n if (parsed.contributors !== undefined)\n slimmed.contributors = parsed.contributors\n if (parsed.funding !== undefined) slimmed.funding = parsed.funding\n if (parsed.files !== undefined) slimmed.files = parsed.files\n if (parsed.main !== undefined) slimmed.main = parsed.main\n if (parsed.browser !== undefined) slimmed.browser = parsed.browser\n if (parsed.bin !== undefined) slimmed.bin = parsed.bin\n if (parsed.man !== undefined) slimmed.man = parsed.man\n if (parsed.directories !== undefined)\n slimmed.directories = parsed.directories\n if (parsed.repository !== undefined)\n slimmed.repository = parsed.repository\n if (parsed.scripts !== undefined) slimmed.scripts = parsed.scripts\n // Always include dependencies as empty objects if not present\n slimmed.dependencies = parsed.dependencies ?? {}\n slimmed.devDependencies = parsed.devDependencies ?? {}\n if (parsed.peerDependencies !== undefined)\n slimmed.peerDependencies = parsed.peerDependencies\n if (parsed.optionalDependencies !== undefined)\n slimmed.optionalDependencies = parsed.optionalDependencies\n if (parsed.bundledDependencies !== undefined)\n slimmed.bundledDependencies = parsed.bundledDependencies\n if (parsed.peerDependenciesMeta !== undefined)\n slimmed.peerDependenciesMeta = parsed.peerDependenciesMeta\n if (parsed.engines !== undefined) slimmed.engines = parsed.engines\n if (parsed.os !== undefined) slimmed.os = parsed.os\n if (parsed.cpu !== undefined) slimmed.cpu = parsed.cpu\n if (parsed.types !== undefined) slimmed.types = parsed.types\n if (parsed.typings !== undefined) slimmed.typings = parsed.typings\n if (parsed.module !== undefined) slimmed.module = parsed.module\n if (parsed.exports !== undefined) slimmed.exports = parsed.exports\n if (parsed.imports !== undefined) slimmed.imports = parsed.imports\n if (parsed.type !== undefined) slimmed.type = parsed.type\n\n // Handle dist object specially - always include with defaults\n slimmed.dist = {\n ...(parsed.dist ?? {}),\n tarball: rewriteTarballUrlIfNeeded(\n parsed.dist?.tarball ?? '',\n parsed.name ?? '',\n parsed.version ?? '',\n context,\n ),\n integrity: parsed.dist?.integrity ?? '',\n shasum: parsed.dist?.shasum ?? '',\n }\n\n return slimmed\n } catch (_err) {\n // Failed to slim manifest\n return {} as ParsedManifest // Return empty manifest if slimming fails\n }\n}\n\n/**\n * Validates a package name using npm validation rules\n * @param {string} packageName - The package name to validate\n * @returns {ValidationResult} Validation result\n */\nexport function validatePackageName(\n packageName: string,\n): ValidationResult {\n const result = validate(packageName)\n return {\n valid: result.validForNewPackages || result.validForOldPackages,\n\n errors: result.errors ?? [],\n }\n}\n\n/**\n * Validates a semver version string\n * @param {string} version - The version to validate\n * @returns {boolean} True if valid semver\n */\nexport function validateVersion(version: string): boolean {\n return semver.valid(version) !== null\n}\n\n/**\n * Parses a version range and returns the best matching version from a list\n * @param {string} range - The semver range\n * @param {string[]} versions - Available versions\n * @returns {string | null} Best matching version or null\n */\nexport function getBestMatchingVersion(\n range: string,\n versions: string[],\n): string | null {\n try {\n return semver.maxSatisfying(versions, range)\n } catch (_error) {\n // Invalid semver range\n return null\n }\n}\n\n/**\n * Extracts the package name from a scoped or unscoped package identifier\n * @param {string} identifier - Package identifier (e.g., \"@scope/package\" or \"package\")\n * @returns {object} Package name components\n */\nexport function parsePackageIdentifier(identifier: string): {\n scope?: string\n name: string\n fullName: string\n} {\n if (identifier.startsWith('@')) {\n const parts = identifier.split('/')\n if (parts.length >= 2) {\n const scope = parts[0]\n return {\n ...(scope && { scope }),\n name: parts.slice(1).join('/'),\n fullName: identifier,\n }\n }\n }\n\n return {\n name: identifier,\n fullName: identifier,\n }\n}\n\n/**\n * Generates a tarball filename for a package version\n * @param {string} packageName - The package name\n * @param {string} version - The package version\n * @returns {string} Tarball filename\n */\nexport function generateTarballFilename(\n packageName: string,\n version: string,\n): string {\n const name = packageName.split('/').pop() || packageName\n return `${name}-${version}.tgz`\n}\n\n/**\n * Rewrites tarball URLs if needed for local registry\n * @param {string} _originalUrl - The original tarball URL\n * @param {string} packageName - The package name\n * @param {string} version - The package version\n * @param {any} [context] - Optional context for URL rewriting\n * @returns {string} Rewritten or original URL\n */\nfunction rewriteTarballUrlIfNeeded(\n _originalUrl: string,\n packageName: string,\n version: string,\n context?: SlimManifestContext,\n): string {\n try {\n // Check if we should rewrite URLs for this upstream\n const upstream = context?.upstream\n const protocol = context?.protocol\n const host = context?.host\n\n if (upstream && protocol && host) {\n // Rewrite to our local registry format for upstream packages\n return `${protocol}://${host}/${upstream}/${packageName}/-/${generateTarballFilename(packageName, version)}`\n }\n\n // Default to local registry format using DOMAIN\n return `${URL}/${createFile({ pkg: packageName, version })}`\n } catch (_err) {\n // Fallback to local registry format\n return `${URL}/${createFile({ pkg: packageName, version })}`\n }\n}\n\n/**\n * Checks if a version satisfies a semver range\n * @param {string} version - The version to check\n * @param {string} range - The semver range\n * @returns {boolean} True if version satisfies range\n */\nexport function satisfiesRange(\n version: string,\n range: string,\n): boolean {\n try {\n return semver.satisfies(version, range)\n } catch (_error) {\n return false\n }\n}\n\n/**\n * Sorts versions in descending order\n * @param {string[]} versions - Array of version strings\n * @returns {string[]} Sorted versions\n */\nexport function sortVersionsDescending(versions: string[]): string[] {\n return versions.sort((a, b) => semver.rcompare(a, b))\n}\n\n/**\n * Gets the latest version from an array of versions\n * @param {string[]} versions - Array of version strings\n * @returns {string | null} Latest version or null if none\n */\nexport function getLatestVersion(versions: string[]): string | null {\n if (versions.length === 0) return null\n const sorted = sortVersionsDescending(versions)\n return sorted[0] || null\n}\n\n/**\n * Validates a tarball buffer\n * @param {Uint8Array} _tarballBuffer - The tarball buffer to validate\n * @returns {boolean} True if valid tarball\n */\nexport function validateTarball(_tarballBuffer: Uint8Array): boolean {\n // Basic validation - could be extended\n return true\n}\n", "import { packageSpec } from './packages.ts'\nimport type {\n HonoContext,\n TokenScope,\n TokenAccess,\n AuthUser,\n DatabaseOperations,\n} from '../../types.ts'\n\n// Helper function to get typed database from context\nfunction getDb(c: HonoContext): DatabaseOperations {\n return c.get('db')\n}\n\nexport function getTokenFromHeader(c: HonoContext): string | null {\n const auth = c.req.header('Authorization')\n if (auth?.startsWith('Bearer ')) {\n return auth.substring(7).trim()\n }\n return null\n}\n\nexport function parseTokenAccess({\n scope,\n pkg,\n uuid,\n}: {\n scope: TokenScope[]\n pkg?: string\n uuid: string\n}): TokenAccess {\n const read = ['get']\n const write = ['put', 'post', 'delete']\n const temp: TokenAccess = {\n anyUser: false,\n specificUser: false,\n anyPackage: false,\n specificPackage: false,\n readAccess: false,\n writeAccess: false,\n methods: [],\n }\n\n // TODO: add for multiple package access/aliases in scopes\n const alternates: Record<string, string> = {}\n\n scope.map(s => {\n if (s.types.pkg) {\n if (s.values.includes('*')) {\n temp.anyPackage = true\n }\n if (\n pkg &&\n (s.values.includes(pkg) ||\n (alternates[pkg] && s.values.includes(alternates[pkg])))\n ) {\n temp.specificPackage = true\n }\n if (\n (temp.anyPackage || temp.specificPackage) &&\n s.types.pkg.read\n ) {\n temp.readAccess = true\n }\n if (\n (temp.anyPackage || temp.specificPackage) &&\n s.types.pkg.write\n ) {\n temp.writeAccess = true\n }\n }\n if (s.types.user) {\n if (s.values.includes('*')) {\n temp.anyUser = true\n }\n if (s.values.includes(`~${uuid}`)) {\n temp.specificUser = true\n }\n if ((temp.anyUser || temp.specificUser) && s.types.user.read) {\n temp.readAccess = true\n }\n if ((temp.anyUser || temp.specificUser) && s.types.user.write) {\n temp.writeAccess = true\n }\n }\n })\n\n temp.methods = (temp.readAccess ? read : []).concat(\n temp.writeAccess ? write : [],\n )\n return temp\n}\n\nexport function isUserRoute(path: string): boolean {\n const routes = [\n 'ping',\n 'whoami',\n 'vlt/tokens',\n 'npm/v1/user',\n 'npm/v1/tokens',\n 'org/',\n ]\n return !!routes.filter(r => path.startsWith(`/-/${r}`)).length\n}\n\nexport async function getUserFromToken({\n c,\n token,\n}: {\n c: HonoContext\n token: string\n}): Promise<AuthUser> {\n const result = await getDb(c).getToken(token)\n if (!result) return { uuid: null, scope: null, token }\n\n // Handle the case when scope is already an object (for tests)\n let scope = result.scope\n if (typeof scope === 'string') {\n try {\n scope = JSON.parse(scope) as TokenScope[]\n } catch (_e) {\n // Log error to monitoring system instead of console\n return { uuid: null, scope: null, token }\n }\n }\n\n return {\n uuid: result.uuid,\n scope,\n token,\n }\n}\n\nexport async function getAuthedUser({\n c,\n token,\n}: {\n c: HonoContext\n token?: string | null\n}): Promise<AuthUser | null> {\n const authToken = token || getTokenFromHeader(c)\n if (!authToken) {\n return null\n }\n return await getUserFromToken({ c, token: authToken })\n}\n\nexport async function verifyToken(\n token: string,\n c: HonoContext,\n): Promise<boolean> {\n const method = c.req.method ? c.req.method.toLowerCase() : ''\n\n if (!token) {\n return false\n }\n\n const { uuid, scope } = await getUserFromToken({ c, token })\n\n if (!uuid || !scope?.length) {\n return false\n } else {\n const { path } = c.req\n const { pkg } = packageSpec(c)\n const routeType =\n isUserRoute(path) ? 'user'\n : pkg ? 'pkg'\n : null\n\n // determine access\n const parseParams: {\n scope: TokenScope[]\n uuid: string\n pkg?: string\n } = { scope, uuid }\n if (pkg) {\n parseParams.pkg = pkg\n }\n const {\n anyUser,\n specificUser,\n anyPackage,\n specificPackage,\n methods,\n } = parseTokenAccess(parseParams)\n\n const methodAllowed = methods.includes(method)\n\n // if the route is a user route\n if (routeType === 'user') {\n return methodAllowed && (anyUser || specificUser)\n }\n\n // handle package routes\n if (routeType === 'pkg') {\n return methodAllowed && (anyPackage || specificPackage)\n }\n\n // fallback to false (should be unreachable code path)\n return false\n }\n}\n", "import { ORIGIN_CONFIG, RESERVED_ROUTES } from '../../config.ts'\nimport type {\n UpstreamConfig,\n ParsedPackageInfo,\n} from '../../types.ts'\n\n/**\n * Validates if an upstream name is allowed (not reserved)\n * @param {string} upstreamName - The upstream name to validate\n * @returns {boolean} True if valid, false if reserved\n */\nexport function isValidUpstreamName(upstreamName: string): boolean {\n return !RESERVED_ROUTES.includes(upstreamName)\n}\n\n/**\n * Gets the upstream configuration by name\n * @param {string} upstreamName - The upstream name\n * @returns {UpstreamConfig | null} The upstream config or null if not found\n */\nexport function getUpstreamConfig(\n upstreamName: string,\n): UpstreamConfig | null {\n return ORIGIN_CONFIG.upstreams[upstreamName] ?? null\n}\n\n/**\n * Gets the default upstream name\n * @returns {string} The default upstream name\n */\nexport function getDefaultUpstream(): string {\n return ORIGIN_CONFIG.default\n}\n\n/**\n * Generates a cache key for upstream package data\n * @param {string} upstreamName - The upstream name\n * @param {string} packageName - The package name\n * @param {string} [version] - The package version (optional)\n * @returns {string} A deterministic hash ID\n */\nexport function generateCacheKey(\n upstreamName: string,\n packageName: string,\n version?: string,\n): string {\n const key =\n version ?\n `${upstreamName}:${packageName}:${version}`\n : `${upstreamName}:${packageName}`\n\n // Use TextEncoder for cross-platform compatibility\n const encoder = new TextEncoder()\n const data = encoder.encode(key)\n\n // Convert to base64 using btoa\n const base64 = btoa(String.fromCharCode(...data))\n\n // Convert base64 to base64url format (replace + with -, / with _, remove =)\n return base64\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '')\n}\n\n/**\n * Parses a request path to extract package information\n * @param {string} path - The request path\n * @returns {ParsedPackageInfo} Parsed package info\n */\nexport function parsePackageSpec(path: string): ParsedPackageInfo {\n // Remove leading slash and split by '/'\n const segments = path.replace(/^\\/+/, '').split('/')\n\n // Handle different path patterns\n if (segments.length === 0) {\n return { packageName: '', segments }\n }\n\n // Check if first segment is an upstream name\n const firstSegment = segments[0]\n if (firstSegment && ORIGIN_CONFIG.upstreams[firstSegment]) {\n // Path starts with upstream name: /upstream/package/version\n const upstream = firstSegment\n const packageSegments = segments.slice(1)\n\n if (packageSegments.length === 0) {\n return { upstream, packageName: '', segments: packageSegments }\n }\n\n // Handle scoped packages: @scope/package\n if (\n packageSegments[0]?.startsWith('@') &&\n packageSegments.length > 1\n ) {\n const packageName = `${packageSegments[0]}/${packageSegments[1]}`\n const version = packageSegments[2]\n const remainingSegments = packageSegments.slice(2)\n return {\n upstream,\n packageName,\n version,\n segments: remainingSegments,\n }\n }\n\n // Handle regular packages\n const packageName = packageSegments[0] || ''\n const version = packageSegments[1]\n const remainingSegments = packageSegments.slice(1)\n return {\n upstream,\n packageName,\n version,\n segments: remainingSegments,\n }\n }\n\n // No upstream in path, treat as package name\n if (firstSegment?.startsWith('@') && segments.length > 1) {\n // Scoped package: @scope/package/version\n const packageName = `${segments[0]}/${segments[1] || ''}`\n const version = segments[2]\n const remainingSegments = segments.slice(2)\n return { packageName, version, segments: remainingSegments }\n }\n\n // Regular package: package/version\n const packageName = segments[0] || ''\n const version = segments[1]\n const remainingSegments = segments.slice(1)\n return { packageName, version, segments: remainingSegments }\n}\n\n/**\n * Constructs the upstream URL for a package request\n * @param {UpstreamConfig} upstreamConfig - The upstream configuration\n * @param {string} packageName - The package name\n * @param {string} [path] - Additional path segments\n * @returns {string} The full upstream URL\n */\nexport function buildUpstreamUrl(\n upstreamConfig: UpstreamConfig,\n packageName: string,\n path = '',\n): string {\n const baseUrl = upstreamConfig.url.replace(/\\/$/, '')\n const encodedPackage = encodeURIComponent(packageName)\n\n switch (upstreamConfig.type) {\n case 'npm':\n case 'vsr':\n return `${baseUrl}/${encodedPackage}${path ? `/${path}` : ''}`\n case 'jsr':\n // JSR has a different URL structure\n return `${baseUrl}/${encodedPackage}${path ? `/${path}` : ''}`\n case 'local':\n return `${baseUrl}/${encodedPackage}${path ? `/${path}` : ''}`\n default:\n return `${baseUrl}/${encodedPackage}${path ? `/${path}` : ''}`\n }\n}\n\n/**\n * Checks if proxying is enabled for an upstream\n * @param {string} upstreamName - The upstream name\n * @returns {boolean} True if proxying is enabled\n */\nexport function isProxyEnabled(upstreamName: string): boolean {\n const config = getUpstreamConfig(upstreamName)\n return config !== null && config.type !== 'local'\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-assignment */\nimport { OPEN_API_CONFIG } from '../config.ts'\nimport { OpenAPIHono } from '@hono/zod-openapi'\nimport { requestId } from 'hono/request-id'\nimport { bearerAuth } from 'hono/bearer-auth'\nimport { except } from 'hono/combine'\nimport { logger } from 'hono/logger'\nimport { secureHeaders } from 'hono/secure-headers'\nimport { trimTrailingSlash } from 'hono/trailing-slash'\nimport { telemetryMiddleware } from './middleware/telemetry.ts'\nimport { configMiddleware } from './middleware/config.ts'\nimport { getApp } from './utils/spa.ts'\nimport { verifyToken } from './utils/auth.ts'\nimport { mountDatabase } from './utils/database.ts'\nimport { jsonResponseHandler } from './utils/response.ts'\nimport { requiresToken } from './utils/routes.ts'\nimport {\n getUsername,\n getUserProfile,\n userProfileRoute,\n whoamiRoute,\n} from './routes/users.ts'\nimport { pingRoute, handlePing } from './routes/ping.ts'\nimport { getDocs } from './routes/docs.ts'\nimport {\n getToken,\n putToken,\n postToken,\n deleteToken,\n getTokensRoute,\n createTokenRoute,\n updateTokenRoute,\n deleteTokenRoute,\n} from './routes/tokens.ts'\nimport {\n getPackageDistTags,\n putPackageDistTag,\n deletePackageDistTag,\n handleRootPackageRoute,\n handlePackagePublish,\n handlePackageVersion,\n handlePackageTarball,\n handleUpstreamPackage,\n handleUpstreamScopedTarball,\n handleUpstreamScopedVersion,\n handleUpstreamEncodedScoped,\n handleUpstreamUnified,\n handleUpstreamTarball,\n // Local package route definitions\n getPackageRoute,\n getPackageVersionRoute,\n getPackageTarballRoute,\n publishPackageRoute,\n getPackageDistTagsRoute,\n putPackageDistTagRoute,\n deletePackageDistTagRoute,\n // Upstream package route definitions\n getUpstreamPackageRoute,\n getUpstreamScopedPackageVersionRoute,\n getUpstreamPackageTarballRoute,\n getUpstreamScopedPackageTarballRoute,\n getUpstreamEncodedScopedPackageRoute,\n getUpstreamUnifiedRoute,\n} from './routes/packages.ts'\nimport {\n listPackagesAccess,\n getPackageAccessStatus,\n setPackageAccessStatus,\n grantPackageAccess,\n revokePackageAccess,\n // OpenAPI route definitions\n getPackageAccessRoute,\n setPackageAccessRoute,\n getScopedPackageAccessRoute,\n setScopedPackageAccessRoute,\n listPackagesAccessRoute,\n grantPackageAccessRoute,\n revokePackageAccessRoute,\n grantScopedPackageAccessRoute,\n revokeScopedPackageAccessRoute,\n} from './routes/access.ts'\nimport {\n searchPackages,\n searchPackagesRoute,\n} from './routes/search.ts'\nimport {\n auditRoute,\n auditQuickRoute,\n advisoriesBulkRoute,\n dashboardDataRoute,\n appDataRoute,\n handleDashboardData,\n handleAppData,\n handleSecurityAudit,\n // Compatibility redirect routes\n searchRedirectRoute,\n userRedirectRoute,\n tokensRedirectRoute,\n createTokenRedirectRoute,\n updateTokenRedirectRoute,\n deleteTokenRedirectRoute,\n} from './routes/misc.ts'\n\nimport { sessionMonitor } from './utils/tracing.ts'\nimport type { createDatabaseOperations } from './db/client.ts'\nimport {\n handleStaticAssets,\n handleFavicon,\n handleRobots,\n handleManifest,\n} from './routes/static.ts'\nimport type { Environment } from '../types.ts'\nimport type { Context } from 'hono'\n\n// Import queue handler from dedicated module\nimport { queue } from './queue/index.ts'\n\n// ---------------------------------------------------------\n// App Initialization\n// (\"strict mode\" is turned off to ensure that routes like\n// `/hello` & `/hello/` are handled the same way - ref.\n// https://hono.dev/docs/api/hono#strict-mode)\n// ---------------------------------------------------------\n\nconst app = new OpenAPIHono<{\n Bindings: Environment\n Variables: {\n db: ReturnType<typeof createDatabaseOperations>\n }\n}>({ strict: false })\n\n// ---------------------------------------------------------\n// Middleware\n// ---------------------------------------------------------\n\napp.use(trimTrailingSlash())\napp.use('*', requestId())\napp.use('*', logger())\napp.use('*', configMiddleware)\napp.use('*', telemetryMiddleware)\napp.use('*', secureHeaders())\napp.use('*', jsonResponseHandler())\napp.use('*', except(['/-/ping', '/-/docs'], mountDatabase as any))\napp.use('*', sessionMonitor)\n\n// ---------------------------------------------------------\n// Home\n// (Single Page Application or API Docs)\n// ---------------------------------------------------------\n\napp.get('/', async c => {\n // If daemon is disabled and API docs are enabled, redirect to docs\n // This provides a better user experience when the daemon isn't available\n if (!c.env.DAEMON_ENABLED && c.env.API_DOCS_ENABLED) {\n return c.redirect('/-/docs', 302)\n }\n\n // If daemon is enabled, show the GUI (projects will be available)\n if (c.env.DAEMON_ENABLED) {\n return c.html(await getApp(c.env.ASSETS))\n }\n\n // Fallback: show docs if available, otherwise show GUI\n if (c.env.API_DOCS_ENABLED) {\n return c.redirect('/-/docs', 302)\n } else {\n return c.html(await getApp(c.env.ASSETS))\n }\n})\n\n// ---------------------------------------------------------\n// Documentation\n// ---------------------------------------------------------\n\n// Mount API documentation routes\napp.doc('/-/api', OPEN_API_CONFIG)\napp.get('/-/docs', getDocs)\n\n// ---------------------------------------------------------\n// Health Check\n// ---------------------------------------------------------\n\n// Pattern: /-/ping\napp.openapi(pingRoute, handlePing as any)\n\n// ---------------------------------------------------------\n// Authorization Verification Middleware\n// ---------------------------------------------------------\n\n// Custom auth middleware that checks if token is required\napp.use('*', async (c, next) => {\n if (requiresToken(c)) {\n // Token is required, apply bearer auth\n return bearerAuth({ verifyToken: verifyToken as any })(c, next)\n } else {\n // Token not required, skip auth\n await next()\n }\n})\n\n// ---------------------------------------------------------\n// User Routes\n// ---------------------------------------------------------\n\n// Pattern: /-/whoami\napp.openapi(whoamiRoute, getUsername)\n// Pattern: /-/user\napp.openapi(userProfileRoute, getUserProfile)\n\n// ---------------------------------------------------------\n// Daemon Project Routes - only local use\n// ---------------------------------------------------------\n\n// Pattern: /dashboard.json\napp.openapi(dashboardDataRoute, handleDashboardData as any)\n\n// Pattern: /app-data.json\napp.openapi(appDataRoute, handleAppData as any)\n\n// ---------------------------------------------------------\n// Token Routes\n// ---------------------------------------------------------\n\n// Pattern: /-/tokens\napp.openapi(getTokensRoute, getToken as any)\n// Pattern: /-/tokens\napp.openapi(createTokenRoute, postToken as any)\n// Pattern: /-/tokens\napp.openapi(updateTokenRoute, putToken as any)\n// Pattern: /-/tokens/{token}\napp.openapi(deleteTokenRoute, deleteToken as any)\n\n// ---------------------------------------------------------\n// Dist-tag Routes\n// ---------------------------------------------------------\n\n// Pattern: /-/package/{pkg}/dist-tags\napp.openapi(getPackageDistTagsRoute, getPackageDistTags as any)\n// Pattern: /-/package/{pkg}/dist-tags/{tag}\napp.openapi(putPackageDistTagRoute, putPackageDistTag as any)\n// Pattern: /-/package/{pkg}/dist-tags/{tag}\napp.openapi(deletePackageDistTagRoute, deletePackageDistTag as any)\n\n// ---------------------------------------------------------\n// Access Control Routes\n// ---------------------------------------------------------\n\n// Pattern: /-/package/{pkg}/access (unscoped packages)\napp.openapi(getPackageAccessRoute, getPackageAccessStatus as any)\napp.openapi(setPackageAccessRoute, setPackageAccessStatus as any)\n\n// Pattern: /-/package/{scope}%2f{pkg}/access (scoped packages)\napp.openapi(\n getScopedPackageAccessRoute,\n getPackageAccessStatus as any,\n)\napp.openapi(\n setScopedPackageAccessRoute,\n setPackageAccessStatus as any,\n)\n\n// Pattern: /-/package/list\napp.openapi(listPackagesAccessRoute, listPackagesAccess as any)\n\n// Pattern: /-/package/{pkg}/collaborators/{username} (unscoped packages)\napp.openapi(grantPackageAccessRoute, grantPackageAccess as any)\napp.openapi(revokePackageAccessRoute, revokePackageAccess as any)\n\n// Pattern: /-/package/{scope}%2f{pkg}/collaborators/{username} (scoped packages)\napp.openapi(grantScopedPackageAccessRoute, grantPackageAccess as any)\napp.openapi(\n revokeScopedPackageAccessRoute,\n revokePackageAccess as any,\n)\n\n// ---------------------------------------------------------\n// Search Packages\n// ---------------------------------------------------------\n\n// Pattern: /-/search\napp.openapi(searchPackagesRoute, searchPackages as any)\n\n// ---------------------------------------------------------\n// Handle Audit Requests\n// ---------------------------------------------------------\n\n// Pattern: /-/npm/audit (security audit - not implemented)\napp.openapi(auditRoute, handleSecurityAudit as any)\n\n// ---------------------------------------------------------\n// NPM Compatibility Routes (Legacy API Redirects)\n// (maximizes backwards compatibility with npm clients)\n// ---------------------------------------------------------\n\n// Pattern: /-/v1/search \u2192 /-/search\napp.openapi(searchRedirectRoute, (c: Context) =>\n c.redirect('/-/search', 308),\n)\n\n// Pattern: /-/npm/v1/user \u2192 /-/user\napp.openapi(userRedirectRoute, (c: Context) =>\n c.redirect('/-/user', 308),\n)\n\n// Pattern: /-/npm/v1/tokens \u2192 /-/tokens (GET)\napp.openapi(tokensRedirectRoute, (c: Context) =>\n c.redirect('/-/tokens', 308),\n)\n\n// Pattern: /-/npm/v1/tokens \u2192 /-/tokens (POST)\napp.openapi(createTokenRedirectRoute, (c: Context) =>\n c.redirect('/-/tokens', 308),\n)\n\n// Pattern: /-/npm/v1/tokens \u2192 /-/tokens (PUT)\napp.openapi(updateTokenRedirectRoute, (c: Context) =>\n c.redirect('/-/tokens', 308),\n)\n\n// Pattern: /-/npm/v1/tokens/token/{token} \u2192 /-/tokens/{token} (DELETE)\napp.openapi(deleteTokenRedirectRoute, (c: Context) => {\n return c.redirect(`/-/tokens/${c.req.param('token')}`, 308)\n})\n\n// Pattern: /-/npm/v1/security/audits/quick \u2192 /-/npm/audit\napp.openapi(auditQuickRoute, (c: Context) => {\n return c.redirect('/-/npm/audit', 308)\n})\n\n// Pattern: /-/npm/v1/security/advisories/bulk \u2192 /-/npm/audit\napp.openapi(advisoriesBulkRoute, (c: Context) => {\n return c.redirect('/-/npm/audit', 308)\n})\n\n// ---------------------------------------------------------\n// Upstream Utility Routes\n// (Registry utility endpoints for upstream registries)\n// (MUST come before upstream package routes to avoid conflicts)\n// ---------------------------------------------------------\n\n// Pattern: /{upstream}/-/ping (upstream registry ping)\napp.get('/:upstream/-/ping', handlePing)\n\n// Pattern: /{upstream}/-/docs (upstream registry docs)\napp.get('/:upstream/-/docs', getDocs)\n\n// Pattern: /{upstream}/-/whoami (upstream registry whoami)\napp.get('/:upstream/-/whoami', getUsername)\n\n// Pattern: /{upstream}/-/user (upstream registry user profile)\napp.get('/:upstream/-/user', getUserProfile)\n\n// Pattern: /{upstream}/-/tokens (upstream registry token management)\napp.get('/:upstream/-/tokens', getToken)\napp.post('/:upstream/-/tokens', postToken)\napp.put('/:upstream/-/tokens', putToken)\napp.delete('/:upstream/-/tokens/:token', deleteToken)\n\n// Pattern: /{upstream}/-/search (upstream registry search)\napp.get('/:upstream/-/search', searchPackages)\n\n// Pattern: /{upstream}/-/npm/audit (upstream registry audit)\napp.post('/:upstream/-/npm/audit', handleSecurityAudit)\n\n// ---------------------------------------------------------\n// Upstream Package Routes\n// (must come before catch-all package routes)\n// ---------------------------------------------------------\n\n// Pattern: /{upstream}/@{scope}/{pkg}/-/{tarball} (scoped package tarball)\napp.openapi(\n getUpstreamScopedPackageTarballRoute,\n handleUpstreamScopedTarball as any,\n)\n// Pattern: /{upstream}/@{scope}/{pkg}/{version} (scoped package version)\napp.openapi(\n getUpstreamScopedPackageVersionRoute,\n handleUpstreamScopedVersion as any,\n)\n// Pattern: /{upstream}/{pkg}/-/{tarball} (unscoped package tarball)\napp.openapi(\n getUpstreamPackageTarballRoute,\n handleUpstreamTarball as any,\n)\n// Pattern: /{upstream}/@{scope}%2f{pkg} (URL-encoded scoped package)\napp.openapi(\n getUpstreamEncodedScopedPackageRoute,\n handleUpstreamEncodedScoped as any,\n)\n// Pattern: /{upstream}/{param2}/{param3} (unified handler for ambiguous 3-segment paths)\napp.openapi(getUpstreamUnifiedRoute, handleUpstreamUnified as any)\n// Pattern: /{upstream}/{pkg} (unscoped package manifest)\napp.openapi(getUpstreamPackageRoute, handleUpstreamPackage as any)\n\n// Pattern: /-/npm/v1/security/advisories/bulk \u2192 /-/npm/audit\napp.openapi(advisoriesBulkRoute, async (c: Context) => {\n return c.redirect('/-/npm/audit', 308)\n})\n\n// ---------------------------------------------------------\n// Local Package Routes\n// (catch-all patterns, must come after upstream routes)\n// ---------------------------------------------------------\n\n// Pattern: /{pkg} (package publishing via PUT)\napp.openapi(publishPackageRoute, handlePackagePublish as any)\n// Pattern: /{pkg}/-/{tarball} (package tarball download)\napp.openapi(getPackageTarballRoute, handlePackageTarball as any)\n// Pattern: /{pkg}/{version} (specific package version)\napp.openapi(getPackageVersionRoute, handlePackageVersion as any)\n// Pattern: /{pkg} (package manifest/packument)\napp.openapi(getPackageRoute, handleRootPackageRoute as any)\n\n// ---------------------------------------------------------\n// Handle Static Assets\n// ---------------------------------------------------------\n\n// Pattern: /public/* (static assets from public directory)\napp.get('/public/*', handleStaticAssets)\n// Pattern: /favicon.ico (browser favicon)\napp.get('/favicon.ico', handleFavicon)\n// Pattern: /robots.txt (web crawler instructions)\napp.get('/robots.txt', handleRobots)\n// Pattern: /manifest.json (PWA web app manifest)\napp.get('/manifest.json', handleManifest)\n// Pattern: /* (catch-all for any other static assets)\napp.get('/*', handleStaticAssets)\n\nexport { app }\n\nexport default {\n fetch: app.fetch,\n queue,\n}\n", "// src/index.ts\nimport {\n OpenAPIRegistry,\n OpenApiGeneratorV3,\n OpenApiGeneratorV31,\n extendZodWithOpenApi\n} from \"@asteasolutions/zod-to-openapi\";\nimport { zValidator } from \"@hono/zod-validator\";\nimport { Hono } from \"hono\";\nimport { mergePath } from \"hono/utils/url\";\nimport { ZodType, z } from \"zod\";\nvar OpenAPIHono = class _OpenAPIHono extends Hono {\n openAPIRegistry;\n defaultHook;\n constructor(init) {\n super(init);\n this.openAPIRegistry = new OpenAPIRegistry();\n this.defaultHook = init?.defaultHook;\n }\n /**\n *\n * @param {RouteConfig} route - The route definition which you create with `createRoute()`.\n * @param {Handler} handler - The handler. If you want to return a JSON object, you should specify the status code with `c.json()`.\n * @param {Hook} hook - Optional. The hook method defines what it should do after validation.\n * @example\n * app.openapi(\n * route,\n * (c) => {\n * // ...\n * return c.json(\n * {\n * age: 20,\n * name: 'Young man',\n * },\n * 200 // You should specify the status code even if it's 200.\n * )\n * },\n * (result, c) => {\n * if (!result.success) {\n * return c.json(\n * {\n * code: 400,\n * message: 'Custom Message',\n * },\n * 400\n * )\n * }\n * }\n *)\n */\n openapi = ({ middleware: routeMiddleware, hide, ...route }, handler, hook = this.defaultHook) => {\n if (!hide) {\n this.openAPIRegistry.registerPath(route);\n }\n const validators = [];\n if (route.request?.query) {\n const validator = zValidator(\"query\", route.request.query, hook);\n validators.push(validator);\n }\n if (route.request?.params) {\n const validator = zValidator(\"param\", route.request.params, hook);\n validators.push(validator);\n }\n if (route.request?.headers) {\n const validator = zValidator(\"header\", route.request.headers, hook);\n validators.push(validator);\n }\n if (route.request?.cookies) {\n const validator = zValidator(\"cookie\", route.request.cookies, hook);\n validators.push(validator);\n }\n const bodyContent = route.request?.body?.content;\n if (bodyContent) {\n for (const mediaType of Object.keys(bodyContent)) {\n if (!bodyContent[mediaType]) {\n continue;\n }\n const schema = bodyContent[mediaType][\"schema\"];\n if (!(schema instanceof ZodType)) {\n continue;\n }\n if (isJSONContentType(mediaType)) {\n const validator = zValidator(\"json\", schema, hook);\n if (route.request?.body?.required) {\n validators.push(validator);\n } else {\n const mw = async (c, next) => {\n if (c.req.header(\"content-type\")) {\n if (isJSONContentType(c.req.header(\"content-type\"))) {\n return await validator(c, next);\n }\n }\n c.req.addValidatedData(\"json\", {});\n await next();\n };\n validators.push(mw);\n }\n }\n if (isFormContentType(mediaType)) {\n const validator = zValidator(\"form\", schema, hook);\n if (route.request?.body?.required) {\n validators.push(validator);\n } else {\n const mw = async (c, next) => {\n if (c.req.header(\"content-type\")) {\n if (isFormContentType(c.req.header(\"content-type\"))) {\n return await validator(c, next);\n }\n }\n c.req.addValidatedData(\"form\", {});\n await next();\n };\n validators.push(mw);\n }\n }\n }\n }\n const middleware = routeMiddleware ? Array.isArray(routeMiddleware) ? routeMiddleware : [routeMiddleware] : [];\n this.on(\n [route.method],\n route.path.replaceAll(/\\/{(.+?)}/g, \"/:$1\"),\n ...middleware,\n ...validators,\n handler\n );\n return this;\n };\n getOpenAPIDocument = (config) => {\n const generator = new OpenApiGeneratorV3(this.openAPIRegistry.definitions);\n const document = generator.generateDocument(config);\n return this._basePath ? addBasePathToDocument(document, this._basePath) : document;\n };\n getOpenAPI31Document = (config) => {\n const generator = new OpenApiGeneratorV31(this.openAPIRegistry.definitions);\n const document = generator.generateDocument(config);\n return this._basePath ? addBasePathToDocument(document, this._basePath) : document;\n };\n doc = (path, configure) => {\n return this.get(path, (c) => {\n const config = typeof configure === \"function\" ? configure(c) : configure;\n try {\n const document = this.getOpenAPIDocument(config);\n return c.json(document);\n } catch (e) {\n return c.json(e, 500);\n }\n });\n };\n doc31 = (path, configure) => {\n return this.get(path, (c) => {\n const config = typeof configure === \"function\" ? configure(c) : configure;\n try {\n const document = this.getOpenAPI31Document(config);\n return c.json(document);\n } catch (e) {\n return c.json(e, 500);\n }\n });\n };\n route(path, app) {\n const pathForOpenAPI = path.replaceAll(/:([^\\/]+)/g, \"{$1}\");\n super.route(path, app);\n if (!(app instanceof _OpenAPIHono)) {\n return this;\n }\n app.openAPIRegistry.definitions.forEach((def) => {\n switch (def.type) {\n case \"component\":\n return this.openAPIRegistry.registerComponent(def.componentType, def.name, def.component);\n case \"route\": {\n this.openAPIRegistry.registerPath({\n ...def.route,\n path: mergePath(\n pathForOpenAPI,\n // @ts-expect-error _basePath is private\n app._basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"),\n def.route.path\n )\n });\n return;\n }\n case \"webhook\": {\n this.openAPIRegistry.registerWebhook({\n ...def.webhook,\n path: mergePath(\n pathForOpenAPI,\n // @ts-expect-error _basePath is private\n app._basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"),\n def.webhook.path\n )\n });\n return;\n }\n case \"schema\":\n return this.openAPIRegistry.register(def.schema._def.openapi._internal.refId, def.schema);\n case \"parameter\":\n return this.openAPIRegistry.registerParameter(\n def.schema._def.openapi._internal.refId,\n def.schema\n );\n default: {\n const errorIfNotExhaustive = def;\n throw new Error(`Unknown registry type: ${errorIfNotExhaustive}`);\n }\n }\n });\n return this;\n }\n basePath(path) {\n return new _OpenAPIHono({ ...super.basePath(path), defaultHook: this.defaultHook });\n }\n};\nvar createRoute = (routeConfig) => {\n const route = {\n ...routeConfig,\n getRoutingPath() {\n return routeConfig.path.replaceAll(/\\/{(.+?)}/g, \"/:$1\");\n }\n };\n return Object.defineProperty(route, \"getRoutingPath\", { enumerable: false });\n};\nextendZodWithOpenApi(z);\nfunction addBasePathToDocument(document, basePath) {\n const updatedPaths = {};\n Object.keys(document.paths).forEach((path) => {\n updatedPaths[mergePath(basePath.replaceAll(/:([^\\/]+)/g, \"{$1}\"), path)] = document.paths[path];\n });\n return {\n ...document,\n paths: updatedPaths\n };\n}\nfunction isJSONContentType(contentType) {\n return /^application\\/([a-z-\\.]+\\+)?json/.test(contentType);\n}\nfunction isFormContentType(contentType) {\n return contentType.startsWith(\"multipart/form-data\") || contentType.startsWith(\"application/x-www-form-urlencoded\");\n}\nexport {\n OpenAPIHono,\n createRoute,\n extendZodWithOpenApi,\n z\n};\n", "/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nfunction isZodType(schema, typeName) {\n var _a;\n return ((_a = schema === null || schema === void 0 ? void 0 : schema._def) === null || _a === void 0 ? void 0 : _a.typeName) === typeName;\n}\nfunction isAnyZodType(schema) {\n return '_def' in schema;\n}\n\nfunction preserveMetadataFromModifier(zod, modifier) {\n const zodModifier = zod.ZodType.prototype[modifier];\n zod.ZodType.prototype[modifier] = function (...args) {\n const result = zodModifier.apply(this, args);\n result._def.openapi = this._def.openapi;\n return result;\n };\n}\nfunction extendZodWithOpenApi(zod) {\n if (typeof zod.ZodType.prototype.openapi !== 'undefined') {\n // This zod instance is already extended with the required methods,\n // doing it again will just result in multiple wrapper methods for\n // `optional` and `nullable`\n return;\n }\n zod.ZodType.prototype.openapi = function (refOrOpenapi, metadata) {\n var _a, _b, _c, _d, _e, _f;\n const openapi = typeof refOrOpenapi === 'string' ? metadata : refOrOpenapi;\n const _g = openapi !== null && openapi !== void 0 ? openapi : {}, { param } = _g, restOfOpenApi = __rest(_g, [\"param\"]);\n const _internal = Object.assign(Object.assign({}, (_a = this._def.openapi) === null || _a === void 0 ? void 0 : _a._internal), (typeof refOrOpenapi === 'string'\n ? { refId: refOrOpenapi }\n : undefined));\n const resultMetadata = Object.assign(Object.assign(Object.assign({}, (_b = this._def.openapi) === null || _b === void 0 ? void 0 : _b.metadata), restOfOpenApi), (((_d = (_c = this._def.openapi) === null || _c === void 0 ? void 0 : _c.metadata) === null || _d === void 0 ? void 0 : _d.param) || param\n ? {\n param: Object.assign(Object.assign({}, (_f = (_e = this._def.openapi) === null || _e === void 0 ? void 0 : _e.metadata) === null || _f === void 0 ? void 0 : _f.param), param),\n }\n : undefined));\n const result = new this.constructor(Object.assign(Object.assign({}, this._def), { openapi: Object.assign(Object.assign({}, (Object.keys(_internal).length > 0 ? { _internal } : undefined)), (Object.keys(resultMetadata).length > 0\n ? { metadata: resultMetadata }\n : undefined)) }));\n if (isZodType(this, 'ZodObject')) {\n const originalExtend = this.extend;\n result.extend = function (...args) {\n var _a, _b, _c, _d, _e, _f, _g;\n const extendedResult = originalExtend.apply(this, args);\n extendedResult._def.openapi = {\n _internal: {\n extendedFrom: ((_b = (_a = this._def.openapi) === null || _a === void 0 ? void 0 : _a._internal) === null || _b === void 0 ? void 0 : _b.refId)\n ? { refId: (_d = (_c = this._def.openapi) === null || _c === void 0 ? void 0 : _c._internal) === null || _d === void 0 ? void 0 : _d.refId, schema: this }\n : (_f = (_e = this._def.openapi) === null || _e === void 0 ? void 0 : _e._internal) === null || _f === void 0 ? void 0 : _f.extendedFrom,\n },\n metadata: (_g = extendedResult._def.openapi) === null || _g === void 0 ? void 0 : _g.metadata,\n };\n return extendedResult;\n };\n }\n return result;\n };\n preserveMetadataFromModifier(zod, 'optional');\n preserveMetadataFromModifier(zod, 'nullable');\n preserveMetadataFromModifier(zod, 'default');\n preserveMetadataFromModifier(zod, 'transform');\n preserveMetadataFromModifier(zod, 'refine');\n const zodDeepPartial = zod.ZodObject.prototype.deepPartial;\n zod.ZodObject.prototype.deepPartial = function () {\n const initialShape = this._def.shape();\n const result = zodDeepPartial.apply(this);\n const resultShape = result._def.shape();\n Object.entries(resultShape).forEach(([key, value]) => {\n var _a, _b;\n value._def.openapi = (_b = (_a = initialShape[key]) === null || _a === void 0 ? void 0 : _a._def) === null || _b === void 0 ? void 0 : _b.openapi;\n });\n result._def.openapi = undefined;\n return result;\n };\n const zodPick = zod.ZodObject.prototype.pick;\n zod.ZodObject.prototype.pick = function (...args) {\n const result = zodPick.apply(this, args);\n result._def.openapi = undefined;\n return result;\n };\n const zodOmit = zod.ZodObject.prototype.omit;\n zod.ZodObject.prototype.omit = function (...args) {\n const result = zodOmit.apply(this, args);\n result._def.openapi = undefined;\n return result;\n };\n}\n\nfunction isEqual(x, y) {\n if (x === null || x === undefined || y === null || y === undefined) {\n return x === y;\n }\n if (x === y || x.valueOf() === y.valueOf()) {\n return true;\n }\n if (Array.isArray(x)) {\n if (!Array.isArray(y)) {\n return false;\n }\n if (x.length !== y.length) {\n return false;\n }\n }\n // if they are strictly equal, they both need to be object at least\n if (!(x instanceof Object) || !(y instanceof Object)) {\n return false;\n }\n // recursive object equality check\n const keysX = Object.keys(x);\n return (Object.keys(y).every(keyY => keysX.indexOf(keyY) !== -1) &&\n keysX.every(key => isEqual(x[key], y[key])));\n}\nclass ObjectSet {\n constructor() {\n this.buckets = new Map();\n }\n put(value) {\n const hashCode = this.hashCodeOf(value);\n const itemsByCode = this.buckets.get(hashCode);\n if (!itemsByCode) {\n this.buckets.set(hashCode, [value]);\n return;\n }\n const alreadyHasItem = itemsByCode.some(_ => isEqual(_, value));\n if (!alreadyHasItem) {\n itemsByCode.push(value);\n }\n }\n contains(value) {\n const hashCode = this.hashCodeOf(value);\n const itemsByCode = this.buckets.get(hashCode);\n if (!itemsByCode) {\n return false;\n }\n return itemsByCode.some(_ => isEqual(_, value));\n }\n values() {\n return [...this.buckets.values()].flat();\n }\n stats() {\n let totalBuckets = 0;\n let totalValues = 0;\n let collisions = 0;\n for (const bucket of this.buckets.values()) {\n totalBuckets += 1;\n totalValues += bucket.length;\n if (bucket.length > 1) {\n collisions += 1;\n }\n }\n const hashEffectiveness = totalBuckets / totalValues;\n return { totalBuckets, collisions, totalValues, hashEffectiveness };\n }\n hashCodeOf(object) {\n let hashCode = 0;\n if (Array.isArray(object)) {\n for (let i = 0; i < object.length; i++) {\n hashCode ^= this.hashCodeOf(object[i]) * i;\n }\n return hashCode;\n }\n if (typeof object === 'string') {\n for (let i = 0; i < object.length; i++) {\n hashCode ^= object.charCodeAt(i) * i;\n }\n return hashCode;\n }\n if (typeof object === 'number') {\n return object;\n }\n if (typeof object === 'object') {\n for (const [key, value] of Object.entries(object)) {\n hashCode ^= this.hashCodeOf(key) + this.hashCodeOf(value !== null && value !== void 0 ? value : '');\n }\n }\n return hashCode;\n }\n}\n\nfunction isUndefined(value) {\n return value === undefined;\n}\nfunction mapValues(object, mapper) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n result[key] = mapper(value);\n });\n return result;\n}\nfunction omit(object, keys) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n if (!keys.some(keyToOmit => keyToOmit === key)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction omitBy(object, predicate) {\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n if (!predicate(value, key)) {\n result[key] = value;\n }\n });\n return result;\n}\nfunction compact(arr) {\n return arr.filter((elem) => !isUndefined(elem));\n}\nconst objectEquals = isEqual;\nfunction uniq(values) {\n const set = new ObjectSet();\n values.forEach(value => set.put(value));\n return [...set.values()];\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\n\nfunction getOpenApiMetadata(zodSchema) {\n var _a, _b;\n return omitBy((_b = (_a = zodSchema._def.openapi) === null || _a === void 0 ? void 0 : _a.metadata) !== null && _b !== void 0 ? _b : {}, isUndefined);\n}\n\nclass OpenAPIRegistry {\n constructor(parents) {\n this.parents = parents;\n this._definitions = [];\n }\n get definitions() {\n var _a, _b;\n const parentDefinitions = (_b = (_a = this.parents) === null || _a === void 0 ? void 0 : _a.flatMap(par => par.definitions)) !== null && _b !== void 0 ? _b : [];\n return [...parentDefinitions, ...this._definitions];\n }\n /**\n * Registers a new component schema under /components/schemas/${name}\n */\n register(refId, zodSchema) {\n const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n this._definitions.push({ type: 'schema', schema: schemaWithRefId });\n return schemaWithRefId;\n }\n /**\n * Registers a new parameter schema under /components/parameters/${name}\n */\n registerParameter(refId, zodSchema) {\n var _a, _b, _c;\n const schemaWithRefId = this.schemaWithRefId(refId, zodSchema);\n const currentMetadata = (_a = schemaWithRefId._def.openapi) === null || _a === void 0 ? void 0 : _a.metadata;\n const schemaWithMetadata = schemaWithRefId.openapi(Object.assign(Object.assign({}, currentMetadata), { param: Object.assign(Object.assign({}, currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param), { name: (_c = (_b = currentMetadata === null || currentMetadata === void 0 ? void 0 : currentMetadata.param) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : refId }) }));\n this._definitions.push({\n type: 'parameter',\n schema: schemaWithMetadata,\n });\n return schemaWithMetadata;\n }\n /**\n * Registers a new path that would be generated under paths:\n */\n registerPath(route) {\n this._definitions.push({\n type: 'route',\n route,\n });\n }\n /**\n * Registers a new webhook that would be generated under webhooks:\n */\n registerWebhook(webhook) {\n this._definitions.push({\n type: 'webhook',\n webhook,\n });\n }\n /**\n * Registers a raw OpenAPI component. Use this if you have a simple object instead of a Zod schema.\n *\n * @param type The component type, e.g. `schemas`, `responses`, `securitySchemes`, etc.\n * @param name The name of the object, it is the key under the component\n * type in the resulting OpenAPI document\n * @param component The actual object to put there\n */\n registerComponent(type, name, component) {\n this._definitions.push({\n type: 'component',\n componentType: type,\n name,\n component,\n });\n return {\n name,\n ref: { $ref: `#/components/${type}/${name}` },\n };\n }\n schemaWithRefId(refId, zodSchema) {\n return zodSchema.openapi(refId);\n }\n}\n\nclass ZodToOpenAPIError {\n constructor(message) {\n this.message = message;\n }\n}\nclass ConflictError extends ZodToOpenAPIError {\n constructor(message, data) {\n super(message);\n this.data = data;\n }\n}\nclass MissingParameterDataError extends ZodToOpenAPIError {\n constructor(data) {\n super(`Missing parameter data, please specify \\`${data.missingField}\\` and other OpenAPI parameter props using the \\`param\\` field of \\`ZodSchema.openapi\\``);\n this.data = data;\n }\n}\nfunction enhanceMissingParametersError(action, paramsToAdd) {\n try {\n return action();\n }\n catch (error) {\n if (error instanceof MissingParameterDataError) {\n throw new MissingParameterDataError(Object.assign(Object.assign({}, error.data), paramsToAdd));\n }\n throw error;\n }\n}\nclass UnknownZodTypeError extends ZodToOpenAPIError {\n constructor(data) {\n super(`Unknown zod object type, please specify \\`type\\` and other OpenAPI props using \\`ZodSchema.openapi\\`.`);\n this.data = data;\n }\n}\n\nclass Metadata {\n static getMetadata(zodSchema) {\n var _a;\n const innerSchema = this.unwrapChained(zodSchema);\n const metadata = zodSchema._def.openapi\n ? zodSchema._def.openapi\n : innerSchema._def.openapi;\n /**\n * Every zod schema can receive a `description` by using the .describe method.\n * That description should be used when generating an OpenApi schema.\n * The `??` bellow makes sure we can handle both:\n * - schema.describe('Test').optional()\n * - schema.optional().describe('Test')\n */\n const zodDescription = (_a = zodSchema.description) !== null && _a !== void 0 ? _a : innerSchema.description;\n // A description provided from .openapi() should be taken with higher precedence\n return {\n _internal: metadata === null || metadata === void 0 ? void 0 : metadata._internal,\n metadata: Object.assign({ description: zodDescription }, metadata === null || metadata === void 0 ? void 0 : metadata.metadata),\n };\n }\n static getInternalMetadata(zodSchema) {\n const innerSchema = this.unwrapChained(zodSchema);\n const openapi = zodSchema._def.openapi\n ? zodSchema._def.openapi\n : innerSchema._def.openapi;\n return openapi === null || openapi === void 0 ? void 0 : openapi._internal;\n }\n static getParamMetadata(zodSchema) {\n var _a, _b;\n const innerSchema = this.unwrapChained(zodSchema);\n const metadata = zodSchema._def.openapi\n ? zodSchema._def.openapi\n : innerSchema._def.openapi;\n /**\n * Every zod schema can receive a `description` by using the .describe method.\n * That description should be used when generating an OpenApi schema.\n * The `??` bellow makes sure we can handle both:\n * - schema.describe('Test').optional()\n * - schema.optional().describe('Test')\n */\n const zodDescription = (_a = zodSchema.description) !== null && _a !== void 0 ? _a : innerSchema.description;\n return {\n _internal: metadata === null || metadata === void 0 ? void 0 : metadata._internal,\n metadata: Object.assign(Object.assign({}, metadata === null || metadata === void 0 ? void 0 : metadata.metadata), { \n // A description provided from .openapi() should be taken with higher precedence\n param: Object.assign({ description: zodDescription }, (_b = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _b === void 0 ? void 0 : _b.param) }),\n };\n }\n /**\n * A method that omits all custom keys added to the regular OpenAPI\n * metadata properties\n */\n static buildSchemaMetadata(metadata) {\n return omitBy(omit(metadata, ['param']), isUndefined);\n }\n static buildParameterMetadata(metadata) {\n return omitBy(metadata, isUndefined);\n }\n static applySchemaMetadata(initialData, metadata) {\n return omitBy(Object.assign(Object.assign({}, initialData), this.buildSchemaMetadata(metadata)), isUndefined);\n }\n static getRefId(zodSchema) {\n var _a;\n return (_a = this.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.refId;\n }\n static unwrapChained(schema) {\n return this.unwrapUntil(schema);\n }\n static getDefaultValue(zodSchema) {\n const unwrapped = this.unwrapUntil(zodSchema, 'ZodDefault');\n return unwrapped === null || unwrapped === void 0 ? void 0 : unwrapped._def.defaultValue();\n }\n static unwrapUntil(schema, typeName) {\n if (typeName && isZodType(schema, typeName)) {\n return schema;\n }\n if (isZodType(schema, 'ZodOptional') ||\n isZodType(schema, 'ZodNullable') ||\n isZodType(schema, 'ZodBranded')) {\n return this.unwrapUntil(schema.unwrap(), typeName);\n }\n if (isZodType(schema, 'ZodDefault') || isZodType(schema, 'ZodReadonly')) {\n return this.unwrapUntil(schema._def.innerType, typeName);\n }\n if (isZodType(schema, 'ZodEffects')) {\n return this.unwrapUntil(schema._def.schema, typeName);\n }\n if (isZodType(schema, 'ZodPipeline')) {\n return this.unwrapUntil(schema._def.in, typeName);\n }\n return typeName ? undefined : schema;\n }\n static isOptionalSchema(zodSchema) {\n return zodSchema.isOptional();\n }\n}\n\nclass ArrayTransformer {\n transform(zodSchema, mapNullableType, mapItems) {\n var _a, _b;\n const itemType = zodSchema._def.type;\n return Object.assign(Object.assign({}, mapNullableType('array')), { items: mapItems(itemType), minItems: (_a = zodSchema._def.minLength) === null || _a === void 0 ? void 0 : _a.value, maxItems: (_b = zodSchema._def.maxLength) === null || _b === void 0 ? void 0 : _b.value });\n }\n}\n\nclass BigIntTransformer {\n transform(mapNullableType) {\n return Object.assign(Object.assign({}, mapNullableType('string')), { pattern: `^\\d+$` });\n }\n}\n\nclass DiscriminatedUnionTransformer {\n transform(zodSchema, isNullable, mapNullableOfArray, mapItem, generateSchemaRef) {\n const options = [...zodSchema.options.values()];\n const optionSchema = options.map(mapItem);\n if (isNullable) {\n return {\n oneOf: mapNullableOfArray(optionSchema, isNullable),\n };\n }\n return {\n oneOf: optionSchema,\n discriminator: this.mapDiscriminator(options, zodSchema.discriminator, generateSchemaRef),\n };\n }\n mapDiscriminator(zodObjects, discriminator, generateSchemaRef) {\n // All schemas must be registered to use a discriminator\n if (zodObjects.some(obj => Metadata.getRefId(obj) === undefined)) {\n return undefined;\n }\n const mapping = {};\n zodObjects.forEach(obj => {\n var _a;\n const refId = Metadata.getRefId(obj); // type-checked earlier\n const value = (_a = obj.shape) === null || _a === void 0 ? void 0 : _a[discriminator];\n if (isZodType(value, 'ZodEnum') || isZodType(value, 'ZodNativeEnum')) {\n // Native enums have their keys as both number and strings however the number is an\n // internal representation and the string is the access point for a documentation\n const keys = Object.values(value.enum).filter(isString);\n keys.forEach((enumValue) => {\n mapping[enumValue] = generateSchemaRef(refId);\n });\n return;\n }\n const literalValue = value === null || value === void 0 ? void 0 : value._def.value;\n // This should never happen because Zod checks the disciminator type but to keep the types happy\n if (typeof literalValue !== 'string') {\n throw new Error(`Discriminator ${discriminator} could not be found in one of the values of a discriminated union`);\n }\n mapping[literalValue] = generateSchemaRef(refId);\n });\n return {\n propertyName: discriminator,\n mapping,\n };\n }\n}\n\nclass EnumTransformer {\n transform(zodSchema, mapNullableType) {\n // ZodEnum only accepts strings\n return Object.assign(Object.assign({}, mapNullableType('string')), { enum: zodSchema._def.values });\n }\n}\n\nclass IntersectionTransformer {\n transform(zodSchema, isNullable, mapNullableOfArray, mapItem) {\n const subtypes = this.flattenIntersectionTypes(zodSchema);\n const allOfSchema = {\n allOf: subtypes.map(mapItem),\n };\n if (isNullable) {\n return {\n anyOf: mapNullableOfArray([allOfSchema], isNullable),\n };\n }\n return allOfSchema;\n }\n flattenIntersectionTypes(schema) {\n if (!isZodType(schema, 'ZodIntersection')) {\n return [schema];\n }\n const leftSubTypes = this.flattenIntersectionTypes(schema._def.left);\n const rightSubTypes = this.flattenIntersectionTypes(schema._def.right);\n return [...leftSubTypes, ...rightSubTypes];\n }\n}\n\nclass LiteralTransformer {\n transform(zodSchema, mapNullableType) {\n return Object.assign(Object.assign({}, mapNullableType(typeof zodSchema._def.value)), { enum: [zodSchema._def.value] });\n }\n}\n\n/**\n * Numeric enums have a reverse mapping https://www.typescriptlang.org/docs/handbook/enums.html#reverse-mappings\n * whereas string ones don't.\n *\n * This function checks if an enum is fully numeric - i.e all values are numbers or not.\n * And filters out only the actual enum values when a reverse mapping is apparent.\n */\nfunction enumInfo(enumObject) {\n const keysExceptReverseMappings = Object.keys(enumObject).filter(key => typeof enumObject[enumObject[key]] !== 'number');\n const values = keysExceptReverseMappings.map(key => enumObject[key]);\n const numericCount = values.filter(_ => typeof _ === 'number').length;\n const type = numericCount === 0\n ? 'string'\n : numericCount === values.length\n ? 'numeric'\n : 'mixed';\n return { values, type };\n}\n\nclass NativeEnumTransformer {\n transform(zodSchema, mapNullableType) {\n const { type, values } = enumInfo(zodSchema._def.values);\n if (type === 'mixed') {\n // enum Test {\n // A = 42,\n // B = 'test',\n // }\n //\n // const result = z.nativeEnum(Test).parse('42');\n //\n // This is an error, so we can't just say it's a 'string'\n throw new ZodToOpenAPIError('Enum has mixed string and number values, please specify the OpenAPI type manually');\n }\n return Object.assign(Object.assign({}, mapNullableType(type === 'numeric' ? 'integer' : 'string')), { enum: values });\n }\n}\n\nclass NumberTransformer {\n transform(zodSchema, mapNullableType, getNumberChecks) {\n return Object.assign(Object.assign({}, mapNullableType(zodSchema.isInt ? 'integer' : 'number')), getNumberChecks(zodSchema._def.checks));\n }\n}\n\nclass ObjectTransformer {\n transform(zodSchema, defaultValue, mapNullableType, mapItem) {\n var _a;\n const extendedFrom = (_a = Metadata.getInternalMetadata(zodSchema)) === null || _a === void 0 ? void 0 : _a.extendedFrom;\n const required = this.requiredKeysOf(zodSchema);\n const properties = mapValues(zodSchema._def.shape(), mapItem);\n if (!extendedFrom) {\n return Object.assign(Object.assign(Object.assign(Object.assign({}, mapNullableType('object')), { properties, default: defaultValue }), (required.length > 0 ? { required } : {})), this.generateAdditionalProperties(zodSchema, mapItem));\n }\n const parent = extendedFrom.schema;\n // We want to generate the parent schema so that it can be referenced down the line\n mapItem(parent);\n const keysRequiredByParent = this.requiredKeysOf(parent);\n const propsOfParent = mapValues(parent === null || parent === void 0 ? void 0 : parent._def.shape(), mapItem);\n const propertiesToAdd = Object.fromEntries(Object.entries(properties).filter(([key, type]) => {\n return !objectEquals(propsOfParent[key], type);\n }));\n const additionallyRequired = required.filter(prop => !keysRequiredByParent.includes(prop));\n const objectData = Object.assign(Object.assign(Object.assign(Object.assign({}, mapNullableType('object')), { default: defaultValue, properties: propertiesToAdd }), (additionallyRequired.length > 0\n ? { required: additionallyRequired }\n : {})), this.generateAdditionalProperties(zodSchema, mapItem));\n return {\n allOf: [\n { $ref: `#/components/schemas/${extendedFrom.refId}` },\n objectData,\n ],\n };\n }\n generateAdditionalProperties(zodSchema, mapItem) {\n const unknownKeysOption = zodSchema._def.unknownKeys;\n const catchallSchema = zodSchema._def.catchall;\n if (isZodType(catchallSchema, 'ZodNever')) {\n if (unknownKeysOption === 'strict') {\n return { additionalProperties: false };\n }\n return {};\n }\n return { additionalProperties: mapItem(catchallSchema) };\n }\n requiredKeysOf(objectSchema) {\n return Object.entries(objectSchema._def.shape())\n .filter(([_key, type]) => !Metadata.isOptionalSchema(type))\n .map(([key, _type]) => key);\n }\n}\n\nclass RecordTransformer {\n transform(zodSchema, mapNullableType, mapItem) {\n const propertiesType = zodSchema._def.valueType;\n const keyType = zodSchema._def.keyType;\n const propertiesSchema = mapItem(propertiesType);\n if (isZodType(keyType, 'ZodEnum') || isZodType(keyType, 'ZodNativeEnum')) {\n // Native enums have their keys as both number and strings however the number is an\n // internal representation and the string is the access point for a documentation\n const keys = Object.values(keyType.enum).filter(isString);\n const properties = keys.reduce((acc, curr) => (Object.assign(Object.assign({}, acc), { [curr]: propertiesSchema })), {});\n return Object.assign(Object.assign({}, mapNullableType('object')), { properties });\n }\n return Object.assign(Object.assign({}, mapNullableType('object')), { additionalProperties: propertiesSchema });\n }\n}\n\nclass StringTransformer {\n transform(zodSchema, mapNullableType) {\n var _a, _b, _c;\n const regexCheck = this.getZodStringCheck(zodSchema, 'regex');\n const length = (_a = this.getZodStringCheck(zodSchema, 'length')) === null || _a === void 0 ? void 0 : _a.value;\n const maxLength = Number.isFinite(zodSchema.minLength)\n ? (_b = zodSchema.minLength) !== null && _b !== void 0 ? _b : undefined\n : undefined;\n const minLength = Number.isFinite(zodSchema.maxLength)\n ? (_c = zodSchema.maxLength) !== null && _c !== void 0 ? _c : undefined\n : undefined;\n return Object.assign(Object.assign({}, mapNullableType('string')), { \n // FIXME: https://github.com/colinhacks/zod/commit/d78047e9f44596a96d637abb0ce209cd2732d88c\n minLength: length !== null && length !== void 0 ? length : maxLength, maxLength: length !== null && length !== void 0 ? length : minLength, format: this.mapStringFormat(zodSchema), pattern: regexCheck === null || regexCheck === void 0 ? void 0 : regexCheck.regex.source });\n }\n /**\n * Attempts to map Zod strings to known formats\n * https://json-schema.org/understanding-json-schema/reference/string.html#built-in-formats\n */\n mapStringFormat(zodString) {\n if (zodString.isUUID)\n return 'uuid';\n if (zodString.isEmail)\n return 'email';\n if (zodString.isURL)\n return 'uri';\n if (zodString.isDate)\n return 'date';\n if (zodString.isDatetime)\n return 'date-time';\n if (zodString.isCUID)\n return 'cuid';\n if (zodString.isCUID2)\n return 'cuid2';\n if (zodString.isULID)\n return 'ulid';\n if (zodString.isIP)\n return 'ip';\n if (zodString.isEmoji)\n return 'emoji';\n return undefined;\n }\n getZodStringCheck(zodString, kind) {\n return zodString._def.checks.find((check) => {\n return check.kind === kind;\n });\n }\n}\n\nclass TupleTransformer {\n constructor(versionSpecifics) {\n this.versionSpecifics = versionSpecifics;\n }\n transform(zodSchema, mapNullableType, mapItem) {\n const { items } = zodSchema._def;\n const schemas = items.map(mapItem);\n return Object.assign(Object.assign({}, mapNullableType('array')), this.versionSpecifics.mapTupleItems(schemas));\n }\n}\n\nclass UnionTransformer {\n transform(zodSchema, mapNullableOfArray, mapItem) {\n const options = this.flattenUnionTypes(zodSchema);\n const schemas = options.map(schema => {\n // If any of the underlying schemas of a union is .nullable then the whole union\n // would be nullable. `mapNullableOfArray` would place it where it belongs.\n // Therefor we are stripping the additional nullables from the inner schemas\n // See https://github.com/asteasolutions/zod-to-openapi/issues/149\n const optionToGenerate = this.unwrapNullable(schema);\n return mapItem(optionToGenerate);\n });\n return {\n anyOf: mapNullableOfArray(schemas),\n };\n }\n flattenUnionTypes(schema) {\n if (!isZodType(schema, 'ZodUnion')) {\n return [schema];\n }\n const options = schema._def.options;\n return options.flatMap(option => this.flattenUnionTypes(option));\n }\n unwrapNullable(schema) {\n if (isZodType(schema, 'ZodNullable')) {\n return this.unwrapNullable(schema.unwrap());\n }\n return schema;\n }\n}\n\nclass OpenApiTransformer {\n constructor(versionSpecifics) {\n this.versionSpecifics = versionSpecifics;\n this.objectTransformer = new ObjectTransformer();\n this.stringTransformer = new StringTransformer();\n this.numberTransformer = new NumberTransformer();\n this.bigIntTransformer = new BigIntTransformer();\n this.literalTransformer = new LiteralTransformer();\n this.enumTransformer = new EnumTransformer();\n this.nativeEnumTransformer = new NativeEnumTransformer();\n this.arrayTransformer = new ArrayTransformer();\n this.unionTransformer = new UnionTransformer();\n this.discriminatedUnionTransformer = new DiscriminatedUnionTransformer();\n this.intersectionTransformer = new IntersectionTransformer();\n this.recordTransformer = new RecordTransformer();\n this.tupleTransformer = new TupleTransformer(versionSpecifics);\n }\n transform(zodSchema, isNullable, mapItem, generateSchemaRef, defaultValue) {\n if (isZodType(zodSchema, 'ZodNull')) {\n return this.versionSpecifics.nullType;\n }\n if (isZodType(zodSchema, 'ZodUnknown') || isZodType(zodSchema, 'ZodAny')) {\n return this.versionSpecifics.mapNullableType(undefined, isNullable);\n }\n if (isZodType(zodSchema, 'ZodObject')) {\n return this.objectTransformer.transform(zodSchema, defaultValue, // verified on TS level from input\n // verified on TS level from input\n _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n const schema = this.transformSchemaWithoutDefault(zodSchema, isNullable, mapItem, generateSchemaRef);\n return Object.assign(Object.assign({}, schema), { default: defaultValue });\n }\n transformSchemaWithoutDefault(zodSchema, isNullable, mapItem, generateSchemaRef) {\n if (isZodType(zodSchema, 'ZodUnknown') || isZodType(zodSchema, 'ZodAny')) {\n return this.versionSpecifics.mapNullableType(undefined, isNullable);\n }\n if (isZodType(zodSchema, 'ZodString')) {\n return this.stringTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodNumber')) {\n return this.numberTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable), _ => this.versionSpecifics.getNumberChecks(_));\n }\n if (isZodType(zodSchema, 'ZodBigInt')) {\n return this.bigIntTransformer.transform(schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodBoolean')) {\n return this.versionSpecifics.mapNullableType('boolean', isNullable);\n }\n if (isZodType(zodSchema, 'ZodLiteral')) {\n return this.literalTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodEnum')) {\n return this.enumTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodNativeEnum')) {\n return this.nativeEnumTransformer.transform(zodSchema, schema => this.versionSpecifics.mapNullableType(schema, isNullable));\n }\n if (isZodType(zodSchema, 'ZodArray')) {\n return this.arrayTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodTuple')) {\n return this.tupleTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodUnion')) {\n return this.unionTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodDiscriminatedUnion')) {\n return this.discriminatedUnionTransformer.transform(zodSchema, isNullable, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem, generateSchemaRef);\n }\n if (isZodType(zodSchema, 'ZodIntersection')) {\n return this.intersectionTransformer.transform(zodSchema, isNullable, _ => this.versionSpecifics.mapNullableOfArray(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodRecord')) {\n return this.recordTransformer.transform(zodSchema, _ => this.versionSpecifics.mapNullableType(_, isNullable), mapItem);\n }\n if (isZodType(zodSchema, 'ZodDate')) {\n return this.versionSpecifics.mapNullableType('string', isNullable);\n }\n const refId = Metadata.getRefId(zodSchema);\n throw new UnknownZodTypeError({\n currentSchema: zodSchema._def,\n schemaName: refId,\n });\n }\n}\n\nclass OpenAPIGenerator {\n constructor(definitions, versionSpecifics) {\n this.definitions = definitions;\n this.versionSpecifics = versionSpecifics;\n this.schemaRefs = {};\n this.paramRefs = {};\n this.pathRefs = {};\n this.rawComponents = [];\n this.openApiTransformer = new OpenApiTransformer(versionSpecifics);\n this.sortDefinitions();\n }\n generateDocumentData() {\n this.definitions.forEach(definition => this.generateSingle(definition));\n return {\n components: this.buildComponents(),\n paths: this.pathRefs,\n };\n }\n generateComponents() {\n this.definitions.forEach(definition => this.generateSingle(definition));\n return {\n components: this.buildComponents(),\n };\n }\n buildComponents() {\n var _a, _b;\n const rawComponents = {};\n this.rawComponents.forEach(({ componentType, name, component }) => {\n var _a;\n (_a = rawComponents[componentType]) !== null && _a !== void 0 ? _a : (rawComponents[componentType] = {});\n rawComponents[componentType][name] = component;\n });\n return Object.assign(Object.assign({}, rawComponents), { schemas: Object.assign(Object.assign({}, ((_a = rawComponents.schemas) !== null && _a !== void 0 ? _a : {})), this.schemaRefs), parameters: Object.assign(Object.assign({}, ((_b = rawComponents.parameters) !== null && _b !== void 0 ? _b : {})), this.paramRefs) });\n }\n sortDefinitions() {\n const generationOrder = [\n 'schema',\n 'parameter',\n 'component',\n 'route',\n ];\n this.definitions.sort((left, right) => {\n // No type means \"plain zod schema\" => it comes as highest priority based on the array above\n if (!('type' in left)) {\n if (!('type' in right)) {\n return 0;\n }\n return -1;\n }\n if (!('type' in right)) {\n return 1;\n }\n const leftIndex = generationOrder.findIndex(type => type === left.type);\n const rightIndex = generationOrder.findIndex(type => type === right.type);\n return leftIndex - rightIndex;\n });\n }\n generateSingle(definition) {\n if (!('type' in definition)) {\n this.generateSchemaWithRef(definition);\n return;\n }\n switch (definition.type) {\n case 'parameter':\n this.generateParameterDefinition(definition.schema);\n return;\n case 'schema':\n this.generateSchemaWithRef(definition.schema);\n return;\n case 'route':\n this.generateSingleRoute(definition.route);\n return;\n case 'component':\n this.rawComponents.push(definition);\n return;\n }\n }\n generateParameterDefinition(zodSchema) {\n const refId = Metadata.getRefId(zodSchema);\n const result = this.generateParameter(zodSchema);\n if (refId) {\n this.paramRefs[refId] = result;\n }\n return result;\n }\n getParameterRef(schemaMetadata, external) {\n var _a, _b, _c, _d, _e;\n const parameterMetadata = (_a = schemaMetadata === null || schemaMetadata === void 0 ? void 0 : schemaMetadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n const existingRef = ((_b = schemaMetadata === null || schemaMetadata === void 0 ? void 0 : schemaMetadata._internal) === null || _b === void 0 ? void 0 : _b.refId)\n ? this.paramRefs[(_c = schemaMetadata._internal) === null || _c === void 0 ? void 0 : _c.refId]\n : undefined;\n if (!((_d = schemaMetadata === null || schemaMetadata === void 0 ? void 0 : schemaMetadata._internal) === null || _d === void 0 ? void 0 : _d.refId) || !existingRef) {\n return undefined;\n }\n if ((parameterMetadata && existingRef.in !== parameterMetadata.in) ||\n ((external === null || external === void 0 ? void 0 : external.in) && existingRef.in !== external.in)) {\n throw new ConflictError(`Conflicting location for parameter ${existingRef.name}`, {\n key: 'in',\n values: compact([\n existingRef.in,\n external === null || external === void 0 ? void 0 : external.in,\n parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in,\n ]),\n });\n }\n if ((parameterMetadata && existingRef.name !== parameterMetadata.name) ||\n ((external === null || external === void 0 ? void 0 : external.name) && existingRef.name !== (external === null || external === void 0 ? void 0 : external.name))) {\n throw new ConflictError(`Conflicting names for parameter`, {\n key: 'name',\n values: compact([\n existingRef.name,\n external === null || external === void 0 ? void 0 : external.name,\n parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.name,\n ]),\n });\n }\n return {\n $ref: `#/components/parameters/${(_e = schemaMetadata._internal) === null || _e === void 0 ? void 0 : _e.refId}`,\n };\n }\n generateInlineParameters(zodSchema, location) {\n var _a;\n const metadata = Metadata.getMetadata(zodSchema);\n const parameterMetadata = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n const referencedSchema = this.getParameterRef(metadata, { in: location });\n if (referencedSchema) {\n return [referencedSchema];\n }\n if (isZodType(zodSchema, 'ZodObject')) {\n const propTypes = zodSchema._def.shape();\n const parameters = Object.entries(propTypes).map(([key, schema]) => {\n var _a, _b;\n const innerMetadata = Metadata.getMetadata(schema);\n const referencedSchema = this.getParameterRef(innerMetadata, {\n in: location,\n name: key,\n });\n if (referencedSchema) {\n return referencedSchema;\n }\n const innerParameterMetadata = (_a = innerMetadata === null || innerMetadata === void 0 ? void 0 : innerMetadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.name) &&\n innerParameterMetadata.name !== key) {\n throw new ConflictError(`Conflicting names for parameter`, {\n key: 'name',\n values: [key, innerParameterMetadata.name],\n });\n }\n if ((innerParameterMetadata === null || innerParameterMetadata === void 0 ? void 0 : innerParameterMetadata.in) &&\n innerParameterMetadata.in !== location) {\n throw new ConflictError(`Conflicting location for parameter ${(_b = innerParameterMetadata.name) !== null && _b !== void 0 ? _b : key}`, {\n key: 'in',\n values: [location, innerParameterMetadata.in],\n });\n }\n return this.generateParameter(schema.openapi({ param: { name: key, in: location } }));\n });\n return parameters;\n }\n if ((parameterMetadata === null || parameterMetadata === void 0 ? void 0 : parameterMetadata.in) && parameterMetadata.in !== location) {\n throw new ConflictError(`Conflicting location for parameter ${parameterMetadata.name}`, {\n key: 'in',\n values: [location, parameterMetadata.in],\n });\n }\n return [\n this.generateParameter(zodSchema.openapi({ param: { in: location } })),\n ];\n }\n generateSimpleParameter(zodSchema) {\n var _a;\n const metadata = Metadata.getParamMetadata(zodSchema);\n const paramMetadata = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n // TODO: Why are we not unwrapping here for isNullable as well?\n const required = !Metadata.isOptionalSchema(zodSchema) && !zodSchema.isNullable();\n const schema = this.generateSchemaWithRef(zodSchema);\n return Object.assign({ schema,\n required }, (paramMetadata ? Metadata.buildParameterMetadata(paramMetadata) : {}));\n }\n generateParameter(zodSchema) {\n var _a;\n const metadata = Metadata.getMetadata(zodSchema);\n const paramMetadata = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.param;\n const paramName = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.name;\n const paramLocation = paramMetadata === null || paramMetadata === void 0 ? void 0 : paramMetadata.in;\n if (!paramName) {\n throw new MissingParameterDataError({ missingField: 'name' });\n }\n if (!paramLocation) {\n throw new MissingParameterDataError({\n missingField: 'in',\n paramName,\n });\n }\n const baseParameter = this.generateSimpleParameter(zodSchema);\n return Object.assign(Object.assign({}, baseParameter), { in: paramLocation, name: paramName });\n }\n generateSchemaWithMetadata(zodSchema) {\n var _a;\n const innerSchema = Metadata.unwrapChained(zodSchema);\n const metadata = Metadata.getMetadata(zodSchema);\n const defaultValue = Metadata.getDefaultValue(zodSchema);\n const result = ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.type)\n ? { type: metadata === null || metadata === void 0 ? void 0 : metadata.metadata.type }\n : this.toOpenAPISchema(innerSchema, zodSchema.isNullable(), defaultValue);\n return (metadata === null || metadata === void 0 ? void 0 : metadata.metadata)\n ? Metadata.applySchemaMetadata(result, metadata.metadata)\n : omitBy(result, isUndefined);\n }\n /**\n * Same as above but applies nullable\n */\n constructReferencedOpenAPISchema(zodSchema) {\n var _a;\n const metadata = Metadata.getMetadata(zodSchema);\n const innerSchema = Metadata.unwrapChained(zodSchema);\n const defaultValue = Metadata.getDefaultValue(zodSchema);\n const isNullableSchema = zodSchema.isNullable();\n if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) === null || _a === void 0 ? void 0 : _a.type) {\n return this.versionSpecifics.mapNullableType(metadata.metadata.type, isNullableSchema);\n }\n return this.toOpenAPISchema(innerSchema, isNullableSchema, defaultValue);\n }\n /**\n * Generates an OpenAPI SchemaObject or a ReferenceObject with all the provided metadata applied\n */\n generateSimpleSchema(zodSchema) {\n var _a;\n const metadata = Metadata.getMetadata(zodSchema);\n const refId = Metadata.getRefId(zodSchema);\n if (!refId || !this.schemaRefs[refId]) {\n return this.generateSchemaWithMetadata(zodSchema);\n }\n const schemaRef = this.schemaRefs[refId];\n const referenceObject = {\n $ref: this.generateSchemaRef(refId),\n };\n // Metadata provided from .openapi() that is new to what we had already registered\n const newMetadata = omitBy(Metadata.buildSchemaMetadata((_a = metadata === null || metadata === void 0 ? void 0 : metadata.metadata) !== null && _a !== void 0 ? _a : {}), (value, key) => value === undefined || objectEquals(value, schemaRef[key]));\n // Do not calculate schema metadata overrides if type is provided in .openapi\n // https://github.com/asteasolutions/zod-to-openapi/pull/52/files/8ff707fe06e222bc573ed46cf654af8ee0b0786d#r996430801\n if (newMetadata.type) {\n return {\n allOf: [referenceObject, newMetadata],\n };\n }\n // New metadata from ZodSchema properties.\n const newSchemaMetadata = omitBy(this.constructReferencedOpenAPISchema(zodSchema), (value, key) => value === undefined || objectEquals(value, schemaRef[key]));\n const appliedMetadata = Metadata.applySchemaMetadata(newSchemaMetadata, newMetadata);\n if (Object.keys(appliedMetadata).length > 0) {\n return {\n allOf: [referenceObject, appliedMetadata],\n };\n }\n return referenceObject;\n }\n /**\n * Same as `generateSchema` but if the new schema is added into the\n * referenced schemas, it would return a ReferenceObject and not the\n * whole result.\n *\n * Should be used for nested objects, arrays, etc.\n */\n generateSchemaWithRef(zodSchema) {\n const refId = Metadata.getRefId(zodSchema);\n const result = this.generateSimpleSchema(zodSchema);\n if (refId && this.schemaRefs[refId] === undefined) {\n this.schemaRefs[refId] = result;\n return { $ref: this.generateSchemaRef(refId) };\n }\n return result;\n }\n generateSchemaRef(refId) {\n return `#/components/schemas/${refId}`;\n }\n getRequestBody(requestBody) {\n if (!requestBody) {\n return;\n }\n const { content } = requestBody, rest = __rest(requestBody, [\"content\"]);\n const requestBodyContent = this.getBodyContent(content);\n return Object.assign(Object.assign({}, rest), { content: requestBodyContent });\n }\n getParameters(request) {\n if (!request) {\n return [];\n }\n const { headers } = request;\n const query = this.cleanParameter(request.query);\n const params = this.cleanParameter(request.params);\n const cookies = this.cleanParameter(request.cookies);\n const queryParameters = enhanceMissingParametersError(() => (query ? this.generateInlineParameters(query, 'query') : []), { location: 'query' });\n const pathParameters = enhanceMissingParametersError(() => (params ? this.generateInlineParameters(params, 'path') : []), { location: 'path' });\n const cookieParameters = enhanceMissingParametersError(() => (cookies ? this.generateInlineParameters(cookies, 'cookie') : []), { location: 'cookie' });\n const headerParameters = enhanceMissingParametersError(() => {\n if (Array.isArray(headers)) {\n return headers.flatMap(header => this.generateInlineParameters(header, 'header'));\n }\n const cleanHeaders = this.cleanParameter(headers);\n return cleanHeaders\n ? this.generateInlineParameters(cleanHeaders, 'header')\n : [];\n }, { location: 'header' });\n return [\n ...pathParameters,\n ...queryParameters,\n ...headerParameters,\n ...cookieParameters,\n ];\n }\n cleanParameter(schema) {\n if (!schema) {\n return undefined;\n }\n return isZodType(schema, 'ZodEffects')\n ? this.cleanParameter(schema._def.schema)\n : schema;\n }\n generatePath(route) {\n const { method, path, request, responses } = route, pathItemConfig = __rest(route, [\"method\", \"path\", \"request\", \"responses\"]);\n const generatedResponses = mapValues(responses, response => {\n return this.getResponse(response);\n });\n const parameters = enhanceMissingParametersError(() => this.getParameters(request), { route: `${method} ${path}` });\n const requestBody = this.getRequestBody(request === null || request === void 0 ? void 0 : request.body);\n const routeDoc = {\n [method]: Object.assign(Object.assign(Object.assign(Object.assign({}, pathItemConfig), (parameters.length > 0\n ? {\n parameters: [...(pathItemConfig.parameters || []), ...parameters],\n }\n : {})), (requestBody ? { requestBody } : {})), { responses: generatedResponses }),\n };\n return routeDoc;\n }\n generateSingleRoute(route) {\n const routeDoc = this.generatePath(route);\n this.pathRefs[route.path] = Object.assign(Object.assign({}, this.pathRefs[route.path]), routeDoc);\n return routeDoc;\n }\n getResponse(response) {\n if (this.isReferenceObject(response)) {\n return response;\n }\n const { content, headers } = response, rest = __rest(response, [\"content\", \"headers\"]);\n const responseContent = content\n ? { content: this.getBodyContent(content) }\n : {};\n if (!headers) {\n return Object.assign(Object.assign({}, rest), responseContent);\n }\n const responseHeaders = isZodType(headers, 'ZodObject')\n ? this.getResponseHeaders(headers)\n : // This is input data so it is okay to cast in the common generator\n // since this is the user's responsibility to keep it correct\n headers;\n return Object.assign(Object.assign(Object.assign({}, rest), { headers: responseHeaders }), responseContent);\n }\n isReferenceObject(schema) {\n return '$ref' in schema;\n }\n getResponseHeaders(headers) {\n const schemaShape = headers._def.shape();\n const responseHeaders = mapValues(schemaShape, _ => this.generateSimpleParameter(_));\n return responseHeaders;\n }\n getBodyContent(content) {\n return mapValues(content, config => {\n if (!config || !isAnyZodType(config.schema)) {\n return config;\n }\n const { schema: configSchema } = config, rest = __rest(config, [\"schema\"]);\n const schema = this.generateSchemaWithRef(configSchema);\n return Object.assign({ schema }, rest);\n });\n }\n toOpenAPISchema(zodSchema, isNullable, defaultValue) {\n return this.openApiTransformer.transform(zodSchema, isNullable, _ => this.generateSchemaWithRef(_), _ => this.generateSchemaRef(_), defaultValue);\n }\n}\n\nclass OpenApiGeneratorV30Specifics {\n get nullType() {\n return { nullable: true };\n }\n mapNullableOfArray(objects, isNullable) {\n if (isNullable) {\n return [...objects, this.nullType];\n }\n return objects;\n }\n mapNullableType(type, isNullable) {\n return Object.assign(Object.assign({}, (type ? { type } : undefined)), (isNullable ? this.nullType : undefined));\n }\n mapTupleItems(schemas) {\n const uniqueSchemas = uniq(schemas);\n return {\n items: uniqueSchemas.length === 1\n ? uniqueSchemas[0]\n : { anyOf: uniqueSchemas },\n minItems: schemas.length,\n maxItems: schemas.length,\n };\n }\n getNumberChecks(checks) {\n return Object.assign({}, ...checks.map(check => {\n switch (check.kind) {\n case 'min':\n return check.inclusive\n ? { minimum: Number(check.value) }\n : { minimum: Number(check.value), exclusiveMinimum: true };\n case 'max':\n return check.inclusive\n ? { maximum: Number(check.value) }\n : { maximum: Number(check.value), exclusiveMaximum: true };\n default:\n return {};\n }\n }));\n }\n}\n\nclass OpenApiGeneratorV3 {\n constructor(definitions) {\n const specifics = new OpenApiGeneratorV30Specifics();\n this.generator = new OpenAPIGenerator(definitions, specifics);\n }\n generateDocument(config) {\n const baseData = this.generator.generateDocumentData();\n return Object.assign(Object.assign({}, config), baseData);\n }\n generateComponents() {\n return this.generator.generateComponents();\n }\n}\n\nclass OpenApiGeneratorV31Specifics {\n get nullType() {\n return { type: 'null' };\n }\n mapNullableOfArray(objects, isNullable) {\n if (isNullable) {\n return [...objects, this.nullType];\n }\n return objects;\n }\n mapNullableType(type, isNullable) {\n if (!type) {\n // 'null' is considered a type in Open API 3.1.0 => not providing a type includes null\n return {};\n }\n // Open API 3.1.0 made the `nullable` key invalid and instead you use type arrays\n if (isNullable) {\n return {\n type: Array.isArray(type) ? [...type, 'null'] : [type, 'null'],\n };\n }\n return {\n type,\n };\n }\n mapTupleItems(schemas) {\n return {\n prefixItems: schemas,\n };\n }\n getNumberChecks(checks) {\n return Object.assign({}, ...checks.map(check => {\n switch (check.kind) {\n case 'min':\n return check.inclusive\n ? { minimum: Number(check.value) }\n : { exclusiveMinimum: Number(check.value) };\n case 'max':\n return check.inclusive\n ? { maximum: Number(check.value) }\n : { exclusiveMaximum: Number(check.value) };\n default:\n return {};\n }\n }));\n }\n}\n\nfunction isWebhookDefinition(definition) {\n return 'type' in definition && definition.type === 'webhook';\n}\nclass OpenApiGeneratorV31 {\n constructor(definitions) {\n this.definitions = definitions;\n this.webhookRefs = {};\n const specifics = new OpenApiGeneratorV31Specifics();\n this.generator = new OpenAPIGenerator(this.definitions, specifics);\n }\n generateDocument(config) {\n const baseDocument = this.generator.generateDocumentData();\n this.definitions\n .filter(isWebhookDefinition)\n .forEach(definition => this.generateSingleWebhook(definition.webhook));\n return Object.assign(Object.assign(Object.assign({}, config), baseDocument), { webhooks: this.webhookRefs });\n }\n generateComponents() {\n return this.generator.generateComponents();\n }\n generateSingleWebhook(route) {\n const routeDoc = this.generator.generatePath(route);\n this.webhookRefs[route.path] = Object.assign(Object.assign({}, this.webhookRefs[route.path]), routeDoc);\n return routeDoc;\n }\n}\n\nexport { OpenAPIRegistry, OpenApiGeneratorV3, OpenApiGeneratorV31, extendZodWithOpenApi, getOpenApiMetadata };\n", "// src/index.ts\nimport { validator } from \"hono/validator\";\nvar zValidator = (target, schema, hook, options) => (\n // @ts-expect-error not typed well\n validator(target, async (value, c) => {\n let validatorValue = value;\n if (target === \"header\" && \"_def\" in schema || target === \"header\" && \"_zod\" in schema) {\n const schemaKeys = Object.keys(\"in\" in schema ? schema.in.shape : schema.shape);\n const caseInsensitiveKeymap = Object.fromEntries(\n schemaKeys.map((key) => [key.toLowerCase(), key])\n );\n validatorValue = Object.fromEntries(\n Object.entries(value).map(([key, value2]) => [caseInsensitiveKeymap[key] || key, value2])\n );\n }\n const result = options && options.validationFunction ? await options.validationFunction(schema, validatorValue) : (\n // @ts-expect-error z4.$ZodType has safeParseAsync\n await schema.safeParseAsync(validatorValue)\n );\n if (hook) {\n const hookResult = await hook({ data: validatorValue, ...result, target }, c);\n if (hookResult) {\n if (hookResult instanceof Response) {\n return hookResult;\n }\n if (\"response\" in hookResult) {\n return hookResult.response;\n }\n }\n }\n if (!result.success) {\n return c.json(result, 400);\n }\n return result.data;\n })\n);\nexport {\n zValidator\n};\n", "// src/validator/index.ts\nimport { validator } from \"./validator.js\";\nexport {\n validator\n};\n", "// src/validator/validator.ts\nimport { getCookie } from \"../helper/cookie/index.js\";\nimport { HTTPException } from \"../http-exception.js\";\nimport { bufferToFormData } from \"../utils/buffer.js\";\nvar jsonRegex = /^application\\/([a-z-\\.]+\\+)?json(;\\s*[a-zA-Z0-9\\-]+\\=([^;]+))*$/;\nvar multipartRegex = /^multipart\\/form-data(;\\s?boundary=[a-zA-Z0-9'\"()+_,\\-./:=?]+)?$/;\nvar urlencodedRegex = /^application\\/x-www-form-urlencoded(;\\s*[a-zA-Z0-9\\-]+\\=([^;]+))*$/;\nvar validator = (target, validationFunc) => {\n return async (c, next) => {\n let value = {};\n const contentType = c.req.header(\"Content-Type\");\n switch (target) {\n case \"json\":\n if (!contentType || !jsonRegex.test(contentType)) {\n break;\n }\n try {\n value = await c.req.json();\n } catch {\n const message = \"Malformed JSON in request body\";\n throw new HTTPException(400, { message });\n }\n break;\n case \"form\": {\n if (!contentType || !(multipartRegex.test(contentType) || urlencodedRegex.test(contentType))) {\n break;\n }\n let formData;\n if (c.req.bodyCache.formData) {\n formData = await c.req.bodyCache.formData;\n } else {\n try {\n const arrayBuffer = await c.req.arrayBuffer();\n formData = await bufferToFormData(arrayBuffer, contentType);\n c.req.bodyCache.formData = formData;\n } catch (e) {\n let message = \"Malformed FormData request.\";\n message += e instanceof Error ? ` ${e.message}` : ` ${String(e)}`;\n throw new HTTPException(400, { message });\n }\n }\n const form = {};\n formData.forEach((value2, key) => {\n if (key.endsWith(\"[]\")) {\n ;\n (form[key] ??= []).push(value2);\n } else if (Array.isArray(form[key])) {\n ;\n form[key].push(value2);\n } else if (key in form) {\n form[key] = [form[key], value2];\n } else {\n form[key] = value2;\n }\n });\n value = form;\n break;\n }\n case \"query\":\n value = Object.fromEntries(\n Object.entries(c.req.queries()).map(([k, v]) => {\n return v.length === 1 ? [k, v[0]] : [k, v];\n })\n );\n break;\n case \"param\":\n value = c.req.param();\n break;\n case \"header\":\n value = c.req.header();\n break;\n case \"cookie\":\n value = getCookie(c);\n break;\n }\n const res = await validationFunc(value, c);\n if (res instanceof Response) {\n return res;\n }\n c.req.addValidatedData(target, res);\n await next();\n };\n};\nexport {\n validator\n};\n", "// src/helper/cookie/index.ts\nimport { parse, parseSigned, serialize, serializeSigned } from \"../../utils/cookie.js\";\nvar getCookie = (c, key, prefix) => {\n const cookie = c.req.raw.headers.get(\"Cookie\");\n if (typeof key === \"string\") {\n if (!cookie) {\n return void 0;\n }\n let finalKey = key;\n if (prefix === \"secure\") {\n finalKey = \"__Secure-\" + key;\n } else if (prefix === \"host\") {\n finalKey = \"__Host-\" + key;\n }\n const obj2 = parse(cookie, finalKey);\n return obj2[finalKey];\n }\n if (!cookie) {\n return {};\n }\n const obj = parse(cookie);\n return obj;\n};\nvar getSignedCookie = async (c, secret, key, prefix) => {\n const cookie = c.req.raw.headers.get(\"Cookie\");\n if (typeof key === \"string\") {\n if (!cookie) {\n return void 0;\n }\n let finalKey = key;\n if (prefix === \"secure\") {\n finalKey = \"__Secure-\" + key;\n } else if (prefix === \"host\") {\n finalKey = \"__Host-\" + key;\n }\n const obj2 = await parseSigned(cookie, secret, finalKey);\n return obj2[finalKey];\n }\n if (!cookie) {\n return {};\n }\n const obj = await parseSigned(cookie, secret);\n return obj;\n};\nvar generateCookie = (name, value, opt) => {\n let cookie;\n if (opt?.prefix === \"secure\") {\n cookie = serialize(\"__Secure-\" + name, value, { path: \"/\", ...opt, secure: true });\n } else if (opt?.prefix === \"host\") {\n cookie = serialize(\"__Host-\" + name, value, {\n ...opt,\n path: \"/\",\n secure: true,\n domain: void 0\n });\n } else {\n cookie = serialize(name, value, { path: \"/\", ...opt });\n }\n return cookie;\n};\nvar setCookie = (c, name, value, opt) => {\n const cookie = generateCookie(name, value, opt);\n c.header(\"Set-Cookie\", cookie, { append: true });\n};\nvar generateSignedCookie = async (name, value, secret, opt) => {\n let cookie;\n if (opt?.prefix === \"secure\") {\n cookie = await serializeSigned(\"__Secure-\" + name, value, secret, {\n path: \"/\",\n ...opt,\n secure: true\n });\n } else if (opt?.prefix === \"host\") {\n cookie = await serializeSigned(\"__Host-\" + name, value, secret, {\n ...opt,\n path: \"/\",\n secure: true,\n domain: void 0\n });\n } else {\n cookie = await serializeSigned(name, value, secret, { path: \"/\", ...opt });\n }\n return cookie;\n};\nvar setSignedCookie = async (c, name, value, secret, opt) => {\n const cookie = await generateSignedCookie(name, value, secret, opt);\n c.header(\"set-cookie\", cookie, { append: true });\n};\nvar deleteCookie = (c, name, opt) => {\n const deletedCookie = getCookie(c, name, opt?.prefix);\n setCookie(c, name, \"\", { ...opt, maxAge: 0 });\n return deletedCookie;\n};\nexport {\n deleteCookie,\n generateCookie,\n generateSignedCookie,\n getCookie,\n getSignedCookie,\n setCookie,\n setSignedCookie\n};\n", "// src/utils/cookie.ts\nimport { decodeURIComponent_, tryDecode } from \"./url.js\";\nvar algorithm = { name: \"HMAC\", hash: \"SHA-256\" };\nvar getCryptoKey = async (secret) => {\n const secretBuf = typeof secret === \"string\" ? new TextEncoder().encode(secret) : secret;\n return await crypto.subtle.importKey(\"raw\", secretBuf, algorithm, false, [\"sign\", \"verify\"]);\n};\nvar makeSignature = async (value, secret) => {\n const key = await getCryptoKey(secret);\n const signature = await crypto.subtle.sign(algorithm.name, key, new TextEncoder().encode(value));\n return btoa(String.fromCharCode(...new Uint8Array(signature)));\n};\nvar verifySignature = async (base64Signature, value, secret) => {\n try {\n const signatureBinStr = atob(base64Signature);\n const signature = new Uint8Array(signatureBinStr.length);\n for (let i = 0, len = signatureBinStr.length; i < len; i++) {\n signature[i] = signatureBinStr.charCodeAt(i);\n }\n return await crypto.subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value));\n } catch {\n return false;\n }\n};\nvar validCookieNameRegEx = /^[\\w!#$%&'*.^`|~+-]+$/;\nvar validCookieValueRegEx = /^[ !#-:<-[\\]-~]*$/;\nvar parse = (cookie, name) => {\n if (name && cookie.indexOf(name) === -1) {\n return {};\n }\n const pairs = cookie.trim().split(\";\");\n const parsedCookie = {};\n for (let pairStr of pairs) {\n pairStr = pairStr.trim();\n const valueStartPos = pairStr.indexOf(\"=\");\n if (valueStartPos === -1) {\n continue;\n }\n const cookieName = pairStr.substring(0, valueStartPos).trim();\n if (name && name !== cookieName || !validCookieNameRegEx.test(cookieName)) {\n continue;\n }\n let cookieValue = pairStr.substring(valueStartPos + 1).trim();\n if (cookieValue.startsWith('\"') && cookieValue.endsWith('\"')) {\n cookieValue = cookieValue.slice(1, -1);\n }\n if (validCookieValueRegEx.test(cookieValue)) {\n parsedCookie[cookieName] = cookieValue.indexOf(\"%\") !== -1 ? tryDecode(cookieValue, decodeURIComponent_) : cookieValue;\n if (name) {\n break;\n }\n }\n }\n return parsedCookie;\n};\nvar parseSigned = async (cookie, secret, name) => {\n const parsedCookie = {};\n const secretKey = await getCryptoKey(secret);\n for (const [key, value] of Object.entries(parse(cookie, name))) {\n const signatureStartPos = value.lastIndexOf(\".\");\n if (signatureStartPos < 1) {\n continue;\n }\n const signedValue = value.substring(0, signatureStartPos);\n const signature = value.substring(signatureStartPos + 1);\n if (signature.length !== 44 || !signature.endsWith(\"=\")) {\n continue;\n }\n const isVerified = await verifySignature(signature, signedValue, secretKey);\n parsedCookie[key] = isVerified ? signedValue : false;\n }\n return parsedCookie;\n};\nvar _serialize = (name, value, opt = {}) => {\n let cookie = `${name}=${value}`;\n if (name.startsWith(\"__Secure-\") && !opt.secure) {\n throw new Error(\"__Secure- Cookie must have Secure attributes\");\n }\n if (name.startsWith(\"__Host-\")) {\n if (!opt.secure) {\n throw new Error(\"__Host- Cookie must have Secure attributes\");\n }\n if (opt.path !== \"/\") {\n throw new Error('__Host- Cookie must have Path attributes with \"/\"');\n }\n if (opt.domain) {\n throw new Error(\"__Host- Cookie must not have Domain attributes\");\n }\n }\n if (opt && typeof opt.maxAge === \"number\" && opt.maxAge >= 0) {\n if (opt.maxAge > 3456e4) {\n throw new Error(\n \"Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.\"\n );\n }\n cookie += `; Max-Age=${opt.maxAge | 0}`;\n }\n if (opt.domain && opt.prefix !== \"host\") {\n cookie += `; Domain=${opt.domain}`;\n }\n if (opt.path) {\n cookie += `; Path=${opt.path}`;\n }\n if (opt.expires) {\n if (opt.expires.getTime() - Date.now() > 3456e7) {\n throw new Error(\n \"Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.\"\n );\n }\n cookie += `; Expires=${opt.expires.toUTCString()}`;\n }\n if (opt.httpOnly) {\n cookie += \"; HttpOnly\";\n }\n if (opt.secure) {\n cookie += \"; Secure\";\n }\n if (opt.sameSite) {\n cookie += `; SameSite=${opt.sameSite.charAt(0).toUpperCase() + opt.sameSite.slice(1)}`;\n }\n if (opt.priority) {\n cookie += `; Priority=${opt.priority.charAt(0).toUpperCase() + opt.priority.slice(1)}`;\n }\n if (opt.partitioned) {\n if (!opt.secure) {\n throw new Error(\"Partitioned Cookie must have Secure attributes\");\n }\n cookie += \"; Partitioned\";\n }\n return cookie;\n};\nvar serialize = (name, value, opt) => {\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nvar serializeSigned = async (name, value, secret, opt = {}) => {\n const signature = await makeSignature(value, secret);\n value = `${value}.${signature}`;\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nexport {\n parse,\n parseSigned,\n serialize,\n serializeSigned\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(\n \"/\",\n url.charCodeAt(9) === 58 ? 13 : 8\n );\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 path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\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(`?${key}`, 8);\n if (keyIndex2 === -1) {\n keyIndex2 = url.indexOf(`&${key}`, 8);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode\n};\n", "// src/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\n};\n", "// src/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 timingSafeEqual = 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 || !sb) {\n return false;\n }\n return sa === sb && a === b;\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 \"Content-Type\": contentType\n }\n });\n return response.formData();\n};\nexport {\n bufferToFormData,\n bufferToString,\n equal,\n timingSafeEqual\n};\n", "// src/utils/crypto.ts\nvar sha256 = async (data) => {\n const algorithm = { name: \"SHA-256\", alias: \"sha256\" };\n const hash = await createHash(data, algorithm);\n return hash;\n};\nvar sha1 = async (data) => {\n const algorithm = { name: \"SHA-1\", alias: \"sha1\" };\n const hash = await createHash(data, algorithm);\n return hash;\n};\nvar md5 = async (data) => {\n const algorithm = { name: \"MD5\", alias: \"md5\" };\n const hash = await createHash(data, algorithm);\n return hash;\n};\nvar createHash = async (data, algorithm) => {\n let sourceBuffer;\n if (ArrayBuffer.isView(data) || data instanceof ArrayBuffer) {\n sourceBuffer = data;\n } else {\n if (typeof data === \"object\") {\n data = JSON.stringify(data);\n }\n sourceBuffer = new TextEncoder().encode(String(data));\n }\n if (crypto && crypto.subtle) {\n const buffer = await crypto.subtle.digest(\n {\n name: algorithm.name\n },\n sourceBuffer\n );\n const hash = Array.prototype.map.call(new Uint8Array(buffer), (x) => (\"00\" + x.toString(16)).slice(-2)).join(\"\");\n return hash;\n }\n return null;\n};\nexport {\n createHash,\n md5,\n sha1,\n sha256\n};\n", "// src/index.ts\nimport { Hono } from \"./hono.js\";\nexport {\n Hono\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n router;\n getPath;\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 errorHandler = errorHandler;\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\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 fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar Context = class {\n #rawRequest;\n #req;\n env = {};\n #var;\n finalized = false;\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\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 get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\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 get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n get res() {\n return this.#res ||= new Response(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n set res(_res) {\n if (this.#res && _res) {\n _res = new Response(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n setLayout = (layout) => this.#layout = layout;\n getLayout = () => this.#layout;\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = new Response(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return new Response(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\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 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 redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n notFound = () => {\n this.#notFoundHandler ??= () => new Response();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n", "// src/request.ts\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 raw;\n #validatedData;\n #matchResult;\n routeIndex = 0;\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 : void 0;\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 && typeof value === \"string\") {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n text() {\n return this.#cachedBody(\"text\");\n }\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n blob() {\n return this.#cachedBody(\"blob\");\n }\n formData() {\n return this.#cachedBody(\"formData\");\n }\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n get url() {\n return this.raw.url;\n }\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nexport {\n HonoRequest\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/router/reg-exp-router/index.ts\nimport { RegExpRouter } from \"./router.js\";\nexport {\n RegExpRouter\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 { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar emptyParam = [];\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(method, path) {\n clearWildcardRegExpCache();\n const matchers = this.#buildAllMatchers();\n this.match = (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 match = path2.match(matcher[0]);\n if (!match) {\n return [[], emptyParam];\n }\n const index = match.indexOf(\"\", 1);\n return [matcher[1][index], match];\n };\n return this.match(method, path);\n }\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 return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = 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 {\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/smart-router/index.ts\nimport { SmartRouter } from \"./router.js\";\nexport {\n SmartRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/index.ts\nimport { TrieRouter } from \"./router.js\";\nexport {\n TrieRouter\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar Node = class {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #getHandlerSets(node, method, nodeParams, params) {\n const handlerSets = [];\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n return handlerSets;\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(nextNode.#children[\"*\"], method, node.#params)\n );\n }\n handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params));\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params));\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n const restPathString = parts.slice(i).join(\"/\");\n if (matcher instanceof RegExp) {\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params));\n if (Object.keys(child.#children).length) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params));\n if (child.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(child.#children[\"*\"], method, params, node.#params)\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n curNodes = tempNodes.concat(curNodesQueue.shift() ?? []);\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n", "import * as z from \"./v3/external.js\";\nexport * from \"./v3/external.js\";\nexport { z };\nexport default z;\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n", "export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "// src/middleware/request-id/index.ts\nimport { requestId } from \"./request-id.js\";\nexport {\n requestId\n};\n", "// src/middleware/request-id/request-id.ts\nvar requestId = ({\n limitLength = 255,\n headerName = \"X-Request-Id\",\n generator = () => crypto.randomUUID()\n} = {}) => {\n return async function requestId2(c, next) {\n let reqId = headerName ? c.req.header(headerName) : void 0;\n if (!reqId || reqId.length > limitLength || /[^\\w\\-]/.test(reqId)) {\n reqId = generator(c);\n }\n c.set(\"requestId\", reqId);\n if (headerName) {\n c.header(headerName, reqId);\n }\n await next();\n };\n};\nexport {\n requestId\n};\n", "// src/middleware/bearer-auth/index.ts\nimport { HTTPException } from \"../../http-exception.js\";\nimport { timingSafeEqual } from \"../../utils/buffer.js\";\nvar TOKEN_STRINGS = \"[A-Za-z0-9._~+/-]+=*\";\nvar PREFIX = \"Bearer\";\nvar HEADER = \"Authorization\";\nvar bearerAuth = (options) => {\n if (!(\"token\" in options || \"verifyToken\" in options)) {\n throw new Error('bearer auth middleware requires options for \"token\"');\n }\n if (!options.realm) {\n options.realm = \"\";\n }\n if (options.prefix === void 0) {\n options.prefix = PREFIX;\n }\n const realm = options.realm?.replace(/\"/g, '\\\\\"');\n const prefixRegexStr = options.prefix === \"\" ? \"\" : `${options.prefix} +`;\n const regexp = new RegExp(`^${prefixRegexStr}(${TOKEN_STRINGS}) *$`);\n const wwwAuthenticatePrefix = options.prefix === \"\" ? \"\" : `${options.prefix} `;\n const throwHTTPException = async (c, status, wwwAuthenticateHeader, messageOption) => {\n const headers = {\n \"WWW-Authenticate\": wwwAuthenticateHeader\n };\n const responseMessage = typeof messageOption === \"function\" ? await messageOption(c) : messageOption;\n const res = typeof responseMessage === \"string\" ? new Response(responseMessage, { status, headers }) : new Response(JSON.stringify(responseMessage), {\n status,\n headers: {\n ...headers,\n \"content-type\": \"application/json\"\n }\n });\n throw new HTTPException(status, { res });\n };\n return async function bearerAuth2(c, next) {\n const headerToken = c.req.header(options.headerName || HEADER);\n if (!headerToken) {\n await throwHTTPException(\n c,\n 401,\n `${wwwAuthenticatePrefix}realm=\"${realm}\"`,\n options.noAuthenticationHeaderMessage || \"Unauthorized\"\n );\n } else {\n const match = regexp.exec(headerToken);\n if (!match) {\n await throwHTTPException(\n c,\n 400,\n `${wwwAuthenticatePrefix}error=\"invalid_request\"`,\n options.invalidAuthenticationHeaderMessage || \"Bad Request\"\n );\n } else {\n let equal = false;\n if (\"verifyToken\" in options) {\n equal = await options.verifyToken(match[1], c);\n } else if (typeof options.token === \"string\") {\n equal = await timingSafeEqual(options.token, match[1], options.hashFunction);\n } else if (Array.isArray(options.token) && options.token.length > 0) {\n for (const token of options.token) {\n if (await timingSafeEqual(token, match[1], options.hashFunction)) {\n equal = true;\n break;\n }\n }\n }\n if (!equal) {\n await throwHTTPException(\n c,\n 401,\n `${wwwAuthenticatePrefix}error=\"invalid_token\"`,\n options.invalidTokenMessage || \"Unauthorized\"\n );\n }\n }\n }\n await next();\n };\n};\nexport {\n bearerAuth\n};\n", "// src/middleware/combine/index.ts\nimport { compose } from \"../../compose.js\";\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { TrieRouter } from \"../../router/trie-router/index.js\";\nvar some = (...middleware) => {\n return async function some2(c, next) {\n let isNextCalled = false;\n const wrappedNext = () => {\n isNextCalled = true;\n return next();\n };\n let lastError;\n for (const handler of middleware) {\n try {\n const result = await handler(c, wrappedNext);\n if (result === true && !c.finalized) {\n await wrappedNext();\n } else if (result === false) {\n lastError = new Error(\"No successful middleware found\");\n continue;\n }\n lastError = void 0;\n break;\n } catch (error) {\n lastError = error;\n if (isNextCalled) {\n break;\n }\n }\n }\n if (lastError) {\n throw lastError;\n }\n };\n};\nvar every = (...middleware) => {\n return async function every2(c, next) {\n const currentRouteIndex = c.req.routeIndex;\n await compose(\n middleware.map((m) => [\n [\n async (c2, next2) => {\n c2.req.routeIndex = currentRouteIndex;\n const res = await m(c2, next2);\n if (res === false) {\n throw new Error(\"Unmet condition\");\n }\n return res;\n }\n ]\n ])\n )(c, next);\n };\n};\nvar except = (condition, ...middleware) => {\n let router = void 0;\n const conditions = (Array.isArray(condition) ? condition : [condition]).map((condition2) => {\n if (typeof condition2 === \"string\") {\n router ||= new TrieRouter();\n router.add(METHOD_NAME_ALL, condition2, true);\n } else {\n return condition2;\n }\n }).filter(Boolean);\n if (router) {\n conditions.unshift((c) => !!router?.match(METHOD_NAME_ALL, c.req.path)?.[0]?.[0]?.[0]);\n }\n const handler = some((c) => conditions.some((cond) => cond(c)), every(...middleware));\n return async function except2(c, next) {\n await handler(c, next);\n };\n};\nexport {\n every,\n except,\n some\n};\n", "// src/middleware/logger/index.ts\nimport { getColorEnabledAsync } from \"../../utils/color.js\";\nvar humanize = (times) => {\n const [delimiter, separator] = [\",\", \".\"];\n const orderTimes = times.map((v) => v.replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1\" + delimiter));\n return orderTimes.join(separator);\n};\nvar time = (start) => {\n const delta = Date.now() - start;\n return humanize([delta < 1e3 ? delta + \"ms\" : Math.round(delta / 1e3) + \"s\"]);\n};\nvar colorStatus = async (status) => {\n const colorEnabled = await getColorEnabledAsync();\n if (colorEnabled) {\n switch (status / 100 | 0) {\n case 5:\n return `\\x1B[31m${status}\\x1B[0m`;\n case 4:\n return `\\x1B[33m${status}\\x1B[0m`;\n case 3:\n return `\\x1B[36m${status}\\x1B[0m`;\n case 2:\n return `\\x1B[32m${status}\\x1B[0m`;\n }\n }\n return `${status}`;\n};\nasync function log(fn, prefix, method, path, status = 0, elapsed) {\n const out = prefix === \"<--\" /* Incoming */ ? `${prefix} ${method} ${path}` : `${prefix} ${method} ${path} ${await colorStatus(status)} ${elapsed}`;\n fn(out);\n}\nvar logger = (fn = console.log) => {\n return async function logger2(c, next) {\n const { method, url } = c.req;\n const path = url.slice(url.indexOf(\"/\", 8));\n await log(fn, \"<--\" /* Incoming */, method, path);\n const start = Date.now();\n await next();\n await log(fn, \"-->\" /* Outgoing */, method, path, c.res.status, time(start));\n };\n};\nexport {\n logger\n};\n", "// src/utils/color.ts\nfunction getColorEnabled() {\n const { process, Deno } = globalThis;\n const isNoColor = typeof Deno?.noColor === \"boolean\" ? Deno.noColor : process !== void 0 ? \"NO_COLOR\" in process?.env : false;\n return !isNoColor;\n}\nasync function getColorEnabledAsync() {\n const { navigator } = globalThis;\n const cfWorkers = \"cloudflare:workers\";\n const isNoColor = navigator !== void 0 && navigator.userAgent === \"Cloudflare-Workers\" ? await (async () => {\n try {\n return \"NO_COLOR\" in ((await import(cfWorkers)).env ?? {});\n } catch {\n return false;\n }\n })() : !getColorEnabled();\n return !isNoColor;\n}\nexport {\n getColorEnabled,\n getColorEnabledAsync\n};\n", "// src/middleware/secure-headers/index.ts\nimport { NONCE, secureHeaders } from \"./secure-headers.js\";\nexport {\n NONCE,\n secureHeaders\n};\n", "// src/middleware/secure-headers/secure-headers.ts\nimport { encodeBase64 } from \"../../utils/encode.js\";\nvar HEADERS_MAP = {\n crossOriginEmbedderPolicy: [\"Cross-Origin-Embedder-Policy\", \"require-corp\"],\n crossOriginResourcePolicy: [\"Cross-Origin-Resource-Policy\", \"same-origin\"],\n crossOriginOpenerPolicy: [\"Cross-Origin-Opener-Policy\", \"same-origin\"],\n originAgentCluster: [\"Origin-Agent-Cluster\", \"?1\"],\n referrerPolicy: [\"Referrer-Policy\", \"no-referrer\"],\n strictTransportSecurity: [\"Strict-Transport-Security\", \"max-age=15552000; includeSubDomains\"],\n xContentTypeOptions: [\"X-Content-Type-Options\", \"nosniff\"],\n xDnsPrefetchControl: [\"X-DNS-Prefetch-Control\", \"off\"],\n xDownloadOptions: [\"X-Download-Options\", \"noopen\"],\n xFrameOptions: [\"X-Frame-Options\", \"SAMEORIGIN\"],\n xPermittedCrossDomainPolicies: [\"X-Permitted-Cross-Domain-Policies\", \"none\"],\n xXssProtection: [\"X-XSS-Protection\", \"0\"]\n};\nvar DEFAULT_OPTIONS = {\n crossOriginEmbedderPolicy: false,\n crossOriginResourcePolicy: true,\n crossOriginOpenerPolicy: true,\n originAgentCluster: true,\n referrerPolicy: true,\n strictTransportSecurity: true,\n xContentTypeOptions: true,\n xDnsPrefetchControl: true,\n xDownloadOptions: true,\n xFrameOptions: true,\n xPermittedCrossDomainPolicies: true,\n xXssProtection: true,\n removePoweredBy: true,\n permissionsPolicy: {}\n};\nvar generateNonce = () => {\n const arrayBuffer = new Uint8Array(16);\n crypto.getRandomValues(arrayBuffer);\n return encodeBase64(arrayBuffer.buffer);\n};\nvar NONCE = (ctx) => {\n const key = \"secureHeadersNonce\";\n const init = ctx.get(key);\n const nonce = init || generateNonce();\n if (init == null) {\n ctx.set(key, nonce);\n }\n return `'nonce-${nonce}'`;\n};\nvar secureHeaders = (customOptions) => {\n const options = { ...DEFAULT_OPTIONS, ...customOptions };\n const headersToSet = getFilteredHeaders(options);\n const callbacks = [];\n if (options.contentSecurityPolicy) {\n const [callback, value] = getCSPDirectives(options.contentSecurityPolicy);\n if (callback) {\n callbacks.push(callback);\n }\n headersToSet.push([\"Content-Security-Policy\", value]);\n }\n if (options.contentSecurityPolicyReportOnly) {\n const [callback, value] = getCSPDirectives(options.contentSecurityPolicyReportOnly);\n if (callback) {\n callbacks.push(callback);\n }\n headersToSet.push([\"Content-Security-Policy-Report-Only\", value]);\n }\n if (options.permissionsPolicy && Object.keys(options.permissionsPolicy).length > 0) {\n headersToSet.push([\n \"Permissions-Policy\",\n getPermissionsPolicyDirectives(options.permissionsPolicy)\n ]);\n }\n if (options.reportingEndpoints) {\n headersToSet.push([\"Reporting-Endpoints\", getReportingEndpoints(options.reportingEndpoints)]);\n }\n if (options.reportTo) {\n headersToSet.push([\"Report-To\", getReportToOptions(options.reportTo)]);\n }\n return async function secureHeaders2(ctx, next) {\n const headersToSetForReq = callbacks.length === 0 ? headersToSet : callbacks.reduce((acc, cb) => cb(ctx, acc), headersToSet);\n await next();\n setHeaders(ctx, headersToSetForReq);\n if (options?.removePoweredBy) {\n ctx.res.headers.delete(\"X-Powered-By\");\n }\n };\n};\nfunction getFilteredHeaders(options) {\n return Object.entries(HEADERS_MAP).filter(([key]) => options[key]).map(([key, defaultValue]) => {\n const overrideValue = options[key];\n return typeof overrideValue === \"string\" ? [defaultValue[0], overrideValue] : defaultValue;\n });\n}\nfunction getCSPDirectives(contentSecurityPolicy) {\n const callbacks = [];\n const resultValues = [];\n for (const [directive, value] of Object.entries(contentSecurityPolicy)) {\n const valueArray = Array.isArray(value) ? value : [value];\n valueArray.forEach((value2, i) => {\n if (typeof value2 === \"function\") {\n const index = i * 2 + 2 + resultValues.length;\n callbacks.push((ctx, values) => {\n values[index] = value2(ctx, directive);\n });\n }\n });\n resultValues.push(\n directive.replace(\n /[A-Z]+(?![a-z])|[A-Z]/g,\n (match, offset) => offset ? \"-\" + match.toLowerCase() : match.toLowerCase()\n ),\n ...valueArray.flatMap((value2) => [\" \", value2]),\n \"; \"\n );\n }\n resultValues.pop();\n return callbacks.length === 0 ? [void 0, resultValues.join(\"\")] : [\n (ctx, headersToSet) => headersToSet.map((values) => {\n if (values[0] === \"Content-Security-Policy\" || values[0] === \"Content-Security-Policy-Report-Only\") {\n const clone = values[1].slice();\n callbacks.forEach((cb) => {\n cb(ctx, clone);\n });\n return [values[0], clone.join(\"\")];\n } else {\n return values;\n }\n }),\n resultValues\n ];\n}\nfunction getPermissionsPolicyDirectives(policy) {\n return Object.entries(policy).map(([directive, value]) => {\n const kebabDirective = camelToKebab(directive);\n if (typeof value === \"boolean\") {\n return `${kebabDirective}=${value ? \"*\" : \"none\"}`;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return `${kebabDirective}=()`;\n }\n if (value.length === 1 && (value[0] === \"*\" || value[0] === \"none\")) {\n return `${kebabDirective}=${value[0]}`;\n }\n const allowlist = value.map((item) => [\"self\", \"src\"].includes(item) ? item : `\"${item}\"`);\n return `${kebabDirective}=(${allowlist.join(\" \")})`;\n }\n return \"\";\n }).filter(Boolean).join(\", \");\n}\nfunction camelToKebab(str) {\n return str.replace(/([a-z\\d])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\nfunction getReportingEndpoints(reportingEndpoints = []) {\n return reportingEndpoints.map((endpoint) => `${endpoint.name}=\"${endpoint.url}\"`).join(\", \");\n}\nfunction getReportToOptions(reportTo = []) {\n return reportTo.map((option) => JSON.stringify(option)).join(\", \");\n}\nfunction setHeaders(ctx, headersToSet) {\n headersToSet.forEach(([header, value]) => {\n ctx.res.headers.set(header, value);\n });\n}\nexport {\n NONCE,\n secureHeaders\n};\n", "// src/utils/encode.ts\nvar decodeBase64Url = (str) => {\n return decodeBase64(str.replace(/_|-/g, (m) => ({ _: \"/\", \"-\": \"+\" })[m] ?? m));\n};\nvar encodeBase64Url = (buf) => encodeBase64(buf).replace(/\\/|\\+/g, (m) => ({ \"/\": \"_\", \"+\": \"-\" })[m] ?? m);\nvar encodeBase64 = (buf) => {\n let binary = \"\";\n const bytes = new Uint8Array(buf);\n for (let i = 0, len = bytes.length; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n};\nvar decodeBase64 = (str) => {\n const binary = atob(str);\n const bytes = new Uint8Array(new ArrayBuffer(binary.length));\n const half = binary.length / 2;\n for (let i = 0, j = binary.length - 1; i <= half; i++, j--) {\n bytes[i] = binary.charCodeAt(i);\n bytes[j] = binary.charCodeAt(j);\n }\n return bytes;\n};\nexport {\n decodeBase64,\n decodeBase64Url,\n encodeBase64,\n encodeBase64Url\n};\n", "// src/middleware/trailing-slash/index.ts\nvar trimTrailingSlash = () => {\n return async function trimTrailingSlash2(c, next) {\n await next();\n if (c.res.status === 404 && (c.req.method === \"GET\" || c.req.method === \"HEAD\") && c.req.path !== \"/\" && c.req.path.at(-1) === \"/\") {\n const url = new URL(c.req.url);\n url.pathname = url.pathname.substring(0, url.pathname.length - 1);\n c.res = c.redirect(url.toString(), 301);\n }\n };\n};\nvar appendTrailingSlash = () => {\n return async function appendTrailingSlash2(c, next) {\n await next();\n if (c.res.status === 404 && (c.req.method === \"GET\" || c.req.method === \"HEAD\") && c.req.path.at(-1) !== \"/\") {\n const url = new URL(c.req.url);\n url.pathname += \"/\";\n c.res = c.redirect(url.toString(), 301);\n }\n };\n};\nexport {\n appendTrailingSlash,\n trimTrailingSlash\n};\n", "import { sentry } from '@hono/sentry'\nimport type { Context } from 'hono'\nimport type { HonoContext } from '../../types.ts'\n\n/**\n * Telemetry middleware that conditionally applies Sentry based on configuration\n * Relies on configMiddleware to have already enriched c.env with TELEMETRY_ENABLED\n */\nexport async function telemetryMiddleware(\n c: HonoContext,\n next: () => Promise<void>,\n) {\n // Check if telemetry is enabled via the enriched config\n if (c.env.TELEMETRY_ENABLED) {\n // Apply Sentry middleware dynamically\n const sentryMiddleware = sentry({\n dsn: c.env.SENTRY?.dsn ?? c.env.SENTRY_CONFIG?.dsn ?? '',\n environment:\n c.env.SENTRY?.environment ??\n c.env.SENTRY_CONFIG?.environment ??\n 'development',\n sendDefaultPii: c.env.SENTRY_CONFIG?.sendDefaultPii ?? true,\n sampleRate: c.env.SENTRY_CONFIG?.sampleRate ?? 1.0,\n tracesSampleRate: c.env.SENTRY_CONFIG?.tracesSampleRate ?? 0.1,\n beforeSend(event, _hint) {\n // Filter out expected errors to reduce noise\n if (\n event.exception?.values?.[0]?.value?.includes('404') ||\n event.exception?.values?.[0]?.value?.includes('not found')\n ) {\n return null\n }\n return event\n },\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return sentryMiddleware(c as Context, next)\n } else {\n // Skip Sentry when telemetry is disabled\n return next()\n }\n}\n", "// src/index.ts\nimport { Toucan } from \"toucan-js\";\nvar MockContext = class {\n passThroughOnException() {\n throw new Error(\"Method not implemented.\");\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async waitUntil(promise) {\n await promise;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props;\n};\nvar sentry = (options, callback) => {\n return async (c, next) => {\n let hasExecutionContext = true;\n try {\n c.executionCtx;\n } catch {\n hasExecutionContext = false;\n }\n const sentry2 = new Toucan({\n dsn: c.env?.SENTRY_DSN ?? c.env?.NEXT_PUBLIC_SENTRY_DSN,\n requestDataOptions: {\n allowedHeaders: [\"user-agent\"],\n allowedSearchParams: /(.*)/\n },\n request: c.req.raw,\n context: hasExecutionContext ? c.executionCtx : new MockContext(),\n ...options\n });\n c.set(\"sentry\", sentry2);\n if (callback) {\n callback(sentry2);\n }\n await next();\n if (c.error) {\n sentry2.captureException(c.error);\n }\n };\n};\nvar getSentry = (c) => {\n return c.get(\"sentry\");\n};\nexport {\n getSentry,\n sentry\n};\n", "import { GLOBAL_OBJ, isError, isPlainObject, extractExceptionKeysForMessage, normalizeToSize, addExceptionTypeValue, addExceptionMechanism, isInstanceOf, truncate, resolvedSyncPromise, createStackParser, nodeStackLineParser, basename, rejectedSyncPromise, stackParserFromStackParserOptions } from '@sentry/utils';\nimport { defineIntegration as defineIntegration$1, ServerRuntimeClient, createTransport, Scope, getIntegrationsToSetup } from '@sentry/core';\nexport { dedupeIntegration, extraErrorDataIntegration, rewriteFramesIntegration, sessionTimingIntegration } from '@sentry/core';\n\nfunction isObject(value) {\n return typeof value === 'object' && value !== null;\n}\nfunction isMechanism(value) {\n return (isObject(value) &&\n 'handled' in value &&\n typeof value.handled === 'boolean' &&\n 'type' in value &&\n typeof value.type === 'string');\n}\nfunction containsMechanism(value) {\n return (isObject(value) && 'mechanism' in value && isMechanism(value['mechanism']));\n}\n/**\n * Tries to find release in a global\n */\nfunction getSentryRelease() {\n // Most of the plugins from https://docs.sentry.io/platforms/javascript/sourcemaps/uploading/ inject SENTRY_RELEASE global to the bundle\n if (GLOBAL_OBJ.SENTRY_RELEASE && GLOBAL_OBJ.SENTRY_RELEASE.id) {\n return GLOBAL_OBJ.SENTRY_RELEASE.id;\n }\n}\n/**\n * Creates an entry on existing object and returns it, or creates a new object with the entry if it doesn't exist.\n *\n * @param target\n * @param entry\n * @returns Object with new entry.\n */\nfunction setOnOptional(target, entry) {\n if (target !== undefined) {\n target[entry[0]] = entry[1];\n return target;\n }\n else {\n return { [entry[0]]: entry[1] };\n }\n}\n\n/**\n * Extracts stack frames from the error.stack string\n */\nfunction parseStackFrames(stackParser, error) {\n return stackParser(error.stack || '', 1);\n}\n/**\n * There are cases where stacktrace.message is an Event object\n * https://github.com/getsentry/sentry-javascript/issues/1949\n * In this specific case we try to extract stacktrace.message.error.message\n */\nfunction extractMessage(ex) {\n const message = ex && ex.message;\n if (!message) {\n return 'No error message';\n }\n if (message.error && typeof message.error.message === 'string') {\n return message.error.message;\n }\n return message;\n}\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nfunction exceptionFromError(stackParser, error) {\n const exception = {\n type: error.name || error.constructor.name,\n value: extractMessage(error),\n };\n const frames = parseStackFrames(stackParser, error);\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n if (exception.type === undefined && exception.value === '') {\n exception.value = 'Unrecoverable error caught';\n }\n return exception;\n}\n/**\n * Builds and Event from a Exception\n */\nfunction eventFromUnknownInput(sdk, stackParser, exception, hint) {\n let ex;\n const providedMechanism = hint && hint.data && containsMechanism(hint.data)\n ? hint.data.mechanism\n : undefined;\n const mechanism = providedMechanism ?? {\n handled: true,\n type: 'generic',\n };\n if (!isError(exception)) {\n if (isPlainObject(exception)) {\n // This will allow us to group events based on top-level keys\n // which is much better than creating new group when any key/value change\n const message = `Non-Error exception captured with keys: ${extractExceptionKeysForMessage(exception)}`;\n const client = sdk?.getClient();\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n sdk?.setExtra('__serialized__', normalizeToSize(exception, normalizeDepth));\n ex = (hint && hint.syntheticException) || new Error(message);\n ex.message = message;\n }\n else {\n // This handles when someone does: `throw \"something awesome\";`\n // We use synthesized Error here so we can extract a (rough) stack trace.\n ex = (hint && hint.syntheticException) || new Error(exception);\n ex.message = exception;\n }\n mechanism.synthetic = true;\n }\n else {\n ex = exception;\n }\n const event = {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, mechanism);\n return {\n ...event,\n event_id: hint && hint.event_id,\n };\n}\n/**\n * Builds and Event from a Message\n */\nfunction eventFromMessage(stackParser, message, level = 'info', hint, attachStacktrace) {\n const event = {\n event_id: hint && hint.event_id,\n level,\n message,\n };\n if (attachStacktrace && hint && hint.syntheticException) {\n const frames = parseStackFrames(stackParser, hint.syntheticException);\n if (frames.length) {\n event.exception = {\n values: [\n {\n value: message,\n stacktrace: { frames },\n },\n ],\n };\n }\n }\n return event;\n}\n\nconst DEFAULT_LIMIT$1 = 5;\nconst linkedErrorsIntegration = defineIntegration$1((options = { limit: DEFAULT_LIMIT$1 }) => {\n return {\n name: 'LinkedErrors',\n processEvent: (event, hint, client) => {\n return handler(client.getOptions().stackParser, options.limit, event, hint);\n },\n };\n});\nfunction handler(parser, limit, event, hint) {\n if (!event.exception ||\n !event.exception.values ||\n !hint ||\n !isInstanceOf(hint.originalException, Error)) {\n return event;\n }\n const linkedErrors = walkErrorTree(parser, limit, hint.originalException);\n event.exception.values = [...linkedErrors, ...event.exception.values];\n return event;\n}\nfunction walkErrorTree(parser, limit, error, stack = []) {\n if (!isInstanceOf(error.cause, Error) || stack.length + 1 >= limit) {\n return stack;\n }\n const exception = exceptionFromError(parser, error.cause);\n return walkErrorTree(parser, limit, error.cause, [\n exception,\n ...stack,\n ]);\n}\n\nconst defaultRequestDataOptions = {\n allowedHeaders: ['CF-RAY', 'CF-Worker'],\n};\nconst requestDataIntegration = defineIntegration$1((userOptions = {}) => {\n const options = { ...defaultRequestDataOptions, ...userOptions };\n return {\n name: 'RequestData',\n preprocessEvent: (event) => {\n const { sdkProcessingMetadata } = event;\n if (!sdkProcessingMetadata) {\n return event;\n }\n if ('request' in sdkProcessingMetadata &&\n sdkProcessingMetadata.request instanceof Request) {\n event.request = toEventRequest(sdkProcessingMetadata.request, options);\n event.user = toEventUser(event.user ?? {}, sdkProcessingMetadata.request, options);\n }\n if ('requestData' in sdkProcessingMetadata) {\n if (event.request) {\n event.request.data = sdkProcessingMetadata.requestData;\n }\n else {\n event.request = {\n data: sdkProcessingMetadata.requestData,\n };\n }\n }\n return event;\n },\n };\n});\n/**\n * Applies allowlists on existing user object.\n *\n * @param user\n * @param request\n * @param options\n * @returns New copy of user\n */\nfunction toEventUser(user, request, options) {\n const ip_address = request.headers.get('CF-Connecting-IP');\n const { allowedIps } = options;\n const newUser = { ...user };\n if (!('ip_address' in user) && // If ip_address is already set from explicitly called setUser, we don't want to overwrite it\n ip_address &&\n allowedIps !== undefined &&\n testAllowlist(ip_address, allowedIps)) {\n newUser.ip_address = ip_address;\n }\n return Object.keys(newUser).length > 0 ? newUser : undefined;\n}\n/**\n * Converts data from fetch event's Request to Sentry Request used in Sentry Event\n *\n * @param request Native Request object\n * @param options Integration options\n * @returns Sentry Request object\n */\nfunction toEventRequest(request, options) {\n // Build cookies\n const cookieString = request.headers.get('cookie');\n let cookies = undefined;\n if (cookieString) {\n try {\n cookies = parseCookie(cookieString);\n }\n catch (e) {\n // Cookie string failed to parse, no need to do anything\n }\n }\n const headers = {};\n // Build headers (omit cookie header, because we used it in the previous step)\n for (const [k, v] of request.headers.entries()) {\n if (k !== 'cookie') {\n headers[k] = v;\n }\n }\n const eventRequest = {\n method: request.method,\n cookies,\n headers,\n };\n try {\n const url = new URL(request.url);\n eventRequest.url = `${url.protocol}//${url.hostname}${url.pathname}`;\n eventRequest.query_string = url.search;\n }\n catch (e) {\n // `new URL` failed, let's try to split URL the primitive way\n const qi = request.url.indexOf('?');\n if (qi < 0) {\n // no query string\n eventRequest.url = request.url;\n }\n else {\n eventRequest.url = request.url.substr(0, qi);\n eventRequest.query_string = request.url.substr(qi + 1);\n }\n }\n // Let's try to remove sensitive data from incoming Request\n const { allowedHeaders, allowedCookies, allowedSearchParams } = options;\n if (allowedHeaders !== undefined && eventRequest.headers) {\n eventRequest.headers = applyAllowlistToObject(eventRequest.headers, allowedHeaders);\n if (Object.keys(eventRequest.headers).length === 0) {\n delete eventRequest.headers;\n }\n }\n else {\n delete eventRequest.headers;\n }\n if (allowedCookies !== undefined && eventRequest.cookies) {\n eventRequest.cookies = applyAllowlistToObject(eventRequest.cookies, allowedCookies);\n if (Object.keys(eventRequest.cookies).length === 0) {\n delete eventRequest.cookies;\n }\n }\n else {\n delete eventRequest.cookies;\n }\n if (allowedSearchParams !== undefined) {\n const params = Object.fromEntries(new URLSearchParams(eventRequest.query_string));\n const allowedParams = new URLSearchParams();\n Object.keys(applyAllowlistToObject(params, allowedSearchParams)).forEach((allowedKey) => {\n allowedParams.set(allowedKey, params[allowedKey]);\n });\n eventRequest.query_string = allowedParams.toString();\n }\n else {\n delete eventRequest.query_string;\n }\n return eventRequest;\n}\n/**\n * Helper function that tests 'allowlist' on string.\n *\n * @param target\n * @param allowlist\n * @returns True if target is allowed.\n */\nfunction testAllowlist(target, allowlist) {\n if (typeof allowlist === 'boolean') {\n return allowlist;\n }\n else if (allowlist instanceof RegExp) {\n return allowlist.test(target);\n }\n else if (Array.isArray(allowlist)) {\n const allowlistLowercased = allowlist.map((item) => item.toLowerCase());\n return allowlistLowercased.includes(target);\n }\n else {\n return false;\n }\n}\n/**\n * Helper function that applies 'allowlist' to target's entries.\n *\n * @param target\n * @param allowlist\n * @returns New object with allowed keys.\n */\nfunction applyAllowlistToObject(target, allowlist) {\n let predicate = () => false;\n if (typeof allowlist === 'boolean') {\n return allowlist ? target : {};\n }\n else if (allowlist instanceof RegExp) {\n predicate = (item) => allowlist.test(item);\n }\n else if (Array.isArray(allowlist)) {\n const allowlistLowercased = allowlist.map((item) => item.toLowerCase());\n predicate = (item) => allowlistLowercased.includes(item.toLowerCase());\n }\n else {\n return {};\n }\n return Object.keys(target)\n .filter(predicate)\n .reduce((allowed, key) => {\n allowed[key] = target[key];\n return allowed;\n }, {});\n}\n/**\n * Converts cookie string to an object.\n *\n * @param cookieString\n * @returns Object of cookie entries, or empty object if something went wrong during the conversion.\n */\nfunction parseCookie(cookieString) {\n if (typeof cookieString !== 'string') {\n return {};\n }\n try {\n return cookieString\n .split(';')\n .map((part) => part.split('='))\n .reduce((acc, [cookieKey, cookieValue]) => {\n acc[decodeURIComponent(cookieKey.trim())] = decodeURIComponent(cookieValue.trim());\n return acc;\n }, {});\n }\n catch {\n return {};\n }\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n *\n * Inlined from https://github.com/getsentry/sentry-javascript/blob/develop/packages/core/src/integration.ts#L165\n */\nfunction defineIntegration(fn) {\n return fn;\n}\n\n// Adapted from: https://github.com/getsentry/sentry-javascript/blob/develop/packages/core/src/integrations/zoderrors.ts\nconst INTEGRATION_NAME = 'ZodErrors';\nconst DEFAULT_LIMIT = 10;\nfunction originalExceptionIsZodError(originalException) {\n return (isError(originalException) &&\n originalException.name === 'ZodError' &&\n Array.isArray(originalException.issues));\n}\n/**\n * Formats child objects or arrays to a string\n * that is preserved when sent to Sentry.\n *\n * Without this, we end up with something like this in Sentry:\n *\n * [\n * [Object],\n * [Object],\n * [Object],\n * [Object]\n * ]\n */\nfunction flattenIssue(issue) {\n return {\n ...issue,\n path: 'path' in issue && Array.isArray(issue.path)\n ? issue.path.join('.')\n : undefined,\n keys: 'keys' in issue ? JSON.stringify(issue.keys) : undefined,\n unionErrors: 'unionErrors' in issue ? JSON.stringify(issue.unionErrors) : undefined,\n };\n}\n/**\n * Takes ZodError issue path array and returns a flattened version as a string.\n * This makes it easier to display paths within a Sentry error message.\n *\n * Array indexes are normalized to reduce duplicate entries\n *\n * @param path ZodError issue path\n * @returns flattened path\n *\n * @example\n * flattenIssuePath([0, 'foo', 1, 'bar']) // -> '<array>.foo.<array>.bar'\n */\nfunction flattenIssuePath(path) {\n return path\n .map((p) => {\n if (typeof p === 'number') {\n return '<array>';\n }\n else {\n return p;\n }\n })\n .join('.');\n}\n/**\n * Zod error message is a stringified version of ZodError.issues\n * This doesn't display well in the Sentry UI. Replace it with something shorter.\n */\nfunction formatIssueMessage(zodError) {\n const errorKeyMap = new Set();\n for (const iss of zodError.issues) {\n const issuePath = flattenIssuePath(iss.path);\n if (issuePath.length > 0) {\n errorKeyMap.add(issuePath);\n }\n }\n const errorKeys = Array.from(errorKeyMap);\n if (errorKeys.length === 0) {\n // If there are no keys, then we're likely validating the root\n // variable rather than a key within an object. This attempts\n // to extract what type it was that failed to validate.\n // For example, z.string().parse(123) would return \"string\" here.\n let rootExpectedType = 'variable';\n if (zodError.issues.length > 0) {\n const iss = zodError.issues[0];\n if (iss !== undefined &&\n 'expected' in iss &&\n typeof iss.expected === 'string') {\n rootExpectedType = iss.expected;\n }\n }\n return `Failed to validate ${rootExpectedType}`;\n }\n return `Failed to validate keys: ${truncate(errorKeys.join(', '), 100)}`;\n}\n/**\n * Applies ZodError issues to an event extra and replaces the error message\n */\nfunction applyZodErrorsToEvent(limit, event, saveAttachments = false, hint) {\n if (!event.exception?.values ||\n !hint.originalException ||\n !originalExceptionIsZodError(hint.originalException) ||\n hint.originalException.issues.length === 0) {\n return event;\n }\n try {\n const issuesToFlatten = saveAttachments\n ? hint.originalException.issues\n : hint.originalException.issues.slice(0, limit);\n const flattenedIssues = issuesToFlatten.map(flattenIssue);\n if (saveAttachments) {\n // Sometimes having the full error details can be helpful.\n // Attachments have much higher limits, so we can include the full list of issues.\n if (!Array.isArray(hint.attachments)) {\n hint.attachments = [];\n }\n hint.attachments.push({\n filename: 'zod_issues.json',\n data: JSON.stringify({\n issues: flattenedIssues,\n }),\n });\n }\n return {\n ...event,\n exception: {\n ...event.exception,\n values: [\n {\n ...event.exception.values[0],\n value: formatIssueMessage(hint.originalException),\n },\n ...event.exception.values.slice(1),\n ],\n },\n extra: {\n ...event.extra,\n 'zoderror.issues': flattenedIssues.slice(0, limit),\n },\n };\n }\n catch (e) {\n // Hopefully we never throw errors here, but record it\n // with the event just in case.\n return {\n ...event,\n extra: {\n ...event.extra,\n 'zoderrors sentry integration parse error': {\n message: 'an exception was thrown while processing ZodError within applyZodErrorsToEvent()',\n error: e instanceof Error\n ? `${e.name}: ${e.message}\\n${e.stack}`\n : 'unknown',\n },\n },\n };\n }\n}\n/**\n * Sentry integration to process Zod errors, making them easier to work with in Sentry.\n */\nconst zodErrorsIntegration = defineIntegration((options = {}) => {\n const limit = options.limit ?? DEFAULT_LIMIT;\n return {\n name: INTEGRATION_NAME,\n processEvent(originalEvent, hint) {\n const processedEvent = applyZodErrorsToEvent(limit, originalEvent, options.saveAttachments, hint);\n return processedEvent;\n },\n };\n});\n\n/**\n * Installs integrations on the current scope.\n *\n * @param integrations array of integration instances\n */\nfunction setupIntegrations(integrations, sdk) {\n const integrationIndex = {};\n integrations.forEach((integration) => {\n integrationIndex[integration.name] = integration;\n // `setupOnce` is only called the first time\n if (typeof integration.setupOnce === 'function') {\n integration.setupOnce();\n }\n const client = sdk.getClient();\n if (!client) {\n return;\n }\n // `setup` is run for each client\n if (typeof integration.setup === 'function') {\n integration.setup(client);\n }\n if (typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration);\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n if (typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration);\n const processor = Object.assign((event, hint) => callback(event, hint, client), {\n id: integration.name,\n });\n client.addEventProcessor(processor);\n }\n });\n return integrationIndex;\n}\n\n/**\n * The Cloudflare Workers SDK Client.\n */\nclass ToucanClient extends ServerRuntimeClient {\n /**\n * Some functions need to access the scope (Toucan instance) this client is bound to,\n * but calling 'getCurrentHub()' is unsafe because it uses globals.\n * So we store a reference to the Hub after binding to it and provide it to methods that need it.\n */\n #sdk = null;\n #integrationsInitialized = false;\n /**\n * Creates a new Toucan SDK instance.\n * @param options Configuration options for this SDK.\n */\n constructor(options) {\n options._metadata = options._metadata || {};\n options._metadata.sdk = options._metadata.sdk || {\n name: 'toucan-js',\n packages: [\n {\n name: 'npm:' + 'toucan-js',\n version: '4.1.1',\n },\n ],\n version: '4.1.1',\n };\n super(options);\n }\n /**\n * By default, integrations are stored in a global. We want to store them in a local instance because they may have contextual data, such as event request.\n */\n setupIntegrations() {\n if (this._isEnabled() && !this.#integrationsInitialized && this.#sdk) {\n this._integrations = setupIntegrations(this._options.integrations, this.#sdk);\n this.#integrationsInitialized = true;\n }\n }\n eventFromException(exception, hint) {\n return resolvedSyncPromise(eventFromUnknownInput(this.#sdk, this._options.stackParser, exception, hint));\n }\n eventFromMessage(message, level = 'info', hint) {\n return resolvedSyncPromise(eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace));\n }\n _prepareEvent(event, hint, scope) {\n event.platform = event.platform || 'javascript';\n if (this.getOptions().request) {\n // Set 'request' on sdkProcessingMetadata to be later processed by RequestData integration\n event.sdkProcessingMetadata = setOnOptional(event.sdkProcessingMetadata, [\n 'request',\n this.getOptions().request,\n ]);\n }\n if (this.getOptions().requestData) {\n // Set 'requestData' on sdkProcessingMetadata to be later processed by RequestData integration\n event.sdkProcessingMetadata = setOnOptional(event.sdkProcessingMetadata, [\n 'requestData',\n this.getOptions().requestData,\n ]);\n }\n return super._prepareEvent(event, hint, scope);\n }\n getSdk() {\n return this.#sdk;\n }\n setSdk(sdk) {\n this.#sdk = sdk;\n }\n /**\n * Sets the request body context on all future events.\n *\n * @param body Request body.\n * @example\n * const body = await request.text();\n * toucan.setRequestBody(body);\n */\n setRequestBody(body) {\n this.getOptions().requestData = body;\n }\n /**\n * Enable/disable the SDK.\n *\n * @param enabled\n */\n setEnabled(enabled) {\n this.getOptions().enabled = enabled;\n }\n}\n\n/**\n * Stack line parser for Cloudflare Workers.\n * This wraps node stack parser and adjusts root paths to match with source maps.\n *\n */\nfunction workersStackLineParser(getModule) {\n const [arg1, arg2] = nodeStackLineParser(getModule);\n const fn = (line) => {\n const result = arg2(line);\n if (result) {\n const filename = result.filename;\n // Workers runtime runs a single bundled file that is always in a virtual root\n result.abs_path =\n filename !== undefined && !filename.startsWith('/')\n ? `/${filename}`\n : filename;\n // There is no way to tell what code is in_app and what comes from dependencies (node_modules), since we have one bundled file.\n // So everything is in_app, unless an error comes from runtime function (ie. JSON.parse), which is determined by the presence of filename.\n result.in_app = filename !== undefined;\n }\n return result;\n };\n return [arg1, fn];\n}\n/**\n * Gets the module from filename.\n *\n * @param filename\n * @returns Module name\n */\nfunction getModule(filename) {\n if (!filename) {\n return;\n }\n // In Cloudflare Workers there is always only one bundled file\n return basename(filename, '.js');\n}\n/** Cloudflare Workers stack parser */\nconst defaultStackParser = createStackParser(workersStackLineParser(getModule));\n\n/**\n * Creates a Transport that uses native fetch. This transport automatically extends the Workers lifetime with 'waitUntil'.\n */\nfunction makeFetchTransport(options) {\n function makeRequest({ body, }) {\n try {\n const fetchFn = options.fetcher ?? fetch;\n const request = fetchFn(options.url, {\n method: 'POST',\n headers: options.headers,\n body,\n }).then((response) => {\n return {\n statusCode: response.status,\n headers: {\n 'retry-after': response.headers.get('Retry-After'),\n 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),\n },\n };\n });\n /**\n * Call waitUntil to extend Workers Event lifetime\n */\n if (options.context) {\n options.context.waitUntil(request);\n }\n return request;\n }\n catch (e) {\n return rejectedSyncPromise(e);\n }\n }\n return createTransport(options, makeRequest);\n}\n\n/**\n * The Cloudflare Workers SDK.\n */\nclass Toucan extends Scope {\n #options;\n constructor(options) {\n super();\n options.defaultIntegrations =\n options.defaultIntegrations === false\n ? []\n : [\n ...(Array.isArray(options.defaultIntegrations)\n ? options.defaultIntegrations\n : [\n requestDataIntegration(options.requestDataOptions),\n linkedErrorsIntegration(),\n zodErrorsIntegration(),\n ]),\n ];\n if (options.release === undefined) {\n const detectedRelease = getSentryRelease();\n if (detectedRelease !== undefined) {\n options.release = detectedRelease;\n }\n }\n this.#options = options;\n this.attachNewClient();\n }\n /**\n * Creates new ToucanClient and links it to this instance.\n */\n attachNewClient() {\n const client = new ToucanClient({\n ...this.#options,\n transport: makeFetchTransport,\n integrations: getIntegrationsToSetup(this.#options),\n stackParser: stackParserFromStackParserOptions(this.#options.stackParser || defaultStackParser),\n transportOptions: {\n ...this.#options.transportOptions,\n context: this.#options.context,\n },\n });\n this.setClient(client);\n client.setSdk(this);\n client.setupIntegrations();\n }\n /**\n * Sets the request body context on all future events.\n *\n * @param body Request body.\n * @example\n * const body = await request.text();\n * toucan.setRequestBody(body);\n */\n setRequestBody(body) {\n this.getClient()?.setRequestBody(body);\n }\n /**\n * Enable/disable the SDK.\n *\n * @param enabled\n */\n setEnabled(enabled) {\n this.getClient()?.setEnabled(enabled);\n }\n /**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\n captureCheckIn(checkIn, monitorConfig, scope) {\n if (checkIn.status === 'in_progress') {\n this.setContext('monitor', { slug: checkIn.monitorSlug });\n }\n const client = this.getClient();\n return client.captureCheckIn(checkIn, monitorConfig, scope);\n }\n /**\n * Add a breadcrumb to the current scope.\n */\n addBreadcrumb(breadcrumb, maxBreadcrumbs = 100) {\n const client = this.getClient();\n const max = client.getOptions().maxBreadcrumbs || maxBreadcrumbs;\n return super.addBreadcrumb(breadcrumb, max);\n }\n /**\n * Clone all data from this instance into a new Toucan instance.\n *\n * @override\n * @returns New Toucan instance.\n */\n clone() {\n // Create new scope using the same options\n const toucan = new Toucan({ ...this.#options });\n // And copy all the scope data\n toucan._breadcrumbs = [...this._breadcrumbs];\n toucan._tags = { ...this._tags };\n toucan._extra = { ...this._extra };\n toucan._contexts = { ...this._contexts };\n toucan._user = this._user;\n toucan._level = this._level;\n toucan._session = this._session;\n toucan._transactionName = this._transactionName;\n toucan._fingerprint = this._fingerprint;\n toucan._eventProcessors = [...this._eventProcessors];\n toucan._requestSession = this._requestSession;\n toucan._attachments = [...this._attachments];\n toucan._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n toucan._propagationContext = { ...this._propagationContext };\n toucan._lastEventId = this._lastEventId;\n return toucan;\n }\n /**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\n withScope(callback) {\n const toucan = this.clone();\n return callback(toucan);\n }\n}\n\nexport { Toucan, linkedErrorsIntegration, requestDataIntegration, zodErrorsIntegration };\n", "export { applyAggregateErrorsToEvent } from './aggregate-errors.js';\nexport { flatten } from './array.js';\nexport { getComponentName, getDomElement, getLocationHref, htmlTreeAsString } from './browser.js';\nexport { dsnFromString, dsnToString, makeDsn } from './dsn.js';\nexport { SentryError } from './error.js';\nexport { GLOBAL_OBJ, getGlobalSingleton } from './worldwide.js';\nexport { addConsoleInstrumentationHandler } from './instrument/console.js';\nexport { addFetchInstrumentationHandler } from './instrument/fetch.js';\nexport { addGlobalErrorInstrumentationHandler } from './instrument/globalError.js';\nexport { addGlobalUnhandledRejectionInstrumentationHandler } from './instrument/globalUnhandledRejection.js';\nexport { addHandler, maybeInstrument, resetInstrumentationHandlers, triggerHandlers } from './instrument/handlers.js';\nexport { isDOMError, isDOMException, isElement, isError, isErrorEvent, isEvent, isInstanceOf, isParameterizedString, isPlainObject, isPrimitive, isRegExp, isString, isSyntheticEvent, isThenable, isVueViewModel } from './is.js';\nexport { isBrowser } from './isBrowser.js';\nexport { CONSOLE_LEVELS, consoleSandbox, logger, originalConsoleMethods } from './logger.js';\nexport { memoBuilder } from './memo.js';\nexport { addContextToFrame, addExceptionMechanism, addExceptionTypeValue, arrayify, checkOrSetAlreadyCaught, getEventDescription, parseSemver, uuid4 } from './misc.js';\nexport { dynamicRequire, isNodeEnv, loadModule } from './node.js';\nexport { normalize, normalizeToSize, normalizeUrlToBase } from './normalize.js';\nexport { addNonEnumerableProperty, convertToPlainObject, dropUndefinedKeys, extractExceptionKeysForMessage, fill, getOriginalFunction, markFunctionWrapped, objectify, urlEncode } from './object.js';\nexport { basename, dirname, isAbsolute, join, normalizePath, relative, resolve } from './path.js';\nexport { makePromiseBuffer } from './promisebuffer.js';\nexport { DEFAULT_USER_INCLUDES, addRequestDataToEvent, extractPathForTransaction, extractRequestData, winterCGHeadersToDict, winterCGRequestToRequestData } from './requestdata.js';\nexport { severityLevelFromString, validSeverityLevels } from './severity.js';\nexport { UNKNOWN_FUNCTION, createStackParser, getFramesFromEvent, getFunctionName, stackParserFromStackParserOptions, stripSentryFramesAndReverse } from './stacktrace.js';\nexport { filenameIsInApp, node, nodeStackLineParser } from './node-stack-trace.js';\nexport { isMatchingPattern, safeJoin, snipLine, stringMatchesSomePattern, truncate } from './string.js';\nexport { isNativeFunction, supportsDOMError, supportsDOMException, supportsErrorEvent, supportsFetch, supportsNativeFetch, supportsReferrerPolicy, supportsReportingObserver } from './supports.js';\nexport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise.js';\nexport { _browserPerformanceTimeOriginMode, browserPerformanceTimeOrigin, dateTimestampInSeconds, timestampInSeconds } from './time.js';\nexport { TRACEPARENT_REGEXP, extractTraceparentData, generateSentryTraceHeader, propagationContextFromHeaders } from './tracing.js';\nexport { getSDKSource, isBrowserBundle } from './env.js';\nexport { addItemToEnvelope, createAttachmentEnvelopeItem, createEnvelope, createEventEnvelopeHeaders, createSpanEnvelopeItem, envelopeContainsItemType, envelopeItemTypeToDataCategory, forEachEnvelopeItem, getSdkMetadataForEnvelopeHeader, parseEnvelope, serializeEnvelope } from './envelope.js';\nexport { createClientReportEnvelope } from './clientreport.js';\nexport { DEFAULT_RETRY_AFTER, disabledUntil, isRateLimited, parseRetryAfterHeader, updateRateLimits } from './ratelimit.js';\nexport { BAGGAGE_HEADER_NAME, MAX_BAGGAGE_STRING_LENGTH, SENTRY_BAGGAGE_KEY_PREFIX, SENTRY_BAGGAGE_KEY_PREFIX_REGEX, baggageHeaderToDynamicSamplingContext, dynamicSamplingContextToSentryBaggageHeader, parseBaggageHeader } from './baggage.js';\nexport { getNumberOfUrlSegments, getSanitizedUrlString, parseUrl, stripUrlQueryAndFragment } from './url.js';\nexport { makeFifoCache } from './cache.js';\nexport { eventFromMessage, eventFromUnknownInput, exceptionFromError, parseStackFrames } from './eventbuilder.js';\nexport { callFrameToStackFrame, watchdogTimer } from './anr.js';\nexport { LRUMap } from './lru.js';\nexport { _asyncNullishCoalesce } from './buildPolyfills/_asyncNullishCoalesce.js';\nexport { _asyncOptionalChain } from './buildPolyfills/_asyncOptionalChain.js';\nexport { _asyncOptionalChainDelete } from './buildPolyfills/_asyncOptionalChainDelete.js';\nexport { _nullishCoalesce } from './buildPolyfills/_nullishCoalesce.js';\nexport { _optionalChain } from './buildPolyfills/_optionalChain.js';\nexport { _optionalChainDelete } from './buildPolyfills/_optionalChainDelete.js';\nexport { generatePropagationContext } from './propagationContext.js';\nexport { SDK_VERSION } from './version.js';\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex.js';\nexport { supportsHistory } from './vendor/supportsHistory.js';\n//# sourceMappingURL=index.js.map\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { ParameterizedString, PolymorphicEvent, Primitive } from '@sentry/types';\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nconst objectToString = Object.prototype.toString;\n\n/**\n * Checks whether given value's type is one of a few Error or Error-like\n * {@link isError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isError(wat: unknown): wat is Error {\n switch (objectToString.call(wat)) {\n case '[object Error]':\n case '[object Exception]':\n case '[object DOMException]':\n return true;\n default:\n return isInstanceOf(wat, Error);\n }\n}\n/**\n * Checks whether given value is an instance of the given built-in class.\n *\n * @param wat The value to be checked\n * @param className\n * @returns A boolean representing the result.\n */\nfunction isBuiltin(wat: unknown, className: string): boolean {\n return objectToString.call(wat) === `[object ${className}]`;\n}\n\n/**\n * Checks whether given value's type is ErrorEvent\n * {@link isErrorEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isErrorEvent(wat: unknown): boolean {\n return isBuiltin(wat, 'ErrorEvent');\n}\n\n/**\n * Checks whether given value's type is DOMError\n * {@link isDOMError}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMError(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMError');\n}\n\n/**\n * Checks whether given value's type is DOMException\n * {@link isDOMException}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isDOMException(wat: unknown): boolean {\n return isBuiltin(wat, 'DOMException');\n}\n\n/**\n * Checks whether given value's type is a string\n * {@link isString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isString(wat: unknown): wat is string {\n return isBuiltin(wat, 'String');\n}\n\n/**\n * Checks whether given string is parameterized\n * {@link isParameterizedString}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isParameterizedString(wat: unknown): wat is ParameterizedString {\n return (\n typeof wat === 'object' &&\n wat !== null &&\n '__sentry_template_string__' in wat &&\n '__sentry_template_values__' in wat\n );\n}\n\n/**\n * Checks whether given value is a primitive (undefined, null, number, boolean, string, bigint, symbol)\n * {@link isPrimitive}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPrimitive(wat: unknown): wat is Primitive {\n return wat === null || isParameterizedString(wat) || (typeof wat !== 'object' && typeof wat !== 'function');\n}\n\n/**\n * Checks whether given value's type is an object literal, or a class instance.\n * {@link isPlainObject}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isPlainObject(wat: unknown): wat is Record<string, unknown> {\n return isBuiltin(wat, 'Object');\n}\n\n/**\n * Checks whether given value's type is an Event instance\n * {@link isEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isEvent(wat: unknown): wat is PolymorphicEvent {\n return typeof Event !== 'undefined' && isInstanceOf(wat, Event);\n}\n\n/**\n * Checks whether given value's type is an Element instance\n * {@link isElement}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isElement(wat: unknown): boolean {\n return typeof Element !== 'undefined' && isInstanceOf(wat, Element);\n}\n\n/**\n * Checks whether given value's type is an regexp\n * {@link isRegExp}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isRegExp(wat: unknown): wat is RegExp {\n return isBuiltin(wat, 'RegExp');\n}\n\n/**\n * Checks whether given value has a then function.\n * @param wat A value to be checked.\n */\nexport function isThenable(wat: any): wat is PromiseLike<any> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n return Boolean(wat && wat.then && typeof wat.then === 'function');\n}\n\n/**\n * Checks whether given value's type is a SyntheticEvent\n * {@link isSyntheticEvent}.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isSyntheticEvent(wat: unknown): boolean {\n return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat;\n}\n\n/**\n * Checks whether given value's type is an instance of provided constructor.\n * {@link isInstanceOf}.\n *\n * @param wat A value to be checked.\n * @param base A constructor to be used in a check.\n * @returns A boolean representing the result.\n */\nexport function isInstanceOf(wat: any, base: any): boolean {\n try {\n return wat instanceof base;\n } catch (_e) {\n return false;\n }\n}\n\ninterface VueViewModel {\n // Vue3\n __isVue?: boolean;\n // Vue2\n _isVue?: boolean;\n}\n/**\n * Checks whether given value's type is a Vue ViewModel.\n *\n * @param wat A value to be checked.\n * @returns A boolean representing the result.\n */\nexport function isVueViewModel(wat: unknown): boolean {\n // Not using Object.prototype.toString because in Vue 3 it would read the instance's Symbol(Symbol.toStringTag) property.\n return !!(typeof wat === 'object' && wat !== null && ((wat as VueViewModel).__isVue || (wat as VueViewModel)._isVue));\n}\n", "import { isRegExp, isString, isVueViewModel } from './is';\n\nexport { escapeStringForRegex } from './vendor/escapeStringForRegex';\n\n/**\n * Truncates given string to the maximum characters count\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string (0 = unlimited)\n * @returns string Encoded\n */\nexport function truncate(str: string, max: number = 0): string {\n if (typeof str !== 'string' || max === 0) {\n return str;\n }\n return str.length <= max ? str : `${str.slice(0, max)}...`;\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nexport function snipLine(line: string, colno: number): string {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += ' {snip}';\n }\n\n return newLine;\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns Joined values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function safeJoin(input: any[], delimiter?: string): string {\n if (!Array.isArray(input)) {\n return '';\n }\n\n const output = [];\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n try {\n // This is a hack to fix a Vue3-specific bug that causes an infinite loop of\n // console warnings. This happens when a Vue template is rendered with\n // an undeclared variable, which we try to stringify, ultimately causing\n // Vue to issue another warning which repeats indefinitely.\n // see: https://github.com/getsentry/sentry-javascript/pull/8981\n if (isVueViewModel(value)) {\n output.push('[VueViewModel]');\n } else {\n output.push(String(value));\n }\n } catch (e) {\n output.push('[value cannot be serialized]');\n }\n }\n\n return output.join(delimiter);\n}\n\n/**\n * Checks if the given value matches a regex or string\n *\n * @param value The string to test\n * @param pattern Either a regex or a string against which `value` will be matched\n * @param requireExactStringMatch If true, `value` must match `pattern` exactly. If false, `value` will match\n * `pattern` if it contains `pattern`. Only applies to string-type patterns.\n */\nexport function isMatchingPattern(\n value: string,\n pattern: RegExp | string,\n requireExactStringMatch: boolean = false,\n): boolean {\n if (!isString(value)) {\n return false;\n }\n\n if (isRegExp(pattern)) {\n return pattern.test(value);\n }\n if (isString(pattern)) {\n return requireExactStringMatch ? value === pattern : value.includes(pattern);\n }\n\n return false;\n}\n\n/**\n * Test the given string against an array of strings and regexes. By default, string matching is done on a\n * substring-inclusion basis rather than a strict equality basis\n *\n * @param testString The string to test\n * @param patterns The patterns against which to test the string\n * @param requireExactStringMatch If true, `testString` must match one of the given string patterns exactly in order to\n * count. If false, `testString` will match a string pattern if it contains that pattern.\n * @returns\n */\nexport function stringMatchesSomePattern(\n testString: string,\n patterns: Array<string | RegExp> = [],\n requireExactStringMatch: boolean = false,\n): boolean {\n return patterns.some(pattern => isMatchingPattern(testString, pattern, requireExactStringMatch));\n}\n", "export const SDK_VERSION = '8.9.2';\n", "/**\n * NOTE: In order to avoid circular dependencies, if you add a function to this module and it needs to print something,\n * you must either a) use `console.log` rather than the logger, or b) put your function elsewhere.\n *\n * Note: This file was originally called `global.ts`, but was changed to unblock users which might be doing\n * string replaces with bundlers like Vite for `global` (would break imports that rely on importing from utils/src/global).\n *\n * Why worldwide?\n *\n * Why not?\n */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { Client, MetricsAggregator, Scope } from '@sentry/types';\n\nimport type { SdkSource } from './env';\nimport { SDK_VERSION } from './version';\n\ninterface SentryCarrier {\n acs?: any;\n stack?: any;\n\n globalScope?: Scope;\n defaultIsolationScope?: Scope;\n defaultCurrentScope?: Scope;\n globalMetricsAggregators: WeakMap<Client, MetricsAggregator> | undefined;\n\n /** Overwrites TextEncoder used in `@sentry/utils`, need for `react-native@0.73` and older */\n encodePolyfill?: (input: string) => Uint8Array;\n /** Overwrites TextDecoder used in `@sentry/utils`, need for `react-native@0.73` and older */\n decodePolyfill?: (input: Uint8Array) => string;\n}\n\n// TODO(v9): Clean up or remove this type\ntype BackwardsCompatibleSentryCarrier = SentryCarrier & {\n // pre-v7 hub (replaced by .stack)\n hub: any;\n integrations?: any[];\n logger: any;\n extensions?: {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n};\n\n/** Internal global with common properties and Sentry extensions */\nexport type InternalGlobal = {\n navigator?: { userAgent?: string };\n console: Console;\n Sentry?: any;\n onerror?: {\n (event: object | string, source?: string, lineno?: number, colno?: number, error?: Error): any;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n onunhandledrejection?: {\n (event: unknown): boolean;\n __SENTRY_INSTRUMENTED__?: true;\n __SENTRY_LOADER__?: true;\n };\n SENTRY_ENVIRONMENT?: string;\n SENTRY_DSN?: string;\n SENTRY_RELEASE?: {\n id?: string;\n };\n SENTRY_SDK_SOURCE?: SdkSource;\n /**\n * Debug IDs are indirectly injected by Sentry CLI or bundler plugins to directly reference a particular source map\n * for resolving of a source file. The injected code will place an entry into the record for each loaded bundle/JS\n * file.\n */\n _sentryDebugIds?: Record<string, string>;\n __SENTRY__: Record<Exclude<string, 'version'>, SentryCarrier> & {\n version?: string;\n } & BackwardsCompatibleSentryCarrier;\n /**\n * Raw module metadata that is injected by bundler plugins.\n *\n * Keys are `error.stack` strings, values are the metadata.\n */\n _sentryModuleMetadata?: Record<string, any>;\n _sentryEsmLoaderHookRegistered?: boolean;\n};\n\n/** Get's the global object for the current JavaScript runtime */\nexport const GLOBAL_OBJ = globalThis as unknown as InternalGlobal;\n\n/**\n * Returns a global singleton contained in the global `__SENTRY__[]` object.\n *\n * If the singleton doesn't already exist in `__SENTRY__`, it will be created using the given factory\n * function and added to the `__SENTRY__` object.\n *\n * @param name name of the global singleton on __SENTRY__\n * @param creator creator Factory function to create the singleton if it doesn't already exist on `__SENTRY__`\n * @param obj (Optional) The global object on which to look for `__SENTRY__`, if not `GLOBAL_OBJ`'s return value\n * @returns the singleton\n */\nexport function getGlobalSingleton<T>(name: keyof SentryCarrier, creator: () => T, obj?: unknown): T {\n const gbl = (obj || GLOBAL_OBJ) as InternalGlobal;\n const __SENTRY__ = (gbl.__SENTRY__ = gbl.__SENTRY__ || {});\n const versionedCarrier = (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n return versionedCarrier[name] || (versionedCarrier[name] = creator());\n}\n", "import { isString } from './is';\nimport { GLOBAL_OBJ } from './worldwide';\n\nconst WINDOW = GLOBAL_OBJ as unknown as Window;\n\nconst DEFAULT_MAX_STRING_LENGTH = 80;\n\ntype SimpleNode = {\n parentNode: SimpleNode;\n} | null;\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nexport function htmlTreeAsString(\n elem: unknown,\n options: string[] | { keyAttrs?: string[]; maxStringLength?: number } = {},\n): string {\n if (!elem) {\n return '<unknown>';\n }\n\n // try/catch both:\n // - accessing event.target (see getsentry/raven-js#838, #768)\n // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n // - can throw an exception in some circumstances.\n try {\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n const out = [];\n let height = 0;\n let len = 0;\n const separator = ' > ';\n const sepLength = separator.length;\n let nextStr;\n const keyAttrs = Array.isArray(options) ? options : options.keyAttrs;\n const maxStringLength = (!Array.isArray(options) && options.maxStringLength) || DEFAULT_MAX_STRING_LENGTH;\n\n while (currentElem && height++ < MAX_TRAVERSE_HEIGHT) {\n nextStr = _htmlElementAsString(currentElem, keyAttrs);\n // bail out if\n // - nextStr is the 'html' element\n // - the length of the string that would be created exceeds maxStringLength\n // (ignore this limit if we are on the first iteration)\n if (nextStr === 'html' || (height > 1 && len + out.length * sepLength + nextStr.length >= maxStringLength)) {\n break;\n }\n\n out.push(nextStr);\n\n len += nextStr.length;\n currentElem = currentElem.parentNode;\n }\n\n return out.reverse().join(separator);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @returns generated DOM path\n */\nfunction _htmlElementAsString(el: unknown, keyAttrs?: string[]): string {\n const elem = el as {\n tagName?: string;\n id?: string;\n className?: string;\n getAttribute(key: string): string;\n };\n\n const out = [];\n let className;\n let classes;\n let key;\n let attr;\n let i;\n\n if (!elem || !elem.tagName) {\n return '';\n }\n\n // @ts-expect-error WINDOW has HTMLElement\n if (WINDOW.HTMLElement) {\n // If using the component name annotation plugin, this value may be available on the DOM node\n if (elem instanceof HTMLElement && elem.dataset) {\n if (elem.dataset['sentryComponent']) {\n return elem.dataset['sentryComponent'];\n }\n if (elem.dataset['sentryElement']) {\n return elem.dataset['sentryElement'];\n }\n }\n }\n\n out.push(elem.tagName.toLowerCase());\n\n // Pairs of attribute keys defined in `serializeAttribute` and their values on element.\n const keyAttrPairs =\n keyAttrs && keyAttrs.length\n ? keyAttrs.filter(keyAttr => elem.getAttribute(keyAttr)).map(keyAttr => [keyAttr, elem.getAttribute(keyAttr)])\n : null;\n\n if (keyAttrPairs && keyAttrPairs.length) {\n keyAttrPairs.forEach(keyAttrPair => {\n out.push(`[${keyAttrPair[0]}=\"${keyAttrPair[1]}\"]`);\n });\n } else {\n if (elem.id) {\n out.push(`#${elem.id}`);\n }\n\n className = elem.className;\n if (className && isString(className)) {\n classes = className.split(/\\s+/);\n for (i = 0; i < classes.length; i++) {\n out.push(`.${classes[i]}`);\n }\n }\n }\n const allowedAttrs = ['aria-label', 'type', 'name', 'title', 'alt'];\n for (i = 0; i < allowedAttrs.length; i++) {\n key = allowedAttrs[i];\n attr = elem.getAttribute(key);\n if (attr) {\n out.push(`[${key}=\"${attr}\"]`);\n }\n }\n return out.join('');\n}\n\n/**\n * A safe form of location.href\n */\nexport function getLocationHref(): string {\n try {\n return WINDOW.document.location.href;\n } catch (oO) {\n return '';\n }\n}\n\n/**\n * Gets a DOM element by using document.querySelector.\n *\n * This wrapper will first check for the existance of the function before\n * actually calling it so that we don't have to take care of this check,\n * every time we want to access the DOM.\n *\n * Reason: DOM/querySelector is not available in all environments.\n *\n * We have to cast to any because utils can be consumed by a variety of environments,\n * and we don't want to break TS users. If you know what element will be selected by\n * `document.querySelector`, specify it as part of the generic call. For example,\n * `const element = getDomElement<Element>('selector');`\n *\n * @param selector the selector string passed on to document.querySelector\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getDomElement<E = any>(selector: string): E | null {\n if (WINDOW.document && WINDOW.document.querySelector) {\n return WINDOW.document.querySelector(selector) as unknown as E;\n }\n return null;\n}\n\n/**\n * Given a DOM element, traverses up the tree until it finds the first ancestor node\n * that has the `data-sentry-component` or `data-sentry-element` attribute with `data-sentry-component` taking\n * precendence. This attribute is added at build-time by projects that have the component name annotation plugin installed.\n *\n * @returns a string representation of the component for the provided DOM element, or `null` if not found\n */\nexport function getComponentName(elem: unknown): string | null {\n // @ts-expect-error WINDOW has HTMLElement\n if (!WINDOW.HTMLElement) {\n return null;\n }\n\n let currentElem = elem as SimpleNode;\n const MAX_TRAVERSE_HEIGHT = 5;\n for (let i = 0; i < MAX_TRAVERSE_HEIGHT; i++) {\n if (!currentElem) {\n return null;\n }\n\n if (currentElem instanceof HTMLElement) {\n if (currentElem.dataset['sentryComponent']) {\n return currentElem.dataset['sentryComponent'];\n }\n if (currentElem.dataset['sentryElement']) {\n return currentElem.dataset['sentryElement'];\n }\n }\n\n currentElem = currentElem.parentNode;\n }\n\n return null;\n}\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import type { ConsoleLevel } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/** Prefix for logging strings */\nconst PREFIX = 'Sentry Logger ';\n\nexport const CONSOLE_LEVELS: readonly ConsoleLevel[] = [\n 'debug',\n 'info',\n 'warn',\n 'error',\n 'log',\n 'assert',\n 'trace',\n] as const;\n\ntype LoggerMethod = (...args: unknown[]) => void;\ntype LoggerConsoleMethods = Record<ConsoleLevel, LoggerMethod>;\n\n/** This may be mutated by the console instrumentation. */\nexport const originalConsoleMethods: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key in ConsoleLevel]?: (...args: any[]) => void;\n} = {};\n\n/** JSDoc */\ninterface Logger extends LoggerConsoleMethods {\n disable(): void;\n enable(): void;\n isEnabled(): boolean;\n}\n\n/**\n * Temporarily disable sentry console instrumentations.\n *\n * @param callback The function to run against the original `console` messages\n * @returns The results of the callback\n */\nexport function consoleSandbox<T>(callback: () => T): T {\n if (!('console' in GLOBAL_OBJ)) {\n return callback();\n }\n\n const console = GLOBAL_OBJ.console as Console;\n const wrappedFuncs: Partial<LoggerConsoleMethods> = {};\n\n const wrappedLevels = Object.keys(originalConsoleMethods) as ConsoleLevel[];\n\n // Restore all wrapped console methods\n wrappedLevels.forEach(level => {\n const originalConsoleMethod = originalConsoleMethods[level] as LoggerMethod;\n wrappedFuncs[level] = console[level] as LoggerMethod | undefined;\n console[level] = originalConsoleMethod;\n });\n\n try {\n return callback();\n } finally {\n // Revert restoration to wrapped state\n wrappedLevels.forEach(level => {\n console[level] = wrappedFuncs[level] as LoggerMethod;\n });\n }\n}\n\nfunction makeLogger(): Logger {\n let enabled = false;\n const logger: Partial<Logger> = {\n enable: () => {\n enabled = true;\n },\n disable: () => {\n enabled = false;\n },\n isEnabled: () => enabled,\n };\n\n if (DEBUG_BUILD) {\n CONSOLE_LEVELS.forEach(name => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n logger[name] = (...args: any[]) => {\n if (enabled) {\n consoleSandbox(() => {\n GLOBAL_OBJ.console[name](`${PREFIX}[${name}]:`, ...args);\n });\n }\n };\n });\n } else {\n CONSOLE_LEVELS.forEach(name => {\n logger[name] = () => undefined;\n });\n }\n\n return logger as Logger;\n}\n\nexport const logger = makeLogger();\n", "import type { DsnComponents, DsnLike, DsnProtocol } from '@sentry/types';\n\nimport { DEBUG_BUILD } from './debug-build';\nimport { consoleSandbox, logger } from './logger';\n\n/** Regular expression used to parse a Dsn. */\nconst DSN_REGEX = /^(?:(\\w+):)\\/\\/(?:(\\w+)(?::(\\w+)?)?@)([\\w.-]+)(?::(\\d+))?\\/(.+)/;\n\nfunction isValidProtocol(protocol?: string): protocol is DsnProtocol {\n return protocol === 'http' || protocol === 'https';\n}\n\n/**\n * Renders the string representation of this Dsn.\n *\n * By default, this will render the public representation without the password\n * component. To get the deprecated private representation, set `withPassword`\n * to true.\n *\n * @param withPassword When set to true, the password will be included.\n */\nexport function dsnToString(dsn: DsnComponents, withPassword: boolean = false): string {\n const { host, path, pass, port, projectId, protocol, publicKey } = dsn;\n return (\n `${protocol}://${publicKey}${withPassword && pass ? `:${pass}` : ''}` +\n `@${host}${port ? `:${port}` : ''}/${path ? `${path}/` : path}${projectId}`\n );\n}\n\n/**\n * Parses a Dsn from a given string.\n *\n * @param str A Dsn as string\n * @returns Dsn as DsnComponents or undefined if @param str is not a valid DSN string\n */\nexport function dsnFromString(str: string): DsnComponents | undefined {\n const match = DSN_REGEX.exec(str);\n\n if (!match) {\n // This should be logged to the console\n consoleSandbox(() => {\n // eslint-disable-next-line no-console\n console.error(`Invalid Sentry Dsn: ${str}`);\n });\n return undefined;\n }\n\n const [protocol, publicKey, pass = '', host, port = '', lastPath] = match.slice(1);\n let path = '';\n let projectId = lastPath;\n\n const split = projectId.split('/');\n if (split.length > 1) {\n path = split.slice(0, -1).join('/');\n projectId = split.pop() as string;\n }\n\n if (projectId) {\n const projectMatch = projectId.match(/^\\d+/);\n if (projectMatch) {\n projectId = projectMatch[0];\n }\n }\n\n return dsnFromComponents({ host, pass, path, projectId, port, protocol: protocol as DsnProtocol, publicKey });\n}\n\nfunction dsnFromComponents(components: DsnComponents): DsnComponents {\n return {\n protocol: components.protocol,\n publicKey: components.publicKey || '',\n pass: components.pass || '',\n host: components.host,\n port: components.port || '',\n path: components.path || '',\n projectId: components.projectId,\n };\n}\n\nfunction validateDsn(dsn: DsnComponents): boolean {\n if (!DEBUG_BUILD) {\n return true;\n }\n\n const { port, projectId, protocol } = dsn;\n\n const requiredComponents: ReadonlyArray<keyof DsnComponents> = ['protocol', 'publicKey', 'host', 'projectId'];\n const hasMissingRequiredComponent = requiredComponents.find(component => {\n if (!dsn[component]) {\n logger.error(`Invalid Sentry Dsn: ${component} missing`);\n return true;\n }\n return false;\n });\n\n if (hasMissingRequiredComponent) {\n return false;\n }\n\n if (!projectId.match(/^\\d+$/)) {\n logger.error(`Invalid Sentry Dsn: Invalid projectId ${projectId}`);\n return false;\n }\n\n if (!isValidProtocol(protocol)) {\n logger.error(`Invalid Sentry Dsn: Invalid protocol ${protocol}`);\n return false;\n }\n\n if (port && isNaN(parseInt(port, 10))) {\n logger.error(`Invalid Sentry Dsn: Invalid port ${port}`);\n return false;\n }\n\n return true;\n}\n\n/**\n * Creates a valid Sentry Dsn object, identifying a Sentry instance and project.\n * @returns a valid DsnComponents object or `undefined` if @param from is an invalid DSN source\n */\nexport function makeDsn(from: DsnLike): DsnComponents | undefined {\n const components = typeof from === 'string' ? dsnFromString(from) : dsnFromComponents(from);\n if (!components || !validateDsn(components)) {\n return undefined;\n }\n return components;\n}\n", "import type { ConsoleLevel } from '@sentry/types';\n\n/** An error emitted by Sentry SDKs and related utilities. */\nexport class SentryError extends Error {\n /** Display name of this error instance. */\n public name: string;\n\n public logLevel: ConsoleLevel;\n\n public constructor(public message: string, logLevel: ConsoleLevel = 'warn') {\n super(message);\n\n this.name = new.target.prototype.constructor.name;\n // This sets the prototype to be `Error`, not `SentryError`. It's unclear why we do this, but commenting this line\n // out causes various (seemingly totally unrelated) playwright tests consistently time out. FYI, this makes\n // instances of `SentryError` fail `obj instanceof SentryError` checks.\n Object.setPrototypeOf(this, new.target.prototype);\n this.logLevel = logLevel;\n }\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { WrappedFunction } from '@sentry/types';\n\nimport { htmlTreeAsString } from './browser';\nimport { DEBUG_BUILD } from './debug-build';\nimport { isElement, isError, isEvent, isInstanceOf, isPlainObject, isPrimitive } from './is';\nimport { logger } from './logger';\nimport { truncate } from './string';\n\n/**\n * Replace a method in an object with a wrapped version of itself.\n *\n * @param source An object that contains a method to be wrapped.\n * @param name The name of the method to be wrapped.\n * @param replacementFactory A higher-order function that takes the original version of the given method and returns a\n * wrapped version. Note: The function returned by `replacementFactory` needs to be a non-arrow function, in order to\n * preserve the correct value of `this`, and the original method must be called using `origMethod.call(this, <other\n * args>)` or `origMethod.apply(this, [<other args>])` (rather than being called directly), again to preserve `this`.\n * @returns void\n */\nexport function fill(source: { [key: string]: any }, name: string, replacementFactory: (...args: any[]) => any): void {\n if (!(name in source)) {\n return;\n }\n\n const original = source[name] as () => any;\n const wrapped = replacementFactory(original) as WrappedFunction;\n\n // Make sure it's a function first, as we need to attach an empty prototype for `defineProperties` to work\n // otherwise it'll throw \"TypeError: Object.defineProperties called on non-object\"\n if (typeof wrapped === 'function') {\n markFunctionWrapped(wrapped, original);\n }\n\n source[name] = wrapped;\n}\n\n/**\n * Defines a non-enumerable property on the given object.\n *\n * @param obj The object on which to set the property\n * @param name The name of the property to be set\n * @param value The value to which to set the property\n */\nexport function addNonEnumerableProperty(obj: object, name: string, value: unknown): void {\n try {\n Object.defineProperty(obj, name, {\n // enumerable: false, // the default, so we can save on bundle size by not explicitly setting it\n value: value,\n writable: true,\n configurable: true,\n });\n } catch (o_O) {\n DEBUG_BUILD && logger.log(`Failed to add non-enumerable property \"${name}\" to object`, obj);\n }\n}\n\n/**\n * Remembers the original function on the wrapped function and\n * patches up the prototype.\n *\n * @param wrapped the wrapper function\n * @param original the original function that gets wrapped\n */\nexport function markFunctionWrapped(wrapped: WrappedFunction, original: WrappedFunction): void {\n try {\n const proto = original.prototype || {};\n wrapped.prototype = original.prototype = proto;\n addNonEnumerableProperty(wrapped, '__sentry_original__', original);\n } catch (o_O) {} // eslint-disable-line no-empty\n}\n\n/**\n * This extracts the original function if available. See\n * `markFunctionWrapped` for more information.\n *\n * @param func the function to unwrap\n * @returns the unwrapped version of the function if available.\n */\nexport function getOriginalFunction(func: WrappedFunction): WrappedFunction | undefined {\n return func.__sentry_original__;\n}\n\n/**\n * Encodes given object into url-friendly format\n *\n * @param object An object that contains serializable values\n * @returns string Encoded\n */\nexport function urlEncode(object: { [key: string]: any }): string {\n return Object.keys(object)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(object[key])}`)\n .join('&');\n}\n\n/**\n * Transforms any `Error` or `Event` into a plain object with all of their enumerable properties, and some of their\n * non-enumerable properties attached.\n *\n * @param value Initial source that we have to transform in order for it to be usable by the serializer\n * @returns An Event or Error turned into an object - or the value argurment itself, when value is neither an Event nor\n * an Error.\n */\nexport function convertToPlainObject<V>(\n value: V,\n):\n | {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n }\n | {\n [ownProps: string]: unknown;\n message: string;\n name: string;\n stack?: string;\n }\n | V {\n if (isError(value)) {\n return {\n message: value.message,\n name: value.name,\n stack: value.stack,\n ...getOwnProperties(value),\n };\n } else if (isEvent(value)) {\n const newObj: {\n [ownProps: string]: unknown;\n type: string;\n target: string;\n currentTarget: string;\n detail?: unknown;\n } = {\n type: value.type,\n target: serializeEventTarget(value.target),\n currentTarget: serializeEventTarget(value.currentTarget),\n ...getOwnProperties(value),\n };\n\n if (typeof CustomEvent !== 'undefined' && isInstanceOf(value, CustomEvent)) {\n newObj.detail = value.detail;\n }\n\n return newObj;\n } else {\n return value;\n }\n}\n\n/** Creates a string representation of the target of an `Event` object */\nfunction serializeEventTarget(target: unknown): string {\n try {\n return isElement(target) ? htmlTreeAsString(target) : Object.prototype.toString.call(target);\n } catch (_oO) {\n return '<unknown>';\n }\n}\n\n/** Filters out all but an object's own properties */\nfunction getOwnProperties(obj: unknown): { [key: string]: unknown } {\n if (typeof obj === 'object' && obj !== null) {\n const extractedProps: { [key: string]: unknown } = {};\n for (const property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n extractedProps[property] = (obj as Record<string, unknown>)[property];\n }\n }\n return extractedProps;\n } else {\n return {};\n }\n}\n\n/**\n * Given any captured exception, extract its keys and create a sorted\n * and truncated list that will be used inside the event message.\n * eg. `Non-error exception captured with keys: foo, bar, baz`\n */\nexport function extractExceptionKeysForMessage(exception: Record<string, unknown>, maxLength: number = 40): string {\n const keys = Object.keys(convertToPlainObject(exception));\n keys.sort();\n\n if (!keys.length) {\n return '[object has no keys]';\n }\n\n if (keys[0].length >= maxLength) {\n return truncate(keys[0], maxLength);\n }\n\n for (let includedKeys = keys.length; includedKeys > 0; includedKeys--) {\n const serialized = keys.slice(0, includedKeys).join(', ');\n if (serialized.length > maxLength) {\n continue;\n }\n if (includedKeys === keys.length) {\n return serialized;\n }\n return truncate(serialized, maxLength);\n }\n\n return '';\n}\n\n/**\n * Given any object, return a new object having removed all fields whose value was `undefined`.\n * Works recursively on objects and arrays.\n *\n * Attention: This function keeps circular references in the returned object.\n */\nexport function dropUndefinedKeys<T>(inputValue: T): T {\n // This map keeps track of what already visited nodes map to.\n // Our Set - based memoBuilder doesn't work here because we want to the output object to have the same circular\n // references as the input object.\n const memoizationMap = new Map<unknown, unknown>();\n\n // This function just proxies `_dropUndefinedKeys` to keep the `memoBuilder` out of this function's API\n return _dropUndefinedKeys(inputValue, memoizationMap);\n}\n\nfunction _dropUndefinedKeys<T>(inputValue: T, memoizationMap: Map<unknown, unknown>): T {\n if (isPojo(inputValue)) {\n // If this node has already been visited due to a circular reference, return the object it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: { [key: string]: any } = {};\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n for (const key of Object.keys(inputValue)) {\n if (typeof inputValue[key] !== 'undefined') {\n returnValue[key] = _dropUndefinedKeys(inputValue[key], memoizationMap);\n }\n }\n\n return returnValue as T;\n }\n\n if (Array.isArray(inputValue)) {\n // If this node has already been visited due to a circular reference, return the array it was mapped to in the new object\n const memoVal = memoizationMap.get(inputValue);\n if (memoVal !== undefined) {\n return memoVal as T;\n }\n\n const returnValue: unknown[] = [];\n // Store the mapping of this value in case we visit it again, in case of circular data\n memoizationMap.set(inputValue, returnValue);\n\n inputValue.forEach((item: unknown) => {\n returnValue.push(_dropUndefinedKeys(item, memoizationMap));\n });\n\n return returnValue as unknown as T;\n }\n\n return inputValue;\n}\n\nfunction isPojo(input: unknown): input is Record<string, unknown> {\n if (!isPlainObject(input)) {\n return false;\n }\n\n try {\n const name = (Object.getPrototypeOf(input) as { constructor: { name: string } }).constructor.name;\n return !name || name === 'Object';\n } catch {\n return true;\n }\n}\n\n/**\n * Ensure that something is an object.\n *\n * Turns `undefined` and `null` into `String`s and all other primitives into instances of their respective wrapper\n * classes (String, Boolean, Number, etc.). Acts as the identity function on non-primitives.\n *\n * @param wat The subject of the objectification\n * @returns A version of `wat` which can safely be used with `Object` class methods\n */\nexport function objectify(wat: unknown): typeof Object {\n let objectified;\n switch (true) {\n case wat === undefined || wat === null:\n objectified = new String(wat);\n break;\n\n // Though symbols and bigints do have wrapper classes (`Symbol` and `BigInt`, respectively), for whatever reason\n // those classes don't have constructors which can be used with the `new` keyword. We therefore need to cast each as\n // an object in order to wrap it.\n case typeof wat === 'symbol' || typeof wat === 'bigint':\n objectified = Object(wat);\n break;\n\n // this will catch the remaining primitives: `String`, `Number`, and `Boolean`\n case isPrimitive(wat):\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n objectified = new (wat as any).constructor(wat);\n break;\n\n // by process of elimination, at this point we know that `wat` must already be an object\n default:\n objectified = wat;\n break;\n }\n return objectified;\n}\n", "import type { Event, StackFrame, StackLineParser, StackParser } from '@sentry/types';\n\nconst STACKTRACE_FRAME_LIMIT = 50;\nexport const UNKNOWN_FUNCTION = '?';\n// Used to sanitize webpack (error: *) wrapped stack errors\nconst WEBPACK_ERROR_REGEXP = /\\(error: (.*)\\)/;\nconst STRIP_FRAME_REGEXP = /captureMessage|captureException/;\n\n/**\n * Creates a stack parser with the supplied line parsers\n *\n * StackFrames are returned in the correct order for Sentry Exception\n * frames and with Sentry SDK internal frames removed from the top and bottom\n *\n */\nexport function createStackParser(...parsers: StackLineParser[]): StackParser {\n const sortedParsers = parsers.sort((a, b) => a[0] - b[0]).map(p => p[1]);\n\n return (stack: string, skipFirstLines: number = 0, framesToPop: number = 0): StackFrame[] => {\n const frames: StackFrame[] = [];\n const lines = stack.split('\\n');\n\n for (let i = skipFirstLines; i < lines.length; i++) {\n const line = lines[i];\n // Ignore lines over 1kb as they are unlikely to be stack frames.\n // Many of the regular expressions use backtracking which results in run time that increases exponentially with\n // input size. Huge strings can result in hangs/Denial of Service:\n // https://github.com/getsentry/sentry-javascript/issues/2286\n if (line.length > 1024) {\n continue;\n }\n\n // https://github.com/getsentry/sentry-javascript/issues/5459\n // Remove webpack (error: *) wrappers\n const cleanedLine = WEBPACK_ERROR_REGEXP.test(line) ? line.replace(WEBPACK_ERROR_REGEXP, '$1') : line;\n\n // https://github.com/getsentry/sentry-javascript/issues/7813\n // Skip Error: lines\n if (cleanedLine.match(/\\S*Error: /)) {\n continue;\n }\n\n for (const parser of sortedParsers) {\n const frame = parser(cleanedLine);\n\n if (frame) {\n frames.push(frame);\n break;\n }\n }\n\n if (frames.length >= STACKTRACE_FRAME_LIMIT + framesToPop) {\n break;\n }\n }\n\n return stripSentryFramesAndReverse(frames.slice(framesToPop));\n };\n}\n\n/**\n * Gets a stack parser implementation from Options.stackParser\n * @see Options\n *\n * If options contains an array of line parsers, it is converted into a parser\n */\nexport function stackParserFromStackParserOptions(stackParser: StackParser | StackLineParser[]): StackParser {\n if (Array.isArray(stackParser)) {\n return createStackParser(...stackParser);\n }\n return stackParser;\n}\n\n/**\n * Removes Sentry frames from the top and bottom of the stack if present and enforces a limit of max number of frames.\n * Assumes stack input is ordered from top to bottom and returns the reverse representation so call site of the\n * function that caused the crash is the last frame in the array.\n * @hidden\n */\nexport function stripSentryFramesAndReverse(stack: ReadonlyArray<StackFrame>): StackFrame[] {\n if (!stack.length) {\n return [];\n }\n\n const localStack = Array.from(stack);\n\n // If stack starts with one of our API calls, remove it (starts, meaning it's the top of the stack - aka last call)\n if (/sentryWrapped/.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n\n // Reversing in the middle of the procedure allows us to just pop the values off the stack\n localStack.reverse();\n\n // If stack ends with one of our internal API calls, remove it (ends, meaning it's the bottom of the stack - aka top-most call)\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n\n // When using synthetic events, we will have a 2 levels deep stack, as `new Error('Sentry syntheticException')`\n // is produced within the hub itself, making it:\n //\n // Sentry.captureException()\n // getCurrentHub().captureException()\n //\n // instead of just the top `Sentry` call itself.\n // This forces us to possibly strip an additional frame in the exact same was as above.\n if (STRIP_FRAME_REGEXP.test(localStack[localStack.length - 1].function || '')) {\n localStack.pop();\n }\n }\n\n return localStack.slice(0, STACKTRACE_FRAME_LIMIT).map(frame => ({\n ...frame,\n filename: frame.filename || localStack[localStack.length - 1].filename,\n function: frame.function || UNKNOWN_FUNCTION,\n }));\n}\n\nconst defaultFunctionName = '<anonymous>';\n\n/**\n * Safely extract function name from itself\n */\nexport function getFunctionName(fn: unknown): string {\n try {\n if (!fn || typeof fn !== 'function') {\n return defaultFunctionName;\n }\n return fn.name || defaultFunctionName;\n } catch (e) {\n // Just accessing custom props in some Selenium environments\n // can cause a \"Permission denied\" exception (see raven-js#495).\n return defaultFunctionName;\n }\n}\n\n/**\n * Get's stack frames from an event without needing to check for undefined properties.\n */\nexport function getFramesFromEvent(event: Event): StackFrame[] | undefined {\n const exception = event.exception;\n\n if (exception) {\n const frames: StackFrame[] = [];\n try {\n // @ts-expect-error Object could be undefined\n exception.values.forEach(value => {\n // @ts-expect-error Value could be undefined\n if (value.stacktrace.frames) {\n // @ts-expect-error Value could be undefined\n frames.push(...value.stacktrace.frames);\n }\n });\n return frames;\n } catch (_oO) {\n return undefined;\n }\n }\n return undefined;\n}\n", "import { DEBUG_BUILD } from '../debug-build';\nimport { logger } from '../logger';\nimport { getFunctionName } from '../stacktrace';\n\nexport type InstrumentHandlerType = 'console' | 'dom' | 'fetch' | 'history' | 'xhr' | 'error' | 'unhandledrejection';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type InstrumentHandlerCallback = (data: any) => void;\n\n// We keep the handlers globally\nconst handlers: { [key in InstrumentHandlerType]?: InstrumentHandlerCallback[] } = {};\nconst instrumented: { [key in InstrumentHandlerType]?: boolean } = {};\n\n/** Add a handler function. */\nexport function addHandler(type: InstrumentHandlerType, handler: InstrumentHandlerCallback): void {\n handlers[type] = handlers[type] || [];\n (handlers[type] as InstrumentHandlerCallback[]).push(handler);\n}\n\n/**\n * Reset all instrumentation handlers.\n * This can be used by tests to ensure we have a clean slate of instrumentation handlers.\n */\nexport function resetInstrumentationHandlers(): void {\n Object.keys(handlers).forEach(key => {\n handlers[key as InstrumentHandlerType] = undefined;\n });\n}\n\n/** Maybe run an instrumentation function, unless it was already called. */\nexport function maybeInstrument(type: InstrumentHandlerType, instrumentFn: () => void): void {\n if (!instrumented[type]) {\n instrumentFn();\n instrumented[type] = true;\n }\n}\n\n/** Trigger handlers for a given instrumentation type. */\nexport function triggerHandlers(type: InstrumentHandlerType, data: unknown): void {\n const typeHandlers = type && handlers[type];\n if (!typeHandlers) {\n return;\n }\n\n for (const handler of typeHandlers) {\n try {\n handler(data);\n } catch (e) {\n DEBUG_BUILD &&\n logger.error(\n `Error while triggering instrumentation handler.\\nType: ${type}\\nName: ${getFunctionName(handler)}\\nError:`,\n e,\n );\n }\n }\n}\n", "import { GLOBAL_OBJ } from './worldwide';\n\nconst ONE_SECOND_IN_MS = 1000;\n\n/**\n * A partial definition of the [Performance Web API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Performance}\n * for accessing a high-resolution monotonic clock.\n */\ninterface Performance {\n /**\n * The millisecond timestamp at which measurement began, measured in Unix time.\n */\n timeOrigin: number;\n /**\n * Returns the current millisecond timestamp, where 0 represents the start of measurement.\n */\n now(): number;\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using the Date API.\n *\n * TODO(v8): Return type should be rounded.\n */\nexport function dateTimestampInSeconds(): number {\n return Date.now() / ONE_SECOND_IN_MS;\n}\n\n/**\n * Returns a wrapper around the native Performance API browser implementation, or undefined for browsers that do not\n * support the API.\n *\n * Wrapping the native API works around differences in behavior from different browsers.\n */\nfunction createUnixTimestampInSecondsFunc(): () => number {\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & { performance?: Performance };\n if (!performance || !performance.now) {\n return dateTimestampInSeconds;\n }\n\n // Some browser and environments don't have a timeOrigin, so we fallback to\n // using Date.now() to compute the starting time.\n const approxStartingTimeOrigin = Date.now() - performance.now();\n const timeOrigin = performance.timeOrigin == undefined ? approxStartingTimeOrigin : performance.timeOrigin;\n\n // performance.now() is a monotonic clock, which means it starts at 0 when the process begins. To get the current\n // wall clock time (actual UNIX timestamp), we need to add the starting time origin and the current time elapsed.\n //\n // TODO: This does not account for the case where the monotonic clock that powers performance.now() drifts from the\n // wall clock time, which causes the returned timestamp to be inaccurate. We should investigate how to detect and\n // correct for this.\n // See: https://github.com/getsentry/sentry-javascript/issues/2590\n // See: https://github.com/mdn/content/issues/4713\n // See: https://dev.to/noamr/when-a-millisecond-is-not-a-millisecond-3h6\n return () => {\n return (timeOrigin + performance.now()) / ONE_SECOND_IN_MS;\n };\n}\n\n/**\n * Returns a timestamp in seconds since the UNIX epoch using either the Performance or Date APIs, depending on the\n * availability of the Performance API.\n *\n * BUG: Note that because of how browsers implement the Performance API, the clock might stop when the computer is\n * asleep. This creates a skew between `dateTimestampInSeconds` and `timestampInSeconds`. The\n * skew can grow to arbitrary amounts like days, weeks or months.\n * See https://github.com/getsentry/sentry-javascript/issues/2590.\n */\nexport const timestampInSeconds = createUnixTimestampInSecondsFunc();\n\n/**\n * Internal helper to store what is the source of browserPerformanceTimeOrigin below. For debugging only.\n */\nexport let _browserPerformanceTimeOriginMode: string;\n\n/**\n * The number of milliseconds since the UNIX epoch. This value is only usable in a browser, and only when the\n * performance API is available.\n */\nexport const browserPerformanceTimeOrigin = ((): number | undefined => {\n // Unfortunately browsers may report an inaccurate time origin data, through either performance.timeOrigin or\n // performance.timing.navigationStart, which results in poor results in performance data. We only treat time origin\n // data as reliable if they are within a reasonable threshold of the current time.\n\n const { performance } = GLOBAL_OBJ as typeof GLOBAL_OBJ & Window;\n if (!performance || !performance.now) {\n _browserPerformanceTimeOriginMode = 'none';\n return undefined;\n }\n\n const threshold = 3600 * 1000;\n const performanceNow = performance.now();\n const dateNow = Date.now();\n\n // if timeOrigin isn't available set delta to threshold so it isn't used\n const timeOriginDelta = performance.timeOrigin\n ? Math.abs(performance.timeOrigin + performanceNow - dateNow)\n : threshold;\n const timeOriginIsReliable = timeOriginDelta < threshold;\n\n // While performance.timing.navigationStart is deprecated in favor of performance.timeOrigin, performance.timeOrigin\n // is not as widely supported. Namely, performance.timeOrigin is undefined in Safari as of writing.\n // Also as of writing, performance.timing is not available in Web Workers in mainstream browsers, so it is not always\n // a valid fallback. In the absence of an initial time provided by the browser, fallback to the current time from the\n // Date API.\n // eslint-disable-next-line deprecation/deprecation\n const navigationStart = performance.timing && performance.timing.navigationStart;\n const hasNavigationStart = typeof navigationStart === 'number';\n // if navigationStart isn't available set delta to threshold so it isn't used\n const navigationStartDelta = hasNavigationStart ? Math.abs(navigationStart + performanceNow - dateNow) : threshold;\n const navigationStartIsReliable = navigationStartDelta < threshold;\n\n if (timeOriginIsReliable || navigationStartIsReliable) {\n // Use the more reliable time origin\n if (timeOriginDelta <= navigationStartDelta) {\n _browserPerformanceTimeOriginMode = 'timeOrigin';\n return performance.timeOrigin;\n } else {\n _browserPerformanceTimeOriginMode = 'navigationStart';\n return navigationStart;\n }\n }\n\n // Either both timeOrigin and navigationStart are skewed or neither is available, fallback to Date.\n _browserPerformanceTimeOriginMode = 'dateNow';\n return dateNow;\n})();\n", "import type { HandlerDataError } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\nlet _oldOnErrorHandler: (typeof GLOBAL_OBJ)['onerror'] | null = null;\n\n/**\n * Add an instrumentation handler for when an error is captured by the global error handler.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalErrorInstrumentationHandler(handler: (data: HandlerDataError) => void): void {\n const type = 'error';\n addHandler(type, handler);\n maybeInstrument(type, instrumentError);\n}\n\nfunction instrumentError(): void {\n _oldOnErrorHandler = GLOBAL_OBJ.onerror;\n\n GLOBAL_OBJ.onerror = function (\n msg: string | object,\n url?: string,\n line?: number,\n column?: number,\n error?: Error,\n ): boolean {\n const handlerData: HandlerDataError = {\n column,\n error,\n line,\n msg,\n url,\n };\n triggerHandlers('error', handlerData);\n\n if (_oldOnErrorHandler && !_oldOnErrorHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnErrorHandler.apply(this, arguments);\n }\n\n return false;\n };\n\n GLOBAL_OBJ.onerror.__SENTRY_INSTRUMENTED__ = true;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { HandlerDataUnhandledRejection } from '@sentry/types';\n\nimport { GLOBAL_OBJ } from '../worldwide';\nimport { addHandler, maybeInstrument, triggerHandlers } from './handlers';\n\nlet _oldOnUnhandledRejectionHandler: (typeof GLOBAL_OBJ)['onunhandledrejection'] | null = null;\n\n/**\n * Add an instrumentation handler for when an unhandled promise rejection is captured.\n *\n * Use at your own risk, this might break without changelog notice, only used internally.\n * @hidden\n */\nexport function addGlobalUnhandledRejectionInstrumentationHandler(\n handler: (data: HandlerDataUnhandledRejection) => void,\n): void {\n const type = 'unhandledrejection';\n addHandler(type, handler);\n maybeInstrument(type, instrumentUnhandledRejection);\n}\n\nfunction instrumentUnhandledRejection(): void {\n _oldOnUnhandledRejectionHandler = GLOBAL_OBJ.onunhandledrejection;\n\n GLOBAL_OBJ.onunhandledrejection = function (e: any): boolean {\n const handlerData: HandlerDataUnhandledRejection = e;\n triggerHandlers('unhandledrejection', handlerData);\n\n if (_oldOnUnhandledRejectionHandler && !_oldOnUnhandledRejectionHandler.__SENTRY_LOADER__) {\n // eslint-disable-next-line prefer-rest-params\n return _oldOnUnhandledRejectionHandler.apply(this, arguments);\n }\n\n return true;\n };\n\n GLOBAL_OBJ.onunhandledrejection.__SENTRY_INSTRUMENTED__ = true;\n}\n", "/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type MemoFunc = [\n // memoize\n (obj: any) => boolean,\n // unmemoize\n (obj: any) => void,\n];\n\n/**\n * Helper to decycle json objects\n */\nexport function memoBuilder(): MemoFunc {\n const hasWeakSet = typeof WeakSet === 'function';\n const inner: any = hasWeakSet ? new WeakSet() : [];\n function memoize(obj: any): boolean {\n if (hasWeakSet) {\n if (inner.has(obj)) {\n return true;\n }\n inner.add(obj);\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < inner.length; i++) {\n const value = inner[i];\n if (value === obj) {\n return true;\n }\n }\n inner.push(obj);\n return false;\n }\n\n function unmemoize(obj: any): void {\n if (hasWeakSet) {\n inner.delete(obj);\n } else {\n for (let i = 0; i < inner.length; i++) {\n if (inner[i] === obj) {\n inner.splice(i, 1);\n break;\n }\n }\n }\n }\n return [memoize, unmemoize];\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Event, Exception, Mechanism, StackFrame } from '@sentry/types';\n\nimport { addNonEnumerableProperty } from './object';\nimport { snipLine } from './string';\nimport { GLOBAL_OBJ } from './worldwide';\n\ninterface CryptoInternal {\n getRandomValues(array: Uint8Array): Uint8Array;\n randomUUID?(): string;\n}\n\n/** An interface for common properties on global */\ninterface CryptoGlobal {\n msCrypto?: CryptoInternal;\n crypto?: CryptoInternal;\n}\n\n/**\n * UUID4 generator\n *\n * @returns string Generated UUID4.\n */\nexport function uuid4(): string {\n const gbl = GLOBAL_OBJ as typeof GLOBAL_OBJ & CryptoGlobal;\n const crypto = gbl.crypto || gbl.msCrypto;\n\n let getRandomByte = (): number => Math.random() * 16;\n try {\n if (crypto && crypto.randomUUID) {\n return crypto.randomUUID().replace(/-/g, '');\n }\n if (crypto && crypto.getRandomValues) {\n getRandomByte = () => {\n // crypto.getRandomValues might return undefined instead of the typed array\n // in old Chromium versions (e.g. 23.0.1235.0 (151422))\n // However, `typedArray` is still filled in-place.\n // @see https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#typedarray\n const typedArray = new Uint8Array(1);\n crypto.getRandomValues(typedArray);\n return typedArray[0];\n };\n }\n } catch (_) {\n // some runtimes can crash invoking crypto\n // https://github.com/getsentry/sentry-javascript/issues/8935\n }\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n // Concatenating the following numbers as strings results in '10000000100040008000100000000000'\n return (([1e7] as unknown as string) + 1e3 + 4e3 + 8e3 + 1e11).replace(/[018]/g, c =>\n // eslint-disable-next-line no-bitwise\n ((c as unknown as number) ^ ((getRandomByte() & 15) >> ((c as unknown as number) / 4))).toString(16),\n );\n}\n\nfunction getFirstException(event: Event): Exception | undefined {\n return event.exception && event.exception.values ? event.exception.values[0] : undefined;\n}\n\n/**\n * Extracts either message or type+value from an event that can be used for user-facing logs\n * @returns event's description\n */\nexport function getEventDescription(event: Event): string {\n const { message, event_id: eventId } = event;\n if (message) {\n return message;\n }\n\n const firstException = getFirstException(event);\n if (firstException) {\n if (firstException.type && firstException.value) {\n return `${firstException.type}: ${firstException.value}`;\n }\n return firstException.type || firstException.value || eventId || '<unknown>';\n }\n return eventId || '<unknown>';\n}\n\n/**\n * Adds exception values, type and value to an synthetic Exception.\n * @param event The event to modify.\n * @param value Value of the exception.\n * @param type Type of the exception.\n * @hidden\n */\nexport function addExceptionTypeValue(event: Event, value?: string, type?: string): void {\n const exception = (event.exception = event.exception || {});\n const values = (exception.values = exception.values || []);\n const firstException = (values[0] = values[0] || {});\n if (!firstException.value) {\n firstException.value = value || '';\n }\n if (!firstException.type) {\n firstException.type = type || 'Error';\n }\n}\n\n/**\n * Adds exception mechanism data to a given event. Uses defaults if the second parameter is not passed.\n *\n * @param event The event to modify.\n * @param newMechanism Mechanism data to add to the event.\n * @hidden\n */\nexport function addExceptionMechanism(event: Event, newMechanism?: Partial<Mechanism>): void {\n const firstException = getFirstException(event);\n if (!firstException) {\n return;\n }\n\n const defaultMechanism = { type: 'generic', handled: true };\n const currentMechanism = firstException.mechanism;\n firstException.mechanism = { ...defaultMechanism, ...currentMechanism, ...newMechanism };\n\n if (newMechanism && 'data' in newMechanism) {\n const mergedData = { ...(currentMechanism && currentMechanism.data), ...newMechanism.data };\n firstException.mechanism.data = mergedData;\n }\n}\n\n// https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string\nconst SEMVER_REGEXP =\n /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\n\n/**\n * Represents Semantic Versioning object\n */\ninterface SemVer {\n major?: number;\n minor?: number;\n patch?: number;\n prerelease?: string;\n buildmetadata?: string;\n}\n\n/**\n * Parses input into a SemVer interface\n * @param input string representation of a semver version\n */\nexport function parseSemver(input: string): SemVer {\n const match = input.match(SEMVER_REGEXP) || [];\n const major = parseInt(match[1], 10);\n const minor = parseInt(match[2], 10);\n const patch = parseInt(match[3], 10);\n return {\n buildmetadata: match[5],\n major: isNaN(major) ? undefined : major,\n minor: isNaN(minor) ? undefined : minor,\n patch: isNaN(patch) ? undefined : patch,\n prerelease: match[4],\n };\n}\n\n/**\n * This function adds context (pre/post/line) lines to the provided frame\n *\n * @param lines string[] containing all lines\n * @param frame StackFrame that will be mutated\n * @param linesOfContext number of context lines we want to add pre/post\n */\nexport function addContextToFrame(lines: string[], frame: StackFrame, linesOfContext: number = 5): void {\n // When there is no line number in the frame, attaching context is nonsensical and will even break grouping\n if (frame.lineno === undefined) {\n return;\n }\n\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line: string) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * Checks whether or not we've already captured the given exception (note: not an identical exception - the very object\n * in question), and marks it captured if not.\n *\n * This is useful because it's possible for an error to get captured by more than one mechanism. After we intercept and\n * record an error, we rethrow it (assuming we've intercepted it before it's reached the top-level global handlers), so\n * that we don't interfere with whatever effects the error might have had were the SDK not there. At that point, because\n * the error has been rethrown, it's possible for it to bubble up to some other code we've instrumented. If it's not\n * caught after that, it will bubble all the way up to the global handlers (which of course we also instrument). This\n * function helps us ensure that even if we encounter the same error more than once, we only record it the first time we\n * see it.\n *\n * Note: It will ignore primitives (always return `false` and not mark them as seen), as properties can't be set on\n * them. {@link: Object.objectify} can be used on exceptions to convert any that are primitives into their equivalent\n * object wrapper forms so that this check will always work. However, because we need to flag the exact object which\n * will get rethrown, and because that rethrowing happens outside of the event processing pipeline, the objectification\n * must be done before the exception captured.\n *\n * @param A thrown exception to check or flag as having been seen\n * @returns `true` if the exception has already been captured, `false` if not (with the side effect of marking it seen)\n */\nexport function checkOrSetAlreadyCaught(exception: unknown): boolean {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (exception && (exception as any).__sentry_captured__) {\n return true;\n }\n\n try {\n // set it this way rather than by assignment so that it's not ennumerable and therefore isn't recorded by the\n // `ExtraErrorData` integration\n addNonEnumerableProperty(exception as { [key: string]: unknown }, '__sentry_captured__', true);\n } catch (err) {\n // `exception` is a primitive, so we can't mark it seen\n }\n\n return false;\n}\n\n/**\n * Checks whether the given input is already an array, and if it isn't, wraps it in one.\n *\n * @param maybeArray Input to turn into an array, if necessary\n * @returns The input, if already an array, or an array with the input as the only element, if not\n */\nexport function arrayify<T = unknown>(maybeArray: T | T[]): T[] {\n return Array.isArray(maybeArray) ? maybeArray : [maybeArray];\n}\n", "import type { Primitive } from '@sentry/types';\n\nimport { isSyntheticEvent, isVueViewModel } from './is';\nimport type { MemoFunc } from './memo';\nimport { memoBuilder } from './memo';\nimport { convertToPlainObject } from './object';\nimport { getFunctionName } from './stacktrace';\n\ntype Prototype = { constructor: (...args: unknown[]) => unknown };\n// This is a hack to placate TS, relying on the fact that technically, arrays are objects with integer keys. Normally we\n// think of those keys as actual numbers, but `arr['0']` turns out to work just as well as `arr[0]`, and doing it this\n// way lets us use a single type in the places where behave as if we are only dealing with objects, even if some of them\n// might be arrays.\ntype ObjOrArray<T> = { [key: string]: T };\n\n/**\n * Recursively normalizes the given object.\n *\n * - Creates a copy to prevent original input mutation\n * - Skips non-enumerable properties\n * - When stringifying, calls `toJSON` if implemented\n * - Removes circular references\n * - Translates non-serializable values (`undefined`/`NaN`/functions) to serializable format\n * - Translates known global objects/classes to a string representations\n * - Takes care of `Error` object serialization\n * - Optionally limits depth of final output\n * - Optionally limits number of properties/elements included in any single object/array\n *\n * @param input The object to be normalized.\n * @param depth The max depth to which to normalize the object. (Anything deeper stringified whole.)\n * @param maxProperties The max number of elements or properties to be included in any single array or\n * object in the normallized output.\n * @returns A normalized version of the object, or `\"**non-serializable**\"` if any errors are thrown during normalization.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function normalize(input: unknown, depth: number = 100, maxProperties: number = +Infinity): any {\n try {\n // since we're at the outermost level, we don't provide a key\n return visit('', input, depth, maxProperties);\n } catch (err) {\n return { ERROR: `**non-serializable** (${err})` };\n }\n}\n\n/** JSDoc */\nexport function normalizeToSize<T>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n object: { [key: string]: any },\n // Default Node.js REPL depth\n depth: number = 3,\n // 100kB, as 200kB is max payload size, so half sounds reasonable\n maxSize: number = 100 * 1024,\n): T {\n const normalized = normalize(object, depth);\n\n if (jsonSize(normalized) > maxSize) {\n return normalizeToSize(object, depth - 1, maxSize);\n }\n\n return normalized as T;\n}\n\n/**\n * Visits a node to perform normalization on it\n *\n * @param key The key corresponding to the given node\n * @param value The node to be visited\n * @param depth Optional number indicating the maximum recursion depth\n * @param maxProperties Optional maximum number of properties/elements included in any single object/array\n * @param memo Optional Memo class handling decycling\n */\nfunction visit(\n key: string,\n value: unknown,\n depth: number = +Infinity,\n maxProperties: number = +Infinity,\n memo: MemoFunc = memoBuilder(),\n): Primitive | ObjOrArray<unknown> {\n const [memoize, unmemoize] = memo;\n\n // Get the simple cases out of the way first\n if (\n value == null || // this matches null and undefined -> eqeq not eqeqeq\n (['number', 'boolean', 'string'].includes(typeof value) && !Number.isNaN(value))\n ) {\n return value as Primitive;\n }\n\n const stringified = stringifyValue(key, value);\n\n // Anything we could potentially dig into more (objects or arrays) will have come back as `\"[object XXXX]\"`.\n // Everything else will have already been serialized, so if we don't see that pattern, we're done.\n if (!stringified.startsWith('[object ')) {\n return stringified;\n }\n\n // From here on, we can assert that `value` is either an object or an array.\n\n // Do not normalize objects that we know have already been normalized. As a general rule, the\n // \"__sentry_skip_normalization__\" property should only be used sparingly and only should only be set on objects that\n // have already been normalized.\n if ((value as ObjOrArray<unknown>)['__sentry_skip_normalization__']) {\n return value as ObjOrArray<unknown>;\n }\n\n // We can set `__sentry_override_normalization_depth__` on an object to ensure that from there\n // We keep a certain amount of depth.\n // This should be used sparingly, e.g. we use it for the redux integration to ensure we get a certain amount of state.\n const remainingDepth =\n typeof (value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] === 'number'\n ? ((value as ObjOrArray<unknown>)['__sentry_override_normalization_depth__'] as number)\n : depth;\n\n // We're also done if we've reached the max depth\n if (remainingDepth === 0) {\n // At this point we know `serialized` is a string of the form `\"[object XXXX]\"`. Clean it up so it's just `\"[XXXX]\"`.\n return stringified.replace('object ', '');\n }\n\n // If we've already visited this branch, bail out, as it's circular reference. If not, note that we're seeing it now.\n if (memoize(value)) {\n return '[Circular ~]';\n }\n\n // If the value has a `toJSON` method, we call it to extract more information\n const valueWithToJSON = value as unknown & { toJSON?: () => unknown };\n if (valueWithToJSON && typeof valueWithToJSON.toJSON === 'function') {\n try {\n const jsonValue = valueWithToJSON.toJSON();\n // We need to normalize the return value of `.toJSON()` in case it has circular references\n return visit('', jsonValue, remainingDepth - 1, maxProperties, memo);\n } catch (err) {\n // pass (The built-in `toJSON` failed, but we can still try to do it ourselves)\n }\n }\n\n // At this point we know we either have an object or an array, we haven't seen it before, and we're going to recurse\n // because we haven't yet reached the max depth. Create an accumulator to hold the results of visiting each\n // property/entry, and keep track of the number of items we add to it.\n const normalized = (Array.isArray(value) ? [] : {}) as ObjOrArray<unknown>;\n let numAdded = 0;\n\n // Before we begin, convert`Error` and`Event` instances into plain objects, since some of each of their relevant\n // properties are non-enumerable and otherwise would get missed.\n const visitable = convertToPlainObject(value as ObjOrArray<unknown>);\n\n for (const visitKey in visitable) {\n // Avoid iterating over fields in the prototype if they've somehow been exposed to enumeration.\n if (!Object.prototype.hasOwnProperty.call(visitable, visitKey)) {\n continue;\n }\n\n if (numAdded >= maxProperties) {\n normalized[visitKey] = '[MaxProperties ~]';\n break;\n }\n\n // Recursively visit all the child nodes\n const visitValue = visitable[visitKey];\n normalized[visitKey] = visit(visitKey, visitValue, remainingDepth - 1, maxProperties, memo);\n\n numAdded++;\n }\n\n // Once we've visited all the branches, remove the parent from memo storage\n unmemoize(value);\n\n // Return accumulated values\n return normalized;\n}\n\n/* eslint-disable complexity */\n/**\n * Stringify the given value. Handles various known special values and types.\n *\n * Not meant to be used on simple primitives which already have a string representation, as it will, for example, turn\n * the number 1231 into \"[Object Number]\", nor on `null`, as it will throw.\n *\n * @param value The value to stringify\n * @returns A stringified representation of the given value\n */\nfunction stringifyValue(\n key: unknown,\n // this type is a tiny bit of a cheat, since this function does handle NaN (which is technically a number), but for\n // our internal use, it'll do\n value: Exclude<unknown, string | number | boolean | null>,\n): string {\n try {\n if (key === 'domain' && value && typeof value === 'object' && (value as { _events: unknown })._events) {\n return '[Domain]';\n }\n\n if (key === 'domainEmitter') {\n return '[DomainEmitter]';\n }\n\n // It's safe to use `global`, `window`, and `document` here in this manner, as we are asserting using `typeof` first\n // which won't throw if they are not present.\n\n if (typeof global !== 'undefined' && value === global) {\n return '[Global]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof window !== 'undefined' && value === window) {\n return '[Window]';\n }\n\n // eslint-disable-next-line no-restricted-globals\n if (typeof document !== 'undefined' && value === document) {\n return '[Document]';\n }\n\n if (isVueViewModel(value)) {\n return '[VueViewModel]';\n }\n\n // React's SyntheticEvent thingy\n if (isSyntheticEvent(value)) {\n return '[SyntheticEvent]';\n }\n\n if (typeof value === 'number' && value !== value) {\n return '[NaN]';\n }\n\n if (typeof value === 'function') {\n return `[Function: ${getFunctionName(value)}]`;\n }\n\n if (typeof value === 'symbol') {\n return `[${String(value)}]`;\n }\n\n // stringified BigInts are indistinguishable from regular numbers, so we need to label them to avoid confusion\n if (typeof value === 'bigint') {\n return `[BigInt: ${String(value)}]`;\n }\n\n // Now that we've knocked out all the special cases and the primitives, all we have left are objects. Simply casting\n // them to strings means that instances of classes which haven't defined their `toStringTag` will just come out as\n // `\"[object Object]\"`. If we instead look at the constructor's name (which is the same as the name of the class),\n // we can make sure that only plain objects come out that way.\n const objName = getConstructorName(value);\n\n // Handle HTML Elements\n if (/^HTML(\\w*)Element$/.test(objName)) {\n return `[HTMLElement: ${objName}]`;\n }\n\n return `[object ${objName}]`;\n } catch (err) {\n return `**non-serializable** (${err})`;\n }\n}\n/* eslint-enable complexity */\n\nfunction getConstructorName(value: unknown): string {\n const prototype: Prototype | null = Object.getPrototypeOf(value);\n\n return prototype ? prototype.constructor.name : 'null prototype';\n}\n\n/** Calculates bytes size of input string */\nfunction utf8Length(value: string): number {\n // eslint-disable-next-line no-bitwise\n return ~-encodeURI(value).split(/%..|./).length;\n}\n\n/** Calculates bytes size of input object */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction jsonSize(value: any): number {\n return utf8Length(JSON.stringify(value));\n}\n\n/**\n * Normalizes URLs in exceptions and stacktraces to a base path so Sentry can fingerprint\n * across platforms and working directory.\n *\n * @param url The URL to be normalized.\n * @param basePath The application base path.\n * @returns The normalized URL.\n */\nexport function normalizeUrlToBase(url: string, basePath: string): string {\n const escapedBase = basePath\n // Backslash to forward\n .replace(/\\\\/g, '/')\n // Escape RegExp special characters\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n\n let newUrl = url;\n try {\n newUrl = decodeURI(url);\n } catch (_Oo) {\n // Sometime this breaks\n }\n return (\n newUrl\n .replace(/\\\\/g, '/')\n .replace(/webpack:\\/?/g, '') // Remove intermediate base path\n // eslint-disable-next-line @sentry-internal/sdk/no-regexp-constructor\n .replace(new RegExp(`(file://)?/*${escapedBase}/*`, 'ig'), 'app:///')\n );\n}\n", "// Slightly modified (no IE8 support, ES6) and transcribed to TypeScript\n// https://github.com/calvinmetcalf/rollup-plugin-node-builtins/blob/63ab8aacd013767445ca299e468d9a60a95328d7/src/es6/path.js\n//\n// Copyright Joyent, Inc.and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/** JSDoc */\nfunction normalizeArray(parts: string[], allowAboveRoot?: boolean): string[] {\n // if the path tries to go above the root, `up` ends up > 0\n let up = 0;\n for (let i = parts.length - 1; i >= 0; i--) {\n const last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nconst splitPathRe = /^(\\S+:\\\\|\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^/\\\\]+?|)(\\.[^./\\\\]*|))(?:[/\\\\]*)$/;\n/** JSDoc */\nfunction splitPath(filename: string): string[] {\n // Truncate files names greater than 1024 characters to avoid regex dos\n // https://github.com/getsentry/sentry-javascript/pull/8737#discussion_r1285719172\n const truncated = filename.length > 1024 ? `<truncated>${filename.slice(-1024)}` : filename;\n const parts = splitPathRe.exec(truncated);\n return parts ? parts.slice(1) : [];\n}\n\n// path.resolve([from ...], to)\n// posix version\n/** JSDoc */\nexport function resolve(...args: string[]): string {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n\n for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n const path = i >= 0 ? args[i] : '/';\n\n // Skip empty entries\n if (!path) {\n continue;\n }\n\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(\n resolvedPath.split('/').filter(p => !!p),\n !resolvedAbsolute,\n ).join('/');\n\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}\n\n/** JSDoc */\nfunction trim(arr: string[]): string[] {\n let start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') {\n break;\n }\n }\n\n let end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') {\n break;\n }\n }\n\n if (start > end) {\n return [];\n }\n return arr.slice(start, end - start + 1);\n}\n\n// path.relative(from, to)\n// posix version\n/** JSDoc */\nexport function relative(from: string, to: string): string {\n /* eslint-disable no-param-reassign */\n from = resolve(from).slice(1);\n to = resolve(to).slice(1);\n /* eslint-enable no-param-reassign */\n\n const fromParts = trim(from.split('/'));\n const toParts = trim(to.split('/'));\n\n const length = Math.min(fromParts.length, toParts.length);\n let samePartsLength = length;\n for (let i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n let outputParts = [];\n for (let i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n}\n\n// path.normalize(path)\n// posix version\n/** JSDoc */\nexport function normalizePath(path: string): string {\n const isPathAbsolute = isAbsolute(path);\n const trailingSlash = path.slice(-1) === '/';\n\n // Normalize the path\n let normalizedPath = normalizeArray(\n path.split('/').filter(p => !!p),\n !isPathAbsolute,\n ).join('/');\n\n if (!normalizedPath && !isPathAbsolute) {\n normalizedPath = '.';\n }\n if (normalizedPath && trailingSlash) {\n normalizedPath += '/';\n }\n\n return (isPathAbsolute ? '/' : '') + normalizedPath;\n}\n\n// posix version\n/** JSDoc */\nexport function isAbsolute(path: string): boolean {\n return path.charAt(0) === '/';\n}\n\n// posix version\n/** JSDoc */\nexport function join(...args: string[]): string {\n return normalizePath(args.join('/'));\n}\n\n/** JSDoc */\nexport function dirname(path: string): string {\n const result = splitPath(path);\n const root = result[0];\n let dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.slice(0, dir.length - 1);\n }\n\n return root + dir;\n}\n\n/** JSDoc */\nexport function basename(path: string, ext?: string): string {\n let f = splitPath(path)[2];\n if (ext && f.slice(ext.length * -1) === ext) {\n f = f.slice(0, f.length - ext.length);\n }\n return f;\n}\n", "/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { isThenable } from './is';\n\n/** SyncPromise internal states */\nconst enum States {\n /** Pending */\n PENDING = 0,\n /** Resolved / OK */\n RESOLVED = 1,\n /** Rejected / Error */\n REJECTED = 2,\n}\n\n// Overloads so we can call resolvedSyncPromise without arguments and generic argument\nexport function resolvedSyncPromise(): PromiseLike<void>;\nexport function resolvedSyncPromise<T>(value: T | PromiseLike<T>): PromiseLike<T>;\n\n/**\n * Creates a resolved sync promise.\n *\n * @param value the value to resolve the promise with\n * @returns the resolved sync promise\n */\nexport function resolvedSyncPromise<T>(value?: T | PromiseLike<T>): PromiseLike<T> {\n return new SyncPromise(resolve => {\n resolve(value);\n });\n}\n\n/**\n * Creates a rejected sync promise.\n *\n * @param value the value to reject the promise with\n * @returns the rejected sync promise\n */\nexport function rejectedSyncPromise<T = never>(reason?: any): PromiseLike<T> {\n return new SyncPromise((_, reject) => {\n reject(reason);\n });\n}\n\n/**\n * Thenable class that behaves like a Promise and follows it's interface\n * but is not async internally\n */\nclass SyncPromise<T> implements PromiseLike<T> {\n private _state: States;\n private _handlers: Array<[boolean, (value: T) => void, (reason: any) => any]>;\n private _value: any;\n\n public constructor(\n executor: (resolve: (value?: T | PromiseLike<T> | null) => void, reject: (reason?: any) => void) => void,\n ) {\n this._state = States.PENDING;\n this._handlers = [];\n\n try {\n executor(this._resolve, this._reject);\n } catch (e) {\n this._reject(e);\n }\n }\n\n /** JSDoc */\n public then<TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null,\n ): PromiseLike<TResult1 | TResult2> {\n return new SyncPromise((resolve, reject) => {\n this._handlers.push([\n false,\n result => {\n if (!onfulfilled) {\n // TODO: ¯\\_(ツ)_/¯\n // TODO: FIXME\n resolve(result as any);\n } else {\n try {\n resolve(onfulfilled(result));\n } catch (e) {\n reject(e);\n }\n }\n },\n reason => {\n if (!onrejected) {\n reject(reason);\n } else {\n try {\n resolve(onrejected(reason));\n } catch (e) {\n reject(e);\n }\n }\n },\n ]);\n this._executeHandlers();\n });\n }\n\n /** JSDoc */\n public catch<TResult = never>(\n onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null,\n ): PromiseLike<T | TResult> {\n return this.then(val => val, onrejected);\n }\n\n /** JSDoc */\n public finally<TResult>(onfinally?: (() => void) | null): PromiseLike<TResult> {\n return new SyncPromise<TResult>((resolve, reject) => {\n let val: TResult | any;\n let isRejected: boolean;\n\n return this.then(\n value => {\n isRejected = false;\n val = value;\n if (onfinally) {\n onfinally();\n }\n },\n reason => {\n isRejected = true;\n val = reason;\n if (onfinally) {\n onfinally();\n }\n },\n ).then(() => {\n if (isRejected) {\n reject(val);\n return;\n }\n\n resolve(val as unknown as any);\n });\n });\n }\n\n /** JSDoc */\n private readonly _resolve = (value?: T | PromiseLike<T> | null) => {\n this._setResult(States.RESOLVED, value);\n };\n\n /** JSDoc */\n private readonly _reject = (reason?: any) => {\n this._setResult(States.REJECTED, reason);\n };\n\n /** JSDoc */\n private readonly _setResult = (state: States, value?: T | PromiseLike<T> | any) => {\n if (this._state !== States.PENDING) {\n return;\n }\n\n if (isThenable(value)) {\n void (value as PromiseLike<T>).then(this._resolve, this._reject);\n return;\n }\n\n this._state = state;\n this._value = value;\n\n this._executeHandlers();\n };\n\n /** JSDoc */\n private readonly _executeHandlers = () => {\n if (this._state === States.PENDING) {\n return;\n }\n\n const cachedHandlers = this._handlers.slice();\n this._handlers = [];\n\n cachedHandlers.forEach(handler => {\n if (handler[0]) {\n return;\n }\n\n if (this._state === States.RESOLVED) {\n handler[1](this._value as unknown as any);\n }\n\n if (this._state === States.REJECTED) {\n handler[2](this._value);\n }\n\n handler[0] = true;\n });\n };\n}\n\nexport { SyncPromise };\n", "import { SentryError } from './error';\nimport { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise';\n\nexport interface PromiseBuffer<T> {\n // exposes the internal array so tests can assert on the state of it.\n // XXX: this really should not be public api.\n $: Array<PromiseLike<T>>;\n add(taskProducer: () => PromiseLike<T>): PromiseLike<T>;\n drain(timeout?: number): PromiseLike<boolean>;\n}\n\n/**\n * Creates an new PromiseBuffer object with the specified limit\n * @param limit max number of promises that can be stored in the buffer\n */\nexport function makePromiseBuffer<T>(limit?: number): PromiseBuffer<T> {\n const buffer: Array<PromiseLike<T>> = [];\n\n function isReady(): boolean {\n return limit === undefined || buffer.length < limit;\n }\n\n /**\n * Remove a promise from the queue.\n *\n * @param task Can be any PromiseLike<T>\n * @returns Removed promise.\n */\n function remove(task: PromiseLike<T>): PromiseLike<T> {\n return buffer.splice(buffer.indexOf(task), 1)[0];\n }\n\n /**\n * Add a promise (representing an in-flight action) to the queue, and set it to remove itself on fulfillment.\n *\n * @param taskProducer A function producing any PromiseLike<T>; In previous versions this used to be `task:\n * PromiseLike<T>`, but under that model, Promises were instantly created on the call-site and their executor\n * functions therefore ran immediately. Thus, even if the buffer was full, the action still happened. By\n * requiring the promise to be wrapped in a function, we can defer promise creation until after the buffer\n * limit check.\n * @returns The original promise.\n */\n function add(taskProducer: () => PromiseLike<T>): PromiseLike<T> {\n if (!isReady()) {\n return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.'));\n }\n\n // start the task and add its promise to the queue\n const task = taskProducer();\n if (buffer.indexOf(task) === -1) {\n buffer.push(task);\n }\n void task\n .then(() => remove(task))\n // Use `then(null, rejectionHandler)` rather than `catch(rejectionHandler)` so that we can use `PromiseLike`\n // rather than `Promise`. `PromiseLike` doesn't have a `.catch` method, making its polyfill smaller. (ES5 didn't\n // have promises, so TS has to polyfill when down-compiling.)\n .then(null, () =>\n remove(task).then(null, () => {\n // We have to add another catch here because `remove()` starts a new promise chain.\n }),\n );\n return task;\n }\n\n /**\n * Wait for all promises in the queue to resolve or for timeout to expire, whichever comes first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the queue is still non-empty. Passing `0` (or\n * not passing anything) will make the promise wait as long as it takes for the queue to drain before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if the queue is already empty or drains before the timeout, and\n * `false` otherwise\n */\n function drain(timeout?: number): PromiseLike<boolean> {\n return new SyncPromise<boolean>((resolve, reject) => {\n let counter = buffer.length;\n\n if (!counter) {\n return resolve(true);\n }\n\n // wait for `timeout` ms and then resolve to `false` (if not cancelled first)\n const capturedSetTimeout = setTimeout(() => {\n if (timeout && timeout > 0) {\n resolve(false);\n }\n }, timeout);\n\n // if all promises resolve in time, cancel the timer and resolve to `true`\n buffer.forEach(item => {\n void resolvedSyncPromise(item).then(() => {\n if (!--counter) {\n clearTimeout(capturedSetTimeout);\n resolve(true);\n }\n }, reject);\n });\n });\n }\n\n return {\n $: buffer,\n add,\n drain,\n };\n}\n", "// This code was originally forked from https://github.com/felixge/node-stack-trace\n// Since then it has been highly modified to fit our needs.\n\n// Copyright (c) 2011 Felix Geisendörfer (felix@debuggable.com)//\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions://\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.//\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\nimport type { StackLineParser, StackLineParserFn } from '@sentry/types';\nimport { UNKNOWN_FUNCTION } from './stacktrace';\n\nexport type GetModuleFn = (filename: string | undefined) => string | undefined;\n\n/**\n * Does this filename look like it's part of the app code?\n */\nexport function filenameIsInApp(filename: string, isNative: boolean = false): boolean {\n const isInternal =\n isNative ||\n (filename &&\n // It's not internal if it's an absolute linux path\n !filename.startsWith('/') &&\n // It's not internal if it's an absolute windows path\n !filename.match(/^[A-Z]:/) &&\n // It's not internal if the path is starting with a dot\n !filename.startsWith('.') &&\n // It's not internal if the frame has a protocol. In node, this is usually the case if the file got pre-processed with a bundler like webpack\n !filename.match(/^[a-zA-Z]([a-zA-Z0-9.\\-+])*:\\/\\//)); // Schema from: https://stackoverflow.com/a/3641782\n\n // in_app is all that's not an internal Node function or a module within node_modules\n // note that isNative appears to return true even for node core libraries\n // see https://github.com/getsentry/raven-node/issues/176\n\n return !isInternal && filename !== undefined && !filename.includes('node_modules/');\n}\n\n/** Node Stack line parser */\nexport function node(getModule?: GetModuleFn): StackLineParserFn {\n const FILENAME_MATCH = /^\\s*[-]{4,}$/;\n const FULL_MATCH = /at (?:async )?(?:(.+?)\\s+\\()?(?:(.+):(\\d+):(\\d+)?|([^)]+))\\)?/;\n\n // eslint-disable-next-line complexity\n return (line: string) => {\n const lineMatch = line.match(FULL_MATCH);\n\n if (lineMatch) {\n let object: string | undefined;\n let method: string | undefined;\n let functionName: string | undefined;\n let typeName: string | undefined;\n let methodName: string | undefined;\n\n if (lineMatch[1]) {\n functionName = lineMatch[1];\n\n let methodStart = functionName.lastIndexOf('.');\n if (functionName[methodStart - 1] === '.') {\n methodStart--;\n }\n\n if (methodStart > 0) {\n object = functionName.slice(0, methodStart);\n method = functionName.slice(methodStart + 1);\n const objectEnd = object.indexOf('.Module');\n if (objectEnd > 0) {\n functionName = functionName.slice(objectEnd + 1);\n object = object.slice(0, objectEnd);\n }\n }\n typeName = undefined;\n }\n\n if (method) {\n typeName = object;\n methodName = method;\n }\n\n if (method === '<anonymous>') {\n methodName = undefined;\n functionName = undefined;\n }\n\n if (functionName === undefined) {\n methodName = methodName || UNKNOWN_FUNCTION;\n functionName = typeName ? `${typeName}.${methodName}` : methodName;\n }\n\n let filename = lineMatch[2] && lineMatch[2].startsWith('file://') ? lineMatch[2].slice(7) : lineMatch[2];\n const isNative = lineMatch[5] === 'native';\n\n // If it's a Windows path, trim the leading slash so that `/C:/foo` becomes `C:/foo`\n if (filename && filename.match(/\\/[A-Z]:/)) {\n filename = filename.slice(1);\n }\n\n if (!filename && lineMatch[5] && !isNative) {\n filename = lineMatch[5];\n }\n\n return {\n filename,\n module: getModule ? getModule(filename) : undefined,\n function: functionName,\n lineno: parseInt(lineMatch[3], 10) || undefined,\n colno: parseInt(lineMatch[4], 10) || undefined,\n in_app: filenameIsInApp(filename, isNative),\n };\n }\n\n if (line.match(FILENAME_MATCH)) {\n return {\n filename: line,\n };\n }\n\n return undefined;\n };\n}\n\n/**\n * Node.js stack line parser\n *\n * This is in @sentry/utils so it can be used from the Electron SDK in the browser for when `nodeIntegration == true`.\n * This allows it to be used without referencing or importing any node specific code which causes bundlers to complain\n */\nexport function nodeStackLineParser(getModule?: GetModuleFn): StackLineParser {\n return [90, node(getModule)];\n}\n", "import type {\n Attachment,\n AttachmentItem,\n BaseEnvelopeHeaders,\n BaseEnvelopeItemHeaders,\n DataCategory,\n DsnComponents,\n Envelope,\n EnvelopeItemType,\n Event,\n EventEnvelopeHeaders,\n SdkInfo,\n SdkMetadata,\n SpanItem,\n SpanJSON,\n} from '@sentry/types';\n\nimport { dsnToString } from './dsn';\nimport { normalize } from './normalize';\nimport { dropUndefinedKeys } from './object';\nimport { GLOBAL_OBJ } from './worldwide';\n\n/**\n * Creates an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function createEnvelope<E extends Envelope>(headers: E[0], items: E[1] = []): E {\n return [headers, items] as E;\n}\n\n/**\n * Add an item to an envelope.\n * Make sure to always explicitly provide the generic to this function\n * so that the envelope types resolve correctly.\n */\nexport function addItemToEnvelope<E extends Envelope>(envelope: E, newItem: E[1][number]): E {\n const [headers, items] = envelope;\n return [headers, [...items, newItem]] as unknown as E;\n}\n\n/**\n * Convenience function to loop through the items and item types of an envelope.\n * (This function was mostly created because working with envelope types is painful at the moment)\n *\n * If the callback returns true, the rest of the items will be skipped.\n */\nexport function forEachEnvelopeItem<E extends Envelope>(\n envelope: Envelope,\n callback: (envelopeItem: E[1][number], envelopeItemType: E[1][number][0]['type']) => boolean | void,\n): boolean {\n const envelopeItems = envelope[1];\n\n for (const envelopeItem of envelopeItems) {\n const envelopeItemType = envelopeItem[0].type;\n const result = callback(envelopeItem, envelopeItemType);\n\n if (result) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Returns true if the envelope contains any of the given envelope item types\n */\nexport function envelopeContainsItemType(envelope: Envelope, types: EnvelopeItemType[]): boolean {\n return forEachEnvelopeItem(envelope, (_, type) => types.includes(type));\n}\n\n/**\n * Encode a string to UTF8 array.\n */\nfunction encodeUTF8(input: string): Uint8Array {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.encodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.encodePolyfill(input)\n : new TextEncoder().encode(input);\n}\n\n/**\n * Decode a UTF8 array to string.\n */\nfunction decodeUTF8(input: Uint8Array): string {\n return GLOBAL_OBJ.__SENTRY__ && GLOBAL_OBJ.__SENTRY__.decodePolyfill\n ? GLOBAL_OBJ.__SENTRY__.decodePolyfill(input)\n : new TextDecoder().decode(input);\n}\n\n/**\n * Serializes an envelope.\n */\nexport function serializeEnvelope(envelope: Envelope): string | Uint8Array {\n const [envHeaders, items] = envelope;\n\n // Initially we construct our envelope as a string and only convert to binary chunks if we encounter binary data\n let parts: string | Uint8Array[] = JSON.stringify(envHeaders);\n\n function append(next: string | Uint8Array): void {\n if (typeof parts === 'string') {\n parts = typeof next === 'string' ? parts + next : [encodeUTF8(parts), next];\n } else {\n parts.push(typeof next === 'string' ? encodeUTF8(next) : next);\n }\n }\n\n for (const item of items) {\n const [itemHeaders, payload] = item;\n\n append(`\\n${JSON.stringify(itemHeaders)}\\n`);\n\n if (typeof payload === 'string' || payload instanceof Uint8Array) {\n append(payload);\n } else {\n let stringifiedPayload: string;\n try {\n stringifiedPayload = JSON.stringify(payload);\n } catch (e) {\n // In case, despite all our efforts to keep `payload` circular-dependency-free, `JSON.strinify()` still\n // fails, we try again after normalizing it again with infinite normalization depth. This of course has a\n // performance impact but in this case a performance hit is better than throwing.\n stringifiedPayload = JSON.stringify(normalize(payload));\n }\n append(stringifiedPayload);\n }\n }\n\n return typeof parts === 'string' ? parts : concatBuffers(parts);\n}\n\nfunction concatBuffers(buffers: Uint8Array[]): Uint8Array {\n const totalLength = buffers.reduce((acc, buf) => acc + buf.length, 0);\n\n const merged = new Uint8Array(totalLength);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(buffer, offset);\n offset += buffer.length;\n }\n\n return merged;\n}\n\n/**\n * Parses an envelope\n */\nexport function parseEnvelope(env: string | Uint8Array): Envelope {\n let buffer = typeof env === 'string' ? encodeUTF8(env) : env;\n\n function readBinary(length: number): Uint8Array {\n const bin = buffer.subarray(0, length);\n // Replace the buffer with the remaining data excluding trailing newline\n buffer = buffer.subarray(length + 1);\n return bin;\n }\n\n function readJson<T>(): T {\n let i = buffer.indexOf(0xa);\n // If we couldn't find a newline, we must have found the end of the buffer\n if (i < 0) {\n i = buffer.length;\n }\n\n return JSON.parse(decodeUTF8(readBinary(i))) as T;\n }\n\n const envelopeHeader = readJson<BaseEnvelopeHeaders>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items: [any, any][] = [];\n\n while (buffer.length) {\n const itemHeader = readJson<BaseEnvelopeItemHeaders>();\n const binaryLength = typeof itemHeader.length === 'number' ? itemHeader.length : undefined;\n\n items.push([itemHeader, binaryLength ? readBinary(binaryLength) : readJson()]);\n }\n\n return [envelopeHeader, items];\n}\n\n/**\n * Creates envelope item for a single span\n */\nexport function createSpanEnvelopeItem(spanJson: Partial<SpanJSON>): SpanItem {\n const spanHeaders: SpanItem[0] = {\n type: 'span',\n };\n\n return [spanHeaders, spanJson];\n}\n\n/**\n * Creates attachment envelope items\n */\nexport function createAttachmentEnvelopeItem(attachment: Attachment): AttachmentItem {\n const buffer = typeof attachment.data === 'string' ? encodeUTF8(attachment.data) : attachment.data;\n\n return [\n dropUndefinedKeys({\n type: 'attachment',\n length: buffer.length,\n filename: attachment.filename,\n content_type: attachment.contentType,\n attachment_type: attachment.attachmentType,\n }),\n buffer,\n ];\n}\n\nconst ITEM_TYPE_TO_DATA_CATEGORY_MAP: Record<EnvelopeItemType, DataCategory> = {\n session: 'session',\n sessions: 'session',\n attachment: 'attachment',\n transaction: 'transaction',\n event: 'error',\n client_report: 'internal',\n user_report: 'default',\n profile: 'profile',\n profile_chunk: 'profile',\n replay_event: 'replay',\n replay_recording: 'replay',\n check_in: 'monitor',\n feedback: 'feedback',\n span: 'span',\n statsd: 'metric_bucket',\n};\n\n/**\n * Maps the type of an envelope item to a data category.\n */\nexport function envelopeItemTypeToDataCategory(type: EnvelopeItemType): DataCategory {\n return ITEM_TYPE_TO_DATA_CATEGORY_MAP[type];\n}\n\n/** Extracts the minimal SDK info from the metadata or an events */\nexport function getSdkMetadataForEnvelopeHeader(metadataOrEvent?: SdkMetadata | Event): SdkInfo | undefined {\n if (!metadataOrEvent || !metadataOrEvent.sdk) {\n return;\n }\n const { name, version } = metadataOrEvent.sdk;\n return { name, version };\n}\n\n/**\n * Creates event envelope headers, based on event, sdk info and tunnel\n * Note: This function was extracted from the core package to make it available in Replay\n */\nexport function createEventEnvelopeHeaders(\n event: Event,\n sdkInfo: SdkInfo | undefined,\n tunnel: string | undefined,\n dsn?: DsnComponents,\n): EventEnvelopeHeaders {\n const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata.dynamicSamplingContext;\n return {\n event_id: event.event_id as string,\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n ...(dynamicSamplingContext && {\n trace: dropUndefinedKeys({ ...dynamicSamplingContext }),\n }),\n };\n}\n", "import type { DataCategory, TransportMakeRequestResponse } from '@sentry/types';\n\n// Intentionally keeping the key broad, as we don't know for sure what rate limit headers get returned from backend\nexport type RateLimits = Record<string, number>;\n\nexport const DEFAULT_RETRY_AFTER = 60 * 1000; // 60 seconds\n\n/**\n * Extracts Retry-After value from the request header or returns default value\n * @param header string representation of 'Retry-After' header\n * @param now current unix timestamp\n *\n */\nexport function parseRetryAfterHeader(header: string, now: number = Date.now()): number {\n const headerDelay = parseInt(`${header}`, 10);\n if (!isNaN(headerDelay)) {\n return headerDelay * 1000;\n }\n\n const headerDate = Date.parse(`${header}`);\n if (!isNaN(headerDate)) {\n return headerDate - now;\n }\n\n return DEFAULT_RETRY_AFTER;\n}\n\n/**\n * Gets the time that the given category is disabled until for rate limiting.\n * In case no category-specific limit is set but a general rate limit across all categories is active,\n * that time is returned.\n *\n * @return the time in ms that the category is disabled until or 0 if there's no active rate limit.\n */\nexport function disabledUntil(limits: RateLimits, dataCategory: DataCategory): number {\n return limits[dataCategory] || limits.all || 0;\n}\n\n/**\n * Checks if a category is rate limited\n */\nexport function isRateLimited(limits: RateLimits, dataCategory: DataCategory, now: number = Date.now()): boolean {\n return disabledUntil(limits, dataCategory) > now;\n}\n\n/**\n * Update ratelimits from incoming headers.\n *\n * @return the updated RateLimits object.\n */\nexport function updateRateLimits(\n limits: RateLimits,\n { statusCode, headers }: TransportMakeRequestResponse,\n now: number = Date.now(),\n): RateLimits {\n const updatedRateLimits: RateLimits = {\n ...limits,\n };\n\n // \"The name is case-insensitive.\"\n // https://developer.mozilla.org/en-US/docs/Web/API/Headers/get\n const rateLimitHeader = headers && headers['x-sentry-rate-limits'];\n const retryAfterHeader = headers && headers['retry-after'];\n\n if (rateLimitHeader) {\n /**\n * rate limit headers are of the form\n * <header>,<header>,..\n * where each <header> is of the form\n * <retry_after>: <categories>: <scope>: <reason_code>: <namespaces>\n * where\n * <retry_after> is a delay in seconds\n * <categories> is the event type(s) (error, transaction, etc) being rate limited and is of the form\n * <category>;<category>;...\n * <scope> is what's being limited (org, project, or key) - ignored by SDK\n * <reason_code> is an arbitrary string like \"org_quota\" - ignored by SDK\n * <namespaces> Semicolon-separated list of metric namespace identifiers. Defines which namespace(s) will be affected.\n * Only present if rate limit applies to the metric_bucket data category.\n */\n for (const limit of rateLimitHeader.trim().split(',')) {\n const [retryAfter, categories, , , namespaces] = limit.split(':', 5);\n const headerDelay = parseInt(retryAfter, 10);\n const delay = (!isNaN(headerDelay) ? headerDelay : 60) * 1000; // 60sec default\n if (!categories) {\n updatedRateLimits.all = now + delay;\n } else {\n for (const category of categories.split(';')) {\n if (category === 'metric_bucket') {\n // namespaces will be present when category === 'metric_bucket'\n if (!namespaces || namespaces.split(';').includes('custom')) {\n updatedRateLimits[category] = now + delay;\n }\n } else {\n updatedRateLimits[category] = now + delay;\n }\n }\n }\n }\n } else if (retryAfterHeader) {\n updatedRateLimits.all = now + parseRetryAfterHeader(retryAfterHeader, now);\n } else if (statusCode === 429) {\n updatedRateLimits.all = now + 60 * 1000;\n }\n\n return updatedRateLimits;\n}\n", "import type {\n Client,\n Event,\n EventHint,\n Exception,\n Extras,\n Mechanism,\n ParameterizedString,\n SeverityLevel,\n StackFrame,\n StackParser,\n} from '@sentry/types';\n\nimport { isError, isErrorEvent, isParameterizedString, isPlainObject } from './is';\nimport { addExceptionMechanism, addExceptionTypeValue } from './misc';\nimport { normalizeToSize } from './normalize';\nimport { extractExceptionKeysForMessage } from './object';\n\n/**\n * Extracts stack frames from the error.stack string\n */\nexport function parseStackFrames(stackParser: StackParser, error: Error): StackFrame[] {\n return stackParser(error.stack || '', 1);\n}\n\n/**\n * Extracts stack frames from the error and builds a Sentry Exception\n */\nexport function exceptionFromError(stackParser: StackParser, error: Error): Exception {\n const exception: Exception = {\n type: error.name || error.constructor.name,\n value: error.message,\n };\n\n const frames = parseStackFrames(stackParser, error);\n if (frames.length) {\n exception.stacktrace = { frames };\n }\n\n return exception;\n}\n\n/** If a plain object has a property that is an `Error`, return this error. */\nfunction getErrorPropertyFromObject(obj: Record<string, unknown>): Error | undefined {\n for (const prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n const value = obj[prop];\n if (value instanceof Error) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n\nfunction getMessageForObject(exception: Record<string, unknown>): string {\n if ('name' in exception && typeof exception.name === 'string') {\n let message = `'${exception.name}' captured as exception`;\n\n if ('message' in exception && typeof exception.message === 'string') {\n message += ` with message '${exception.message}'`;\n }\n\n return message;\n } else if ('message' in exception && typeof exception.message === 'string') {\n return exception.message;\n }\n\n const keys = extractExceptionKeysForMessage(exception);\n\n // Some ErrorEvent instances do not have an `error` property, which is why they are not handled before\n // We still want to try to get a decent message for these cases\n if (isErrorEvent(exception)) {\n return `Event \\`ErrorEvent\\` captured as exception with message \\`${exception.message}\\``;\n }\n\n const className = getObjectClassName(exception);\n\n return `${\n className && className !== 'Object' ? `'${className}'` : 'Object'\n } captured as exception with keys: ${keys}`;\n}\n\nfunction getObjectClassName(obj: unknown): string | undefined | void {\n try {\n const prototype: unknown | null = Object.getPrototypeOf(obj);\n return prototype ? prototype.constructor.name : undefined;\n } catch (e) {\n // ignore errors here\n }\n}\n\nfunction getException(\n client: Client,\n mechanism: Mechanism,\n exception: unknown,\n hint?: EventHint,\n): [Error, Extras | undefined] {\n if (isError(exception)) {\n return [exception, undefined];\n }\n\n // Mutate this!\n mechanism.synthetic = true;\n\n if (isPlainObject(exception)) {\n const normalizeDepth = client && client.getOptions().normalizeDepth;\n const extras = { ['__serialized__']: normalizeToSize(exception as Record<string, unknown>, normalizeDepth) };\n\n const errorFromProp = getErrorPropertyFromObject(exception);\n if (errorFromProp) {\n return [errorFromProp, extras];\n }\n\n const message = getMessageForObject(exception);\n const ex = (hint && hint.syntheticException) || new Error(message);\n ex.message = message;\n\n return [ex, extras];\n }\n\n // This handles when someone does: `throw \"something awesome\";`\n // We use synthesized Error here so we can extract a (rough) stack trace.\n const ex = (hint && hint.syntheticException) || new Error(exception as string);\n ex.message = `${exception}`;\n\n return [ex, undefined];\n}\n\n/**\n * Builds and Event from a Exception\n * @hidden\n */\nexport function eventFromUnknownInput(\n client: Client,\n stackParser: StackParser,\n exception: unknown,\n hint?: EventHint,\n): Event {\n const providedMechanism: Mechanism | undefined =\n hint && hint.data && (hint.data as { mechanism: Mechanism }).mechanism;\n const mechanism: Mechanism = providedMechanism || {\n handled: true,\n type: 'generic',\n };\n\n const [ex, extras] = getException(client, mechanism, exception, hint);\n\n const event: Event = {\n exception: {\n values: [exceptionFromError(stackParser, ex)],\n },\n };\n\n if (extras) {\n event.extra = extras;\n }\n\n addExceptionTypeValue(event, undefined, undefined);\n addExceptionMechanism(event, mechanism);\n\n return {\n ...event,\n event_id: hint && hint.event_id,\n };\n}\n\n/**\n * Builds and Event from a Message\n * @hidden\n */\nexport function eventFromMessage(\n stackParser: StackParser,\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n attachStacktrace?: boolean,\n): Event {\n const event: Event = {\n event_id: hint && hint.event_id,\n level,\n };\n\n if (attachStacktrace && hint && hint.syntheticException) {\n const frames = parseStackFrames(stackParser, hint.syntheticException);\n if (frames.length) {\n event.exception = {\n values: [\n {\n value: message,\n stacktrace: { frames },\n },\n ],\n };\n }\n }\n\n if (isParameterizedString(message)) {\n const { __sentry_template_string__, __sentry_template_values__ } = message;\n\n event.logentry = {\n message: __sentry_template_string__,\n params: __sentry_template_values__,\n };\n return event;\n }\n\n event.message = message;\n return event;\n}\n", "import type { PropagationContext } from '@sentry/types';\nimport { uuid4 } from './misc';\n\n/**\n * Returns a new minimal propagation context\n */\nexport function generatePropagationContext(): PropagationContext {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n", "export { registerSpanErrorInstrumentation } from './tracing/errors.js';\nexport { getCapturedScopesOnSpan, setCapturedScopesOnSpan } from './tracing/utils.js';\nexport { addTracingExtensions } from './tracing/hubextensions.js';\nexport { TRACING_DEFAULTS, startIdleSpan } from './tracing/idleSpan.js';\nexport { SentrySpan } from './tracing/sentrySpan.js';\nexport { SentryNonRecordingSpan } from './tracing/sentryNonRecordingSpan.js';\nexport { SPAN_STATUS_ERROR, SPAN_STATUS_OK, SPAN_STATUS_UNSET, getSpanStatusFromHttpCode, setHttpStatus } from './tracing/spanstatus.js';\nexport { continueTrace, startInactiveSpan, startNewTrace, startSpan, startSpanManual, suppressTracing, withActiveSpan } from './tracing/trace.js';\nexport { getDynamicSamplingContextFromClient, getDynamicSamplingContextFromSpan, spanToBaggageHeader } from './tracing/dynamicSamplingContext.js';\nexport { setMeasurement, timedEventsToMeasurements } from './tracing/measurement.js';\nexport { sampleSpan } from './tracing/sampling.js';\nexport { logSpanEnd, logSpanStart } from './tracing/logSpans.js';\nexport { SEMANTIC_ATTRIBUTE_CACHE_HIT, SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE, SEMANTIC_ATTRIBUTE_CACHE_KEY, SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME, SEMANTIC_ATTRIBUTE_PROFILE_ID, SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT, SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from './semanticAttributes.js';\nexport { createEventEnvelope, createSessionEnvelope, createSpanEnvelope } from './envelope.js';\nexport { addEventProcessor, captureCheckIn, captureEvent, captureException, captureMessage, captureSession, close, endSession, flush, isEnabled, isInitialized, lastEventId, setContext, setExtra, setExtras, setTag, setTags, setUser, startSession, withMonitor } from './exports.js';\nexport { getClient, getCurrentScope, getGlobalScope, getIsolationScope, withIsolationScope, withScope } from './currentScopes.js';\nexport { getDefaultCurrentScope, getDefaultIsolationScope } from './defaultScopes.js';\nexport { setAsyncContextStrategy } from './asyncContext/index.js';\nexport { getMainCarrier } from './carrier.js';\nexport { closeSession, makeSession, updateSession } from './session.js';\nexport { SessionFlusher } from './sessionflusher.js';\nexport { Scope } from './scope.js';\nexport { notifyEventProcessors } from './eventProcessors.js';\nexport { getEnvelopeEndpointWithUrlEncodedAuth, getReportDialogEndpoint } from './api.js';\nexport { BaseClient } from './baseclient.js';\nexport { ServerRuntimeClient } from './server-runtime-client.js';\nexport { initAndBind, setCurrentClient } from './sdk.js';\nexport { createTransport } from './transports/base.js';\nexport { makeOfflineTransport } from './transports/offline.js';\nexport { makeMultiplexedTransport } from './transports/multiplexed.js';\nexport { addIntegration, defineIntegration, getIntegrationsToSetup } from './integration.js';\nexport { applyScopeDataToEvent, mergeScopeData } from './utils/applyScopeDataToEvent.js';\nexport { prepareEvent } from './utils/prepareEvent.js';\nexport { createCheckInEnvelope } from './checkin.js';\nexport { hasTracingEnabled } from './utils/hasTracingEnabled.js';\nexport { isSentryRequestUrl } from './utils/isSentryRequestUrl.js';\nexport { handleCallbackErrors } from './utils/handleCallbackErrors.js';\nexport { parameterize } from './utils/parameterize.js';\nexport { addChildSpanToSpan, getActiveSpan, getRootSpan, getSpanDescendants, getStatusMessage, spanIsSampled, spanToJSON, spanToTraceContext, spanToTraceHeader } from './utils/spanUtils.js';\nexport { parseSampleRate } from './utils/parseSampleRate.js';\nexport { applySdkMetadata } from './utils/sdkMetadata.js';\nexport { DEFAULT_ENVIRONMENT } from './constants.js';\nexport { addBreadcrumb } from './breadcrumbs.js';\nexport { functionToStringIntegration } from './integrations/functiontostring.js';\nexport { inboundFiltersIntegration } from './integrations/inboundfilters.js';\nexport { linkedErrorsIntegration } from './integrations/linkederrors.js';\nexport { moduleMetadataIntegration } from './integrations/metadata.js';\nexport { requestDataIntegration } from './integrations/requestdata.js';\nexport { captureConsoleIntegration } from './integrations/captureconsole.js';\nexport { debugIntegration } from './integrations/debug.js';\nexport { dedupeIntegration } from './integrations/dedupe.js';\nexport { extraErrorDataIntegration } from './integrations/extraerrordata.js';\nexport { rewriteFramesIntegration } from './integrations/rewriteframes.js';\nexport { sessionTimingIntegration } from './integrations/sessiontiming.js';\nexport { zodErrorsIntegration } from './integrations/zoderrors.js';\nexport { thirdPartyErrorFilterIntegration } from './integrations/third-party-errors-filter.js';\nexport { metrics } from './metrics/exports.js';\nexport { metricsDefault } from './metrics/exports-default.js';\nexport { BrowserMetricsAggregator } from './metrics/browser-aggregator.js';\nexport { getMetricSummaryJsonForSpan } from './metrics/metric-summary.js';\nexport { addTracingHeadersToFetchRequest, instrumentFetchRequest } from './fetch.js';\nexport { trpcMiddleware } from './trpc.js';\nexport { captureFeedback } from './feedback.js';\nexport { getCurrentHub, getCurrentHubShim } from './getCurrentHubShim.js';\nexport { SDK_VERSION } from '@sentry/utils';\n//# sourceMappingURL=index.js.map\n", "declare const __DEBUG_BUILD__: boolean;\n\n/**\n * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code.\n *\n * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking.\n */\nexport const DEBUG_BUILD = __DEBUG_BUILD__;\n", "import type { Client, Integration, MetricsAggregator, Scope } from '@sentry/types';\nimport { GLOBAL_OBJ, SDK_VERSION } from '@sentry/utils';\nimport type { AsyncContextStack } from './asyncContext/stackStrategy';\nimport type { AsyncContextStrategy } from './asyncContext/types';\n\n/**\n * An object that contains globally accessible properties and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n __SENTRY__?: VersionedCarrier;\n}\n\ntype VersionedCarrier = {\n version?: string;\n} & Record<Exclude<string, 'version'>, SentryCarrier>;\n\ninterface SentryCarrier {\n acs?: AsyncContextStrategy;\n stack?: AsyncContextStack;\n\n globalScope?: Scope;\n defaultIsolationScope?: Scope;\n defaultCurrentScope?: Scope;\n globalMetricsAggregators?: WeakMap<Client, MetricsAggregator> | undefined;\n\n // TODO(v9): Remove these properties - they are no longer used and were left over in v8\n integrations?: Integration[];\n extensions?: {\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n // This ensures a Sentry carrier exists\n getSentryCarrier(GLOBAL_OBJ);\n return GLOBAL_OBJ;\n}\n\n/** Will either get the existing sentry carrier, or create a new one. */\nexport function getSentryCarrier(carrier: Carrier): SentryCarrier {\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n\n // For now: First SDK that sets the .version property wins\n __SENTRY__.version = __SENTRY__.version || SDK_VERSION;\n\n // Intentionally populating and returning the version of \"this\" SDK instance\n // rather than what's set in .version so that \"this\" SDK always gets its carrier\n return (__SENTRY__[SDK_VERSION] = __SENTRY__[SDK_VERSION] || {});\n}\n", "import type { SerializedSession, Session, SessionContext, SessionStatus } from '@sentry/types';\nimport { dropUndefinedKeys, timestampInSeconds, uuid4 } from '@sentry/utils';\n/**\n * Creates a new `Session` object by setting certain default parameters. If optional @param context\n * is passed, the passed properties are applied to the session object.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns a new `Session` object\n */\nexport function makeSession(context?: Omit<SessionContext, 'started' | 'status'>): Session {\n // Both timestamp and started are in seconds since the UNIX epoch.\n const startingTime = timestampInSeconds();\n\n const session: Session = {\n sid: uuid4(),\n init: true,\n timestamp: startingTime,\n started: startingTime,\n duration: 0,\n status: 'ok',\n errors: 0,\n ignoreDuration: false,\n toJSON: () => sessionToJSON(session),\n };\n\n if (context) {\n updateSession(session, context);\n }\n\n return session;\n}\n\n/**\n * Updates a session object with the properties passed in the context.\n *\n * Note that this function mutates the passed object and returns void.\n * (Had to do this instead of returning a new and updated session because closing and sending a session\n * makes an update to the session after it was passed to the sending logic.\n * @see BaseClient.captureSession )\n *\n * @param session the `Session` to update\n * @param context the `SessionContext` holding the properties that should be updated in @param session\n */\n// eslint-disable-next-line complexity\nexport function updateSession(session: Session, context: SessionContext = {}): void {\n if (context.user) {\n if (!session.ipAddress && context.user.ip_address) {\n session.ipAddress = context.user.ip_address;\n }\n\n if (!session.did && !context.did) {\n session.did = context.user.id || context.user.email || context.user.username;\n }\n }\n\n session.timestamp = context.timestamp || timestampInSeconds();\n\n if (context.abnormal_mechanism) {\n session.abnormal_mechanism = context.abnormal_mechanism;\n }\n\n if (context.ignoreDuration) {\n session.ignoreDuration = context.ignoreDuration;\n }\n if (context.sid) {\n // Good enough uuid validation. — Kamil\n session.sid = context.sid.length === 32 ? context.sid : uuid4();\n }\n if (context.init !== undefined) {\n session.init = context.init;\n }\n if (!session.did && context.did) {\n session.did = `${context.did}`;\n }\n if (typeof context.started === 'number') {\n session.started = context.started;\n }\n if (session.ignoreDuration) {\n session.duration = undefined;\n } else if (typeof context.duration === 'number') {\n session.duration = context.duration;\n } else {\n const duration = session.timestamp - session.started;\n session.duration = duration >= 0 ? duration : 0;\n }\n if (context.release) {\n session.release = context.release;\n }\n if (context.environment) {\n session.environment = context.environment;\n }\n if (!session.ipAddress && context.ipAddress) {\n session.ipAddress = context.ipAddress;\n }\n if (!session.userAgent && context.userAgent) {\n session.userAgent = context.userAgent;\n }\n if (typeof context.errors === 'number') {\n session.errors = context.errors;\n }\n if (context.status) {\n session.status = context.status;\n }\n}\n\n/**\n * Closes a session by setting its status and updating the session object with it.\n * Internally calls `updateSession` to update the passed session object.\n *\n * Note that this function mutates the passed session (@see updateSession for explanation).\n *\n * @param session the `Session` object to be closed\n * @param status the `SessionStatus` with which the session was closed. If you don't pass a status,\n * this function will keep the previously set status, unless it was `'ok'` in which case\n * it is changed to `'exited'`.\n */\nexport function closeSession(session: Session, status?: Exclude<SessionStatus, 'ok'>): void {\n let context = {};\n if (status) {\n context = { status };\n } else if (session.status === 'ok') {\n context = { status: 'exited' };\n }\n\n updateSession(session, context);\n}\n\n/**\n * Serializes a passed session object to a JSON object with a slightly different structure.\n * This is necessary because the Sentry backend requires a slightly different schema of a session\n * than the one the JS SDKs use internally.\n *\n * @param session the session to be converted\n *\n * @returns a JSON object of the passed session\n */\nfunction sessionToJSON(session: Session): SerializedSession {\n return dropUndefinedKeys({\n sid: `${session.sid}`,\n init: session.init,\n // Make sure that sec is converted to ms for date constructor\n started: new Date(session.started * 1000).toISOString(),\n timestamp: new Date(session.timestamp * 1000).toISOString(),\n status: session.status,\n errors: session.errors,\n did: typeof session.did === 'number' || typeof session.did === 'string' ? `${session.did}` : undefined,\n duration: session.duration,\n abnormal_mechanism: session.abnormal_mechanism,\n attrs: {\n release: session.release,\n environment: session.environment,\n ip_address: session.ipAddress,\n user_agent: session.userAgent,\n },\n });\n}\n", "import type { Scope, Span } from '@sentry/types';\nimport { addNonEnumerableProperty } from '@sentry/utils';\n\nconst SCOPE_SPAN_FIELD = '_sentrySpan';\n\ntype ScopeWithMaybeSpan = Scope & {\n [SCOPE_SPAN_FIELD]?: Span;\n};\n\n/**\n * Set the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _setSpanForScope(scope: Scope, span: Span | undefined): void {\n if (span) {\n addNonEnumerableProperty(scope as ScopeWithMaybeSpan, SCOPE_SPAN_FIELD, span);\n } else {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete (scope as ScopeWithMaybeSpan)[SCOPE_SPAN_FIELD];\n }\n}\n\n/**\n * Get the active span for a given scope.\n * NOTE: This should NOT be used directly, but is only used internally by the trace methods.\n */\nexport function _getSpanForScope(scope: ScopeWithMaybeSpan): Span | undefined {\n return scope[SCOPE_SPAN_FIELD];\n}\n", "/* eslint-disable max-lines */\nimport type {\n Attachment,\n Breadcrumb,\n CaptureContext,\n Client,\n Context,\n Contexts,\n Event,\n EventHint,\n EventProcessor,\n Extra,\n Extras,\n Primitive,\n PropagationContext,\n RequestSession,\n Scope as ScopeInterface,\n ScopeContext,\n ScopeData,\n Session,\n SeverityLevel,\n User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, generatePropagationContext, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { updateSession } from './session';\nimport { _getSpanForScope, _setSpanForScope } from './utils/spanOnScope';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * Holds additional event information.\n */\nclass ScopeClass implements ScopeInterface {\n /** Flag if notifying is happening. */\n protected _notifyingListeners: boolean;\n\n /** Callback for client to receive scope changes. */\n protected _scopeListeners: Array<(scope: Scope) => void>;\n\n /** Callback list that will be called during event processing. */\n protected _eventProcessors: EventProcessor[];\n\n /** Array of breadcrumbs. */\n protected _breadcrumbs: Breadcrumb[];\n\n /** User */\n protected _user: User;\n\n /** Tags */\n protected _tags: { [key: string]: Primitive };\n\n /** Extra */\n protected _extra: Extras;\n\n /** Contexts */\n protected _contexts: Contexts;\n\n /** Attachments */\n protected _attachments: Attachment[];\n\n /** Propagation Context for distributed tracing */\n protected _propagationContext: PropagationContext;\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n /** Fingerprint */\n protected _fingerprint?: string[];\n\n /** Severity */\n protected _level?: SeverityLevel;\n\n /**\n * Transaction Name\n *\n * IMPORTANT: The transaction name on the scope has nothing to do with root spans/transaction objects.\n * It's purpose is to assign a transaction to the scope that's added to non-transaction events.\n */\n protected _transactionName?: string;\n\n /** Session */\n protected _session?: Session;\n\n /** Request Mode Session Status */\n protected _requestSession?: RequestSession;\n\n /** The client on this scope */\n protected _client?: Client;\n\n /** Contains the last event id of a captured event. */\n protected _lastEventId?: string;\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n public constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * @inheritDoc\n */\n public clone(): ScopeClass {\n const newScope = new ScopeClass();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n newScope._lastEventId = this._lastEventId;\n\n _setSpanForScope(newScope, _getSpanForScope(this));\n\n return newScope;\n }\n\n /**\n * @inheritDoc\n */\n public setClient(client: Client | undefined): void {\n this._client = client;\n }\n\n /**\n * @inheritDoc\n */\n public setLastEventId(lastEventId: string | undefined): void {\n this._lastEventId = lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n public getClient<C extends Client>(): C | undefined {\n return this._client as C | undefined;\n }\n\n /**\n * @inheritDoc\n */\n public lastEventId(): string | undefined {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n public addScopeListener(callback: (scope: Scope) => void): void {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public addEventProcessor(callback: EventProcessor): this {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getUser(): User | undefined {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n public getRequestSession(): RequestSession | undefined {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n public setRequestSession(requestSession?: RequestSession): this {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): this {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): this {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): this {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): this {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setFingerprint(fingerprint: string[]): this {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setLevel(level: SeverityLevel): this {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTransactionName(name?: string): this {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setContext(key: string, context: Context | null): this {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setSession(session?: Session): this {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getSession(): Session | undefined {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n public update(captureContext?: CaptureContext): this {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n const [scopeInstance, requestSession] =\n scopeToMerge instanceof Scope\n ? [scopeToMerge.getScopeData(), scopeToMerge.getRequestSession()]\n : isPlainObject(scopeToMerge)\n ? [captureContext as ScopeContext, (captureContext as ScopeContext).requestSession]\n : [];\n\n const { tags, extra, user, contexts, level, fingerprint = [], propagationContext } = scopeInstance || {};\n\n this._tags = { ...this._tags, ...tags };\n this._extra = { ...this._extra, ...extra };\n this._contexts = { ...this._contexts, ...contexts };\n\n if (user && Object.keys(user).length) {\n this._user = user;\n }\n\n if (level) {\n this._level = level;\n }\n\n if (fingerprint.length) {\n this._fingerprint = fingerprint;\n }\n\n if (propagationContext) {\n this._propagationContext = propagationContext;\n }\n\n if (requestSession) {\n this._requestSession = requestSession;\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clear(): this {\n // client is not cleared here on purpose!\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._session = undefined;\n _setSpanForScope(this, undefined);\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getLastBreadcrumb(): Breadcrumb | undefined {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addAttachment(attachment: Attachment): this {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clearAttachments(): this {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n public getScopeData(): ScopeData {\n return {\n breadcrumbs: this._breadcrumbs,\n attachments: this._attachments,\n contexts: this._contexts,\n tags: this._tags,\n extra: this._extra,\n user: this._user,\n level: this._level,\n fingerprint: this._fingerprint || [],\n eventProcessors: this._eventProcessors,\n propagationContext: this._propagationContext,\n sdkProcessingMetadata: this._sdkProcessingMetadata,\n transactionName: this._transactionName,\n span: _getSpanForScope(this),\n };\n }\n\n /**\n * @inheritDoc\n */\n public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setPropagationContext(context: PropagationContext): this {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getPropagationContext(): PropagationContext {\n return this._propagationContext;\n }\n\n /**\n * @inheritDoc\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n protected _notifyScopeListeners(): void {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n// NOTE: By exporting this here as const & type, instead of doing `export class`,\n// We can get the correct class when importing from `@sentry/core`, but the original type (from `@sentry/types`)\n// This is helpful for interop, e.g. when doing `import type { Scope } from '@sentry/node';` (which re-exports this)\n\n/**\n * Holds additional event information.\n */\nexport const Scope = ScopeClass;\n\n/**\n * Holds additional event information.\n */\nexport type Scope = ScopeInterface;\n", "import type { Scope } from '@sentry/types';\nimport { getGlobalSingleton } from '@sentry/utils';\nimport { Scope as ScopeClass } from './scope';\n\n/** Get the default current scope. */\nexport function getDefaultCurrentScope(): Scope {\n return getGlobalSingleton('defaultCurrentScope', () => new ScopeClass());\n}\n\n/** Get the default isolation scope. */\nexport function getDefaultIsolationScope(): Scope {\n return getGlobalSingleton('defaultIsolationScope', () => new ScopeClass());\n}\n", "import type { Client, Scope as ScopeInterface } from '@sentry/types';\nimport { isThenable } from '@sentry/utils';\nimport { getDefaultCurrentScope, getDefaultIsolationScope } from '../defaultScopes';\nimport { Scope } from '../scope';\n\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport type { AsyncContextStrategy } from './types';\n\ninterface Layer {\n client?: Client;\n scope: ScopeInterface;\n}\n\n/**\n * This is an object that holds a stack of scopes.\n */\nexport class AsyncContextStack {\n private readonly _stack: Layer[];\n private _isolationScope: ScopeInterface;\n\n public constructor(scope?: ScopeInterface, isolationScope?: ScopeInterface) {\n let assignedScope;\n if (!scope) {\n assignedScope = new Scope();\n } else {\n assignedScope = scope;\n }\n\n let assignedIsolationScope;\n if (!isolationScope) {\n assignedIsolationScope = new Scope();\n } else {\n assignedIsolationScope = isolationScope;\n }\n\n this._stack = [{ scope: assignedScope }];\n this._isolationScope = assignedIsolationScope;\n }\n\n /**\n * Fork a scope for the stack.\n */\n public withScope<T>(callback: (scope: ScopeInterface) => T): T {\n const scope = this._pushScope();\n\n let maybePromiseResult: T;\n try {\n maybePromiseResult = callback(scope);\n } catch (e) {\n this._popScope();\n throw e;\n }\n\n if (isThenable(maybePromiseResult)) {\n // @ts-expect-error - isThenable returns the wrong type\n return maybePromiseResult.then(\n res => {\n this._popScope();\n return res;\n },\n e => {\n this._popScope();\n throw e;\n },\n );\n }\n\n this._popScope();\n return maybePromiseResult;\n }\n\n /**\n * Get the client of the stack.\n */\n public getClient<C extends Client>(): C | undefined {\n return this.getStackTop().client as C;\n }\n\n /**\n * Returns the scope of the top stack.\n */\n public getScope(): ScopeInterface {\n return this.getStackTop().scope;\n }\n\n /**\n * Get the isolation scope for the stack.\n */\n public getIsolationScope(): ScopeInterface {\n return this._isolationScope;\n }\n\n /**\n * Returns the scope stack for domains or the process.\n */\n public getStack(): Layer[] {\n return this._stack;\n }\n\n /**\n * Returns the topmost scope layer in the order domain > local > process.\n */\n public getStackTop(): Layer {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * Push a scope to the stack.\n */\n private _pushScope(): ScopeInterface {\n // We want to clone the content of prev scope\n const scope = this.getScope().clone();\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * Pop a scope from the stack.\n */\n private _popScope(): boolean {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n}\n\n/**\n * Get the global async context stack.\n * This will be removed during the v8 cycle and is only here to make migration easier.\n */\nfunction getAsyncContextStack(): AsyncContextStack {\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n\n return (sentry.stack = sentry.stack || new AsyncContextStack(getDefaultCurrentScope(), getDefaultIsolationScope()));\n}\n\nfunction withScope<T>(callback: (scope: ScopeInterface) => T): T {\n return getAsyncContextStack().withScope(callback);\n}\n\nfunction withSetScope<T>(scope: ScopeInterface, callback: (scope: ScopeInterface) => T): T {\n const stack = getAsyncContextStack() as AsyncContextStack;\n return stack.withScope(() => {\n stack.getStackTop().scope = scope;\n return callback(scope);\n });\n}\n\nfunction withIsolationScope<T>(callback: (isolationScope: ScopeInterface) => T): T {\n return getAsyncContextStack().withScope(() => {\n return callback(getAsyncContextStack().getIsolationScope());\n });\n}\n\n/**\n * Get the stack-based async context strategy.\n */\nexport function getStackAsyncContextStrategy(): AsyncContextStrategy {\n return {\n withIsolationScope,\n withScope,\n withSetScope,\n withSetIsolationScope: <T>(_isolationScope: ScopeInterface, callback: (isolationScope: ScopeInterface) => T) => {\n return withIsolationScope(callback);\n },\n getCurrentScope: () => getAsyncContextStack().getScope(),\n getIsolationScope: () => getAsyncContextStack().getIsolationScope(),\n };\n}\n", "import type { Carrier } from './../carrier';\nimport { getMainCarrier, getSentryCarrier } from './../carrier';\nimport { getStackAsyncContextStrategy } from './stackStrategy';\nimport type { AsyncContextStrategy } from './types';\n\n/**\n * @private Private API with no semver guarantees!\n *\n * Sets the global async context strategy\n */\nexport function setAsyncContextStrategy(strategy: AsyncContextStrategy | undefined): void {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n const sentry = getSentryCarrier(registry);\n sentry.acs = strategy;\n}\n\n/**\n * Get the current async context strategy.\n * If none has been setup, the default will be used.\n */\nexport function getAsyncContextStrategy(carrier: Carrier): AsyncContextStrategy {\n const sentry = getSentryCarrier(carrier);\n\n if (sentry.acs) {\n return sentry.acs;\n }\n\n // Otherwise, use the default one (stack)\n return getStackAsyncContextStrategy();\n}\n", "import type { Scope } from '@sentry/types';\nimport type { Client } from '@sentry/types';\nimport { getGlobalSingleton } from '@sentry/utils';\nimport { getAsyncContextStrategy } from './asyncContext';\nimport { getMainCarrier } from './carrier';\nimport { Scope as ScopeClass } from './scope';\n\n/**\n * Get the currently active scope.\n */\nexport function getCurrentScope(): Scope {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getCurrentScope();\n}\n\n/**\n * Get the currently active isolation scope.\n * The isolation scope is active for the current exection context.\n */\nexport function getIsolationScope(): Scope {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n return acs.getIsolationScope();\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): Scope {\n return getGlobalSingleton('globalScope', () => new ScopeClass());\n}\n\n/**\n * Creates a new scope with and executes the given operation within.\n * The scope is automatically removed once the operation\n * finishes or throws.\n */\nexport function withScope<T>(callback: (scope: Scope) => T): T;\n/**\n * Set the given scope as the active scope in the callback.\n */\nexport function withScope<T>(scope: Scope | undefined, callback: (scope: Scope) => T): T;\n/**\n * Either creates a new active scope, or sets the given scope as active scope in the given callback.\n */\nexport function withScope<T>(\n ...rest: [callback: (scope: Scope) => T] | [scope: Scope | undefined, callback: (scope: Scope) => T]\n): T {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [scope, callback] = rest;\n\n if (!scope) {\n return acs.withScope(callback);\n }\n\n return acs.withSetScope(scope, callback);\n }\n\n return acs.withScope(rest[0]);\n}\n\n/**\n * Attempts to fork the current isolation scope and the current scope based on the current async context strategy. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n */\nexport function withIsolationScope<T>(callback: (isolationScope: Scope) => T): T;\n/**\n * Set the provided isolation scope as active in the given callback. If no\n * async context strategy is set, the isolation scope and the current scope will not be forked (this is currently the\n * case, for example, in the browser).\n *\n * Usage of this function in environments without async context strategy is discouraged and may lead to unexpected behaviour.\n *\n * This function is intended for Sentry SDK and SDK integration development. It is not recommended to be used in \"normal\"\n * applications directly because it comes with pitfalls. Use at your own risk!\n *\n * If you pass in `undefined` as a scope, it will fork a new isolation scope, the same as if no scope is passed.\n */\nexport function withIsolationScope<T>(isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T): T;\n/**\n * Either creates a new active isolation scope, or sets the given isolation scope as active scope in the given callback.\n */\nexport function withIsolationScope<T>(\n ...rest:\n | [callback: (isolationScope: Scope) => T]\n | [isolationScope: Scope | undefined, callback: (isolationScope: Scope) => T]\n): T {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n\n // If a scope is defined, we want to make this the active scope instead of the default one\n if (rest.length === 2) {\n const [isolationScope, callback] = rest;\n\n if (!isolationScope) {\n return acs.withIsolationScope(callback);\n }\n\n return acs.withSetIsolationScope(isolationScope, callback);\n }\n\n return acs.withIsolationScope(rest[0]);\n}\n\n/**\n * Get the currently active client.\n */\nexport function getClient<C extends Client>(): C | undefined {\n return getCurrentScope().getClient<C>();\n}\n", "import type { MeasurementUnit, Span } from '@sentry/types';\nimport type { MetricSummary } from '@sentry/types';\nimport type { Primitive } from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport type { MetricType } from './types';\n\n/**\n * key: bucketKey\n * value: [exportKey, MetricSummary]\n */\ntype MetricSummaryStorage = Map<string, [string, MetricSummary]>;\n\nconst METRICS_SPAN_FIELD = '_sentryMetrics';\n\ntype SpanWithPotentialMetrics = Span & {\n [METRICS_SPAN_FIELD]?: MetricSummaryStorage;\n};\n\n/**\n * Fetches the metric summary if it exists for the passed span\n */\nexport function getMetricSummaryJsonForSpan(span: Span): Record<string, Array<MetricSummary>> | undefined {\n const storage = (span as SpanWithPotentialMetrics)[METRICS_SPAN_FIELD];\n\n if (!storage) {\n return undefined;\n }\n const output: Record<string, Array<MetricSummary>> = {};\n\n for (const [, [exportKey, summary]] of storage) {\n if (!output[exportKey]) {\n output[exportKey] = [];\n }\n\n output[exportKey].push(dropUndefinedKeys(summary));\n }\n\n return output;\n}\n\n/**\n * Updates the metric summary on a span.\n */\nexport function updateMetricSummaryOnSpan(\n span: Span,\n metricType: MetricType,\n sanitizedName: string,\n value: number,\n unit: MeasurementUnit,\n tags: Record<string, Primitive>,\n bucketKey: string,\n): void {\n const existingStorage = (span as SpanWithPotentialMetrics)[METRICS_SPAN_FIELD];\n const storage =\n existingStorage ||\n ((span as SpanWithPotentialMetrics)[METRICS_SPAN_FIELD] = new Map<string, [string, MetricSummary]>());\n\n const exportKey = `${metricType}:${sanitizedName}@${unit}`;\n const bucketItem = storage.get(bucketKey);\n\n if (bucketItem) {\n const [, summary] = bucketItem;\n storage.set(bucketKey, [\n exportKey,\n {\n min: Math.min(summary.min, value),\n max: Math.max(summary.max, value),\n count: (summary.count += 1),\n sum: (summary.sum += value),\n tags: summary.tags,\n },\n ]);\n } else {\n storage.set(bucketKey, [\n exportKey,\n {\n min: value,\n max: value,\n count: 1,\n sum: value,\n tags,\n },\n ]);\n }\n}\n", "/**\n * Use this attribute to represent the source of a span.\n * Should be one of: custom, url, route, view, component, task, unknown\n *\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SOURCE = 'sentry.source';\n\n/**\n * Use this attribute to represent the sample rate used for a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE = 'sentry.sample_rate';\n\n/**\n * Use this attribute to represent the operation of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_OP = 'sentry.op';\n\n/**\n * Use this attribute to represent the origin of a span.\n */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN = 'sentry.origin';\n\n/** The reason why an idle span finished. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_IDLE_SPAN_FINISH_REASON = 'sentry.idle_span_finish_reason';\n\n/** The unit of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_UNIT = 'sentry.measurement_unit';\n\n/** The value of a measurement, which may be stored as a TimedEvent. */\nexport const SEMANTIC_ATTRIBUTE_SENTRY_MEASUREMENT_VALUE = 'sentry.measurement_value';\n\n/**\n * The id of the profile that this span occured in.\n */\nexport const SEMANTIC_ATTRIBUTE_PROFILE_ID = 'sentry.profile_id';\n\nexport const SEMANTIC_ATTRIBUTE_EXCLUSIVE_TIME = 'sentry.exclusive_time';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_HIT = 'cache.hit';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_KEY = 'cache.key';\n\nexport const SEMANTIC_ATTRIBUTE_CACHE_ITEM_SIZE = 'cache.item_size';\n", "import type { Span, SpanStatus } from '@sentry/types';\n\nexport const SPAN_STATUS_UNSET = 0;\nexport const SPAN_STATUS_OK = 1;\nexport const SPAN_STATUS_ERROR = 2;\n\n/**\n * Converts a HTTP status code into a sentry status with a message.\n *\n * @param httpStatus The HTTP response status code.\n * @returns The span status or unknown_error.\n */\n// https://develop.sentry.dev/sdk/event-payloads/span/\nexport function getSpanStatusFromHttpCode(httpStatus: number): SpanStatus {\n if (httpStatus < 400 && httpStatus >= 100) {\n return { code: SPAN_STATUS_OK };\n }\n\n if (httpStatus >= 400 && httpStatus < 500) {\n switch (httpStatus) {\n case 401:\n return { code: SPAN_STATUS_ERROR, message: 'unauthenticated' };\n case 403:\n return { code: SPAN_STATUS_ERROR, message: 'permission_denied' };\n case 404:\n return { code: SPAN_STATUS_ERROR, message: 'not_found' };\n case 409:\n return { code: SPAN_STATUS_ERROR, message: 'already_exists' };\n case 413:\n return { code: SPAN_STATUS_ERROR, message: 'failed_precondition' };\n case 429:\n return { code: SPAN_STATUS_ERROR, message: 'resource_exhausted' };\n case 499:\n return { code: SPAN_STATUS_ERROR, message: 'cancelled' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'invalid_argument' };\n }\n }\n\n if (httpStatus >= 500 && httpStatus < 600) {\n switch (httpStatus) {\n case 501:\n return { code: SPAN_STATUS_ERROR, message: 'unimplemented' };\n case 503:\n return { code: SPAN_STATUS_ERROR, message: 'unavailable' };\n case 504:\n return { code: SPAN_STATUS_ERROR, message: 'deadline_exceeded' };\n default:\n return { code: SPAN_STATUS_ERROR, message: 'internal_error' };\n }\n }\n\n return { code: SPAN_STATUS_ERROR, message: 'unknown_error' };\n}\n\n/**\n * Sets the Http status attributes on the current span based on the http code.\n * Additionally, the span's status is updated, depending on the http code.\n */\nexport function setHttpStatus(span: Span, httpStatus: number): void {\n span.setAttribute('http.response.status_code', httpStatus);\n\n const spanStatus = getSpanStatusFromHttpCode(httpStatus);\n if (spanStatus.message !== 'unknown_error') {\n span.setStatus(spanStatus);\n }\n}\n", "import type {\n MeasurementUnit,\n Primitive,\n Span,\n SpanAttributes,\n SpanJSON,\n SpanOrigin,\n SpanStatus,\n SpanTimeInput,\n TraceContext,\n} from '@sentry/types';\nimport {\n addNonEnumerableProperty,\n dropUndefinedKeys,\n generateSentryTraceHeader,\n timestampInSeconds,\n} from '@sentry/utils';\nimport { getAsyncContextStrategy } from '../asyncContext';\nimport { getMainCarrier } from '../carrier';\nimport { getCurrentScope } from '../currentScopes';\nimport { getMetricSummaryJsonForSpan, updateMetricSummaryOnSpan } from '../metrics/metric-summary';\nimport type { MetricType } from '../metrics/types';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '../semanticAttributes';\nimport type { SentrySpan } from '../tracing/sentrySpan';\nimport { SPAN_STATUS_OK, SPAN_STATUS_UNSET } from '../tracing/spanstatus';\nimport { _getSpanForScope } from './spanOnScope';\n\n// These are aligned with OpenTelemetry trace flags\nexport const TRACE_FLAG_NONE = 0x0;\nexport const TRACE_FLAG_SAMPLED = 0x1;\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in an event.\n * By default, this will only include trace_id, span_id & parent_span_id.\n * If `includeAllData` is true, it will also include data, op, status & origin.\n */\nexport function spanToTransactionTraceContext(span: Span): TraceContext {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { data, op, parent_span_id, status, origin } = spanToJSON(span);\n\n return dropUndefinedKeys({\n parent_span_id,\n span_id,\n trace_id,\n data,\n op,\n status,\n origin,\n });\n}\n\n/**\n * Convert a span to a trace context, which can be sent as the `trace` context in a non-transaction event.\n */\nexport function spanToTraceContext(span: Span): TraceContext {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n const { parent_span_id } = spanToJSON(span);\n\n return dropUndefinedKeys({ parent_span_id, span_id, trace_id });\n}\n\n/**\n * Convert a Span to a Sentry trace header.\n */\nexport function spanToTraceHeader(span: Span): string {\n const { traceId, spanId } = span.spanContext();\n const sampled = spanIsSampled(span);\n return generateSentryTraceHeader(traceId, spanId, sampled);\n}\n\n/**\n * Convert a span time input intp a timestamp in seconds.\n */\nexport function spanTimeInputToSeconds(input: SpanTimeInput | undefined): number {\n if (typeof input === 'number') {\n return ensureTimestampInSeconds(input);\n }\n\n if (Array.isArray(input)) {\n // See {@link HrTime} for the array-based time format\n return input[0] + input[1] / 1e9;\n }\n\n if (input instanceof Date) {\n return ensureTimestampInSeconds(input.getTime());\n }\n\n return timestampInSeconds();\n}\n\n/**\n * Converts a timestamp to second, if it was in milliseconds, or keeps it as second.\n */\nfunction ensureTimestampInSeconds(timestamp: number): number {\n const isMs = timestamp > 9999999999;\n return isMs ? timestamp / 1000 : timestamp;\n}\n\n/**\n * Convert a span to a JSON representation.\n */\n// Note: Because of this, we currently have a circular type dependency (which we opted out of in package.json).\n// This is not avoidable as we need `spanToJSON` in `spanUtils.ts`, which in turn is needed by `span.ts` for backwards compatibility.\n// And `spanToJSON` needs the Span class from `span.ts` to check here.\nexport function spanToJSON(span: Span): Partial<SpanJSON> {\n if (spanIsSentrySpan(span)) {\n return span.getSpanJSON();\n }\n\n try {\n const { spanId: span_id, traceId: trace_id } = span.spanContext();\n\n // Handle a span from @opentelemetry/sdk-base-trace's `Span` class\n if (spanIsOpenTelemetrySdkTraceBaseSpan(span)) {\n const { attributes, startTime, name, endTime, parentSpanId, status } = span;\n\n return dropUndefinedKeys({\n span_id,\n trace_id,\n data: attributes,\n description: name,\n parent_span_id: parentSpanId,\n start_timestamp: spanTimeInputToSeconds(startTime),\n // This is [0,0] by default in OTEL, in which case we want to interpret this as no end time\n timestamp: spanTimeInputToSeconds(endTime) || undefined,\n status: getStatusMessage(status),\n op: attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP],\n origin: attributes[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN] as SpanOrigin | undefined,\n _metrics_summary: getMetricSummaryJsonForSpan(span),\n });\n }\n\n // Finally, at least we have `spanContext()`....\n return {\n span_id,\n trace_id,\n };\n } catch {\n return {};\n }\n}\n\nfunction spanIsOpenTelemetrySdkTraceBaseSpan(span: Span): span is OpenTelemetrySdkTraceBaseSpan {\n const castSpan = span as OpenTelemetrySdkTraceBaseSpan;\n return !!castSpan.attributes && !!castSpan.startTime && !!castSpan.name && !!castSpan.endTime && !!castSpan.status;\n}\n\n/** Exported only for tests. */\nexport interface OpenTelemetrySdkTraceBaseSpan extends Span {\n attributes: SpanAttributes;\n startTime: SpanTimeInput;\n name: string;\n status: SpanStatus;\n endTime: SpanTimeInput;\n parentSpanId?: string;\n}\n\n/**\n * Sadly, due to circular dependency checks we cannot actually import the Span class here and check for instanceof.\n * :( So instead we approximate this by checking if it has the `getSpanJSON` method.\n */\nfunction spanIsSentrySpan(span: Span): span is SentrySpan {\n return typeof (span as SentrySpan).getSpanJSON === 'function';\n}\n\n/**\n * Returns true if a span is sampled.\n * In most cases, you should just use `span.isRecording()` instead.\n * However, this has a slightly different semantic, as it also returns false if the span is finished.\n * So in the case where this distinction is important, use this method.\n */\nexport function spanIsSampled(span: Span): boolean {\n // We align our trace flags with the ones OpenTelemetry use\n // So we also check for sampled the same way they do.\n const { traceFlags } = span.spanContext();\n return traceFlags === TRACE_FLAG_SAMPLED;\n}\n\n/** Get the status message to use for a JSON representation of a span. */\nexport function getStatusMessage(status: SpanStatus | undefined): string | undefined {\n if (!status || status.code === SPAN_STATUS_UNSET) {\n return undefined;\n }\n\n if (status.code === SPAN_STATUS_OK) {\n return 'ok';\n }\n\n return status.message || 'unknown_error';\n}\n\nconst CHILD_SPANS_FIELD = '_sentryChildSpans';\nconst ROOT_SPAN_FIELD = '_sentryRootSpan';\n\ntype SpanWithPotentialChildren = Span & {\n [CHILD_SPANS_FIELD]?: Set<Span>;\n [ROOT_SPAN_FIELD]?: Span;\n};\n\n/**\n * Adds an opaque child span reference to a span.\n */\nexport function addChildSpanToSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n // We store the root span reference on the child span\n // We need this for `getRootSpan()` to work\n const rootSpan = span[ROOT_SPAN_FIELD] || span;\n addNonEnumerableProperty(childSpan as SpanWithPotentialChildren, ROOT_SPAN_FIELD, rootSpan);\n\n // We store a list of child spans on the parent span\n // We need this for `getSpanDescendants()` to work\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].add(childSpan);\n } else {\n addNonEnumerableProperty(span, CHILD_SPANS_FIELD, new Set([childSpan]));\n }\n}\n\n/** This is only used internally by Idle Spans. */\nexport function removeChildSpanFromSpan(span: SpanWithPotentialChildren, childSpan: Span): void {\n if (span[CHILD_SPANS_FIELD]) {\n span[CHILD_SPANS_FIELD].delete(childSpan);\n }\n}\n\n/**\n * Returns an array of the given span and all of its descendants.\n */\nexport function getSpanDescendants(span: SpanWithPotentialChildren): Span[] {\n const resultSet = new Set<Span>();\n\n function addSpanChildren(span: SpanWithPotentialChildren): void {\n // This exit condition is required to not infinitely loop in case of a circular dependency.\n if (resultSet.has(span)) {\n return;\n // We want to ignore unsampled spans (e.g. non recording spans)\n } else if (spanIsSampled(span)) {\n resultSet.add(span);\n const childSpans = span[CHILD_SPANS_FIELD] ? Array.from(span[CHILD_SPANS_FIELD]) : [];\n for (const childSpan of childSpans) {\n addSpanChildren(childSpan);\n }\n }\n }\n\n addSpanChildren(span);\n\n return Array.from(resultSet);\n}\n\n/**\n * Returns the root span of a given span.\n */\nexport function getRootSpan(span: SpanWithPotentialChildren): Span {\n return span[ROOT_SPAN_FIELD] || span;\n}\n\n/**\n * Returns the currently active span.\n */\nexport function getActiveSpan(): Span | undefined {\n const carrier = getMainCarrier();\n const acs = getAsyncContextStrategy(carrier);\n if (acs.getActiveSpan) {\n return acs.getActiveSpan();\n }\n\n return _getSpanForScope(getCurrentScope());\n}\n\n/**\n * Updates the metric summary on the currently active span\n */\nexport function updateMetricSummaryOnActiveSpan(\n metricType: MetricType,\n sanitizedName: string,\n value: number,\n unit: MeasurementUnit,\n tags: Record<string, Primitive>,\n bucketKey: string,\n): void {\n const span = getActiveSpan();\n if (span) {\n updateMetricSummaryOnSpan(span, metricType, sanitizedName, value, unit, tags, bucketKey);\n }\n}\n", "import {\n addGlobalErrorInstrumentationHandler,\n addGlobalUnhandledRejectionInstrumentationHandler,\n logger,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\nimport { getActiveSpan, getRootSpan } from '../utils/spanUtils';\nimport { SPAN_STATUS_ERROR } from './spanstatus';\n\nlet errorsInstrumented = false;\n\n/** Only exposed for testing */\nexport function _resetErrorsInstrumented(): void {\n errorsInstrumented = false;\n}\n\n/**\n * Ensure that global errors automatically set the active span status.\n */\nexport function registerSpanErrorInstrumentation(): void {\n if (errorsInstrumented) {\n return;\n }\n\n errorsInstrumented = true;\n addGlobalErrorInstrumentationHandler(errorCallback);\n addGlobalUnhandledRejectionInstrumentationHandler(errorCallback);\n}\n\n/**\n * If an error or unhandled promise occurs, we mark the active root span as failed\n */\nfunction errorCallback(): void {\n const activeSpan = getActiveSpan();\n const rootSpan = activeSpan && getRootSpan(activeSpan);\n if (rootSpan) {\n const message = 'internal_error';\n DEBUG_BUILD && logger.log(`[Tracing] Root span: ${message} -> Global error occured`);\n rootSpan.setStatus({ code: SPAN_STATUS_ERROR, message });\n }\n}\n\n// The function name will be lost when bundling but we need to be able to identify this listener later to maintain the\n// node.js default exit behaviour\nerrorCallback.tag = 'sentry_tracingErrorCallback';\n", "export const DEFAULT_ENVIRONMENT = 'production';\n", "import type { Client, DynamicSamplingContext, Span } from '@sentry/types';\nimport {\n addNonEnumerableProperty,\n dropUndefinedKeys,\n dynamicSamplingContextToSentryBaggageHeader,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getClient } from '../currentScopes';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE, SEMANTIC_ATTRIBUTE_SENTRY_SOURCE } from '../semanticAttributes';\nimport { getRootSpan, spanIsSampled, spanToJSON } from '../utils/spanUtils';\n\n/**\n * If you change this value, also update the terser plugin config to\n * avoid minification of the object property!\n */\nconst FROZEN_DSC_FIELD = '_frozenDsc';\n\ntype SpanWithMaybeDsc = Span & {\n [FROZEN_DSC_FIELD]?: Partial<DynamicSamplingContext> | undefined;\n};\n\n/**\n * Freeze the given DSC on the given span.\n */\nexport function freezeDscOnSpan(span: Span, dsc: Partial<DynamicSamplingContext>): void {\n const spanWithMaybeDsc = span as SpanWithMaybeDsc;\n addNonEnumerableProperty(spanWithMaybeDsc, FROZEN_DSC_FIELD, dsc);\n}\n\n/**\n * Creates a dynamic sampling context from a client.\n *\n * Dispatches the `createDsc` lifecycle hook as a side effect.\n */\nexport function getDynamicSamplingContextFromClient(trace_id: string, client: Client): DynamicSamplingContext {\n const options = client.getOptions();\n\n const { publicKey: public_key } = client.getDsn() || {};\n\n const dsc = dropUndefinedKeys({\n environment: options.environment || DEFAULT_ENVIRONMENT,\n release: options.release,\n public_key,\n trace_id,\n }) as DynamicSamplingContext;\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Creates a dynamic sampling context from a span (and client and scope)\n *\n * @param span the span from which a few values like the root span name and sample rate are extracted.\n *\n * @returns a dynamic sampling context\n */\nexport function getDynamicSamplingContextFromSpan(span: Span): Readonly<Partial<DynamicSamplingContext>> {\n const client = getClient();\n if (!client) {\n return {};\n }\n\n const dsc = getDynamicSamplingContextFromClient(spanToJSON(span).trace_id || '', client);\n\n const rootSpan = getRootSpan(span);\n if (!rootSpan) {\n return dsc;\n }\n\n const frozenDsc = (rootSpan as SpanWithMaybeDsc)[FROZEN_DSC_FIELD];\n if (frozenDsc) {\n return frozenDsc;\n }\n\n const jsonSpan = spanToJSON(rootSpan);\n const attributes = jsonSpan.data || {};\n const maybeSampleRate = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE];\n\n if (maybeSampleRate != null) {\n dsc.sample_rate = `${maybeSampleRate}`;\n }\n\n // We don't want to have a transaction name in the DSC if the source is \"url\" because URLs might contain PII\n const source = attributes[SEMANTIC_ATTRIBUTE_SENTRY_SOURCE];\n\n // after JSON conversion, txn.name becomes jsonSpan.description\n if (source && source !== 'url') {\n dsc.transaction = jsonSpan.description;\n }\n\n dsc.sampled = String(spanIsSampled(rootSpan));\n\n client.emit('createDsc', dsc);\n\n return dsc;\n}\n\n/**\n * Convert a Span to a baggage header.\n */\nexport function spanToBaggageHeader(span: Span): string | undefined {\n const dsc = getDynamicSamplingContextFromSpan(span);\n return dynamicSamplingContextToSentryBaggageHeader(dsc);\n}\n", "import { logger } from '@sentry/utils';\nimport { DEBUG_BUILD } from '../debug-build';\n\n/**\n * Parse a sample rate from a given value.\n * This will either return a boolean or number sample rate, if the sample rate is valid (between 0 and 1).\n * If a string is passed, we try to convert it to a number.\n *\n * Any invalid sample rate will return `undefined`.\n */\nexport function parseSampleRate(sampleRate: unknown): number | undefined {\n if (typeof sampleRate === 'boolean') {\n return Number(sampleRate);\n }\n\n const rate = typeof sampleRate === 'string' ? parseFloat(sampleRate) : sampleRate;\n if (typeof rate !== 'number' || isNaN(rate) || rate < 0 || rate > 1) {\n DEBUG_BUILD &&\n logger.warn(\n `[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify(\n sampleRate,\n )} of type ${JSON.stringify(typeof sampleRate)}.`,\n );\n return undefined;\n }\n\n return rate;\n}\n", "import type {\n Client,\n DsnComponents,\n DynamicSamplingContext,\n Event,\n EventEnvelope,\n EventItem,\n SdkInfo,\n SdkMetadata,\n Session,\n SessionAggregates,\n SessionEnvelope,\n SessionItem,\n SpanEnvelope,\n SpanItem,\n SpanJSON,\n} from '@sentry/types';\nimport {\n createEnvelope,\n createEventEnvelopeHeaders,\n dsnToString,\n getSdkMetadataForEnvelopeHeader,\n} from '@sentry/utils';\nimport { createSpanEnvelopeItem } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from './tracing/dynamicSamplingContext';\nimport type { SentrySpan } from './tracing/sentrySpan';\nimport { spanToJSON } from './utils/spanUtils';\n\n/**\n * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key.\n * Merge with existing data if any.\n **/\nfunction enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event {\n if (!sdkInfo) {\n return event;\n }\n event.sdk = event.sdk || {};\n event.sdk.name = event.sdk.name || sdkInfo.name;\n event.sdk.version = event.sdk.version || sdkInfo.version;\n event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])];\n event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])];\n return event;\n}\n\n/** Creates an envelope from a Session */\nexport function createSessionEnvelope(\n session: Session | SessionAggregates,\n dsn?: DsnComponents,\n metadata?: SdkMetadata,\n tunnel?: string,\n): SessionEnvelope {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n const envelopeHeaders = {\n sent_at: new Date().toISOString(),\n ...(sdkInfo && { sdk: sdkInfo }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const envelopeItem: SessionItem =\n 'aggregates' in session ? [{ type: 'sessions' }, session] : [{ type: 'session' }, session.toJSON()];\n\n return createEnvelope<SessionEnvelope>(envelopeHeaders, [envelopeItem]);\n}\n\n/**\n * Create an Envelope from an event.\n */\nexport function createEventEnvelope(\n event: Event,\n dsn?: DsnComponents,\n metadata?: SdkMetadata,\n tunnel?: string,\n): EventEnvelope {\n const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata);\n\n /*\n Note: Due to TS, event.type may be `replay_event`, theoretically.\n In practice, we never call `createEventEnvelope` with `replay_event` type,\n and we'd have to adjut a looot of types to make this work properly.\n We want to avoid casting this around, as that could lead to bugs (e.g. when we add another type)\n So the safe choice is to really guard against the replay_event type here.\n */\n const eventType = event.type && event.type !== 'replay_event' ? event.type : 'event';\n\n enhanceEventWithSdkInfo(event, metadata && metadata.sdk);\n\n const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn);\n\n // Prevent this data (which, if it exists, was used in earlier steps in the processing pipeline) from being sent to\n // sentry. (Note: Our use of this property comes and goes with whatever we might be debugging, whatever hacks we may\n // have temporarily added, etc. Even if we don't happen to be using it at some point in the future, let's not get rid\n // of this `delete`, lest we miss putting it back in the next time the property is in use.)\n delete event.sdkProcessingMetadata;\n\n const eventItem: EventItem = [{ type: eventType }, event];\n return createEnvelope<EventEnvelope>(envelopeHeaders, [eventItem]);\n}\n\n/**\n * Create envelope from Span item.\n *\n * Takes an optional client and runs spans through `beforeSendSpan` if available.\n */\nexport function createSpanEnvelope(spans: SentrySpan[], client?: Client): SpanEnvelope {\n function dscHasRequiredProps(dsc: Partial<DynamicSamplingContext>): dsc is DynamicSamplingContext {\n return !!dsc.trace_id && !!dsc.public_key;\n }\n\n // For the moment we'll obtain the DSC from the first span in the array\n // This might need to be changed if we permit sending multiple spans from\n // different segments in one envelope\n const dsc = getDynamicSamplingContextFromSpan(spans[0]);\n\n const dsn = client && client.getDsn();\n const tunnel = client && client.getOptions().tunnel;\n\n const headers: SpanEnvelope[0] = {\n sent_at: new Date().toISOString(),\n ...(dscHasRequiredProps(dsc) && { trace: dsc }),\n ...(!!tunnel && dsn && { dsn: dsnToString(dsn) }),\n };\n\n const beforeSendSpan = client && client.getOptions().beforeSendSpan;\n const convertToSpanJSON = beforeSendSpan\n ? (span: SentrySpan) => beforeSendSpan(spanToJSON(span) as SpanJSON)\n : (span: SentrySpan) => spanToJSON(span);\n\n const items: SpanItem[] = [];\n for (const span of spans) {\n const spanJson = convertToSpanJSON(span);\n if (spanJson) {\n items.push(createSpanEnvelopeItem(spanJson));\n }\n }\n\n return createEnvelope<SpanEnvelope>(headers, items);\n}\n", "import type { Event, EventHint, EventProcessor } from '@sentry/types';\nimport { SyncPromise, isThenable, logger } from '@sentry/utils';\n\nimport { DEBUG_BUILD } from './debug-build';\n\n/**\n * Process an array of event processors, returning the processed event (or `null` if the event was dropped).\n */\nexport function notifyEventProcessors(\n processors: EventProcessor[],\n event: Event | null,\n hint: EventHint,\n index: number = 0,\n): PromiseLike<Event | null> {\n return new SyncPromise<Event | null>((resolve, reject) => {\n const processor = processors[index];\n if (event === null || typeof processor !== 'function') {\n resolve(event);\n } else {\n const result = processor({ ...event }, hint) as Event | null;\n\n DEBUG_BUILD && processor.id && result === null && logger.log(`Event processor \"${processor.id}\" dropped event`);\n\n if (isThenable(result)) {\n void result\n .then(final => notifyEventProcessors(processors, final, hint, index + 1).then(resolve))\n .then(null, reject);\n } else {\n void notifyEventProcessors(processors, result, hint, index + 1)\n .then(resolve)\n .then(null, reject);\n }\n }\n });\n}\n", "import type { Breadcrumb, Event, ScopeData, Span } from '@sentry/types';\nimport { arrayify, dropUndefinedKeys } from '@sentry/utils';\nimport { getDynamicSamplingContextFromSpan } from '../tracing/dynamicSamplingContext';\nimport { getRootSpan, spanToJSON, spanToTraceContext } from './spanUtils';\n\n/**\n * Applies data from the scope to the event and runs all event processors on it.\n */\nexport function applyScopeDataToEvent(event: Event, data: ScopeData): void {\n const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data;\n\n // Apply general data\n applyDataToEvent(event, data);\n\n // We want to set the trace context for normal events only if there isn't already\n // a trace context on the event. There is a product feature in place where we link\n // errors with transaction and it relies on that.\n if (span) {\n applySpanToEvent(event, span);\n }\n\n applyFingerprintToEvent(event, fingerprint);\n applyBreadcrumbsToEvent(event, breadcrumbs);\n applySdkMetadataToEvent(event, sdkProcessingMetadata);\n}\n\n/** Merge data of two scopes together. */\nexport function mergeScopeData(data: ScopeData, mergeData: ScopeData): void {\n const {\n extra,\n tags,\n user,\n contexts,\n level,\n sdkProcessingMetadata,\n breadcrumbs,\n fingerprint,\n eventProcessors,\n attachments,\n propagationContext,\n transactionName,\n span,\n } = mergeData;\n\n mergeAndOverwriteScopeData(data, 'extra', extra);\n mergeAndOverwriteScopeData(data, 'tags', tags);\n mergeAndOverwriteScopeData(data, 'user', user);\n mergeAndOverwriteScopeData(data, 'contexts', contexts);\n mergeAndOverwriteScopeData(data, 'sdkProcessingMetadata', sdkProcessingMetadata);\n\n if (level) {\n data.level = level;\n }\n\n if (transactionName) {\n data.transactionName = transactionName;\n }\n\n if (span) {\n data.span = span;\n }\n\n if (breadcrumbs.length) {\n data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs];\n }\n\n if (fingerprint.length) {\n data.fingerprint = [...data.fingerprint, ...fingerprint];\n }\n\n if (eventProcessors.length) {\n data.eventProcessors = [...data.eventProcessors, ...eventProcessors];\n }\n\n if (attachments.length) {\n data.attachments = [...data.attachments, ...attachments];\n }\n\n data.propagationContext = { ...data.propagationContext, ...propagationContext };\n}\n\n/**\n * Merges certain scope data. Undefined values will overwrite any existing values.\n * Exported only for tests.\n */\nexport function mergeAndOverwriteScopeData<\n Prop extends 'extra' | 'tags' | 'user' | 'contexts' | 'sdkProcessingMetadata',\n Data extends ScopeData,\n>(data: Data, prop: Prop, mergeVal: Data[Prop]): void {\n if (mergeVal && Object.keys(mergeVal).length) {\n // Clone object\n data[prop] = { ...data[prop] };\n for (const key in mergeVal) {\n if (Object.prototype.hasOwnProperty.call(mergeVal, key)) {\n data[prop][key] = mergeVal[key];\n }\n }\n }\n}\n\n/** Exported only for tests */\nexport function mergeArray<Prop extends 'breadcrumbs' | 'fingerprint'>(\n event: Event,\n prop: Prop,\n mergeVal: ScopeData[Prop],\n): void {\n const prevVal = event[prop];\n // If we are not merging any new values,\n // we only need to proceed if there was an empty array before (as we want to replace it with undefined)\n if (!mergeVal.length && (!prevVal || prevVal.length)) {\n return;\n }\n\n const merged = [...(prevVal || []), ...mergeVal] as ScopeData[Prop];\n event[prop] = merged.length ? merged : undefined;\n}\n\nfunction applyDataToEvent(event: Event, data: ScopeData): void {\n const { extra, tags, user, contexts, level, transactionName } = data;\n\n const cleanedExtra = dropUndefinedKeys(extra);\n if (cleanedExtra && Object.keys(cleanedExtra).length) {\n event.extra = { ...cleanedExtra, ...event.extra };\n }\n\n const cleanedTags = dropUndefinedKeys(tags);\n if (cleanedTags && Object.keys(cleanedTags).length) {\n event.tags = { ...cleanedTags, ...event.tags };\n }\n\n const cleanedUser = dropUndefinedKeys(user);\n if (cleanedUser && Object.keys(cleanedUser).length) {\n event.user = { ...cleanedUser, ...event.user };\n }\n\n const cleanedContexts = dropUndefinedKeys(contexts);\n if (cleanedContexts && Object.keys(cleanedContexts).length) {\n event.contexts = { ...cleanedContexts, ...event.contexts };\n }\n\n if (level) {\n event.level = level;\n }\n\n // transaction events get their `transaction` from the root span name\n if (transactionName && event.type !== 'transaction') {\n event.transaction = transactionName;\n }\n}\n\nfunction applyBreadcrumbsToEvent(event: Event, breadcrumbs: Breadcrumb[]): void {\n const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs];\n event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined;\n}\n\nfunction applySdkMetadataToEvent(event: Event, sdkProcessingMetadata: ScopeData['sdkProcessingMetadata']): void {\n event.sdkProcessingMetadata = {\n ...event.sdkProcessingMetadata,\n ...sdkProcessingMetadata,\n };\n}\n\nfunction applySpanToEvent(event: Event, span: Span): void {\n event.contexts = {\n trace: spanToTraceContext(span),\n ...event.contexts,\n };\n\n event.sdkProcessingMetadata = {\n dynamicSamplingContext: getDynamicSamplingContextFromSpan(span),\n ...event.sdkProcessingMetadata,\n };\n\n const rootSpan = getRootSpan(span);\n const transactionName = spanToJSON(rootSpan).description;\n if (transactionName && !event.transaction && event.type === 'transaction') {\n event.transaction = transactionName;\n }\n}\n\n/**\n * Applies fingerprint from the scope to the event if there's one,\n * uses message if there's one instead or get rid of empty fingerprint\n */\nfunction applyFingerprintToEvent(event: Event, fingerprint: ScopeData['fingerprint'] | undefined): void {\n // Make sure it's an array first and we actually have something in place\n event.fingerprint = event.fingerprint ? arrayify(event.fingerprint) : [];\n\n // If we have something on the scope, then merge it with event\n if (fingerprint) {\n event.fingerprint = event.fingerprint.concat(fingerprint);\n }\n\n // If we have no data at all, remove empty array default\n if (event.fingerprint && !event.fingerprint.length) {\n delete event.fingerprint;\n }\n}\n", "import type {\n CaptureContext,\n Client,\n ClientOptions,\n Event,\n EventHint,\n Scope as ScopeInterface,\n ScopeContext,\n StackFrame,\n StackParser,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, addExceptionMechanism, dateTimestampInSeconds, normalize, truncate, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from '../constants';\nimport { getGlobalScope } from '../currentScopes';\nimport { notifyEventProcessors } from '../eventProcessors';\nimport { Scope } from '../scope';\nimport { applyScopeDataToEvent, mergeScopeData } from './applyScopeDataToEvent';\n\n/**\n * This type makes sure that we get either a CaptureContext, OR an EventHint.\n * It does not allow mixing them, which could lead to unexpected outcomes, e.g. this is disallowed:\n * { user: { id: '123' }, mechanism: { handled: false } }\n */\nexport type ExclusiveEventHintOrCaptureContext =\n | (CaptureContext & Partial<{ [key in keyof EventHint]: never }>)\n | (EventHint & Partial<{ [key in keyof ScopeContext]: never }>);\n\n/**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param scope A scope containing event metadata.\n * @returns A new event with more information.\n * @hidden\n */\nexport function prepareEvent(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n scope?: ScopeInterface,\n client?: Client,\n isolationScope?: ScopeInterface,\n): PromiseLike<Event | null> {\n const { normalizeDepth = 3, normalizeMaxBreadth = 1_000 } = options;\n const prepared: Event = {\n ...event,\n event_id: event.event_id || hint.event_id || uuid4(),\n timestamp: event.timestamp || dateTimestampInSeconds(),\n };\n const integrations = hint.integrations || options.integrations.map(i => i.name);\n\n applyClientOptions(prepared, options);\n applyIntegrationsMetadata(prepared, integrations);\n\n // Only put debug IDs onto frames for error events.\n if (event.type === undefined) {\n applyDebugIds(prepared, options.stackParser);\n }\n\n // If we have scope given to us, use it as the base for further modifications.\n // This allows us to prevent unnecessary copying of data if `captureContext` is not provided.\n const finalScope = getFinalScope(scope, hint.captureContext);\n\n if (hint.mechanism) {\n addExceptionMechanism(prepared, hint.mechanism);\n }\n\n const clientEventProcessors = client ? client.getEventProcessors() : [];\n\n // This should be the last thing called, since we want that\n // {@link Scope.addEventProcessor} gets the finished prepared event.\n // Merge scope data together\n const data = getGlobalScope().getScopeData();\n\n if (isolationScope) {\n const isolationData = isolationScope.getScopeData();\n mergeScopeData(data, isolationData);\n }\n\n if (finalScope) {\n const finalScopeData = finalScope.getScopeData();\n mergeScopeData(data, finalScopeData);\n }\n\n const attachments = [...(hint.attachments || []), ...data.attachments];\n if (attachments.length) {\n hint.attachments = attachments;\n }\n\n applyScopeDataToEvent(prepared, data);\n\n const eventProcessors = [\n ...clientEventProcessors,\n // Run scope event processors _after_ all other processors\n ...data.eventProcessors,\n ];\n\n const result = notifyEventProcessors(eventProcessors, prepared, hint);\n\n return result.then(evt => {\n if (evt) {\n // We apply the debug_meta field only after all event processors have ran, so that if any event processors modified\n // file names (e.g.the RewriteFrames integration) the filename -> debug ID relationship isn't destroyed.\n // This should not cause any PII issues, since we're only moving data that is already on the event and not adding\n // any new data\n applyDebugMeta(evt);\n }\n\n if (typeof normalizeDepth === 'number' && normalizeDepth > 0) {\n return normalizeEvent(evt, normalizeDepth, normalizeMaxBreadth);\n }\n return evt;\n });\n}\n\n/**\n * Enhances event using the client configuration.\n * It takes care of all \"static\" values like environment, release and `dist`,\n * as well as truncating overly long values.\n * @param event event instance to be enhanced\n */\nfunction applyClientOptions(event: Event, options: ClientOptions): void {\n const { environment, release, dist, maxValueLength = 250 } = options;\n\n if (!('environment' in event)) {\n event.environment = 'environment' in options ? environment : DEFAULT_ENVIRONMENT;\n }\n\n if (event.release === undefined && release !== undefined) {\n event.release = release;\n }\n\n if (event.dist === undefined && dist !== undefined) {\n event.dist = dist;\n }\n\n if (event.message) {\n event.message = truncate(event.message, maxValueLength);\n }\n\n const exception = event.exception && event.exception.values && event.exception.values[0];\n if (exception && exception.value) {\n exception.value = truncate(exception.value, maxValueLength);\n }\n\n const request = event.request;\n if (request && request.url) {\n request.url = truncate(request.url, maxValueLength);\n }\n}\n\nconst debugIdStackParserCache = new WeakMap<StackParser, Map<string, StackFrame[]>>();\n\n/**\n * Puts debug IDs into the stack frames of an error event.\n */\nexport function applyDebugIds(event: Event, stackParser: StackParser): void {\n const debugIdMap = GLOBAL_OBJ._sentryDebugIds;\n\n if (!debugIdMap) {\n return;\n }\n\n let debugIdStackFramesCache: Map<string, StackFrame[]>;\n const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(stackParser);\n if (cachedDebugIdStackFrameCache) {\n debugIdStackFramesCache = cachedDebugIdStackFrameCache;\n } else {\n debugIdStackFramesCache = new Map<string, StackFrame[]>();\n debugIdStackParserCache.set(stackParser, debugIdStackFramesCache);\n }\n\n // Build a map of filename -> debug_id\n const filenameDebugIdMap = Object.keys(debugIdMap).reduce<Record<string, string>>((acc, debugIdStackTrace) => {\n let parsedStack: StackFrame[];\n const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace);\n if (cachedParsedStack) {\n parsedStack = cachedParsedStack;\n } else {\n parsedStack = stackParser(debugIdStackTrace);\n debugIdStackFramesCache.set(debugIdStackTrace, parsedStack);\n }\n\n for (let i = parsedStack.length - 1; i >= 0; i--) {\n const stackFrame = parsedStack[i];\n if (stackFrame.filename) {\n acc[stackFrame.filename] = debugIdMap[debugIdStackTrace];\n break;\n }\n }\n return acc;\n }, {});\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event!.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.filename) {\n frame.debug_id = filenameDebugIdMap[frame.filename];\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n}\n\n/**\n * Moves debug IDs from the stack frames of an error event into the debug_meta field.\n */\nexport function applyDebugMeta(event: Event): void {\n // Extract debug IDs and filenames from the stack frames on the event.\n const filenameDebugIdMap: Record<string, string> = {};\n try {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n event.exception!.values!.forEach(exception => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n exception.stacktrace!.frames!.forEach(frame => {\n if (frame.debug_id) {\n if (frame.abs_path) {\n filenameDebugIdMap[frame.abs_path] = frame.debug_id;\n } else if (frame.filename) {\n filenameDebugIdMap[frame.filename] = frame.debug_id;\n }\n delete frame.debug_id;\n }\n });\n });\n } catch (e) {\n // To save bundle size we're just try catching here instead of checking for the existence of all the different objects.\n }\n\n if (Object.keys(filenameDebugIdMap).length === 0) {\n return;\n }\n\n // Fill debug_meta information\n event.debug_meta = event.debug_meta || {};\n event.debug_meta.images = event.debug_meta.images || [];\n const images = event.debug_meta.images;\n Object.keys(filenameDebugIdMap).forEach(filename => {\n images.push({\n type: 'sourcemap',\n code_file: filename,\n debug_id: filenameDebugIdMap[filename],\n });\n });\n}\n\n/**\n * This function adds all used integrations to the SDK info in the event.\n * @param event The event that will be filled with all integrations.\n */\nfunction applyIntegrationsMetadata(event: Event, integrationNames: string[]): void {\n if (integrationNames.length > 0) {\n event.sdk = event.sdk || {};\n event.sdk.integrations = [...(event.sdk.integrations || []), ...integrationNames];\n }\n}\n\n/**\n * Applies `normalize` function on necessary `Event` attributes to make them safe for serialization.\n * Normalized keys:\n * - `breadcrumbs.data`\n * - `user`\n * - `contexts`\n * - `extra`\n * @param event Event\n * @returns Normalized event\n */\nfunction normalizeEvent(event: Event | null, depth: number, maxBreadth: number): Event | null {\n if (!event) {\n return null;\n }\n\n const normalized: Event = {\n ...event,\n ...(event.breadcrumbs && {\n breadcrumbs: event.breadcrumbs.map(b => ({\n ...b,\n ...(b.data && {\n data: normalize(b.data, depth, maxBreadth),\n }),\n })),\n }),\n ...(event.user && {\n user: normalize(event.user, depth, maxBreadth),\n }),\n ...(event.contexts && {\n contexts: normalize(event.contexts, depth, maxBreadth),\n }),\n ...(event.extra && {\n extra: normalize(event.extra, depth, maxBreadth),\n }),\n };\n\n // event.contexts.trace stores information about a Transaction. Similarly,\n // event.spans[] stores information about child Spans. Given that a\n // Transaction is conceptually a Span, normalization should apply to both\n // Transactions and Spans consistently.\n // For now the decision is to skip normalization of Transactions and Spans,\n // so this block overwrites the normalized event to add back the original\n // Transaction information prior to normalization.\n if (event.contexts && event.contexts.trace && normalized.contexts) {\n normalized.contexts.trace = event.contexts.trace;\n\n // event.contexts.trace.data may contain circular/dangerous data so we need to normalize it\n if (event.contexts.trace.data) {\n normalized.contexts.trace.data = normalize(event.contexts.trace.data, depth, maxBreadth);\n }\n }\n\n // event.spans[].data may contain circular/dangerous data so we need to normalize it\n if (event.spans) {\n normalized.spans = event.spans.map(span => {\n return {\n ...span,\n ...(span.data && {\n data: normalize(span.data, depth, maxBreadth),\n }),\n };\n });\n }\n\n return normalized;\n}\n\nfunction getFinalScope(\n scope: ScopeInterface | undefined,\n captureContext: CaptureContext | undefined,\n): ScopeInterface | undefined {\n if (!captureContext) {\n return scope;\n }\n\n const finalScope = scope ? scope.clone() : new Scope();\n finalScope.update(captureContext);\n return finalScope;\n}\n\n/**\n * Parse either an `EventHint` directly, or convert a `CaptureContext` to an `EventHint`.\n * This is used to allow to update method signatures that used to accept a `CaptureContext` but should now accept an `EventHint`.\n */\nexport function parseEventHintOrCaptureContext(\n hint: ExclusiveEventHintOrCaptureContext | undefined,\n): EventHint | undefined {\n if (!hint) {\n return undefined;\n }\n\n // If you pass a Scope or `() => Scope` as CaptureContext, we just return this as captureContext\n if (hintIsScopeOrFunction(hint)) {\n return { captureContext: hint };\n }\n\n if (hintIsScopeContext(hint)) {\n return {\n captureContext: hint,\n };\n }\n\n return hint;\n}\n\nfunction hintIsScopeOrFunction(\n hint: CaptureContext | EventHint,\n): hint is ScopeInterface | ((scope: ScopeInterface) => ScopeInterface) {\n return hint instanceof Scope || typeof hint === 'function';\n}\n\ntype ScopeContextProperty = keyof ScopeContext;\nconst captureContextKeys: readonly ScopeContextProperty[] = [\n 'user',\n 'level',\n 'extra',\n 'contexts',\n 'tags',\n 'fingerprint',\n 'requestSession',\n 'propagationContext',\n] as const;\n\nfunction hintIsScopeContext(hint: Partial<ScopeContext> | EventHint): hint is Partial<ScopeContext> {\n return Object.keys(hint).some(key => captureContextKeys.includes(key as ScopeContextProperty));\n}\n", "import type {\n AggregationCounts,\n Client,\n RequestSessionStatus,\n SessionAggregates,\n SessionFlusherLike,\n} from '@sentry/types';\nimport { dropUndefinedKeys } from '@sentry/utils';\nimport { getIsolationScope } from './currentScopes';\n\ntype ReleaseHealthAttributes = {\n environment?: string;\n release: string;\n};\n\n/**\n * @inheritdoc\n */\nexport class SessionFlusher implements SessionFlusherLike {\n public readonly flushTimeout: number;\n private _pendingAggregates: Record<number, AggregationCounts>;\n private _sessionAttrs: ReleaseHealthAttributes;\n // Cast to any so that it can use Node.js timeout\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _intervalId: any;\n private _isEnabled: boolean;\n private _client: Client;\n\n public constructor(client: Client, attrs: ReleaseHealthAttributes) {\n this._client = client;\n this.flushTimeout = 60;\n this._pendingAggregates = {};\n this._isEnabled = true;\n\n // Call to setInterval, so that flush is called every 60 seconds.\n this._intervalId = setInterval(() => this.flush(), this.flushTimeout * 1000);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (this._intervalId.unref) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n this._intervalId.unref();\n }\n this._sessionAttrs = attrs;\n }\n\n /** Checks if `pendingAggregates` has entries, and if it does flushes them by calling `sendSession` */\n public flush(): void {\n const sessionAggregates = this.getSessionAggregates();\n if (sessionAggregates.aggregates.length === 0) {\n return;\n }\n this._pendingAggregates = {};\n this._client.sendSession(sessionAggregates);\n }\n\n /** Massages the entries in `pendingAggregates` and returns aggregated sessions */\n public getSessionAggregates(): SessionAggregates {\n const aggregates: AggregationCounts[] = Object.keys(this._pendingAggregates).map((key: string) => {\n return this._pendingAggregates[parseInt(key)];\n });\n\n const sessionAggregates: SessionAggregates = {\n attrs: this._sessionAttrs,\n aggregates,\n };\n return dropUndefinedKeys(sessionAggregates);\n }\n\n /** JSDoc */\n public close(): void {\n clearInterval(this._intervalId);\n this._isEnabled = false;\n this.flush();\n }\n\n /**\n * Wrapper function for _incrementSessionStatusCount that checks if the instance of SessionFlusher is enabled then\n * fetches the session status of the request from `Scope.getRequestSession().status` on the scope and passes them to\n * `_incrementSessionStatusCount` along with the start date\n */\n public incrementSessionStatusCount(): void {\n if (!this._isEnabled) {\n return;\n }\n const isolationScope = getIsolationScope();\n const requestSession = isolationScope.getRequestSession();\n\n if (requestSession && requestSession.status) {\n this._incrementSessionStatusCount(requestSession.status, new Date());\n // This is not entirely necessarily but is added as a safe guard to indicate the bounds of a request and so in\n // case captureRequestSession is called more than once to prevent double count\n isolationScope.setRequestSession(undefined);\n /* eslint-enable @typescript-eslint/no-unsafe-member-access */\n }\n }\n\n /**\n * Increments status bucket in pendingAggregates buffer (internal state) corresponding to status of\n * the session received\n */\n private _incrementSessionStatusCount(status: RequestSessionStatus, date: Date): number {\n // Truncate minutes and seconds on Session Started attribute to have one minute bucket keys\n const sessionStartedTrunc = new Date(date).setSeconds(0, 0);\n this._pendingAggregates[sessionStartedTrunc] = this._pendingAggregates[sessionStartedTrunc] || {};\n\n // corresponds to aggregated sessions in one specific minute bucket\n // for example, {\"started\":\"2021-03-16T08:00:00.000Z\",\"exited\":4, \"errored\": 1}\n const aggregationCounts: AggregationCounts = this._pendingAggregates[sessionStartedTrunc];\n if (!aggregationCounts.started) {\n aggregationCounts.started = new Date(sessionStartedTrunc).toISOString();\n }\n\n switch (status) {\n case 'errored':\n aggregationCounts.errored = (aggregationCounts.errored || 0) + 1;\n return aggregationCounts.errored;\n case 'ok':\n aggregationCounts.exited = (aggregationCounts.exited || 0) + 1;\n return aggregationCounts.exited;\n default:\n aggregationCounts.crashed = (aggregationCounts.crashed || 0) + 1;\n return aggregationCounts.crashed;\n }\n }\n}\n", "import type { DsnComponents, DsnLike, SdkInfo } from '@sentry/types';\nimport { dsnToString, makeDsn, urlEncode } from '@sentry/utils';\n\nconst SENTRY_API_VERSION = '7';\n\n/** Returns the prefix to construct Sentry ingestion API endpoints. */\nfunction getBaseApiEndpoint(dsn: DsnComponents): string {\n const protocol = dsn.protocol ? `${dsn.protocol}:` : '';\n const port = dsn.port ? `:${dsn.port}` : '';\n return `${protocol}//${dsn.host}${port}${dsn.path ? `/${dsn.path}` : ''}/api/`;\n}\n\n/** Returns the ingest API endpoint for target. */\nfunction _getIngestEndpoint(dsn: DsnComponents): string {\n return `${getBaseApiEndpoint(dsn)}${dsn.projectId}/envelope/`;\n}\n\n/** Returns a URL-encoded string with auth config suitable for a query string. */\nfunction _encodedAuth(dsn: DsnComponents, sdkInfo: SdkInfo | undefined): string {\n return urlEncode({\n // We send only the minimum set of required information. See\n // https://github.com/getsentry/sentry-javascript/issues/2572.\n sentry_key: dsn.publicKey,\n sentry_version: SENTRY_API_VERSION,\n ...(sdkInfo && { sentry_client: `${sdkInfo.name}/${sdkInfo.version}` }),\n });\n}\n\n/**\n * Returns the envelope endpoint URL with auth in the query string.\n *\n * Sending auth as part of the query string and not as custom HTTP headers avoids CORS preflight requests.\n */\nexport function getEnvelopeEndpointWithUrlEncodedAuth(dsn: DsnComponents, tunnel?: string, sdkInfo?: SdkInfo): string {\n return tunnel ? tunnel : `${_getIngestEndpoint(dsn)}?${_encodedAuth(dsn, sdkInfo)}`;\n}\n\n/** Returns the url to the report dialog endpoint. */\nexport function getReportDialogEndpoint(\n dsnLike: DsnLike,\n dialogOptions: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [key: string]: any;\n user?: { name?: string; email?: string };\n },\n): string {\n const dsn = makeDsn(dsnLike);\n if (!dsn) {\n return '';\n }\n\n const endpoint = `${getBaseApiEndpoint(dsn)}embed/error-page/`;\n\n let encodedOptions = `dsn=${dsnToString(dsn)}`;\n for (const key in dialogOptions) {\n if (key === 'dsn') {\n continue;\n }\n\n if (key === 'onClose') {\n continue;\n }\n\n if (key === 'user') {\n const user = dialogOptions.user;\n if (!user) {\n continue;\n }\n if (user.name) {\n encodedOptions += `&name=${encodeURIComponent(user.name)}`;\n }\n if (user.email) {\n encodedOptions += `&email=${encodeURIComponent(user.email)}`;\n }\n } else {\n encodedOptions += `&${encodeURIComponent(key)}=${encodeURIComponent(dialogOptions[key] as string)}`;\n }\n }\n\n return `${endpoint}?${encodedOptions}`;\n}\n", "import type { Client, Event, EventHint, Integration, IntegrationFn, Options } from '@sentry/types';\nimport { arrayify, logger } from '@sentry/utils';\nimport { getClient } from './currentScopes';\n\nimport { DEBUG_BUILD } from './debug-build';\n\ndeclare module '@sentry/types' {\n interface Integration {\n isDefaultInstance?: boolean;\n }\n}\n\nexport const installedIntegrations: string[] = [];\n\n/** Map of integrations assigned to a client */\nexport type IntegrationIndex = {\n [key: string]: Integration;\n};\n\n/**\n * Remove duplicates from the given array, preferring the last instance of any duplicate. Not guaranteed to\n * preseve the order of integrations in the array.\n *\n * @private\n */\nfunction filterDuplicates(integrations: Integration[]): Integration[] {\n const integrationsByName: { [key: string]: Integration } = {};\n\n integrations.forEach(currentInstance => {\n const { name } = currentInstance;\n\n const existingInstance = integrationsByName[name];\n\n // We want integrations later in the array to overwrite earlier ones of the same type, except that we never want a\n // default instance to overwrite an existing user instance\n if (existingInstance && !existingInstance.isDefaultInstance && currentInstance.isDefaultInstance) {\n return;\n }\n\n integrationsByName[name] = currentInstance;\n });\n\n return Object.keys(integrationsByName).map(k => integrationsByName[k]);\n}\n\n/** Gets integrations to install */\nexport function getIntegrationsToSetup(options: Pick<Options, 'defaultIntegrations' | 'integrations'>): Integration[] {\n const defaultIntegrations = options.defaultIntegrations || [];\n const userIntegrations = options.integrations;\n\n // We flag default instances, so that later we can tell them apart from any user-created instances of the same class\n defaultIntegrations.forEach(integration => {\n integration.isDefaultInstance = true;\n });\n\n let integrations: Integration[];\n\n if (Array.isArray(userIntegrations)) {\n integrations = [...defaultIntegrations, ...userIntegrations];\n } else if (typeof userIntegrations === 'function') {\n integrations = arrayify(userIntegrations(defaultIntegrations));\n } else {\n integrations = defaultIntegrations;\n }\n\n const finalIntegrations = filterDuplicates(integrations);\n\n // The `Debug` integration prints copies of the `event` and `hint` which will be passed to `beforeSend` or\n // `beforeSendTransaction`. It therefore has to run after all other integrations, so that the changes of all event\n // processors will be reflected in the printed values. For lack of a more elegant way to guarantee that, we therefore\n // locate it and, assuming it exists, pop it out of its current spot and shove it onto the end of the array.\n const debugIndex = findIndex(finalIntegrations, integration => integration.name === 'Debug');\n if (debugIndex !== -1) {\n const [debugInstance] = finalIntegrations.splice(debugIndex, 1);\n finalIntegrations.push(debugInstance);\n }\n\n return finalIntegrations;\n}\n\n/**\n * Given a list of integration instances this installs them all. When `withDefaults` is set to `true` then all default\n * integrations are added unless they were already provided before.\n * @param integrations array of integration instances\n * @param withDefault should enable default integrations\n */\nexport function setupIntegrations(client: Client, integrations: Integration[]): IntegrationIndex {\n const integrationIndex: IntegrationIndex = {};\n\n integrations.forEach(integration => {\n // guard against empty provided integrations\n if (integration) {\n setupIntegration(client, integration, integrationIndex);\n }\n });\n\n return integrationIndex;\n}\n\n/**\n * Execute the `afterAllSetup` hooks of the given integrations.\n */\nexport function afterSetupIntegrations(client: Client, integrations: Integration[]): void {\n for (const integration of integrations) {\n // guard against empty provided integrations\n if (integration && integration.afterAllSetup) {\n integration.afterAllSetup(client);\n }\n }\n}\n\n/** Setup a single integration. */\nexport function setupIntegration(client: Client, integration: Integration, integrationIndex: IntegrationIndex): void {\n if (integrationIndex[integration.name]) {\n DEBUG_BUILD && logger.log(`Integration skipped because it was already installed: ${integration.name}`);\n return;\n }\n integrationIndex[integration.name] = integration;\n\n // `setupOnce` is only called the first time\n if (installedIntegrations.indexOf(integration.name) === -1 && typeof integration.setupOnce === 'function') {\n integration.setupOnce();\n installedIntegrations.push(integration.name);\n }\n\n // `setup` is run for each client\n if (integration.setup && typeof integration.setup === 'function') {\n integration.setup(client);\n }\n\n if (typeof integration.preprocessEvent === 'function') {\n const callback = integration.preprocessEvent.bind(integration) as typeof integration.preprocessEvent;\n client.on('preprocessEvent', (event, hint) => callback(event, hint, client));\n }\n\n if (typeof integration.processEvent === 'function') {\n const callback = integration.processEvent.bind(integration) as typeof integration.processEvent;\n\n const processor = Object.assign((event: Event, hint: EventHint) => callback(event, hint, client), {\n id: integration.name,\n });\n\n client.addEventProcessor(processor);\n }\n\n DEBUG_BUILD && logger.log(`Integration installed: ${integration.name}`);\n}\n\n/** Add an integration to the current scope's client. */\nexport function addIntegration(integration: Integration): void {\n const client = getClient();\n\n if (!client) {\n DEBUG_BUILD && logger.warn(`Cannot add integration \"${integration.name}\" because no SDK Client is available.`);\n return;\n }\n\n client.addIntegration(integration);\n}\n\n// Polyfill for Array.findIndex(), which is not supported in ES5\nfunction findIndex<T>(arr: T[], callback: (item: T) => boolean): number {\n for (let i = 0; i < arr.length; i++) {\n if (callback(arr[i]) === true) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Define an integration function that can be used to create an integration instance.\n * Note that this by design hides the implementation details of the integration, as they are considered internal.\n */\nexport function defineIntegration<Fn extends IntegrationFn>(fn: Fn): (...args: Parameters<Fn>) => Integration {\n return fn;\n}\n", "/* eslint-disable max-lines */\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n ClientOptions,\n DataCategory,\n DsnComponents,\n DynamicSamplingContext,\n Envelope,\n ErrorEvent,\n Event,\n EventDropReason,\n EventHint,\n EventProcessor,\n FeedbackEvent,\n Integration,\n Outcome,\n ParameterizedString,\n SdkMetadata,\n Session,\n SessionAggregates,\n SeverityLevel,\n Span,\n SpanAttributes,\n SpanContextData,\n SpanJSON,\n StartSpanOptions,\n TransactionEvent,\n Transport,\n TransportMakeRequestResponse,\n} from '@sentry/types';\nimport {\n SentryError,\n SyncPromise,\n addItemToEnvelope,\n checkOrSetAlreadyCaught,\n createAttachmentEnvelopeItem,\n dropUndefinedKeys,\n isParameterizedString,\n isPlainObject,\n isPrimitive,\n isThenable,\n logger,\n makeDsn,\n rejectedSyncPromise,\n resolvedSyncPromise,\n uuid4,\n} from '@sentry/utils';\n\nimport { getEnvelopeEndpointWithUrlEncodedAuth } from './api';\nimport { getIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { createEventEnvelope, createSessionEnvelope } from './envelope';\nimport type { IntegrationIndex } from './integration';\nimport { afterSetupIntegrations } from './integration';\nimport { setupIntegration, setupIntegrations } from './integration';\nimport type { Scope } from './scope';\nimport { updateSession } from './session';\nimport { getDynamicSamplingContextFromClient } from './tracing/dynamicSamplingContext';\nimport { parseSampleRate } from './utils/parseSampleRate';\nimport { prepareEvent } from './utils/prepareEvent';\n\nconst ALREADY_SEEN_ERROR = \"Not capturing exception because it's already been captured.\";\n\n/**\n * Base implementation for all JavaScript SDK clients.\n *\n * Call the constructor with the corresponding options\n * specific to the client subclass. To access these options later, use\n * {@link Client.getOptions}.\n *\n * If a Dsn is specified in the options, it will be parsed and stored. Use\n * {@link Client.getDsn} to retrieve the Dsn at any moment. In case the Dsn is\n * invalid, the constructor will throw a {@link SentryException}. Note that\n * without a valid Dsn, the SDK will not send any events to Sentry.\n *\n * Before sending an event, it is passed through\n * {@link BaseClient._prepareEvent} to add SDK information and scope data\n * (breadcrumbs and context). To add more custom information, override this\n * method and extend the resulting prepared event.\n *\n * To issue automatically created events (e.g. via instrumentation), use\n * {@link Client.captureEvent}. It will prepare the event and pass it through\n * the callback lifecycle. To issue auto-breadcrumbs, use\n * {@link Client.addBreadcrumb}.\n *\n * @example\n * class NodeClient extends BaseClient<NodeOptions> {\n * public constructor(options: NodeOptions) {\n * super(options);\n * }\n *\n * // ...\n * }\n */\nexport abstract class BaseClient<O extends ClientOptions> implements Client<O> {\n /** Options passed to the SDK. */\n protected readonly _options: O;\n\n /** The client Dsn, if specified in options. Without this Dsn, the SDK will be disabled. */\n protected readonly _dsn?: DsnComponents;\n\n protected readonly _transport?: Transport;\n\n /** Array of set up integrations. */\n protected _integrations: IntegrationIndex;\n\n /** Number of calls being processed */\n protected _numProcessing: number;\n\n protected _eventProcessors: EventProcessor[];\n\n /** Holds flushable */\n private _outcomes: { [key: string]: number };\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private _hooks: Record<string, Function[]>;\n\n /**\n * Initializes this client instance.\n *\n * @param options Options for the client.\n */\n protected constructor(options: O) {\n this._options = options;\n this._integrations = {};\n this._numProcessing = 0;\n this._outcomes = {};\n this._hooks = {};\n this._eventProcessors = [];\n\n if (options.dsn) {\n this._dsn = makeDsn(options.dsn);\n } else {\n DEBUG_BUILD && logger.warn('No DSN provided, client will not send events.');\n }\n\n if (this._dsn) {\n const url = getEnvelopeEndpointWithUrlEncodedAuth(\n this._dsn,\n options.tunnel,\n options._metadata ? options._metadata.sdk : undefined,\n );\n this._transport = options.transport({\n tunnel: this._options.tunnel,\n recordDroppedEvent: this.recordDroppedEvent.bind(this),\n ...options.transportOptions,\n url,\n });\n }\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public captureException(exception: any, hint?: EventHint, scope?: Scope): string {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (checkOrSetAlreadyCaught(exception)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n this._process(\n this.eventFromException(exception, hintWithEventId).then(event =>\n this._captureEvent(event, hintWithEventId, scope),\n ),\n );\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(\n message: ParameterizedString,\n level?: SeverityLevel,\n hint?: EventHint,\n currentScope?: Scope,\n ): string {\n const hintWithEventId = {\n event_id: uuid4(),\n ...hint,\n };\n\n const eventMessage = isParameterizedString(message) ? message : String(message);\n\n const promisedEvent = isPrimitive(message)\n ? this.eventFromMessage(eventMessage, level, hintWithEventId)\n : this.eventFromException(message, hintWithEventId);\n\n this._process(promisedEvent.then(event => this._captureEvent(event, hintWithEventId, currentScope)));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint, currentScope?: Scope): string {\n const eventId = uuid4();\n\n // ensure we haven't captured this very object before\n if (hint && hint.originalException && checkOrSetAlreadyCaught(hint.originalException)) {\n DEBUG_BUILD && logger.log(ALREADY_SEEN_ERROR);\n return eventId;\n }\n\n const hintWithEventId = {\n event_id: eventId,\n ...hint,\n };\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanScope: Scope | undefined = sdkProcessingMetadata.capturedSpanScope;\n\n this._process(this._captureEvent(event, hintWithEventId, capturedSpanScope || currentScope));\n\n return hintWithEventId.event_id;\n }\n\n /**\n * @inheritDoc\n */\n public captureSession(session: Session): void {\n if (!(typeof session.release === 'string')) {\n DEBUG_BUILD && logger.warn('Discarded session because of missing or non-string release');\n } else {\n this.sendSession(session);\n // After sending, we set init false to indicate it's not the first occurrence\n updateSession(session, { init: false });\n }\n }\n\n /**\n * @inheritDoc\n */\n public getDsn(): DsnComponents | undefined {\n return this._dsn;\n }\n\n /**\n * @inheritDoc\n */\n public getOptions(): O {\n return this._options;\n }\n\n /**\n * @see SdkMetadata in @sentry/types\n *\n * @return The metadata of the SDK\n */\n public getSdkMetadata(): SdkMetadata | undefined {\n return this._options._metadata;\n }\n\n /**\n * @inheritDoc\n */\n public getTransport(): Transport | undefined {\n return this._transport;\n }\n\n /**\n * @inheritDoc\n */\n public flush(timeout?: number): PromiseLike<boolean> {\n const transport = this._transport;\n if (transport) {\n this.emit('flush');\n return this._isClientDoneProcessing(timeout).then(clientFinished => {\n return transport.flush(timeout).then(transportFlushed => clientFinished && transportFlushed);\n });\n } else {\n return resolvedSyncPromise(true);\n }\n }\n\n /**\n * @inheritDoc\n */\n public close(timeout?: number): PromiseLike<boolean> {\n return this.flush(timeout).then(result => {\n this.getOptions().enabled = false;\n this.emit('close');\n return result;\n });\n }\n\n /** Get all installed event processors. */\n public getEventProcessors(): EventProcessor[] {\n return this._eventProcessors;\n }\n\n /** @inheritDoc */\n public addEventProcessor(eventProcessor: EventProcessor): void {\n this._eventProcessors.push(eventProcessor);\n }\n\n /** @inheritdoc */\n public init(): void {\n if (this._isEnabled()) {\n this._setupIntegrations();\n }\n }\n\n /**\n * Gets an installed integration by its name.\n *\n * @returns The installed integration or `undefined` if no integration with that `name` was installed.\n */\n public getIntegrationByName<T extends Integration = Integration>(integrationName: string): T | undefined {\n return this._integrations[integrationName] as T | undefined;\n }\n\n /**\n * @inheritDoc\n */\n public addIntegration(integration: Integration): void {\n const isAlreadyInstalled = this._integrations[integration.name];\n\n // This hook takes care of only installing if not already installed\n setupIntegration(this, integration, this._integrations);\n // Here we need to check manually to make sure to not run this multiple times\n if (!isAlreadyInstalled) {\n afterSetupIntegrations(this, [integration]);\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendEvent(event: Event, hint: EventHint = {}): void {\n this.emit('beforeSendEvent', event, hint);\n\n let env = createEventEnvelope(event, this._dsn, this._options._metadata, this._options.tunnel);\n\n for (const attachment of hint.attachments || []) {\n env = addItemToEnvelope(env, createAttachmentEnvelopeItem(attachment));\n }\n\n const promise = this.sendEnvelope(env);\n if (promise) {\n promise.then(sendResponse => this.emit('afterSendEvent', event, sendResponse), null);\n }\n }\n\n /**\n * @inheritDoc\n */\n public sendSession(session: Session | SessionAggregates): void {\n const env = createSessionEnvelope(session, this._dsn, this._options._metadata, this._options.tunnel);\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(env);\n }\n\n /**\n * @inheritDoc\n */\n public recordDroppedEvent(reason: EventDropReason, category: DataCategory, _event?: Event): void {\n // Note: we use `event` in replay, where we overwrite this hook.\n\n if (this._options.sendClientReports) {\n // We want to track each category (error, transaction, session, replay_event) separately\n // but still keep the distinction between different type of outcomes.\n // We could use nested maps, but it's much easier to read and type this way.\n // A correct type for map-based implementation if we want to go that route\n // would be `Partial<Record<SentryRequestType, Partial<Record<Outcome, number>>>>`\n // With typescript 4.1 we could even use template literal types\n const key = `${reason}:${category}`;\n DEBUG_BUILD && logger.log(`Adding outcome: \"${key}\"`);\n\n // The following works because undefined + 1 === NaN and NaN is falsy\n this._outcomes[key] = this._outcomes[key] + 1 || 1;\n }\n }\n\n // Keep on() & emit() signatures in sync with types' client.ts interface\n /* eslint-disable @typescript-eslint/unified-signatures */\n\n /** @inheritdoc */\n public on(hook: 'spanStart', callback: (span: Span) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'spanEnd', callback: (span: Span) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'idleSpanEnableAutoFinish', callback: (span: Span) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeEnvelope', callback: (envelope: Envelope) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeSendEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'preprocessEvent', callback: (event: Event, hint?: EventHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'afterSendEvent', callback: (event: Event, sendResponse: TransportMakeRequestResponse) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'beforeAddBreadcrumb', callback: (breadcrumb: Breadcrumb, hint?: BreadcrumbHint) => void): void;\n\n /** @inheritdoc */\n public on(hook: 'createDsc', callback: (dsc: DynamicSamplingContext) => void): void;\n\n /** @inheritdoc */\n public on(\n hook: 'beforeSendFeedback',\n callback: (feedback: FeedbackEvent, options?: { includeReplay: boolean }) => void,\n ): void;\n\n /** @inheritdoc */\n public on(\n hook: 'beforeSampling',\n callback: (\n samplingData: {\n spanAttributes: SpanAttributes;\n spanName: string;\n parentSampled?: boolean;\n parentContext?: SpanContextData;\n },\n samplingDecision: { decision: boolean },\n ) => void,\n ): void;\n\n /** @inheritdoc */\n public on(\n hook: 'startPageLoadSpan',\n callback: (\n options: StartSpanOptions,\n traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n ) => void,\n ): void;\n\n /** @inheritdoc */\n public on(hook: 'startNavigationSpan', callback: (options: StartSpanOptions) => void): void;\n\n public on(hook: 'flush', callback: () => void): void;\n\n public on(hook: 'close', callback: () => void): void;\n\n /** @inheritdoc */\n public on(hook: string, callback: unknown): void {\n if (!this._hooks[hook]) {\n this._hooks[hook] = [];\n }\n\n // @ts-expect-error We assue the types are correct\n this._hooks[hook].push(callback);\n }\n\n /** @inheritdoc */\n public emit(\n hook: 'beforeSampling',\n samplingData: {\n spanAttributes: SpanAttributes;\n spanName: string;\n parentSampled?: boolean;\n parentContext?: SpanContextData;\n },\n samplingDecision: { decision: boolean },\n ): void;\n\n /** @inheritdoc */\n public emit(hook: 'spanStart', span: Span): void;\n\n /** @inheritdoc */\n public emit(hook: 'spanEnd', span: Span): void;\n\n /** @inheritdoc */\n public emit(hook: 'idleSpanEnableAutoFinish', span: Span): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeEnvelope', envelope: Envelope): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'preprocessEvent', event: Event, hint?: EventHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'afterSendEvent', event: Event, sendResponse: TransportMakeRequestResponse): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeAddBreadcrumb', breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void;\n\n /** @inheritdoc */\n public emit(hook: 'createDsc', dsc: DynamicSamplingContext): void;\n\n /** @inheritdoc */\n public emit(hook: 'beforeSendFeedback', feedback: FeedbackEvent, options?: { includeReplay: boolean }): void;\n\n /** @inheritdoc */\n public emit(\n hook: 'startPageLoadSpan',\n options: StartSpanOptions,\n traceOptions?: { sentryTrace?: string | undefined; baggage?: string | undefined },\n ): void;\n\n /** @inheritdoc */\n public emit(hook: 'startNavigationSpan', options: StartSpanOptions): void;\n\n /** @inheritdoc */\n public emit(hook: 'flush'): void;\n\n /** @inheritdoc */\n public emit(hook: 'close'): void;\n\n /** @inheritdoc */\n public emit(hook: string, ...rest: unknown[]): void {\n if (this._hooks[hook]) {\n this._hooks[hook].forEach(callback => callback(...rest));\n }\n }\n\n /**\n * @inheritdoc\n */\n public sendEnvelope(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> {\n this.emit('beforeEnvelope', envelope);\n\n if (this._isEnabled() && this._transport) {\n return this._transport.send(envelope).then(null, reason => {\n DEBUG_BUILD && logger.error('Error while sending event:', reason);\n return reason;\n });\n }\n\n DEBUG_BUILD && logger.error('Transport disabled');\n\n return resolvedSyncPromise({});\n }\n\n /* eslint-enable @typescript-eslint/unified-signatures */\n\n /** Setup integrations for this client. */\n protected _setupIntegrations(): void {\n const { integrations } = this._options;\n this._integrations = setupIntegrations(this, integrations);\n afterSetupIntegrations(this, integrations);\n }\n\n /** Updates existing session based on the provided event */\n protected _updateSessionFromEvent(session: Session, event: Event): void {\n let crashed = false;\n let errored = false;\n const exceptions = event.exception && event.exception.values;\n\n if (exceptions) {\n errored = true;\n\n for (const ex of exceptions) {\n const mechanism = ex.mechanism;\n if (mechanism && mechanism.handled === false) {\n crashed = true;\n break;\n }\n }\n }\n\n // A session is updated and that session update is sent in only one of the two following scenarios:\n // 1. Session with non terminal status and 0 errors + an error occurred -> Will set error count to 1 and send update\n // 2. Session with non terminal status and 1 error + a crash occurred -> Will set status crashed and send update\n const sessionNonTerminal = session.status === 'ok';\n const shouldUpdateAndSend = (sessionNonTerminal && session.errors === 0) || (sessionNonTerminal && crashed);\n\n if (shouldUpdateAndSend) {\n updateSession(session, {\n ...(crashed && { status: 'crashed' }),\n errors: session.errors || Number(errored || crashed),\n });\n this.captureSession(session);\n }\n }\n\n /**\n * Determine if the client is finished processing. Returns a promise because it will wait `timeout` ms before saying\n * \"no\" (resolving to `false`) in order to give the client a chance to potentially finish first.\n *\n * @param timeout The time, in ms, after which to resolve to `false` if the client is still busy. Passing `0` (or not\n * passing anything) will make the promise wait as long as it takes for processing to finish before resolving to\n * `true`.\n * @returns A promise which will resolve to `true` if processing is already done or finishes before the timeout, and\n * `false` otherwise\n */\n protected _isClientDoneProcessing(timeout?: number): PromiseLike<boolean> {\n return new SyncPromise(resolve => {\n let ticked: number = 0;\n const tick: number = 1;\n\n const interval = setInterval(() => {\n if (this._numProcessing == 0) {\n clearInterval(interval);\n resolve(true);\n } else {\n ticked += tick;\n if (timeout && ticked >= timeout) {\n clearInterval(interval);\n resolve(false);\n }\n }\n }, tick);\n });\n }\n\n /** Determines whether this SDK is enabled and a transport is present. */\n protected _isEnabled(): boolean {\n return this.getOptions().enabled !== false && this._transport !== undefined;\n }\n\n /**\n * Adds common information to events.\n *\n * The information includes release and environment from `options`,\n * breadcrumbs and context (extra, tags and user) from the scope.\n *\n * Information that is already present in the event is never overwritten. For\n * nested objects, such as the context, keys are merged.\n *\n * @param event The original event.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A new event with more information.\n */\n protected _prepareEvent(\n event: Event,\n hint: EventHint,\n currentScope?: Scope,\n isolationScope = getIsolationScope(),\n ): PromiseLike<Event | null> {\n const options = this.getOptions();\n const integrations = Object.keys(this._integrations);\n if (!hint.integrations && integrations.length > 0) {\n hint.integrations = integrations;\n }\n\n this.emit('preprocessEvent', event, hint);\n\n if (!event.type) {\n isolationScope.setLastEventId(event.event_id || hint.event_id);\n }\n\n return prepareEvent(options, event, hint, currentScope, this, isolationScope).then(evt => {\n if (evt === null) {\n return evt;\n }\n\n const propagationContext = {\n ...isolationScope.getPropagationContext(),\n ...(currentScope ? currentScope.getPropagationContext() : undefined),\n };\n\n const trace = evt.contexts && evt.contexts.trace;\n if (!trace && propagationContext) {\n const { traceId: trace_id, spanId, parentSpanId, dsc } = propagationContext;\n evt.contexts = {\n trace: dropUndefinedKeys({\n trace_id,\n span_id: spanId,\n parent_span_id: parentSpanId,\n }),\n ...evt.contexts,\n };\n\n const dynamicSamplingContext = dsc ? dsc : getDynamicSamplingContextFromClient(trace_id, this);\n\n evt.sdkProcessingMetadata = {\n dynamicSamplingContext,\n ...evt.sdkProcessingMetadata,\n };\n }\n return evt;\n });\n }\n\n /**\n * Processes the event and logs an error in case of rejection\n * @param event\n * @param hint\n * @param scope\n */\n protected _captureEvent(event: Event, hint: EventHint = {}, scope?: Scope): PromiseLike<string | undefined> {\n return this._processEvent(event, hint, scope).then(\n finalEvent => {\n return finalEvent.event_id;\n },\n reason => {\n if (DEBUG_BUILD) {\n // If something's gone wrong, log the error as a warning. If it's just us having used a `SentryError` for\n // control flow, log just the message (no stack) as a log-level log.\n const sentryError = reason as SentryError;\n if (sentryError.logLevel === 'log') {\n logger.log(sentryError.message);\n } else {\n logger.warn(sentryError);\n }\n }\n return undefined;\n },\n );\n }\n\n /**\n * Processes an event (either error or message) and sends it to Sentry.\n *\n * This also adds breadcrumbs and context information to the event. However,\n * platform specific meta data (such as the User's IP address) must be added\n * by the SDK implementor.\n *\n *\n * @param event The event to send to Sentry.\n * @param hint May contain additional information about the original exception.\n * @param currentScope A scope containing event metadata.\n * @returns A SyncPromise that resolves with the event or rejects in case event was/will not be send.\n */\n protected _processEvent(event: Event, hint: EventHint, currentScope?: Scope): PromiseLike<Event> {\n const options = this.getOptions();\n const { sampleRate } = options;\n\n const isTransaction = isTransactionEvent(event);\n const isError = isErrorEvent(event);\n const eventType = event.type || 'error';\n const beforeSendLabel = `before send for type \\`${eventType}\\``;\n\n // 1.0 === 100% events are sent\n // 0.0 === 0% events are sent\n // Sampling for transaction happens somewhere else\n const parsedSampleRate = typeof sampleRate === 'undefined' ? undefined : parseSampleRate(sampleRate);\n if (isError && typeof parsedSampleRate === 'number' && Math.random() > parsedSampleRate) {\n this.recordDroppedEvent('sample_rate', 'error', event);\n return rejectedSyncPromise(\n new SentryError(\n `Discarding event because it's not included in the random sample (sampling rate = ${sampleRate})`,\n 'log',\n ),\n );\n }\n\n const dataCategory: DataCategory = eventType === 'replay_event' ? 'replay' : eventType;\n\n const sdkProcessingMetadata = event.sdkProcessingMetadata || {};\n const capturedSpanIsolationScope: Scope | undefined = sdkProcessingMetadata.capturedSpanIsolationScope;\n\n return this._prepareEvent(event, hint, currentScope, capturedSpanIsolationScope)\n .then(prepared => {\n if (prepared === null) {\n this.recordDroppedEvent('event_processor', dataCategory, event);\n throw new SentryError('An event processor returned `null`, will not send event.', 'log');\n }\n\n const isInternalException = hint.data && (hint.data as { __sentry__: boolean }).__sentry__ === true;\n if (isInternalException) {\n return prepared;\n }\n\n const result = processBeforeSend(options, prepared, hint);\n return _validateBeforeSendResult(result, beforeSendLabel);\n })\n .then(processedEvent => {\n if (processedEvent === null) {\n this.recordDroppedEvent('before_send', dataCategory, event);\n throw new SentryError(`${beforeSendLabel} returned \\`null\\`, will not send event.`, 'log');\n }\n\n const session = currentScope && currentScope.getSession();\n if (!isTransaction && session) {\n this._updateSessionFromEvent(session, processedEvent);\n }\n\n // None of the Sentry built event processor will update transaction name,\n // so if the transaction name has been changed by an event processor, we know\n // it has to come from custom event processor added by a user\n const transactionInfo = processedEvent.transaction_info;\n if (isTransaction && transactionInfo && processedEvent.transaction !== event.transaction) {\n const source = 'custom';\n processedEvent.transaction_info = {\n ...transactionInfo,\n source,\n };\n }\n\n this.sendEvent(processedEvent, hint);\n return processedEvent;\n })\n .then(null, reason => {\n if (reason instanceof SentryError) {\n throw reason;\n }\n\n this.captureException(reason, {\n data: {\n __sentry__: true,\n },\n originalException: reason,\n });\n throw new SentryError(\n `Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.\\nReason: ${reason}`,\n );\n });\n }\n\n /**\n * Occupies the client with processing and event\n */\n protected _process<T>(promise: PromiseLike<T>): void {\n this._numProcessing++;\n void promise.then(\n value => {\n this._numProcessing--;\n return value;\n },\n reason => {\n this._numProcessing--;\n return reason;\n },\n );\n }\n\n /**\n * Clears outcomes on this client and returns them.\n */\n protected _clearOutcomes(): Outcome[] {\n const outcomes = this._outcomes;\n this._outcomes = {};\n return Object.keys(outcomes).map(key => {\n const [reason, category] = key.split(':') as [EventDropReason, DataCategory];\n return {\n reason,\n category,\n quantity: outcomes[key],\n };\n });\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public abstract eventFromException(_exception: any, _hint?: EventHint): PromiseLike<Event>;\n\n /**\n * @inheritDoc\n */\n public abstract eventFromMessage(\n _message: ParameterizedString,\n _level?: SeverityLevel,\n _hint?: EventHint,\n ): PromiseLike<Event>;\n}\n\n/**\n * Verifies that return value of configured `beforeSend` or `beforeSendTransaction` is of expected type, and returns the value if so.\n */\nfunction _validateBeforeSendResult(\n beforeSendResult: PromiseLike<Event | null> | Event | null,\n beforeSendLabel: string,\n): PromiseLike<Event | null> | Event | null {\n const invalidValueError = `${beforeSendLabel} must return \\`null\\` or a valid event.`;\n if (isThenable(beforeSendResult)) {\n return beforeSendResult.then(\n event => {\n if (!isPlainObject(event) && event !== null) {\n throw new SentryError(invalidValueError);\n }\n return event;\n },\n e => {\n throw new SentryError(`${beforeSendLabel} rejected with ${e}`);\n },\n );\n } else if (!isPlainObject(beforeSendResult) && beforeSendResult !== null) {\n throw new SentryError(invalidValueError);\n }\n return beforeSendResult;\n}\n\n/**\n * Process the matching `beforeSendXXX` callback.\n */\nfunction processBeforeSend(\n options: ClientOptions,\n event: Event,\n hint: EventHint,\n): PromiseLike<Event | null> | Event | null {\n const { beforeSend, beforeSendTransaction, beforeSendSpan } = options;\n\n if (isErrorEvent(event) && beforeSend) {\n return beforeSend(event, hint);\n }\n\n if (isTransactionEvent(event)) {\n if (event.spans && beforeSendSpan) {\n const processedSpans: SpanJSON[] = [];\n for (const span of event.spans) {\n const processedSpan = beforeSendSpan(span);\n if (processedSpan) {\n processedSpans.push(processedSpan);\n }\n }\n event.spans = processedSpans;\n }\n\n if (beforeSendTransaction) {\n return beforeSendTransaction(event, hint);\n }\n }\n\n return event;\n}\n\nfunction isErrorEvent(event: Event): event is ErrorEvent {\n return event.type === undefined;\n}\n\nfunction isTransactionEvent(event: Event): event is TransactionEvent {\n return event.type === 'transaction';\n}\n", "import type {\n CheckInEnvelope,\n CheckInItem,\n DsnComponents,\n DynamicSamplingContext,\n SdkMetadata,\n SerializedCheckIn,\n} from '@sentry/types';\nimport { createEnvelope, dropUndefinedKeys, dsnToString } from '@sentry/utils';\n\n/**\n * Create envelope from check in item.\n */\nexport function createCheckInEnvelope(\n checkIn: SerializedCheckIn,\n dynamicSamplingContext?: Partial<DynamicSamplingContext>,\n metadata?: SdkMetadata,\n tunnel?: string,\n dsn?: DsnComponents,\n): CheckInEnvelope {\n const headers: CheckInEnvelope[0] = {\n sent_at: new Date().toISOString(),\n };\n\n if (metadata && metadata.sdk) {\n headers.sdk = {\n name: metadata.sdk.name,\n version: metadata.sdk.version,\n };\n }\n\n if (!!tunnel && !!dsn) {\n headers.dsn = dsnToString(dsn);\n }\n\n if (dynamicSamplingContext) {\n headers.trace = dropUndefinedKeys(dynamicSamplingContext) as DynamicSamplingContext;\n }\n\n const item = createCheckInEnvelopeItem(checkIn);\n return createEnvelope<CheckInEnvelope>(headers, [item]);\n}\n\nfunction createCheckInEnvelopeItem(checkIn: SerializedCheckIn): CheckInItem {\n const checkInHeaders: CheckInItem[0] = {\n type: 'check_in',\n };\n return [checkInHeaders, checkIn];\n}\n", "import type {\n BaseTransportOptions,\n CheckIn,\n ClientOptions,\n DynamicSamplingContext,\n Event,\n EventHint,\n MonitorConfig,\n ParameterizedString,\n SerializedCheckIn,\n SeverityLevel,\n TraceContext,\n} from '@sentry/types';\nimport { eventFromMessage, eventFromUnknownInput, logger, resolvedSyncPromise, uuid4 } from '@sentry/utils';\n\nimport { BaseClient } from './baseclient';\nimport { createCheckInEnvelope } from './checkin';\nimport { getIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Scope } from './scope';\nimport { SessionFlusher } from './sessionflusher';\nimport {\n getDynamicSamplingContextFromClient,\n getDynamicSamplingContextFromSpan,\n registerSpanErrorInstrumentation,\n} from './tracing';\nimport { _getSpanForScope } from './utils/spanOnScope';\nimport { getRootSpan, spanToTraceContext } from './utils/spanUtils';\n\nexport interface ServerRuntimeClientOptions extends ClientOptions<BaseTransportOptions> {\n platform?: string;\n runtime?: { name: string; version?: string };\n serverName?: string;\n}\n\n/**\n * The Sentry Server Runtime Client SDK.\n */\nexport class ServerRuntimeClient<\n O extends ClientOptions & ServerRuntimeClientOptions = ServerRuntimeClientOptions,\n> extends BaseClient<O> {\n protected _sessionFlusher: SessionFlusher | undefined;\n\n /**\n * Creates a new Edge SDK instance.\n * @param options Configuration options for this SDK.\n */\n public constructor(options: O) {\n // Server clients always support tracing\n registerSpanErrorInstrumentation();\n\n super(options);\n }\n\n /**\n * @inheritDoc\n */\n public eventFromException(exception: unknown, hint?: EventHint): PromiseLike<Event> {\n return resolvedSyncPromise(eventFromUnknownInput(this, this._options.stackParser, exception, hint));\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n ): PromiseLike<Event> {\n return resolvedSyncPromise(\n eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n );\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public captureException(exception: any, hint?: EventHint, scope?: Scope): string {\n // Check if the flag `autoSessionTracking` is enabled, and if `_sessionFlusher` exists because it is initialised only\n // when the `requestHandler` middleware is used, and hence the expectation is to have SessionAggregates payload\n // sent to the Server only when the `requestHandler` middleware is used\n if (this._options.autoSessionTracking && this._sessionFlusher) {\n const requestSession = getIsolationScope().getRequestSession();\n\n // Necessary checks to ensure this is code block is executed only within a request\n // Should override the status only if `requestSession.status` is `Ok`, which is its initial stage\n if (requestSession && requestSession.status === 'ok') {\n requestSession.status = 'errored';\n }\n }\n\n return super.captureException(exception, hint, scope);\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string {\n // Check if the flag `autoSessionTracking` is enabled, and if `_sessionFlusher` exists because it is initialised only\n // when the `requestHandler` middleware is used, and hence the expectation is to have SessionAggregates payload\n // sent to the Server only when the `requestHandler` middleware is used\n if (this._options.autoSessionTracking && this._sessionFlusher) {\n const eventType = event.type || 'exception';\n const isException =\n eventType === 'exception' && event.exception && event.exception.values && event.exception.values.length > 0;\n\n // If the event is of type Exception, then a request session should be captured\n if (isException) {\n const requestSession = getIsolationScope().getRequestSession();\n\n // Ensure that this is happening within the bounds of a request, and make sure not to override\n // Session Status if Errored / Crashed\n if (requestSession && requestSession.status === 'ok') {\n requestSession.status = 'errored';\n }\n }\n }\n\n return super.captureEvent(event, hint, scope);\n }\n\n /**\n *\n * @inheritdoc\n */\n public close(timeout?: number): PromiseLike<boolean> {\n if (this._sessionFlusher) {\n this._sessionFlusher.close();\n }\n return super.close(timeout);\n }\n\n /** Method that initialises an instance of SessionFlusher on Client */\n public initSessionFlusher(): void {\n const { release, environment } = this._options;\n if (!release) {\n DEBUG_BUILD && logger.warn('Cannot initialise an instance of SessionFlusher if no release is provided!');\n } else {\n this._sessionFlusher = new SessionFlusher(this, {\n release,\n environment,\n });\n }\n }\n\n /**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\n public captureCheckIn(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string {\n const id = 'checkInId' in checkIn && checkIn.checkInId ? checkIn.checkInId : uuid4();\n if (!this._isEnabled()) {\n DEBUG_BUILD && logger.warn('SDK not enabled, will not capture checkin.');\n return id;\n }\n\n const options = this.getOptions();\n const { release, environment, tunnel } = options;\n\n const serializedCheckIn: SerializedCheckIn = {\n check_in_id: id,\n monitor_slug: checkIn.monitorSlug,\n status: checkIn.status,\n release,\n environment,\n };\n\n if ('duration' in checkIn) {\n serializedCheckIn.duration = checkIn.duration;\n }\n\n if (monitorConfig) {\n serializedCheckIn.monitor_config = {\n schedule: monitorConfig.schedule,\n checkin_margin: monitorConfig.checkinMargin,\n max_runtime: monitorConfig.maxRuntime,\n timezone: monitorConfig.timezone,\n failure_issue_threshold: monitorConfig.failureIssueThreshold,\n recovery_threshold: monitorConfig.recoveryThreshold,\n };\n }\n\n const [dynamicSamplingContext, traceContext] = this._getTraceInfoFromScope(scope);\n if (traceContext) {\n serializedCheckIn.contexts = {\n trace: traceContext,\n };\n }\n\n const envelope = createCheckInEnvelope(\n serializedCheckIn,\n dynamicSamplingContext,\n this.getSdkMetadata(),\n tunnel,\n this.getDsn(),\n );\n\n DEBUG_BUILD && logger.info('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n\n return id;\n }\n\n /**\n * Method responsible for capturing/ending a request session by calling `incrementSessionStatusCount` to increment\n * appropriate session aggregates bucket\n */\n protected _captureRequestSession(): void {\n if (!this._sessionFlusher) {\n DEBUG_BUILD && logger.warn('Discarded request mode session because autoSessionTracking option was disabled');\n } else {\n this._sessionFlusher.incrementSessionStatusCount();\n }\n }\n\n /**\n * @inheritDoc\n */\n protected _prepareEvent(\n event: Event,\n hint: EventHint,\n scope?: Scope,\n isolationScope?: Scope,\n ): PromiseLike<Event | null> {\n if (this._options.platform) {\n event.platform = event.platform || this._options.platform;\n }\n\n if (this._options.runtime) {\n event.contexts = {\n ...event.contexts,\n runtime: (event.contexts || {}).runtime || this._options.runtime,\n };\n }\n\n if (this._options.serverName) {\n event.server_name = event.server_name || this._options.serverName;\n }\n\n return super._prepareEvent(event, hint, scope, isolationScope);\n }\n\n /** Extract trace information from scope */\n private _getTraceInfoFromScope(\n scope: Scope | undefined,\n ): [dynamicSamplingContext: Partial<DynamicSamplingContext> | undefined, traceContext: TraceContext | undefined] {\n if (!scope) {\n return [undefined, undefined];\n }\n\n const span = _getSpanForScope(scope);\n if (span) {\n const rootSpan = getRootSpan(span);\n const samplingContext = getDynamicSamplingContextFromSpan(rootSpan);\n return [samplingContext, spanToTraceContext(rootSpan)];\n }\n\n const { traceId, spanId, parentSpanId, dsc } = scope.getPropagationContext();\n const traceContext: TraceContext = {\n trace_id: traceId,\n span_id: spanId,\n parent_span_id: parentSpanId,\n };\n if (dsc) {\n return [dsc, traceContext];\n }\n\n return [getDynamicSamplingContextFromClient(traceId, this), traceContext];\n }\n}\n", "import type {\n Envelope,\n EnvelopeItem,\n EnvelopeItemType,\n Event,\n EventDropReason,\n EventItem,\n InternalBaseTransportOptions,\n Transport,\n TransportMakeRequestResponse,\n TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n SentryError,\n createEnvelope,\n envelopeItemTypeToDataCategory,\n forEachEnvelopeItem,\n isRateLimited,\n logger,\n makePromiseBuffer,\n resolvedSyncPromise,\n serializeEnvelope,\n updateRateLimits,\n} from '@sentry/utils';\n\nimport { DEBUG_BUILD } from '../debug-build';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 64;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n options: InternalBaseTransportOptions,\n makeRequest: TransportRequestExecutor,\n buffer: PromiseBuffer<TransportMakeRequestResponse> = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n): Transport {\n let rateLimits: RateLimits = {};\n const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n function send(envelope: Envelope): PromiseLike<TransportMakeRequestResponse> {\n const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const dataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, dataCategory)) {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', dataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise({});\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason: EventDropReason): void => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = (): PromiseLike<TransportMakeRequestResponse> =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n DEBUG_BUILD && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise({});\n } else {\n throw error;\n }\n },\n );\n }\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n", "// This function now takes the ASSETS environment binding as a parameter\n// to avoid the circular dependency issue\nexport const getApp = async (\n assetsBinding?: any,\n): Promise<string> => {\n if (assetsBinding) {\n try {\n // Use the ASSETS binding to fetch the index.html file\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n const response = (await assetsBinding.fetch(\n new Request('http://localhost/public/index.html'),\n )) as Response\n if (response.ok) {\n const html = await response.text()\n return changeSourceReferences(html)\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Failed to load index.html from assets:', error)\n }\n }\n\n // Fallback: provide a simple HTML page\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>vlt | Explorer</title>\n <style>\n body { font-family: system-ui, sans-serif; padding: 2rem; text-align: center; }\n .error { color: #dc2626; margin: 1rem 0; }\n </style>\n</head>\n<body>\n <h1>vlt | Explorer</h1>\n <div class=\"error\">Unable to load the application assets.</div>\n <p>Please check that the server is running correctly and assets are available.</p>\n</body>\n</html>`\n}\n\nexport const changeSourceReferences = (html: string): string => {\n html = html.replace('href=\"/main.css', 'href=\"/public/main.css')\n html = html.replace(\n 'href=\"/favicon.ico\"',\n 'href=\"/public/favicon.ico\"',\n )\n html = html.replace('href=\"/fonts/', 'href=\"/public/fonts/')\n html = html.replace('src=\"/index.js\"', 'src=\"/public/index.js\"')\n return html\n}\n", "import { createDatabaseOperations } from '../db/client.ts'\nimport type { D1Database } from '@cloudflare/workers-types'\nimport type { DatabaseOperations, HonoContext } from '../../types.ts'\n\n/**\n * Creates database operations instance from D1 database\n * @param {D1Database} d1 - The D1 database instance\n * @returns {DatabaseOperations} Database operations interface\n */\nexport function createDB(d1: D1Database): DatabaseOperations {\n return createDatabaseOperations(d1)\n}\n\n/**\n * Type guard to check if database is available\n * @param {unknown} db - The database instance to check\n * @returns {boolean} True if database is available and functional\n */\nexport function isDatabaseAvailable(\n db: unknown,\n): db is DatabaseOperations {\n return (\n typeof db === 'object' &&\n db !== null &&\n 'getPackage' in db &&\n typeof (db as DatabaseOperations).getPackage === 'function'\n )\n}\n\n// Cache the database operations to avoid recreating on every request\nlet cachedDbOperations: DatabaseOperations | null = null\n\n/**\n * Middleware to mount database operations on the context\n * @param {HonoContext} c - The Hono context\n * @param {() => Promise<void>} next - The next middleware function\n */\nexport async function mountDatabase(\n c: HonoContext,\n next: () => Promise<void>,\n): Promise<void> {\n // Check if this is a utility route that doesn't need database\n const path = c.req.path\n const isUtilityRoute =\n path === '/-/ping' ||\n path === '/-/docs' ||\n /^\\/[^/]+\\/-\\/(ping|docs)$/.test(path)\n\n // Note: whoami and user endpoints DO need database access for authentication\n // but we need to handle the case where DB is not available in tests\n\n if (isUtilityRoute) {\n // Skip database mounting for utility routes\n await next()\n return\n }\n\n if (!c.env.DB) {\n throw new Error('Database not found in environment')\n }\n\n // Reuse existing database operations if available\n cachedDbOperations ??= createDatabaseOperations(\n c.env.DB,\n ) as DatabaseOperations\n\n c.set('db', cachedDbOperations)\n await next()\n}\n", "import type { D1Database } from '@cloudflare/workers-types'\nimport { drizzle } from 'drizzle-orm/d1'\nimport { sql } from 'drizzle-orm'\nimport * as schema from './schema.ts'\nimport type {\n ParsedPackage,\n ParsedVersion,\n ParsedToken,\n} from '../../types.ts'\n\nconst fallbackLogger = {\n error: (_message: string, _error?: unknown) => {\n // eslint-disable-next-line no-console\n console.error(_message, _error)\n },\n info: (_message: string) => {\n // eslint-disable-next-line no-console\n console.info(_message)\n },\n}\n\nexport type Database = ReturnType<typeof drizzle<typeof schema>>\n\nexport function createDatabase(d1: D1Database): Database {\n return drizzle(d1, { schema })\n}\n\nexport function parseJSON(value: string | null): any {\n if (!value) return null\n try {\n return JSON.parse(value)\n } catch (_e) {\n // Log to monitoring system instead of console\n return null\n }\n}\n\nexport function stringifyJSON(value: unknown): string {\n return JSON.stringify(value)\n}\n\nexport function createDatabaseOperations(\n d1: D1Database,\n logger = fallbackLogger,\n) {\n const db = createDatabase(d1)\n\n return {\n async getPackage(name: string): Promise<ParsedPackage | null> {\n try {\n const result = await db\n .select()\n .from(schema.packages)\n .where(sql`name = ${name}`)\n .get()\n if (!result) return null\n return {\n name: result.name,\n tags: parseJSON(result.tags) as Record<string, string>,\n lastUpdated: result.lastUpdated || null,\n origin: result.origin || null,\n upstream: result.upstream || null,\n cachedAt: result.cachedAt || null,\n } as ParsedPackage\n } catch (_error) {\n logger.error(\n `[DB ERROR] Failed to get package ${name}`,\n _error,\n )\n return null\n }\n },\n\n async upsertPackage(\n name: string,\n tags: Record<string, string>,\n lastUpdated?: string,\n ) {\n try {\n const result = await db\n .insert(schema.packages)\n .values({\n name,\n tags: stringifyJSON(tags),\n lastUpdated: lastUpdated || new Date().toISOString(),\n })\n .onConflictDoUpdate({\n target: schema.packages.name,\n set: {\n tags: stringifyJSON(tags),\n lastUpdated: lastUpdated || new Date().toISOString(),\n },\n })\n return result\n } catch (_error: unknown) {\n logger.error(\n `[DB ERROR] Failed to upsert package ${name}`,\n _error,\n )\n return null\n }\n },\n\n async upsertCachedPackage(\n name: string,\n tags: Record<string, string>,\n upstream: string,\n lastUpdated?: string,\n ) {\n try {\n const result = await db\n .insert(schema.packages)\n .values({\n name,\n tags: stringifyJSON(tags),\n lastUpdated: lastUpdated || new Date().toISOString(),\n origin: 'upstream',\n upstream,\n cachedAt: new Date().toISOString(),\n })\n .onConflictDoUpdate({\n target: schema.packages.name,\n set: {\n tags: stringifyJSON(tags),\n lastUpdated: lastUpdated || new Date().toISOString(),\n cachedAt: new Date().toISOString(),\n },\n })\n // Log to monitoring system instead of console\n return result\n } catch (_error: unknown) {\n logger.error(\n `[DB ERROR] Failed to upsert cached package ${name}`,\n _error,\n )\n return null\n }\n },\n\n async getCachedPackage(name: string) {\n try {\n const result = await db\n .select()\n .from(schema.packages)\n .where(sql`name = ${name}`)\n .get()\n if (!result) return null\n return {\n name: result.name,\n tags: parseJSON(result.tags) as Record<string, string>,\n lastUpdated: result.lastUpdated || null,\n origin: result.origin || null,\n upstream: result.upstream || null,\n cachedAt: result.cachedAt || null,\n }\n } catch (error) {\n logger.error(\n `[DB ERROR] Failed to get cached package ${name}`,\n error,\n )\n return null\n }\n },\n\n async isPackageCacheValid(name: string, ttlMinutes = 5) {\n try {\n const pkg = await this.getCachedPackage(name)\n if (!pkg?.cachedAt || pkg.origin !== 'upstream') {\n return false\n }\n\n const cacheTime = new Date(pkg.cachedAt).getTime()\n const now = new Date().getTime()\n const ttlMs = ttlMinutes * 60 * 1000\n\n return now - cacheTime < ttlMs\n } catch (error) {\n logger.error(\n `[DB ERROR] Failed to check cache validity for ${name}`,\n error,\n )\n return false\n }\n },\n\n // Token operations\n async getToken(token: string): Promise<ParsedToken | null> {\n try {\n const result = await db\n .select()\n .from(schema.tokens)\n .where(sql`token = ${token}`)\n .get()\n if (!result) return null\n return {\n token: result.token,\n uuid: result.uuid,\n scope: parseJSON(result.scope) as {\n values: string[]\n types: {\n pkg?: { read: boolean; write: boolean }\n user?: { read: boolean; write: boolean }\n }\n }[],\n } as ParsedToken\n } catch (_error: unknown) {\n logger.error(\n `[DB ERROR] Failed to get token ${token}`,\n _error,\n )\n return null\n }\n },\n\n // Validate if a user can access or modify another user's token\n async validateTokenAccess(authToken: string, targetUuid: string) {\n // Special characters validation for UUIDs\n const specialChars = ['~', '!', '*', '^', '&']\n if (\n targetUuid &&\n specialChars.some(char => targetUuid.startsWith(char))\n ) {\n throw new Error(\n 'Invalid uuid - uuids can not start with special characters (ex. - ~ ! * ^ &)',\n )\n }\n\n // If no auth token provided, cannot proceed\n if (!authToken) {\n throw new Error('Unauthorized')\n }\n\n // Get authenticated user from token\n const authUser = await this.getToken(authToken)\n if (!authUser?.uuid) {\n throw new Error('Unauthorized')\n }\n\n // Allow users to manage their own tokens\n if (authUser.uuid === targetUuid) {\n return true\n }\n\n // Check user permissions\n const scope = authUser.scope as {\n values: string[]\n types: {\n pkg?: { read: boolean; write: boolean }\n user?: { read: boolean; write: boolean }\n }\n }[]\n const uuid = targetUuid\n\n // Parse token access permissions - variables kept for future use\n const _read = ['get']\n const _write = ['put', 'post', 'delete']\n let anyUser = false\n let specificUser = false\n let writeAccess = false\n\n if (Array.isArray(scope)) {\n for (const s of scope) {\n if (s.types.user) {\n if (s.values.includes('*')) {\n anyUser = true\n }\n if (s.values.includes(`~${uuid}`)) {\n specificUser = true\n }\n if ((anyUser || specificUser) && s.types.user.write) {\n writeAccess = true\n }\n }\n }\n }\n\n // Check if user has appropriate permissions\n if ((!anyUser && !specificUser) || !writeAccess) {\n throw new Error('Unauthorized')\n }\n\n return true\n },\n\n async upsertToken(\n token: string,\n uuid: string,\n scope: {\n values: string[]\n types: {\n pkg?: { read: boolean; write: boolean }\n user?: { read: boolean; write: boolean }\n }\n }[],\n authToken?: string,\n ) {\n // Validate the UUID doesn't start with special characters\n const specialChars = ['~', '!', '*', '^', '&']\n if (uuid && specialChars.some(char => uuid.startsWith(char))) {\n throw new Error(\n 'Invalid uuid - uuids can not start with special characters (ex. - ~ ! * ^ &)',\n )\n }\n\n // If authToken is provided, validate access permissions\n if (authToken) {\n await this.validateTokenAccess(authToken, uuid)\n }\n\n // After validation passes, perform the database operation\n\n return db\n .insert(schema.tokens)\n .values({\n token,\n uuid,\n scope: stringifyJSON(scope),\n })\n .onConflictDoUpdate({\n target: schema.tokens.token,\n set: {\n uuid,\n scope: stringifyJSON(scope),\n },\n })\n },\n\n async deleteToken(token: string, authToken?: string) {\n if (authToken) {\n // Get the token data to check its UUID\n const tokenData = await this.getToken(token)\n if (tokenData?.uuid) {\n // Validate access permission for this UUID\n await this.validateTokenAccess(authToken, tokenData.uuid)\n }\n }\n\n return db\n .delete(schema.tokens)\n .where(sql`token = ${token}`)\n .run()\n },\n\n // Version operations\n async getVersion(spec: string): Promise<ParsedVersion | null> {\n try {\n const result = await db\n .select()\n .from(schema.versions)\n .where(sql`spec = ${spec}`)\n .get()\n if (!result) return null\n return {\n spec: result.spec,\n version: result.spec.split('@')[1] ?? '',\n manifest: parseJSON(result.manifest) as Record<string, any>,\n published_at: result.publishedAt || null,\n origin: result.origin || null,\n upstream: result.upstream || null,\n cachedAt: result.cachedAt || null,\n } as ParsedVersion\n } catch (_error: unknown) {\n logger.error(\n `[DB ERROR] Failed to get version ${spec}`,\n _error,\n )\n return null\n }\n },\n\n async upsertVersion(\n spec: string,\n manifest: Record<string, any>,\n publishedAt: string,\n ) {\n try {\n // Attempting to upsert version: ${spec}\n // Make sure manifest is an object\n if (typeof manifest !== 'object') {\n // Invalid manifest for ${spec}, received: ${typeof manifest}\n manifest = {\n name: spec.split('@')[0],\n version: spec.split('@').slice(1).join('@'),\n }\n }\n\n const result = await db\n .insert(schema.versions)\n .values({\n spec,\n manifest: stringifyJSON(manifest),\n publishedAt,\n })\n .onConflictDoUpdate({\n target: schema.versions.spec,\n set: {\n manifest: stringifyJSON(manifest),\n publishedAt,\n },\n })\n // Successfully upserted version: ${spec}\n return result\n } catch (error) {\n logger.error(\n `[DB ERROR] Failed to upsert version ${spec}`,\n error,\n )\n return { success: true } // Mock successful operation\n }\n },\n\n async upsertCachedVersion(\n spec: string,\n manifest: Record<string, any>,\n upstream: string,\n publishedAt: string,\n ) {\n try {\n // Attempting to upsert cached version: ${spec} from upstream: ${upstream}\n\n // Make sure manifest is an object\n if (typeof manifest !== 'object') {\n // Invalid manifest for ${spec}, received: ${typeof manifest}\n manifest = {\n name: spec.split('@')[0],\n version: spec.split('@').slice(1).join('@'),\n }\n }\n\n const result = await db\n .insert(schema.versions)\n .values({\n spec,\n manifest: stringifyJSON(manifest),\n publishedAt,\n origin: 'upstream',\n upstream,\n cachedAt: new Date().toISOString(),\n })\n .onConflictDoUpdate({\n target: schema.versions.spec,\n set: {\n manifest: stringifyJSON(manifest),\n cachedAt: new Date().toISOString(),\n },\n })\n // Successfully upserted cached version: ${spec}\n return result\n } catch (error) {\n logger.error(\n `[DB ERROR] Failed to upsert cached version ${spec}`,\n error,\n )\n return { success: true }\n }\n },\n\n async getCachedVersion(spec: string) {\n try {\n // Attempting to get cached version: ${spec}\n const result = await db\n .select()\n .from(schema.versions)\n .where(sql`spec = ${spec}`)\n .get()\n if (!result) return null\n\n // Extract version from spec, handling scoped packages correctly\n let version\n const lastAtIndex = result.spec.lastIndexOf('@')\n if (lastAtIndex > 0) {\n version = result.spec.substring(lastAtIndex + 1)\n } else {\n // Fallback: assume everything after first @ is version\n version = result.spec.split('@').slice(1).join('@')\n }\n\n return {\n spec: result.spec,\n version,\n manifest: parseJSON(result.manifest) as Record<string, any>,\n published_at: result.publishedAt || null,\n origin: result.origin || null,\n upstream: result.upstream || null,\n cachedAt: result.cachedAt || null,\n }\n } catch (error) {\n logger.error(\n `[DB ERROR] Failed to get cached version ${spec}`,\n error,\n )\n return null\n }\n },\n\n async isVersionCacheValid(spec: string, ttlMinutes = 525600) {\n // Default 1 year for manifests\n try {\n const version = await this.getCachedVersion(spec)\n if (!version?.cachedAt || version.origin !== 'upstream') {\n return false\n }\n\n const cacheTime = new Date(version.cachedAt).getTime()\n const now = new Date().getTime()\n const ttlMs = ttlMinutes * 60 * 1000\n\n return now - cacheTime < ttlMs\n } catch (error) {\n logger.error(\n `[DB ERROR] Failed to check version cache validity for ${spec}`,\n error,\n )\n return false\n }\n },\n\n // Search operations\n async searchPackages(query: string, scope?: string) {\n const results = await db\n .select()\n .from(schema.packages)\n .where(\n scope ?\n sql`name LIKE ${`${scope}/%`} AND name LIKE ${`%${query}%`}`\n : sql`name LIKE ${`%${query}%`}`,\n )\n .all()\n\n return results.map(result => ({\n name: result.name,\n tags: parseJSON(result.tags) as Record<string, string>,\n }))\n },\n\n // Get all versions for a specific package\n async getVersionsByPackage(\n packageName: string,\n ): Promise<ParsedVersion[]> {\n try {\n // Retrieving all versions for package: ${packageName}\n const results = await db\n .select()\n .from(schema.versions)\n .where(sql`spec LIKE ${`${packageName}@%`}`)\n .all()\n\n if (results.length === 0) {\n // No versions found for package: ${packageName}\n return []\n }\n\n return results.map(result => {\n const manifest = parseJSON(result.manifest) as Record<\n string,\n any\n >\n\n // Extract version from spec, handling scoped packages correctly\n // For \"@scope/package@version\" -> extract \"version\"\n // For \"package@version\" -> extract \"version\"\n let version\n const lastAtIndex = result.spec.lastIndexOf('@')\n if (lastAtIndex > 0) {\n version = result.spec.substring(lastAtIndex + 1)\n } else {\n // Fallback: assume everything after first @ is version\n version = result.spec.split('@').slice(1).join('@')\n }\n\n return {\n spec: result.spec,\n version,\n manifest,\n published_at: result.publishedAt || null,\n origin: result.origin || null,\n upstream: result.upstream || null,\n cachedAt: result.cachedAt || null,\n } as ParsedVersion\n })\n } catch (error) {\n logger.error(\n `[DB ERROR] Failed to get versions for package ${packageName}`,\n error,\n )\n return [] // Return empty array on error\n }\n },\n }\n}\n", "/// <reference types=\"@cloudflare/workers-types\" />\nimport type { D1Database as MiniflareD1Database } from '@miniflare/d1';\nimport type { BatchItem, BatchResponse } from '~/batch.ts';\nimport { entityKind } from '~/entity.ts';\nimport { DefaultLogger } from '~/logger.ts';\nimport {\n\tcreateTableRelationsHelpers,\n\textractTablesRelationalConfig,\n\ttype ExtractTablesWithRelations,\n\ttype RelationalSchemaConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport { BaseSQLiteDatabase } from '~/sqlite-core/db.ts';\nimport { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { DrizzleConfig, IfNotImported } from '~/utils.ts';\nimport { SQLiteD1Session } from './session.ts';\n\nexport type AnyD1Database = IfNotImported<\n\tD1Database,\n\tMiniflareD1Database,\n\tD1Database | IfNotImported<MiniflareD1Database, never, MiniflareD1Database>\n>;\n\nexport class DrizzleD1Database<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n> extends BaseSQLiteDatabase<'async', D1Result, TSchema> {\n\tstatic override readonly [entityKind]: string = 'D1Database';\n\n\t/** @internal */\n\tdeclare readonly session: SQLiteD1Session<TSchema, ExtractTablesWithRelations<TSchema>>;\n\n\tasync batch<U extends BatchItem<'sqlite'>, T extends Readonly<[U, ...U[]]>>(\n\t\tbatch: T,\n\t): Promise<BatchResponse<T>> {\n\t\treturn this.session.batch(batch) as Promise<BatchResponse<T>>;\n\t}\n}\n\nexport function drizzle<\n\tTSchema extends Record<string, unknown> = Record<string, never>,\n\tTClient extends AnyD1Database = AnyD1Database,\n>(\n\tclient: TClient,\n\tconfig: DrizzleConfig<TSchema> = {},\n): DrizzleD1Database<TSchema> & {\n\t$client: TClient;\n} {\n\tconst dialect = new SQLiteAsyncDialect({ casing: config.casing });\n\tlet logger;\n\tif (config.logger === true) {\n\t\tlogger = new DefaultLogger();\n\t} else if (config.logger !== false) {\n\t\tlogger = config.logger;\n\t}\n\n\tlet schema: RelationalSchemaConfig<TablesRelationalConfig> | undefined;\n\tif (config.schema) {\n\t\tconst tablesConfig = extractTablesRelationalConfig(\n\t\t\tconfig.schema,\n\t\t\tcreateTableRelationsHelpers,\n\t\t);\n\t\tschema = {\n\t\t\tfullSchema: config.schema,\n\t\t\tschema: tablesConfig.tables,\n\t\t\ttableNamesMap: tablesConfig.tableNamesMap,\n\t\t};\n\t}\n\n\tconst session = new SQLiteD1Session(client as D1Database, dialect, schema, { logger, cache: config.cache });\n\tconst db = new DrizzleD1Database('async', dialect, session, schema) as DrizzleD1Database<TSchema>;\n\t(<any> db).$client = client;\n\t(<any> db).$cache = config.cache;\n\tif ((<any> db).$cache) {\n\t\t(<any> db).$cache['invalidate'] = config.cache?.onMutate;\n\t}\n\n\treturn db as any;\n}\n", "export const entityKind = Symbol.for('drizzle:entityKind');\nexport const hasOwnEntityKind = Symbol.for('drizzle:hasOwnEntityKind');\n\nexport interface DrizzleEntity {\n\t[entityKind]: string;\n}\n\nexport type DrizzleEntityClass<T> =\n\t& ((abstract new(...args: any[]) => T) | (new(...args: any[]) => T))\n\t& DrizzleEntity;\n\nexport function is<T extends DrizzleEntityClass<any>>(value: any, type: T): value is InstanceType<T> {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (value instanceof type) { // eslint-disable-line no-instanceof/no-instanceof\n\t\treturn true;\n\t}\n\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) {\n\t\tthrow new Error(\n\t\t\t`Class \"${\n\t\t\t\ttype.name ?? '<unknown>'\n\t\t\t}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`,\n\t\t);\n\t}\n\n\tlet cls = Object.getPrototypeOf(value).constructor;\n\tif (cls) {\n\t\t// Traverse the prototype chain to find the entityKind\n\t\twhile (cls) {\n\t\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tcls = Object.getPrototypeOf(cls);\n\t\t}\n\t}\n\n\treturn false;\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport interface Logger {\n\tlogQuery(query: string, params: unknown[]): void;\n}\n\nexport interface LogWriter {\n\twrite(message: string): void;\n}\n\nexport class ConsoleLogWriter implements LogWriter {\n\tstatic readonly [entityKind]: string = 'ConsoleLogWriter';\n\n\twrite(message: string) {\n\t\tconsole.log(message);\n\t}\n}\n\nexport class DefaultLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'DefaultLogger';\n\n\treadonly writer: LogWriter;\n\n\tconstructor(config?: { writer: LogWriter }) {\n\t\tthis.writer = config?.writer ?? new ConsoleLogWriter();\n\t}\n\n\tlogQuery(query: string, params: unknown[]): void {\n\t\tconst stringifiedParams = params.map((p) => {\n\t\t\ttry {\n\t\t\t\treturn JSON.stringify(p);\n\t\t\t} catch {\n\t\t\t\treturn String(p);\n\t\t\t}\n\t\t});\n\t\tconst paramsStr = stringifiedParams.length ? ` -- params: [${stringifiedParams.join(', ')}]` : '';\n\t\tthis.writer.write(`Query: ${query}${paramsStr}`);\n\t}\n}\n\nexport class NoopLogger implements Logger {\n\tstatic readonly [entityKind]: string = 'NoopLogger';\n\n\tlogQuery(): void {\n\t\t// noop\n\t}\n}\n", "import { type AnyTable, getTableUniqueName, type InferModelFromColumns, Table } from '~/table.ts';\nimport { type AnyColumn, Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { PrimaryKeyBuilder } from './pg-core/primary-keys.ts';\nimport {\n\tand,\n\tasc,\n\tbetween,\n\tdesc,\n\teq,\n\texists,\n\tgt,\n\tgte,\n\tilike,\n\tinArray,\n\tisNotNull,\n\tisNull,\n\tlike,\n\tlt,\n\tlte,\n\tne,\n\tnot,\n\tnotBetween,\n\tnotExists,\n\tnotIlike,\n\tnotInArray,\n\tnotLike,\n\tor,\n} from './sql/expressions/index.ts';\nimport { type Placeholder, SQL, sql } from './sql/sql.ts';\nimport type { Assume, ColumnsWithTable, Equal, Simplify, ValueOrArray } from './utils.ts';\n\nexport abstract class Relation<TTableName extends string = string> {\n\tstatic readonly [entityKind]: string = 'Relation';\n\n\tdeclare readonly $brand: 'Relation';\n\treadonly referencedTableName: TTableName;\n\tfieldName!: string;\n\n\tconstructor(\n\t\treadonly sourceTable: Table,\n\t\treadonly referencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly relationName: string | undefined,\n\t) {\n\t\tthis.referencedTableName = referencedTable[Table.Symbol.Name] as TTableName;\n\t}\n\n\tabstract withFieldName(fieldName: string): Relation<TTableName>;\n}\n\nexport class Relations<\n\tTTableName extends string = string,\n\tTConfig extends Record<string, Relation> = Record<string, Relation>,\n> {\n\tstatic readonly [entityKind]: string = 'Relations';\n\n\tdeclare readonly $brand: 'Relations';\n\n\tconstructor(\n\t\treadonly table: AnyTable<{ name: TTableName }>,\n\t\treadonly config: (helpers: TableRelationsHelpers<TTableName>) => TConfig,\n\t) {}\n}\n\nexport class One<\n\tTTableName extends string = string,\n\tTIsNullable extends boolean = boolean,\n> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'One';\n\n\tdeclare protected $relationBrand: 'One';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config:\n\t\t\t| RelationConfig<\n\t\t\t\tTTableName,\n\t\t\t\tstring,\n\t\t\t\tAnyColumn<{ tableName: TTableName }>[]\n\t\t\t>\n\t\t\t| undefined,\n\t\treadonly isNullable: TIsNullable,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): One<TTableName> {\n\t\tconst relation = new One(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t\tthis.isNullable,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport class Many<TTableName extends string> extends Relation<TTableName> {\n\tstatic override readonly [entityKind]: string = 'Many';\n\n\tdeclare protected $relationBrand: 'Many';\n\n\tconstructor(\n\t\tsourceTable: Table,\n\t\treferencedTable: AnyTable<{ name: TTableName }>,\n\t\treadonly config: { relationName: string } | undefined,\n\t) {\n\t\tsuper(sourceTable, referencedTable, config?.relationName);\n\t}\n\n\twithFieldName(fieldName: string): Many<TTableName> {\n\t\tconst relation = new Many(\n\t\t\tthis.sourceTable,\n\t\t\tthis.referencedTable,\n\t\t\tthis.config,\n\t\t);\n\t\trelation.fieldName = fieldName;\n\t\treturn relation;\n\t}\n}\n\nexport type TableRelationsKeysOnly<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n\tK extends keyof TSchema,\n> = TSchema[K] extends Relations<TTableName> ? K : never;\n\nexport type ExtractTableRelationsFromSchema<\n\tTSchema extends Record<string, unknown>,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TableRelationsKeysOnly<\n\t\t\t\tTSchema,\n\t\t\t\tTTableName,\n\t\t\t\tK\n\t\t\t>\n\t\t]: TSchema[K] extends Relations<TTableName, infer TConfig> ? TConfig : never;\n\t}\n>;\n\nexport type ExtractObjectValues<T> = T[keyof T];\n\nexport type ExtractRelationsFromTableExtraConfigSchema<\n\tTConfig extends unknown[],\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TConfig as TConfig[K] extends Relations<any> ? K\n\t\t\t\t: never\n\t\t]: TConfig[K] extends Relations<infer TRelationConfig> ? TRelationConfig\n\t\t\t: never;\n\t}\n>;\n\nexport function getOperators() {\n\treturn {\n\t\tand,\n\t\tbetween,\n\t\teq,\n\t\texists,\n\t\tgt,\n\t\tgte,\n\t\tilike,\n\t\tinArray,\n\t\tisNull,\n\t\tisNotNull,\n\t\tlike,\n\t\tlt,\n\t\tlte,\n\t\tne,\n\t\tnot,\n\t\tnotBetween,\n\t\tnotExists,\n\t\tnotLike,\n\t\tnotIlike,\n\t\tnotInArray,\n\t\tor,\n\t\tsql,\n\t};\n}\n\nexport type Operators = ReturnType<typeof getOperators>;\n\nexport function getOrderByOperators() {\n\treturn {\n\t\tsql,\n\t\tasc,\n\t\tdesc,\n\t};\n}\n\nexport type OrderByOperators = ReturnType<typeof getOrderByOperators>;\n\nexport type FindTableByDBName<\n\tTSchema extends TablesRelationalConfig,\n\tTTableName extends string,\n> = ExtractObjectValues<\n\t{\n\t\t[\n\t\t\tK in keyof TSchema as TSchema[K]['dbName'] extends TTableName ? K\n\t\t\t\t: never\n\t\t]: TSchema[K];\n\t}\n>;\n\nexport type DBQueryConfig<\n\tTRelationType extends 'one' | 'many' = 'one' | 'many',\n\tTIsRoot extends boolean = boolean,\n\tTSchema extends TablesRelationalConfig = TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig = TableRelationalConfig,\n> =\n\t& {\n\t\tcolumns?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['columns']]?: boolean;\n\t\t\t}\n\t\t\t| undefined;\n\t\twith?:\n\t\t\t| {\n\t\t\t\t[K in keyof TTableConfig['relations']]?:\n\t\t\t\t\t| true\n\t\t\t\t\t| DBQueryConfig<\n\t\t\t\t\t\tTTableConfig['relations'][K] extends One ? 'one' : 'many',\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\tFindTableByDBName<\n\t\t\t\t\t\t\tTSchema,\n\t\t\t\t\t\t\tTTableConfig['relations'][K]['referencedTableName']\n\t\t\t\t\t\t>\n\t\t\t\t\t>\n\t\t\t\t\t| undefined;\n\t\t\t}\n\t\t\t| undefined;\n\t\textras?:\n\t\t\t| Record<string, SQL.Aliased>\n\t\t\t| ((\n\t\t\t\tfields: Simplify<\n\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t>,\n\t\t\t\toperators: { sql: Operators['sql'] },\n\t\t\t) => Record<string, SQL.Aliased>)\n\t\t\t| undefined;\n\t}\n\t& (TRelationType extends 'many' ?\n\t\t\t& {\n\t\t\t\twhere?:\n\t\t\t\t\t| SQL\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: Operators,\n\t\t\t\t\t) => SQL | undefined);\n\t\t\t\torderBy?:\n\t\t\t\t\t| ValueOrArray<AnyColumn | SQL>\n\t\t\t\t\t| ((\n\t\t\t\t\t\tfields: Simplify<\n\t\t\t\t\t\t\t[TTableConfig['columns']] extends [never] ? {}\n\t\t\t\t\t\t\t\t: TTableConfig['columns']\n\t\t\t\t\t\t>,\n\t\t\t\t\t\toperators: OrderByOperators,\n\t\t\t\t\t) => ValueOrArray<AnyColumn | SQL>)\n\t\t\t\t\t| undefined;\n\t\t\t\tlimit?: number | Placeholder | undefined;\n\t\t\t}\n\t\t\t& (TIsRoot extends true ? {\n\t\t\t\t\toffset?: number | Placeholder | undefined;\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t: {});\n\nexport interface TableRelationalConfig {\n\ttsName: string;\n\tdbName: string;\n\tcolumns: Record<string, Column>;\n\trelations: Record<string, Relation>;\n\tprimaryKey: AnyColumn[];\n\tschema?: string;\n}\n\nexport type TablesRelationalConfig = Record<string, TableRelationalConfig>;\n\nexport interface RelationalSchemaConfig<\n\tTSchema extends TablesRelationalConfig,\n> {\n\tfullSchema: Record<string, unknown>;\n\tschema: TSchema;\n\ttableNamesMap: Record<string, string>;\n}\n\nexport type ExtractTablesWithRelations<\n\tTSchema extends Record<string, unknown>,\n> = {\n\t[\n\t\tK in keyof TSchema as TSchema[K] extends Table ? K\n\t\t\t: never\n\t]: TSchema[K] extends Table ? {\n\t\t\ttsName: K & string;\n\t\t\tdbName: TSchema[K]['_']['name'];\n\t\t\tcolumns: TSchema[K]['_']['columns'];\n\t\t\trelations: ExtractTableRelationsFromSchema<\n\t\t\t\tTSchema,\n\t\t\t\tTSchema[K]['_']['name']\n\t\t\t>;\n\t\t\tprimaryKey: AnyColumn[];\n\t\t}\n\t\t: never;\n};\n\nexport type ReturnTypeOrValue<T> = T extends (...args: any[]) => infer R ? R\n\t: T;\n\nexport type BuildRelationResult<\n\tTSchema extends TablesRelationalConfig,\n\tTInclude,\n\tTRelations extends Record<string, Relation>,\n> = {\n\t[\n\t\tK in\n\t\t\t& NonUndefinedKeysOnly<TInclude>\n\t\t\t& keyof TRelations\n\t]: TRelations[K] extends infer TRel extends Relation ? BuildQueryResult<\n\t\t\tTSchema,\n\t\t\tFindTableByDBName<TSchema, TRel['referencedTableName']>,\n\t\t\tAssume<TInclude[K], true | Record<string, unknown>>\n\t\t> extends infer TResult ? TRel extends One ?\n\t\t\t\t\t| TResult\n\t\t\t\t\t| (Equal<TRel['isNullable'], false> extends true ? null : never)\n\t\t\t: TResult[]\n\t\t: never\n\t\t: never;\n};\n\nexport type NonUndefinedKeysOnly<T> =\n\t& ExtractObjectValues<\n\t\t{\n\t\t\t[K in keyof T as T[K] extends undefined ? never : K]: K;\n\t\t}\n\t>\n\t& keyof T;\n\nexport type BuildQueryResult<\n\tTSchema extends TablesRelationalConfig,\n\tTTableConfig extends TableRelationalConfig,\n\tTFullSelection extends true | Record<string, unknown>,\n> = Equal<TFullSelection, true> extends true ? InferModelFromColumns<TTableConfig['columns']>\n\t: TFullSelection extends Record<string, unknown> ? Simplify<\n\t\t\t& (TFullSelection['columns'] extends Record<string, unknown> ? InferModelFromColumns<\n\t\t\t\t\t{\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tK in Equal<\n\t\t\t\t\t\t\t\tExclude<\n\t\t\t\t\t\t\t\t\tTFullSelection['columns'][\n\t\t\t\t\t\t\t\t\t\t& keyof TFullSelection['columns']\n\t\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tundefined\n\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t> extends true ? Exclude<\n\t\t\t\t\t\t\t\t\tkeyof TTableConfig['columns'],\n\t\t\t\t\t\t\t\t\tNonUndefinedKeysOnly<TFullSelection['columns']>\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t:\n\t\t\t\t\t\t\t\t\t& {\n\t\t\t\t\t\t\t\t\t\t[K in keyof TFullSelection['columns']]: Equal<\n\t\t\t\t\t\t\t\t\t\t\tTFullSelection['columns'][K],\n\t\t\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t\t\t> extends true ? K\n\t\t\t\t\t\t\t\t\t\t\t: never;\n\t\t\t\t\t\t\t\t\t}[keyof TFullSelection['columns']]\n\t\t\t\t\t\t\t\t\t& keyof TTableConfig['columns']\n\t\t\t\t\t\t]: TTableConfig['columns'][K];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t: InferModelFromColumns<TTableConfig['columns']>)\n\t\t\t& (TFullSelection['extras'] extends\n\t\t\t\t| Record<string, unknown>\n\t\t\t\t| ((...args: any[]) => Record<string, unknown>) ? {\n\t\t\t\t\t[\n\t\t\t\t\t\tK in NonUndefinedKeysOnly<\n\t\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>\n\t\t\t\t\t\t>\n\t\t\t\t\t]: Assume<\n\t\t\t\t\t\tReturnTypeOrValue<TFullSelection['extras']>[K],\n\t\t\t\t\t\tSQL.Aliased\n\t\t\t\t\t>['_']['type'];\n\t\t\t\t}\n\t\t\t\t: {})\n\t\t\t& (TFullSelection['with'] extends Record<string, unknown> ? BuildRelationResult<\n\t\t\t\t\tTSchema,\n\t\t\t\t\tTFullSelection['with'],\n\t\t\t\t\tTTableConfig['relations']\n\t\t\t\t>\n\t\t\t\t: {})\n\t\t>\n\t: never;\n\nexport interface RelationConfig<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> {\n\trelationName?: string;\n\tfields: TColumns;\n\treferences: ColumnsWithTable<TTableName, TForeignTableName, TColumns>;\n}\n\nexport function extractTablesRelationalConfig<\n\tTTables extends TablesRelationalConfig,\n>(\n\tschema: Record<string, unknown>,\n\tconfigHelpers: (table: Table) => any,\n): { tables: TTables; tableNamesMap: Record<string, string> } {\n\tif (\n\t\tObject.keys(schema).length === 1\n\t\t&& 'default' in schema\n\t\t&& !is(schema['default'], Table)\n\t) {\n\t\tschema = schema['default'] as Record<string, unknown>;\n\t}\n\n\t// table DB name -> schema table key\n\tconst tableNamesMap: Record<string, string> = {};\n\t// Table relations found before their tables - need to buffer them until we know the schema table key\n\tconst relationsBuffer: Record<\n\t\tstring,\n\t\t{ relations: Record<string, Relation>; primaryKey?: AnyColumn[] }\n\t> = {};\n\tconst tablesConfig: TablesRelationalConfig = {};\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (is(value, Table)) {\n\t\t\tconst dbName = getTableUniqueName(value);\n\t\t\tconst bufferedRelations = relationsBuffer[dbName];\n\t\t\ttableNamesMap[dbName] = key;\n\t\t\ttablesConfig[key] = {\n\t\t\t\ttsName: key,\n\t\t\t\tdbName: value[Table.Symbol.Name],\n\t\t\t\tschema: value[Table.Symbol.Schema],\n\t\t\t\tcolumns: value[Table.Symbol.Columns],\n\t\t\t\trelations: bufferedRelations?.relations ?? {},\n\t\t\t\tprimaryKey: bufferedRelations?.primaryKey ?? [],\n\t\t\t};\n\n\t\t\t// Fill in primary keys\n\t\t\tfor (\n\t\t\t\tconst column of Object.values(\n\t\t\t\t\t(value as Table)[Table.Symbol.Columns],\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tif (column.primary) {\n\t\t\t\t\ttablesConfig[key]!.primaryKey.push(column);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst extraConfig = value[Table.Symbol.ExtraConfigBuilder]?.((value as Table)[Table.Symbol.ExtraConfigColumns]);\n\t\t\tif (extraConfig) {\n\t\t\t\tfor (const configEntry of Object.values(extraConfig)) {\n\t\t\t\t\tif (is(configEntry, PrimaryKeyBuilder)) {\n\t\t\t\t\t\ttablesConfig[key]!.primaryKey.push(...configEntry.columns);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (is(value, Relations)) {\n\t\t\tconst dbName = getTableUniqueName(value.table);\n\t\t\tconst tableName = tableNamesMap[dbName];\n\t\t\tconst relations: Record<string, Relation> = value.config(\n\t\t\t\tconfigHelpers(value.table),\n\t\t\t);\n\t\t\tlet primaryKey: AnyColumn[] | undefined;\n\n\t\t\tfor (const [relationName, relation] of Object.entries(relations)) {\n\t\t\t\tif (tableName) {\n\t\t\t\t\tconst tableConfig = tablesConfig[tableName]!;\n\t\t\t\t\ttableConfig.relations[relationName] = relation;\n\t\t\t\t\tif (primaryKey) {\n\t\t\t\t\t\ttableConfig.primaryKey.push(...primaryKey);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!(dbName in relationsBuffer)) {\n\t\t\t\t\t\trelationsBuffer[dbName] = {\n\t\t\t\t\t\t\trelations: {},\n\t\t\t\t\t\t\tprimaryKey,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\trelationsBuffer[dbName]!.relations[relationName] = relation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { tables: tablesConfig as TTables, tableNamesMap };\n}\n\nexport function relations<\n\tTTableName extends string,\n\tTRelations extends Record<string, Relation<any>>,\n>(\n\ttable: AnyTable<{ name: TTableName }>,\n\trelations: (helpers: TableRelationsHelpers<TTableName>) => TRelations,\n): Relations<TTableName, TRelations> {\n\treturn new Relations<TTableName, TRelations>(\n\t\ttable,\n\t\t(helpers: TableRelationsHelpers<TTableName>) =>\n\t\t\tObject.fromEntries(\n\t\t\t\tObject.entries(relations(helpers)).map(([key, value]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue.withFieldName(key),\n\t\t\t\t]),\n\t\t\t) as TRelations,\n\t);\n}\n\nexport function createOne<TTableName extends string>(sourceTable: Table) {\n\treturn function one<\n\t\tTForeignTable extends Table,\n\t\tTColumns extends [\n\t\t\tAnyColumn<{ tableName: TTableName }>,\n\t\t\t...AnyColumn<{ tableName: TTableName }>[],\n\t\t],\n\t>(\n\t\ttable: TForeignTable,\n\t\tconfig?: RelationConfig<TTableName, TForeignTable['_']['name'], TColumns>,\n\t): One<\n\t\tTForeignTable['_']['name'],\n\t\tEqual<TColumns[number]['_']['notNull'], true>\n\t> {\n\t\treturn new One(\n\t\t\tsourceTable,\n\t\t\ttable,\n\t\t\tconfig,\n\t\t\t(config?.fields.reduce<boolean>((res, f) => res && f.notNull, true)\n\t\t\t\t?? false) as Equal<TColumns[number]['_']['notNull'], true>,\n\t\t);\n\t};\n}\n\nexport function createMany(sourceTable: Table) {\n\treturn function many<TForeignTable extends Table>(\n\t\treferencedTable: TForeignTable,\n\t\tconfig?: { relationName: string },\n\t): Many<TForeignTable['_']['name']> {\n\t\treturn new Many(sourceTable, referencedTable, config);\n\t};\n}\n\nexport interface NormalizedRelation {\n\tfields: AnyColumn[];\n\treferences: AnyColumn[];\n}\n\nexport function normalizeRelation(\n\tschema: TablesRelationalConfig,\n\ttableNamesMap: Record<string, string>,\n\trelation: Relation,\n): NormalizedRelation {\n\tif (is(relation, One) && relation.config) {\n\t\treturn {\n\t\t\tfields: relation.config.fields,\n\t\t\treferences: relation.config.references,\n\t\t};\n\t}\n\n\tconst referencedTableTsName = tableNamesMap[getTableUniqueName(relation.referencedTable)];\n\tif (!referencedTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${relation.referencedTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst referencedTableConfig = schema[referencedTableTsName];\n\tif (!referencedTableConfig) {\n\t\tthrow new Error(`Table \"${referencedTableTsName}\" not found in schema`);\n\t}\n\n\tconst sourceTable = relation.sourceTable;\n\tconst sourceTableTsName = tableNamesMap[getTableUniqueName(sourceTable)];\n\tif (!sourceTableTsName) {\n\t\tthrow new Error(\n\t\t\t`Table \"${sourceTable[Table.Symbol.Name]}\" not found in schema`,\n\t\t);\n\t}\n\n\tconst reverseRelations: Relation[] = [];\n\tfor (\n\t\tconst referencedTableRelation of Object.values(\n\t\t\treferencedTableConfig.relations,\n\t\t)\n\t) {\n\t\tif (\n\t\t\t(relation.relationName\n\t\t\t\t&& relation !== referencedTableRelation\n\t\t\t\t&& referencedTableRelation.relationName === relation.relationName)\n\t\t\t|| (!relation.relationName\n\t\t\t\t&& referencedTableRelation.referencedTable === relation.sourceTable)\n\t\t) {\n\t\t\treverseRelations.push(referencedTableRelation);\n\t\t}\n\t}\n\n\tif (reverseRelations.length > 1) {\n\t\tthrow relation.relationName\n\t\t\t? new Error(\n\t\t\t\t`There are multiple relations with name \"${relation.relationName}\" in table \"${referencedTableTsName}\"`,\n\t\t\t)\n\t\t\t: new Error(\n\t\t\t\t`There are multiple relations between \"${referencedTableTsName}\" and \"${\n\t\t\t\t\trelation.sourceTable[Table.Symbol.Name]\n\t\t\t\t}\". Please specify relation name`,\n\t\t\t);\n\t}\n\n\tif (\n\t\treverseRelations[0]\n\t\t&& is(reverseRelations[0], One)\n\t\t&& reverseRelations[0].config\n\t) {\n\t\treturn {\n\t\t\tfields: reverseRelations[0].config.references,\n\t\t\treferences: reverseRelations[0].config.fields,\n\t\t};\n\t}\n\n\tthrow new Error(\n\t\t`There is not enough information to infer relation \"${sourceTableTsName}.${relation.fieldName}\"`,\n\t);\n}\n\nexport function createTableRelationsHelpers<TTableName extends string>(\n\tsourceTable: AnyTable<{ name: TTableName }>,\n) {\n\treturn {\n\t\tone: createOne<TTableName>(sourceTable),\n\t\tmany: createMany(sourceTable),\n\t};\n}\n\nexport type TableRelationsHelpers<TTableName extends string> = ReturnType<\n\ttypeof createTableRelationsHelpers<TTableName>\n>;\n\nexport interface BuildRelationalQueryResult<\n\tTTable extends Table = Table,\n\tTColumn extends Column = Column,\n> {\n\ttableTsKey: string;\n\tselection: {\n\t\tdbKey: string;\n\t\ttsKey: string;\n\t\tfield: TColumn | SQL | SQL.Aliased;\n\t\trelationTableTsKey: string | undefined;\n\t\tisJson: boolean;\n\t\tisExtra?: boolean;\n\t\tselection: BuildRelationalQueryResult<TTable>['selection'];\n\t}[];\n\tsql: TTable | SQL;\n}\n\nexport function mapRelationalRow(\n\ttablesConfig: TablesRelationalConfig,\n\ttableConfig: TableRelationalConfig,\n\trow: unknown[],\n\tbuildQueryResultSelection: BuildRelationalQueryResult['selection'],\n\tmapColumnValue: (value: unknown) => unknown = (value) => value,\n): Record<string, unknown> {\n\tconst result: Record<string, unknown> = {};\n\n\tfor (\n\t\tconst [\n\t\t\tselectionItemIndex,\n\t\t\tselectionItem,\n\t\t] of buildQueryResultSelection.entries()\n\t) {\n\t\tif (selectionItem.isJson) {\n\t\t\tconst relation = tableConfig.relations[selectionItem.tsKey]!;\n\t\t\tconst rawSubRows = row[selectionItemIndex] as\n\t\t\t\t| unknown[]\n\t\t\t\t| null\n\t\t\t\t| [null]\n\t\t\t\t| string;\n\t\t\tconst subRows = typeof rawSubRows === 'string'\n\t\t\t\t? (JSON.parse(rawSubRows) as unknown[])\n\t\t\t\t: rawSubRows;\n\t\t\tresult[selectionItem.tsKey] = is(relation, One)\n\t\t\t\t? subRows\n\t\t\t\t\t&& mapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRows,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t: (subRows as unknown[][]).map((subRow) =>\n\t\t\t\t\tmapRelationalRow(\n\t\t\t\t\t\ttablesConfig,\n\t\t\t\t\t\ttablesConfig[selectionItem.relationTableTsKey!]!,\n\t\t\t\t\t\tsubRow,\n\t\t\t\t\t\tselectionItem.selection,\n\t\t\t\t\t\tmapColumnValue,\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t} else {\n\t\t\tconst value = mapColumnValue(row[selectionItemIndex]);\n\t\t\tconst field = selectionItem.field!;\n\t\t\tlet decoder;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tresult[selectionItem.tsKey] = value === null ? null : decoder.mapFromDriverValue(value);\n\t\t}\n\t}\n\n\treturn result;\n}\n", "import type { Column, GetColumnData } from './column.ts';\nimport { entityKind } from './entity.ts';\nimport type { OptionalKeyOnly, RequiredKeyOnly } from './operations.ts';\nimport type { SQLWrapper } from './sql/sql.ts';\nimport { TableName } from './table.utils.ts';\nimport type { Simplify, Update } from './utils.ts';\n\nexport interface TableConfig<TColumn extends Column = Column<any>> {\n\tname: string;\n\tschema: string | undefined;\n\tcolumns: Record<string, TColumn>;\n\tdialect: string;\n}\n\nexport type UpdateTableConfig<T extends TableConfig, TUpdate extends Partial<TableConfig>> = Required<\n\tUpdate<T, TUpdate>\n>;\n\n/** @internal */\nexport const Schema = Symbol.for('drizzle:Schema');\n\n/** @internal */\nexport const Columns = Symbol.for('drizzle:Columns');\n\n/** @internal */\nexport const ExtraConfigColumns = Symbol.for('drizzle:ExtraConfigColumns');\n\n/** @internal */\nexport const OriginalName = Symbol.for('drizzle:OriginalName');\n\n/** @internal */\nexport const BaseName = Symbol.for('drizzle:BaseName');\n\n/** @internal */\nexport const IsAlias = Symbol.for('drizzle:IsAlias');\n\n/** @internal */\nexport const ExtraConfigBuilder = Symbol.for('drizzle:ExtraConfigBuilder');\n\nconst IsDrizzleTable = Symbol.for('drizzle:IsDrizzleTable');\n\nexport interface Table<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends TableConfig = TableConfig,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n\nexport class Table<T extends TableConfig = TableConfig> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Table';\n\n\tdeclare readonly _: {\n\t\treadonly brand: 'Table';\n\t\treadonly config: T;\n\t\treadonly name: T['name'];\n\t\treadonly schema: T['schema'];\n\t\treadonly columns: T['columns'];\n\t\treadonly inferSelect: InferSelectModel<Table<T>>;\n\t\treadonly inferInsert: InferInsertModel<Table<T>>;\n\t};\n\n\tdeclare readonly $inferSelect: InferSelectModel<Table<T>>;\n\tdeclare readonly $inferInsert: InferInsertModel<Table<T>>;\n\n\t/** @internal */\n\tstatic readonly Symbol = {\n\t\tName: TableName as typeof TableName,\n\t\tSchema: Schema as typeof Schema,\n\t\tOriginalName: OriginalName as typeof OriginalName,\n\t\tColumns: Columns as typeof Columns,\n\t\tExtraConfigColumns: ExtraConfigColumns as typeof ExtraConfigColumns,\n\t\tBaseName: BaseName as typeof BaseName,\n\t\tIsAlias: IsAlias as typeof IsAlias,\n\t\tExtraConfigBuilder: ExtraConfigBuilder as typeof ExtraConfigBuilder,\n\t};\n\n\t/**\n\t * @internal\n\t * Can be changed if the table is aliased.\n\t */\n\t[TableName]: string;\n\n\t/**\n\t * @internal\n\t * Used to store the original name of the table, before any aliasing.\n\t */\n\t[OriginalName]: string;\n\n\t/** @internal */\n\t[Schema]: string | undefined;\n\n\t/** @internal */\n\t[Columns]!: T['columns'];\n\n\t/** @internal */\n\t[ExtraConfigColumns]!: Record<string, unknown>;\n\n\t/**\n\t * @internal\n\t * Used to store the table name before the transformation via the `tableCreator` functions.\n\t */\n\t[BaseName]: string;\n\n\t/** @internal */\n\t[IsAlias] = false;\n\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\n\t/** @internal */\n\t[ExtraConfigBuilder]: ((self: any) => Record<string, unknown> | unknown[]) | undefined = undefined;\n\n\tconstructor(name: string, schema: string | undefined, baseName: string) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[Schema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n}\n\nexport function isTable(table: unknown): table is Table {\n\treturn typeof table === 'object' && table !== null && IsDrizzleTable in table;\n}\n\n/**\n * Any table with a specified boundary.\n *\n * @example\n\t```ts\n\t// Any table with a specific name\n\ttype AnyUsersTable = AnyTable<{ name: 'users' }>;\n\t```\n *\n * To describe any table with any config, simply use `Table` without any type arguments, like this:\n *\n\t```ts\n\tfunction needsTable(table: Table) {\n\t\t...\n\t}\n\t```\n */\nexport type AnyTable<TPartial extends Partial<TableConfig>> = Table<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport function getTableName<T extends Table>(table: T): T['_']['name'] {\n\treturn table[TableName];\n}\n\nexport function getTableUniqueName<T extends Table>(table: T): `${T['_']['schema']}.${T['_']['name']}` {\n\treturn `${table[Schema] ?? 'public'}.${table[TableName]}`;\n}\n\nexport type MapColumnName<TName extends string, TColumn extends Column, TDBColumNames extends boolean> =\n\tTDBColumNames extends true ? TColumn['_']['name']\n\t\t: TName;\n\nexport type InferModelFromColumns<\n\tTColumns extends Record<string, Column>,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = Simplify<\n\tTInferMode extends 'insert' ?\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as RequiredKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key]\n\t\t\t\t\t>\n\t\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t\t}\n\t\t\t& {\n\t\t\t\t[\n\t\t\t\t\tKey in keyof TColumns & string as OptionalKeyOnly<\n\t\t\t\t\t\tMapColumnName<Key, TColumns[Key], TConfig['dbColumnNames']>,\n\t\t\t\t\t\tTColumns[Key],\n\t\t\t\t\t\tTConfig['override']\n\t\t\t\t\t>\n\t\t\t\t]?: GetColumnData<TColumns[Key], 'query'> | undefined;\n\t\t\t}\n\t\t: {\n\t\t\t[\n\t\t\t\tKey in keyof TColumns & string as MapColumnName<\n\t\t\t\t\tKey,\n\t\t\t\t\tTColumns[Key],\n\t\t\t\t\tTConfig['dbColumnNames']\n\t\t\t\t>\n\t\t\t]: GetColumnData<TColumns[Key], 'query'>;\n\t\t}\n>;\n\n/** @deprecated Use one of the alternatives: {@link InferSelectModel} / {@link InferInsertModel}, or `table.$inferSelect` / `table.$inferInsert`\n */\nexport type InferModel<\n\tTTable extends Table,\n\tTInferMode extends 'select' | 'insert' = 'select',\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], TInferMode, TConfig>;\n\nexport type InferSelectModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean } = { dbColumnNames: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'select', TConfig>;\n\nexport type InferInsertModel<\n\tTTable extends Table,\n\tTConfig extends { dbColumnNames: boolean; override?: boolean } = { dbColumnNames: false; override: false },\n> = InferModelFromColumns<TTable['_']['columns'], 'insert', TConfig>;\n\nexport type InferEnum<T> = T extends { enumValues: readonly (infer U)[] } ? U\n\t: never;\n", "/** @internal */\nexport const TableName = Symbol.for('drizzle:Name');\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tGeneratedColumnConfig,\n\tGeneratedIdentityConfig,\n} from './column-builder.ts';\nimport { entityKind } from './entity.ts';\nimport type { DriverValueMapper, SQL, SQLWrapper } from './sql/sql.ts';\nimport type { Table } from './table.ts';\nimport type { Update } from './utils.ts';\n\nexport interface ColumnBaseConfig<\n\tTDataType extends ColumnDataType,\n\tTColumnType extends string,\n> extends ColumnBuilderBaseConfig<TDataType, TColumnType> {\n\ttableName: string;\n\tnotNull: boolean;\n\thasDefault: boolean;\n\tisPrimaryKey: boolean;\n\tisAutoincrement: boolean;\n\thasRuntimeDefault: boolean;\n}\n\nexport type ColumnTypeConfig<T extends ColumnBaseConfig<ColumnDataType, string>, TTypeConfig extends object> = T & {\n\tbrand: 'Column';\n\ttableName: T['tableName'];\n\tname: T['name'];\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: T['data'];\n\tdriverParam: T['driverParam'];\n\tnotNull: T['notNull'];\n\thasDefault: T['hasDefault'];\n\tisPrimaryKey: T['isPrimaryKey'];\n\tisAutoincrement: T['isAutoincrement'];\n\thasRuntimeDefault: T['hasRuntimeDefault'];\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseColumn: infer U } ? U : unknown;\n\tgenerated: GeneratedColumnConfig<T['data']> | undefined;\n\tidentity: undefined | 'always' | 'byDefault';\n} & TTypeConfig;\n\nexport type ColumnRuntimeConfig<TData, TRuntimeConfig extends object> = ColumnBuilderRuntimeConfig<\n\tTData,\n\tTRuntimeConfig\n>;\n\nexport interface Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTRuntimeConfig extends object = object,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTTypeConfig extends object = object,\n> extends DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\n/*\n\t`Column` only accepts a full `ColumnConfig` as its generic.\n\tTo infer parts of the config, use `AnyColumn` that accepts a partial config.\n\tSee `GetColumnData` for example usage of inferring.\n*/\nexport abstract class Column<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n> implements DriverValueMapper<T['data'], T['driverParam']>, SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Column';\n\n\tdeclare readonly _: ColumnTypeConfig<T, TTypeConfig>;\n\n\treadonly name: string;\n\treadonly keyAsName: boolean;\n\treadonly primary: boolean;\n\treadonly notNull: boolean;\n\treadonly default: T['data'] | SQL | undefined;\n\treadonly defaultFn: (() => T['data'] | SQL) | undefined;\n\treadonly onUpdateFn: (() => T['data'] | SQL) | undefined;\n\treadonly hasDefault: boolean;\n\treadonly isUnique: boolean;\n\treadonly uniqueName: string | undefined;\n\treadonly uniqueType: string | undefined;\n\treadonly dataType: T['dataType'];\n\treadonly columnType: T['columnType'];\n\treadonly enumValues: T['enumValues'] = undefined;\n\treadonly generated: GeneratedColumnConfig<T['data']> | undefined = undefined;\n\treadonly generatedIdentity: GeneratedIdentityConfig | undefined = undefined;\n\n\tprotected config: ColumnRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(\n\t\treadonly table: Table,\n\t\tconfig: ColumnRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tthis.config = config;\n\t\tthis.name = config.name;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType as T['dataType'];\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t}\n\n\tabstract getSQLType(): string;\n\n\tmapFromDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\tmapToDriverValue(value: unknown): unknown {\n\t\treturn value;\n\t}\n\n\t// ** @internal */\n\tshouldDisableInsert(): boolean {\n\t\treturn this.config.generated !== undefined && this.config.generated.type !== 'byDefault';\n\t}\n}\n\nexport type UpdateColConfig<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTUpdate extends Partial<ColumnBaseConfig<ColumnDataType, string>>,\n> = Update<T, TUpdate>;\n\nexport type AnyColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = Column<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type GetColumnData<TColumn extends Column, TInferMode extends 'query' | 'raw' = 'query'> =\n\t// dprint-ignore\n\tTInferMode extends 'raw' // Raw mode\n\t\t? TColumn['_']['data'] // Just return the underlying type\n\t\t: TColumn['_']['notNull'] extends true // Query mode\n\t\t? TColumn['_']['data'] // Query mode, not null\n\t\t: TColumn['_']['data'] | null; // Query mode, nullable\n\nexport type InferColumnsDataTypes<TColumns extends Record<string, Column>> = {\n\t[Key in keyof TColumns]: GetColumnData<TColumns[Key], 'query'>;\n};\n", "import { entityKind } from '~/entity.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport { PgTable } from './table.ts';\n\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumn extends AnyPgColumn<{ tableName: TTableName }>,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(config: { name?: string; columns: [TColumn, ...TColumns] }): PrimaryKeyBuilder;\n/**\n * @deprecated: Please use primaryKey({ columns: [] }) instead of this function\n * @param columns\n */\nexport function primaryKey<\n\tTTableName extends string,\n\tTColumns extends AnyPgColumn<{ tableName: TTableName }>[],\n>(...columns: TColumns): PrimaryKeyBuilder;\nexport function primaryKey(...config: any) {\n\tif (config[0].columns) {\n\t\treturn new PrimaryKeyBuilder(config[0].columns, config[0].name);\n\t}\n\treturn new PrimaryKeyBuilder(config);\n}\n\nexport class PrimaryKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKeyBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tname?: string,\n\t) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): PrimaryKey {\n\t\treturn new PrimaryKey(table, this.columns, this.name);\n\t}\n}\n\nexport class PrimaryKey {\n\tstatic readonly [entityKind]: string = 'PgPrimaryKey';\n\n\treadonly columns: AnyPgColumn<{}>[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: PgTable, columns: AnyPgColumn<{}>[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name;\n\t}\n\n\tgetName(): string {\n\t\treturn this.name ?? `${this.table[PgTable.Symbol.Name]}_${this.columns.map((column) => column.name).join('_')}_pk`;\n\t}\n}\n", "import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getPgColumnBuilders, type PgColumnsBuilders } from './columns/all.ts';\nimport type { ExtraConfigColumn, PgColumn, PgColumnBuilder, PgColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { AnyIndexBuilder } from './indexes.ts';\nimport type { PgPolicy } from './policies.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type PgTableExtraConfigValue =\n\t| AnyIndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder\n\t| PgPolicy;\n\nexport type PgTableExtraConfig = Record<\n\tstring,\n\tPgTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<PgColumn>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:PgInlineForeignKeys');\n/** @internal */\nexport const EnableRLS = Symbol.for('drizzle:EnableRLS');\n\nexport class PgTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'PgTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t\tEnableRLS: EnableRLS as typeof EnableRLS,\n\t});\n\n\t/**@internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\t[EnableRLS]: boolean = false;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]: ((self: Record<string, PgColumn>) => PgTableExtraConfig) | undefined =\n\t\tundefined;\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigColumns]: Record<string, ExtraConfigColumn> = {};\n}\n\nexport type AnyPgTable<TPartial extends Partial<TableConfig> = {}> = PgTable<UpdateTableConfig<TableConfig, TPartial>>;\n\nexport type PgTableWithColumns<T extends TableConfig> =\n\t& PgTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t}\n\t& {\n\t\tenableRLS: () => Omit<\n\t\t\tPgTableWithColumns<T>,\n\t\t\t'enableRLS'\n\t\t>;\n\t};\n\n/** @internal */\nexport function pgTableWithSchema<\n\tTTableName extends string,\n\tTSchemaName extends string | undefined,\n\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: PgColumnsBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig | PgTableExtraConfigValue[])\n\t\t| undefined,\n\tschema: TSchemaName,\n\tbaseName = name,\n): PgTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchemaName;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\tdialect: 'pg';\n}> {\n\tconst rawTable = new PgTable<{\n\t\tname: TTableName;\n\t\tschema: TSchemaName;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getPgColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst builtColumnsForExtraConfig = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as PgColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.buildExtraConfigColumn(rawTable);\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumnsForExtraConfig;\n\n\tif (extraConfig) {\n\t\ttable[PgTable.Symbol.ExtraConfigBuilder] = extraConfig as any;\n\t}\n\n\treturn Object.assign(table, {\n\t\tenableRLS: () => {\n\t\t\ttable[PgTable.Symbol.EnableRLS] = true;\n\t\t\treturn table as PgTableWithColumns<{\n\t\t\t\tname: TTableName;\n\t\t\t\tschema: TSchemaName;\n\t\t\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\t\t\tdialect: 'pg';\n\t\t\t}>;\n\t\t},\n\t});\n}\n\nexport interface PgTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfigValue[],\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig: (\n\t\t\tself: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>,\n\t\t) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of pgTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = pgTable(\"users\", {\n\t * \tid: integer(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, PgColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: PgColumnsBuilders) => TColumnsMap,\n\t\textraConfig: (self: BuildExtraConfigColumns<TTableName, TColumnsMap, 'pg'>) => PgTableExtraConfig,\n\t): PgTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'pg'>;\n\t\tdialect: 'pg';\n\t}>;\n}\n\nexport const pgTable: PgTableFn = (name, columns, extraConfig) => {\n\treturn pgTableWithSchema(name, columns, extraConfig, undefined);\n};\n\nexport function pgTableCreator(customizeTableName: (name: string) => string): PgTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn pgTableWithSchema(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n", "import type { Cache } from './cache/core/cache.ts';\nimport type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { is } from './entity.ts';\nimport type { Logger } from './logger.ts';\nimport type { SelectedFieldsOrdered } from './operations.ts';\nimport type { TableLike } from './query-builders/select.types.ts';\nimport { Param, SQL, View } from './sql/sql.ts';\nimport type { DriverValueDecoder } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { getTableName, Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\n/** @internal */\nexport function mapResultRow<TResult>(\n\tcolumns: SelectedFieldsOrdered<AnyColumn>,\n\trow: unknown[],\n\tjoinsNotNullableMap: Record<string, boolean> | undefined,\n): TResult {\n\t// Key -> nested object key, value -> table name if all fields in the nested object are from the same table, false otherwise\n\tconst nullifyMap: Record<string, string | false> = {};\n\n\tconst result = columns.reduce<Record<string, any>>(\n\t\t(result, { path, field }, columnIndex) => {\n\t\t\tlet decoder: DriverValueDecoder<unknown, unknown>;\n\t\t\tif (is(field, Column)) {\n\t\t\t\tdecoder = field;\n\t\t\t} else if (is(field, SQL)) {\n\t\t\t\tdecoder = field.decoder;\n\t\t\t} else {\n\t\t\t\tdecoder = field.sql.decoder;\n\t\t\t}\n\t\t\tlet node = result;\n\t\t\tfor (const [pathChunkIndex, pathChunk] of path.entries()) {\n\t\t\t\tif (pathChunkIndex < path.length - 1) {\n\t\t\t\t\tif (!(pathChunk in node)) {\n\t\t\t\t\t\tnode[pathChunk] = {};\n\t\t\t\t\t}\n\t\t\t\t\tnode = node[pathChunk];\n\t\t\t\t} else {\n\t\t\t\t\tconst rawValue = row[columnIndex]!;\n\t\t\t\t\tconst value = node[pathChunk] = rawValue === null ? null : decoder.mapFromDriverValue(rawValue);\n\n\t\t\t\t\tif (joinsNotNullableMap && is(field, Column) && path.length === 2) {\n\t\t\t\t\t\tconst objectName = path[0]!;\n\t\t\t\t\t\tif (!(objectName in nullifyMap)) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = value === null ? getTableName(field.table) : false;\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof nullifyMap[objectName] === 'string' && nullifyMap[objectName] !== getTableName(field.table)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tnullifyMap[objectName] = false;\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\treturn result;\n\t\t},\n\t\t{},\n\t);\n\n\t// Nullify all nested objects from nullifyMap that are nullable\n\tif (joinsNotNullableMap && Object.keys(nullifyMap).length > 0) {\n\t\tfor (const [objectName, tableName] of Object.entries(nullifyMap)) {\n\t\t\tif (typeof tableName === 'string' && !joinsNotNullableMap[tableName]) {\n\t\t\t\tresult[objectName] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result as TResult;\n}\n\n/** @internal */\nexport function orderSelectedFields<TColumn extends AnyColumn>(\n\tfields: Record<string, unknown>,\n\tpathPrefix?: string[],\n): SelectedFieldsOrdered<TColumn> {\n\treturn Object.entries(fields).reduce<SelectedFieldsOrdered<AnyColumn>>((result, [name, field]) => {\n\t\tif (typeof name !== 'string') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst newPath = pathPrefix ? [...pathPrefix, name] : [name];\n\t\tif (is(field, Column) || is(field, SQL) || is(field, SQL.Aliased)) {\n\t\t\tresult.push({ path: newPath, field });\n\t\t} else if (is(field, Table)) {\n\t\t\tresult.push(...orderSelectedFields(field[Table.Symbol.Columns], newPath));\n\t\t} else {\n\t\t\tresult.push(...orderSelectedFields(field as Record<string, unknown>, newPath));\n\t\t}\n\t\treturn result;\n\t}, []) as SelectedFieldsOrdered<TColumn>;\n}\n\nexport function haveSameKeys(left: Record<string, unknown>, right: Record<string, unknown>) {\n\tconst leftKeys = Object.keys(left);\n\tconst rightKeys = Object.keys(right);\n\n\tif (leftKeys.length !== rightKeys.length) {\n\t\treturn false;\n\t}\n\n\tfor (const [index, key] of leftKeys.entries()) {\n\t\tif (key !== rightKeys[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n/** @internal */\nexport function mapUpdateSet(table: Table, values: Record<string, unknown>): UpdateSet {\n\tconst entries: [string, UpdateSet[string]][] = Object.entries(values)\n\t\t.filter(([, value]) => value !== undefined)\n\t\t.map(([key, value]) => {\n\t\t\t// eslint-disable-next-line unicorn/prefer-ternary\n\t\t\tif (is(value, SQL) || is(value, Column)) {\n\t\t\t\treturn [key, value];\n\t\t\t} else {\n\t\t\t\treturn [key, new Param(value, table[Table.Symbol.Columns][key])];\n\t\t\t}\n\t\t});\n\n\tif (entries.length === 0) {\n\t\tthrow new Error('No values to set');\n\t}\n\n\treturn Object.fromEntries(entries);\n}\n\nexport type UpdateSet = Record<string, SQL | Param | AnyColumn | null | undefined>;\n\nexport type OneOrMany<T> = T | T[];\n\nexport type Update<T, TUpdate> =\n\t& {\n\t\t[K in Exclude<keyof T, keyof TUpdate>]: T[K];\n\t}\n\t& TUpdate;\n\nexport type Simplify<T> =\n\t& {\n\t\t// @ts-ignore - \"Type parameter 'K' has a circular constraint\", not sure why\n\t\t[K in keyof T]: T[K];\n\t}\n\t& {};\n\nexport type SimplifyMappedType<T> = [T] extends [unknown] ? T : never;\n\nexport type ShallowRecord<K extends keyof any, T> = SimplifyMappedType<{ [P in K]: T }>;\n\nexport type Assume<T, U> = T extends U ? T : U;\n\nexport type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? true : false;\n\nexport interface DrizzleTypeError<T extends string> {\n\t$drizzleTypeError: T;\n}\n\nexport type ValueOrArray<T> = T | T[];\n\n/** @internal */\nexport function applyMixins(baseClass: any, extendedClasses: any[]) {\n\tfor (const extendedClass of extendedClasses) {\n\t\tfor (const name of Object.getOwnPropertyNames(extendedClass.prototype)) {\n\t\t\tif (name === 'constructor') continue;\n\n\t\t\tObject.defineProperty(\n\t\t\t\tbaseClass.prototype,\n\t\t\t\tname,\n\t\t\t\tObject.getOwnPropertyDescriptor(extendedClass.prototype, name) || Object.create(null),\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport type Or<T1, T2> = T1 extends true ? true : T2 extends true ? true : false;\n\nexport type IfThenElse<If, Then, Else> = If extends true ? Then : Else;\n\nexport type PromiseOf<T> = T extends Promise<infer U> ? U : T;\n\nexport type Writable<T> = {\n\t-readonly [P in keyof T]: T[P];\n};\n\nexport type NonArray<T> = T extends any[] ? never : T;\n\nexport function getTableColumns<T extends Table>(table: T): T['_']['columns'] {\n\treturn table[Table.Symbol.Columns];\n}\n\nexport function getViewSelectedFields<T extends View>(view: T): T['_']['selectedFields'] {\n\treturn view[ViewBaseConfig].selectedFields;\n}\n\n/** @internal */\nexport function getTableLikeName(table: TableLike): string | undefined {\n\treturn is(table, Subquery)\n\t\t? table._.alias\n\t\t: is(table, View)\n\t\t? table[ViewBaseConfig].name\n\t\t: is(table, SQL)\n\t\t? undefined\n\t\t: table[Table.Symbol.IsAlias]\n\t\t? table[Table.Symbol.Name]\n\t\t: table[Table.Symbol.BaseName];\n}\n\nexport type ColumnsWithTable<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends AnyColumn<{ tableName: TTableName }>[],\n> = { [Key in keyof TColumns]: AnyColumn<{ tableName: TForeignTableName }> };\n\nexport type Casing = 'snake_case' | 'camelCase';\n\nexport interface DrizzleConfig<TSchema extends Record<string, unknown> = Record<string, never>> {\n\tlogger?: boolean | Logger;\n\tschema?: TSchema;\n\tcasing?: Casing;\n\tcache?: Cache;\n}\nexport type ValidateShape<T, ValidShape, TResult = T> = T extends ValidShape\n\t? Exclude<keyof T, keyof ValidShape> extends never ? TResult\n\t: DrizzleTypeError<\n\t\t`Invalid key(s): ${Exclude<(keyof T) & (string | number | bigint | boolean | null | undefined), keyof ValidShape>}`\n\t>\n\t: never;\n\nexport type KnownKeysOnly<T, U> = {\n\t[K in keyof T]: K extends keyof U ? T[K] : never;\n};\n\nexport type IsAny<T> = 0 extends (1 & T) ? true : false;\n\n/** @internal */\nexport function getColumnNameAndConfig<\n\tTConfig extends Record<string, any> | undefined,\n>(a: string | TConfig | undefined, b: TConfig | undefined) {\n\treturn {\n\t\tname: typeof a === 'string' && a.length > 0 ? a : '' as string,\n\t\tconfig: typeof a === 'object' ? a : b as TConfig,\n\t};\n}\n\nexport type IfNotImported<T, Y, N> = unknown extends T ? Y : N;\n\nexport type ImportTypeError<TPackageName extends string> =\n\t`Please install \\`${TPackageName}\\` to allow Drizzle ORM to connect to the database`;\n\nexport type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Keys extends any\n\t? Required<Pick<T, Keys>> & Partial<Omit<T, Keys>>\n\t: never;\n\ntype ExpectedConfigShape = {\n\tlogger?: boolean | {\n\t\tlogQuery(query: string, params: unknown[]): void;\n\t};\n\tschema?: Record<string, never>;\n\tcasing?: 'snake_case' | 'camelCase';\n};\n\n// If this errors, you must update config shape checker function with new config specs\nconst _: DrizzleConfig = {} as ExpectedConfigShape;\nconst __: ExpectedConfigShape = {} as DrizzleConfig;\n\nexport function isConfig(data: any): boolean {\n\tif (typeof data !== 'object' || data === null) return false;\n\n\tif (data.constructor.name !== 'Object') return false;\n\n\tif ('logger' in data) {\n\t\tconst type = typeof data['logger'];\n\t\tif (\n\t\t\ttype !== 'boolean' && (type !== 'object' || typeof data['logger']['logQuery'] !== 'function')\n\t\t\t&& type !== 'undefined'\n\t\t) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('schema' in data) {\n\t\tconst type = typeof data['schema'];\n\t\tif (type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('casing' in data) {\n\t\tconst type = typeof data['casing'];\n\t\tif (type !== 'string' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('mode' in data) {\n\t\tif (data['mode'] !== 'default' || data['mode'] !== 'planetscale' || data['mode'] !== undefined) return false;\n\n\t\treturn true;\n\t}\n\n\tif ('connection' in data) {\n\t\tconst type = typeof data['connection'];\n\t\tif (type !== 'string' && type !== 'object' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif ('client' in data) {\n\t\tconst type = typeof data['client'];\n\t\tif (type !== 'object' && type !== 'function' && type !== 'undefined') return false;\n\n\t\treturn true;\n\t}\n\n\tif (Object.keys(data).length === 0) return true;\n\n\treturn false;\n}\n\nexport type NeonAuthToken = string | (() => string | Promise<string>);\n\nexport const textDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder();\n", "import type { CasingCache } from '~/casing.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { isPgEnum } from '~/pg-core/columns/enum.ts';\nimport type { SelectResult } from '~/query-builders/select.types.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { tracer } from '~/tracing.ts';\nimport type { Assume, Equal } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { AnyColumn } from '../column.ts';\nimport { Column } from '../column.ts';\nimport { IsAlias, Table } from '../table.ts';\n\n/**\n * This class is used to indicate a primitive param value that is used in `sql` tag.\n * It is only used on type level and is never instantiated at runtime.\n * If you see a value of this type in the code, its runtime value is actually the primitive param value.\n */\nexport class FakePrimitiveParam {\n\tstatic readonly [entityKind]: string = 'FakePrimitiveParam';\n}\n\nexport type Chunk =\n\t| string\n\t| Table\n\t| View\n\t| AnyColumn\n\t| Name\n\t| Param\n\t| Placeholder\n\t| SQL;\n\nexport interface BuildQueryConfig {\n\tcasing: CasingCache;\n\tescapeName(name: string): string;\n\tescapeParam(num: number, value: unknown): string;\n\tescapeString(str: string): string;\n\tprepareTyping?: (encoder: DriverValueEncoder<unknown, unknown>) => QueryTypingsValue;\n\tparamStartIndex?: { value: number };\n\tinlineParams?: boolean;\n\tinvokeSource?: 'indexes' | undefined;\n}\n\nexport type QueryTypingsValue = 'json' | 'decimal' | 'time' | 'timestamp' | 'uuid' | 'date' | 'none';\n\nexport interface Query {\n\tsql: string;\n\tparams: unknown[];\n}\n\nexport interface QueryWithTypings extends Query {\n\ttypings?: QueryTypingsValue[];\n}\n\n/**\n * Any value that implements the `getSQL` method. The implementations include:\n * - `Table`\n * - `Column`\n * - `View`\n * - `Subquery`\n * - `SQL`\n * - `SQL.Aliased`\n * - `Placeholder`\n * - `Param`\n */\nexport interface SQLWrapper {\n\tgetSQL(): SQL;\n\tshouldOmitSQLParens?(): boolean;\n}\n\nexport function isSQLWrapper(value: unknown): value is SQLWrapper {\n\treturn value !== null && value !== undefined && typeof (value as any).getSQL === 'function';\n}\n\nfunction mergeQueries(queries: QueryWithTypings[]): QueryWithTypings {\n\tconst result: QueryWithTypings = { sql: '', params: [] };\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t\tif (query.typings?.length) {\n\t\t\tif (!result.typings) {\n\t\t\t\tresult.typings = [];\n\t\t\t}\n\t\t\tresult.typings.push(...query.typings);\n\t\t}\n\t}\n\treturn result;\n}\n\nexport class StringChunk implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'StringChunk';\n\n\treadonly value: string[];\n\n\tconstructor(value: string | string[]) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport class SQL<T = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'SQL';\n\n\tdeclare _: {\n\t\tbrand: 'SQL';\n\t\ttype: T;\n\t};\n\n\t/** @internal */\n\tdecoder: DriverValueDecoder<T, any> = noopDecoder;\n\tprivate shouldInlineParams = false;\n\n\t/** @internal */\n\tusedTables: string[] = [];\n\n\tconstructor(readonly queryChunks: SQLChunk[]) {\n\t\tfor (const chunk of queryChunks) {\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\n\t\t\t\tthis.usedTables.push(\n\t\t\t\t\tschemaName === undefined\n\t\t\t\t\t\t? chunk[Table.Symbol.Name]\n\t\t\t\t\t\t: schemaName + '.' + chunk[Table.Symbol.Name],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tappend(query: SQL): this {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\n\ttoQuery(config: BuildQueryConfig): QueryWithTypings {\n\t\treturn tracer.startActiveSpan('drizzle.buildSQL', (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t'drizzle.query.text': query.sql,\n\t\t\t\t'drizzle.query.params': JSON.stringify(query.params),\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\n\tbuildQueryFromSourceParams(chunks: SQLChunk[], _config: BuildQueryConfig): Query {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 },\n\t\t});\n\n\t\tconst {\n\t\t\tcasing,\n\t\t\tescapeName,\n\t\t\tescapeParam,\n\t\t\tprepareTyping,\n\t\t\tinlineParams,\n\t\t\tparamStartIndex,\n\t\t} = config;\n\n\t\treturn mergeQueries(chunks.map((chunk): QueryWithTypings => {\n\t\t\tif (is(chunk, StringChunk)) {\n\t\t\t\treturn { sql: chunk.value.join(''), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Name)) {\n\t\t\t\treturn { sql: escapeName(chunk.value), params: [] };\n\t\t\t}\n\n\t\t\tif (chunk === undefined) {\n\t\t\t\treturn { sql: '', params: [] };\n\t\t\t}\n\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result: SQLChunk[] = [new StringChunk('(')];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) {\n\t\t\t\t\t\tresult.push(new StringChunk(', '));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(')'));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL)) {\n\t\t\t\treturn this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t\t...config,\n\t\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[IsAlias]\n\t\t\t\t\t\t? escapeName(tableName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(tableName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = casing.getColumnCasing(chunk);\n\t\t\t\tif (_config.invokeSource === 'indexes') {\n\t\t\t\t\treturn { sql: escapeName(columnName), params: [] };\n\t\t\t\t}\n\n\t\t\t\tconst schemaName = chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.table[IsAlias] || schemaName === undefined\n\t\t\t\t\t\t? escapeName(chunk.table[Table.Symbol.Name]) + '.' + escapeName(columnName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(chunk.table[Table.Symbol.Name]) + '.'\n\t\t\t\t\t\t\t+ escapeName(columnName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === undefined || chunk[ViewBaseConfig].isAlias\n\t\t\t\t\t\t? escapeName(viewName)\n\t\t\t\t\t\t: escapeName(schemaName) + '.' + escapeName(viewName),\n\t\t\t\t\tparams: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t\t}\n\n\t\t\t\tconst mappedValue = chunk.value === null ? null : chunk.encoder.mapToDriverValue(chunk.value);\n\n\t\t\t\tif (is(mappedValue, SQL)) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t}\n\n\t\t\t\tif (inlineParams) {\n\t\t\t\t\treturn { sql: this.mapInlineParam(mappedValue, config), params: [] };\n\t\t\t\t}\n\n\t\t\t\tlet typings: QueryTypingsValue[] = ['none'];\n\t\t\t\tif (prepareTyping) {\n\t\t\t\t\ttypings = [prepareTyping(chunk.encoder)];\n\t\t\t\t}\n\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, mappedValue), params: [mappedValue], typings };\n\t\t\t}\n\n\t\t\tif (is(chunk, Placeholder)) {\n\t\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t\t}\n\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== undefined) {\n\t\t\t\treturn { sql: escapeName(chunk.fieldAlias), params: [] };\n\t\t\t}\n\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) {\n\t\t\t\t\treturn { sql: escapeName(chunk._.alias), params: [] };\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(') '),\n\t\t\t\t\tnew Name(chunk._.alias),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (isPgEnum(chunk)) {\n\t\t\t\tif (chunk.schema) {\n\t\t\t\t\treturn { sql: escapeName(chunk.schema) + '.' + escapeName(chunk.enumName), params: [] };\n\t\t\t\t}\n\t\t\t\treturn { sql: escapeName(chunk.enumName), params: [] };\n\t\t\t}\n\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) {\n\t\t\t\t\treturn this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\t}\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk('('),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(')'),\n\t\t\t\t], config);\n\t\t\t}\n\n\t\t\tif (inlineParams) {\n\t\t\t\treturn { sql: this.mapInlineParam(chunk, config), params: [] };\n\t\t\t}\n\n\t\t\treturn { sql: escapeParam(paramStartIndex.value++, chunk), params: [chunk], typings: ['none'] };\n\t\t}));\n\t}\n\n\tprivate mapInlineParam(\n\t\tchunk: unknown,\n\t\t{ escapeString }: BuildQueryConfig,\n\t): string {\n\t\tif (chunk === null) {\n\t\t\treturn 'null';\n\t\t}\n\t\tif (typeof chunk === 'number' || typeof chunk === 'boolean') {\n\t\t\treturn chunk.toString();\n\t\t}\n\t\tif (typeof chunk === 'string') {\n\t\t\treturn escapeString(chunk);\n\t\t}\n\t\tif (typeof chunk === 'object') {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === '[object Object]') {\n\t\t\t\treturn escapeString(JSON.stringify(chunk));\n\t\t\t}\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error('Unexpected param value: ' + chunk);\n\t}\n\n\tgetSQL(): SQL {\n\t\treturn this;\n\t}\n\n\tas(alias: string): SQL.Aliased<T>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(): SQL<TData>;\n\t/**\n\t * @deprecated\n\t * Use ``sql<DataType>`query`.as(alias)`` instead.\n\t */\n\tas<TData>(alias: string): SQL.Aliased<TData>;\n\tas(alias?: string): SQL<T> | SQL.Aliased<T> {\n\t\t// TODO: remove with deprecated overloads\n\t\tif (alias === undefined) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\n\tmapWith<\n\t\tTDecoder extends\n\t\t\t| DriverValueDecoder<any, any>\n\t\t\t| DriverValueDecoder<any, any>['mapFromDriverValue'],\n\t>(decoder: TDecoder): SQL<GetDecoderResult<TDecoder>> {\n\t\tthis.decoder = typeof decoder === 'function' ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this as SQL<GetDecoderResult<TDecoder>>;\n\t}\n\n\tinlineParams(): this {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\n\t/**\n\t * This method is used to conditionally include a part of the query.\n\t *\n\t * @param condition - Condition to check\n\t * @returns itself if the condition is `true`, otherwise `undefined`\n\t */\n\tif(condition: any | undefined): this | undefined {\n\t\treturn condition ? this : undefined;\n\t}\n}\n\nexport type GetDecoderResult<T> = T extends Column ? T['_']['data'] : T extends\n\t| DriverValueDecoder<infer TData, any>\n\t| DriverValueDecoder<infer TData, any>['mapFromDriverValue'] ? TData\n: never;\n\n/**\n * Any DB name (table, column, index etc.)\n */\nexport class Name implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Name';\n\n\tprotected brand!: 'Name';\n\n\tconstructor(readonly value: string) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/**\n * Any DB name (table, column, index etc.)\n * @deprecated Use `sql.identifier` instead.\n */\nexport function name(value: string): Name {\n\treturn new Name(value);\n}\n\nexport interface DriverValueDecoder<TData, TDriverParam> {\n\tmapFromDriverValue(value: TDriverParam): TData;\n}\n\nexport interface DriverValueEncoder<TData, TDriverParam> {\n\tmapToDriverValue(value: TData): TDriverParam | SQL;\n}\n\nexport function isDriverValueEncoder(value: unknown): value is DriverValueEncoder<any, any> {\n\treturn typeof value === 'object' && value !== null && 'mapToDriverValue' in value\n\t\t&& typeof (value as any).mapToDriverValue === 'function';\n}\n\nexport const noopDecoder: DriverValueDecoder<any, any> = {\n\tmapFromDriverValue: (value) => value,\n};\n\nexport const noopEncoder: DriverValueEncoder<any, any> = {\n\tmapToDriverValue: (value) => value,\n};\n\nexport interface DriverValueMapper<TData, TDriverParam>\n\textends DriverValueDecoder<TData, TDriverParam>, DriverValueEncoder<TData, TDriverParam>\n{}\n\nexport const noopMapper: DriverValueMapper<any, any> = {\n\t...noopDecoder,\n\t...noopEncoder,\n};\n\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nexport class Param<TDataType = unknown, TDriverParamType = TDataType> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Param';\n\n\tprotected brand!: 'BoundParamValue';\n\n\t/**\n\t * @param value - Parameter value\n\t * @param encoder - Encoder to convert the value to a driver parameter\n\t */\n\tconstructor(\n\t\treadonly value: TDataType,\n\t\treadonly encoder: DriverValueEncoder<TDataType, TDriverParamType> = noopEncoder,\n\t) {}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.param` instead. */\nexport function param<TData, TDriver>(\n\tvalue: TData,\n\tencoder?: DriverValueEncoder<TData, TDriver>,\n): Param<TData, TDriver> {\n\treturn new Param(value, encoder);\n}\n\n/**\n * Anything that can be passed to the `` sql`...` `` tagged function.\n */\nexport type SQLChunk =\n\t| StringChunk\n\t| SQLChunk[]\n\t| SQLWrapper\n\t| SQL\n\t| Table\n\t| View\n\t| Subquery\n\t| AnyColumn\n\t| Param\n\t| Name\n\t| undefined\n\t| FakePrimitiveParam\n\t| Placeholder;\n\nexport function sql<T>(strings: TemplateStringsArray, ...params: any[]): SQL<T>;\n/*\n\tThe type of `params` is specified as `SQLChunk[]`, but that's slightly incorrect -\n\tin runtime, users won't pass `FakePrimitiveParam` instances as `params` - they will pass primitive values\n\twhich will be wrapped in `Param`. That's why the overload specifies `params` as `any[]` and not as `SQLSourceParam[]`.\n\tThis type is used to make our lives easier and the type checker happy.\n*/\nexport function sql(strings: TemplateStringsArray, ...params: SQLChunk[]): SQL {\n\tconst queryChunks: SQLChunk[] = [];\n\tif (params.length > 0 || (strings.length > 0 && strings[0] !== '')) {\n\t\tqueryChunks.push(new StringChunk(strings[0]!));\n\t}\n\tfor (const [paramIndex, param] of params.entries()) {\n\t\tqueryChunks.push(param, new StringChunk(strings[paramIndex + 1]!));\n\t}\n\n\treturn new SQL(queryChunks);\n}\n\nexport namespace sql {\n\texport function empty(): SQL {\n\t\treturn new SQL([]);\n\t}\n\n\t/** @deprecated - use `sql.join()` */\n\texport function fromList(list: SQLChunk[]): SQL {\n\t\treturn new SQL(list);\n\t}\n\n\t/**\n\t * Convenience function to create an SQL query from a raw string.\n\t * @param str The raw SQL query string.\n\t */\n\texport function raw(str: string): SQL {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\n\t/**\n\t * Join a list of SQL chunks with a separator.\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`]);\n\t * // sql`abc`\n\t * ```\n\t * @example\n\t * ```ts\n\t * const query = sql.join([sql`a`, sql`b`, sql`c`], sql`, `);\n\t * // sql`a, b, c`\n\t * ```\n\t */\n\texport function join(chunks: SQLChunk[], separator?: SQLChunk): SQL {\n\t\tconst result: SQLChunk[] = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== undefined) {\n\t\t\t\tresult.push(separator);\n\t\t\t}\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\n\t/**\n\t * Create a SQL chunk that represents a DB identifier (table, column, index etc.).\n\t * When used in a query, the identifier will be escaped based on the DB engine.\n\t * For example, in PostgreSQL, identifiers are escaped with double quotes.\n\t *\n\t * **WARNING: This function does not offer any protection against SQL injections, so you must validate any user input beforehand.**\n\t *\n\t * @example ```ts\n\t * const query = sql`SELECT * FROM ${sql.identifier('my-table')}`;\n\t * // 'SELECT * FROM \"my-table\"'\n\t * ```\n\t */\n\texport function identifier(value: string): Name {\n\t\treturn new Name(value);\n\t}\n\n\texport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\t\treturn new Placeholder(name);\n\t}\n\n\texport function param<TData, TDriver>(\n\t\tvalue: TData,\n\t\tencoder?: DriverValueEncoder<TData, TDriver>,\n\t): Param<TData, TDriver> {\n\t\treturn new Param(value, encoder);\n\t}\n}\n\nexport namespace SQL {\n\texport class Aliased<T = unknown> implements SQLWrapper {\n\t\tstatic readonly [entityKind]: string = 'SQL.Aliased';\n\n\t\tdeclare _: {\n\t\t\tbrand: 'SQL.Aliased';\n\t\t\ttype: T;\n\t\t};\n\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\n\t\tconstructor(\n\t\t\treadonly sql: SQL,\n\t\t\treadonly fieldAlias: string,\n\t\t) {}\n\n\t\tgetSQL(): SQL {\n\t\t\treturn this.sql;\n\t\t}\n\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased(this.sql, this.fieldAlias);\n\t\t}\n\t}\n}\n\nexport class Placeholder<TName extends string = string, TValue = any> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Placeholder';\n\n\tdeclare protected: TValue;\n\n\tconstructor(readonly name: TName) {}\n\n\tgetSQL(): SQL {\n\t\treturn new SQL([this]);\n\t}\n}\n\n/** @deprecated Use `sql.placeholder` instead. */\nexport function placeholder<TName extends string>(name: TName): Placeholder<TName> {\n\treturn new Placeholder(name);\n}\n\nexport function fillPlaceholders(params: unknown[], values: Record<string, unknown>): unknown[] {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn values[p.name];\n\t\t}\n\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) {\n\t\t\t\tthrow new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\t}\n\n\t\t\treturn p.encoder.mapToDriverValue(values[p.value.name]);\n\t\t}\n\n\t\treturn p;\n\t});\n}\n\nexport type ColumnsSelection = Record<string, unknown>;\n\nconst IsDrizzleView = Symbol.for('drizzle:IsDrizzleView');\n\nexport abstract class View<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'View';\n\n\tdeclare _: {\n\t\tbrand: 'View';\n\t\tviewBrand: string;\n\t\tname: TName;\n\t\texisting: TExisting;\n\t\tselectedFields: TSelection;\n\t};\n\n\t/** @internal */\n\t[ViewBaseConfig]: {\n\t\tname: TName;\n\t\toriginalName: TName;\n\t\tschema: string | undefined;\n\t\tselectedFields: ColumnsSelection;\n\t\tisExisting: TExisting;\n\t\tquery: TExisting extends true ? undefined : SQL;\n\t\tisAlias: boolean;\n\t};\n\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\n\tdeclare readonly $inferSelect: InferSelectViewModel<View<Assume<TName, string>, TExisting, TSelection>>;\n\n\tconstructor(\n\t\t{ name, schema, selectedFields, query }: {\n\t\t\tname: TName;\n\t\t\tschema: string | undefined;\n\t\t\tselectedFields: ColumnsSelection;\n\t\t\tquery: SQL | undefined;\n\t\t},\n\t) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery: query as (TExisting extends true ? undefined : SQL),\n\t\t\tisExisting: !query as TExisting,\n\t\t\tisAlias: false,\n\t\t};\n\t}\n\n\tgetSQL(): SQL<unknown> {\n\t\treturn new SQL([this]);\n\t}\n}\n\nexport function isView(view: unknown): view is View {\n\treturn typeof view === 'object' && view !== null && IsDrizzleView in view;\n}\n\nexport function getViewName<T extends View>(view: T): T['_']['name'] {\n\treturn view[ViewBaseConfig].name;\n}\n\nexport type InferSelectViewModel<TView extends View> =\n\tEqual<TView['_']['selectedFields'], { [x: string]: unknown }> extends true ? { [x: string]: unknown }\n\t\t: SelectResult<\n\t\t\tTView['_']['selectedFields'],\n\t\t\t'single',\n\t\t\tRecord<TView['_']['name'], 'not-null'>\n\t\t>;\n\n// Defined separately from the Column class to resolve circular dependency\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Table class to resolve circular dependency\nTable.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n// Defined separately from the Column class to resolve circular dependency\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnyPgTable } from '~/pg-core/table.ts';\nimport type { NonArray, Writable } from '~/utils.ts';\nimport { PgColumn, PgColumnBuilder } from './common.ts';\n\n// Enum as ts enum\n\nexport type PgEnumObjectColumnBuilderInitial<TName extends string, TValues extends object> = PgEnumObjectColumnBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'PgEnumObjectColumn';\n\tdata: TValues[keyof TValues];\n\tenumValues: string[];\n\tdriverParam: string;\n}>;\n\nexport interface PgEnumObject<TValues extends object> {\n\t(): PgEnumObjectColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: string[];\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport class PgEnumObjectColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: string[] },\n> extends PgColumnBuilder<T, { enum: PgEnumObject<any> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnumObject<any>) {\n\t\tsuper(name, 'string', 'PgEnumObjectColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumObjectColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumObjectColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumObjectColumn<T extends ColumnBaseConfig<'string', 'PgEnumObjectColumn'> & { enumValues: object }>\n\textends PgColumn<T, { enum: PgEnumObject<object> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumObjectColumn';\n\n\treadonly enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumObjectColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\n// Enum as string union\n\nexport type PgEnumColumnBuilderInitial<TName extends string, TValues extends [string, ...string[]]> =\n\tPgEnumColumnBuilder<{\n\t\tname: TName;\n\t\tdataType: 'string';\n\t\tcolumnType: 'PgEnumColumn';\n\t\tdata: TValues[number];\n\t\tenumValues: TValues;\n\t\tdriverParam: string;\n\t}>;\n\nconst isPgEnumSym = Symbol.for('drizzle:isPgEnum');\nexport interface PgEnum<TValues extends [string, ...string[]]> {\n\t(): PgEnumColumnBuilderInitial<'', TValues>;\n\t<TName extends string>(name: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, TValues>;\n\n\treadonly enumName: string;\n\treadonly enumValues: TValues;\n\treadonly schema: string | undefined;\n\t/** @internal */\n\t[isPgEnumSym]: true;\n}\n\nexport function isPgEnum(obj: unknown): obj is PgEnum<[string, ...string[]]> {\n\treturn !!obj && typeof obj === 'function' && isPgEnumSym in obj && obj[isPgEnumSym] === true;\n}\n\nexport class PgEnumColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] },\n> extends PgColumnBuilder<T, { enum: PgEnum<T['enumValues']> }> {\n\tstatic override readonly [entityKind]: string = 'PgEnumColumnBuilder';\n\n\tconstructor(name: T['name'], enumInstance: PgEnum<T['enumValues']>) {\n\t\tsuper(name, 'string', 'PgEnumColumn');\n\t\tthis.config.enum = enumInstance;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgEnumColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new PgEnumColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class PgEnumColumn<T extends ColumnBaseConfig<'string', 'PgEnumColumn'> & { enumValues: [string, ...string[]] }>\n\textends PgColumn<T, { enum: PgEnum<T['enumValues']> }>\n{\n\tstatic override readonly [entityKind]: string = 'PgEnumColumn';\n\n\treadonly enum = this.config.enum;\n\toverride readonly enumValues = this.config.enum.enumValues;\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgEnumColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.enum = config.enum;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.enum.enumName;\n\t}\n}\n\nexport function pgEnum<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n): PgEnum<Writable<T>>;\n\nexport function pgEnum<E extends Record<string, string>>(\n\tenumName: string,\n\tenumObj: NonArray<E>,\n): PgEnumObject<E>;\n\nexport function pgEnum(\n\tenumName: any,\n\tinput: any,\n): any {\n\treturn Array.isArray(input)\n\t\t? pgEnumWithSchema(enumName, [...input] as [string, ...string[]], undefined)\n\t\t: pgEnumObjectWithSchema(enumName, input, undefined);\n}\n\n/** @internal */\nexport function pgEnumWithSchema<U extends string, T extends Readonly<[U, ...U[]]>>(\n\tenumName: string,\n\tvalues: T | Writable<T>,\n\tschema?: string,\n): PgEnum<Writable<T>> {\n\tconst enumInstance: PgEnum<Writable<T>> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumColumnBuilderInitial<TName, Writable<T>> =>\n\t\t\tnew PgEnumColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: values,\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n\n/** @internal */\nexport function pgEnumObjectWithSchema<T extends object>(\n\tenumName: string,\n\tvalues: T,\n\tschema?: string,\n): PgEnumObject<T> {\n\tconst enumInstance: PgEnumObject<T> = Object.assign(\n\t\t<TName extends string>(name?: TName): PgEnumObjectColumnBuilderInitial<TName, T> =>\n\t\t\tnew PgEnumObjectColumnBuilder(name ?? '' as TName, enumInstance),\n\t\t{\n\t\t\tenumName,\n\t\t\tenumValues: Object.values(values),\n\t\t\tschema,\n\t\t\t[isPgEnumSym]: true,\n\t\t} as const,\n\t);\n\n\treturn enumInstance;\n}\n", "import type {\n\tColumnBuilderBase,\n\tColumnBuilderBaseConfig,\n\tColumnBuilderExtraConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasGenerated,\n\tMakeColumnConfig,\n} from '~/column-builder.ts';\nimport { ColumnBuilder } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { Simplify, Update } from '~/utils.ts';\n\nimport type { ForeignKey, UpdateDeleteAction } from '~/pg-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/pg-core/foreign-keys.ts';\nimport type { AnyPgTable, PgTable } from '~/pg-core/table.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport { iife } from '~/tracing-utils.ts';\nimport type { PgIndexOpClass } from '../indexes.ts';\nimport { uniqueKeyName } from '../unique-constraint.ts';\nimport { makePgArray, parsePgArray } from '../utils/array.ts';\n\nexport interface ReferenceConfig {\n\tref: () => PgColumn;\n\tactions: {\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport interface PgColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'pg' }> {}\n\nexport abstract class PgColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }, TExtraConfig>\n\timplements PgColumnBuilderBase<T, TTypeConfig>\n{\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\tstatic override readonly [entityKind]: string = 'PgColumnBuilder';\n\n\tarray<TSize extends number | undefined = undefined>(size?: TSize): PgArrayBuilder<\n\t\t& {\n\t\t\tname: T['name'];\n\t\t\tdataType: 'array';\n\t\t\tcolumnType: 'PgArray';\n\t\t\tdata: T['data'][];\n\t\t\tdriverParam: T['driverParam'][] | string;\n\t\t\tenumValues: T['enumValues'];\n\t\t\tsize: TSize;\n\t\t\tbaseBuilder: T;\n\t\t}\n\t\t& (T extends { notNull: true } ? { notNull: true } : {})\n\t\t& (T extends { hasDefault: true } ? { hasDefault: true } : {}),\n\t\tT\n\t> {\n\t\treturn new PgArrayBuilder(this.config.name, this as PgColumnBuilder<any, any>, size as any);\n\t}\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tactions: ReferenceConfig['actions'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, actions });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t\tconfig?: { nulls: 'distinct' | 'not distinct' },\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\tthis.config.uniqueType = config?.nulls;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(as: SQL | T['data'] | (() => SQL)): HasGenerated<this, {\n\t\ttype: 'always';\n\t}> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: 'stored',\n\t\t};\n\t\treturn this as HasGenerated<this, {\n\t\t\ttype: 'always';\n\t\t}>;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: PgColumn, table: PgTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, actions }) => {\n\t\t\treturn iife(\n\t\t\t\t(ref, actions) => {\n\t\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\t\treturn { columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t\t});\n\t\t\t\t\tif (actions.onUpdate) {\n\t\t\t\t\t\tbuilder.onUpdate(actions.onUpdate);\n\t\t\t\t\t}\n\t\t\t\t\tif (actions.onDelete) {\n\t\t\t\t\t\tbuilder.onDelete(actions.onDelete);\n\t\t\t\t\t}\n\t\t\t\t\treturn builder.build(table);\n\t\t\t\t},\n\t\t\t\tref,\n\t\t\t\tactions,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgColumn<MakeColumnConfig<T, TTableName>>;\n\n\t/** @internal */\n\tbuildExtraConfigColumn<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): ExtraConfigColumn {\n\t\treturn new ExtraConfigColumn(table, this.config);\n\t}\n}\n\n// To understand how to use `PgColumn` and `PgColumn`, see `Column` and `AnyColumn` documentation.\nexport abstract class PgColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = {},\n\tTTypeConfig extends object = {},\n> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'pg' }> {\n\tstatic override readonly [entityKind]: string = 'PgColumn';\n\n\tconstructor(\n\t\toverride readonly table: PgTable,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tif (!config.uniqueName) {\n\t\t\tconfig.uniqueName = uniqueKeyName(table, [config.name]);\n\t\t}\n\t\tsuper(table, config);\n\t}\n}\n\nexport type IndexedExtraConfigType = { order?: 'asc' | 'desc'; nulls?: 'first' | 'last'; opClass?: string };\n\nexport class ExtraConfigColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n> extends PgColumn<T, IndexedExtraConfigType> {\n\tstatic override readonly [entityKind]: string = 'ExtraConfigColumn';\n\n\toverride getSQLType(): string {\n\t\treturn this.getSQLType();\n\t}\n\n\tindexConfig: IndexedExtraConfigType = {\n\t\torder: this.config.order ?? 'asc',\n\t\tnulls: this.config.nulls ?? 'last',\n\t\topClass: this.config.opClass,\n\t};\n\tdefaultConfig: IndexedExtraConfigType = {\n\t\torder: 'asc',\n\t\tnulls: 'last',\n\t\topClass: undefined,\n\t};\n\n\tasc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'asc';\n\t\treturn this;\n\t}\n\n\tdesc(): Omit<this, 'asc' | 'desc'> {\n\t\tthis.indexConfig.order = 'desc';\n\t\treturn this;\n\t}\n\n\tnullsFirst(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'first';\n\t\treturn this;\n\t}\n\n\tnullsLast(): Omit<this, 'nullsFirst' | 'nullsLast'> {\n\t\tthis.indexConfig.nulls = 'last';\n\t\treturn this;\n\t}\n\n\t/**\n\t * ### PostgreSQL documentation quote\n\t *\n\t * > An operator class with optional parameters can be specified for each column of an index.\n\t * The operator class identifies the operators to be used by the index for that column.\n\t * For example, a B-tree index on four-byte integers would use the int4_ops class;\n\t * this operator class includes comparison functions for four-byte integers.\n\t * In practice the default operator class for the column's data type is usually sufficient.\n\t * The main point of having operator classes is that for some data types, there could be more than one meaningful ordering.\n\t * For example, we might want to sort a complex-number data type either by absolute value or by real part.\n\t * We could do this by defining two operator classes for the data type and then selecting the proper class when creating an index.\n\t * More information about operator classes check:\n\t *\n\t * ### Useful links\n\t * https://www.postgresql.org/docs/current/sql-createindex.html\n\t *\n\t * https://www.postgresql.org/docs/current/indexes-opclass.html\n\t *\n\t * https://www.postgresql.org/docs/current/xindex.html\n\t *\n\t * ### Additional types\n\t * If you have the `pg_vector` extension installed in your database, you can use the\n\t * `vector_l2_ops`, `vector_ip_ops`, `vector_cosine_ops`, `vector_l1_ops`, `bit_hamming_ops`, `bit_jaccard_ops`, `halfvec_l2_ops`, `sparsevec_l2_ops` options, which are predefined types.\n\t *\n\t * **You can always specify any string you want in the operator class, in case Drizzle doesn't have it natively in its types**\n\t *\n\t * @param opClass\n\t * @returns\n\t */\n\top(opClass: PgIndexOpClass): Omit<this, 'op'> {\n\t\tthis.indexConfig.opClass = opClass;\n\t\treturn this;\n\t}\n}\n\nexport class IndexedColumn {\n\tstatic readonly [entityKind]: string = 'IndexedColumn';\n\tconstructor(\n\t\tname: string | undefined,\n\t\tkeyAsName: boolean,\n\t\ttype: string,\n\t\tindexConfig: IndexedExtraConfigType,\n\t) {\n\t\tthis.name = name;\n\t\tthis.keyAsName = keyAsName;\n\t\tthis.type = type;\n\t\tthis.indexConfig = indexConfig;\n\t}\n\n\tname: string | undefined;\n\tkeyAsName: boolean;\n\ttype: string;\n\tindexConfig: IndexedExtraConfigType;\n}\n\nexport type AnyPgColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = PgColumn<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n\nexport type PgArrayColumnBuilderBaseConfig = ColumnBuilderBaseConfig<'array', 'PgArray'> & {\n\tsize: number | undefined;\n\tbaseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;\n};\n\nexport class PgArrayBuilder<\n\tT extends PgArrayColumnBuilderBaseConfig,\n\tTBase extends ColumnBuilderBaseConfig<ColumnDataType, string> | PgArrayColumnBuilderBaseConfig,\n> extends PgColumnBuilder<\n\tT,\n\t{\n\t\tbaseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<\n\t\t\t\tTBase,\n\t\t\t\tTBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder\n\t\t\t\t\t: never\n\t\t\t>\n\t\t\t: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;\n\t\tsize: T['size'];\n\t},\n\t{\n\t\tbaseBuilder: TBase extends PgArrayColumnBuilderBaseConfig ? PgArrayBuilder<\n\t\t\t\tTBase,\n\t\t\t\tTBase extends { baseBuilder: infer TBaseBuilder extends ColumnBuilderBaseConfig<any, any> } ? TBaseBuilder\n\t\t\t\t\t: never\n\t\t\t>\n\t\t\t: PgColumnBuilder<TBase, {}, Simplify<Omit<TBase, keyof ColumnBuilderBaseConfig<any, any>>>>;\n\t\tsize: T['size'];\n\t}\n> {\n\tstatic override readonly [entityKind] = 'PgArrayBuilder';\n\n\tconstructor(\n\t\tname: string,\n\t\tbaseBuilder: PgArrayBuilder<T, TBase>['config']['baseBuilder'],\n\t\tsize: T['size'],\n\t) {\n\t\tsuper(name, 'array', 'PgArray');\n\t\tthis.config.baseBuilder = baseBuilder;\n\t\tthis.config.size = size;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnyPgTable<{ name: TTableName }>,\n\t): PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase> {\n\t\tconst baseColumn = this.config.baseBuilder.build(table);\n\t\treturn new PgArray<MakeColumnConfig<T, TTableName> & { size: T['size']; baseBuilder: T['baseBuilder'] }, TBase>(\n\t\t\ttable as AnyPgTable<{ name: MakeColumnConfig<T, TTableName>['tableName'] }>,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t\tbaseColumn,\n\t\t);\n\t}\n}\n\nexport class PgArray<\n\tT extends ColumnBaseConfig<'array', 'PgArray'> & {\n\t\tsize: number | undefined;\n\t\tbaseBuilder: ColumnBuilderBaseConfig<ColumnDataType, string>;\n\t},\n\tTBase extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n> extends PgColumn<T, {}, { size: T['size']; baseBuilder: T['baseBuilder'] }> {\n\treadonly size: T['size'];\n\n\tstatic override readonly [entityKind]: string = 'PgArray';\n\n\tconstructor(\n\t\ttable: AnyPgTable<{ name: T['tableName'] }>,\n\t\tconfig: PgArrayBuilder<T, TBase>['config'],\n\t\treadonly baseColumn: PgColumn,\n\t\treadonly range?: [number | undefined, number | undefined],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.size = config.size;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `${this.baseColumn.getSQLType()}[${typeof this.size === 'number' ? this.size : ''}]`;\n\t}\n\n\toverride mapFromDriverValue(value: unknown[] | string): T['data'] {\n\t\tif (typeof value === 'string') {\n\t\t\t// Thank you node-postgres for not parsing enum arrays\n\t\t\tvalue = parsePgArray(value);\n\t\t}\n\t\treturn value.map((v) => this.baseColumn.mapFromDriverValue(v));\n\t}\n\n\toverride mapToDriverValue(value: unknown[], isNestedArray = false): unknown[] | string {\n\t\tconst a = value.map((v) =>\n\t\t\tv === null\n\t\t\t\t? null\n\t\t\t\t: is(this.baseColumn, PgArray)\n\t\t\t\t? this.baseColumn.mapToDriverValue(v as unknown[], true)\n\t\t\t\t: this.baseColumn.mapToDriverValue(v)\n\t\t);\n\t\tif (isNestedArray) return a;\n\t\treturn makePgArray(a);\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { Column } from './column.ts';\nimport type { GelColumn, GelExtraConfigColumn } from './gel-core/index.ts';\nimport type { MySqlColumn } from './mysql-core/index.ts';\nimport type { ExtraConfigColumn, PgColumn, PgSequenceOptions } from './pg-core/index.ts';\nimport type { SingleStoreColumn } from './singlestore-core/index.ts';\nimport type { SQL } from './sql/sql.ts';\nimport type { SQLiteColumn } from './sqlite-core/index.ts';\nimport type { Assume, Simplify } from './utils.ts';\n\nexport type ColumnDataType =\n\t| 'string'\n\t| 'number'\n\t| 'boolean'\n\t| 'array'\n\t| 'json'\n\t| 'date'\n\t| 'bigint'\n\t| 'custom'\n\t| 'buffer'\n\t| 'dateDuration'\n\t| 'duration'\n\t| 'relDuration'\n\t| 'localTime'\n\t| 'localDate'\n\t| 'localDateTime';\n\nexport type Dialect = 'pg' | 'mysql' | 'sqlite' | 'singlestore' | 'common' | 'gel';\n\nexport type GeneratedStorageMode = 'virtual' | 'stored';\n\nexport type GeneratedType = 'always' | 'byDefault';\n\nexport type GeneratedColumnConfig<TDataType> = {\n\tas: TDataType | SQL | (() => SQL);\n\ttype?: GeneratedType;\n\tmode?: GeneratedStorageMode;\n};\n\nexport type GeneratedIdentityConfig = {\n\tsequenceName?: string;\n\tsequenceOptions?: PgSequenceOptions;\n\ttype: 'always' | 'byDefault';\n};\n\nexport interface ColumnBuilderBaseConfig<TDataType extends ColumnDataType, TColumnType extends string> {\n\tname: string;\n\tdataType: TDataType;\n\tcolumnType: TColumnType;\n\tdata: unknown;\n\tdriverParam: unknown;\n\tenumValues: string[] | undefined;\n}\n\nexport type MakeColumnConfig<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTableName extends string,\n\tTData = T extends { $type: infer U } ? U : T['data'],\n> = {\n\tname: T['name'];\n\ttableName: TTableName;\n\tdataType: T['dataType'];\n\tcolumnType: T['columnType'];\n\tdata: TData;\n\tdriverParam: T['driverParam'];\n\tnotNull: T extends { notNull: true } ? true : false;\n\thasDefault: T extends { hasDefault: true } ? true : false;\n\tisPrimaryKey: T extends { isPrimaryKey: true } ? true : false;\n\tisAutoincrement: T extends { isAutoincrement: true } ? true : false;\n\thasRuntimeDefault: T extends { hasRuntimeDefault: true } ? true : false;\n\tenumValues: T['enumValues'];\n\tbaseColumn: T extends { baseBuilder: infer U extends ColumnBuilderBase } ? BuildColumn<TTableName, U, 'common'>\n\t\t: never;\n\tidentity: T extends { identity: 'always' } ? 'always' : T extends { identity: 'byDefault' } ? 'byDefault' : undefined;\n\tgenerated: T extends { generated: infer G } ? unknown extends G ? undefined\n\t\t: G extends undefined ? undefined\n\t\t: G\n\t\t: undefined;\n} & {};\n\nexport type ColumnBuilderTypeConfig<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> = Simplify<\n\t& {\n\t\tbrand: 'ColumnBuilder';\n\t\tname: T['name'];\n\t\tdataType: T['dataType'];\n\t\tcolumnType: T['columnType'];\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverParam'];\n\t\tnotNull: T extends { notNull: infer U } ? U : boolean;\n\t\thasDefault: T extends { hasDefault: infer U } ? U : boolean;\n\t\tenumValues: T['enumValues'];\n\t\tidentity: T extends { identity: infer U } ? U : unknown;\n\t\tgenerated: T extends { generated: infer G } ? G extends undefined ? unknown : G : unknown;\n\t}\n\t& TTypeConfig\n>;\n\nexport type ColumnBuilderRuntimeConfig<TData, TRuntimeConfig extends object = object> = {\n\tname: string;\n\tkeyAsName: boolean;\n\tnotNull: boolean;\n\tdefault: TData | SQL | undefined;\n\tdefaultFn: (() => TData | SQL) | undefined;\n\tonUpdateFn: (() => TData | SQL) | undefined;\n\thasDefault: boolean;\n\tprimaryKey: boolean;\n\tisUnique: boolean;\n\tuniqueName: string | undefined;\n\tuniqueType: string | undefined;\n\tdataType: string;\n\tcolumnType: string;\n\tgenerated: GeneratedColumnConfig<TData> | undefined;\n\tgeneratedIdentity: GeneratedIdentityConfig | undefined;\n} & TRuntimeConfig;\n\nexport interface ColumnBuilderExtraConfig {\n\tprimaryKeyHasDefault?: boolean;\n}\n\nexport type NotNull<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tnotNull: true;\n\t};\n};\n\nexport type HasDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasDefault: true;\n\t};\n};\n\nexport type IsPrimaryKey<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisPrimaryKey: true;\n\t};\n};\n\nexport type IsAutoincrement<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\tisAutoincrement: true;\n\t};\n};\n\nexport type HasRuntimeDefault<T extends ColumnBuilderBase> = T & {\n\t_: {\n\t\thasRuntimeDefault: true;\n\t};\n};\n\nexport type $Type<T extends ColumnBuilderBase, TType> = T & {\n\t_: {\n\t\t$type: TType;\n\t};\n};\n\nexport type HasGenerated<T extends ColumnBuilderBase, TGenerated extends {} = {}> = T & {\n\t_: {\n\t\thasDefault: true;\n\t\tgenerated: TGenerated;\n\t};\n};\n\nexport type IsIdentity<\n\tT extends ColumnBuilderBase,\n\tTType extends 'always' | 'byDefault',\n> = T & {\n\t_: {\n\t\tnotNull: true;\n\t\thasDefault: true;\n\t\tidentity: TType;\n\t};\n};\nexport interface ColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> {\n\t_: ColumnBuilderTypeConfig<T, TTypeConfig>;\n}\n\n// To understand how to use `ColumnBuilder` and `AnyColumnBuilder`, see `Column` and `AnyColumn` documentation.\nexport abstract class ColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = ColumnBuilderExtraConfig,\n> implements ColumnBuilderBase<T, TTypeConfig> {\n\tstatic readonly [entityKind]: string = 'ColumnBuilder';\n\n\tdeclare _: ColumnBuilderTypeConfig<T, TTypeConfig>;\n\n\tprotected config: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tthis.config = {\n\t\t\tname,\n\t\t\tkeyAsName: name === '',\n\t\t\tnotNull: false,\n\t\t\tdefault: undefined,\n\t\t\thasDefault: false,\n\t\t\tprimaryKey: false,\n\t\t\tisUnique: false,\n\t\t\tuniqueName: undefined,\n\t\t\tuniqueType: undefined,\n\t\t\tdataType,\n\t\t\tcolumnType,\n\t\t\tgenerated: undefined,\n\t\t} as ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>;\n\t}\n\n\t/**\n\t * Changes the data type of the column. Commonly used with `json` columns. Also, useful for branded types.\n\t *\n\t * @example\n\t * ```ts\n\t * const users = pgTable('users', {\n\t * \tid: integer('id').$type<UserId>().primaryKey(),\n\t * \tdetails: json('details').$type<UserDetails>().notNull(),\n\t * });\n\t * ```\n\t */\n\t$type<TType>(): $Type<this, TType> {\n\t\treturn this as $Type<this, TType>;\n\t}\n\n\t/**\n\t * Adds a `not null` clause to the column definition.\n\t *\n\t * Affects the `select` model of the table - columns *without* `not null` will be nullable on select.\n\t */\n\tnotNull(): NotNull<this> {\n\t\tthis.config.notNull = true;\n\t\treturn this as NotNull<this>;\n\t}\n\n\t/**\n\t * Adds a `default <value>` clause to the column definition.\n\t *\n\t * Affects the `insert` model of the table - columns *with* `default` are optional on insert.\n\t *\n\t * If you need to set a dynamic default value, use {@link $defaultFn} instead.\n\t */\n\tdefault(value: (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL): HasDefault<this> {\n\t\tthis.config.default = value;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Adds a dynamic default value to the column.\n\t * The function will be called when the row is inserted, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$defaultFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasRuntimeDefault<HasDefault<this>> {\n\t\tthis.config.defaultFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasRuntimeDefault<HasDefault<this>>;\n\t}\n\n\t/**\n\t * Alias for {@link $defaultFn}.\n\t */\n\t$default = this.$defaultFn;\n\n\t/**\n\t * Adds a dynamic update value to the column.\n\t * The function will be called when the row is updated, and the returned value will be used as the column value if none is provided.\n\t * If no `default` (or `$defaultFn`) value is provided, the function will be called when the row is inserted as well, and the returned value will be used as the column value.\n\t *\n\t * **Note:** This value does not affect the `drizzle-kit` behavior, it is only used at runtime in `drizzle-orm`.\n\t */\n\t$onUpdateFn(\n\t\tfn: () => (this['_'] extends { $type: infer U } ? U : this['_']['data']) | SQL,\n\t): HasDefault<this> {\n\t\tthis.config.onUpdateFn = fn;\n\t\tthis.config.hasDefault = true;\n\t\treturn this as HasDefault<this>;\n\t}\n\n\t/**\n\t * Alias for {@link $onUpdateFn}.\n\t */\n\t$onUpdate = this.$onUpdateFn;\n\n\t/**\n\t * Adds a `primary key` clause to the column definition. This implicitly makes the column `not null`.\n\t *\n\t * In SQLite, `integer primary key` implicitly makes the column auto-incrementing.\n\t */\n\tprimaryKey(): TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t: IsPrimaryKey<NotNull<this>>\n\t{\n\t\tthis.config.primaryKey = true;\n\t\tthis.config.notNull = true;\n\t\treturn this as TExtraConfig['primaryKeyHasDefault'] extends true ? IsPrimaryKey<HasDefault<NotNull<this>>>\n\t\t\t: IsPrimaryKey<NotNull<this>>;\n\t}\n\n\tabstract generatedAlwaysAs(\n\t\tas: SQL | T['data'] | (() => SQL),\n\t\tconfig?: Partial<GeneratedColumnConfig<unknown>>,\n\t): HasGenerated<this, {\n\t\ttype: 'always';\n\t}>;\n\n\t/** @internal Sets the name of the column to the key within the table definition if a name was not given. */\n\tsetName(name: string) {\n\t\tif (this.config.name !== '') return;\n\t\tthis.config.name = name;\n\t}\n}\n\nexport type BuildColumn<\n\tTTableName extends string,\n\tTBuilder extends ColumnBuilderBase,\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? PgColumn<\n\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t{},\n\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t>\n\t: TDialect extends 'mysql' ? MySqlColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'mysqlColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'sqlite' ? SQLiteColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'common' ? Column<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: TDialect extends 'singlestore' ? SingleStoreColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<\n\t\t\t\tOmit<\n\t\t\t\t\tTBuilder['_'],\n\t\t\t\t\t| keyof MakeColumnConfig<TBuilder['_'], TTableName>\n\t\t\t\t\t| 'brand'\n\t\t\t\t\t| 'dialect'\n\t\t\t\t\t| 'primaryKeyHasDefault'\n\t\t\t\t\t| 'singlestoreColumnBuilderBrand'\n\t\t\t\t>\n\t\t\t>\n\t\t>\n\t: TDialect extends 'gel' ? GelColumn<\n\t\t\tMakeColumnConfig<TBuilder['_'], TTableName>,\n\t\t\t{},\n\t\t\tSimplify<Omit<TBuilder['_'], keyof MakeColumnConfig<TBuilder['_'], TTableName> | 'brand' | 'dialect'>>\n\t\t>\n\t: never;\n\nexport type BuildIndexColumn<\n\tTDialect extends Dialect,\n> = TDialect extends 'pg' ? ExtraConfigColumn\n\t: TDialect extends 'gel' ? GelExtraConfigColumn\n\t: never;\n\n// TODO\n// try to make sql as well + indexRaw\n\n// optional after everything will be working as expected\n// also try to leave only needed methods for extraConfig\n// make an error if I pass .asc() to fk and so on\n\nexport type BuildColumns<\n\tTTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildColumn<TTableName, {\n\t\t\t_:\n\t\t\t\t& Omit<TConfigMap[Key]['_'], 'name'>\n\t\t\t\t& { name: TConfigMap[Key]['_']['name'] extends '' ? Assume<Key, string> : TConfigMap[Key]['_']['name'] };\n\t\t}, TDialect>;\n\t}\n\t& {};\n\nexport type BuildExtraConfigColumns<\n\t_TTableName extends string,\n\tTConfigMap extends Record<string, ColumnBuilderBase>,\n\tTDialect extends Dialect,\n> =\n\t& {\n\t\t[Key in keyof TConfigMap]: BuildIndexColumn<TDialect>;\n\t}\n\t& {};\n\nexport type ChangeColumnTableName<TColumn extends Column, TAlias extends string, TDialect extends Dialect> =\n\tTDialect extends 'pg' ? PgColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'mysql' ? MySqlColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'singlestore' ? SingleStoreColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'sqlite' ? SQLiteColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: TDialect extends 'gel' ? GelColumn<MakeColumnConfig<TColumn['_'], TAlias>>\n\t\t: never;\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnyPgColumn, PgColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: PgColumn[];\n\treadonly foreignTable: PgTable;\n\treadonly foreignColumns: PgColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'PgForeignKeyBuilder';\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined = 'no action';\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined = 'no action';\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: PgColumn[];\n\t\t\tforeignColumns: PgColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as PgTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action === undefined ? 'no action' : action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport type AnyForeignKeyBuilder = ForeignKeyBuilder;\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'PgForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(readonly table: PgTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends PgColumn[],\n> = { [Key in keyof TColumns]: AnyPgColumn<{ tableName: TTableName }> };\n\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnyPgColumn<{ tableName: TTableName }>, ...AnyPgColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tconst { name, columns, foreignColumns } = config;\n\t\treturn {\n\t\t\tname,\n\t\t\tcolumns,\n\t\t\tforeignColumns,\n\t\t};\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n", "export function iife<T extends unknown[], U>(fn: (...args: T) => U, ...args: T): U {\n\treturn fn(...args);\n}\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { PgColumn } from './columns/index.ts';\nimport type { PgTable } from './table.ts';\n\nexport function unique(name?: string): UniqueOnConstraintBuilder {\n\treturn new UniqueOnConstraintBuilder(name);\n}\n\nexport function uniqueKeyName(table: PgTable, columns: string[]) {\n\treturn `${table[TableName]}_${columns.join('_')}_unique`;\n}\n\nexport class UniqueConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'PgUniqueConstraintBuilder';\n\n\t/** @internal */\n\tcolumns: PgColumn[];\n\t/** @internal */\n\tnullsNotDistinctConfig = false;\n\n\tconstructor(\n\t\tcolumns: PgColumn[],\n\t\tprivate name?: string,\n\t) {\n\t\tthis.columns = columns;\n\t}\n\n\tnullsNotDistinct() {\n\t\tthis.nullsNotDistinctConfig = true;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: PgTable): UniqueConstraint {\n\t\treturn new UniqueConstraint(table, this.columns, this.nullsNotDistinctConfig, this.name);\n\t}\n}\n\nexport class UniqueOnConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'PgUniqueOnConstraintBuilder';\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tname?: string,\n\t) {\n\t\tthis.name = name;\n\t}\n\n\ton(...columns: [PgColumn, ...PgColumn[]]) {\n\t\treturn new UniqueConstraintBuilder(columns, this.name);\n\t}\n}\n\nexport class UniqueConstraint {\n\tstatic readonly [entityKind]: string = 'PgUniqueConstraint';\n\n\treadonly columns: PgColumn[];\n\treadonly name?: string;\n\treadonly nullsNotDistinct: boolean = false;\n\n\tconstructor(readonly table: PgTable, columns: PgColumn[], nullsNotDistinct: boolean, name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));\n\t\tthis.nullsNotDistinct = nullsNotDistinct;\n\t}\n\n\tgetName() {\n\t\treturn this.name;\n\t}\n}\n", "function parsePgArrayValue(arrayString: string, startFrom: number, inQuotes: boolean): [string, number] {\n\tfor (let i = startFrom; i < arrayString.length; i++) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === '\\\\') {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i + 1];\n\t\t}\n\n\t\tif (inQuotes) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === ',' || char === '}') {\n\t\t\treturn [arrayString.slice(startFrom, i).replace(/\\\\/g, ''), i];\n\t\t}\n\t}\n\n\treturn [arrayString.slice(startFrom).replace(/\\\\/g, ''), arrayString.length];\n}\n\nexport function parsePgNestedArray(arrayString: string, startFrom = 0): [any[], number] {\n\tconst result: any[] = [];\n\tlet i = startFrom;\n\tlet lastCharIsComma = false;\n\n\twhile (i < arrayString.length) {\n\t\tconst char = arrayString[i];\n\n\t\tif (char === ',') {\n\t\t\tif (lastCharIsComma || i === startFrom) {\n\t\t\t\tresult.push('');\n\t\t\t}\n\t\t\tlastCharIsComma = true;\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tlastCharIsComma = false;\n\n\t\tif (char === '\\\\') {\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '\"') {\n\t\t\tconst [value, startFrom] = parsePgArrayValue(arrayString, i + 1, true);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (char === '}') {\n\t\t\treturn [result, i + 1];\n\t\t}\n\n\t\tif (char === '{') {\n\t\t\tconst [value, startFrom] = parsePgNestedArray(arrayString, i + 1);\n\t\t\tresult.push(value);\n\t\t\ti = startFrom;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [value, newStartFrom] = parsePgArrayValue(arrayString, i, false);\n\t\tresult.push(value);\n\t\ti = newStartFrom;\n\t}\n\n\treturn [result, i];\n}\n\nexport function parsePgArray(arrayString: string): any[] {\n\tconst [result] = parsePgNestedArray(arrayString, 1);\n\treturn result;\n}\n\nexport function makePgArray(array: any[]): string {\n\treturn `{${\n\t\tarray.map((item) => {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\treturn makePgArray(item);\n\t\t\t}\n\n\t\t\tif (typeof item === 'string') {\n\t\t\t\treturn `\"${item.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\n\t\t\t}\n\n\t\t\treturn `${item}`;\n\t\t}).join(',')\n\t}}`;\n}\n", "import { entityKind } from './entity.ts';\nimport type { SQL, SQLWrapper } from './sql/sql.ts';\n\nexport interface Subquery<\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTAlias extends string = string,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> extends SQLWrapper {\n\t// SQLWrapper runtime implementation is defined in 'sql/sql.ts'\n}\nexport class Subquery<\n\tTAlias extends string = string,\n\tTSelectedFields extends Record<string, unknown> = Record<string, unknown>,\n> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'Subquery';\n\n\tdeclare _: {\n\t\tbrand: 'Subquery';\n\t\tsql: SQL;\n\t\tselectedFields: TSelectedFields;\n\t\talias: TAlias;\n\t\tisWith: boolean;\n\t\tusedTables?: string[];\n\t};\n\n\tconstructor(sql: SQL, fields: TSelectedFields, alias: string, isWith = false, usedTables: string[] = []) {\n\t\tthis._ = {\n\t\t\tbrand: 'Subquery',\n\t\t\tsql,\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\talias: alias as TAlias,\n\t\t\tisWith,\n\t\t\tusedTables,\n\t\t};\n\t}\n\n\t// getSQL(): SQL<unknown> {\n\t// \treturn new SQL([this]);\n\t// }\n}\n\nexport class WithSubquery<\n\tTAlias extends string = string,\n\tTSelection extends Record<string, unknown> = Record<string, unknown>,\n> extends Subquery<TAlias, TSelection> {\n\tstatic override readonly [entityKind]: string = 'WithSubquery';\n}\n\nexport type WithSubqueryWithoutSelection<TAlias extends string> = WithSubquery<TAlias, {}>;\n", "import type { Span, Tracer } from '@opentelemetry/api';\nimport { iife } from '~/tracing-utils.ts';\nimport { npmVersion } from '~/version.ts';\n\nlet otel: typeof import('@opentelemetry/api') | undefined;\nlet rawTracer: Tracer | undefined;\n// try {\n// \totel = await import('@opentelemetry/api');\n// } catch (err: any) {\n// \tif (err.code !== 'MODULE_NOT_FOUND' && err.code !== 'ERR_MODULE_NOT_FOUND') {\n// \t\tthrow err;\n// \t}\n// }\n\ntype SpanName =\n\t| 'drizzle.operation'\n\t| 'drizzle.prepareQuery'\n\t| 'drizzle.buildSQL'\n\t| 'drizzle.execute'\n\t| 'drizzle.driver.execute'\n\t| 'drizzle.mapResponse';\n\n/** @internal */\nexport const tracer = {\n\tstartActiveSpan<F extends (span?: Span) => unknown>(name: SpanName, fn: F): ReturnType<F> {\n\t\tif (!otel) {\n\t\t\treturn fn() as ReturnType<F>;\n\t\t}\n\n\t\tif (!rawTracer) {\n\t\t\trawTracer = otel.trace.getTracer('drizzle-orm', npmVersion);\n\t\t}\n\n\t\treturn iife(\n\t\t\t(otel, rawTracer) =>\n\t\t\t\trawTracer.startActiveSpan(\n\t\t\t\t\tname,\n\t\t\t\t\t((span: Span) => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn fn(span);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\t\t\tcode: otel.SpanStatusCode.ERROR,\n\t\t\t\t\t\t\t\tmessage: e instanceof Error ? e.message : 'Unknown error', // eslint-disable-line no-instanceof/no-instanceof\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tthrow e;\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tspan.end();\n\t\t\t\t\t\t}\n\t\t\t\t\t}) as F,\n\t\t\t\t),\n\t\t\totel,\n\t\t\trawTracer,\n\t\t);\n\t},\n};\n", "// package.json\nvar version = \"0.44.5\";\n\n// src/version.ts\nvar compatibilityVersion = 10;\nexport {\n compatibilityVersion,\n version as npmVersion\n};\n", "export const ViewBaseConfig = Symbol.for('drizzle:ViewBaseConfig');\n", "import { type AnyColumn, Column, type GetColumnData } from '~/column.ts';\nimport { is } from '~/entity.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tisDriverValueEncoder,\n\tisSQLWrapper,\n\tParam,\n\tPlaceholder,\n\tSQL,\n\tsql,\n\ttype SQLChunk,\n\ttype SQLWrapper,\n\tStringChunk,\n\tView,\n} from '../sql.ts';\n\nexport function bindIfParam(value: unknown, column: SQLWrapper): SQLChunk {\n\tif (\n\t\tisDriverValueEncoder(column)\n\t\t&& !isSQLWrapper(value)\n\t\t&& !is(value, Param)\n\t\t&& !is(value, Placeholder)\n\t\t&& !is(value, Column)\n\t\t&& !is(value, Table)\n\t\t&& !is(value, View)\n\t) {\n\t\treturn new Param(value, column);\n\t}\n\treturn value as SQLChunk;\n}\n\nexport interface BinaryOperator {\n\t<TColumn extends Column>(\n\t\tleft: TColumn,\n\t\tright: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\t): SQL;\n\t<T>(left: SQL.Aliased<T>, right: T | SQLWrapper): SQL;\n\t<T extends SQLWrapper>(\n\t\tleft: Exclude<T, SQL.Aliased | Column>,\n\t\tright: unknown,\n\t): SQL;\n}\n\n/**\n * Test that two values are equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is null, you may want to use\n * `isNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford\n * db.select().from(cars)\n * .where(eq(cars.make, 'Ford'))\n * ```\n *\n * @see isNull for a way to test equality to NULL.\n */\nexport const eq: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} = ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that two values are not equal.\n *\n * Remember that the SQL standard dictates that\n * two NULL values are not equal, so if you want to test\n * whether a value is not null, you may want to use\n * `isNotNull` instead.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars not made by Ford\n * db.select().from(cars)\n * .where(ne(cars.make, 'Ford'))\n * ```\n *\n * @see isNotNull for a way to test whether a value is not null.\n */\nexport const ne: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <> ${bindIfParam(right, left)}`;\n};\n\n/**\n * Combine a list of conditions with the `and` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * and(\n * eq(cars.make, 'Volvo'),\n * eq(cars.year, 1950),\n * )\n * )\n * ```\n */\nexport function and(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function and(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' and ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Combine a list of conditions with the `or` operator. Conditions\n * that are equal `undefined` are automatically ignored.\n *\n * ## Examples\n *\n * ```ts\n * db.select().from(cars)\n * .where(\n * or(\n * eq(cars.make, 'GM'),\n * eq(cars.make, 'Ford'),\n * )\n * )\n * ```\n */\nexport function or(...conditions: (SQLWrapper | undefined)[]): SQL | undefined;\nexport function or(\n\t...unfilteredConditions: (SQLWrapper | undefined)[]\n): SQL | undefined {\n\tconst conditions = unfilteredConditions.filter(\n\t\t(c): c is Exclude<typeof c, undefined> => c !== undefined,\n\t);\n\n\tif (conditions.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tif (conditions.length === 1) {\n\t\treturn new SQL(conditions);\n\t}\n\n\treturn new SQL([\n\t\tnew StringChunk('('),\n\t\tsql.join(conditions, new StringChunk(' or ')),\n\t\tnew StringChunk(')'),\n\t]);\n}\n\n/**\n * Negate the meaning of an expression using the `not` keyword.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars _not_ made by GM or Ford.\n * db.select().from(cars)\n * .where(not(inArray(cars.make, ['GM', 'Ford'])))\n * ```\n */\nexport function not(condition: SQLWrapper): SQL {\n\treturn sql`not ${condition}`;\n}\n\n/**\n * Test that the first expression passed is greater than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made after 2000.\n * db.select().from(cars)\n * .where(gt(cars.year, 2000))\n * ```\n *\n * @see gte for greater-than-or-equal\n */\nexport const gt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} > ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is greater than\n * or equal to the second expression. Use `gt` to\n * test whether an expression is strictly greater\n * than another.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made on or after 2000.\n * db.select().from(cars)\n * .where(gte(cars.year, 2000))\n * ```\n *\n * @see gt for a strictly greater-than condition\n */\nexport const gte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} >= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lt(cars.year, 2000))\n * ```\n *\n * @see lte for less-than-or-equal\n */\nexport const lt: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} < ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test that the first expression passed is less than\n * or equal to the second expression.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made before 2000.\n * db.select().from(cars)\n * .where(lte(cars.year, 2000))\n * ```\n *\n * @see lt for a strictly less-than condition\n */\nexport const lte: BinaryOperator = (left: SQLWrapper, right: unknown): SQL => {\n\treturn sql`${left} <= ${bindIfParam(right, left)}`;\n};\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value from a list passed as the second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by Ford or GM.\n * db.select().from(cars)\n * .where(inArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see notInArray for the inverse of this test\n */\nexport function inArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function inArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: ReadonlyArray<GetColumnData<TColumn, 'raw'> | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL;\nexport function inArray(\n\tcolumn: SQLWrapper,\n\tvalues: ReadonlyArray<unknown | Placeholder> | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`false`;\n\t\t}\n\t\treturn sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether the first parameter, a column or expression,\n * has a value that is not present in a list passed as the\n * second argument.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made by any company except Ford or GM.\n * db.select().from(cars)\n * .where(notInArray(cars.make, ['Ford', 'GM']))\n * ```\n *\n * @see inArray for the inverse of this test\n */\nexport function notInArray<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function notInArray(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\treturn sql`true`;\n\t\t}\n\t\treturn sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\n\treturn sql`${column} not in ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test whether an expression is NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have no discontinuedAt date.\n * db.select().from(cars)\n * .where(isNull(cars.discontinuedAt))\n * ```\n *\n * @see isNotNull for the inverse of this test\n */\nexport function isNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is null`;\n}\n\n/**\n * Test whether an expression is not NULL. By the SQL standard,\n * NULL is neither equal nor not equal to itself, so\n * it's recommended to use `isNull` and `notIsNull` for\n * comparisons to NULL.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars that have been discontinued.\n * db.select().from(cars)\n * .where(isNotNull(cars.discontinuedAt))\n * ```\n *\n * @see isNull for the inverse of this test\n */\nexport function isNotNull(value: SQLWrapper): SQL {\n\treturn sql`${value} is not null`;\n}\n\n/**\n * Test whether a subquery evaluates to have any rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column has a match in a cities\n * // table.\n * db\n * .select()\n * .from(users)\n * .where(\n * exists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see notExists for the inverse of this test\n */\nexport function exists(subquery: SQLWrapper): SQL {\n\treturn sql`exists ${subquery}`;\n}\n\n/**\n * Test whether a subquery doesn't include any result\n * rows.\n *\n * ## Examples\n *\n * ```ts\n * // Users whose `homeCity` column doesn't match\n * // a row in the cities table.\n * db\n * .select()\n * .from(users)\n * .where(\n * notExists(db.select()\n * .from(cities)\n * .where(eq(users.homeCity, cities.id))),\n * );\n * ```\n *\n * @see exists for the inverse of this test\n */\nexport function notExists(subquery: SQLWrapper): SQL {\n\treturn sql`not exists ${subquery}`;\n}\n\n/**\n * Test whether an expression is between two values. This\n * is an easier way to express range tests, which would be\n * expressed mathematically as `x <= a <= y` but in SQL\n * would have to be like `a >= x AND a <= y`.\n *\n * Between is inclusive of the endpoints: if `column`\n * is equal to `min` or `max`, it will be TRUE.\n *\n * ## Examples\n *\n * ```ts\n * // Select cars made between 1990 and 2000\n * db.select().from(cars)\n * .where(between(cars.year, 1990, 2000))\n * ```\n *\n * @see notBetween for the inverse of this test\n */\nexport function between<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function between<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function between<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function between(column: SQLWrapper, min: unknown, max: unknown): SQL {\n\treturn sql`${column} between ${bindIfParam(min, column)} and ${\n\t\tbindIfParam(\n\t\t\tmax,\n\t\t\tcolumn,\n\t\t)\n\t}`;\n}\n\n/**\n * Test whether an expression is not between two values.\n *\n * This, like `between`, includes its endpoints, so if\n * the `column` is equal to `min` or `max`, in this case\n * it will evaluate to FALSE.\n *\n * ## Examples\n *\n * ```ts\n * // Exclude cars made in the 1970s\n * db.select().from(cars)\n * .where(notBetween(cars.year, 1970, 1979))\n * ```\n *\n * @see between for the inverse of this test\n */\nexport function notBetween<T>(\n\tcolumn: SQL.Aliased,\n\tmin: T | SQLWrapper,\n\tmax: T | SQLWrapper,\n): SQL;\nexport function notBetween<TColumn extends AnyColumn>(\n\tcolumn: TColumn,\n\tmin: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n\tmax: GetColumnData<TColumn, 'raw'> | SQLWrapper,\n): SQL;\nexport function notBetween<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tmin: unknown,\n\tmax: unknown,\n): SQL;\nexport function notBetween(\n\tcolumn: SQLWrapper,\n\tmin: unknown,\n\tmax: unknown,\n): SQL {\n\treturn sql`${column} not between ${\n\t\tbindIfParam(\n\t\t\tmin,\n\t\t\tcolumn,\n\t\t)\n\t} and ${bindIfParam(max, column)}`;\n}\n\n/**\n * Compare a column to a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(like(cars.name, '%Turbo%'))\n * ```\n *\n * @see ilike for a case-insensitive version of this condition\n */\nexport function like(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} like ${value}`;\n}\n\n/**\n * The inverse of like - this tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"ROver\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see like for the inverse condition\n * @see notIlike for a case-insensitive version of this condition\n */\nexport function notLike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not like ${value}`;\n}\n\n/**\n * Case-insensitively compare a column to a pattern,\n * which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * Unlike like, this performs a case-insensitive comparison.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars with 'Turbo' in their names.\n * db.select().from(cars)\n * .where(ilike(cars.name, '%Turbo%'))\n * ```\n *\n * @see like for a case-sensitive version of this condition\n */\nexport function ilike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} ilike ${value}`;\n}\n\n/**\n * The inverse of ilike - this case-insensitively tests that a given column\n * does not match a pattern, which can include `%` and `_`\n * characters to match multiple variations. Including `%`\n * in the pattern matches zero or more characters, and including\n * `_` will match a single character.\n *\n * ## Examples\n *\n * ```ts\n * // Select all cars that don't have \"Rover\" in their name.\n * db.select().from(cars)\n * .where(notLike(cars.name, '%Rover%'))\n * ```\n *\n * @see ilike for the inverse condition\n * @see notLike for a case-sensitive version of this condition\n */\nexport function notIlike(column: Column | SQL.Aliased | SQL, value: string | SQLWrapper): SQL {\n\treturn sql`${column} not ilike ${value}`;\n}\n\n/**\n * Test that a column or expression contains all elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\" and \"ORM\".\n * db.select().from(posts)\n * .where(arrayContains(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContained to find if an array contains all elements of a column or expression\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContains<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContains<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContains(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContains requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} @> ${array}`;\n\t}\n\n\treturn sql`${column} @> ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that the list passed as the second argument contains\n * all elements of a column or expression.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both,\n * // but filtering posts that have additional tags.\n * db.select().from(posts)\n * .where(arrayContained(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayOverlaps to find if a column or expression contains any elements of an array\n */\nexport function arrayContained<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayContained<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayContained(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayContained requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} <@ ${array}`;\n\t}\n\n\treturn sql`${column} <@ ${bindIfParam(values, column)}`;\n}\n\n/**\n * Test that a column or expression contains any elements of\n * the list passed as the second argument.\n *\n * ## Throws\n *\n * The argument passed in the second array can't be empty:\n * if an empty is provided, this method will throw.\n *\n * ## Examples\n *\n * ```ts\n * // Select posts where its tags contain \"Typescript\", \"ORM\" or both.\n * db.select().from(posts)\n * .where(arrayOverlaps(posts.tags, ['Typescript', 'ORM']))\n * ```\n *\n * @see arrayContains to find if a column or expression contains all elements of an array\n * @see arrayContained to find if an array contains all elements of a column or expression\n */\nexport function arrayOverlaps<T>(\n\tcolumn: SQL.Aliased<T>,\n\tvalues: (T | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<TColumn extends Column>(\n\tcolumn: TColumn,\n\tvalues: (GetColumnData<TColumn, 'raw'> | Placeholder) | SQLWrapper,\n): SQL;\nexport function arrayOverlaps<T extends SQLWrapper>(\n\tcolumn: Exclude<T, SQL.Aliased | Column>,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL;\nexport function arrayOverlaps(\n\tcolumn: SQLWrapper,\n\tvalues: (unknown | Placeholder)[] | SQLWrapper,\n): SQL {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('arrayOverlaps requires at least one value');\n\t\t}\n\t\tconst array = sql`${bindIfParam(values, column)}`;\n\t\treturn sql`${column} && ${array}`;\n\t}\n\n\treturn sql`${column} && ${bindIfParam(values, column)}`;\n}\n", "import type { AnyColumn } from '../../column.ts';\nimport type { SQL, SQLWrapper } from '../sql.ts';\nimport { sql } from '../sql.ts';\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in ascending\n * order. By the SQL standard, ascending order is the\n * default, so it is not usually necessary to specify\n * ascending sort order.\n *\n * ## Examples\n *\n * ```ts\n * // Return cars, starting with the oldest models\n * // and going in ascending order to the newest.\n * db.select().from(cars)\n * .orderBy(asc(cars.year));\n * ```\n *\n * @see desc to sort in descending order\n */\nexport function asc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} asc`;\n}\n\n/**\n * Used in sorting, this specifies that the given\n * column or expression should be sorted in descending\n * order.\n *\n * ## Examples\n *\n * ```ts\n * // Select users, with the most recently created\n * // records coming first.\n * db.select().from(users)\n * .orderBy(desc(users.createdAt));\n * ```\n *\n * @see asc to sort in ascending order\n */\nexport function desc(column: AnyColumn | SQLWrapper): SQL {\n\treturn sql`${column} desc`;\n}\n", "import type { Cache } from '~/cache/core/cache.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { ExtractTablesWithRelations, RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { type ColumnsSelection, type SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport {\n\tQueryBuilder,\n\tSQLiteDeleteBase,\n\tSQLiteInsertBuilder,\n\tSQLiteSelectBuilder,\n\tSQLiteUpdateBuilder,\n} from '~/sqlite-core/query-builders/index.ts';\nimport type {\n\tDBResult,\n\tResult,\n\tSQLiteSession,\n\tSQLiteTransaction,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport type { DrizzleTypeError } from '~/utils.ts';\nimport { SQLiteCountBuilder } from './query-builders/count.ts';\nimport { RelationalQueryBuilder } from './query-builders/query.ts';\nimport { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFields } from './query-builders/select.types.ts';\nimport type { WithBuilder } from './subquery.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\n\nexport class BaseSQLiteDatabase<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown> = Record<string, never>,\n\tTSchema extends TablesRelationalConfig = ExtractTablesWithRelations<TFullSchema>,\n> {\n\tstatic readonly [entityKind]: string = 'BaseSQLiteDatabase';\n\n\tdeclare readonly _: {\n\t\treadonly schema: TSchema | undefined;\n\t\treadonly fullSchema: TFullSchema;\n\t\treadonly tableNamesMap: Record<string, string>;\n\t};\n\n\tquery: TFullSchema extends Record<string, never>\n\t\t? DrizzleTypeError<'Seems like the schema generic is missing - did you forget to add it to your DB type?'>\n\t\t: {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\n\tconstructor(\n\t\tprivate resultKind: TResultKind,\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t\t/** @internal */\n\t\treadonly session: SQLiteSession<TResultKind, TRunResult, TFullSchema, TSchema>,\n\t\tschema: RelationalSchemaConfig<TSchema> | undefined,\n\t) {\n\t\tthis._ = schema\n\t\t\t? {\n\t\t\t\tschema: schema.schema,\n\t\t\t\tfullSchema: schema.fullSchema as TFullSchema,\n\t\t\t\ttableNamesMap: schema.tableNamesMap,\n\t\t\t}\n\t\t\t: {\n\t\t\t\tschema: undefined,\n\t\t\t\tfullSchema: {} as TFullSchema,\n\t\t\t\ttableNamesMap: {},\n\t\t\t};\n\t\tthis.query = {} as typeof this['query'];\n\t\tconst query = this.query as {\n\t\t\t[K in keyof TSchema]: RelationalQueryBuilder<TResultKind, TFullSchema, TSchema, TSchema[K]>;\n\t\t};\n\t\tif (this._.schema) {\n\t\t\tfor (const [tableName, columns] of Object.entries(this._.schema)) {\n\t\t\t\tquery[tableName as keyof TSchema] = new RelationalQueryBuilder(\n\t\t\t\t\tresultKind,\n\t\t\t\t\tschema!.fullSchema,\n\t\t\t\t\tthis._.schema,\n\t\t\t\t\tthis._.tableNamesMap,\n\t\t\t\t\tschema!.fullSchema[tableName] as SQLiteTable,\n\t\t\t\t\tcolumns,\n\t\t\t\t\tdialect,\n\t\t\t\t\tsession as SQLiteSession<any, any, any, any> as any,\n\t\t\t\t) as typeof query[keyof TSchema];\n\t\t\t}\n\t\t}\n\t\tthis.$cache = { invalidate: async (_params: any) => {} };\n\t}\n\n\t/**\n\t * Creates a subquery that defines a temporary named result set as a CTE.\n\t *\n\t * It is useful for breaking down complex queries into simpler parts and for reusing the result set in subsequent parts of the query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param alias The alias for the subquery.\n\t *\n\t * Failure to provide an alias will result in a DrizzleTypeError, preventing the subquery from being referenced in other queries.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Create a subquery with alias 'sq' and use it in the select query\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t *\n\t * To select arbitrary SQL values as fields in a CTE and reference them in other CTEs or in the main query, you need to add aliases to them:\n\t *\n\t * ```ts\n\t * // Select an arbitrary SQL value as a field in a CTE and reference it in the main query\n\t * const sq = db.$with('sq').as(db.select({\n\t * name: sql<string>`upper(${users.name})`.as('name'),\n\t * })\n\t * .from(users));\n\t *\n\t * const result = await db.with(sq).select({ name: sq.name }).from(sq);\n\t * ```\n\t */\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst self = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(new QueryBuilder(self.dialect));\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t);\n\t\t};\n\t\treturn { as };\n\t};\n\n\t$count(\n\t\tsource: SQLiteTable | SQLiteViewBase | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t) {\n\t\treturn new SQLiteCountBuilder({ source, filters, session: this.session });\n\t}\n\n\t/**\n\t * Incorporates a previously defined CTE (using `$with`) into the main query.\n\t *\n\t * This method allows the main query to reference a temporary named result set.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#with-clause}\n\t *\n\t * @param queries The CTEs to incorporate into the main query.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Define a subquery 'sq' as a CTE using $with\n\t * const sq = db.$with('sq').as(db.select().from(users).where(eq(users.id, 42)));\n\t *\n\t * // Incorporate the CTE 'sq' into the main query and select from it\n\t * const result = await db.with(sq).select().from(sq);\n\t * ```\n\t */\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\t/**\n\t\t * Creates a select query.\n\t\t *\n\t\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all columns and all rows from the 'cars' table\n\t\t * const allCars: Car[] = await db.select().from(cars);\n\t\t *\n\t\t * // Select specific columns and all rows from the 'cars' table\n\t\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * brand: cars.brand\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t *\n\t\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t\t *\n\t\t * ```ts\n\t\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t\t * id: cars.id,\n\t\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t\t * })\n\t\t * .from(cars);\n\t\t * ```\n\t\t */\n\t\tfunction select(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction select(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Adds `distinct` expression to the select query.\n\t\t *\n\t\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t\t *\n\t\t * Use `.from()` method to specify which table to select from.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t\t *\n\t\t * @param fields The selection object.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Select all unique rows from the 'cars' table\n\t\t * await db.selectDistinct()\n\t\t * .from(cars)\n\t\t * .orderBy(cars.id, cars.brand, cars.color);\n\t\t *\n\t\t * // Select all unique brands from the 'cars' table\n\t\t * await db.selectDistinct({ brand: cars.brand })\n\t\t * .from(cars)\n\t\t * .orderBy(cars.brand);\n\t\t * ```\n\t\t */\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\t\tfunction selectDistinct(\n\t\t\tfields?: SelectedFields,\n\t\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: self.session,\n\t\t\t\tdialect: self.dialect,\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Creates an update query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t\t *\n\t\t * Use `.set()` method to specify which values to update.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t\t *\n\t\t * @param table The table to update.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Update all rows in the 'cars' table\n\t\t * await db.update(cars).set({ color: 'red' });\n\t\t *\n\t\t * // Update rows with filters and conditions\n\t\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t\t *\n\t\t * // Update with returning clause\n\t\t * const updatedCar: Car[] = await db.update(cars)\n\t\t * .set({ color: 'red' })\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction update<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteUpdateBuilder(table, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates an insert query.\n\t\t *\n\t\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t\t *\n\t\t * @param table The table to insert into.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Insert one row\n\t\t * await db.insert(cars).values({ brand: 'BMW' });\n\t\t *\n\t\t * // Insert multiple rows\n\t\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t\t *\n\t\t * // Insert with returning clause\n\t\t * const insertedCar: Car[] = await db.insert(cars)\n\t\t * .values({ brand: 'BMW' })\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction insert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteInsertBuilder(into, self.session, self.dialect, queries);\n\t\t}\n\n\t\t/**\n\t\t * Creates a delete query.\n\t\t *\n\t\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t\t *\n\t\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t\t *\n\t\t * @param table The table to delete from.\n\t\t *\n\t\t * @example\n\t\t *\n\t\t * ```ts\n\t\t * // Delete all rows in the 'cars' table\n\t\t * await db.delete(cars);\n\t\t *\n\t\t * // Delete rows with filters and conditions\n\t\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t\t *\n\t\t * // Delete with returning clause\n\t\t * const deletedCar: Car[] = await db.delete(cars)\n\t\t * .where(eq(cars.id, 1))\n\t\t * .returning();\n\t\t * ```\n\t\t */\n\t\tfunction delete_<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\t\treturn new SQLiteDeleteBase(from, self.session, self.dialect, queries);\n\t\t}\n\n\t\treturn { select, selectDistinct, update, insert, delete: delete_ };\n\t}\n\n\t/**\n\t * Creates a select query.\n\t *\n\t * Calling this method with no arguments will select all columns from the table. Pass a selection object to specify the columns you want to select.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all columns and all rows from the 'cars' table\n\t * const allCars: Car[] = await db.select().from(cars);\n\t *\n\t * // Select specific columns and all rows from the 'cars' table\n\t * const carsIdsAndBrands: { id: number; brand: string }[] = await db.select({\n\t * id: cars.id,\n\t * brand: cars.brand\n\t * })\n\t * .from(cars);\n\t * ```\n\t *\n\t * Like in SQL, you can use arbitrary expressions as selection fields, not just table columns:\n\t *\n\t * ```ts\n\t * // Select specific columns along with expression and all rows from the 'cars' table\n\t * const carsIdsAndLowerNames: { id: number; lowerBrand: string }[] = await db.select({\n\t * id: cars.id,\n\t * lowerBrand: sql<string>`lower(${cars.brand})`,\n\t * })\n\t * .from(cars);\n\t * ```\n\t */\n\tselect(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselect(fields?: SelectedFields): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: this.session, dialect: this.dialect });\n\t}\n\n\t/**\n\t * Adds `distinct` expression to the select query.\n\t *\n\t * Calling this method will return only unique values. When multiple columns are selected, it returns rows with unique combinations of values in these columns.\n\t *\n\t * Use `.from()` method to specify which table to select from.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#distinct}\n\t *\n\t * @param fields The selection object.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique rows from the 'cars' table\n\t * await db.selectDistinct()\n\t * .from(cars)\n\t * .orderBy(cars.id, cars.brand, cars.color);\n\t *\n\t * // Select all unique brands from the 'cars' table\n\t * await db.selectDistinct({ brand: cars.brand })\n\t * .from(cars)\n\t * .orderBy(cars.brand);\n\t * ```\n\t */\n\tselectDistinct(): SQLiteSelectBuilder<undefined, TResultKind, TRunResult>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, TResultKind, TRunResult>;\n\tselectDistinct(\n\t\tfields?: SelectedFields,\n\t): SQLiteSelectBuilder<SelectedFields | undefined, TResultKind, TRunResult> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t/**\n\t * Creates an update query.\n\t *\n\t * Calling this method without `.where()` clause will update all rows in a table. The `.where()` clause specifies which rows should be updated.\n\t *\n\t * Use `.set()` method to specify which values to update.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param table The table to update.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Update all rows in the 'cars' table\n\t * await db.update(cars).set({ color: 'red' });\n\t *\n\t * // Update rows with filters and conditions\n\t * await db.update(cars).set({ color: 'red' }).where(eq(cars.brand, 'BMW'));\n\t *\n\t * // Update with returning clause\n\t * const updatedCar: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tupdate<TTable extends SQLiteTable>(table: TTable): SQLiteUpdateBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteUpdateBuilder(table, this.session, this.dialect);\n\t}\n\n\t$cache: { invalidate: Cache['onMutate'] };\n\n\t/**\n\t * Creates an insert query.\n\t *\n\t * Calling this method will create new rows in a table. Use `.values()` method to specify which values to insert.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert}\n\t *\n\t * @param table The table to insert into.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Insert one row\n\t * await db.insert(cars).values({ brand: 'BMW' });\n\t *\n\t * // Insert multiple rows\n\t * await db.insert(cars).values([{ brand: 'BMW' }, { brand: 'Porsche' }]);\n\t *\n\t * // Insert with returning clause\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t * ```\n\t */\n\tinsert<TTable extends SQLiteTable>(into: TTable): SQLiteInsertBuilder<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteInsertBuilder(into, this.session, this.dialect);\n\t}\n\n\t/**\n\t * Creates a delete query.\n\t *\n\t * Calling this method without `.where()` clause will delete all rows in a table. The `.where()` clause specifies which rows should be deleted.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param table The table to delete from.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Delete all rows in the 'cars' table\n\t * await db.delete(cars);\n\t *\n\t * // Delete rows with filters and conditions\n\t * await db.delete(cars).where(eq(cars.color, 'green'));\n\t *\n\t * // Delete with returning clause\n\t * const deletedCar: Car[] = await db.delete(cars)\n\t * .where(eq(cars.id, 1))\n\t * .returning();\n\t * ```\n\t */\n\tdelete<TTable extends SQLiteTable>(from: TTable): SQLiteDeleteBase<TTable, TResultKind, TRunResult> {\n\t\treturn new SQLiteDeleteBase(from, this.session, this.dialect);\n\t}\n\n\trun(query: SQLWrapper | string): DBResult<TResultKind, TRunResult> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.run(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'run',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawRunValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, TRunResult>;\n\t\t}\n\t\treturn this.session.run(sequel) as DBResult<TResultKind, TRunResult>;\n\t}\n\n\tall<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.all(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'all',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawAllValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.all(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\tget<T = unknown>(query: SQLWrapper | string): DBResult<TResultKind, T> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.get(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'get',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawGetValueFromBatchResult.bind(this.session),\n\t\t\t) as DBResult<TResultKind, T>;\n\t\t}\n\t\treturn this.session.get(sequel) as DBResult<TResultKind, T>;\n\t}\n\n\tvalues<T extends unknown[] = unknown[]>(query: SQLWrapper | string): DBResult<TResultKind, T[]> {\n\t\tconst sequel = typeof query === 'string' ? sql.raw(query) : query.getSQL();\n\t\tif (this.resultKind === 'async') {\n\t\t\treturn new SQLiteRaw(\n\t\t\t\tasync () => this.session.values(sequel),\n\t\t\t\t() => sequel,\n\t\t\t\t'values',\n\t\t\t\tthis.dialect as SQLiteAsyncDialect,\n\t\t\t\tthis.session.extractRawValuesValueFromBatchResult.bind(this.session),\n\t\t\t) as any;\n\t\t}\n\t\treturn this.session.values(sequel) as DBResult<TResultKind, T[]>;\n\t}\n\n\ttransaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T> {\n\t\treturn this.session.transaction(transaction, config);\n\t}\n}\n\nexport type SQLiteWithReplicas<Q> = Q & { $primary: Q };\n\nexport const withReplicas = <\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tQ extends BaseSQLiteDatabase<\n\t\tTResultKind,\n\t\tTRunResult,\n\t\tTFullSchema,\n\t\tTSchema extends Record<string, unknown> ? ExtractTablesWithRelations<TFullSchema> : TSchema\n\t>,\n>(\n\tprimary: Q,\n\treplicas: [Q, ...Q[]],\n\tgetReplica: (replicas: Q[]) => Q = () => replicas[Math.floor(Math.random() * replicas.length)]!,\n): SQLiteWithReplicas<Q> => {\n\tconst select: Q['select'] = (...args: []) => getReplica(replicas).select(...args);\n\tconst selectDistinct: Q['selectDistinct'] = (...args: []) => getReplica(replicas).selectDistinct(...args);\n\tconst $count: Q['$count'] = (...args: [any]) => getReplica(replicas).$count(...args);\n\tconst $with: Q['with'] = (...args: []) => getReplica(replicas).with(...args);\n\n\tconst update: Q['update'] = (...args: [any]) => primary.update(...args);\n\tconst insert: Q['insert'] = (...args: [any]) => primary.insert(...args);\n\tconst $delete: Q['delete'] = (...args: [any]) => primary.delete(...args);\n\tconst run: Q['run'] = (...args: [any]) => primary.run(...args);\n\tconst all: Q['all'] = (...args: [any]) => primary.all(...args);\n\tconst get: Q['get'] = (...args: [any]) => primary.get(...args);\n\tconst values: Q['values'] = (...args: [any]) => primary.values(...args);\n\tconst transaction: Q['transaction'] = (...args: [any]) => primary.transaction(...args);\n\n\treturn {\n\t\t...primary,\n\t\tupdate,\n\t\tinsert,\n\t\tdelete: $delete,\n\t\trun,\n\t\tall,\n\t\tget,\n\t\tvalues,\n\t\ttransaction,\n\t\t$primary: primary,\n\t\tselect,\n\t\tselectDistinct,\n\t\t$count,\n\t\twith: $with,\n\t\tget query() {\n\t\t\treturn getReplica(replicas).query;\n\t\t},\n\t};\n};\n", "import { ColumnAliasProxyHandler, TableAliasProxyHandler } from './alias.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport { SQL, View } from './sql/sql.ts';\nimport { Subquery } from './subquery.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class SelectionProxyHandler<T extends Subquery | Record<string, unknown> | View>\n\timplements ProxyHandler<Subquery | Record<string, unknown> | View>\n{\n\tstatic readonly [entityKind]: string = 'SelectionProxyHandler';\n\n\tprivate config: {\n\t\t/**\n\t\t * Table alias for the columns\n\t\t */\n\t\talias?: string;\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL.Aliased` and it's not a selection field (from a subquery)\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `alias` - return the field alias\n\t\t */\n\t\tsqlAliasedBehavior: 'sql' | 'alias';\n\t\t/**\n\t\t * What to do when a field is an instance of `SQL` and it doesn't have an alias declared\n\t\t *\n\t\t * `sql` - return the underlying SQL expression\n\t\t *\n\t\t * `error` - return a DrizzleTypeError on type level and throw an error on runtime\n\t\t */\n\t\tsqlBehavior: 'sql' | 'error';\n\n\t\t/**\n\t\t * Whether to replace the original name of the column with the alias\n\t\t * Should be set to `true` for views creation\n\t\t * @default false\n\t\t */\n\t\treplaceOriginalName?: boolean;\n\t};\n\n\tconstructor(config: SelectionProxyHandler<T>['config']) {\n\t\tthis.config = { ...config };\n\t}\n\n\tget(subquery: T, prop: string | symbol): any {\n\t\tif (prop === '_') {\n\t\t\treturn {\n\t\t\t\t...subquery['_' as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as Subquery)._.selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...subquery[ViewBaseConfig as keyof typeof subquery],\n\t\t\t\tselectedFields: new Proxy(\n\t\t\t\t\t(subquery as View)[ViewBaseConfig].selectedFields,\n\t\t\t\t\tthis as ProxyHandler<Record<string, unknown>>,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\n\t\tif (typeof prop === 'symbol') {\n\t\t\treturn subquery[prop as keyof typeof subquery];\n\t\t}\n\n\t\tconst columns = is(subquery, Subquery)\n\t\t\t? subquery._.selectedFields\n\t\t\t: is(subquery, View)\n\t\t\t? subquery[ViewBaseConfig].selectedFields\n\t\t\t: subquery;\n\t\tconst value: unknown = columns[prop as keyof typeof columns];\n\n\t\tif (is(value, SQL.Aliased)) {\n\t\t\t// Never return the underlying SQL expression for a field previously selected in a subquery\n\t\t\tif (this.config.sqlAliasedBehavior === 'sql' && !value.isSelectionField) {\n\t\t\t\treturn value.sql;\n\t\t\t}\n\n\t\t\tconst newValue = value.clone();\n\t\t\tnewValue.isSelectionField = true;\n\t\t\treturn newValue;\n\t\t}\n\n\t\tif (is(value, SQL)) {\n\t\t\tif (this.config.sqlBehavior === 'sql') {\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t`You tried to reference \"${prop}\" field from a subquery, which is a raw SQL field, but it doesn't have an alias declared. Please add an alias to the field using \".as('alias')\" method.`,\n\t\t\t);\n\t\t}\n\n\t\tif (is(value, Column)) {\n\t\t\tif (this.config.alias) {\n\t\t\t\treturn new Proxy(\n\t\t\t\t\tvalue,\n\t\t\t\t\tnew ColumnAliasProxyHandler(\n\t\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\t\tvalue.table,\n\t\t\t\t\t\t\tnew TableAliasProxyHandler(this.config.alias, this.config.replaceOriginalName ?? false),\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\treturn value;\n\t\t}\n\n\t\tif (typeof value !== 'object' || value === null) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn new Proxy(value, new SelectionProxyHandler(this.config));\n\t}\n}\n", "import type { AnyColumn } from './column.ts';\nimport { Column } from './column.ts';\nimport { entityKind, is } from './entity.ts';\nimport type { Relation } from './relations.ts';\nimport type { View } from './sql/sql.ts';\nimport { SQL, sql } from './sql/sql.ts';\nimport { Table } from './table.ts';\nimport { ViewBaseConfig } from './view-common.ts';\n\nexport class ColumnAliasProxyHandler<TColumn extends Column> implements ProxyHandler<TColumn> {\n\tstatic readonly [entityKind]: string = 'ColumnAliasProxyHandler';\n\n\tconstructor(private table: Table | View) {}\n\n\tget(columnObj: TColumn, prop: string | symbol): any {\n\t\tif (prop === 'table') {\n\t\t\treturn this.table;\n\t\t}\n\n\t\treturn columnObj[prop as keyof TColumn];\n\t}\n}\n\nexport class TableAliasProxyHandler<T extends Table | View> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'TableAliasProxyHandler';\n\n\tconstructor(private alias: string, private replaceOriginalName: boolean) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === Table.Symbol.IsAlias) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (prop === Table.Symbol.Name) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (this.replaceOriginalName && prop === Table.Symbol.OriginalName) {\n\t\t\treturn this.alias;\n\t\t}\n\n\t\tif (prop === ViewBaseConfig) {\n\t\t\treturn {\n\t\t\t\t...target[ViewBaseConfig as keyof typeof target],\n\t\t\t\tname: this.alias,\n\t\t\t\tisAlias: true,\n\t\t\t};\n\t\t}\n\n\t\tif (prop === Table.Symbol.Columns) {\n\t\t\tconst columns = (target as Table)[Table.Symbol.Columns];\n\t\t\tif (!columns) {\n\t\t\t\treturn columns;\n\t\t\t}\n\n\t\t\tconst proxiedColumns: { [key: string]: any } = {};\n\n\t\t\tObject.keys(columns).map((key) => {\n\t\t\t\tproxiedColumns[key] = new Proxy(\n\t\t\t\t\tcolumns[key]!,\n\t\t\t\t\tnew ColumnAliasProxyHandler(new Proxy(target, this)),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\treturn proxiedColumns;\n\t\t}\n\n\t\tconst value = target[prop as keyof typeof target];\n\t\tif (is(value, Column)) {\n\t\t\treturn new Proxy(value as AnyColumn, new ColumnAliasProxyHandler(new Proxy(target, this)));\n\t\t}\n\n\t\treturn value;\n\t}\n}\n\nexport class RelationTableAliasProxyHandler<T extends Relation> implements ProxyHandler<T> {\n\tstatic readonly [entityKind]: string = 'RelationTableAliasProxyHandler';\n\n\tconstructor(private alias: string) {}\n\n\tget(target: T, prop: string | symbol): any {\n\t\tif (prop === 'sourceTable') {\n\t\t\treturn aliasedTable(target.sourceTable, this.alias);\n\t\t}\n\n\t\treturn target[prop as keyof typeof target];\n\t}\n}\n\nexport function aliasedTable<T extends Table | View>(\n\ttable: T,\n\ttableAlias: string,\n): T {\n\treturn new Proxy(table, new TableAliasProxyHandler(tableAlias, false)) as any;\n}\n\nexport function aliasedRelation<T extends Relation>(relation: T, tableAlias: string): T {\n\treturn new Proxy(relation, new RelationTableAliasProxyHandler(tableAlias));\n}\n\nexport function aliasedTableColumn<T extends AnyColumn>(column: T, tableAlias: string): T {\n\treturn new Proxy(\n\t\tcolumn,\n\t\tnew ColumnAliasProxyHandler(new Proxy(column.table, new TableAliasProxyHandler(tableAlias, false))),\n\t);\n}\n\nexport function mapColumnsInAliasedSQLToAlias(query: SQL.Aliased, alias: string): SQL.Aliased {\n\treturn new SQL.Aliased(mapColumnsInSQLToAlias(query.sql, alias), query.fieldAlias);\n}\n\nexport function mapColumnsInSQLToAlias(query: SQL, alias: string): SQL {\n\treturn sql.join(query.queryChunks.map((c) => {\n\t\tif (is(c, Column)) {\n\t\t\treturn aliasedTableColumn(c, alias);\n\t\t}\n\t\tif (is(c, SQL)) {\n\t\t\treturn mapColumnsInSQLToAlias(c, alias);\n\t\t}\n\t\tif (is(c, SQL.Aliased)) {\n\t\t\treturn mapColumnsInAliasedSQLToAlias(c, alias);\n\t\t}\n\t\treturn c;\n\t}));\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { type DrizzleTypeError, orderSelectedFields, type ValueOrArray } from '~/utils.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\n\nexport type SQLiteDeleteWithout<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T\n\t: Omit<\n\t\tSQLiteDeleteBase<\n\t\t\tT['_']['table'],\n\t\t\tT['_']['resultType'],\n\t\t\tT['_']['runResult'],\n\t\t\tT['_']['returning'],\n\t\t\tTDynamic,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>,\n\t\tT['_']['excludedMethods'] | K\n\t>;\n\nexport type SQLiteDelete<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n> = SQLiteDeleteBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteDeleteConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\ttable: SQLiteTable;\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteDeleteReturningAll<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteReturning<\n\tT extends AnySQLiteDeleteBase,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteDeleteWithout<\n\tSQLiteDeleteBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tT['_']['dynamic'],\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteDeleteExecute<T extends AnySQLiteDeleteBase> = T['_']['returning'] extends undefined\n\t? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteDeletePrepare<T extends AnySQLiteDeleteBase> = SQLitePreparedQuery<{\n\ttype: T['_']['resultType'];\n\trun: T['_']['runResult'];\n\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t: T['_']['returning'][];\n\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t: T['_']['returning'] | undefined;\n\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t: any[][];\n\texecute: SQLiteDeleteExecute<T>;\n}>;\n\nexport type SQLiteDeleteDynamic<T extends AnySQLiteDeleteBase> = SQLiteDelete<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type AnySQLiteDeleteBase = SQLiteDeleteBase<any, any, any, any, any, any>;\n\nexport interface SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>,\n\tSQLWrapper\n{\n\treadonly _: {\n\t\tdialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteDeleteBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning extends Record<string, unknown> | undefined = undefined,\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteDelete';\n\n\t/** @internal */\n\tconfig: SQLiteDeleteConfig;\n\n\tconstructor(\n\t\tprivate table: TTable,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, withList };\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will delete only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be deleted.\n\t *\n\t * ```ts\n\t * // Delete all cars with green color\n\t * db.delete(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * db.delete(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Delete all BMW cars with a green color\n\t * db.delete(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Delete all cars with the green or blue color\n\t * db.delete(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteDeleteWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteDeleteWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(deleteTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteDeleteWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteDeleteWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the deleted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/delete#delete-with-return}\n\t *\n\t * @example\n\t * ```ts\n\t * // Delete all cars with the green color and return all fields\n\t * const deletedCars: Car[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Delete all cars with the green color and return only their id and brand fields\n\t * const deletedCarsIdsAndBrands: { id: number, brand: string }[] = await db.delete(cars)\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteDeleteReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteDeleteReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteDeleteReturning<this, TDynamic, any> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildDeleteQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteDeletePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'delete',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteDeletePrepare<this>;\n\t}\n\n\tprepare(): SQLiteDeletePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(placeholderValues?: Record<string, unknown>): Promise<SQLiteDeleteExecute<this>> {\n\t\treturn this._prepare().execute(placeholderValues) as SQLiteDeleteExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteDeleteDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport abstract class QueryPromise<T> implements Promise<T> {\n\tstatic readonly [entityKind]: string = 'QueryPromise';\n\n\t[Symbol.toStringTag] = 'QueryPromise';\n\n\tcatch<TResult = never>(\n\t\tonRejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null | undefined,\n\t): Promise<T | TResult> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<T> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n\n\tthen<TResult1 = T, TResult2 = never>(\n\t\tonFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n\t\tonRejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn this.execute().then(onFulfilled, onRejected);\n\t}\n\n\tabstract execute(): Promise<T>;\n}\n", "import type { BuildColumns, BuildExtraConfigColumns } from '~/column-builder.ts';\nimport { entityKind } from '~/entity.ts';\nimport { Table, type TableConfig as TableConfigBase, type UpdateTableConfig } from '~/table.ts';\nimport type { CheckBuilder } from './checks.ts';\nimport { getSQLiteColumnBuilders, type SQLiteColumnBuilders } from './columns/all.ts';\nimport type { SQLiteColumn, SQLiteColumnBuilder, SQLiteColumnBuilderBase } from './columns/common.ts';\nimport type { ForeignKey, ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKeyBuilder } from './primary-keys.ts';\nimport type { UniqueConstraintBuilder } from './unique-constraint.ts';\n\nexport type SQLiteTableExtraConfigValue =\n\t| IndexBuilder\n\t| CheckBuilder\n\t| ForeignKeyBuilder\n\t| PrimaryKeyBuilder\n\t| UniqueConstraintBuilder;\n\nexport type SQLiteTableExtraConfig = Record<\n\tstring,\n\tSQLiteTableExtraConfigValue\n>;\n\nexport type TableConfig = TableConfigBase<SQLiteColumn<any>>;\n\n/** @internal */\nexport const InlineForeignKeys = Symbol.for('drizzle:SQLiteInlineForeignKeys');\n\nexport class SQLiteTable<T extends TableConfig = TableConfig> extends Table<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTable';\n\n\t/** @internal */\n\tstatic override readonly Symbol = Object.assign({}, Table.Symbol, {\n\t\tInlineForeignKeys: InlineForeignKeys as typeof InlineForeignKeys,\n\t});\n\n\t/** @internal */\n\toverride [Table.Symbol.Columns]!: NonNullable<T['columns']>;\n\n\t/** @internal */\n\t[InlineForeignKeys]: ForeignKey[] = [];\n\n\t/** @internal */\n\toverride [Table.Symbol.ExtraConfigBuilder]:\n\t\t| ((self: Record<string, SQLiteColumn>) => SQLiteTableExtraConfig)\n\t\t| undefined = undefined;\n}\n\nexport type AnySQLiteTable<TPartial extends Partial<TableConfig> = {}> = SQLiteTable<\n\tUpdateTableConfig<TableConfig, TPartial>\n>;\n\nexport type SQLiteTableWithColumns<T extends TableConfig> =\n\t& SQLiteTable<T>\n\t& {\n\t\t[Key in keyof T['columns']]: T['columns'][Key];\n\t};\n\nexport interface SQLiteTableFn<TSchema extends string | undefined = undefined> {\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfigValue[],\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n\n\t/**\n\t * @deprecated The third parameter of sqliteTable is changing and will only accept an array instead of an object\n\t *\n\t * @example\n\t * Deprecated version:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => ({\n\t * \tidx: index('custom_name').on(t.id)\n\t * }));\n\t * ```\n\t *\n\t * New API:\n\t * ```ts\n\t * export const users = sqliteTable(\"users\", {\n\t * \tid: int(),\n\t * }, (t) => [\n\t * \tindex('custom_name').on(t.id)\n\t * ]);\n\t * ```\n\t */\n\t<\n\t\tTTableName extends string,\n\t\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\t>(\n\t\tname: TTableName,\n\t\tcolumns: (columnTypes: SQLiteColumnBuilders) => TColumnsMap,\n\t\textraConfig?: (self: BuildColumns<TTableName, TColumnsMap, 'sqlite'>) => SQLiteTableExtraConfig,\n\t): SQLiteTableWithColumns<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>;\n}\n\nfunction sqliteTableBase<\n\tTTableName extends string,\n\tTColumnsMap extends Record<string, SQLiteColumnBuilderBase>,\n\tTSchema extends string | undefined,\n>(\n\tname: TTableName,\n\tcolumns: TColumnsMap | ((columnTypes: SQLiteColumnBuilders) => TColumnsMap),\n\textraConfig:\n\t\t| ((\n\t\t\tself: BuildColumns<TTableName, TColumnsMap, 'sqlite'>,\n\t\t) => SQLiteTableExtraConfig | SQLiteTableExtraConfigValue[])\n\t\t| undefined,\n\tschema?: TSchema,\n\tbaseName = name,\n): SQLiteTableWithColumns<{\n\tname: TTableName;\n\tschema: TSchema;\n\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\tdialect: 'sqlite';\n}> {\n\tconst rawTable = new SQLiteTable<{\n\t\tname: TTableName;\n\t\tschema: TSchema;\n\t\tcolumns: BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\t\tdialect: 'sqlite';\n\t}>(name, schema, baseName);\n\n\tconst parsedColumns: TColumnsMap = typeof columns === 'function' ? columns(getSQLiteColumnBuilders()) : columns;\n\n\tconst builtColumns = Object.fromEntries(\n\t\tObject.entries(parsedColumns).map(([name, colBuilderBase]) => {\n\t\t\tconst colBuilder = colBuilderBase as SQLiteColumnBuilder;\n\t\t\tcolBuilder.setName(name);\n\t\t\tconst column = colBuilder.build(rawTable);\n\t\t\trawTable[InlineForeignKeys].push(...colBuilder.buildForeignKeys(column, rawTable));\n\t\t\treturn [name, column];\n\t\t}),\n\t) as unknown as BuildColumns<TTableName, TColumnsMap, 'sqlite'>;\n\n\tconst table = Object.assign(rawTable, builtColumns);\n\n\ttable[Table.Symbol.Columns] = builtColumns;\n\ttable[Table.Symbol.ExtraConfigColumns] = builtColumns as unknown as BuildExtraConfigColumns<\n\t\tTTableName,\n\t\tTColumnsMap,\n\t\t'sqlite'\n\t>;\n\n\tif (extraConfig) {\n\t\ttable[SQLiteTable.Symbol.ExtraConfigBuilder] = extraConfig as (\n\t\t\tself: Record<string, SQLiteColumn>,\n\t\t) => SQLiteTableExtraConfig;\n\t}\n\n\treturn table;\n}\n\nexport const sqliteTable: SQLiteTableFn = (name, columns, extraConfig) => {\n\treturn sqliteTableBase(name, columns, extraConfig);\n};\n\nexport function sqliteTableCreator(customizeTableName: (name: string) => string): SQLiteTableFn {\n\treturn (name, columns, extraConfig) => {\n\t\treturn sqliteTableBase(customizeTableName(name) as typeof name, columns, extraConfig, undefined, name);\n\t};\n}\n", "import { blob } from './blob.ts';\nimport { customType } from './custom.ts';\nimport { integer } from './integer.ts';\nimport { numeric } from './numeric.ts';\nimport { real } from './real.ts';\nimport { text } from './text.ts';\n\nexport function getSQLiteColumnBuilders() {\n\treturn {\n\t\tblob,\n\t\tcustomType,\n\t\tinteger,\n\t\tnumeric,\n\t\treal,\n\t\ttext,\n\t};\n}\n\nexport type SQLiteColumnBuilders = ReturnType<typeof getSQLiteColumnBuilders>;\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, textDecoder } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\ntype BlobMode = 'buffer' | 'json' | 'bigint';\n\nexport type SQLiteBigIntBuilderInitial<TName extends string> = SQLiteBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteBigInt';\n\tdata: bigint;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBigInt<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBigInt';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): bigint {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn BigInt(buf.toString('utf8'));\n\t\t}\n\n\t\treturn BigInt(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: bigint): Buffer {\n\t\treturn Buffer.from(value.toString());\n\t}\n}\n\nexport type SQLiteBlobJsonBuilderInitial<TName extends string> = SQLiteBlobJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteBlobJson';\n\tdata: unknown;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteBlobJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteBlobJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBlobJson<T extends ColumnBaseConfig<'json', 'SQLiteBlobJson'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobJson';\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (typeof Buffer !== 'undefined' && Buffer.from) {\n\t\t\tconst buf = Buffer.isBuffer(value)\n\t\t\t\t? value\n\t\t\t\t// eslint-disable-next-line no-instanceof/no-instanceof\n\t\t\t\t: value instanceof ArrayBuffer\n\t\t\t\t? Buffer.from(value)\n\t\t\t\t: value.buffer\n\t\t\t\t? Buffer.from(value.buffer, value.byteOffset, value.byteLength)\n\t\t\t\t: Buffer.from(value);\n\t\t\treturn JSON.parse(buf.toString('utf8'));\n\t\t}\n\n\t\treturn JSON.parse(textDecoder!.decode(value));\n\t}\n\n\toverride mapToDriverValue(value: T['data']): Buffer {\n\t\treturn Buffer.from(JSON.stringify(value));\n\t}\n}\n\nexport type SQLiteBlobBufferBuilderInitial<TName extends string> = SQLiteBlobBufferBuilder<{\n\tname: TName;\n\tdataType: 'buffer';\n\tcolumnType: 'SQLiteBlobBuffer';\n\tdata: Buffer;\n\tdriverParam: Buffer;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBlobBufferBuilder<T extends ColumnBuilderBaseConfig<'buffer', 'SQLiteBlobBuffer'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBufferBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'buffer', 'SQLiteBlobBuffer');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBlobBuffer<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any>);\n\t}\n}\n\nexport class SQLiteBlobBuffer<T extends ColumnBaseConfig<'buffer', 'SQLiteBlobBuffer'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBlobBuffer';\n\n\toverride mapFromDriverValue(value: Buffer | Uint8Array | ArrayBuffer): T['data'] {\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\treturn value;\n\t\t}\n\n\t\treturn Buffer.from(value as Uint8Array);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'blob';\n\t}\n}\n\nexport interface BlobConfig<TMode extends BlobMode = BlobMode> {\n\tmode: TMode;\n}\n\n/**\n * It's recommended to use `text('...', { mode: 'json' })` instead of `blob` in JSON mode, because it supports JSON functions:\n * >All JSON functions currently throw an error if any of their arguments are BLOBs because BLOBs are reserved for a future enhancement in which BLOBs will store the binary encoding for JSON.\n *\n * https://www.sqlite.org/json1.html\n */\nexport function blob(): SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TMode extends BlobMode = BlobMode>(\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<''>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<''>\n\t: SQLiteBlobJsonBuilderInitial<''>;\nexport function blob<TName extends string, TMode extends BlobMode = BlobMode>(\n\tname: TName,\n\tconfig?: BlobConfig<TMode>,\n): Equal<TMode, 'bigint'> extends true ? SQLiteBigIntBuilderInitial<TName>\n\t: Equal<TMode, 'buffer'> extends true ? SQLiteBlobBufferBuilderInitial<TName>\n\t: SQLiteBlobJsonBuilderInitial<TName>;\nexport function blob(a?: string | BlobConfig, b?: BlobConfig) {\n\tconst { name, config } = getColumnNameAndConfig<BlobConfig | undefined>(a, b);\n\tif (config?.mode === 'json') {\n\t\treturn new SQLiteBlobJsonBuilder(name);\n\t}\n\tif (config?.mode === 'bigint') {\n\t\treturn new SQLiteBigIntBuilder(name);\n\t}\n\treturn new SQLiteBlobBufferBuilder(name);\n}\n", "import type {\n\tColumnBuilderBase,\n\tColumnBuilderBaseConfig,\n\tColumnBuilderExtraConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasGenerated,\n\tMakeColumnConfig,\n} from '~/column-builder.ts';\nimport { ColumnBuilder } from '~/column-builder.ts';\nimport { Column } from '~/column.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { ForeignKey, UpdateDeleteAction } from '~/sqlite-core/foreign-keys.ts';\nimport { ForeignKeyBuilder } from '~/sqlite-core/foreign-keys.ts';\nimport type { AnySQLiteTable, SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Update } from '~/utils.ts';\nimport { uniqueKeyName } from '../unique-constraint.ts';\n\nexport interface ReferenceConfig {\n\tref: () => SQLiteColumn;\n\tactions: {\n\t\tonUpdate?: UpdateDeleteAction;\n\t\tonDelete?: UpdateDeleteAction;\n\t};\n}\n\nexport interface SQLiteColumnBuilderBase<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTTypeConfig extends object = object,\n> extends ColumnBuilderBase<T, TTypeConfig & { dialect: 'sqlite' }> {}\n\nexport interface SQLiteGeneratedColumnConfig {\n\tmode?: 'virtual' | 'stored';\n}\n\nexport abstract class SQLiteColumnBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string> = ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n\tTTypeConfig extends object = object,\n\tTExtraConfig extends ColumnBuilderExtraConfig = object,\n> extends ColumnBuilder<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }, TExtraConfig>\n\timplements SQLiteColumnBuilderBase<T, TTypeConfig>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteColumnBuilder';\n\n\tprivate foreignKeyConfigs: ReferenceConfig[] = [];\n\n\treferences(\n\t\tref: ReferenceConfig['ref'],\n\t\tactions: ReferenceConfig['actions'] = {},\n\t): this {\n\t\tthis.foreignKeyConfigs.push({ ref, actions });\n\t\treturn this;\n\t}\n\n\tunique(\n\t\tname?: string,\n\t): this {\n\t\tthis.config.isUnique = true;\n\t\tthis.config.uniqueName = name;\n\t\treturn this;\n\t}\n\n\tgeneratedAlwaysAs(as: SQL | T['data'] | (() => SQL), config?: SQLiteGeneratedColumnConfig): HasGenerated<this, {\n\t\ttype: 'always';\n\t}> {\n\t\tthis.config.generated = {\n\t\t\tas,\n\t\t\ttype: 'always',\n\t\t\tmode: config?.mode ?? 'virtual',\n\t\t};\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tbuildForeignKeys(column: SQLiteColumn, table: SQLiteTable): ForeignKey[] {\n\t\treturn this.foreignKeyConfigs.map(({ ref, actions }) => {\n\t\t\treturn ((ref, actions) => {\n\t\t\t\tconst builder = new ForeignKeyBuilder(() => {\n\t\t\t\t\tconst foreignColumn = ref();\n\t\t\t\t\treturn { columns: [column], foreignColumns: [foreignColumn] };\n\t\t\t\t});\n\t\t\t\tif (actions.onUpdate) {\n\t\t\t\t\tbuilder.onUpdate(actions.onUpdate);\n\t\t\t\t}\n\t\t\t\tif (actions.onDelete) {\n\t\t\t\t\tbuilder.onDelete(actions.onDelete);\n\t\t\t\t}\n\t\t\t\treturn builder.build(table);\n\t\t\t})(ref, actions);\n\t\t});\n\t}\n\n\t/** @internal */\n\tabstract build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteColumn<MakeColumnConfig<T, TTableName>>;\n}\n\n// To understand how to use `SQLiteColumn` and `AnySQLiteColumn`, see `Column` and `AnyColumn` documentation.\nexport abstract class SQLiteColumn<\n\tT extends ColumnBaseConfig<ColumnDataType, string> = ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = {},\n\tTTypeConfig extends object = {},\n> extends Column<T, TRuntimeConfig, TTypeConfig & { dialect: 'sqlite' }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteColumn';\n\n\tconstructor(\n\t\toverride readonly table: SQLiteTable,\n\t\tconfig: ColumnBuilderRuntimeConfig<T['data'], TRuntimeConfig>,\n\t) {\n\t\tif (!config.uniqueName) {\n\t\t\tconfig.uniqueName = uniqueKeyName(table, [config.name]);\n\t\t}\n\t\tsuper(table, config);\n\t}\n}\n\nexport type AnySQLiteColumn<TPartial extends Partial<ColumnBaseConfig<ColumnDataType, string>> = {}> = SQLiteColumn<\n\tRequired<Update<ColumnBaseConfig<ColumnDataType, string>, TPartial>>\n>;\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from './columns/index.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport type UpdateDeleteAction = 'cascade' | 'restrict' | 'no action' | 'set null' | 'set default';\n\nexport type Reference = () => {\n\treadonly name?: string;\n\treadonly columns: SQLiteColumn[];\n\treadonly foreignTable: SQLiteTable;\n\treadonly foreignColumns: SQLiteColumn[];\n};\n\nexport class ForeignKeyBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKeyBuilder';\n\n\tdeclare _: {\n\t\tbrand: 'SQLiteForeignKeyBuilder';\n\t\tforeignTableName: 'TForeignTableName';\n\t};\n\n\t/** @internal */\n\treference: Reference;\n\n\t/** @internal */\n\t_onUpdate: UpdateDeleteAction | undefined;\n\n\t/** @internal */\n\t_onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(\n\t\tconfig: () => {\n\t\t\tname?: string;\n\t\t\tcolumns: SQLiteColumn[];\n\t\t\tforeignColumns: SQLiteColumn[];\n\t\t},\n\t\tactions?: {\n\t\t\tonUpdate?: UpdateDeleteAction;\n\t\t\tonDelete?: UpdateDeleteAction;\n\t\t} | undefined,\n\t) {\n\t\tthis.reference = () => {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn { name, columns, foreignTable: foreignColumns[0]!.table as SQLiteTable, foreignColumns };\n\t\t};\n\t\tif (actions) {\n\t\t\tthis._onUpdate = actions.onUpdate;\n\t\t\tthis._onDelete = actions.onDelete;\n\t\t}\n\t}\n\n\tonUpdate(action: UpdateDeleteAction): this {\n\t\tthis._onUpdate = action;\n\t\treturn this;\n\t}\n\n\tonDelete(action: UpdateDeleteAction): this {\n\t\tthis._onDelete = action;\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): ForeignKey {\n\t\treturn new ForeignKey(table, this);\n\t}\n}\n\nexport class ForeignKey {\n\tstatic readonly [entityKind]: string = 'SQLiteForeignKey';\n\n\treadonly reference: Reference;\n\treadonly onUpdate: UpdateDeleteAction | undefined;\n\treadonly onDelete: UpdateDeleteAction | undefined;\n\n\tconstructor(readonly table: SQLiteTable, builder: ForeignKeyBuilder) {\n\t\tthis.reference = builder.reference;\n\t\tthis.onUpdate = builder._onUpdate;\n\t\tthis.onDelete = builder._onDelete;\n\t}\n\n\tgetName(): string {\n\t\tconst { name, columns, foreignColumns } = this.reference();\n\t\tconst columnNames = columns.map((column) => column.name);\n\t\tconst foreignColumnNames = foreignColumns.map((column) => column.name);\n\t\tconst chunks = [\n\t\t\tthis.table[TableName],\n\t\t\t...columnNames,\n\t\t\tforeignColumns[0]!.table[TableName],\n\t\t\t...foreignColumnNames,\n\t\t];\n\t\treturn name ?? `${chunks.join('_')}_fk`;\n\t}\n}\n\ntype ColumnsWithTable<\n\tTTableName extends string,\n\tTColumns extends SQLiteColumn[],\n> = { [Key in keyof TColumns]: AnySQLiteColumn<{ tableName: TTableName }> };\n\n/**\n * @deprecated please use `foreignKey({ columns: [], foreignColumns: [] })` syntax without callback\n * @param config\n * @returns\n */\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: () => {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey<\n\tTTableName extends string,\n\tTForeignTableName extends string,\n\tTColumns extends [AnySQLiteColumn<{ tableName: TTableName }>, ...AnySQLiteColumn<{ tableName: TTableName }>[]],\n>(\n\tconfig: {\n\t\tname?: string;\n\t\tcolumns: TColumns;\n\t\tforeignColumns: ColumnsWithTable<TForeignTableName, TColumns>;\n\t},\n): ForeignKeyBuilder;\nexport function foreignKey(\n\tconfig: any,\n): ForeignKeyBuilder {\n\tfunction mappedConfig() {\n\t\tif (typeof config === 'function') {\n\t\t\tconst { name, columns, foreignColumns } = config();\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tcolumns,\n\t\t\t\tforeignColumns,\n\t\t\t};\n\t\t}\n\t\treturn config;\n\t}\n\n\treturn new ForeignKeyBuilder(mappedConfig);\n}\n", "import { entityKind } from '~/entity.ts';\nimport { TableName } from '~/table.utils.ts';\nimport type { SQLiteColumn } from './columns/common.ts';\nimport type { SQLiteTable } from './table.ts';\n\nexport function uniqueKeyName(table: SQLiteTable, columns: string[]) {\n\treturn `${table[TableName]}_${columns.join('_')}_unique`;\n}\n\nexport function unique(name?: string): UniqueOnConstraintBuilder {\n\treturn new UniqueOnConstraintBuilder(name);\n}\n\nexport class UniqueConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraintBuilder';\n\n\t/** @internal */\n\tcolumns: SQLiteColumn[];\n\n\tconstructor(\n\t\tcolumns: SQLiteColumn[],\n\t\tprivate name?: string,\n\t) {\n\t\tthis.columns = columns;\n\t}\n\n\t/** @internal */\n\tbuild(table: SQLiteTable): UniqueConstraint {\n\t\treturn new UniqueConstraint(table, this.columns, this.name);\n\t}\n}\n\nexport class UniqueOnConstraintBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueOnConstraintBuilder';\n\n\t/** @internal */\n\tname?: string;\n\n\tconstructor(\n\t\tname?: string,\n\t) {\n\t\tthis.name = name;\n\t}\n\n\ton(...columns: [SQLiteColumn, ...SQLiteColumn[]]) {\n\t\treturn new UniqueConstraintBuilder(columns, this.name);\n\t}\n}\n\nexport class UniqueConstraint {\n\tstatic readonly [entityKind]: string = 'SQLiteUniqueConstraint';\n\n\treadonly columns: SQLiteColumn[];\n\treadonly name?: string;\n\n\tconstructor(readonly table: SQLiteTable, columns: SQLiteColumn[], name?: string) {\n\t\tthis.columns = columns;\n\t\tthis.name = name ?? uniqueKeyName(this.table, this.columns.map((column) => column.name));\n\t}\n\n\tgetName() {\n\t\treturn this.name;\n\t}\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { SQL } from '~/sql/sql.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type ConvertCustomConfig<TName extends string, T extends Partial<CustomTypeValues>> =\n\t& {\n\t\tname: TName;\n\t\tdataType: 'custom';\n\t\tcolumnType: 'SQLiteCustomColumn';\n\t\tdata: T['data'];\n\t\tdriverParam: T['driverData'];\n\t\tenumValues: undefined;\n\t}\n\t& (T['notNull'] extends true ? { notNull: true } : {})\n\t& (T['default'] extends true ? { hasDefault: true } : {});\n\nexport interface SQLiteCustomColumnInnerConfig {\n\tcustomTypeValues: CustomTypeValues;\n}\n\nexport class SQLiteCustomColumnBuilder<T extends ColumnBuilderBaseConfig<'custom', 'SQLiteCustomColumn'>>\n\textends SQLiteColumnBuilder<\n\t\tT,\n\t\t{\n\t\t\tfieldConfig: CustomTypeValues['config'];\n\t\t\tcustomTypeParams: CustomTypeParams<any>;\n\t\t},\n\t\t{\n\t\t\tsqliteColumnBuilderBrand: 'SQLiteCustomColumnBuilderBrand';\n\t\t}\n\t>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumnBuilder';\n\n\tconstructor(\n\t\tname: T['name'],\n\t\tfieldConfig: CustomTypeValues['config'],\n\t\tcustomTypeParams: CustomTypeParams<any>,\n\t) {\n\t\tsuper(name, 'custom', 'SQLiteCustomColumn');\n\t\tthis.config.fieldConfig = fieldConfig;\n\t\tthis.config.customTypeParams = customTypeParams;\n\t}\n\n\t/** @internal */\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteCustomColumn<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteCustomColumn<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteCustomColumn<T extends ColumnBaseConfig<'custom', 'SQLiteCustomColumn'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteCustomColumn';\n\n\tprivate sqlName: string;\n\tprivate mapTo?: (value: T['data']) => T['driverParam'];\n\tprivate mapFrom?: (value: T['driverParam']) => T['data'];\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteCustomColumnBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t\tthis.sqlName = config.customTypeParams.dataType(config.fieldConfig);\n\t\tthis.mapTo = config.customTypeParams.toDriver;\n\t\tthis.mapFrom = config.customTypeParams.fromDriver;\n\t}\n\n\tgetSQLType(): string {\n\t\treturn this.sqlName;\n\t}\n\n\toverride mapFromDriverValue(value: T['driverParam']): T['data'] {\n\t\treturn typeof this.mapFrom === 'function' ? this.mapFrom(value) : value as T['data'];\n\t}\n\n\toverride mapToDriverValue(value: T['data']): T['driverParam'] {\n\t\treturn typeof this.mapTo === 'function' ? this.mapTo(value) : value as T['data'];\n\t}\n}\n\nexport type CustomTypeValues = {\n\t/**\n\t * Required type for custom column, that will infer proper type model\n\t *\n\t * Examples:\n\t *\n\t * If you want your column to be `string` type after selecting/or on inserting - use `data: string`. Like `text`, `varchar`\n\t *\n\t * If you want your column to be `number` type after selecting/or on inserting - use `data: number`. Like `integer`\n\t */\n\tdata: unknown;\n\n\t/**\n\t * Type helper, that represents what type database driver is accepting for specific database data type\n\t */\n\tdriverData?: unknown;\n\n\t/**\n\t * What config type should be used for {@link CustomTypeParams} `dataType` generation\n\t */\n\tconfig?: Record<string, any>;\n\n\t/**\n\t * Whether the config argument should be required or not\n\t * @default false\n\t */\n\tconfigRequired?: boolean;\n\n\t/**\n\t * If your custom data type should be notNull by default you can use `notNull: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tnotNull?: boolean;\n\n\t/**\n\t * If your custom data type has default you can use `default: true`\n\t *\n\t * @example\n\t * const customSerial = customType<{ data: number, notNull: true, default: true }>({\n\t * \t dataType() {\n\t * \t return 'serial';\n\t * },\n\t * });\n\t */\n\tdefault?: boolean;\n};\n\nexport interface CustomTypeParams<T extends CustomTypeValues> {\n\t/**\n\t * Database data type string representation, that is used for migrations\n\t * @example\n\t * ```\n\t * `jsonb`, `text`\n\t * ```\n\t *\n\t * If database data type needs additional params you can use them from `config` param\n\t * @example\n\t * ```\n\t * `varchar(256)`, `numeric(2,3)`\n\t * ```\n\t *\n\t * To make `config` be of specific type please use config generic in {@link CustomTypeValues}\n\t *\n\t * @example\n\t * Usage example\n\t * ```\n\t * dataType() {\n\t * return 'boolean';\n\t * },\n\t * ```\n\t * Or\n\t * ```\n\t * dataType(config) {\n\t * \t return typeof config.length !== 'undefined' ? `varchar(${config.length})` : `varchar`;\n\t * \t }\n\t * ```\n\t */\n\tdataType: (config: T['config'] | (Equal<T['configRequired'], true> extends true ? never : undefined)) => string;\n\n\t/**\n\t * Optional mapping function, between user input and driver\n\t * @example\n\t * For example, when using jsonb we need to map JS/TS object to string before writing to database\n\t * ```\n\t * toDriver(value: TData): string {\n\t * \t return JSON.stringify(value);\n\t * }\n\t * ```\n\t */\n\ttoDriver?: (value: T['data']) => T['driverData'] | SQL;\n\n\t/**\n\t * Optional mapping function, that is responsible for data mapping from database to JS/TS code\n\t * @example\n\t * For example, when using timestamp we need to map string Date representation to JS Date\n\t * ```\n\t * fromDriver(value: string): Date {\n\t * \treturn new Date(value);\n\t * },\n\t * ```\n\t */\n\tfromDriver?: (value: T['driverData']) => T['data'];\n}\n\n/**\n * Custom sqlite database data type generator\n */\nexport function customType<T extends CustomTypeValues = CustomTypeValues>(\n\tcustomTypeParams: CustomTypeParams<T>,\n): Equal<T['configRequired'], true> extends true ? {\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n\t: {\n\t\t(): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TConfig extends Record<string, any> & T['config']>(\n\t\t\tfieldConfig?: TConfig,\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<'', T>>;\n\t\t<TName extends string>(\n\t\t\tdbName: TName,\n\t\t\tfieldConfig?: T['config'],\n\t\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>>;\n\t}\n{\n\treturn <TName extends string>(\n\t\ta?: TName | T['config'],\n\t\tb?: T['config'],\n\t): SQLiteCustomColumnBuilder<ConvertCustomConfig<TName, T>> => {\n\t\tconst { name, config } = getColumnNameAndConfig<T['config']>(a, b);\n\t\treturn new SQLiteCustomColumnBuilder(\n\t\t\tname as ConvertCustomConfig<TName, T>['name'],\n\t\t\tconfig,\n\t\t\tcustomTypeParams,\n\t\t);\n\t};\n}\n", "import type {\n\tColumnBuilderBaseConfig,\n\tColumnBuilderRuntimeConfig,\n\tColumnDataType,\n\tHasDefault,\n\tIsPrimaryKey,\n\tMakeColumnConfig,\n\tNotNull,\n} from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport { sql } from '~/sql/sql.ts';\nimport type { OnConflict } from '~/sqlite-core/utils.ts';\nimport { type Equal, getColumnNameAndConfig, type Or } from '~/utils.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport interface PrimaryKeyConfig {\n\tautoIncrement?: boolean;\n\tonConflict?: OnConflict;\n}\n\nexport abstract class SQLiteBaseIntegerBuilder<\n\tT extends ColumnBuilderBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumnBuilder<\n\tT,\n\tTRuntimeConfig & { autoIncrement: boolean },\n\t{},\n\t{ primaryKeyHasDefault: true }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseIntegerBuilder';\n\n\tconstructor(name: T['name'], dataType: T['dataType'], columnType: T['columnType']) {\n\t\tsuper(name, dataType, columnType);\n\t\tthis.config.autoIncrement = false;\n\t}\n\n\toverride primaryKey(config?: PrimaryKeyConfig): IsPrimaryKey<HasDefault<NotNull<this>>> {\n\t\tif (config?.autoIncrement) {\n\t\t\tthis.config.autoIncrement = true;\n\t\t}\n\t\tthis.config.hasDefault = true;\n\t\treturn super.primaryKey() as IsPrimaryKey<HasDefault<NotNull<this>>>;\n\t}\n\n\t/** @internal */\n\tabstract override build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBaseInteger<MakeColumnConfig<T, TTableName>>;\n}\n\nexport abstract class SQLiteBaseInteger<\n\tT extends ColumnBaseConfig<ColumnDataType, string>,\n\tTRuntimeConfig extends object = object,\n> extends SQLiteColumn<T, TRuntimeConfig & { autoIncrement: boolean }> {\n\tstatic override readonly [entityKind]: string = 'SQLiteBaseInteger';\n\n\treadonly autoIncrement: boolean = this.config.autoIncrement;\n\n\tgetSQLType(): string {\n\t\treturn 'integer';\n\t}\n}\n\nexport type SQLiteIntegerBuilderInitial<TName extends string> = SQLiteIntegerBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteInteger';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteIntegerBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteInteger'>>\n\textends SQLiteBaseIntegerBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteIntegerBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteInteger');\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteInteger<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteInteger<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteInteger<T extends ColumnBaseConfig<'number', 'SQLiteInteger'>> extends SQLiteBaseInteger<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteInteger';\n}\n\nexport type SQLiteTimestampBuilderInitial<TName extends string> = SQLiteTimestampBuilder<{\n\tname: TName;\n\tdataType: 'date';\n\tcolumnType: 'SQLiteTimestamp';\n\tdata: Date;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteTimestampBuilder<T extends ColumnBuilderBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestampBuilder';\n\n\tconstructor(name: T['name'], mode: 'timestamp' | 'timestamp_ms') {\n\t\tsuper(name, 'date', 'SQLiteTimestamp');\n\t\tthis.config.mode = mode;\n\t}\n\n\t/**\n\t * @deprecated Use `default()` with your own expression instead.\n\t *\n\t * Adds `DEFAULT (cast((julianday('now') - 2440587.5)*86400000 as integer))` to the column, which is the current epoch timestamp in milliseconds.\n\t */\n\tdefaultNow(): HasDefault<this> {\n\t\treturn this.default(sql`(cast((julianday('now') - 2440587.5)*86400000 as integer))`) as any;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTimestamp<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTimestamp<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTimestamp<T extends ColumnBaseConfig<'date', 'SQLiteTimestamp'>>\n\textends SQLiteBaseInteger<T, { mode: 'timestamp' | 'timestamp_ms' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTimestamp';\n\n\treadonly mode: 'timestamp' | 'timestamp_ms' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): Date {\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn new Date(value * 1000);\n\t\t}\n\t\treturn new Date(value);\n\t}\n\n\toverride mapToDriverValue(value: Date): number {\n\t\tconst unix = value.getTime();\n\t\tif (this.config.mode === 'timestamp') {\n\t\t\treturn Math.floor(unix / 1000);\n\t\t}\n\t\treturn unix;\n\t}\n}\n\nexport type SQLiteBooleanBuilderInitial<TName extends string> = SQLiteBooleanBuilder<{\n\tname: TName;\n\tdataType: 'boolean';\n\tcolumnType: 'SQLiteBoolean';\n\tdata: boolean;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteBooleanBuilder<T extends ColumnBuilderBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseIntegerBuilder<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBooleanBuilder';\n\n\tconstructor(name: T['name'], mode: 'boolean') {\n\t\tsuper(name, 'boolean', 'SQLiteBoolean');\n\t\tthis.config.mode = mode;\n\t}\n\n\tbuild<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteBoolean<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteBoolean<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteBoolean<T extends ColumnBaseConfig<'boolean', 'SQLiteBoolean'>>\n\textends SQLiteBaseInteger<T, { mode: 'boolean' }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteBoolean';\n\n\treadonly mode: 'boolean' = this.config.mode;\n\n\toverride mapFromDriverValue(value: number): boolean {\n\t\treturn Number(value) === 1;\n\t}\n\n\toverride mapToDriverValue(value: boolean): number {\n\t\treturn value ? 1 : 0;\n\t}\n}\n\nexport interface IntegerConfig<\n\tTMode extends 'number' | 'timestamp' | 'timestamp_ms' | 'boolean' =\n\t\t| 'number'\n\t\t| 'timestamp'\n\t\t| 'timestamp_ms'\n\t\t| 'boolean',\n> {\n\tmode: TMode;\n}\n\nexport function integer(): SQLiteIntegerBuilderInitial<''>;\nexport function integer<TMode extends IntegerConfig['mode']>(\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<''>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<''>\n\t: SQLiteIntegerBuilderInitial<''>;\nexport function integer<TName extends string, TMode extends IntegerConfig['mode']>(\n\tname: TName,\n\tconfig?: IntegerConfig<TMode>,\n): Or<Equal<TMode, 'timestamp'>, Equal<TMode, 'timestamp_ms'>> extends true ? SQLiteTimestampBuilderInitial<TName>\n\t: Equal<TMode, 'boolean'> extends true ? SQLiteBooleanBuilderInitial<TName>\n\t: SQLiteIntegerBuilderInitial<TName>;\nexport function integer(a?: string | IntegerConfig, b?: IntegerConfig) {\n\tconst { name, config } = getColumnNameAndConfig<IntegerConfig | undefined>(a, b);\n\tif (config?.mode === 'timestamp' || config?.mode === 'timestamp_ms') {\n\t\treturn new SQLiteTimestampBuilder(name, config.mode);\n\t}\n\tif (config?.mode === 'boolean') {\n\t\treturn new SQLiteBooleanBuilder(name, config.mode);\n\t}\n\treturn new SQLiteIntegerBuilder(name);\n}\n\nexport const int = integer;\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteNumericBuilderInitial<TName extends string> = SQLiteNumericBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteNumeric';\n\tdata: string;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBuilder<T extends ColumnBuilderBaseConfig<'string', 'SQLiteNumeric'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'string', 'SQLiteNumeric');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumeric<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumeric<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumeric<T extends ColumnBaseConfig<'string', 'SQLiteNumeric'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumeric';\n\n\toverride mapFromDriverValue(value: unknown): string {\n\t\tif (typeof value === 'string') return value;\n\n\t\treturn String(value);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericNumberBuilderInitial<TName extends string> = SQLiteNumericNumberBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteNumericNumber';\n\tdata: number;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericNumberBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteNumericNumber'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumberBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteNumericNumber');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericNumber<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericNumber<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericNumber<T extends ColumnBaseConfig<'number', 'SQLiteNumericNumber'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericNumber';\n\n\toverride mapFromDriverValue(value: unknown): number {\n\t\tif (typeof value === 'number') return value;\n\n\t\treturn Number(value);\n\t}\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericBigIntBuilderInitial<TName extends string> = SQLiteNumericBigIntBuilder<{\n\tname: TName;\n\tdataType: 'bigint';\n\tcolumnType: 'SQLiteNumericBigInt';\n\tdata: bigint;\n\tdriverParam: string;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteNumericBigIntBuilder<T extends ColumnBuilderBaseConfig<'bigint', 'SQLiteNumericBigInt'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigIntBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'bigint', 'SQLiteNumericBigInt');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteNumericBigInt<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteNumericBigInt<T extends ColumnBaseConfig<'bigint', 'SQLiteNumericBigInt'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteNumericBigInt';\n\n\toverride mapFromDriverValue = BigInt;\n\n\toverride mapToDriverValue = String;\n\n\tgetSQLType(): string {\n\t\treturn 'numeric';\n\t}\n}\n\nexport type SQLiteNumericConfig<T extends 'string' | 'number' | 'bigint' = 'string' | 'number' | 'bigint'> = {\n\tmode: T;\n};\n\nexport function numeric<TMode extends SQLiteNumericConfig['mode']>(\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<''>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<''>\n\t: SQLiteNumericBuilderInitial<''>;\nexport function numeric<TName extends string, TMode extends SQLiteNumericConfig['mode']>(\n\tname: TName,\n\tconfig?: SQLiteNumericConfig<TMode>,\n): Equal<TMode, 'number'> extends true ? SQLiteNumericNumberBuilderInitial<TName>\n\t: Equal<TMode, 'bigint'> extends true ? SQLiteNumericBigIntBuilderInitial<TName>\n\t: SQLiteNumericBuilderInitial<TName>;\nexport function numeric(a?: string | SQLiteNumericConfig, b?: SQLiteNumericConfig) {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteNumericConfig>(a, b);\n\tconst mode = config?.mode;\n\treturn mode === 'number'\n\t\t? new SQLiteNumericNumberBuilder(name)\n\t\t: mode === 'bigint'\n\t\t? new SQLiteNumericBigIntBuilder(name)\n\t\t: new SQLiteNumericBuilder(name);\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '../table.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteRealBuilderInitial<TName extends string> = SQLiteRealBuilder<{\n\tname: TName;\n\tdataType: 'number';\n\tcolumnType: 'SQLiteReal';\n\tdata: number;\n\tdriverParam: number;\n\tenumValues: undefined;\n}>;\n\nexport class SQLiteRealBuilder<T extends ColumnBuilderBaseConfig<'number', 'SQLiteReal'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRealBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'number', 'SQLiteReal');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteReal<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteReal<MakeColumnConfig<T, TTableName>>(table, this.config as ColumnBuilderRuntimeConfig<any, any>);\n\t}\n}\n\nexport class SQLiteReal<T extends ColumnBaseConfig<'number', 'SQLiteReal'>> extends SQLiteColumn<T> {\n\tstatic override readonly [entityKind]: string = 'SQLiteReal';\n\n\tgetSQLType(): string {\n\t\treturn 'real';\n\t}\n}\n\nexport function real(): SQLiteRealBuilderInitial<''>;\nexport function real<TName extends string>(name: TName): SQLiteRealBuilderInitial<TName>;\nexport function real(name?: string) {\n\treturn new SQLiteRealBuilder(name ?? '');\n}\n", "import type { ColumnBuilderBaseConfig, ColumnBuilderRuntimeConfig, MakeColumnConfig } from '~/column-builder.ts';\nimport type { ColumnBaseConfig } from '~/column.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { AnySQLiteTable } from '~/sqlite-core/table.ts';\nimport { type Equal, getColumnNameAndConfig, type Writable } from '~/utils.ts';\nimport { SQLiteColumn, SQLiteColumnBuilder } from './common.ts';\n\nexport type SQLiteTextBuilderInitial<\n\tTName extends string,\n\tTEnum extends [string, ...string[]],\n\tTLength extends number | undefined,\n> = SQLiteTextBuilder<{\n\tname: TName;\n\tdataType: 'string';\n\tcolumnType: 'SQLiteText';\n\tdata: TEnum[number];\n\tdriverParam: string;\n\tenumValues: TEnum;\n\tlength: TLength;\n}>;\n\nexport class SQLiteTextBuilder<\n\tT extends ColumnBuilderBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined },\n> extends SQLiteColumnBuilder<\n\tT,\n\t{ length: T['length']; enumValues: T['enumValues'] },\n\t{ length: T['length'] }\n> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTextBuilder';\n\n\tconstructor(name: T['name'], config: SQLiteTextConfig<'text', T['enumValues'], T['length']>) {\n\t\tsuper(name, 'string', 'SQLiteText');\n\t\tthis.config.enumValues = config.enum;\n\t\tthis.config.length = config.length;\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }> {\n\t\treturn new SQLiteText<MakeColumnConfig<T, TTableName> & { length: T['length'] }>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteText<T extends ColumnBaseConfig<'string', 'SQLiteText'> & { length?: number | undefined }>\n\textends SQLiteColumn<T, { length: T['length']; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteText';\n\n\toverride readonly enumValues = this.config.enumValues;\n\n\treadonly length: T['length'] = this.config.length;\n\n\tconstructor(\n\t\ttable: AnySQLiteTable<{ name: T['tableName'] }>,\n\t\tconfig: SQLiteTextBuilder<T>['config'],\n\t) {\n\t\tsuper(table, config);\n\t}\n\n\tgetSQLType(): string {\n\t\treturn `text${this.config.length ? `(${this.config.length})` : ''}`;\n\t}\n}\n\nexport type SQLiteTextJsonBuilderInitial<TName extends string> = SQLiteTextJsonBuilder<{\n\tname: TName;\n\tdataType: 'json';\n\tcolumnType: 'SQLiteTextJson';\n\tdata: unknown;\n\tdriverParam: string;\n\tenumValues: undefined;\n\tgenerated: undefined;\n}>;\n\nexport class SQLiteTextJsonBuilder<T extends ColumnBuilderBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumnBuilder<T>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJsonBuilder';\n\n\tconstructor(name: T['name']) {\n\t\tsuper(name, 'json', 'SQLiteTextJson');\n\t}\n\n\t/** @internal */\n\toverride build<TTableName extends string>(\n\t\ttable: AnySQLiteTable<{ name: TTableName }>,\n\t): SQLiteTextJson<MakeColumnConfig<T, TTableName>> {\n\t\treturn new SQLiteTextJson<MakeColumnConfig<T, TTableName>>(\n\t\t\ttable,\n\t\t\tthis.config as ColumnBuilderRuntimeConfig<any, any>,\n\t\t);\n\t}\n}\n\nexport class SQLiteTextJson<T extends ColumnBaseConfig<'json', 'SQLiteTextJson'>>\n\textends SQLiteColumn<T, { length: number | undefined; enumValues: T['enumValues'] }>\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteTextJson';\n\n\tgetSQLType(): string {\n\t\treturn 'text';\n\t}\n\n\toverride mapFromDriverValue(value: string): T['data'] {\n\t\treturn JSON.parse(value);\n\t}\n\n\toverride mapToDriverValue(value: T['data']): string {\n\t\treturn JSON.stringify(value);\n\t}\n}\n\nexport type SQLiteTextConfig<\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n\tTEnum extends readonly string[] | string[] | undefined = readonly string[] | string[] | undefined,\n\tTLength extends number | undefined = number | undefined,\n> = TMode extends 'text' ? {\n\t\tmode?: TMode;\n\t\tlength?: TLength;\n\t\tenum?: TEnum;\n\t}\n\t: {\n\t\tmode?: TMode;\n\t};\n\nexport function text(): SQLiteTextBuilderInitial<'', [string, ...string[]], undefined>;\nexport function text<\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<''>\n\t: SQLiteTextBuilderInitial<'', Writable<T>, L>;\nexport function text<\n\tTName extends string,\n\tU extends string,\n\tT extends Readonly<[U, ...U[]]>,\n\tL extends number | undefined,\n\tTMode extends 'text' | 'json' = 'text' | 'json',\n>(\n\tname: TName,\n\tconfig?: SQLiteTextConfig<TMode, T | Writable<T>, L>,\n): Equal<TMode, 'json'> extends true ? SQLiteTextJsonBuilderInitial<TName>\n\t: SQLiteTextBuilderInitial<TName, Writable<T>, L>;\nexport function text(a?: string | SQLiteTextConfig, b: SQLiteTextConfig = {}): any {\n\tconst { name, config } = getColumnNameAndConfig<SQLiteTextConfig>(a, b);\n\tif (config.mode === 'json') {\n\t\treturn new SQLiteTextJsonBuilder(name);\n\t}\n\treturn new SQLiteTextBuilder(name, config as any);\n}\n", "import { is } from '~/entity.ts';\nimport { SQL } from '~/sql/sql.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { Check } from './checks.ts';\nimport { CheckBuilder } from './checks.ts';\nimport type { ForeignKey } from './foreign-keys.ts';\nimport { ForeignKeyBuilder } from './foreign-keys.ts';\nimport type { Index } from './indexes.ts';\nimport { IndexBuilder } from './indexes.ts';\nimport type { PrimaryKey } from './primary-keys.ts';\nimport { PrimaryKeyBuilder } from './primary-keys.ts';\nimport { SQLiteTable } from './table.ts';\nimport { type UniqueConstraint, UniqueConstraintBuilder } from './unique-constraint.ts';\nimport type { SQLiteViewBase } from './view-base.ts';\nimport type { SQLiteView } from './view.ts';\n\nexport function getTableConfig<TTable extends SQLiteTable>(table: TTable) {\n\tconst columns = Object.values(table[SQLiteTable.Symbol.Columns]);\n\tconst indexes: Index[] = [];\n\tconst checks: Check[] = [];\n\tconst primaryKeys: PrimaryKey[] = [];\n\tconst uniqueConstraints: UniqueConstraint[] = [];\n\tconst foreignKeys: ForeignKey[] = Object.values(table[SQLiteTable.Symbol.InlineForeignKeys]);\n\tconst name = table[Table.Symbol.Name];\n\n\tconst extraConfigBuilder = table[SQLiteTable.Symbol.ExtraConfigBuilder];\n\n\tif (extraConfigBuilder !== undefined) {\n\t\tconst extraConfig = extraConfigBuilder(table[SQLiteTable.Symbol.Columns]);\n\t\tconst extraValues = Array.isArray(extraConfig) ? extraConfig.flat(1) as any[] : Object.values(extraConfig);\n\t\tfor (const builder of Object.values(extraValues)) {\n\t\t\tif (is(builder, IndexBuilder)) {\n\t\t\t\tindexes.push(builder.build(table));\n\t\t\t} else if (is(builder, CheckBuilder)) {\n\t\t\t\tchecks.push(builder.build(table));\n\t\t\t} else if (is(builder, UniqueConstraintBuilder)) {\n\t\t\t\tuniqueConstraints.push(builder.build(table));\n\t\t\t} else if (is(builder, PrimaryKeyBuilder)) {\n\t\t\t\tprimaryKeys.push(builder.build(table));\n\t\t\t} else if (is(builder, ForeignKeyBuilder)) {\n\t\t\t\tforeignKeys.push(builder.build(table));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tcolumns,\n\t\tindexes,\n\t\tforeignKeys,\n\t\tchecks,\n\t\tprimaryKeys,\n\t\tuniqueConstraints,\n\t\tname,\n\t};\n}\n\nexport function extractUsedTable(table: SQLiteTable | Subquery | SQLiteViewBase | SQL): string[] {\n\tif (is(table, SQLiteTable)) {\n\t\treturn [`${table[Table.Symbol.BaseName]}`];\n\t}\n\tif (is(table, Subquery)) {\n\t\treturn table._.usedTables ?? [];\n\t}\n\tif (is(table, SQL)) {\n\t\treturn table.usedTables ?? [];\n\t}\n\treturn [];\n}\n\nexport type OnConflict = 'rollback' | 'abort' | 'fail' | 'ignore' | 'replace';\n\nexport function getViewConfig<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n>(view: SQLiteView<TName, TExisting>) {\n\treturn {\n\t\t...view[ViewBaseConfig],\n\t\t// ...view[SQLiteViewConfig],\n\t};\n}\n", "import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type { SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport { Param, SQL, sql } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { IndexColumn } from '~/sqlite-core/indexes.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport type { Subquery } from '~/subquery.ts';\nimport { Columns, Table } from '~/table.ts';\nimport { type DrizzleTypeError, haveSameKeys, mapUpdateSet, orderSelectedFields, type Simplify } from '~/utils.ts';\nimport type { AnySQLiteColumn, SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { QueryBuilder } from './query-builder.ts';\nimport type { SelectedFieldsFlat, SelectedFieldsOrdered } from './select.types.ts';\nimport type { SQLiteUpdateSetSource } from './update.ts';\n\nexport interface SQLiteInsertConfig<TTable extends SQLiteTable = SQLiteTable> {\n\ttable: TTable;\n\tvalues: Record<string, Param | SQL>[] | SQLiteInsertSelectQueryBuilder<TTable> | SQL;\n\twithList?: Subquery[];\n\tonConflict?: SQL[];\n\treturning?: SelectedFieldsOrdered;\n\tselect?: boolean;\n}\n\nexport type SQLiteInsertValue<TTable extends SQLiteTable> = Simplify<\n\t{\n\t\t[Key in keyof TTable['$inferInsert']]: TTable['$inferInsert'][Key] | SQL | Placeholder;\n\t}\n>;\n\nexport type SQLiteInsertSelectQueryBuilder<TTable extends SQLiteTable> = TypedQueryBuilder<\n\t{ [K in keyof TTable['$inferInsert']]: AnySQLiteColumn | SQL | SQL.Aliased | TTable['$inferInsert'][K] }\n>;\n\nexport class SQLiteInsertBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteInsertBuilder';\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tvalues(value: SQLiteInsertValue<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(values: SQLiteInsertValue<TTable>[]): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tvalues(\n\t\tvalues: SQLiteInsertValue<TTable> | SQLiteInsertValue<TTable>[],\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tvalues = Array.isArray(values) ? values : [values];\n\t\tif (values.length === 0) {\n\t\t\tthrow new Error('values() must be called with at least one value');\n\t\t}\n\t\tconst mappedValues = values.map((entry) => {\n\t\t\tconst result: Record<string, Param | SQL> = {};\n\t\t\tconst cols = this.table[Table.Symbol.Columns];\n\t\t\tfor (const colKey of Object.keys(entry)) {\n\t\t\t\tconst colValue = entry[colKey as keyof typeof entry];\n\t\t\t\tresult[colKey] = is(colValue, SQL) ? colValue : new Param(colValue, cols[colKey]);\n\t\t\t}\n\t\t\treturn result;\n\t\t});\n\n\t\t// if (mappedValues.length > 1 && mappedValues.some((t) => Object.keys(t).length === 0)) {\n\t\t// \tthrow new Error(\n\t\t// \t\t`One of the values you want to insert is empty. In SQLite you can insert only one empty object per statement. For this case Drizzle with use \"INSERT INTO ... DEFAULT VALUES\" syntax`,\n\t\t// \t);\n\t\t// }\n\n\t\treturn new SQLiteInsertBase(this.table, mappedValues, this.session, this.dialect, this.withList);\n\t}\n\n\tselect(\n\t\tselectQuery: (qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable>,\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: (qb: QueryBuilder) => SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQL): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(selectQuery: SQLiteInsertSelectQueryBuilder<TTable>): SQLiteInsertBase<TTable, TResultType, TRunResult>;\n\tselect(\n\t\tselectQuery:\n\t\t\t| SQL\n\t\t\t| SQLiteInsertSelectQueryBuilder<TTable>\n\t\t\t| ((qb: QueryBuilder) => SQLiteInsertSelectQueryBuilder<TTable> | SQL),\n\t): SQLiteInsertBase<TTable, TResultType, TRunResult> {\n\t\tconst select = typeof selectQuery === 'function' ? selectQuery(new QueryBuilder()) : selectQuery;\n\n\t\tif (\n\t\t\t!is(select, SQL)\n\t\t\t&& !haveSameKeys(this.table[Columns], select._.selectedFields)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'Insert select error: selected fields are not the same or are in a different order compared to the table definition',\n\t\t\t);\n\t\t}\n\n\t\treturn new SQLiteInsertBase(this.table, select, this.session, this.dialect, this.withList, true);\n\t}\n}\n\nexport type SQLiteInsertWithout<T extends AnySQLiteInsert, TDynamic extends boolean, K extends keyof T & string> =\n\tTDynamic extends true ? T\n\t\t: Omit<\n\t\t\tSQLiteInsertBase<\n\t\t\t\tT['_']['table'],\n\t\t\t\tT['_']['resultType'],\n\t\t\t\tT['_']['runResult'],\n\t\t\t\tT['_']['returning'],\n\t\t\t\tTDynamic,\n\t\t\t\tT['_']['excludedMethods'] | K\n\t\t\t>,\n\t\t\tT['_']['excludedMethods'] | K\n\t\t>;\n\nexport type SQLiteInsertReturning<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFieldsFlat,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertReturningAll<\n\tT extends AnySQLiteInsert,\n\tTDynamic extends boolean,\n> = SQLiteInsertWithout<\n\tSQLiteInsertBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteInsertOnConflictDoUpdateConfig<T extends AnySQLiteInsert> = {\n\ttarget: IndexColumn | IndexColumn[];\n\t/** @deprecated - use either `targetWhere` or `setWhere` */\n\twhere?: SQL;\n\t// TODO: add tests for targetWhere and setWhere\n\ttargetWhere?: SQL;\n\tsetWhere?: SQL;\n\tset: SQLiteUpdateSetSource<T['_']['table']>;\n};\n\nexport type SQLiteInsertDynamic<T extends AnySQLiteInsert> = SQLiteInsert<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteInsertExecute<T extends AnySQLiteInsert> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteInsertPrepare<T extends AnySQLiteInsert> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteInsertExecute<T>;\n\t}\n>;\n\nexport type AnySQLiteInsert = SQLiteInsertBase<any, any, any, any, any, any>;\n\nexport type SQLiteInsert<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTReturning = any,\n> = SQLiteInsertBase<TTable, TResultType, TRunResult, TReturning, true, never>;\n\nexport interface SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends\n\tSQLWrapper,\n\tQueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>,\n\tRunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>\n{\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteInsertBase<\n\tTTable extends SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteInsert';\n\n\t/** @internal */\n\tconfig: SQLiteInsertConfig<TTable>;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tvalues: SQLiteInsertConfig['values'],\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t\tselect?: boolean,\n\t) {\n\t\tsuper();\n\t\tthis.config = { table, values: values as any, withList, select };\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the inserted rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#insert-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and return all fields\n\t * const insertedCar: Car[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning();\n\t *\n\t * // Insert one row and return only the id\n\t * const insertedCarId: { id: number }[] = await db.insert(cars)\n\t * .values({ brand: 'BMW' })\n\t * .returning({ id: cars.id });\n\t * ```\n\t */\n\treturning(): SQLiteInsertReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFieldsFlat>(\n\t\tfields: TSelectedFields,\n\t): SQLiteInsertReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFieldsFlat = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteInsertWithout<AnySQLiteInsert, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `on conflict do nothing` clause to the query.\n\t *\n\t * Calling this method simply avoids inserting a row as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#on-conflict-do-nothing}\n\t *\n\t * @param config The `target` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Insert one row and cancel the insert if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing();\n\t *\n\t * // Explicitly specify conflict target\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoNothing({ target: cars.id });\n\t * ```\n\t */\n\tonConflictDoNothing(config: { target?: IndexColumn | IndexColumn[]; where?: SQL } = {}): this {\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tif (config.target === undefined) {\n\t\t\tthis.config.onConflict.push(sql` on conflict do nothing`);\n\t\t} else {\n\t\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\t\tconst whereSql = config.where ? sql` where ${config.where}` : sql``;\n\t\t\tthis.config.onConflict.push(sql` on conflict ${targetSql} do nothing${whereSql}`);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds an `on conflict do update` clause to the query.\n\t *\n\t * Calling this method will update the existing row that conflicts with the row proposed for insertion as its alternative action.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/insert#upserts-and-conflicts}\n\t *\n\t * @param config The `target`, `set` and `where` clauses.\n\t *\n\t * @example\n\t * ```ts\n\t * // Update the row if there's a conflict\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'Porsche' }\n\t * });\n\t *\n\t * // Upsert with 'where' clause\n\t * await db.insert(cars)\n\t * .values({ id: 1, brand: 'BMW' })\n\t * .onConflictDoUpdate({\n\t * target: cars.id,\n\t * set: { brand: 'newBMW' },\n\t * where: sql`${cars.createdAt} > '2023-01-01'::date`,\n\t * });\n\t * ```\n\t */\n\tonConflictDoUpdate(config: SQLiteInsertOnConflictDoUpdateConfig<this>): this {\n\t\tif (config.where && (config.targetWhere || config.setWhere)) {\n\t\t\tthrow new Error(\n\t\t\t\t'You cannot use both \"where\" and \"targetWhere\"/\"setWhere\" at the same time - \"where\" is deprecated, use \"targetWhere\" or \"setWhere\" instead.',\n\t\t\t);\n\t\t}\n\n\t\tif (!this.config.onConflict) this.config.onConflict = [];\n\n\t\tconst whereSql = config.where ? sql` where ${config.where}` : undefined;\n\t\tconst targetWhereSql = config.targetWhere ? sql` where ${config.targetWhere}` : undefined;\n\t\tconst setWhereSql = config.setWhere ? sql` where ${config.setWhere}` : undefined;\n\t\tconst targetSql = Array.isArray(config.target) ? sql`${config.target}` : sql`${[config.target]}`;\n\t\tconst setSql = this.dialect.buildUpdateSet(this.config.table, mapUpdateSet(this.config.table, config.set));\n\t\tthis.config.onConflict.push(\n\t\t\tsql` on conflict ${targetSql}${targetWhereSql} do update set ${setSql}${whereSql}${setWhereSql}`,\n\t\t);\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildInsertQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteInsertPrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteInsertPrepare<this>;\n\t}\n\n\tprepare(): SQLiteInsertPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteInsertExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteInsertExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteInsertDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "import { entityKind, is } from '~/entity.ts';\nimport type { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { ColumnsSelection, SQL } from '~/sql/sql.ts';\nimport type { SQLiteDialectConfig } from '~/sqlite-core/dialect.ts';\nimport { SQLiteDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport type { WithBuilder } from '~/sqlite-core/subquery.ts';\nimport { WithSubquery } from '~/subquery.ts';\nimport { SQLiteSelectBuilder } from './select.ts';\nimport type { SelectedFields } from './select.types.ts';\n\nexport class QueryBuilder {\n\tstatic readonly [entityKind]: string = 'SQLiteQueryBuilder';\n\n\tprivate dialect: SQLiteDialect | undefined;\n\tprivate dialectConfig: SQLiteDialectConfig | undefined;\n\n\tconstructor(dialect?: SQLiteDialect | SQLiteDialectConfig) {\n\t\tthis.dialect = is(dialect, SQLiteDialect) ? dialect : undefined;\n\t\tthis.dialectConfig = is(dialect, SQLiteDialect) ? undefined : dialect;\n\t}\n\n\t$with: WithBuilder = (alias: string, selection?: ColumnsSelection) => {\n\t\tconst queryBuilder = this;\n\t\tconst as = (\n\t\t\tqb:\n\t\t\t\t| TypedQueryBuilder<ColumnsSelection | undefined>\n\t\t\t\t| SQL\n\t\t\t\t| ((qb: QueryBuilder) => TypedQueryBuilder<ColumnsSelection | undefined> | SQL),\n\t\t) => {\n\t\t\tif (typeof qb === 'function') {\n\t\t\t\tqb = qb(queryBuilder);\n\t\t\t}\n\n\t\t\treturn new Proxy(\n\t\t\t\tnew WithSubquery(\n\t\t\t\t\tqb.getSQL(),\n\t\t\t\t\tselection ?? ('getSelectedFields' in qb ? qb.getSelectedFields() ?? {} : {}) as SelectedFields,\n\t\t\t\t\talias,\n\t\t\t\t\ttrue,\n\t\t\t\t),\n\t\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t\t) as any;\n\t\t};\n\t\treturn { as };\n\t};\n\n\twith(...queries: WithSubquery[]) {\n\t\tconst self = this;\n\n\t\tfunction select(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction select<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t});\n\t\t}\n\n\t\tfunction selectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\t\tfunction selectDistinct<TSelection extends SelectedFields>(\n\t\t\tfields?: TSelection,\n\t\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\t\treturn new SQLiteSelectBuilder({\n\t\t\t\tfields: fields ?? undefined,\n\t\t\t\tsession: undefined,\n\t\t\t\tdialect: self.getDialect(),\n\t\t\t\twithList: queries,\n\t\t\t\tdistinct: true,\n\t\t\t});\n\t\t}\n\n\t\treturn { select, selectDistinct };\n\t}\n\n\tselect(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselect<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({ fields: fields ?? undefined, session: undefined, dialect: this.getDialect() });\n\t}\n\n\tselectDistinct(): SQLiteSelectBuilder<undefined, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields: TSelection,\n\t): SQLiteSelectBuilder<TSelection, 'sync', void, 'qb'>;\n\tselectDistinct<TSelection extends SelectedFields>(\n\t\tfields?: TSelection,\n\t): SQLiteSelectBuilder<TSelection | undefined, 'sync', void, 'qb'> {\n\t\treturn new SQLiteSelectBuilder({\n\t\t\tfields: fields ?? undefined,\n\t\t\tsession: undefined,\n\t\t\tdialect: this.getDialect(),\n\t\t\tdistinct: true,\n\t\t});\n\t}\n\n\t// Lazy load dialect to avoid circular dependency\n\tprivate getDialect() {\n\t\tif (!this.dialect) {\n\t\t\tthis.dialect = new SQLiteSyncDialect(this.dialectConfig);\n\t\t}\n\n\t\treturn this.dialect;\n\t}\n}\n", "import { aliasedTable, aliasedTableColumn, mapColumnsInAliasedSQLToAlias, mapColumnsInSQLToAlias } from '~/alias.ts';\nimport { CasingCache } from '~/casing.ts';\nimport type { AnyColumn } from '~/column.ts';\nimport { Column } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError } from '~/errors.ts';\nimport type { MigrationConfig, MigrationMeta } from '~/migrator.ts';\nimport {\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tgetOperators,\n\tgetOrderByOperators,\n\tMany,\n\tnormalizeRelation,\n\tOne,\n\ttype Relation,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { Name, Placeholder } from '~/sql/index.ts';\nimport { and, eq } from '~/sql/index.ts';\nimport { Param, type QueryWithTypings, SQL, sql, type SQLChunk } from '~/sql/sql.ts';\nimport { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type {\n\tAnySQLiteSelectQueryBuilder,\n\tSQLiteDeleteConfig,\n\tSQLiteInsertConfig,\n\tSQLiteUpdateConfig,\n} from '~/sqlite-core/query-builders/index.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { getTableName, getTableUniqueName, Table } from '~/table.ts';\nimport { type Casing, orderSelectedFields, type UpdateSet } from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type {\n\tSelectedFieldsOrdered,\n\tSQLiteSelectConfig,\n\tSQLiteSelectJoinConfig,\n} from './query-builders/select.types.ts';\nimport type { SQLiteSession } from './session.ts';\nimport { SQLiteViewBase } from './view-base.ts';\n\nexport interface SQLiteDialectConfig {\n\tcasing?: Casing;\n}\n\nexport abstract class SQLiteDialect {\n\tstatic readonly [entityKind]: string = 'SQLiteDialect';\n\n\t/** @internal */\n\treadonly casing: CasingCache;\n\n\tconstructor(config?: SQLiteDialectConfig) {\n\t\tthis.casing = new CasingCache(config?.casing);\n\t}\n\n\tescapeName(name: string): string {\n\t\treturn `\"${name}\"`;\n\t}\n\n\tescapeParam(_num: number): string {\n\t\treturn '?';\n\t}\n\n\tescapeString(str: string): string {\n\t\treturn `'${str.replace(/'/g, \"''\")}'`;\n\t}\n\n\tprivate buildWithCTE(queries: Subquery[] | undefined): SQL | undefined {\n\t\tif (!queries?.length) return undefined;\n\n\t\tconst withSqlChunks = [sql`with `];\n\t\tfor (const [i, w] of queries.entries()) {\n\t\t\twithSqlChunks.push(sql`${sql.identifier(w._.alias)} as (${w._.sql})`);\n\t\t\tif (i < queries.length - 1) {\n\t\t\t\twithSqlChunks.push(sql`, `);\n\t\t\t}\n\t\t}\n\t\twithSqlChunks.push(sql` `);\n\t\treturn sql.join(withSqlChunks);\n\t}\n\n\tbuildDeleteQuery({ table, where, returning, withList, limit, orderBy }: SQLiteDeleteConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}delete from ${table}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\tbuildUpdateSet(table: SQLiteTable, set: UpdateSet): SQL {\n\t\tconst tableColumns = table[Table.Symbol.Columns];\n\n\t\tconst columnNames = Object.keys(tableColumns).filter((colName) =>\n\t\t\tset[colName] !== undefined || tableColumns[colName]?.onUpdateFn !== undefined\n\t\t);\n\n\t\tconst setSize = columnNames.length;\n\t\treturn sql.join(columnNames.flatMap((colName, i) => {\n\t\t\tconst col = tableColumns[colName]!;\n\n\t\t\tconst value = set[colName] ?? sql.param(col.onUpdateFn!(), col);\n\t\t\tconst res = sql`${sql.identifier(this.casing.getColumnCasing(col))} = ${value}`;\n\n\t\t\tif (i < setSize - 1) {\n\t\t\t\treturn [res, sql.raw(', ')];\n\t\t\t}\n\t\t\treturn [res];\n\t\t}));\n\t}\n\n\tbuildUpdateQuery({ table, set, where, returning, withList, joins, from, limit, orderBy }: SQLiteUpdateConfig): SQL {\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst setSql = this.buildUpdateSet(table, set);\n\n\t\tconst fromSql = from && sql.join([sql.raw(' from '), this.buildFromTable(from)]);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\treturn sql`${withSql}update ${table} set ${setSql}${fromSql}${joinsSql}${whereSql}${returningSql}${orderBySql}${limitSql}`;\n\t}\n\n\t/**\n\t * Builds selection SQL with provided fields/expressions\n\t *\n\t * Examples:\n\t *\n\t * `select <selection> from`\n\t *\n\t * `insert ... returning <selection>`\n\t *\n\t * If `isSingleTable` is true, then columns won't be prefixed with table name\n\t */\n\tprivate buildSelection(\n\t\tfields: SelectedFieldsOrdered,\n\t\t{ isSingleTable = false }: { isSingleTable?: boolean } = {},\n\t): SQL {\n\t\tconst columnsLen = fields.length;\n\n\t\tconst chunks = fields\n\t\t\t.flatMap(({ field }, i) => {\n\t\t\t\tconst chunk: SQLChunk[] = [];\n\n\t\t\t\tif (is(field, SQL.Aliased) && field.isSelectionField) {\n\t\t\t\t\tchunk.push(sql.identifier(field.fieldAlias));\n\t\t\t\t} else if (is(field, SQL.Aliased) || is(field, SQL)) {\n\t\t\t\t\tconst query = is(field, SQL.Aliased) ? field.sql : field;\n\n\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\tnew SQL(\n\t\t\t\t\t\t\t\tquery.queryChunks.map((c) => {\n\t\t\t\t\t\t\t\t\tif (is(c, Column)) {\n\t\t\t\t\t\t\t\t\t\treturn sql.identifier(this.casing.getColumnCasing(c));\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn c;\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchunk.push(query);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (is(field, SQL.Aliased)) {\n\t\t\t\t\t\tchunk.push(sql` as ${sql.identifier(field.fieldAlias)}`);\n\t\t\t\t\t}\n\t\t\t\t} else if (is(field, Column)) {\n\t\t\t\t\tconst tableName = field.table[Table.Symbol.Name];\n\t\t\t\t\tif (field.columnType === 'SQLiteNumericBigInt') {\n\t\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\t\tchunk.push(sql`cast(${sql.identifier(this.casing.getColumnCasing(field))} as text)`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchunk.push(\n\t\t\t\t\t\t\t\tsql`cast(${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))} as text)`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (isSingleTable) {\n\t\t\t\t\t\t\tchunk.push(sql.identifier(this.casing.getColumnCasing(field)));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchunk.push(sql`${sql.identifier(tableName)}.${sql.identifier(this.casing.getColumnCasing(field))}`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (i < columnsLen - 1) {\n\t\t\t\t\tchunk.push(sql`, `);\n\t\t\t\t}\n\n\t\t\t\treturn chunk;\n\t\t\t});\n\n\t\treturn sql.join(chunks);\n\t}\n\n\tprivate buildJoins(joins: SQLiteSelectJoinConfig[] | undefined): SQL | undefined {\n\t\tif (!joins || joins.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst joinsArray: SQL[] = [];\n\n\t\tif (joins) {\n\t\t\tfor (const [index, joinMeta] of joins.entries()) {\n\t\t\t\tif (index === 0) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t\tconst table = joinMeta.table;\n\t\t\t\tconst onSql = joinMeta.on ? sql` on ${joinMeta.on}` : undefined;\n\n\t\t\t\tif (is(table, SQLiteTable)) {\n\t\t\t\t\tconst tableName = table[SQLiteTable.Symbol.Name];\n\t\t\t\t\tconst tableSchema = table[SQLiteTable.Symbol.Schema];\n\t\t\t\t\tconst origTableName = table[SQLiteTable.Symbol.OriginalName];\n\t\t\t\t\tconst alias = tableName === origTableName ? undefined : joinMeta.alias;\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${tableSchema ? sql`${sql.identifier(tableSchema)}.` : undefined}${\n\t\t\t\t\t\t\tsql.identifier(origTableName)\n\t\t\t\t\t\t}${alias && sql` ${sql.identifier(alias)}`}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tjoinsArray.push(\n\t\t\t\t\t\tsql`${sql.raw(joinMeta.joinType)} join ${table}${onSql}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (index < joins.length - 1) {\n\t\t\t\t\tjoinsArray.push(sql` `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn sql.join(joinsArray);\n\t}\n\n\tprivate buildLimit(limit: number | Placeholder | undefined): SQL | undefined {\n\t\treturn typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\t}\n\n\tprivate buildOrderBy(orderBy: (SQLiteColumn | SQL | SQL.Aliased)[] | undefined): SQL | undefined {\n\t\tconst orderByList: (SQLiteColumn | SQL | SQL.Aliased)[] = [];\n\n\t\tif (orderBy) {\n\t\t\tfor (const [index, orderByValue] of orderBy.entries()) {\n\t\t\t\torderByList.push(orderByValue);\n\n\t\t\t\tif (index < orderBy.length - 1) {\n\t\t\t\t\torderByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn orderByList.length > 0 ? sql` order by ${sql.join(orderByList)}` : undefined;\n\t}\n\n\tprivate buildFromTable(\n\t\ttable: SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined,\n\t): SQL | Subquery | SQLiteViewBase | SQLiteTable | undefined {\n\t\tif (is(table, Table) && table[Table.Symbol.IsAlias]) {\n\t\t\treturn sql`${sql`${sql.identifier(table[Table.Symbol.Schema] ?? '')}.`.if(table[Table.Symbol.Schema])}${\n\t\t\t\tsql.identifier(table[Table.Symbol.OriginalName])\n\t\t\t} ${sql.identifier(table[Table.Symbol.Name])}`;\n\t\t}\n\n\t\treturn table;\n\t}\n\n\tbuildSelectQuery(\n\t\t{\n\t\t\twithList,\n\t\t\tfields,\n\t\t\tfieldsFlat,\n\t\t\twhere,\n\t\t\thaving,\n\t\t\ttable,\n\t\t\tjoins,\n\t\t\torderBy,\n\t\t\tgroupBy,\n\t\t\tlimit,\n\t\t\toffset,\n\t\t\tdistinct,\n\t\t\tsetOperators,\n\t\t}: SQLiteSelectConfig,\n\t): SQL {\n\t\tconst fieldsList = fieldsFlat ?? orderSelectedFields<SQLiteColumn>(fields);\n\t\tfor (const f of fieldsList) {\n\t\t\tif (\n\t\t\t\tis(f.field, Column)\n\t\t\t\t&& getTableName(f.field.table)\n\t\t\t\t\t!== (is(table, Subquery)\n\t\t\t\t\t\t? table._.alias\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].name\n\t\t\t\t\t\t: is(table, SQL)\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: getTableName(table))\n\t\t\t\t&& !((table) =>\n\t\t\t\t\tjoins?.some(({ alias }) =>\n\t\t\t\t\t\talias === (table[Table.Symbol.IsAlias] ? getTableName(table) : table[Table.Symbol.BaseName])\n\t\t\t\t\t))(f.field.table)\n\t\t\t) {\n\t\t\t\tconst tableName = getTableName(f.field.table);\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Your \"${\n\t\t\t\t\t\tf.path.join('->')\n\t\t\t\t\t}\" field references a column \"${tableName}\".\"${f.field.name}\", but the table \"${tableName}\" is not part of the query! Did you forget to join it?`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst isSingleTable = !joins || joins.length === 0;\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst distinctSql = distinct ? sql` distinct` : undefined;\n\n\t\tconst selection = this.buildSelection(fieldsList, { isSingleTable });\n\n\t\tconst tableSql = this.buildFromTable(table);\n\n\t\tconst joinsSql = this.buildJoins(joins);\n\n\t\tconst whereSql = where ? sql` where ${where}` : undefined;\n\n\t\tconst havingSql = having ? sql` having ${having}` : undefined;\n\n\t\tconst groupByList: (SQL | AnyColumn | SQL.Aliased)[] = [];\n\t\tif (groupBy) {\n\t\t\tfor (const [index, groupByValue] of groupBy.entries()) {\n\t\t\t\tgroupByList.push(groupByValue);\n\n\t\t\t\tif (index < groupBy.length - 1) {\n\t\t\t\t\tgroupByList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst groupBySql = groupByList.length > 0 ? sql` group by ${sql.join(groupByList)}` : undefined;\n\n\t\tconst orderBySql = this.buildOrderBy(orderBy);\n\n\t\tconst limitSql = this.buildLimit(limit);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\tconst finalQuery =\n\t\t\tsql`${withSql}select${distinctSql} ${selection} from ${tableSql}${joinsSql}${whereSql}${groupBySql}${havingSql}${orderBySql}${limitSql}${offsetSql}`;\n\n\t\tif (setOperators.length > 0) {\n\t\t\treturn this.buildSetOperations(finalQuery, setOperators);\n\t\t}\n\n\t\treturn finalQuery;\n\t}\n\n\tbuildSetOperations(leftSelect: SQL, setOperators: SQLiteSelectConfig['setOperators']): SQL {\n\t\tconst [setOperator, ...rest] = setOperators;\n\n\t\tif (!setOperator) {\n\t\t\tthrow new Error('Cannot pass undefined values to any set operator');\n\t\t}\n\n\t\tif (rest.length === 0) {\n\t\t\treturn this.buildSetOperationQuery({ leftSelect, setOperator });\n\t\t}\n\n\t\t// Some recursive magic here\n\t\treturn this.buildSetOperations(\n\t\t\tthis.buildSetOperationQuery({ leftSelect, setOperator }),\n\t\t\trest,\n\t\t);\n\t}\n\n\tbuildSetOperationQuery({\n\t\tleftSelect,\n\t\tsetOperator: { type, isAll, rightSelect, limit, orderBy, offset },\n\t}: { leftSelect: SQL; setOperator: SQLiteSelectConfig['setOperators'][number] }): SQL {\n\t\t// SQLite doesn't support parenthesis in set operations\n\t\tconst leftChunk = sql`${leftSelect.getSQL()} `;\n\t\tconst rightChunk = sql`${rightSelect.getSQL()}`;\n\n\t\tlet orderBySql;\n\t\tif (orderBy && orderBy.length > 0) {\n\t\t\tconst orderByValues: (SQL<unknown> | Name)[] = [];\n\n\t\t\t// The next bit is necessary because the sql operator replaces ${table.column} with `table`.`column`\n\t\t\t// which is invalid Sql syntax, Table from one of the SELECTs cannot be used in global ORDER clause\n\t\t\tfor (const singleOrderBy of orderBy) {\n\t\t\t\tif (is(singleOrderBy, SQLiteColumn)) {\n\t\t\t\t\torderByValues.push(sql.identifier(singleOrderBy.name));\n\t\t\t\t} else if (is(singleOrderBy, SQL)) {\n\t\t\t\t\tfor (let i = 0; i < singleOrderBy.queryChunks.length; i++) {\n\t\t\t\t\t\tconst chunk = singleOrderBy.queryChunks[i];\n\n\t\t\t\t\t\tif (is(chunk, SQLiteColumn)) {\n\t\t\t\t\t\t\tsingleOrderBy.queryChunks[i] = sql.identifier(this.casing.getColumnCasing(chunk));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t} else {\n\t\t\t\t\torderByValues.push(sql`${singleOrderBy}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\torderBySql = sql` order by ${sql.join(orderByValues, sql`, `)}`;\n\t\t}\n\n\t\tconst limitSql = typeof limit === 'object' || (typeof limit === 'number' && limit >= 0)\n\t\t\t? sql` limit ${limit}`\n\t\t\t: undefined;\n\n\t\tconst operatorChunk = sql.raw(`${type} ${isAll ? 'all ' : ''}`);\n\n\t\tconst offsetSql = offset ? sql` offset ${offset}` : undefined;\n\n\t\treturn sql`${leftChunk}${operatorChunk}${rightChunk}${orderBySql}${limitSql}${offsetSql}`;\n\t}\n\n\tbuildInsertQuery(\n\t\t{ table, values: valuesOrSelect, onConflict, returning, withList, select }: SQLiteInsertConfig,\n\t): SQL {\n\t\t// const isSingleValue = values.length === 1;\n\t\tconst valuesSqlList: ((SQLChunk | SQL)[] | SQL)[] = [];\n\t\tconst columns: Record<string, SQLiteColumn> = table[Table.Symbol.Columns];\n\n\t\tconst colEntries: [string, SQLiteColumn][] = Object.entries(columns).filter(([_, col]) =>\n\t\t\t!col.shouldDisableInsert()\n\t\t);\n\t\tconst insertOrder = colEntries.map(([, column]) => sql.identifier(this.casing.getColumnCasing(column)));\n\n\t\tif (select) {\n\t\t\tconst select = valuesOrSelect as AnySQLiteSelectQueryBuilder | SQL;\n\n\t\t\tif (is(select, SQL)) {\n\t\t\t\tvaluesSqlList.push(select);\n\t\t\t} else {\n\t\t\t\tvaluesSqlList.push(select.getSQL());\n\t\t\t}\n\t\t} else {\n\t\t\tconst values = valuesOrSelect as Record<string, Param | SQL>[];\n\t\t\tvaluesSqlList.push(sql.raw('values '));\n\n\t\t\tfor (const [valueIndex, value] of values.entries()) {\n\t\t\t\tconst valueList: (SQLChunk | SQL)[] = [];\n\t\t\t\tfor (const [fieldName, col] of colEntries) {\n\t\t\t\t\tconst colValue = value[fieldName];\n\t\t\t\t\tif (colValue === undefined || (is(colValue, Param) && colValue.value === undefined)) {\n\t\t\t\t\t\tlet defaultValue;\n\t\t\t\t\t\tif (col.default !== null && col.default !== undefined) {\n\t\t\t\t\t\t\tdefaultValue = is(col.default, SQL) ? col.default : sql.param(col.default, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (col.defaultFn !== undefined) {\n\t\t\t\t\t\t\tconst defaultFnResult = col.defaultFn();\n\t\t\t\t\t\t\tdefaultValue = is(defaultFnResult, SQL) ? defaultFnResult : sql.param(defaultFnResult, col);\n\t\t\t\t\t\t\t// eslint-disable-next-line unicorn/no-negated-condition\n\t\t\t\t\t\t} else if (!col.default && col.onUpdateFn !== undefined) {\n\t\t\t\t\t\t\tconst onUpdateFnResult = col.onUpdateFn();\n\t\t\t\t\t\t\tdefaultValue = is(onUpdateFnResult, SQL) ? onUpdateFnResult : sql.param(onUpdateFnResult, col);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefaultValue = sql`null`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalueList.push(defaultValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalueList.push(colValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvaluesSqlList.push(valueList);\n\t\t\t\tif (valueIndex < values.length - 1) {\n\t\t\t\t\tvaluesSqlList.push(sql`, `);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst withSql = this.buildWithCTE(withList);\n\n\t\tconst valuesSql = sql.join(valuesSqlList);\n\n\t\tconst returningSql = returning\n\t\t\t? sql` returning ${this.buildSelection(returning, { isSingleTable: true })}`\n\t\t\t: undefined;\n\n\t\tconst onConflictSql = onConflict?.length\n\t\t\t? sql.join(onConflict)\n\t\t\t: undefined;\n\n\t\t// if (isSingleValue && valuesSqlList.length === 0){\n\t\t// \treturn sql`insert into ${table} default values ${onConflictSql}${returningSql}`;\n\t\t// }\n\n\t\treturn sql`${withSql}insert into ${table} ${insertOrder} ${valuesSql}${onConflictSql}${returningSql}`;\n\t}\n\n\tsqlToQuery(sql: SQL, invokeSource?: 'indexes' | undefined): QueryWithTypings {\n\t\treturn sql.toQuery({\n\t\t\tcasing: this.casing,\n\t\t\tescapeName: this.escapeName,\n\t\t\tescapeParam: this.escapeParam,\n\t\t\tescapeString: this.escapeString,\n\t\t\tinvokeSource,\n\t\t});\n\t}\n\n\tbuildRelationalQuery({\n\t\tfullSchema,\n\t\tschema,\n\t\ttableNamesMap,\n\t\ttable,\n\t\ttableConfig,\n\t\tqueryConfig: config,\n\t\ttableAlias,\n\t\tnestedQueryRelation,\n\t\tjoinOn,\n\t}: {\n\t\tfullSchema: Record<string, unknown>;\n\t\tschema: TablesRelationalConfig;\n\t\ttableNamesMap: Record<string, string>;\n\t\ttable: SQLiteTable;\n\t\ttableConfig: TableRelationalConfig;\n\t\tqueryConfig: true | DBQueryConfig<'many', true>;\n\t\ttableAlias: string;\n\t\tnestedQueryRelation?: Relation;\n\t\tjoinOn?: SQL;\n\t}): BuildRelationalQueryResult<SQLiteTable, SQLiteColumn> {\n\t\tlet selection: BuildRelationalQueryResult<SQLiteTable, SQLiteColumn>['selection'] = [];\n\t\tlet limit, offset, orderBy: SQLiteSelectConfig['orderBy'] = [], where;\n\t\tconst joins: SQLiteSelectJoinConfig[] = [];\n\n\t\tif (config === true) {\n\t\t\tconst selectionEntries = Object.entries(tableConfig.columns);\n\t\t\tselection = selectionEntries.map((\n\t\t\t\t[key, value],\n\t\t\t) => ({\n\t\t\t\tdbKey: value.name,\n\t\t\t\ttsKey: key,\n\t\t\t\tfield: aliasedTableColumn(value as SQLiteColumn, tableAlias),\n\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\tisJson: false,\n\t\t\t\tselection: [],\n\t\t\t}));\n\t\t} else {\n\t\t\tconst aliasedColumns = Object.fromEntries(\n\t\t\t\tObject.entries(tableConfig.columns).map(([key, value]) => [key, aliasedTableColumn(value, tableAlias)]),\n\t\t\t);\n\n\t\t\tif (config.where) {\n\t\t\t\tconst whereSql = typeof config.where === 'function'\n\t\t\t\t\t? config.where(aliasedColumns, getOperators())\n\t\t\t\t\t: config.where;\n\t\t\t\twhere = whereSql && mapColumnsInSQLToAlias(whereSql, tableAlias);\n\t\t\t}\n\n\t\t\tconst fieldsSelection: { tsKey: string; value: SQLiteColumn | SQL.Aliased }[] = [];\n\t\t\tlet selectedColumns: string[] = [];\n\n\t\t\t// Figure out which columns to select\n\t\t\tif (config.columns) {\n\t\t\t\tlet isIncludeMode = false;\n\n\t\t\t\tfor (const [field, value] of Object.entries(config.columns)) {\n\t\t\t\t\tif (value === undefined) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (field in tableConfig.columns) {\n\t\t\t\t\t\tif (!isIncludeMode && value === true) {\n\t\t\t\t\t\t\tisIncludeMode = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tselectedColumns.push(field);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (selectedColumns.length > 0) {\n\t\t\t\t\tselectedColumns = isIncludeMode\n\t\t\t\t\t\t? selectedColumns.filter((c) => config.columns?.[c] === true)\n\t\t\t\t\t\t: Object.keys(tableConfig.columns).filter((key) => !selectedColumns.includes(key));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Select all columns if selection is not specified\n\t\t\t\tselectedColumns = Object.keys(tableConfig.columns);\n\t\t\t}\n\n\t\t\tfor (const field of selectedColumns) {\n\t\t\t\tconst column = tableConfig.columns[field]! as SQLiteColumn;\n\t\t\t\tfieldsSelection.push({ tsKey: field, value: column });\n\t\t\t}\n\n\t\t\tlet selectedRelations: {\n\t\t\t\ttsKey: string;\n\t\t\t\tqueryConfig: true | DBQueryConfig<'many', false>;\n\t\t\t\trelation: Relation;\n\t\t\t}[] = [];\n\n\t\t\t// Figure out which relations to select\n\t\t\tif (config.with) {\n\t\t\t\tselectedRelations = Object.entries(config.with)\n\t\t\t\t\t.filter((entry): entry is [typeof entry[0], NonNullable<typeof entry[1]>] => !!entry[1])\n\t\t\t\t\t.map(([tsKey, queryConfig]) => ({ tsKey, queryConfig, relation: tableConfig.relations[tsKey]! }));\n\t\t\t}\n\n\t\t\tlet extras;\n\n\t\t\t// Figure out which extras to select\n\t\t\tif (config.extras) {\n\t\t\t\textras = typeof config.extras === 'function'\n\t\t\t\t\t? config.extras(aliasedColumns, { sql })\n\t\t\t\t\t: config.extras;\n\t\t\t\tfor (const [tsKey, value] of Object.entries(extras)) {\n\t\t\t\t\tfieldsSelection.push({\n\t\t\t\t\t\ttsKey,\n\t\t\t\t\t\tvalue: mapColumnsInAliasedSQLToAlias(value, tableAlias),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Transform `fieldsSelection` into `selection`\n\t\t\t// `fieldsSelection` shouldn't be used after this point\n\t\t\tfor (const { tsKey, value } of fieldsSelection) {\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: is(value, SQL.Aliased) ? value.fieldAlias : tableConfig.columns[tsKey]!.name,\n\t\t\t\t\ttsKey,\n\t\t\t\t\tfield: is(value, Column) ? aliasedTableColumn(value, tableAlias) : value,\n\t\t\t\t\trelationTableTsKey: undefined,\n\t\t\t\t\tisJson: false,\n\t\t\t\t\tselection: [],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet orderByOrig = typeof config.orderBy === 'function'\n\t\t\t\t? config.orderBy(aliasedColumns, getOrderByOperators())\n\t\t\t\t: config.orderBy ?? [];\n\t\t\tif (!Array.isArray(orderByOrig)) {\n\t\t\t\torderByOrig = [orderByOrig];\n\t\t\t}\n\t\t\torderBy = orderByOrig.map((orderByValue) => {\n\t\t\t\tif (is(orderByValue, Column)) {\n\t\t\t\t\treturn aliasedTableColumn(orderByValue, tableAlias) as SQLiteColumn;\n\t\t\t\t}\n\t\t\t\treturn mapColumnsInSQLToAlias(orderByValue, tableAlias);\n\t\t\t});\n\n\t\t\tlimit = config.limit;\n\t\t\toffset = config.offset;\n\n\t\t\t// Process all relations\n\t\t\tfor (\n\t\t\t\tconst {\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tqueryConfig: selectedRelationConfigValue,\n\t\t\t\t\trelation,\n\t\t\t\t} of selectedRelations\n\t\t\t) {\n\t\t\t\tconst normalizedRelation = normalizeRelation(schema, tableNamesMap, relation);\n\t\t\t\tconst relationTableName = getTableUniqueName(relation.referencedTable);\n\t\t\t\tconst relationTableTsName = tableNamesMap[relationTableName]!;\n\t\t\t\tconst relationTableAlias = `${tableAlias}_${selectedRelationTsKey}`;\n\t\t\t\t// const relationTable = schema[relationTableTsName]!;\n\t\t\t\tconst joinOn = and(\n\t\t\t\t\t...normalizedRelation.fields.map((field, i) =>\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\taliasedTableColumn(normalizedRelation.references[i]!, relationTableAlias),\n\t\t\t\t\t\t\taliasedTableColumn(field, tableAlias),\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tconst builtRelation = this.buildRelationalQuery({\n\t\t\t\t\tfullSchema,\n\t\t\t\t\tschema,\n\t\t\t\t\ttableNamesMap,\n\t\t\t\t\ttable: fullSchema[relationTableTsName] as SQLiteTable,\n\t\t\t\t\ttableConfig: schema[relationTableTsName]!,\n\t\t\t\t\tqueryConfig: is(relation, One)\n\t\t\t\t\t\t? (selectedRelationConfigValue === true\n\t\t\t\t\t\t\t? { limit: 1 }\n\t\t\t\t\t\t\t: { ...selectedRelationConfigValue, limit: 1 })\n\t\t\t\t\t\t: selectedRelationConfigValue,\n\t\t\t\t\ttableAlias: relationTableAlias,\n\t\t\t\t\tjoinOn,\n\t\t\t\t\tnestedQueryRelation: relation,\n\t\t\t\t});\n\t\t\t\tconst field = (sql`(${builtRelation.sql})`).as(selectedRelationTsKey);\n\t\t\t\tselection.push({\n\t\t\t\t\tdbKey: selectedRelationTsKey,\n\t\t\t\t\ttsKey: selectedRelationTsKey,\n\t\t\t\t\tfield,\n\t\t\t\t\trelationTableTsKey: relationTableTsName,\n\t\t\t\t\tisJson: true,\n\t\t\t\t\tselection: builtRelation.selection,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (selection.length === 0) {\n\t\t\tthrow new DrizzleError({\n\t\t\t\tmessage:\n\t\t\t\t\t`No fields selected for table \"${tableConfig.tsName}\" (\"${tableAlias}\"). You need to have at least one item in \"columns\", \"with\" or \"extras\". If you need to select all columns, omit the \"columns\" key or set it to undefined.`,\n\t\t\t});\n\t\t}\n\n\t\tlet result;\n\n\t\twhere = and(joinOn, where);\n\n\t\tif (nestedQueryRelation) {\n\t\t\tlet field = sql`json_array(${\n\t\t\t\tsql.join(\n\t\t\t\t\tselection.map(({ field }) =>\n\t\t\t\t\t\tis(field, SQLiteColumn)\n\t\t\t\t\t\t\t? sql.identifier(this.casing.getColumnCasing(field))\n\t\t\t\t\t\t\t: is(field, SQL.Aliased)\n\t\t\t\t\t\t\t? field.sql\n\t\t\t\t\t\t\t: field\n\t\t\t\t\t),\n\t\t\t\t\tsql`, `,\n\t\t\t\t)\n\t\t\t})`;\n\t\t\tif (is(nestedQueryRelation, Many)) {\n\t\t\t\tfield = sql`coalesce(json_group_array(${field}), json_array())`;\n\t\t\t}\n\t\t\tconst nestedSelection = [{\n\t\t\t\tdbKey: 'data',\n\t\t\t\ttsKey: 'data',\n\t\t\t\tfield: field.as('data'),\n\t\t\t\tisJson: true,\n\t\t\t\trelationTableTsKey: tableConfig.tsName,\n\t\t\t\tselection,\n\t\t\t}];\n\n\t\t\tconst needsSubquery = limit !== undefined || offset !== undefined || orderBy.length > 0;\n\n\t\t\tif (needsSubquery) {\n\t\t\t\tresult = this.buildSelectQuery({\n\t\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\t\tfields: {},\n\t\t\t\t\tfieldsFlat: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\t\tfield: sql.raw('*'),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit,\n\t\t\t\t\toffset,\n\t\t\t\t\torderBy,\n\t\t\t\t\tsetOperators: [],\n\t\t\t\t});\n\n\t\t\t\twhere = undefined;\n\t\t\t\tlimit = undefined;\n\t\t\t\toffset = undefined;\n\t\t\t\torderBy = undefined;\n\t\t\t} else {\n\t\t\t\tresult = aliasedTable(table, tableAlias);\n\t\t\t}\n\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: is(result, SQLiteTable) ? result : new Subquery(result, {}, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: nestedSelection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t} else {\n\t\t\tresult = this.buildSelectQuery({\n\t\t\t\ttable: aliasedTable(table, tableAlias),\n\t\t\t\tfields: {},\n\t\t\t\tfieldsFlat: selection.map(({ field }) => ({\n\t\t\t\t\tpath: [],\n\t\t\t\t\tfield: is(field, Column) ? aliasedTableColumn(field, tableAlias) : field,\n\t\t\t\t})),\n\t\t\t\tjoins,\n\t\t\t\twhere,\n\t\t\t\tlimit,\n\t\t\t\toffset,\n\t\t\t\torderBy,\n\t\t\t\tsetOperators: [],\n\t\t\t});\n\t\t}\n\n\t\treturn {\n\t\t\ttableTsKey: tableConfig.tsName,\n\t\t\tsql: result,\n\t\t\tselection,\n\t\t};\n\t}\n}\n\nexport class SQLiteSyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncDialect';\n\n\tmigrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'sync', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tconfig?: string | MigrationConfig,\n\t): void {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tsession.run(migrationTableCreate);\n\n\t\tconst dbMigrations = session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\t\tsession.run(sql`BEGIN`);\n\n\t\ttry {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tsession.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tsession.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsession.run(sql`COMMIT`);\n\t\t} catch (e) {\n\t\t\tsession.run(sql`ROLLBACK`);\n\t\t\tthrow e;\n\t\t}\n\t}\n}\n\nexport class SQLiteAsyncDialect extends SQLiteDialect {\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncDialect';\n\n\tasync migrate(\n\t\tmigrations: MigrationMeta[],\n\t\tsession: SQLiteSession<'async', any, any, any>,\n\t\tconfig?: string | MigrationConfig,\n\t): Promise<void> {\n\t\tconst migrationsTable = config === undefined\n\t\t\t? '__drizzle_migrations'\n\t\t\t: typeof config === 'string'\n\t\t\t? '__drizzle_migrations'\n\t\t\t: config.migrationsTable ?? '__drizzle_migrations';\n\n\t\tconst migrationTableCreate = sql`\n\t\t\tCREATE TABLE IF NOT EXISTS ${sql.identifier(migrationsTable)} (\n\t\t\t\tid SERIAL PRIMARY KEY,\n\t\t\t\thash text NOT NULL,\n\t\t\t\tcreated_at numeric\n\t\t\t)\n\t\t`;\n\t\tawait session.run(migrationTableCreate);\n\n\t\tconst dbMigrations = await session.values<[number, string, string]>(\n\t\t\tsql`SELECT id, hash, created_at FROM ${sql.identifier(migrationsTable)} ORDER BY created_at DESC LIMIT 1`,\n\t\t);\n\n\t\tconst lastDbMigration = dbMigrations[0] ?? undefined;\n\n\t\tawait session.transaction(async (tx) => {\n\t\t\tfor (const migration of migrations) {\n\t\t\t\tif (!lastDbMigration || Number(lastDbMigration[2])! < migration.folderMillis) {\n\t\t\t\t\tfor (const stmt of migration.sql) {\n\t\t\t\t\t\tawait tx.run(sql.raw(stmt));\n\t\t\t\t\t}\n\t\t\t\t\tawait tx.run(\n\t\t\t\t\t\tsql`INSERT INTO ${\n\t\t\t\t\t\t\tsql.identifier(migrationsTable)\n\t\t\t\t\t\t} (\"hash\", \"created_at\") VALUES(${migration.hash}, ${migration.folderMillis})`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n}\n", "import type { Column } from '~/column.ts';\nimport { entityKind } from './entity.ts';\nimport { Table } from './table.ts';\nimport type { Casing } from './utils.ts';\n\nexport function toSnakeCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.map((word) => word.toLowerCase()).join('_');\n}\n\nexport function toCamelCase(input: string) {\n\tconst words = input\n\t\t.replace(/['\\u2019]/g, '')\n\t\t.match(/[\\da-z]+|[A-Z]+(?![a-z])|[A-Z][\\da-z]+/g) ?? [];\n\n\treturn words.reduce((acc, word, i) => {\n\t\tconst formattedWord = i === 0 ? word.toLowerCase() : `${word[0]!.toUpperCase()}${word.slice(1)}`;\n\t\treturn acc + formattedWord;\n\t}, '');\n}\n\nfunction noopCase(input: string) {\n\treturn input;\n}\n\nexport class CasingCache {\n\tstatic readonly [entityKind]: string = 'CasingCache';\n\n\t/** @internal */\n\tcache: Record<string, string> = {};\n\tprivate cachedTables: Record<string, true> = {};\n\tprivate convert: (input: string) => string;\n\n\tconstructor(casing?: Casing) {\n\t\tthis.convert = casing === 'snake_case'\n\t\t\t? toSnakeCase\n\t\t\t: casing === 'camelCase'\n\t\t\t? toCamelCase\n\t\t\t: noopCase;\n\t}\n\n\tgetColumnCasing(column: Column): string {\n\t\tif (!column.keyAsName) return column.name;\n\n\t\tconst schema = column.table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = column.table[Table.Symbol.OriginalName];\n\t\tconst key = `${schema}.${tableName}.${column.name}`;\n\n\t\tif (!this.cache[key]) {\n\t\t\tthis.cacheTable(column.table);\n\t\t}\n\t\treturn this.cache[key]!;\n\t}\n\n\tprivate cacheTable(table: Table) {\n\t\tconst schema = table[Table.Symbol.Schema] ?? 'public';\n\t\tconst tableName = table[Table.Symbol.OriginalName];\n\t\tconst tableKey = `${schema}.${tableName}`;\n\n\t\tif (!this.cachedTables[tableKey]) {\n\t\t\tfor (const column of Object.values(table[Table.Symbol.Columns])) {\n\t\t\t\tconst columnKey = `${tableKey}.${column.name}`;\n\t\t\t\tthis.cache[columnKey] = this.convert(column.name);\n\t\t\t}\n\t\t\tthis.cachedTables[tableKey] = true;\n\t\t}\n\t}\n\n\tclearCache() {\n\t\tthis.cache = {};\n\t\tthis.cachedTables = {};\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\n\nexport class DrizzleError extends Error {\n\tstatic readonly [entityKind]: string = 'DrizzleError';\n\n\tconstructor({ message, cause }: { message?: string; cause?: unknown }) {\n\t\tsuper(message);\n\t\tthis.name = 'DrizzleError';\n\t\tthis.cause = cause;\n\t}\n}\n\nexport class DrizzleQueryError extends Error {\n\tconstructor(\n\t\tpublic query: string,\n\t\tpublic params: any[],\n\t\tpublic override cause?: Error,\n\t) {\n\t\tsuper(`Failed query: ${query}\\nparams: ${params}`);\n\t\tError.captureStackTrace(this, DrizzleQueryError);\n\n\t\t// ES2022+: preserves original error on `.cause`\n\t\tif (cause) (this as any).cause = cause;\n\t}\n}\n\nexport class TransactionRollbackError extends DrizzleError {\n\tstatic override readonly [entityKind]: string = 'TransactionRollbackError';\n\n\tconstructor() {\n\t\tsuper({ message: 'Rollback' });\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { ColumnsSelection } from '~/sql/sql.ts';\nimport { View } from '~/sql/sql.ts';\n\nexport abstract class SQLiteViewBase<\n\tTName extends string = string,\n\tTExisting extends boolean = boolean,\n\tTSelection extends ColumnsSelection = ColumnsSelection,\n> extends View<TName, TExisting, TSelection> {\n\tstatic override readonly [entityKind]: string = 'SQLiteViewBase';\n\n\tdeclare _: View<TName, TExisting, TSelection>['_'] & {\n\t\tviewBrand: 'SQLiteView';\n\t};\n}\n", "import type { CacheConfig, WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { TypedQueryBuilder } from '~/query-builders/query-builder.ts';\nimport type {\n\tBuildSubquerySelection,\n\tGetSelectTableName,\n\tGetSelectTableSelection,\n\tJoinNullability,\n\tJoinType,\n\tSelectMode,\n\tSelectResult,\n\tSetOperator,\n} from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport { SQL, View } from '~/sql/sql.ts';\nimport type { ColumnsSelection, Placeholder, Query, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteColumn } from '~/sqlite-core/columns/index.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLiteSession } from '~/sqlite-core/session.ts';\nimport type { SubqueryWithSelection } from '~/sqlite-core/subquery.ts';\nimport type { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\tapplyMixins,\n\tgetTableColumns,\n\tgetTableLikeName,\n\thaveSameKeys,\n\torderSelectedFields,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type {\n\tAnySQLiteSelect,\n\tCreateSQLiteSelectFromBuilderMode,\n\tGetSQLiteSetOperators,\n\tSelectedFields,\n\tSetOperatorRightSelect,\n\tSQLiteCreateSetOperatorFn,\n\tSQLiteSelectConfig,\n\tSQLiteSelectCrossJoinFn,\n\tSQLiteSelectDynamic,\n\tSQLiteSelectExecute,\n\tSQLiteSelectHKT,\n\tSQLiteSelectHKTBase,\n\tSQLiteSelectJoinFn,\n\tSQLiteSelectPrepare,\n\tSQLiteSelectWithout,\n\tSQLiteSetOperatorExcludedMethods,\n\tSQLiteSetOperatorWithResult,\n} from './select.types.ts';\n\nexport class SQLiteSelectBuilder<\n\tTSelection extends SelectedFields | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTBuilderMode extends 'db' | 'qb' = 'db',\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSelectBuilder';\n\n\tprivate fields: TSelection;\n\tprivate session: SQLiteSession<any, any, any, any> | undefined;\n\tprivate dialect: SQLiteDialect;\n\tprivate withList: Subquery[] | undefined;\n\tprivate distinct: boolean | undefined;\n\n\tconstructor(\n\t\tconfig: {\n\t\t\tfields: TSelection;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList?: Subquery[];\n\t\t\tdistinct?: boolean;\n\t\t},\n\t) {\n\t\tthis.fields = config.fields;\n\t\tthis.session = config.session;\n\t\tthis.dialect = config.dialect;\n\t\tthis.withList = config.withList;\n\t\tthis.distinct = config.distinct;\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): CreateSQLiteSelectFromBuilderMode<\n\t\tTBuilderMode,\n\t\tGetSelectTableName<TFrom>,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection extends undefined ? GetSelectTableSelection<TFrom> : TSelection,\n\t\tTSelection extends undefined ? 'single' : 'partial'\n\t> {\n\t\tconst isPartialSelect = !!this.fields;\n\n\t\tlet fields: SelectedFields;\n\t\tif (this.fields) {\n\t\t\tfields = this.fields;\n\t\t} else if (is(source, Subquery)) {\n\t\t\t// This is required to use the proxy handler to get the correct field values from the subquery\n\t\t\tfields = Object.fromEntries(\n\t\t\t\tObject.keys(source._.selectedFields).map((\n\t\t\t\t\tkey,\n\t\t\t\t) => [key, source[key as unknown as keyof typeof source] as unknown as SelectedFields[string]]),\n\t\t\t);\n\t\t} else if (is(source, SQLiteViewBase)) {\n\t\t\tfields = source[ViewBaseConfig].selectedFields as SelectedFields;\n\t\t} else if (is(source, SQL)) {\n\t\t\tfields = {};\n\t\t} else {\n\t\t\tfields = getTableColumns<SQLiteTable>(source);\n\t\t}\n\n\t\treturn new SQLiteSelectBase({\n\t\t\ttable: source,\n\t\t\tfields,\n\t\t\tisPartialSelect,\n\t\t\tsession: this.session,\n\t\t\tdialect: this.dialect,\n\t\t\twithList: this.withList,\n\t\t\tdistinct: this.distinct,\n\t\t}) as any;\n\t}\n}\n\nexport abstract class SQLiteSelectQueryBuilderBase<\n\tTHKT extends SQLiteSelectHKTBase,\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode,\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends TypedQueryBuilder<TSelectedFields, TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelectQueryBuilder';\n\n\toverride readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly hkt: THKT;\n\t\treadonly tableName: TTableName;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly selection: TSelection;\n\t\treadonly selectMode: TSelectMode;\n\t\treadonly nullabilityMap: TNullabilityMap;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TResult;\n\t\treadonly selectedFields: TSelectedFields;\n\t\treadonly config: SQLiteSelectConfig;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteSelectConfig;\n\tprotected joinsNotNullableMap: Record<string, boolean>;\n\tprivate tableName: string | undefined;\n\tprivate isPartialSelect: boolean;\n\tprotected session: SQLiteSession<any, any, any, any> | undefined;\n\tprotected dialect: SQLiteDialect;\n\tprotected cacheConfig?: WithCacheConfig = undefined;\n\tprotected usedTables: Set<string> = new Set();\n\n\tconstructor(\n\t\t{ table, fields, isPartialSelect, session, dialect, withList, distinct }: {\n\t\t\ttable: SQLiteSelectConfig['table'];\n\t\t\tfields: SQLiteSelectConfig['fields'];\n\t\t\tisPartialSelect: boolean;\n\t\t\tsession: SQLiteSession<any, any, any, any> | undefined;\n\t\t\tdialect: SQLiteDialect;\n\t\t\twithList: Subquery[] | undefined;\n\t\t\tdistinct: boolean | undefined;\n\t\t},\n\t) {\n\t\tsuper();\n\t\tthis.config = {\n\t\t\twithList,\n\t\t\ttable,\n\t\t\tfields: { ...fields },\n\t\t\tdistinct,\n\t\t\tsetOperators: [],\n\t\t};\n\t\tthis.isPartialSelect = isPartialSelect;\n\t\tthis.session = session;\n\t\tthis.dialect = dialect;\n\t\tthis._ = {\n\t\t\tselectedFields: fields as TSelectedFields,\n\t\t\tconfig: this.config,\n\t\t} as this['_'];\n\t\tthis.tableName = getTableLikeName(table);\n\t\tthis.joinsNotNullableMap = typeof this.tableName === 'string' ? { [this.tableName]: true } : {};\n\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\t}\n\n\t/** @internal */\n\tgetUsedTables() {\n\t\treturn [...this.usedTables];\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): 'cross' extends TJoinType ? SQLiteSelectCrossJoinFn<this, TDynamic>\n\t\t: SQLiteSelectJoinFn<this, TDynamic, TJoinType>\n\t{\n\t\treturn (\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton?: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst baseTableName = this.tableName;\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\t// store all tables used in a query\n\t\t\tfor (const item of extractUsedTable(table)) this.usedTables.add(item);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins?.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (!this.isPartialSelect) {\n\t\t\t\t// If this is the first join and this is not a partial select and we're not selecting from raw SQL, \"move\" the fields from the main table to the nested object\n\t\t\t\tif (Object.keys(this.joinsNotNullableMap).length === 1 && typeof baseTableName === 'string') {\n\t\t\t\t\tthis.config.fields = {\n\t\t\t\t\t\t[baseTableName]: this.config.fields,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (typeof tableName === 'string' && !is(table, SQL)) {\n\t\t\t\t\tconst selection = is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, View)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: table[Table.Symbol.Columns];\n\t\t\t\t\tthis.config.fields[tableName] = selection;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.fields,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as TSelection,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (!this.config.joins) {\n\t\t\t\tthis.config.joins = [];\n\t\t\t}\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\tif (typeof tableName === 'string') {\n\t\t\t\tswitch (joinType) {\n\t\t\t\t\tcase 'left': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'right': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'cross':\n\t\t\t\t\tcase 'inner': {\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'full': {\n\t\t\t\t\t\tthis.joinsNotNullableMap = Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(this.joinsNotNullableMap).map(([key]) => [key, false]),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.joinsNotNullableMap[tableName] = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Executes a `left join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the table with the corresponding row from the joined table, if a match is found. If no matching row exists, it sets all columns of the joined table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#left-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .leftJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tleftJoin = this.createJoin('left');\n\n\t/**\n\t * Executes a `right join` operation by adding another table to the current query.\n\t *\n\t * Calling this method associates each row of the joined table with the corresponding row from the main table, if a match is found. If no matching row exists, it sets all columns of the main table to null.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#right-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .rightJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\trightJoin = this.createJoin('right');\n\n\t/**\n\t * Executes an `inner join` operation, creating a new table by combining rows from two tables that have matching values.\n\t *\n\t * Calling this method retrieves rows that have corresponding entries in both joined tables. Rows without matching entries in either table are excluded, resulting in a table that includes only matching pairs.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#inner-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .innerJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tinnerJoin = this.createJoin('inner');\n\n\t/**\n\t * Executes a `full join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging rows with matching values and filling in `null` for non-matching columns.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#full-join}\n\t *\n\t * @param table the table to join.\n\t * @param on the `on` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users and their pets\n\t * const usersWithPets: { user: User | null; pets: Pet | null; }[] = await db.select()\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number | null; petId: number | null; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .fullJoin(pets, eq(users.id, pets.ownerId))\n\t * ```\n\t */\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Executes a `cross join` operation by combining rows from two tables into a new table.\n\t *\n\t * Calling this method retrieves all rows from both main and joined tables, merging all rows from each table.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/joins#cross-join}\n\t *\n\t * @param table the table to join.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all users, each user with every pet\n\t * const usersWithPets: { user: User; pets: Pet; }[] = await db.select()\n\t * .from(users)\n\t * .crossJoin(pets)\n\t *\n\t * // Select userId and petId\n\t * const usersIdsAndPetIds: { userId: number; petId: number; }[] = await db.select({\n\t * userId: users.id,\n\t * petId: pets.id,\n\t * })\n\t * .from(users)\n\t * .crossJoin(pets)\n\t * ```\n\t */\n\tcrossJoin = this.createJoin('cross');\n\n\tprivate createSetOperator(\n\t\ttype: SetOperator,\n\t\tisAll: boolean,\n\t): <TValue extends SQLiteSetOperatorWithResult<TResult>>(\n\t\trightSelection:\n\t\t\t| ((setOperators: GetSQLiteSetOperators) => SetOperatorRightSelect<TValue, TResult>)\n\t\t\t| SetOperatorRightSelect<TValue, TResult>,\n\t) => SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\treturn (rightSelection) => {\n\t\t\tconst rightSelect = (typeof rightSelection === 'function'\n\t\t\t\t? rightSelection(getSQLiteSetOperators())\n\t\t\t\t: rightSelection) as TypedQueryBuilder<\n\t\t\t\t\tany,\n\t\t\t\t\tTResult\n\t\t\t\t>;\n\n\t\t\tif (!haveSameKeys(this.getSelectedFields(), rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.setOperators.push({ type, isAll, rightSelect });\n\t\t\treturn this as any;\n\t\t};\n\t}\n\n\t/**\n\t * Adds `union` set operator to the query.\n\t *\n\t * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all unique names from customers and users tables\n\t * await db.select({ name: users.name })\n\t * .from(users)\n\t * .union(\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * // or\n\t * import { union } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await union(\n\t * db.select({ name: users.name }).from(users),\n\t * db.select({ name: customers.name }).from(customers)\n\t * );\n\t * ```\n\t */\n\tunion = this.createSetOperator('union', false);\n\n\t/**\n\t * Adds `union all` set operator to the query.\n\t *\n\t * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all transaction ids from both online and in-store sales\n\t * await db.select({ transaction: onlineSales.transactionId })\n\t * .from(onlineSales)\n\t * .unionAll(\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * // or\n\t * import { unionAll } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await unionAll(\n\t * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n\t * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n\t * );\n\t * ```\n\t */\n\tunionAll = this.createSetOperator('union', true);\n\n\t/**\n\t * Adds `intersect` set operator to the query.\n\t *\n\t * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select course names that are offered in both departments A and B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .intersect(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { intersect } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await intersect(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\tintersect = this.createSetOperator('intersect', false);\n\n\t/**\n\t * Adds `except` set operator to the query.\n\t *\n\t * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all courses offered in department A but not in department B\n\t * await db.select({ courseName: depA.courseName })\n\t * .from(depA)\n\t * .except(\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * // or\n\t * import { except } from 'drizzle-orm/sqlite-core'\n\t *\n\t * await except(\n\t * db.select({ courseName: depA.courseName }).from(depA),\n\t * db.select({ courseName: depB.courseName }).from(depB)\n\t * );\n\t * ```\n\t */\n\texcept = this.createSetOperator('except', false);\n\n\t/** @internal */\n\taddSetOperators(setOperators: SQLiteSelectConfig['setOperators']): SQLiteSelectWithout<\n\t\tthis,\n\t\tTDynamic,\n\t\tSQLiteSetOperatorExcludedMethods,\n\t\ttrue\n\t> {\n\t\tthis.config.setOperators.push(...setOperators);\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `where` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#filtering}\n\t *\n\t * @param where the `where` clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be selected.\n\t *\n\t * ```ts\n\t * // Select all cars with green color\n\t * await db.select().from(cars).where(eq(cars.color, 'green'));\n\t * // or\n\t * await db.select().from(cars).where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Select all BMW cars with a green color\n\t * await db.select().from(cars).where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Select all cars with the green or blue color\n\t * await db.select().from(cars).where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(\n\t\twhere: ((aliases: TSelection) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'where'> {\n\t\tif (typeof where === 'function') {\n\t\t\twhere = where(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `having` clause to the query.\n\t *\n\t * Calling this method will select only those rows that fulfill a specified condition. It is typically used with aggregate functions to filter the aggregated data based on a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @param having the `having` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Select all brands with more than one car\n\t * await db.select({\n\t * \tbrand: cars.brand,\n\t * \tcount: sql<number>`cast(count(${cars.id}) as int)`,\n\t * })\n\t * .from(cars)\n\t * .groupBy(cars.brand)\n\t * .having(({ count }) => gt(count, 1));\n\t * ```\n\t */\n\thaving(\n\t\thaving: ((aliases: this['_']['selection']) => SQL | undefined) | SQL | undefined,\n\t): SQLiteSelectWithout<this, TDynamic, 'having'> {\n\t\tif (typeof having === 'function') {\n\t\t\thaving = having(\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t}\n\t\tthis.config.having = having;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `group by` clause to the query.\n\t *\n\t * Calling this method will group rows that have the same values into summary rows, often used for aggregation purposes.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#aggregations}\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Group and count people by their last names\n\t * await db.select({\n\t * lastName: people.lastName,\n\t * count: sql<number>`cast(count(*) as int)`\n\t * })\n\t * .from(people)\n\t * .groupBy(people.lastName);\n\t * ```\n\t */\n\tgroupBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'groupBy'>;\n\tgroupBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'groupBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst groupBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\t\t\tthis.config.groupBy = Array.isArray(groupBy) ? groupBy : [groupBy];\n\t\t} else {\n\t\t\tthis.config.groupBy = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `order by` clause to the query.\n\t *\n\t * Calling this method will sort the result-set in ascending or descending order. By default, the sort order is ascending.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#order-by}\n\t *\n\t * @example\n\t *\n\t * ```\n\t * // Select cars ordered by year\n\t * await db.select().from(cars).orderBy(cars.year);\n\t * ```\n\t *\n\t * You can specify whether results are in ascending or descending order with the `asc()` and `desc()` operators.\n\t *\n\t * ```ts\n\t * // Select cars ordered by year in descending order\n\t * await db.select().from(cars).orderBy(desc(cars.year));\n\t *\n\t * // Select cars ordered by year and price\n\t * await db.select().from(cars).orderBy(asc(cars.year), desc(cars.price));\n\t * ```\n\t */\n\torderBy(\n\t\tbuilder: (aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL)[]): SQLiteSelectWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(aliases: this['_']['selection']) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteSelectWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.fields,\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as TSelection,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\n\t\t\tif (this.config.setOperators.length > 0) {\n\t\t\t\tthis.config.setOperators.at(-1)!.orderBy = orderByArray;\n\t\t\t} else {\n\t\t\t\tthis.config.orderBy = orderByArray;\n\t\t\t}\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `limit` clause to the query.\n\t *\n\t * Calling this method will set the maximum number of rows that will be returned by this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param limit the `limit` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the first 10 people from this query.\n\t * await db.select().from(people).limit(10);\n\t * ```\n\t */\n\tlimit(limit: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'limit'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.limit = limit;\n\t\t} else {\n\t\t\tthis.config.limit = limit;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds an `offset` clause to the query.\n\t *\n\t * Calling this method will skip a number of rows when returning results from this query.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/select#limit--offset}\n\t *\n\t * @param offset the `offset` clause.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * // Get the 10th-20th people from this query.\n\t * await db.select().from(people).offset(10).limit(10);\n\t * ```\n\t */\n\toffset(offset: number | Placeholder): SQLiteSelectWithout<this, TDynamic, 'offset'> {\n\t\tif (this.config.setOperators.length > 0) {\n\t\t\tthis.config.setOperators.at(-1)!.offset = offset;\n\t\t} else {\n\t\t\tthis.config.offset = offset;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildSelectQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\tas<TAlias extends string>(\n\t\talias: TAlias,\n\t): SubqueryWithSelection<this['_']['selectedFields'], TAlias> {\n\t\tconst usedTables: string[] = [];\n\t\tusedTables.push(...extractUsedTable(this.config.table));\n\t\tif (this.config.joins) { for (const it of this.config.joins) usedTables.push(...extractUsedTable(it.table)); }\n\n\t\treturn new Proxy(\n\t\t\tnew Subquery(this.getSQL(), this.config.fields, alias, false, [...new Set(usedTables)]),\n\t\t\tnew SelectionProxyHandler({ alias, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as SubqueryWithSelection<this['_']['selectedFields'], TAlias>;\n\t}\n\n\t/** @internal */\n\toverride getSelectedFields(): this['_']['selectedFields'] {\n\t\treturn new Proxy(\n\t\t\tthis.config.fields,\n\t\t\tnew SelectionProxyHandler({ alias: this.tableName, sqlAliasedBehavior: 'alias', sqlBehavior: 'error' }),\n\t\t) as this['_']['selectedFields'];\n\t}\n\n\t$dynamic(): SQLiteSelectDynamic<this> {\n\t\treturn this;\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection extends ColumnsSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult extends any[] = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends\n\tSQLiteSelectQueryBuilderBase<\n\t\tSQLiteSelectHKT,\n\t\tTTableName,\n\t\tTResultType,\n\t\tTRunResult,\n\t\tTSelection,\n\t\tTSelectMode,\n\t\tTNullabilityMap,\n\t\tTDynamic,\n\t\tTExcludedMethods,\n\t\tTResult,\n\t\tTSelectedFields\n\t>,\n\tQueryPromise<TResult>\n{}\n\nexport class SQLiteSelectBase<\n\tTTableName extends string | undefined,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTSelection,\n\tTSelectMode extends SelectMode = 'single',\n\tTNullabilityMap extends Record<string, JoinNullability> = TTableName extends string ? Record<TTableName, 'not-null'>\n\t\t: {},\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n\tTResult = SelectResult<TSelection, TSelectMode, TNullabilityMap>[],\n\tTSelectedFields extends ColumnsSelection = BuildSubquerySelection<TSelection, TNullabilityMap>,\n> extends SQLiteSelectQueryBuilderBase<\n\tSQLiteSelectHKT,\n\tTTableName,\n\tTResultType,\n\tTRunResult,\n\tTSelection,\n\tTSelectMode,\n\tTNullabilityMap,\n\tTDynamic,\n\tTExcludedMethods,\n\tTResult,\n\tTSelectedFields\n> implements RunnableQuery<TResult, 'sqlite'>, SQLWrapper {\n\tstatic override readonly [entityKind]: string = 'SQLiteSelect';\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteSelectPrepare<this> {\n\t\tif (!this.session) {\n\t\t\tthrow new Error('Cannot execute a query on a query builder. Please use a database instance instead.');\n\t\t}\n\t\tconst fieldsList = orderSelectedFields<SQLiteColumn>(this.config.fields);\n\t\tconst query = this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tfieldsList,\n\t\t\t'all',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'select',\n\t\t\t\ttables: [...this.usedTables],\n\t\t\t},\n\t\t\tthis.cacheConfig,\n\t\t);\n\t\tquery.joinsNotNullableMap = this.joinsNotNullableMap;\n\t\treturn query as ReturnType<this['prepare']>;\n\t}\n\n\t$withCache(config?: { config?: CacheConfig; tag?: string; autoInvalidate?: boolean } | false) {\n\t\tthis.cacheConfig = config === undefined\n\t\t\t? { config: {}, enable: true, autoInvalidate: true }\n\t\t\t: config === false\n\t\t\t? { enable: false }\n\t\t\t: { enable: true, autoInvalidate: true, ...config };\n\t\treturn this;\n\t}\n\n\tprepare(): SQLiteSelectPrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\tasync execute(): Promise<SQLiteSelectExecute<this>> {\n\t\treturn this.all() as SQLiteSelectExecute<this>;\n\t}\n}\n\napplyMixins(SQLiteSelectBase, [QueryPromise]);\n\nfunction createSetOperator(type: SetOperator, isAll: boolean): SQLiteCreateSetOperatorFn {\n\treturn (leftSelect, rightSelect, ...restSelects) => {\n\t\tconst setOperators = [rightSelect, ...restSelects].map((select) => ({\n\t\t\ttype,\n\t\t\tisAll,\n\t\t\trightSelect: select as AnySQLiteSelect,\n\t\t}));\n\n\t\tfor (const setOperator of setOperators) {\n\t\t\tif (!haveSameKeys((leftSelect as any).getSelectedFields(), setOperator.rightSelect.getSelectedFields())) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Set operator error (union / intersect / except): selected fields are not the same or are in a different order',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn (leftSelect as AnySQLiteSelect).addSetOperators(setOperators) as any;\n\t};\n}\n\nconst getSQLiteSetOperators = () => ({\n\tunion,\n\tunionAll,\n\tintersect,\n\texcept,\n});\n\n/**\n * Adds `union` set operator to the query.\n *\n * Calling this method will combine the result sets of the `select` statements and remove any duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union}\n *\n * @example\n *\n * ```ts\n * // Select all unique names from customers and users tables\n * import { union } from 'drizzle-orm/sqlite-core'\n *\n * await union(\n * db.select({ name: users.name }).from(users),\n * db.select({ name: customers.name }).from(customers)\n * );\n * // or\n * await db.select({ name: users.name })\n * .from(users)\n * .union(\n * db.select({ name: customers.name }).from(customers)\n * );\n * ```\n */\nexport const union = createSetOperator('union', false);\n\n/**\n * Adds `union all` set operator to the query.\n *\n * Calling this method will combine the result-set of the `select` statements and keep all duplicate rows that appear across them.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#union-all}\n *\n * @example\n *\n * ```ts\n * // Select all transaction ids from both online and in-store sales\n * import { unionAll } from 'drizzle-orm/sqlite-core'\n *\n * await unionAll(\n * db.select({ transaction: onlineSales.transactionId }).from(onlineSales),\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * // or\n * await db.select({ transaction: onlineSales.transactionId })\n * .from(onlineSales)\n * .unionAll(\n * db.select({ transaction: inStoreSales.transactionId }).from(inStoreSales)\n * );\n * ```\n */\nexport const unionAll = createSetOperator('union', true);\n\n/**\n * Adds `intersect` set operator to the query.\n *\n * Calling this method will retain only the rows that are present in both result sets and eliminate duplicates.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#intersect}\n *\n * @example\n *\n * ```ts\n * // Select course names that are offered in both departments A and B\n * import { intersect } from 'drizzle-orm/sqlite-core'\n *\n * await intersect(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .intersect(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const intersect = createSetOperator('intersect', false);\n\n/**\n * Adds `except` set operator to the query.\n *\n * Calling this method will retrieve all unique rows from the left query, except for the rows that are present in the result set of the right query.\n *\n * See docs: {@link https://orm.drizzle.team/docs/set-operations#except}\n *\n * @example\n *\n * ```ts\n * // Select all courses offered in department A but not in department B\n * import { except } from 'drizzle-orm/sqlite-core'\n *\n * await except(\n * db.select({ courseName: depA.courseName }).from(depA),\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * // or\n * await db.select({ courseName: depA.courseName })\n * .from(depA)\n * .except(\n * db.select({ courseName: depB.courseName }).from(depB)\n * );\n * ```\n */\nexport const except = createSetOperator('except', false);\n", "import { entityKind } from '~/entity.ts';\nimport type { SQL, SQLWrapper } from '~/sql/index.ts';\n\nexport abstract class TypedQueryBuilder<TSelection, TResult = unknown, TConfig = unknown> implements SQLWrapper {\n\tstatic readonly [entityKind]: string = 'TypedQueryBuilder';\n\n\tdeclare _: {\n\t\tselectedFields: TSelection;\n\t\tresult: TResult;\n\t\tconfig?: TConfig;\n\t};\n\n\t/** @internal */\n\tgetSelectedFields(): TSelection {\n\t\treturn this._.selectedFields;\n\t}\n\n\tabstract getSQL(): SQL;\n}\n", "import type { GetColumnData } from '~/column.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport type { JoinType, SelectResultFields } from '~/query-builders/select.types.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport { SelectionProxyHandler } from '~/selection-proxy.ts';\nimport type { Placeholder, Query, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteDialect } from '~/sqlite-core/dialect.ts';\nimport type { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { SQLiteTable } from '~/sqlite-core/table.ts';\nimport { Subquery } from '~/subquery.ts';\nimport { Table } from '~/table.ts';\nimport {\n\ttype DrizzleTypeError,\n\tgetTableLikeName,\n\tmapUpdateSet,\n\torderSelectedFields,\n\ttype UpdateSet,\n\ttype ValueOrArray,\n} from '~/utils.ts';\nimport { ViewBaseConfig } from '~/view-common.ts';\nimport type { SQLiteColumn } from '../columns/common.ts';\nimport { extractUsedTable } from '../utils.ts';\nimport { SQLiteViewBase } from '../view-base.ts';\nimport type { SelectedFields, SelectedFieldsOrdered, SQLiteSelectJoinConfig } from './select.types.ts';\n\nexport interface SQLiteUpdateConfig {\n\twhere?: SQL | undefined;\n\tlimit?: number | Placeholder;\n\torderBy?: (SQLiteColumn | SQL | SQL.Aliased)[];\n\tset: UpdateSet;\n\ttable: SQLiteTable;\n\tfrom?: SQLiteTable | Subquery | SQLiteViewBase | SQL;\n\tjoins: SQLiteSelectJoinConfig[];\n\treturning?: SelectedFieldsOrdered;\n\twithList?: Subquery[];\n}\n\nexport type SQLiteUpdateSetSource<TTable extends SQLiteTable> =\n\t& {\n\t\t[Key in keyof TTable['$inferInsert']]?:\n\t\t\t| GetColumnData<TTable['_']['columns'][Key], 'query'>\n\t\t\t| SQL\n\t\t\t| SQLiteColumn\n\t\t\t| undefined;\n\t}\n\t& {};\n\nexport class SQLiteUpdateBuilder<\n\tTTable extends SQLiteTable,\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteUpdateBuilder';\n\n\tdeclare readonly _: {\n\t\treadonly table: TTable;\n\t};\n\n\tconstructor(\n\t\tprotected table: TTable,\n\t\tprotected session: SQLiteSession<any, any, any, any>,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprivate withList?: Subquery[],\n\t) {}\n\n\tset(\n\t\tvalues: SQLiteUpdateSetSource<TTable>,\n\t): SQLiteUpdateWithout<\n\t\tSQLiteUpdateBase<TTable, TResultType, TRunResult>,\n\t\tfalse,\n\t\t'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'\n\t> {\n\t\treturn new SQLiteUpdateBase(\n\t\t\tthis.table,\n\t\t\tmapUpdateSet(this.table, values),\n\t\t\tthis.session,\n\t\t\tthis.dialect,\n\t\t\tthis.withList,\n\t\t) as any;\n\t}\n}\n\nexport type SQLiteUpdateWithout<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tK extends keyof T & string,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods'] | K\n\t>,\n\tT['_']['excludedMethods'] | K\n>;\n\nexport type SQLiteUpdateWithJoins<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n> = TDynamic extends true ? T : Omit<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tTFrom,\n\t\tT['_']['returning'],\n\t\tTDynamic,\n\t\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n\t>,\n\tExclude<T['_']['excludedMethods'] | 'from', 'leftJoin' | 'rightJoin' | 'innerJoin' | 'fullJoin'>\n>;\n\nexport type SQLiteUpdateReturningAll<T extends AnySQLiteUpdate, TDynamic extends boolean> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tT['_']['table']['$inferSelect'],\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateReturning<\n\tT extends AnySQLiteUpdate,\n\tTDynamic extends boolean,\n\tTSelectedFields extends SelectedFields,\n> = SQLiteUpdateWithout<\n\tSQLiteUpdateBase<\n\t\tT['_']['table'],\n\t\tT['_']['resultType'],\n\t\tT['_']['runResult'],\n\t\tT['_']['from'],\n\t\tSelectResultFields<TSelectedFields>,\n\t\tTDynamic,\n\t\tT['_']['excludedMethods']\n\t>,\n\tTDynamic,\n\t'returning'\n>;\n\nexport type SQLiteUpdateExecute<T extends AnySQLiteUpdate> = T['_']['returning'] extends undefined ? T['_']['runResult']\n\t: T['_']['returning'][];\n\nexport type SQLiteUpdatePrepare<T extends AnySQLiteUpdate> = SQLitePreparedQuery<\n\t{\n\t\ttype: T['_']['resultType'];\n\t\trun: T['_']['runResult'];\n\t\tall: T['_']['returning'] extends undefined ? DrizzleTypeError<'.all() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'][];\n\t\tget: T['_']['returning'] extends undefined ? DrizzleTypeError<'.get() cannot be used without .returning()'>\n\t\t\t: T['_']['returning'];\n\t\tvalues: T['_']['returning'] extends undefined ? DrizzleTypeError<'.values() cannot be used without .returning()'>\n\t\t\t: any[][];\n\t\texecute: SQLiteUpdateExecute<T>;\n\t}\n>;\n\nexport type SQLiteUpdateJoinFn<\n\tT extends AnySQLiteUpdate,\n> = <\n\tTJoinedTable extends SQLiteTable | Subquery | SQLiteViewBase | SQL,\n>(\n\ttable: TJoinedTable,\n\ton:\n\t\t| (\n\t\t\t(\n\t\t\t\tupdateTable: T['_']['table']['_']['columns'],\n\t\t\t\tfrom: T['_']['from'] extends SQLiteTable ? T['_']['from']['_']['columns']\n\t\t\t\t\t: T['_']['from'] extends Subquery | SQLiteViewBase ? T['_']['from']['_']['selectedFields']\n\t\t\t\t\t: never,\n\t\t\t) => SQL | undefined\n\t\t)\n\t\t| SQL\n\t\t| undefined,\n) => T;\n\nexport type SQLiteUpdateDynamic<T extends AnySQLiteUpdate> = SQLiteUpdate<\n\tT['_']['table'],\n\tT['_']['resultType'],\n\tT['_']['runResult'],\n\tT['_']['returning']\n>;\n\nexport type SQLiteUpdate<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = any,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning extends Record<string, unknown> | undefined = Record<string, unknown> | undefined,\n> = SQLiteUpdateBase<TTable, TResultType, TRunResult, TFrom, TReturning, true, never>;\n\nexport type AnySQLiteUpdate = SQLiteUpdateBase<any, any, any, any, any, any, any>;\n\nexport interface SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\tTDynamic extends boolean = false,\n\tTExcludedMethods extends string = never,\n> extends SQLWrapper, QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]> {\n\treadonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly table: TTable;\n\t\treadonly resultType: TResultType;\n\t\treadonly runResult: TRunResult;\n\t\treadonly from: TFrom;\n\t\treadonly returning: TReturning;\n\t\treadonly dynamic: TDynamic;\n\t\treadonly excludedMethods: TExcludedMethods;\n\t\treadonly result: TReturning extends undefined ? TRunResult : TReturning[];\n\t};\n}\n\nexport class SQLiteUpdateBase<\n\tTTable extends SQLiteTable = SQLiteTable,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTResultType extends 'sync' | 'async' = 'sync' | 'async',\n\tTRunResult = unknown,\n\tTFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL | undefined = undefined,\n\tTReturning = undefined,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTDynamic extends boolean = false,\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tTExcludedMethods extends string = never,\n> extends QueryPromise<TReturning extends undefined ? TRunResult : TReturning[]>\n\timplements RunnableQuery<TReturning extends undefined ? TRunResult : TReturning[], 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteUpdate';\n\n\t/** @internal */\n\tconfig: SQLiteUpdateConfig;\n\n\tconstructor(\n\t\ttable: TTable,\n\t\tset: UpdateSet,\n\t\tprivate session: SQLiteSession<any, any, any, any>,\n\t\tprivate dialect: SQLiteDialect,\n\t\twithList?: Subquery[],\n\t) {\n\t\tsuper();\n\t\tthis.config = { set, table, withList, joins: [] };\n\t}\n\n\tfrom<TFrom extends SQLiteTable | Subquery | SQLiteViewBase | SQL>(\n\t\tsource: TFrom,\n\t): SQLiteUpdateWithJoins<this, TDynamic, TFrom> {\n\t\tthis.config.from = source;\n\t\treturn this as any;\n\t}\n\n\tprivate createJoin<TJoinType extends JoinType>(\n\t\tjoinType: TJoinType,\n\t): SQLiteUpdateJoinFn<this> {\n\t\treturn ((\n\t\t\ttable: SQLiteTable | Subquery | SQLiteViewBase | SQL,\n\t\t\ton: ((updateTable: TTable, from: TFrom) => SQL | undefined) | SQL | undefined,\n\t\t) => {\n\t\t\tconst tableName = getTableLikeName(table);\n\n\t\t\tif (typeof tableName === 'string' && this.config.joins.some((join) => join.alias === tableName)) {\n\t\t\t\tthrow new Error(`Alias \"${tableName}\" is already used in this query`);\n\t\t\t}\n\n\t\t\tif (typeof on === 'function') {\n\t\t\t\tconst from = this.config.from\n\t\t\t\t\t? is(table, SQLiteTable)\n\t\t\t\t\t\t? table[Table.Symbol.Columns]\n\t\t\t\t\t\t: is(table, Subquery)\n\t\t\t\t\t\t? table._.selectedFields\n\t\t\t\t\t\t: is(table, SQLiteViewBase)\n\t\t\t\t\t\t? table[ViewBaseConfig].selectedFields\n\t\t\t\t\t\t: undefined\n\t\t\t\t\t: undefined;\n\t\t\t\ton = on(\n\t\t\t\t\tnew Proxy(\n\t\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t\tfrom && new Proxy(\n\t\t\t\t\t\tfrom,\n\t\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'sql', sqlBehavior: 'sql' }),\n\t\t\t\t\t) as any,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthis.config.joins.push({ on, table, joinType, alias: tableName });\n\n\t\t\treturn this as any;\n\t\t}) as any;\n\t}\n\n\tleftJoin = this.createJoin('left');\n\n\trightJoin = this.createJoin('right');\n\n\tinnerJoin = this.createJoin('inner');\n\n\tfullJoin = this.createJoin('full');\n\n\t/**\n\t * Adds a 'where' clause to the query.\n\t *\n\t * Calling this method will update only those rows that fulfill a specified condition.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update}\n\t *\n\t * @param where the 'where' clause.\n\t *\n\t * @example\n\t * You can use conditional operators and `sql function` to filter the rows to be updated.\n\t *\n\t * ```ts\n\t * // Update all cars with green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'));\n\t * // or\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(sql`${cars.color} = 'green'`)\n\t * ```\n\t *\n\t * You can logically combine conditional operators with `and()` and `or()` operators:\n\t *\n\t * ```ts\n\t * // Update all BMW cars with a green color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(and(eq(cars.color, 'green'), eq(cars.brand, 'BMW')));\n\t *\n\t * // Update all cars with the green or blue color\n\t * db.update(cars).set({ color: 'red' })\n\t * .where(or(eq(cars.color, 'green'), eq(cars.color, 'blue')));\n\t * ```\n\t */\n\twhere(where: SQL | undefined): SQLiteUpdateWithout<this, TDynamic, 'where'> {\n\t\tthis.config.where = where;\n\t\treturn this as any;\n\t}\n\n\torderBy(\n\t\tbuilder: (updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>,\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(...columns: (SQLiteColumn | SQL | SQL.Aliased)[]): SQLiteUpdateWithout<this, TDynamic, 'orderBy'>;\n\torderBy(\n\t\t...columns:\n\t\t\t| [(updateTable: TTable) => ValueOrArray<SQLiteColumn | SQL | SQL.Aliased>]\n\t\t\t| (SQLiteColumn | SQL | SQL.Aliased)[]\n\t): SQLiteUpdateWithout<this, TDynamic, 'orderBy'> {\n\t\tif (typeof columns[0] === 'function') {\n\t\t\tconst orderBy = columns[0](\n\t\t\t\tnew Proxy(\n\t\t\t\t\tthis.config.table[Table.Symbol.Columns],\n\t\t\t\t\tnew SelectionProxyHandler({ sqlAliasedBehavior: 'alias', sqlBehavior: 'sql' }),\n\t\t\t\t) as any,\n\t\t\t);\n\n\t\t\tconst orderByArray = Array.isArray(orderBy) ? orderBy : [orderBy];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t} else {\n\t\t\tconst orderByArray = columns as (SQLiteColumn | SQL | SQL.Aliased)[];\n\t\t\tthis.config.orderBy = orderByArray;\n\t\t}\n\t\treturn this as any;\n\t}\n\n\tlimit(limit: number | Placeholder): SQLiteUpdateWithout<this, TDynamic, 'limit'> {\n\t\tthis.config.limit = limit;\n\t\treturn this as any;\n\t}\n\n\t/**\n\t * Adds a `returning` clause to the query.\n\t *\n\t * Calling this method will return the specified fields of the updated rows. If no fields are specified, all fields will be returned.\n\t *\n\t * See docs: {@link https://orm.drizzle.team/docs/update#update-with-returning}\n\t *\n\t * @example\n\t * ```ts\n\t * // Update all cars with the green color and return all fields\n\t * const updatedCars: Car[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning();\n\t *\n\t * // Update all cars with the green color and return only their id and brand fields\n\t * const updatedCarsIdsAndBrands: { id: number, brand: string }[] = await db.update(cars)\n\t * .set({ color: 'red' })\n\t * .where(eq(cars.color, 'green'))\n\t * .returning({ id: cars.id, brand: cars.brand });\n\t * ```\n\t */\n\treturning(): SQLiteUpdateReturningAll<this, TDynamic>;\n\treturning<TSelectedFields extends SelectedFields>(\n\t\tfields: TSelectedFields,\n\t): SQLiteUpdateReturning<this, TDynamic, TSelectedFields>;\n\treturning(\n\t\tfields: SelectedFields = this.config.table[SQLiteTable.Symbol.Columns],\n\t): SQLiteUpdateWithout<AnySQLiteUpdate, TDynamic, 'returning'> {\n\t\tthis.config.returning = orderSelectedFields<SQLiteColumn>(fields);\n\t\treturn this as any;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildUpdateQuery(this.config);\n\t}\n\n\ttoSQL(): Query {\n\t\tconst { typings: _typings, ...rest } = this.dialect.sqlToQuery(this.getSQL());\n\t\treturn rest;\n\t}\n\n\t/** @internal */\n\t_prepare(isOneTimeQuery = true): SQLiteUpdatePrepare<this> {\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tthis.dialect.sqlToQuery(this.getSQL()),\n\t\t\tthis.config.returning,\n\t\t\tthis.config.returning ? 'all' : 'run',\n\t\t\ttrue,\n\t\t\tundefined,\n\t\t\t{\n\t\t\t\ttype: 'insert',\n\t\t\t\ttables: extractUsedTable(this.config.table),\n\t\t\t},\n\t\t) as SQLiteUpdatePrepare<this>;\n\t}\n\n\tprepare(): SQLiteUpdatePrepare<this> {\n\t\treturn this._prepare(false);\n\t}\n\n\trun: ReturnType<this['prepare']>['run'] = (placeholderValues) => {\n\t\treturn this._prepare().run(placeholderValues);\n\t};\n\n\tall: ReturnType<this['prepare']>['all'] = (placeholderValues) => {\n\t\treturn this._prepare().all(placeholderValues);\n\t};\n\n\tget: ReturnType<this['prepare']>['get'] = (placeholderValues) => {\n\t\treturn this._prepare().get(placeholderValues);\n\t};\n\n\tvalues: ReturnType<this['prepare']>['values'] = (placeholderValues) => {\n\t\treturn this._prepare().values(placeholderValues);\n\t};\n\n\toverride async execute(): Promise<SQLiteUpdateExecute<this>> {\n\t\treturn (this.config.returning ? this.all() : this.run()) as SQLiteUpdateExecute<this>;\n\t}\n\n\t$dynamic(): SQLiteUpdateDynamic<this> {\n\t\treturn this as any;\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport { SQL, sql, type SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\nimport type { SQLiteView } from '../view.ts';\n\nexport class SQLiteCountBuilder<\n\tTSession extends SQLiteSession<any, any, any, any>,\n> extends SQL<number> implements Promise<number>, SQLWrapper {\n\tprivate sql: SQL<number>;\n\n\tstatic override readonly [entityKind] = 'SQLiteCountBuilderAsync';\n\t[Symbol.toStringTag] = 'SQLiteCountBuilderAsync';\n\n\tprivate session: TSession;\n\n\tprivate static buildEmbeddedCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`(select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters})`;\n\t}\n\n\tprivate static buildCount(\n\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper,\n\t\tfilters?: SQL<unknown>,\n\t): SQL<number> {\n\t\treturn sql<number>`select count(*) from ${source}${sql.raw(' where ').if(filters)}${filters}`;\n\t}\n\n\tconstructor(\n\t\treadonly params: {\n\t\t\tsource: SQLiteTable | SQLiteView | SQL | SQLWrapper;\n\t\t\tfilters?: SQL<unknown>;\n\t\t\tsession: TSession;\n\t\t},\n\t) {\n\t\tsuper(SQLiteCountBuilder.buildEmbeddedCount(params.source, params.filters).queryChunks);\n\n\t\tthis.session = params.session;\n\n\t\tthis.sql = SQLiteCountBuilder.buildCount(\n\t\t\tparams.source,\n\t\t\tparams.filters,\n\t\t);\n\t}\n\n\tthen<TResult1 = number, TResult2 = never>(\n\t\tonfulfilled?: ((value: number) => TResult1 | PromiseLike<TResult1>) | null | undefined,\n\t\tonrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null | undefined,\n\t): Promise<TResult1 | TResult2> {\n\t\treturn Promise.resolve(this.session.count(this.sql)).then(\n\t\t\tonfulfilled,\n\t\t\tonrejected,\n\t\t);\n\t}\n\n\tcatch(\n\t\tonRejected?: ((reason: any) => never | PromiseLike<never>) | null | undefined,\n\t): Promise<number> {\n\t\treturn this.then(undefined, onRejected);\n\t}\n\n\tfinally(onFinally?: (() => void) | null | undefined): Promise<number> {\n\t\treturn this.then(\n\t\t\t(value) => {\n\t\t\t\tonFinally?.();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\t(reason) => {\n\t\t\t\tonFinally?.();\n\t\t\t\tthrow reason;\n\t\t\t},\n\t\t);\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport {\n\ttype BuildQueryResult,\n\ttype BuildRelationalQueryResult,\n\ttype DBQueryConfig,\n\tmapRelationalRow,\n\ttype TableRelationalConfig,\n\ttype TablesRelationalConfig,\n} from '~/relations.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { Query, QueryWithTypings, SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { KnownKeysOnly } from '~/utils.ts';\nimport type { SQLiteDialect } from '../dialect.ts';\nimport type { PreparedQueryConfig, SQLitePreparedQuery, SQLiteSession } from '../session.ts';\nimport type { SQLiteTable } from '../table.ts';\n\nexport type SQLiteRelationalQueryKind<TMode extends 'sync' | 'async', TResult> = TMode extends 'async'\n\t? SQLiteRelationalQuery<TMode, TResult>\n\t: SQLiteSyncRelationalQuery<TResult>;\n\nexport class RelationalQueryBuilder<\n\tTMode extends 'sync' | 'async',\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n\tTFields extends TableRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteAsyncRelationalQueryBuilder';\n\n\tconstructor(\n\t\tprotected mode: TMode,\n\t\tprotected fullSchema: Record<string, unknown>,\n\t\tprotected schema: TSchema,\n\t\tprotected tableNamesMap: Record<string, string>,\n\t\tprotected table: SQLiteTable,\n\t\tprotected tableConfig: TableRelationalConfig,\n\t\tprotected dialect: SQLiteDialect,\n\t\tprotected session: SQLiteSession<'async', unknown, TFullSchema, TSchema>,\n\t) {}\n\n\tfindMany<TConfig extends DBQueryConfig<'many', true, TSchema, TFields>>(\n\t\tconfig?: KnownKeysOnly<TConfig, DBQueryConfig<'many', true, TSchema, TFields>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? (config as DBQueryConfig<'many', true>) : {},\n\t\t\t\t'many',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TConfig>[]>;\n\t}\n\n\tfindFirst<TSelection extends Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>(\n\t\tconfig?: KnownKeysOnly<TSelection, Omit<DBQueryConfig<'many', true, TSchema, TFields>, 'limit'>>,\n\t): SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined> {\n\t\treturn (this.mode === 'sync'\n\t\t\t? new SQLiteSyncRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)\n\t\t\t: new SQLiteRelationalQuery(\n\t\t\t\tthis.fullSchema,\n\t\t\t\tthis.schema,\n\t\t\t\tthis.tableNamesMap,\n\t\t\t\tthis.table,\n\t\t\t\tthis.tableConfig,\n\t\t\t\tthis.dialect,\n\t\t\t\tthis.session,\n\t\t\t\tconfig ? { ...(config as DBQueryConfig<'many', true> | undefined), limit: 1 } : { limit: 1 },\n\t\t\t\t'first',\n\t\t\t)) as SQLiteRelationalQueryKind<TMode, BuildQueryResult<TSchema, TFields, TSelection> | undefined>;\n\t}\n}\n\nexport class SQLiteRelationalQuery<TType extends 'sync' | 'async', TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteAsyncRelationalQuery';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly type: TType;\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tmode: 'many' | 'first';\n\n\tconstructor(\n\t\tprivate fullSchema: Record<string, unknown>,\n\t\tprivate schema: TablesRelationalConfig,\n\t\tprivate tableNamesMap: Record<string, string>,\n\t\t/** @internal */\n\t\tpublic table: SQLiteTable,\n\t\tprivate tableConfig: TableRelationalConfig,\n\t\tprivate dialect: SQLiteDialect,\n\t\tprivate session: SQLiteSession<'sync' | 'async', unknown, Record<string, unknown>, TablesRelationalConfig>,\n\t\tprivate config: DBQueryConfig<'many', true> | true,\n\t\tmode: 'many' | 'first',\n\t) {\n\t\tsuper();\n\t\tthis.mode = mode;\n\t}\n\n\t/** @internal */\n\tgetSQL(): SQL {\n\t\treturn this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t}).sql as SQL;\n\t}\n\n\t/** @internal */\n\t_prepare(\n\t\tisOneTimeQuery = false,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\tconst { query, builtQuery } = this._toSQL();\n\n\t\treturn this.session[isOneTimeQuery ? 'prepareOneTimeQuery' : 'prepareQuery'](\n\t\t\tbuiltQuery,\n\t\t\tundefined,\n\t\t\tthis.mode === 'first' ? 'get' : 'all',\n\t\t\ttrue,\n\t\t\t(rawRows, mapColumnValue) => {\n\t\t\t\tconst rows = rawRows.map((row) =>\n\t\t\t\t\tmapRelationalRow(this.schema, this.tableConfig, row, query.selection, mapColumnValue)\n\t\t\t\t);\n\t\t\t\tif (this.mode === 'first') {\n\t\t\t\t\treturn rows[0] as TResult;\n\t\t\t\t}\n\t\t\t\treturn rows as TResult;\n\t\t\t},\n\t\t) as SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }>;\n\t}\n\n\tprepare(): SQLitePreparedQuery<PreparedQueryConfig & { type: TType; all: TResult; get: TResult; execute: TResult }> {\n\t\treturn this._prepare(false);\n\t}\n\n\tprivate _toSQL(): { query: BuildRelationalQueryResult; builtQuery: QueryWithTypings } {\n\t\tconst query = this.dialect.buildRelationalQuery({\n\t\t\tfullSchema: this.fullSchema,\n\t\t\tschema: this.schema,\n\t\t\ttableNamesMap: this.tableNamesMap,\n\t\t\ttable: this.table,\n\t\t\ttableConfig: this.tableConfig,\n\t\t\tqueryConfig: this.config,\n\t\t\ttableAlias: this.tableConfig.tsName,\n\t\t});\n\n\t\tconst builtQuery = this.dialect.sqlToQuery(query.sql as SQL);\n\n\t\treturn { query, builtQuery };\n\t}\n\n\ttoSQL(): Query {\n\t\treturn this._toSQL().builtQuery;\n\t}\n\n\t/** @internal */\n\texecuteRaw(): TResult {\n\t\tif (this.mode === 'first') {\n\t\t\treturn this._prepare(false).get() as TResult;\n\t\t}\n\t\treturn this._prepare(false).all() as TResult;\n\t}\n\n\toverride async execute(): Promise<TResult> {\n\t\treturn this.executeRaw();\n\t}\n}\n\nexport class SQLiteSyncRelationalQuery<TResult> extends SQLiteRelationalQuery<'sync', TResult> {\n\tstatic override readonly [entityKind]: string = 'SQLiteSyncRelationalQuery';\n\n\tsync(): TResult {\n\t\treturn this.executeRaw();\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { RunnableQuery } from '~/runnable-query.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { SQL, SQLWrapper } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '../dialect.ts';\n\ntype SQLiteRawAction = 'all' | 'get' | 'values' | 'run';\nexport interface SQLiteRawConfig {\n\taction: SQLiteRawAction;\n}\n\nexport interface SQLiteRaw<TResult> extends QueryPromise<TResult>, RunnableQuery<TResult, 'sqlite'>, SQLWrapper {}\n\nexport class SQLiteRaw<TResult> extends QueryPromise<TResult>\n\timplements RunnableQuery<TResult, 'sqlite'>, SQLWrapper, PreparedQuery\n{\n\tstatic override readonly [entityKind]: string = 'SQLiteRaw';\n\n\tdeclare readonly _: {\n\t\treadonly dialect: 'sqlite';\n\t\treadonly result: TResult;\n\t};\n\n\t/** @internal */\n\tconfig: SQLiteRawConfig;\n\n\tconstructor(\n\t\tpublic execute: () => Promise<TResult>,\n\t\t/** @internal */\n\t\tpublic getSQL: () => SQL,\n\t\taction: SQLiteRawAction,\n\t\tprivate dialect: SQLiteAsyncDialect,\n\t\tprivate mapBatchResult: (result: unknown) => unknown,\n\t) {\n\t\tsuper();\n\t\tthis.config = { action };\n\t}\n\n\tgetQuery() {\n\t\treturn { ...this.dialect.sqlToQuery(this.getSQL()), method: this.config.action };\n\t}\n\n\tmapResult(result: unknown, isFromBatch?: boolean) {\n\t\treturn isFromBatch ? this.mapBatchResult(result) : result;\n\t}\n\n\t_prepare(): PreparedQuery {\n\t\treturn this;\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn false;\n\t}\n}\n", "/// <reference types=\"@cloudflare/workers-types\" />\n\nimport type { BatchItem } from '~/batch.ts';\nimport { type Cache, NoopCache } from '~/cache/core/index.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind } from '~/entity.ts';\nimport type { Logger } from '~/logger.ts';\nimport { NoopLogger } from '~/logger.ts';\nimport type { RelationalSchemaConfig, TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport { fillPlaceholders, type Query, sql } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect } from '~/sqlite-core/dialect.ts';\nimport { SQLiteTransaction } from '~/sqlite-core/index.ts';\nimport type { SelectedFieldsOrdered } from '~/sqlite-core/query-builders/select.types.ts';\nimport type {\n\tPreparedQueryConfig as PreparedQueryConfigBase,\n\tSQLiteExecuteMethod,\n\tSQLiteTransactionConfig,\n} from '~/sqlite-core/session.ts';\nimport { SQLitePreparedQuery, SQLiteSession } from '~/sqlite-core/session.ts';\nimport { mapResultRow } from '~/utils.ts';\n\nexport interface SQLiteD1SessionOptions {\n\tlogger?: Logger;\n\tcache?: Cache;\n}\n\ntype PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;\n\nexport class SQLiteD1Session<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteSession<'async', D1Result, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteD1Session';\n\n\tprivate logger: Logger;\n\tprivate cache: Cache;\n\n\tconstructor(\n\t\tprivate client: D1Database,\n\t\tdialect: SQLiteAsyncDialect,\n\t\tprivate schema: RelationalSchemaConfig<TSchema> | undefined,\n\t\tprivate options: SQLiteD1SessionOptions = {},\n\t) {\n\t\tsuper(dialect);\n\t\tthis.logger = options.logger ?? new NoopLogger();\n\t\tthis.cache = options.cache ?? new NoopCache();\n\t}\n\n\tprepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): D1PreparedQuery {\n\t\tconst stmt = this.client.prepare(query.sql);\n\t\treturn new D1PreparedQuery(\n\t\t\tstmt,\n\t\t\tquery,\n\t\t\tthis.logger,\n\t\t\tthis.cache,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t);\n\t}\n\n\tasync batch<T extends BatchItem<'sqlite'>[] | readonly BatchItem<'sqlite'>[]>(queries: T) {\n\t\tconst preparedQueries: PreparedQuery[] = [];\n\t\tconst builtQueries: D1PreparedStatement[] = [];\n\n\t\tfor (const query of queries) {\n\t\t\tconst preparedQuery = query._prepare();\n\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\tpreparedQueries.push(preparedQuery);\n\t\t\tif (builtQuery.params.length > 0) {\n\t\t\t\tbuiltQueries.push((preparedQuery as D1PreparedQuery).stmt.bind(...builtQuery.params));\n\t\t\t} else {\n\t\t\t\tconst builtQuery = preparedQuery.getQuery();\n\t\t\t\tbuiltQueries.push(\n\t\t\t\t\tthis.client.prepare(builtQuery.sql).bind(...builtQuery.params),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst batchResults = await this.client.batch<any>(builtQueries);\n\t\treturn batchResults.map((result, i) => preparedQueries[i]!.mapResult(result, true));\n\t}\n\n\toverride extractRawAllValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results;\n\t}\n\n\toverride extractRawGetValueFromBatchResult(result: unknown): unknown {\n\t\treturn (result as D1Result).results[0];\n\t}\n\n\toverride extractRawValuesValueFromBatchResult(result: unknown): unknown {\n\t\treturn d1ToRawMapping((result as D1Result).results);\n\t}\n\n\toverride async transaction<T>(\n\t\ttransaction: (tx: D1Transaction<TFullSchema, TSchema>) => T | Promise<T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Promise<T> {\n\t\tconst tx = new D1Transaction('async', this.dialect, this, this.schema);\n\t\tawait this.run(sql.raw(`begin${config?.behavior ? ' ' + config.behavior : ''}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.run(sql`commit`);\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.run(sql`rollback`);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nexport class D1Transaction<\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends SQLiteTransaction<'async', D1Result, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'D1Transaction';\n\n\toverride async transaction<T>(transaction: (tx: D1Transaction<TFullSchema, TSchema>) => Promise<T>): Promise<T> {\n\t\tconst savepointName = `sp${this.nestedIndex}`;\n\t\tconst tx = new D1Transaction('async', this.dialect, this.session, this.schema, this.nestedIndex + 1);\n\t\tawait this.session.run(sql.raw(`savepoint ${savepointName}`));\n\t\ttry {\n\t\t\tconst result = await transaction(tx);\n\t\t\tawait this.session.run(sql.raw(`release savepoint ${savepointName}`));\n\t\t\treturn result;\n\t\t} catch (err) {\n\t\t\tawait this.session.run(sql.raw(`rollback to savepoint ${savepointName}`));\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\n/**\n * This function was taken from the D1 implementation: https://github.com/cloudflare/workerd/blob/4aae9f4c7ae30a59a88ca868c4aff88bda85c956/src/cloudflare/internal/d1-api.ts#L287\n * It may cause issues with duplicated column names in join queries, which should be fixed on the D1 side.\n * @param results\n * @returns\n */\nfunction d1ToRawMapping(results: any) {\n\tconst rows: unknown[][] = [];\n\tfor (const row of results) {\n\t\tconst entry = Object.keys(row).map((k) => row[k]);\n\t\trows.push(entry);\n\t}\n\treturn rows;\n}\n\nexport class D1PreparedQuery<T extends PreparedQueryConfig = PreparedQueryConfig> extends SQLitePreparedQuery<\n\t{ type: 'async'; run: D1Response; all: T['all']; get: T['get']; values: T['values']; execute: T['execute'] }\n> {\n\tstatic override readonly [entityKind]: string = 'D1PreparedQuery';\n\n\t/** @internal */\n\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown;\n\n\t/** @internal */\n\tfields?: SelectedFieldsOrdered;\n\n\t/** @internal */\n\tstmt: D1PreparedStatement;\n\n\tconstructor(\n\t\tstmt: D1PreparedStatement,\n\t\tquery: Query,\n\t\tprivate logger: Logger,\n\t\tcache: Cache,\n\t\tqueryMetadata: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\tcacheConfig: WithCacheConfig | undefined,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tprivate _isResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][]) => unknown,\n\t) {\n\t\tsuper('async', executeMethod, query, cache, queryMetadata, cacheConfig);\n\t\tthis.customResultMapper = customResultMapper;\n\t\tthis.fields = fields;\n\t\tthis.stmt = stmt;\n\t}\n\n\tasync run(placeholderValues?: Record<string, unknown>): Promise<D1Response> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn this.stmt.bind(...params).run();\n\t\t});\n\t}\n\n\tasync all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {\n\t\tconst { fields, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn stmt.bind(...params).all().then(({ results }) => this.mapAllResult(results!));\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\treturn this.mapAllResult(rows);\n\t}\n\n\toverride mapAllResult(rows: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\trows = d1ToRawMapping((rows as D1Result).results);\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn rows;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper(rows as unknown[][]);\n\t\t}\n\n\t\treturn (rows as unknown[][]).map((row) => mapResultRow(this.fields!, row, this.joinsNotNullableMap));\n\t}\n\n\tasync get(placeholderValues?: Record<string, unknown>): Promise<T['get']> {\n\t\tconst { fields, joinsNotNullableMap, query, logger, stmt, customResultMapper } = this;\n\t\tif (!fields && !customResultMapper) {\n\t\t\tconst params = fillPlaceholders(query.params, placeholderValues ?? {});\n\t\t\tlogger.logQuery(query.sql, params);\n\t\t\treturn await this.queryWithCache(query.sql, params, async () => {\n\t\t\t\treturn stmt.bind(...params).all().then(({ results }) => results![0]);\n\t\t\t});\n\t\t}\n\n\t\tconst rows = await this.values(placeholderValues);\n\n\t\tif (!rows[0]) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (customResultMapper) {\n\t\t\treturn customResultMapper(rows) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(fields!, rows[0], joinsNotNullableMap);\n\t}\n\n\toverride mapGetResult(result: unknown, isFromBatch?: boolean): unknown {\n\t\tif (isFromBatch) {\n\t\t\tresult = d1ToRawMapping((result as D1Result).results)[0];\n\t\t}\n\n\t\tif (!this.fields && !this.customResultMapper) {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (this.customResultMapper) {\n\t\t\treturn this.customResultMapper([result as unknown[]]) as T['all'];\n\t\t}\n\n\t\treturn mapResultRow(this.fields!, result as unknown[], this.joinsNotNullableMap);\n\t}\n\n\tasync values<T extends any[] = unknown[]>(placeholderValues?: Record<string, unknown>): Promise<T[]> {\n\t\tconst params = fillPlaceholders(this.query.params, placeholderValues ?? {});\n\t\tthis.logger.logQuery(this.query.sql, params);\n\t\treturn await this.queryWithCache(this.query.sql, params, async () => {\n\t\t\treturn this.stmt.bind(...params).raw();\n\t\t});\n\t}\n\n\t/** @internal */\n\tisResponseInArrayMode(): boolean {\n\t\treturn this._isResponseInArrayMode;\n\t}\n}\n", "import { entityKind } from '~/entity.ts';\nimport type { Table } from '~/index.ts';\nimport type { CacheConfig } from './types.ts';\n\nexport abstract class Cache {\n\tstatic readonly [entityKind]: string = 'Cache';\n\n\tabstract strategy(): 'explicit' | 'all';\n\n\t/**\n\t * Invoked if we should check cache for cached response\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract get(\n\t\tkey: string,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tisAutoInvalidate?: boolean,\n\t): Promise<any[] | undefined>;\n\n\t/**\n\t * Invoked if new query should be inserted to cache\n\t * @param sql\n\t * @param tables\n\t */\n\tabstract put(\n\t\thashedQuery: string,\n\t\tresponse: any,\n\t\ttables: string[],\n\t\tisTag: boolean,\n\t\tconfig?: CacheConfig,\n\t): Promise<void>;\n\n\t/**\n\t * Invoked if insert, update, delete was invoked\n\t * @param tables\n\t */\n\tabstract onMutate(\n\t\tparams: MutationOption,\n\t): Promise<void>;\n}\n\nexport class NoopCache extends Cache {\n\toverride strategy() {\n\t\treturn 'all' as const;\n\t}\n\n\tstatic override readonly [entityKind]: string = 'NoopCache';\n\n\toverride async get(_key: string): Promise<any[] | undefined> {\n\t\treturn undefined;\n\t}\n\toverride async put(\n\t\t_hashedQuery: string,\n\t\t_response: any,\n\t\t_tables: string[],\n\t\t_config?: any,\n\t): Promise<void> {\n\t\t// noop\n\t}\n\toverride async onMutate(_params: MutationOption): Promise<void> {\n\t\t// noop\n\t}\n}\n\nexport type MutationOption = { tags?: string | string[]; tables?: Table<any> | Table<any>[] | string | string[] };\n\nexport async function hashQuery(sql: string, params?: any[]) {\n\tconst dataToHash = `${sql}-${JSON.stringify(params)}`;\n\tconst encoder = new TextEncoder();\n\tconst data = encoder.encode(dataToHash);\n\tconst hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\tconst hashArray = [...new Uint8Array(hashBuffer)];\n\tconst hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n\n\treturn hashHex;\n}\n", "import { type Cache, hashQuery, NoopCache } from '~/cache/core/cache.ts';\nimport type { WithCacheConfig } from '~/cache/core/types.ts';\nimport { entityKind, is } from '~/entity.ts';\nimport { DrizzleError, DrizzleQueryError, TransactionRollbackError } from '~/errors.ts';\nimport { QueryPromise } from '~/query-promise.ts';\nimport type { TablesRelationalConfig } from '~/relations.ts';\nimport type { PreparedQuery } from '~/session.ts';\nimport type { Query, SQL } from '~/sql/sql.ts';\nimport type { SQLiteAsyncDialect, SQLiteSyncDialect } from '~/sqlite-core/dialect.ts';\nimport { BaseSQLiteDatabase } from './db.ts';\nimport type { SQLiteRaw } from './query-builders/raw.ts';\nimport type { SelectedFieldsOrdered } from './query-builders/select.types.ts';\n\nexport interface PreparedQueryConfig {\n\ttype: 'sync' | 'async';\n\trun: unknown;\n\tall: unknown;\n\tget: unknown;\n\tvalues: unknown;\n\texecute: unknown;\n}\n\nexport class ExecuteResultSync<T> extends QueryPromise<T> {\n\tstatic override readonly [entityKind]: string = 'ExecuteResultSync';\n\n\tconstructor(private resultCb: () => T) {\n\t\tsuper();\n\t}\n\n\toverride async execute(): Promise<T> {\n\t\treturn this.resultCb();\n\t}\n\n\tsync(): T {\n\t\treturn this.resultCb();\n\t}\n}\n\nexport type ExecuteResult<TType extends 'sync' | 'async', TResult> = TType extends 'async' ? Promise<TResult>\n\t: ExecuteResultSync<TResult>;\n\nexport abstract class SQLitePreparedQuery<T extends PreparedQueryConfig> implements PreparedQuery {\n\tstatic readonly [entityKind]: string = 'PreparedQuery';\n\n\t/** @internal */\n\tjoinsNotNullableMap?: Record<string, boolean>;\n\n\tconstructor(\n\t\tprivate mode: 'sync' | 'async',\n\t\tprivate executeMethod: SQLiteExecuteMethod,\n\t\tprotected query: Query,\n\t\tprivate cache?: Cache,\n\t\t// per query related metadata\n\t\tprivate queryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t} | undefined,\n\t\t// config that was passed through $withCache\n\t\tprivate cacheConfig?: WithCacheConfig,\n\t) {\n\t\t// it means that no $withCache options were passed and it should be just enabled\n\t\tif (cache && cache.strategy() === 'all' && cacheConfig === undefined) {\n\t\t\tthis.cacheConfig = { enable: true, autoInvalidate: true };\n\t\t}\n\t\tif (!this.cacheConfig?.enable) {\n\t\t\tthis.cacheConfig = undefined;\n\t\t}\n\t}\n\n\t/** @internal */\n\tprotected async queryWithCache<T>(\n\t\tqueryString: string,\n\t\tparams: any[],\n\t\tquery: () => Promise<T>,\n\t): Promise<T> {\n\t\tif (this.cache === undefined || is(this.cache, NoopCache) || this.queryMetadata === undefined) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any mutations, if globally is false\n\t\tif (this.cacheConfig && !this.cacheConfig.enable) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// For mutate queries, we should query the database, wait for a response, and then perform invalidation\n\t\tif (\n\t\t\t(\n\t\t\t\tthis.queryMetadata.type === 'insert' || this.queryMetadata.type === 'update'\n\t\t\t\t|| this.queryMetadata.type === 'delete'\n\t\t\t) && this.queryMetadata.tables.length > 0\n\t\t) {\n\t\t\ttry {\n\t\t\t\tconst [res] = await Promise.all([\n\t\t\t\t\tquery(),\n\t\t\t\t\tthis.cache.onMutate({ tables: this.queryMetadata.tables }),\n\t\t\t\t]);\n\t\t\t\treturn res;\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\t// don't do any reads if globally disabled\n\t\tif (!this.cacheConfig) {\n\t\t\ttry {\n\t\t\t\treturn await query();\n\t\t\t} catch (e) {\n\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t}\n\t\t}\n\n\t\tif (this.queryMetadata.type === 'select') {\n\t\t\tconst fromCache = await this.cache.get(\n\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\tthis.queryMetadata.tables,\n\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\tthis.cacheConfig.autoInvalidate,\n\t\t\t);\n\t\t\tif (fromCache === undefined) {\n\t\t\t\tlet result;\n\t\t\t\ttry {\n\t\t\t\t\tresult = await query();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t\t\t}\n\n\t\t\t\t// put actual key\n\t\t\t\tawait this.cache.put(\n\t\t\t\t\tthis.cacheConfig.tag ?? await hashQuery(queryString, params),\n\t\t\t\t\tresult,\n\t\t\t\t\t// make sure we send tables that were used in a query only if user wants to invalidate it on each write\n\t\t\t\t\tthis.cacheConfig.autoInvalidate ? this.queryMetadata.tables : [],\n\t\t\t\t\tthis.cacheConfig.tag !== undefined,\n\t\t\t\t\tthis.cacheConfig.config,\n\t\t\t\t);\n\t\t\t\t// put flag if we should invalidate or not\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn fromCache as unknown as T;\n\t\t}\n\t\ttry {\n\t\t\treturn await query();\n\t\t} catch (e) {\n\t\t\tthrow new DrizzleQueryError(queryString, params, e as Error);\n\t\t}\n\t}\n\n\tgetQuery(): Query {\n\t\treturn this.query;\n\t}\n\n\tabstract run(placeholderValues?: Record<string, unknown>): Result<T['type'], T['run']>;\n\n\tmapRunResult(result: unknown, _isFromBatch?: boolean): unknown {\n\t\treturn result;\n\t}\n\n\tabstract all(placeholderValues?: Record<string, unknown>): Result<T['type'], T['all']>;\n\n\tmapAllResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract get(placeholderValues?: Record<string, unknown>): Result<T['type'], T['get']>;\n\n\tmapGetResult(_result: unknown, _isFromBatch?: boolean): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tabstract values(placeholderValues?: Record<string, unknown>): Result<T['type'], T['values']>;\n\n\texecute(placeholderValues?: Record<string, unknown>): ExecuteResult<T['type'], T['execute']> {\n\t\tif (this.mode === 'async') {\n\t\t\treturn this[this.executeMethod](placeholderValues) as ExecuteResult<T['type'], T['execute']>;\n\t\t}\n\t\treturn new ExecuteResultSync(() => this[this.executeMethod](placeholderValues));\n\t}\n\n\tmapResult(response: unknown, isFromBatch?: boolean) {\n\t\tswitch (this.executeMethod) {\n\t\t\tcase 'run': {\n\t\t\t\treturn this.mapRunResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'all': {\n\t\t\t\treturn this.mapAllResult(response, isFromBatch);\n\t\t\t}\n\t\t\tcase 'get': {\n\t\t\t\treturn this.mapGetResult(response, isFromBatch);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @internal */\n\tabstract isResponseInArrayMode(): boolean;\n}\n\nexport interface SQLiteTransactionConfig {\n\tbehavior?: 'deferred' | 'immediate' | 'exclusive';\n}\n\nexport type SQLiteExecuteMethod = 'run' | 'all' | 'get';\n\nexport abstract class SQLiteSession<\n\tTResultKind extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> {\n\tstatic readonly [entityKind]: string = 'SQLiteSession';\n\n\tconstructor(\n\t\t/** @internal */\n\t\treadonly dialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultKind],\n\t) {}\n\n\tabstract prepareQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }>;\n\n\tprepareOneTimeQuery(\n\t\tquery: Query,\n\t\tfields: SelectedFieldsOrdered | undefined,\n\t\texecuteMethod: SQLiteExecuteMethod,\n\t\tisResponseInArrayMode: boolean,\n\t\tcustomResultMapper?: (rows: unknown[][], mapColumnValue?: (value: unknown) => unknown) => unknown,\n\t\tqueryMetadata?: {\n\t\t\ttype: 'select' | 'update' | 'delete' | 'insert';\n\t\t\ttables: string[];\n\t\t},\n\t\tcacheConfig?: WithCacheConfig,\n\t): SQLitePreparedQuery<PreparedQueryConfig & { type: TResultKind }> {\n\t\treturn this.prepareQuery(\n\t\t\tquery,\n\t\t\tfields,\n\t\t\texecuteMethod,\n\t\t\tisResponseInArrayMode,\n\t\t\tcustomResultMapper,\n\t\t\tqueryMetadata,\n\t\t\tcacheConfig,\n\t\t);\n\t}\n\n\tabstract transaction<T>(\n\t\ttransaction: (tx: SQLiteTransaction<TResultKind, TRunResult, TFullSchema, TSchema>) => Result<TResultKind, T>,\n\t\tconfig?: SQLiteTransactionConfig,\n\t): Result<TResultKind, T>;\n\n\trun(query: SQL): Result<TResultKind, TRunResult> {\n\t\tconst staticQuery = this.dialect.sqlToQuery(query);\n\t\ttry {\n\t\t\treturn this.prepareOneTimeQuery(staticQuery, undefined, 'run', false).run() as Result<TResultKind, TRunResult>;\n\t\t} catch (err) {\n\t\t\tthrow new DrizzleError({ cause: err, message: `Failed to run the query '${staticQuery.sql}'` });\n\t\t}\n\t}\n\n\t/** @internal */\n\textractRawRunValueFromBatchResult(result: unknown) {\n\t\treturn result;\n\t}\n\n\tall<T = unknown>(query: SQL): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).all() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawAllValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tget<T = unknown>(query: SQL): Result<TResultKind, T> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).get() as Result<\n\t\t\tTResultKind,\n\t\t\tT\n\t\t>;\n\t}\n\n\t/** @internal */\n\textractRawGetValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n\n\tvalues<T extends any[] = unknown[]>(\n\t\tquery: SQL,\n\t): Result<TResultKind, T[]> {\n\t\treturn this.prepareOneTimeQuery(this.dialect.sqlToQuery(query), undefined, 'run', false).values() as Result<\n\t\t\tTResultKind,\n\t\t\tT[]\n\t\t>;\n\t}\n\n\tasync count(sql: SQL) {\n\t\tconst result = await this.values(sql) as [[number]];\n\n\t\treturn result[0][0];\n\t}\n\n\t/** @internal */\n\textractRawValuesValueFromBatchResult(_result: unknown): unknown {\n\t\tthrow new Error('Not implemented');\n\t}\n}\n\nexport type Result<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: Promise<TResult> }[TKind];\n\nexport type DBResult<TKind extends 'sync' | 'async', TResult> = { sync: TResult; async: SQLiteRaw<TResult> }[TKind];\n\nexport abstract class SQLiteTransaction<\n\tTResultType extends 'sync' | 'async',\n\tTRunResult,\n\tTFullSchema extends Record<string, unknown>,\n\tTSchema extends TablesRelationalConfig,\n> extends BaseSQLiteDatabase<TResultType, TRunResult, TFullSchema, TSchema> {\n\tstatic override readonly [entityKind]: string = 'SQLiteTransaction';\n\n\tconstructor(\n\t\tresultType: TResultType,\n\t\tdialect: { sync: SQLiteSyncDialect; async: SQLiteAsyncDialect }[TResultType],\n\t\tsession: SQLiteSession<TResultType, TRunResult, TFullSchema, TSchema>,\n\t\tprotected schema: {\n\t\t\tfullSchema: Record<string, unknown>;\n\t\t\tschema: TSchema;\n\t\t\ttableNamesMap: Record<string, string>;\n\t\t} | undefined,\n\t\tprotected readonly nestedIndex = 0,\n\t) {\n\t\tsuper(resultType, dialect, session, schema);\n\t}\n\n\trollback(): never {\n\t\tthrow new TransactionRollbackError();\n\t}\n}\n", "import { sqliteTable, text } from 'drizzle-orm/sqlite-core'\n\n// Define the packages table\nexport const packages = sqliteTable('packages', {\n name: text('name').primaryKey(),\n tags: text('tags').$type<string>(), // JSON stored as string\n lastUpdated: text('last_updated'), // Timestamp for when this package was last updated\n origin: text('origin').notNull().default('local'), // 'local' or 'upstream'\n upstream: text('upstream'), // Name of upstream registry (null for local packages)\n cachedAt: text('cached_at'), // When this package was cached from upstream\n})\n\n// Define the tokens table\nexport const tokens = sqliteTable('tokens', {\n token: text('token').primaryKey(),\n uuid: text('uuid').notNull(),\n scope: text('scope').$type<string>(), // JSON stored as string\n})\n\n// Define the versions table\nexport const versions = sqliteTable('versions', {\n spec: text('spec').primaryKey(),\n manifest: text('manifest').$type<string>(), // JSON stored as string\n publishedAt: text('published_at'),\n origin: text('origin').notNull().default('local'), // 'local' or 'upstream'\n upstream: text('upstream'), // Name of upstream registry (null for local packages)\n cachedAt: text('cached_at'), // When this version was cached from upstream\n})\n\n// Default admin token\nexport const defaultAdminToken = {\n token: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',\n uuid: 'admin',\n scope: JSON.stringify([\n {\n values: ['*'],\n types: {\n pkg: { read: true, write: true },\n user: { read: true, write: true },\n },\n },\n ]),\n} as const\n", "import type { HonoContext, ApiError } from '../../types.ts'\n\n/**\n * JSON response handler middleware that formats JSON based on Accept headers\n * @returns {Function} Hono middleware function\n */\nexport function jsonResponseHandler() {\n return async (c: any, next: any) => {\n // Override the json method to handle formatting\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n const originalJson = c.json.bind(c)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n c.json = (data: any, status?: number) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n const acceptHeader = c.req.header('accept') || ''\n\n // If the client accepts the npm install format, return minimal JSON\n\n if (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n acceptHeader.includes('application/vnd.npm.install-v1+json')\n ) {\n // Use original json method for minimal output\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return originalJson(data, status)\n }\n\n // For other requests, return pretty-printed JSON\n // Preserve existing headers that were set via c.header()\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument\n const existingHeaders = new Headers(c.res?.headers || {})\n existingHeaders.set(\n 'Content-Type',\n 'application/json; charset=UTF-8',\n )\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n c.res = new Response(JSON.stringify(data, null, 2), {\n status: status || 200,\n headers: existingHeaders,\n })\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access\n return c.res\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n await next()\n }\n}\n\n/**\n * Creates a standardized JSON error response\n * @param {HonoContext} c - The Hono context\n * @param {string | ApiError} error - Error message or object\n * @param {number} [status] - HTTP status code\n * @returns {any} JSON error response\n */\nexport function jsonError(\n c: HonoContext,\n error: string | ApiError,\n status = 400,\n) {\n const errorObj: ApiError =\n typeof error === 'string' ? { error } : error\n\n return c.json(errorObj, status as any)\n}\n\n/**\n * Creates a standardized JSON success response\n * @param {HonoContext} c - The Hono context\n * @param {any} data - Response data\n * @param {number} [status] - HTTP status code\n * @returns {any} JSON success response\n */\nexport function jsonSuccess(c: HonoContext, data: any, status = 200) {\n return c.json(data, status as any)\n}\n\n/**\n * Creates a 404 Not Found response\n * @param {HonoContext} c - The Hono context\n * @param {string} [message] - Optional custom message\n * @returns {any} 404 JSON response\n */\nexport function notFound(c: HonoContext, message = 'Not Found') {\n return jsonError(c, { error: message }, 404)\n}\n\n/**\n * Creates a 401 Unauthorized response\n * @param {HonoContext} c - The Hono context\n * @param {string} [message] - Optional custom message\n * @returns {any} 401 JSON response\n */\nexport function unauthorized(\n c: HonoContext,\n message = 'Unauthorized',\n) {\n return jsonError(c, { error: message }, 401)\n}\n\n/**\n * Creates a 403 Forbidden response\n * @param {HonoContext} c - The Hono context\n * @param {string} [message] - Optional custom message\n * @returns {any} 403 JSON response\n */\nexport function forbidden(c: HonoContext, message = 'Forbidden') {\n return jsonError(c, { error: message }, 403)\n}\n\n/**\n * Creates a 500 Internal Server Error response\n * @param {HonoContext} c - The Hono context\n * @param {string} [message] - Optional custom message\n * @returns {any} 500 JSON response\n */\nexport function internalServerError(\n c: HonoContext,\n message = 'Internal Server Error',\n) {\n return jsonError(c, { error: message }, 500)\n}\n", "import type { HonoContext } from '../../types.ts'\n\n// Public / Static Assets\nexport function requiresToken(c: HonoContext): boolean {\n const { path } = c.req\n const publicRoutes = [\n '/images',\n '/styles',\n '/-/auth/*',\n '/-/ping',\n '/-/docs',\n '/',\n ]\n\n // Check for upstream utility routes that are public (ping and docs only)\n const upstreamPublicPattern = /^\\/[^/]+\\/-\\/(ping|docs)$/\n if (upstreamPublicPattern.test(path)) {\n return false // These are public, no token required\n }\n\n // Check standard public routes\n const isStandardPublicRoute = publicRoutes.some(route => {\n if (route.endsWith('/*')) {\n return path.startsWith(route.slice(0, -2))\n }\n return path === route || path.startsWith(route)\n })\n\n if (isStandardPublicRoute) {\n return false // No token required\n }\n\n // Package routes should be public for downloads\n // This includes hash-based routes, upstream routes, and legacy redirects\n const isPackageRoute =\n path.startsWith('/*/') || // Hash-based routes (literal asterisk)\n /^\\/[^-/][^/]*\\/[^/]/.test(path) || // Upstream or package routes\n /^\\/[^-/][^/]*$/.test(path) || // Root package routes\n /^\\/@[^/]+\\/[^/]+/.test(path) // Scoped packages\n\n // Exclude PUT requests (publishing) from being public\n const isPutRequest = c.req.method === 'PUT'\n const isPublicPackageRoute = isPackageRoute && !isPutRequest\n\n if (isPublicPackageRoute) {\n return false // No token required\n }\n\n // All other routes require authentication\n return true\n}\n\n// Catch-all for non-GET methods\nexport function catchAll(c: HonoContext) {\n return c.json({ error: 'Method not allowed' }, 405)\n}\n\nexport function notFound(c: HonoContext) {\n return c.json({ error: 'Not found' }, 404)\n}\n\nexport function isOK(c: HonoContext) {\n return c.json({}, 200)\n}\n", "import { getAuthedUser } from '../utils/auth.ts'\nimport type { HonoContext } from '../../types.ts'\nimport { createRoute, z } from '@hono/zod-openapi'\n\nexport async function getUsername(c: HonoContext) {\n const user = await getAuthedUser({ c })\n const uuid = user?.uuid || 'anonymous'\n return c.json({ username: uuid }, 200)\n}\n\nexport async function getUserProfile(c: HonoContext) {\n const user = await getAuthedUser({ c })\n const uuid = user?.uuid || 'anonymous'\n return c.json({ name: uuid }, 200)\n}\n\n// Route definitions for OpenAPI documentation\nexport const userProfileRoute = createRoute({\n method: 'get',\n path: '/-/user',\n tags: ['Authentication'],\n summary: 'Get User Profile',\n description: `Returns profile object associated with auth token\n\\`\\`\\`bash\n$ npm profile\nname: johnsmith\ncreated: 2015-02-26T01:26:01.124Z\nupdated: 2023-01-10T21:55:32.118Z\n\\`\\`\\``,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n }),\n },\n },\n description: 'User Profile',\n },\n },\n})\n\nexport const whoamiRoute = createRoute({\n method: 'get',\n path: '/-/whoami',\n tags: ['Authentication'],\n summary: 'Who Am I',\n description: `Returns the username of the authenticated user\n\\`\\`\\`bash\n$ npm whoami\njohnsmith\n\\`\\`\\``,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n username: z.string(),\n }),\n },\n },\n description: 'Username',\n },\n },\n})\n", "import { URL } from '../../config.ts'\nimport { createRoute, z } from '@hono/zod-openapi'\nimport type { Context } from 'hono'\n\nexport const pingRoute = createRoute({\n method: 'get',\n path: '/-/ping',\n tags: ['Health Check'],\n summary: 'Ping',\n description: `Check if the server is alive\n\\`\\`\\`bash\n$ npm ping\nnpm notice PING ${URL}\nnpm notice PONG 13ms\n\\`\\`\\``,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({}),\n },\n },\n headers: z.object({\n 'npm-notice': z.string().openapi({\n description: 'Contains \"PONG\" for npm client compatibility',\n example: 'PONG',\n }),\n }),\n description: 'Server is alive',\n },\n },\n})\n\n// Ping route handler\nexport function handlePing(c: Context): Response {\n c.header('npm-notice', 'PONG')\n return c.json({}, 200)\n}\n", "import { Scalar } from '@scalar/hono-api-reference'\nimport { SCALAR_API_CONFIG } from '../../config.ts'\n\nexport const getDocs = Scalar(async c => {\n try {\n // Use the current request's origin instead of hardcoded localhost URL\n const origin = new URL(c.req.url).origin\n const api = await fetch(`${origin}/-/api`)\n\n if (!api.ok) {\n throw new Error(\n `API fetch failed: ${api.status} ${api.statusText}`,\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const result = (await api.json()) as Record<string, any>\n\n // Merge dynamic API spec with static config, with static config taking precedence\n const {\n authentication,\n defaultHttpClient,\n ...configWithoutAuth\n } = SCALAR_API_CONFIG\n\n // Fix hardcoded localhost URLs in static config\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const staticContent = {\n ...SCALAR_API_CONFIG.spec.content,\n servers: [\n {\n url: origin,\n description: 'Current deployment',\n },\n ],\n }\n\n const options = {\n // Start with static config to preserve ALL your settings\n ...configWithoutAuth,\n spec: {\n ...SCALAR_API_CONFIG.spec,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n content: {\n // Dynamic API content first\n ...result,\n // Static config overrides any conflicts (info, servers, security, etc.)\n ...staticContent,\n },\n },\n // Fix custom CSS URL to use current origin\n customCss: `@import '${origin}/public/styles/styles.css';`,\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return options as any\n } catch (error) {\n // Fallback to static config if API fetch fails\n // eslint-disable-next-line no-console\n console.error('Failed to fetch API spec:', error)\n return SCALAR_API_CONFIG\n }\n})\n", "export { apiReference, Scalar } from './scalar'\nexport type { ApiReferenceConfiguration } from './types'\n", "import { getHtmlDocument } from '@scalar/core/libs/html-rendering'\nimport type { Context, Env, MiddlewareHandler } from 'hono'\n\nimport type { ApiReferenceConfiguration } from './types'\n\n/**\n * The default configuration for the API Reference.\n */\nconst DEFAULT_CONFIGURATION: Partial<ApiReferenceConfiguration> = {\n _integration: 'hono',\n}\n\n/**\n * The custom theme for Hono\n */\nexport const customTheme = `\n.dark-mode {\n color-scheme: dark;\n --scalar-color-1: rgba(255, 255, 245, .86);\n --scalar-color-2: rgba(255, 255, 245, .6);\n --scalar-color-3: rgba(255, 255, 245, .38);\n --scalar-color-disabled: rgba(255, 255, 245, .25);\n --scalar-color-ghost: rgba(255, 255, 245, .25);\n --scalar-color-accent: #e36002;\n --scalar-background-1: #1e1e20;\n --scalar-background-2: #2a2a2a;\n --scalar-background-3: #505053;\n --scalar-background-4: rgba(255, 255, 255, 0.06);\n --scalar-background-accent: #e360021f;\n\n --scalar-border-color: rgba(255, 255, 255, 0.1);\n --scalar-scrollbar-color: rgba(255, 255, 255, 0.24);\n --scalar-scrollbar-color-active: rgba(255, 255, 255, 0.48);\n --scalar-lifted-brightness: 1.45;\n --scalar-backdrop-brightness: 0.5;\n\n --scalar-shadow-1: 0 1px 3px 0 rgb(0, 0, 0, 0.1);\n --scalar-shadow-2: rgba(15, 15, 15, 0.2) 0px 3px 6px,\n rgba(15, 15, 15, 0.4) 0px 9px 24px, 0 0 0 1px rgba(255, 255, 255, 0.1);\n\n --scalar-button-1: #f6f6f6;\n --scalar-button-1-color: #000;\n --scalar-button-1-hover: #e7e7e7;\n\n --scalar-color-green: #3dd68c;\n --scalar-color-red: #f66f81;\n --scalar-color-yellow: #f9b44e;\n --scalar-color-blue: #5c73e7;\n --scalar-color-orange: #ff8d4d;\n --scalar-color-purple: #b191f9;\n}\n/* Sidebar */\n.dark-mode .sidebar {\n --scalar-sidebar-background-1: #161618;\n --scalar-sidebar-item-hover-color: var(--scalar-color-accent);\n --scalar-sidebar-item-hover-background: transparent;\n --scalar-sidebar-item-active-background: transparent;\n --scalar-sidebar-border-color: transparent;\n --scalar-sidebar-color-1: var(--scalar-color-1);\n --scalar-sidebar-color-2: var(--scalar-color-2);\n --scalar-sidebar-color-active: var(--scalar-color-accent);\n --scalar-sidebar-search-background: #252529;\n --scalar-sidebar-search-border-color: transparent;\n --scalar-sidebar-search-color: var(--scalar-color-3);\n}\n`\n\ntype Configuration<E extends Env> =\n | Partial<ApiReferenceConfiguration>\n | ((c: Context<E>) => Partial<ApiReferenceConfiguration> | Promise<Partial<ApiReferenceConfiguration>>)\n\n/**\n * The Hono middleware for the Scalar API Reference.\n */\nexport const Scalar = <E extends Env>(configOrResolver: Configuration<E>): MiddlewareHandler<E> => {\n return async (c) => {\n let resolvedConfig: Partial<ApiReferenceConfiguration> = {}\n\n if (typeof configOrResolver === 'function') {\n resolvedConfig = await configOrResolver(c)\n } else {\n resolvedConfig = configOrResolver\n }\n\n // Merge the defaults\n const configuration = {\n ...DEFAULT_CONFIGURATION,\n ...resolvedConfig,\n }\n\n // Respond with the HTML document\n return c.html(getHtmlDocument(configuration, customTheme))\n }\n}\n\n/**\n * @deprecated Use `Scalar` instead.\n */\nexport const apiReference = Scalar\n", "export { getConfiguration, getHtmlDocument, getScriptTags } from './html-rendering.js';\n", "/**\n * Helper function to add consistent indentation to multiline strings\n * @param str The string to indent\n * @param spaces Number of spaces for each level\n * @param initialIndent Whether to indent the first line\n */\nconst addIndent = (str, spaces = 2, initialIndent = false) => {\n const indent = ' '.repeat(spaces);\n const lines = str.split('\\n');\n return lines\n .map((line, index) => {\n if (index === 0 && !initialIndent) {\n return line;\n }\n return `${indent}${line}`;\n })\n .join('\\n');\n};\n/**\n * Generate the style tag with custom theme if needed\n */\nconst getStyles = (configuration, customTheme) => {\n const styles = [];\n if (configuration.customCss) {\n styles.push('/* Custom CSS */');\n styles.push(configuration.customCss);\n }\n if (!configuration.theme && customTheme) {\n styles.push('/* Custom Theme */');\n styles.push(customTheme);\n }\n if (styles.length === 0) {\n return '';\n }\n return `\n <style type=\"text/css\">\n ${addIndent(styles.join('\\n\\n'), 6)}\n </style>`;\n};\n/**\n * The HTML document to render the Scalar API reference.\n *\n * We must check the passed in configuration and not the configuration for the theme as the configuration will have it\n * defaulted to 'default'\n */\nconst getHtmlDocument = (givenConfiguration, customTheme = '') => {\n const { cdn, pageTitle, customCss, theme, ...rest } = givenConfiguration;\n const configuration = getConfiguration({\n ...rest,\n ...(theme ? { theme } : {}),\n customCss,\n });\n const content = `<!doctype html>\n<html>\n <head>\n <title>${pageTitle ?? 'Scalar API Reference'}</title>\n <meta charset=\"utf-8\" />\n <meta\n name=\"viewport\"\n content=\"width=device-width, initial-scale=1\" />${getStyles(configuration, customTheme)}\n </head>\n <body>\n <div id=\"app\"></div>${getScriptTags(configuration, cdn)}\n </body>\n</html>`;\n return content;\n};\n/**\n * The script tags to load the @scalar/api-reference package from the CDN.\n */\nfunction getScriptTags(configuration, cdn) {\n const restConfig = { ...configuration };\n const functionProps = [];\n for (const [key, value] of Object.entries(configuration)) {\n if (typeof value === 'function') {\n functionProps.push(`\"${key}\": ${value.toString()}`);\n delete restConfig[key];\n }\n }\n // Stringify the rest of the configuration\n const configString = JSON.stringify(restConfig, null, 2)\n .split('\\n')\n .map((line, index) => (index === 0 ? line : ' ' + line))\n .join('\\n')\n .replace(/\\s*}$/, ''); // Remove the closing brace and any whitespace before it\n const functionPropsString = functionProps.length ? `,\\n ${functionProps.join(',\\n ')}\\n }` : '}';\n return `\n <!-- Load the Script -->\n <script src=\"${cdn ?? 'https://cdn.jsdelivr.net/npm/@scalar/api-reference'}\"></script>\n\n <!-- Initialize the Scalar API Reference -->\n <script type=\"text/javascript\">\n Scalar.createApiReference('#app', ${configString}${functionPropsString})\n </script>`;\n}\n/**\n * The configuration to pass to the @scalar/api-reference package.\n */\nconst getConfiguration = (givenConfiguration) => {\n // Clone the given configuration\n const configuration = {\n ...givenConfiguration,\n };\n // Execute content if it's a function\n if (typeof configuration.content === 'function') {\n configuration.content = configuration.content();\n }\n // Only remove content if url is provided\n if (configuration.content && configuration.url) {\n delete configuration.content;\n }\n // Just return regular JSON string, no HTML escaping needed\n return configuration;\n};\n\nexport { getConfiguration, getHtmlDocument, getScriptTags };\n", "// import { v4 as uuidv4 } from 'uuid' // Removed unused import\nimport { getTokenFromHeader } from '../utils/auth.ts'\nimport type {\n HonoContext,\n DatabaseOperations,\n TokenScope,\n} from '../../types.ts'\nimport { createRoute, z } from '@hono/zod-openapi'\n\n// Helper function to get typed database from context\nfunction getDb(c: HonoContext): DatabaseOperations {\n return c.get('db')\n}\n\nexport async function getToken(c: HonoContext) {\n const token = c.req.param('token')\n if (!token) {\n return c.json({ error: 'Token parameter required' }, 400)\n }\n\n const tokenData = await getDb(c).getToken(token)\n if (!tokenData) {\n return c.json({ error: 'Token not found' }, 404)\n }\n\n return c.json(tokenData)\n}\n\nexport async function postToken(c: HonoContext) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const body = await c.req.json()\n const authToken = getTokenFromHeader(c)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!body.token || !body.uuid || !body.scope) {\n return c.json(\n { error: 'Missing required fields: token, uuid, scope' },\n 400,\n )\n }\n\n // Use the enhanced database operation that includes validation\n await getDb(c).upsertToken(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n body.token as string,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n body.uuid as string,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n body.scope as TokenScope[],\n authToken ?? undefined,\n )\n return c.json({ success: true })\n } catch (error) {\n const err = error as Error\n // Handle validation errors\n if (err.message.includes('Invalid uuid')) {\n return c.json({ error: err.message }, 400)\n } else if (err.message.includes('Unauthorized')) {\n return c.json({ error: 'Unauthorized' }, 401)\n }\n\n // Handle other errors - log to monitoring system instead of console\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n// scope is optional (only for privileged tokens) - ex. \"read:@scope/pkg\" or \"read+write:@scope/pkg\"\nexport async function putToken(c: HonoContext) {\n try {\n const token = c.req.param('token')\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const body = await c.req.json()\n const authToken = getTokenFromHeader(c)\n\n if (!token) {\n return c.json({ error: 'Token parameter required' }, 400)\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!body.uuid || !body.scope) {\n return c.json(\n { error: 'Missing required fields: uuid, scope' },\n 400,\n )\n }\n\n // Use the enhanced database operation that includes validation\n await getDb(c).upsertToken(\n token,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n body.uuid as string,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n body.scope as TokenScope[],\n authToken ?? undefined,\n )\n return c.json({ success: true })\n } catch (error) {\n const err = error as Error\n // Handle validation errors\n if (err.message.includes('Invalid uuid')) {\n return c.json({ error: err.message }, 400)\n } else if (err.message.includes('Unauthorized')) {\n return c.json({ error: 'Unauthorized' }, 401)\n }\n\n // Handle other errors - log to monitoring system instead of console\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\nexport async function deleteToken(c: HonoContext) {\n try {\n const token = c.req.param('token')\n const authToken = getTokenFromHeader(c)\n\n if (!token) {\n return c.json({ error: 'Token parameter required' }, 400)\n }\n\n // Use the enhanced database operation that includes validation\n await getDb(c).deleteToken(token, authToken ?? undefined)\n return c.json({ success: true })\n } catch (error) {\n const err = error as Error\n // Handle validation errors\n if (err.message.includes('Unauthorized')) {\n return c.json({ error: 'Unauthorized' }, 401)\n }\n\n // Handle other errors - log to monitoring system instead of console\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n// Route definitions for OpenAPI documentation\nexport const getTokensRoute = createRoute({\n method: 'get',\n path: '/-/tokens',\n tags: ['Authentication'],\n summary: 'List Tokens',\n description: `List all authentication tokens for the authenticated user\n\\`\\`\\`bash\n$ npm token list\n\\`\\`\\``,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.array(\n z.object({\n token: z.string(),\n key: z.string(),\n cidr_whitelist: z.array(z.string()).optional(),\n readonly: z.boolean(),\n automation: z.boolean(),\n created: z.string(),\n updated: z.string(),\n }),\n ),\n },\n },\n description: 'List of tokens',\n },\n },\n})\n\nexport const createTokenRoute = createRoute({\n method: 'post',\n path: '/-/tokens',\n tags: ['Authentication'],\n summary: 'Create Token',\n description: `Create a new authentication token\n\\`\\`\\`bash\n$ npm token create\n\\`\\`\\``,\n request: {\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n token: z.string(),\n uuid: z.string(),\n scope: z.string(),\n }),\n },\n },\n },\n },\n responses: {\n 201: {\n content: {\n 'application/json': {\n schema: z.object({\n token: z.string(),\n key: z.string(),\n }),\n },\n },\n description: 'Token created successfully',\n },\n },\n})\n\nexport const updateTokenRoute = createRoute({\n method: 'put',\n path: '/-/tokens',\n tags: ['Authentication'],\n summary: 'Update Token',\n description: `Update an existing authentication token`,\n request: {\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n token: z.string(),\n uuid: z.string(),\n scope: z.string(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n token: z.string(),\n key: z.string(),\n }),\n },\n },\n description: 'Token updated successfully',\n },\n },\n})\n\nexport const deleteTokenRoute = createRoute({\n method: 'delete',\n path: '/-/tokens/token/{token}',\n tags: ['Authentication'],\n summary: 'Delete Token',\n description: `Delete an authentication token\n\\`\\`\\`bash\n$ npm token revoke <token>\n\\`\\`\\``,\n request: {\n params: z.object({\n token: z.string(),\n }),\n },\n responses: {\n 204: {\n description: 'Token deleted successfully',\n },\n },\n})\n", "import * as semver from 'semver'\nimport validate from 'validate-npm-package-name'\nimport { createRoute, z } from '@hono/zod-openapi'\nimport { URL, PROXY, PROXY_URL } from '../../config.ts'\nimport {\n getUpstreamConfig,\n buildUpstreamUrl,\n} from '../utils/upstream.ts'\nimport { createFile, slimManifest } from '../utils/packages.ts'\nimport { getCachedPackageWithRefresh } from '../utils/cache.ts'\nimport type {\n HonoContext,\n SlimmedManifest,\n ParsedPackage,\n PackageManifest,\n DatabaseOperations,\n} from '../../types.ts'\n\n// Helper function to get typed database from context\nfunction getDb(c: HonoContext): DatabaseOperations {\n return c.get('db')\n}\n\ninterface SlimPackumentContext {\n protocol?: string\n host?: string\n upstream?: string\n}\n\ninterface _TarballRequestParams {\n scope: string\n pkg: string\n}\n\ninterface _PackageRouteSegments {\n upstream?: string\n packageName: string\n segments: string[]\n}\n\ninterface _UpstreamData {\n 'dist-tags'?: Record<string, string>\n versions?: Record<string, unknown>\n time?: Record<string, string>\n [key: string]: unknown\n}\n\ninterface PackageData {\n name: string\n 'dist-tags': Record<string, string>\n versions: Record<string, unknown>\n time: Record<string, string>\n}\n\n// Use the existing ParsedVersion interface from types.ts instead\n\ninterface _CachedResult {\n fromCache?: boolean\n package?: PackageData\n}\n\ninterface _SlimmedManifest {\n name: string\n version: string\n dependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n optionalDependencies?: Record<string, string>\n peerDependenciesMeta?: Record<string, string>\n bin?: Record<string, string>\n engines?: Record<string, string>\n dist: {\n tarball: string\n }\n}\n\n/**\n * Ultra-aggressive slimming for packument versions (used in /:upstream/:pkg responses)\n * Only includes the absolute minimum fields needed for dependency resolution and installation\n * Fields included: name, version, dependencies, peerDependencies, optionalDependencies, peerDependenciesMeta, bin, engines, dist.tarball\n */\nexport async function slimPackumentVersion(\n manifest: any,\n context: SlimPackumentContext = {},\n): Promise<SlimmedManifest | null> {\n try {\n if (!manifest) return null\n\n // Parse manifest if it's a string\n\n let parsed: Record<string, any>\n if (typeof manifest === 'string') {\n try {\n parsed = JSON.parse(manifest) as Record<string, any>\n } catch (_e) {\n parsed = manifest as unknown as Record<string, any>\n }\n } else {\n parsed = manifest as Record<string, any>\n }\n\n // For packuments, only include the most essential fields\n const slimmed: _SlimmedManifest = {\n name: parsed.name as string,\n version: parsed.version as string,\n dependencies: (parsed.dependencies ?? {}) as Record<\n string,\n string\n >,\n peerDependencies: (parsed.peerDependencies ?? {}) as Record<\n string,\n string\n >,\n optionalDependencies: (parsed.optionalDependencies ??\n {}) as Record<string, string>,\n peerDependenciesMeta: (parsed.peerDependenciesMeta ??\n {}) as Record<string, string>,\n bin: (parsed.bin ?? {}) as Record<string, string>,\n engines: (parsed.engines ?? {}) as Record<string, string>,\n dist: {\n tarball: await rewriteTarballUrlIfNeeded(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (parsed.dist?.tarball ?? '') as string,\n parsed.name as string,\n parsed.version as string,\n context,\n ),\n },\n }\n\n // Remove undefined fields to keep response clean\n Object.keys(slimmed).forEach(key => {\n if (\n key !== 'dist' &&\n key !== 'name' &&\n key !== 'version' &&\n slimmed[key as keyof _SlimmedManifest] === undefined\n ) {\n delete slimmed[key as keyof _SlimmedManifest]\n }\n })\n\n // Remove empty objects\n\n if (Object.keys(slimmed.dependencies ?? {}).length === 0) {\n delete slimmed.dependencies\n }\n\n if (Object.keys(slimmed.peerDependencies ?? {}).length === 0) {\n delete slimmed.peerDependencies\n }\n if (\n Object.keys(slimmed.peerDependenciesMeta ?? {}).length === 0\n ) {\n delete slimmed.peerDependenciesMeta\n }\n if (\n Object.keys(slimmed.optionalDependencies ?? {}).length === 0\n ) {\n delete slimmed.optionalDependencies\n }\n\n if (Object.keys(slimmed.engines ?? {}).length === 0) {\n delete slimmed.engines\n }\n\n return slimmed as SlimmedManifest\n } catch (_err) {\n // Hono logger will capture the error context automatically\n return null\n }\n}\n\n/**\n * Rewrite tarball URLs to point to our registry instead of the original registry\n * Only rewrite if context is provided, otherwise return original URL\n */\nexport async function rewriteTarballUrlIfNeeded(\n _originalUrl: string,\n packageName: string,\n version: string,\n context: SlimPackumentContext = {},\n): Promise<string> {\n try {\n const { upstream, protocol, host } = context\n\n if (!upstream || !protocol || !host) {\n // If no context, create a local tarball URL\n return `${URL}/${createFile({ pkg: packageName, version })}`\n }\n\n // Create a proper upstream tarball URL that points to our registry\n // Format: https://our-domain/upstream/package/-/package-version.tgz\n // For scoped packages like @scope/package, we need to preserve the full name\n const packageFileName =\n packageName.includes('/') ?\n packageName.split('/').pop() // For @scope/package, use just 'package'\n : packageName // For regular packages, use the full name\n\n return `${protocol}://${host}/${upstream}/${packageName}/-/${packageFileName}-${version}.tgz`\n } catch (_err) {\n // Fallback to local URL format\n return `${URL}/${createFile({ pkg: packageName, version })}`\n }\n}\n\n/**\n * Helper function to properly decode scoped package names from URL parameters\n * Handles cases where special characters in package names are URL-encoded\n */\nfunction decodePackageName(\n scope: string,\n pkg?: string,\n): string | null {\n if (!scope) return null\n\n // Decode URL-encoded characters in both scope and pkg\n const decodedScope = decodeURIComponent(scope)\n const decodedPkg = pkg ? decodeURIComponent(pkg) : null\n\n // Handle scoped packages correctly\n if (decodedScope.startsWith('@')) {\n // If we have both scope and pkg, combine them\n if (decodedPkg && decodedPkg !== '-') {\n return `${decodedScope}/${decodedPkg}`\n }\n\n // If scope contains an encoded slash, it might be the full package name\n if (decodedScope.includes('/')) {\n return decodedScope\n }\n\n // Just the scope\n return decodedScope\n } else {\n // Unscoped package - scope is actually the package name\n return decodedScope\n }\n}\n\n/**\n * Determines if a package is available only through proxy or is locally published\n * A package is considered proxied if it doesn't exist locally but PROXY is enabled\n */\nfunction _isProxiedPackage(\n packageData: ParsedPackage | null,\n): boolean {\n // If the package doesn't exist locally but PROXY is enabled\n if (!packageData && PROXY) {\n return true\n }\n\n // If the package is marked as proxied (has a source field indicating where it came from)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (packageData && (packageData as any).source === 'proxy') {\n return true\n }\n\n return false\n}\n\nexport async function getPackageTarball(c: HonoContext) {\n try {\n let { scope, pkg } = c.req.param() as {\n scope: string\n pkg: string\n }\n const acceptsIntegrity = c.req.header('accepts-integrity')\n\n // Debug: getPackageTarball called with pkg and path (logged by Hono middleware)\n\n // If no route parameters, extract package name from path (for upstream routes)\n if (!scope && !pkg) {\n const path = c.req.path\n const pathSegments = path.split('/').filter(Boolean)\n\n // For upstream routes like /npm/lodash/-/lodash-4.17.21.tgz\n const upstream = c.get('upstream')\n if (upstream && pathSegments.length > 1) {\n // Find the /-/ segment\n const tarballIndex = pathSegments.findIndex(\n segment => segment === '-',\n )\n if (tarballIndex > 1) {\n // Package name is the segments between upstream and /-/\n const packageSegments = pathSegments.slice(1, tarballIndex)\n if (\n packageSegments[0]?.startsWith('@') &&\n packageSegments.length > 1\n ) {\n // Scoped package: @scope/package\n pkg = `${packageSegments[0]}/${packageSegments[1]}`\n } else {\n // Regular package\n pkg = packageSegments[0] || ''\n }\n }\n } else {\n // Direct tarball routes (without upstream)\n const tarballIndex = pathSegments.findIndex(\n segment => segment === '-',\n )\n if (tarballIndex > 0) {\n const packageSegments = pathSegments.slice(0, tarballIndex)\n if (\n packageSegments[0]?.startsWith('@') &&\n packageSegments.length > 1\n ) {\n // Scoped package: @scope/package\n pkg = `${packageSegments[0]}/${packageSegments[1]}`\n } else {\n // Regular package\n pkg = packageSegments[0] || ''\n }\n }\n }\n } else {\n // Handle scoped and unscoped packages correctly with URL decoding\n try {\n // For tarball requests, if scope is undefined/null, pkg should contain the package name\n if (!scope || scope === 'undefined') {\n if (!pkg) {\n throw new Error('Missing package name')\n }\n pkg = decodeURIComponent(pkg)\n // Hono middleware logs debug information\n } else {\n const packageName = decodePackageName(scope, pkg)\n if (!packageName) {\n throw new Error('Invalid scoped package name')\n }\n pkg = packageName\n // Hono middleware logs debug information\n }\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Invalid package name' }, 400)\n }\n }\n\n // Ensure we have a package name\n if (!pkg) {\n return c.json({ error: 'Invalid package name' }, 400)\n }\n\n let tarball = c.req.path.split('/').pop()\n if (!tarball?.endsWith('.tgz')) {\n // Hono middleware logs error information\n return c.json({ error: 'Invalid tarball name' }, 400)\n }\n\n // Check if the tarball filename contains a dist-tag like \"latest\" instead of a version\n // and resolve it to the actual version number\n const packageFileName =\n pkg.includes('/') ? pkg.split('/').pop() : pkg\n const prefix = `${packageFileName}-`\n const suffix = '.tgz'\n\n if (tarball.startsWith(prefix) && tarball.endsWith(suffix)) {\n const versionFromTarball = tarball.slice(\n prefix.length,\n -suffix.length,\n )\n\n // If version looks like a dist-tag (not a semver), try to resolve it\n if (\n versionFromTarball &&\n !semver.valid(versionFromTarball) &&\n !semver.validRange(versionFromTarball)\n ) {\n // This might be a dist-tag like \"latest\", try to resolve it\n try {\n const upstream = c.get('upstream')\n if (upstream) {\n // Get packument data to find the actual version for this dist-tag\n const upstreamConfig = getUpstreamConfig(upstream)\n if (upstreamConfig) {\n const packumentUrl = buildUpstreamUrl(\n upstreamConfig,\n pkg,\n )\n const packumentResponse = await fetch(packumentUrl, {\n method: 'GET',\n headers: {\n 'User-Agent': 'vlt-serverless-registry',\n Accept: 'application/json',\n },\n })\n\n if (packumentResponse.ok) {\n const packumentData = await packumentResponse.json()\n const distTags =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n ((packumentData as Record<string, any>)[\n 'dist-tags'\n ] as Record<string, string>) || {}\n const actualVersion = distTags[versionFromTarball]\n\n if (actualVersion) {\n // Update the tarball filename with the actual version\n tarball = `${packageFileName}-${actualVersion}.tgz`\n }\n }\n }\n }\n } catch (_error) {\n // If dist-tag resolution fails, continue with original tarball name\n // and let the upstream handle it (which will likely 404)\n }\n }\n }\n\n const filename = `${pkg}/${tarball}`\n\n // If integrity checking is requested, get the expected integrity from manifest\n let expectedIntegrity: string | null = null\n if (acceptsIntegrity) {\n try {\n // Extract version from tarball name\n const versionMatch = new RegExp(\n `${pkg.split('/').pop()}-(.*)\\\\.tgz`,\n ).exec(tarball)\n if (versionMatch) {\n const version = versionMatch[1]\n const spec = `${pkg}@${version}`\n\n // Get the version from DB\n const versionData = await getDb(c).getVersion(spec)\n\n if (versionData?.manifest) {\n let manifest: any\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n manifest =\n typeof versionData.manifest === 'string' ?\n JSON.parse(versionData.manifest)\n : versionData.manifest\n } catch (_e) {\n // Hono middleware logs error information\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (manifest?.dist?.integrity) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n expectedIntegrity = manifest.dist.integrity\n // Hono middleware logs integrity information\n\n // Simple string comparison with the provided integrity\n if (acceptsIntegrity !== expectedIntegrity) {\n // Hono middleware logs integrity error\n return c.json(\n {\n error: 'Integrity check failed',\n code: 'EINTEGRITY',\n expected: expectedIntegrity,\n actual: acceptsIntegrity,\n },\n 400,\n )\n }\n\n // Hono middleware logs integrity verification\n } else {\n // Hono middleware logs integrity information\n }\n } else {\n // Hono middleware logs integrity information\n }\n }\n } catch (_err) {\n // Hono middleware logs integrity error\n }\n }\n\n // Try to get the file from our bucket first\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n const file = await c.env.BUCKET.get(filename)\n\n // If file exists locally, stream it\n if (file) {\n try {\n // We've already verified integrity above if needed\n const headers = new Headers({\n 'Content-Type': 'application/octet-stream',\n 'Cache-Control': 'public, max-age=31536000',\n })\n\n return new Response(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n file.body,\n {\n status: 200,\n headers,\n },\n )\n } catch (_err) {\n // Hono middleware logs streaming error\n // Fall through to proxy if available\n }\n }\n } catch (_err) {\n // Hono middleware logs storage error\n // Continue to proxy if available, otherwise fall through to 404\n }\n\n // If file doesn't exist and proxying is enabled, try to get it from upstream\n if (PROXY) {\n try {\n // Construct the correct URL for scoped and unscoped packages\n const tarballPath =\n pkg.includes('/') ?\n `${pkg}/-/${tarball}`\n : `${pkg}/-/${tarball}`\n\n // Get the upstream configuration\n const upstream = c.get('upstream')\n let source: string\n\n if (upstream) {\n // Use upstream-specific URL\n const upstreamConfig = getUpstreamConfig(upstream)\n if (!upstreamConfig) {\n return c.json(\n { error: `Unknown upstream: ${upstream}` },\n 400,\n )\n }\n source = `${upstreamConfig.url}/${tarballPath}`\n } else {\n // Use default proxy URL\n source = `${PROXY_URL}/${tarballPath}`\n }\n\n // Hono middleware logs proxy information\n\n // First do a HEAD request to check size\n const headResponse = await fetch(source, {\n method: 'HEAD',\n headers: {\n 'User-Agent': 'vlt-serverless-registry',\n },\n })\n\n if (!headResponse.ok) {\n // Hono middleware logs proxy error\n return c.json(\n { error: 'Failed to check package size' },\n 502,\n )\n }\n\n const contentLength = parseInt(\n headResponse.headers.get('content-length') || '0',\n 10,\n )\n\n // Get the package response first, since we'll need it for all size cases\n const response = await fetch(source, {\n headers: {\n Accept: 'application/octet-stream',\n 'User-Agent': 'vlt-serverless-registry',\n },\n })\n\n if (!response.ok || !response.body) {\n // Hono middleware logs proxy error\n return c.json({ error: 'Failed to fetch package' }, 502)\n }\n\n // For very large packages (100MB+), stream directly to client without storing\n if (contentLength > 100_000_000) {\n // Hono middleware logs large package streaming\n\n const readable = response.body\n\n // Return the stream to the client immediately\n return new Response(readable, {\n status: 200,\n headers: new Headers({\n 'Content-Type': 'application/octet-stream',\n 'Content-Length': contentLength.toString(),\n 'Cache-Control': 'public, max-age=31536000',\n }),\n })\n }\n\n // For medium-sized packages (10-100MB), stream directly to client and store async\n if (contentLength > 10_000_000) {\n // Clone the response since we'll need it twice\n const [clientResponse, storageResponse] =\n response.body.tee()\n\n // No integrity check when storing proxied packages\n c.executionCtx.waitUntil(\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n await c.env.BUCKET.put(filename, storageResponse, {\n httpMetadata: {\n contentType: 'application/octet-stream',\n cacheControl: 'public, max-age=31536000',\n // Store the integrity value if we have it from the manifest\n ...(expectedIntegrity && {\n integrity: expectedIntegrity,\n }),\n },\n })\n // Hono middleware logs successful storage\n } catch (_err) {\n // Hono middleware logs storage error\n }\n })(),\n )\n\n // Stream directly to client\n return new Response(clientResponse, {\n status: 200,\n headers: new Headers({\n 'Content-Type': 'application/octet-stream',\n 'Content-Length': contentLength.toString(),\n 'Cache-Control': 'public, max-age=31536000',\n }),\n })\n }\n\n // For smaller packages, we can use the tee() approach safely\n const [stream1, stream2] = response.body.tee()\n\n // Store in R2 bucket asynchronously without integrity check for proxied packages\n c.executionCtx.waitUntil(\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n await c.env.BUCKET.put(filename, stream1, {\n httpMetadata: {\n contentType: 'application/octet-stream',\n cacheControl: 'public, max-age=31536000',\n // Store the integrity value if we have it from the manifest\n ...(expectedIntegrity && {\n integrity: expectedIntegrity,\n }),\n },\n })\n // Hono middleware logs successful storage\n } catch (_err) {\n // Hono middleware logs storage error\n }\n })(),\n )\n\n // Return the second stream to the client immediately\n return new Response(stream2, {\n status: 200,\n headers: new Headers({\n 'Content-Type': 'application/octet-stream',\n 'Content-Length': contentLength.toString(),\n 'Cache-Control': 'public, max-age=31536000',\n }),\n })\n } catch (_err) {\n // Hono middleware logs network error\n return c.json(\n { error: 'Failed to contact upstream registry' },\n 502,\n )\n }\n }\n\n return c.json({ error: 'Not found' }, 404)\n } catch (_err) {\n // Hono middleware logs general error\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n/**\n * Get a single package version manifest\n */\nexport async function getPackageManifest(c: HonoContext) {\n try {\n let { scope, pkg } = c.req.param() as {\n scope: string\n pkg: string\n }\n\n // If no route parameters, extract package name from path (for upstream routes)\n if (!scope && !pkg) {\n const path = c.req.path\n const pathSegments = path.split('/').filter(Boolean)\n\n // For upstream routes like /npm/express/4.18.2\n const upstream = c.get('upstream')\n if (upstream && pathSegments.length > 2) {\n // Package name starts after upstream, version is last segment\n const packageSegments = pathSegments.slice(1, -1) // Remove upstream and version\n if (\n packageSegments[0]?.startsWith('@') &&\n packageSegments.length > 1\n ) {\n // Scoped package: @scope/package\n pkg = `${packageSegments[0]}/${packageSegments[1]}`\n } else {\n // Regular package\n pkg = packageSegments[0] || ''\n }\n } else if (pathSegments.length > 1) {\n // Direct manifest routes (without upstream)\n const packageSegments = pathSegments.slice(0, -1) // Remove version\n if (\n packageSegments[0]?.startsWith('@') &&\n packageSegments.length > 1\n ) {\n // Scoped package: @scope/package\n pkg = `${packageSegments[0]}/${packageSegments[1]}`\n } else {\n // Regular package\n pkg = packageSegments[0] || ''\n }\n }\n } else {\n // Handle scoped packages correctly\n try {\n if (scope && pkg) {\n // Scoped package\n const packageName =\n scope.startsWith('@') ?\n `${scope}/${pkg}`\n : `@${scope}/${pkg}`\n pkg = packageName\n } else if (scope) {\n // Unscoped package (scope is actually the package name)\n pkg = scope\n }\n\n if (!pkg) {\n throw new Error('Invalid package name')\n }\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Invalid package name' }, 400)\n }\n }\n\n // Extract version from URL path\n const pathParts = c.req.path.split('/')\n const versionIndex = pathParts.findIndex(part => part === pkg) + 1\n let version = pathParts[versionIndex] || 'latest'\n\n // Decode URL-encoded version (e.g., %3E%3D1.0.0%20%3C2.0.0 becomes >=1.0.0 <2.0.0)\n version = decodeURIComponent(version)\n\n // Hono middleware logs manifest request information\n\n // If it's a semver range, try to resolve it to a specific version\n let resolvedVersion = version\n if (semver.validRange(version) && !semver.valid(version)) {\n // This is a range, try to find the best matching version\n try {\n const packageData = await getDb(c).getPackage(pkg)\n if (packageData) {\n const versions = await getDb(c).getVersionsByPackage(pkg)\n\n if (versions.length > 0) {\n const availableVersions = versions.map(v => v.version)\n\n const bestMatch = semver.maxSatisfying(\n availableVersions,\n version,\n )\n if (bestMatch) {\n resolvedVersion = bestMatch\n // Hono middleware logs version resolution\n }\n }\n }\n } catch (_err) {\n // Hono middleware logs version range error\n }\n }\n\n // Get the version from our database\n const versionData = await c\n .get('db')\n .getVersion(`${pkg}@${resolvedVersion}`)\n\n if (versionData) {\n // Convert the full manifest to a slimmed version for the response\n\n const slimmedManifest = slimManifest(versionData.manifest)\n\n // Ensure we have correct name, version and tarball URL\n\n const ret = {\n ...slimmedManifest,\n name: pkg,\n\n version: resolvedVersion,\n\n dist: {\n ...slimmedManifest.dist,\n tarball: `${URL}/${createFile({ pkg, version: resolvedVersion })}`,\n },\n }\n\n // Set proper headers for npm/bun\n c.header('Content-Type', 'application/json')\n c.header('Cache-Control', 'public, max-age=300') // 5 minute cache\n\n return c.json(ret, 200)\n }\n\n // If not found locally and we have an upstream, try to fetch from upstream\n const upstream = c.get('upstream')\n if (upstream && PROXY) {\n try {\n // Get the upstream configuration\n const upstreamConfig = getUpstreamConfig(upstream)\n if (!upstreamConfig) {\n return c.json(\n { error: `Unknown upstream: ${upstream}` },\n 400,\n )\n }\n\n const upstreamUrl = `${upstreamConfig.url}/${pkg}/${resolvedVersion}`\n\n const response = await fetch(upstreamUrl, {\n method: 'GET',\n headers: {\n 'User-Agent': 'vlt-registry/1.0.0',\n Accept: 'application/json',\n },\n })\n\n if (!response.ok) {\n if (response.status === 404) {\n return c.json({ error: 'Version not found' }, 404)\n }\n return c.json(\n { error: 'Failed to fetch upstream manifest' },\n 502,\n )\n }\n\n const upstreamManifest = await response.json()\n\n // Rewrite tarball URL to point to our registry with upstream prefix\n\n if (\n upstreamManifest &&\n typeof upstreamManifest === 'object' &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (upstreamManifest as any).dist?.tarball\n ) {\n const requestUrl = new globalThis.URL(c.req.url)\n const protocol = requestUrl.protocol.slice(0, -1) // Remove trailing ':'\n const host = c.req.header('host') ?? 'localhost:1337'\n const context = {\n protocol,\n host,\n upstream,\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ;(upstreamManifest as any).dist.tarball =\n await rewriteTarballUrlIfNeeded(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n String((upstreamManifest as any).dist.tarball),\n pkg,\n resolvedVersion,\n context,\n )\n }\n\n // Set proper headers for npm/bun\n c.header('Content-Type', 'application/json')\n c.header('Cache-Control', 'public, max-age=300') // 5 minute cache\n\n return c.json(upstreamManifest as Record<string, any>, 200)\n } catch (_err) {\n // Fall through to 404\n }\n }\n\n return c.json({ error: 'Version not found' }, 404)\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n/**\n * Get package dist-tags\n */\nexport async function getPackageDistTags(c: HonoContext) {\n try {\n const scope = c.req.param('scope')\n const pkg = c.req.param('pkg')\n const tag = c.req.param('tag')\n\n // Determine the package name based on route parameters\n let packageName: string | null = null\n if (scope && pkg) {\n // Scoped package: /-/package/:scope%2f:pkg/dist-tags\n packageName = decodePackageName(scope, pkg)\n } else if (pkg) {\n // Unscoped package: /-/package/:pkg/dist-tags\n packageName = decodeURIComponent(pkg)\n }\n\n if (!packageName) {\n return c.json({ error: 'Invalid package name' }, 400)\n }\n\n // Set response headers\n c.header('Content-Type', 'application/json')\n c.header('Cache-Control', 'no-cache, no-store, must-revalidate')\n\n const packageData = await getDb(c).getPackage(packageName)\n\n if (!packageData) {\n return c.json({ error: 'Package not found' }, 404)\n }\n\n // Check if this package is proxied and should not allow dist-tag operations\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if ((packageData as any).source === 'proxy') {\n return c.json(\n {\n error:\n 'Cannot perform dist-tag operations on proxied packages',\n },\n 403,\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const distTags = packageData.tags ?? {}\n\n // If no tag specified, return all tags\n if (!tag) {\n // If no tags exist, return default latest tag\n if (Object.keys(distTags).length === 0) {\n return c.json({ latest: '' })\n }\n return c.json(distTags)\n }\n\n // Return specific tag\n const tagValue = distTags[tag]\n if (tagValue !== undefined) {\n return c.json({ [tag]: tagValue })\n }\n return c.json({ error: `Tag '${tag}' not found` }, 404)\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n/**\n * Set/update a package dist-tag\n */\nexport async function putPackageDistTag(c: HonoContext) {\n try {\n const scope = c.req.param('scope')\n const pkg = c.req.param('pkg')\n const tag = c.req.param('tag')\n\n // Determine the package name based on route parameters\n let packageName: string | null = null\n if (scope && pkg) {\n // Scoped package: /-/package/:scope%2f:pkg/dist-tags/:tag\n packageName = decodePackageName(scope, pkg)\n } else if (pkg) {\n // Unscoped package: /-/package/:pkg/dist-tags/:tag\n packageName = decodeURIComponent(pkg)\n }\n\n if (!packageName) {\n return c.json({ error: 'Invalid package name' }, 400)\n }\n\n const version = await c.req.text()\n\n if (!version || !tag) {\n return c.json({ error: 'Tag and version are required' }, 400)\n }\n\n // Validate that tag name is not a valid semver range\n if (semver.validRange(tag)) {\n return c.json(\n {\n error: `Tag name must not be a valid SemVer range: ${tag}`,\n },\n 400,\n )\n }\n\n const packageData = await getDb(c).getPackage(packageName)\n\n if (!packageData) {\n return c.json({ error: 'Package not found' }, 404)\n }\n\n // Check if this package is proxied and should not allow dist-tag operations\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if ((packageData as any).source === 'proxy') {\n return c.json(\n {\n error:\n 'Cannot perform dist-tag operations on proxied packages',\n },\n 403,\n )\n }\n\n // Validate that the version exists\n const versionSpec = `${packageName}@${version}`\n const versionData = await getDb(c).getVersion(versionSpec)\n if (!versionData) {\n return c.json(\n {\n error: `Version ${version} not found`,\n },\n 404,\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const distTags = packageData.tags ?? {}\n distTags[tag] = version\n\n await getDb(c).upsertPackage(packageName, distTags)\n\n return c.json(distTags, 201)\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n/**\n * Delete a package dist-tag\n */\nexport async function deletePackageDistTag(c: HonoContext) {\n try {\n const scope = c.req.param('scope')\n const pkg = c.req.param('pkg')\n const tag = c.req.param('tag')\n\n // Determine the package name based on route parameters\n let packageName: string | null = null\n if (scope && pkg) {\n // Scoped package: /-/package/:scope%2f:pkg/dist-tags/:tag\n packageName = decodePackageName(scope, pkg)\n } else if (pkg) {\n // Unscoped package: /-/package/:pkg/dist-tags/:tag\n packageName = decodeURIComponent(pkg)\n }\n\n if (!packageName) {\n return c.json({ error: 'Invalid package name' }, 400)\n }\n\n // Tag is always provided by the route parameter\n if (!tag) {\n return c.json({ error: 'Tag is required' }, 400)\n }\n\n if (tag === 'latest') {\n return c.json({ error: 'Cannot delete the \"latest\" tag' }, 400)\n }\n\n const packageData = await getDb(c).getPackage(packageName)\n\n if (!packageData) {\n return c.json({ error: 'Package not found' }, 404)\n }\n\n // Check if this package is proxied and should not allow dist-tag operations\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if ((packageData as any).source === 'proxy') {\n return c.json(\n {\n error:\n 'Cannot perform dist-tag operations on proxied packages',\n },\n 403,\n )\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const distTags = packageData.tags ?? {}\n\n const tagValue = distTags[tag]\n if (tagValue === undefined) {\n return c.json({ error: `Tag ${tag} not found` }, 404)\n }\n\n delete distTags[tag]\n\n await getDb(c).upsertPackage(packageName, distTags)\n\n return c.json(distTags)\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n/**\n * Handle general package routes (packument, manifest, tarball)\n */\nexport async function handlePackageRoute(c: HonoContext) {\n try {\n const path = c.req.path\n\n // Check if this is a tarball request\n if (path.includes('/-/')) {\n return await getPackageTarball(c)\n }\n\n // Check if this has a version (manifest request)\n const pathParts = path.split('/').filter(Boolean) // Remove empty strings\n\n // For upstream routes like /npm/lodash/1.0.0, we need to account for the upstream prefix\n const upstream = c.get('upstream')\n let packageStartIndex = 0\n\n if (upstream) {\n // Skip the upstream name in the path\n packageStartIndex = 1\n }\n\n // Check if we have a version segment after the package name\n let hasVersionSegment = false\n if (pathParts.length > packageStartIndex + 1) {\n const potentialVersion = pathParts[packageStartIndex + 1]\n // Handle scoped packages: @scope/package/version\n if (pathParts[packageStartIndex]?.startsWith('@')) {\n // For scoped packages, version is at index packageStartIndex + 2\n const versionSegment = pathParts[packageStartIndex + 2]\n hasVersionSegment =\n pathParts.length > packageStartIndex + 2 &&\n Boolean(versionSegment && !versionSegment.startsWith('-'))\n } else {\n // For regular packages, version is at index packageStartIndex + 1\n hasVersionSegment = Boolean(\n potentialVersion && !potentialVersion.startsWith('-'),\n )\n }\n }\n\n if (hasVersionSegment) {\n return await getPackageManifest(c)\n }\n\n // Otherwise it's a packument request\n return await getPackagePackument(c)\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n/**\n * Publish a package (create or update)\n */\nexport async function publishPackage(c: HonoContext) {\n try {\n const pkg = decodeURIComponent(c.req.param('pkg'))\n\n // Validate package name\n const validation = validate(pkg)\n if (!validation.validForNewPackages) {\n return c.json(\n {\n error: 'Invalid package name',\n reason:\n validation.errors?.join(', ') ||\n 'Package name is not valid',\n },\n 400,\n )\n }\n\n // Get package data from request body\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const packageData = await c.req.json()\n\n if (!packageData || typeof packageData !== 'object') {\n return c.json({ error: 'Invalid package data' }, 400)\n }\n\n // Extract version information\n\n const versions =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/no-unsafe-member-access\n (packageData.versions as Record<string, any>) || {}\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/no-unsafe-member-access\n const distTags = (packageData['dist-tags'] as Record<\n string,\n string\n >) || {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n latest: packageData.version as string,\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!packageData.version && !Object.keys(versions).length) {\n return c.json(\n { error: 'Package must have at least one version' },\n 400,\n )\n }\n\n // If this is a single version publish, structure it properly\n if (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n packageData.version &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n !versions[packageData.version as string]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const version = packageData.version as string\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n versions[version] = {\n ...packageData,\n name: pkg,\n version,\n dist: {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ...(packageData.dist as Record<string, any>),\n tarball:\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (packageData.dist?.tarball as string) ||\n `${c.req.url.split('/').slice(0, 3).join('/')}/${pkg}/-/${pkg.split('/').pop()}-${version}.tgz`,\n },\n }\n }\n\n // Store package metadata\n await getDb(c).upsertPackage(\n pkg,\n distTags,\n new Date().toISOString(),\n )\n\n // Store each version\n const versionPromises = Object.entries(versions).map(\n ([version, manifest]) => {\n const typedManifest = manifest as Record<string, any>\n return getDb(c).upsertVersion(\n `${pkg}@${version}`,\n typedManifest as PackageManifest,\n (typedManifest.publishedAt as string) ||\n new Date().toISOString(),\n )\n },\n )\n\n await Promise.all(versionPromises)\n\n return c.json({ success: true }, 201)\n } catch (error) {\n // TODO: Replace with proper logging system\n // eslint-disable-next-line no-console\n console.error('Package publish error:', error)\n return c.json({ error: 'Failed to publish package' }, 500)\n }\n}\n\nexport async function getPackagePackument(c: HonoContext) {\n try {\n // Try to get name from route parameters first (for direct routes)\n let name = c.req.param('pkg')\n const _scope = c.req.param('scope')\n\n // If no route parameter, extract from path (for upstream routes)\n if (!name) {\n const path = c.req.path\n const pathSegments = path.split('/').filter(Boolean)\n\n // For upstream routes like /npm/lodash, skip the upstream name\n const upstream = c.get('upstream')\n if (upstream && pathSegments.length > 1) {\n // Handle scoped packages: /npm/@scope/package\n if (\n pathSegments[1]?.startsWith('@') &&\n pathSegments.length > 2\n ) {\n name = `${pathSegments[1]}/${pathSegments[2]}`\n } else {\n name = pathSegments[1] || ''\n }\n } else if (pathSegments.length > 0) {\n // Handle direct package routes\n if (\n pathSegments[0]?.startsWith('@') &&\n pathSegments.length > 1\n ) {\n name = `${pathSegments[0]}/${pathSegments[1] || ''}`\n } else {\n name = pathSegments[0] || ''\n }\n }\n }\n\n // Get the versionRange query parameter\n const versionRange = c.req.query('versionRange')\n\n // Hono middleware logs packument request information\n\n // Name is always provided by the route parameter or extracted from path\n if (!name) {\n return c.json({ error: 'Package name is required' }, 400)\n }\n\n // Check if versionRange is a valid semver range\n const isValidRange =\n versionRange && semver.validRange(versionRange)\n const hasInvalidRange = versionRange && !isValidRange\n\n if (hasInvalidRange) {\n // Hono middleware logs invalid semver range\n return c.json(\n { error: `Invalid semver range: ${versionRange}` },\n 400,\n )\n }\n\n // Check if this is an explicit upstream route (like /npm/lodash)\n const explicitUpstream = c.get('upstream')\n\n // For explicit upstream routes, always use upstream logic\n // For other routes, check if package exists locally first\n let localPkg = null\n if (!explicitUpstream) {\n localPkg = await getDb(c).getPackage(name)\n }\n\n // Use racing cache strategy when:\n // 1. Explicit upstream is specified (like /npm/lodash)\n // 2. PROXY is enabled and package doesn't exist locally\n const upstream =\n explicitUpstream || (PROXY && !localPkg ? 'npm' : null)\n if (upstream) {\n // Hono middleware logs racing cache strategy information\n\n const fetchUpstreamFn = async () => {\n // Get the appropriate upstream configuration\n const upstreamConfig = getUpstreamConfig(upstream)\n if (!upstreamConfig) {\n throw new Error(`Unknown upstream: ${upstream}`)\n }\n\n const upstreamUrl = buildUpstreamUrl(upstreamConfig, name)\n\n const response = await fetch(upstreamUrl, {\n method: 'GET',\n headers: {\n 'User-Agent': 'vlt-registry/1.0.0',\n Accept: 'application/json',\n },\n })\n\n if (!response.ok) {\n if (response.status === 404) {\n throw new Error('Package not found')\n }\n throw new Error(`Upstream error: ${response.status}`)\n }\n\n const upstreamData: _UpstreamData = await response.json()\n\n // Prepare data for storage with consistent structure\n const packageData: PackageData = {\n name,\n 'dist-tags': upstreamData['dist-tags'] ?? {\n latest:\n Object.keys(upstreamData.versions ?? {}).pop() ?? '',\n },\n versions: {},\n time: {\n modified:\n upstreamData.time?.modified ?? new Date().toISOString(),\n },\n }\n\n // Store timing information for each version\n if (upstreamData.time) {\n Object.entries(upstreamData.time).forEach(\n ([version, time]) => {\n if (version !== 'modified' && version !== 'created') {\n packageData.time[version] = time\n }\n },\n )\n }\n\n // For fast response, only process essential versions synchronously\n if (upstreamData.versions) {\n const requestUrl = new globalThis.URL(c.req.url)\n const protocol = requestUrl.protocol.slice(0, -1) // Remove trailing ':'\n const host = c.req.header('host') ?? 'localhost:1337'\n const context = {\n protocol,\n host,\n upstream: upstream,\n }\n\n // Get essential versions (latest, plus any matching the version range if specified)\n const distTags = upstreamData['dist-tags'] ?? {}\n const latestVersion = distTags.latest\n const essentialVersions = new Set<string>()\n\n // Always include latest\n if (latestVersion) {\n essentialVersions.add(latestVersion)\n }\n\n // If version range specified, include only matching versions (up to 10 for performance)\n if (isValidRange) {\n const matchingVersions = Object.keys(\n upstreamData.versions,\n )\n .filter(v => semver.satisfies(v, versionRange))\n .slice(0, 10) // Limit to 10 versions for performance\n matchingVersions.forEach(v => essentialVersions.add(v))\n } else {\n // For packument requests without version range, include only the 5 most recent versions\n const sortedVersions = Object.keys(upstreamData.versions)\n .sort((a, b) => semver.rcompare(a, b))\n .slice(0, 5)\n sortedVersions.forEach(v => essentialVersions.add(v))\n }\n\n // Process only essential versions synchronously for fast response\n for (const version of essentialVersions) {\n const manifest = upstreamData.versions[version]\n if (manifest) {\n const slimmedManifest = slimManifest(\n manifest as PackageManifest,\n context,\n )\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (slimmedManifest) {\n packageData.versions[version] = slimmedManifest\n }\n }\n }\n\n // Process all other versions in background for complete caching\n c.executionCtx.waitUntil(\n (async () => {\n try {\n const allVersionStoragePromises: Promise<unknown>[] =\n []\n\n // Process all versions for complete database storage\n Object.entries(upstreamData.versions ?? {}).forEach(\n ([version, manifest]) => {\n const versionSpec = `${name}@${version}`\n const manifestForStorage = {\n name: name,\n version: version,\n ...slimManifest(\n manifest as PackageManifest,\n context,\n ),\n } as PackageManifest\n\n allVersionStoragePromises.push(\n getDb(c)\n .upsertCachedVersion(\n versionSpec,\n manifestForStorage,\n upstream,\n upstreamData.time?.[version] ??\n new Date().toISOString(),\n )\n .catch((_err: unknown) => {\n // Log error but don't fail the background task\n }),\n )\n },\n )\n\n // Store package metadata and all versions\n await Promise.all([\n ...allVersionStoragePromises,\n getDb(c)\n .upsertCachedPackage(\n name,\n packageData['dist-tags'],\n upstream,\n packageData.time.modified,\n )\n .catch((_err: unknown) => {\n // Log error but don't fail the background task\n }),\n ])\n } catch (_err) {\n // Log error but don't fail the request\n }\n })(),\n )\n }\n\n // Return just the packageData for caching - the cache function handles storage metadata separately\n return packageData\n }\n\n try {\n const result = await getCachedPackageWithRefresh(\n c,\n name,\n fetchUpstreamFn,\n {\n packumentTtlMinutes: 60, // Cache packuments for 1 hour\n staleWhileRevalidateMinutes: 240, // Allow stale data for 4 hours while refreshing\n upstream: upstream,\n },\n )\n\n if (result.fromCache && result.package) {\n // Hono middleware logs cached data usage\n\n // If we have cached data, still need to check if we need to filter by version range\n if (isValidRange) {\n const filteredVersions: Record<string, unknown> = {}\n Object.keys(result.package.versions).forEach(version => {\n if (semver.satisfies(version, versionRange)) {\n filteredVersions[version] =\n result.package?.versions[version]\n }\n })\n result.package.versions = filteredVersions\n }\n\n return c.json(result.package, 200)\n } else if (result.package) {\n // Hono middleware logs fresh upstream data usage\n return c.json(result.package, 200)\n } else {\n return c.json({ error: 'Package data not available' }, 500)\n }\n } catch (error) {\n // Return more specific error codes\n if ((error as Error).message.includes('Package not found')) {\n return c.json({ error: `Package '${name}' not found` }, 404)\n }\n\n return c.json({ error: 'Failed to fetch package data' }, 502)\n }\n }\n\n // Fallback to original logic when PROXY is disabled\n const pkg = await getDb(c).getPackage(name)\n const now = new Date()\n\n // Initialize the consistent packument response structure\n const packageData: PackageData = {\n name,\n 'dist-tags': { latest: '' },\n versions: {},\n time: {\n modified: now.toISOString(),\n },\n }\n\n if (pkg) {\n // Update dist-tags from the database\n packageData['dist-tags'] = pkg.tags\n\n // Update modified time\n if (pkg.lastUpdated) {\n packageData.time.modified = pkg.lastUpdated\n }\n }\n\n // Get all versions for this package\n try {\n const allVersions = await getDb(c).getVersionsByPackage(name)\n\n if (allVersions.length > 0) {\n // Hono middleware logs version count information\n\n // Add all versions to the packument, use slimmed manifests\n for (const versionData of allVersions) {\n // Extract version from spec (format: \"package@version\")\n const versionParts = versionData.spec.split('@')\n const version = versionParts[versionParts.length - 1]\n\n // Ensure version is defined before proceeding\n if (!version) {\n continue\n }\n\n // Skip versions that don't satisfy the version range if provided\n if (\n isValidRange &&\n !semver.satisfies(version, versionRange)\n ) {\n continue\n }\n\n // Use slimManifest to create a smaller response\n const slimmedManifest = slimManifest(\n versionData.manifest as PackageManifest,\n )\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (slimmedManifest) {\n packageData.versions[version] = slimmedManifest\n }\n packageData.time[version] =\n versionData.published_at ?? new Date().toISOString()\n }\n } else {\n // Hono middleware logs no versions found\n\n // Add at least the latest version as a fallback if it satisfies the range\n\n const latestVersion = packageData['dist-tags'].latest\n const satisfiesRange =\n !isValidRange ||\n (latestVersion ?\n semver.satisfies(latestVersion, versionRange)\n : false)\n if (latestVersion && satisfiesRange) {\n const versionData = await getDb(c).getVersion(\n `${name}@${latestVersion}`,\n )\n if (versionData) {\n const slimmedManifest = slimManifest(\n versionData.manifest as PackageManifest,\n )\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (slimmedManifest) {\n packageData.versions[latestVersion] = slimmedManifest\n }\n packageData.time[latestVersion] =\n versionData.published_at ?? new Date().toISOString()\n } else {\n // Create a mock version for testing\n const mockManifest: PackageManifest = {\n name: name,\n version: latestVersion,\n description: `Mock package for ${name}`,\n dist: {\n tarball: `${URL}/${name}/-/${name}-${latestVersion}.tgz`,\n },\n }\n packageData.versions[latestVersion] = mockManifest\n }\n }\n }\n } catch (_err) {\n // Hono middleware logs database error\n\n // Create a basic version if none are found\n const latestVersion = packageData['dist-tags'].latest\n if (latestVersion) {\n const mockManifest: PackageManifest = {\n name: name,\n version: latestVersion,\n description: `Package ${name}`,\n dist: {\n tarball: `${URL}/${name}/-/${name}-${latestVersion}.tgz`,\n },\n }\n packageData.versions[latestVersion] = mockManifest\n }\n }\n\n return c.json(packageData, 200)\n } catch (_err) {\n // Hono middleware logs error information\n return c.json({ error: 'Internal server error' }, 500)\n }\n}\n\n/**\n * Handle root package route - checks for local package existence and redirects to upstream if not found\n * This is used for the `/:pkg` route to handle package discovery\n */\nexport async function handleRootPackageRoute(c: HonoContext) {\n const pkg = decodeURIComponent(c.req.param('pkg'))\n\n // Skip if this looks like a static asset or internal route\n if (\n pkg.includes('.') ||\n pkg.startsWith('-') ||\n pkg.startsWith('_')\n ) {\n // For static assets, let other routes handle this\n return new Response(null, { status: 404 })\n }\n\n // Check if this package exists locally first\n try {\n const localPackage = await getDb(c).getPackage(pkg)\n if (localPackage) {\n // Package exists locally, handle it with the local package route handler\n return await handlePackageRoute(c)\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error checking local package:', error)\n // Continue to upstream redirect on database error\n }\n\n // Package doesn't exist locally, redirect to default upstream\n const { getDefaultUpstream } = await import('../utils/upstream.ts')\n const defaultUpstream = getDefaultUpstream()\n return c.redirect(`/${defaultUpstream}/${pkg}`, 302)\n}\n\n/**\n * Handle package publishing - validates authentication and delegates to publishPackage\n * This is used for the `PUT /:pkg` route to handle package publishing\n */\nexport async function handlePackagePublish(c: HonoContext) {\n const authHeader =\n c.req.header('authorization') || c.req.header('Authorization')\n\n // Check for authentication\n if (!authHeader) {\n return c.json(\n {\n error: 'Authentication required',\n reason:\n 'You must be logged in to publish packages. Run \"npm adduser\" first.',\n },\n 401,\n )\n }\n\n // Extract token and verify\n const token =\n authHeader.startsWith('Bearer ') ?\n authHeader.substring(7).trim()\n : null\n if (!token) {\n return c.json(\n {\n error: 'Invalid authentication format',\n reason:\n 'Authorization header must be in \"Bearer <token>\" format',\n },\n 401,\n )\n }\n\n // Verify token has package publishing permissions\n const { verifyToken } = await import('../utils/auth.ts')\n const isValid = await verifyToken(token, c)\n if (!isValid) {\n return c.json(\n {\n error: 'Invalid or insufficient permissions',\n reason: 'Token does not have permission to publish packages',\n },\n 403,\n )\n }\n\n // Delegate to publishPackage function\n return publishPackage(c)\n}\n\n/**\n * Handle package version route - checks for local package existence and redirects to upstream if not found\n * This is used for the `/:pkg/:version` route to handle package version requests\n */\nexport async function handlePackageVersion(c: HonoContext) {\n const pkg = decodeURIComponent(c.req.param('pkg'))\n const version = c.req.param('version')\n\n // Skip if this looks like a static asset or internal route\n if (\n pkg.includes('.') ||\n pkg.startsWith('-') ||\n pkg.startsWith('_')\n ) {\n return new Response(null, { status: 404 })\n }\n\n // Check if this package exists locally first\n try {\n const localPackage = await getDb(c).getPackage(pkg)\n if (localPackage) {\n // Package exists locally, handle it with the local package route handler\n return await handlePackageRoute(c)\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error checking local package version:', error)\n // Continue to upstream redirect on database error\n }\n\n // Package doesn't exist locally, redirect to default upstream\n const { getDefaultUpstream } = await import('../utils/upstream.ts')\n const defaultUpstream = getDefaultUpstream()\n return c.redirect(`/${defaultUpstream}/${pkg}/${version}`, 302)\n}\n\n/**\n * Handle package tarball route - checks for local package existence and redirects to upstream if not found\n * This is used for the `/:pkg/-/:tarball` route to handle package tarball requests\n */\nexport async function handlePackageTarball(c: HonoContext) {\n const pkg = decodeURIComponent(c.req.param('pkg'))\n\n // Skip if this looks like a static asset or internal route\n if (\n pkg.includes('.') ||\n pkg.startsWith('-') ||\n pkg.startsWith('_')\n ) {\n return new Response(null, { status: 404 })\n }\n\n // Check if this package exists locally first\n try {\n const localPackage = await getDb(c).getPackage(pkg)\n if (localPackage) {\n // Package exists locally, handle it with the local package route handler\n return await handlePackageRoute(c)\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error('Error checking local package tarball:', error)\n // Continue to upstream redirect on database error\n }\n\n // Package doesn't exist locally, redirect to default upstream\n const { getDefaultUpstream } = await import('../utils/upstream.ts')\n const defaultUpstream = getDefaultUpstream()\n const tarball = c.req.param('tarball')\n return c.redirect(`/${defaultUpstream}/${pkg}/-/${tarball}`, 302)\n}\n\n/**\n * Validates upstream and sets context, then delegates to handlePackageRoute\n * Common logic shared by all upstream routes\n */\nasync function validateUpstreamAndDelegate(\n c: HonoContext,\n): Promise<Response> {\n const upstream = c.req.param('upstream')\n\n // Import validation functions dynamically to avoid circular dependencies\n const { isValidUpstreamName, getUpstreamConfig } = await import(\n '../utils/upstream.ts'\n )\n\n // Validate upstream name\n if (!isValidUpstreamName(upstream)) {\n return c.json(\n { error: `Invalid or reserved upstream name: ${upstream}` },\n 400,\n )\n }\n\n // Check if upstream is configured\n const upstreamConfig = getUpstreamConfig(upstream)\n if (!upstreamConfig) {\n return c.json({ error: `Unknown upstream: ${upstream}` }, 404)\n }\n\n // Set upstream context and delegate to handlePackageRoute\n c.set('upstream', upstream)\n return await handlePackageRoute(c)\n}\n\n/**\n * Handle upstream package requests like /npm/lodash, /jsr/@std/fs\n * This is used for the `/:upstream/:pkg` route\n */\nexport async function handleUpstreamPackage(c: HonoContext) {\n return validateUpstreamAndDelegate(c)\n}\n\n/**\n * Handle unencoded scoped package tarball requests like /npm/@types/node/-/node-18.0.0.tgz\n * This is used for the `/:upstream/:scope/:pkg/-/:tarball` route (most specific - 5 segments)\n */\nexport async function handleUpstreamScopedTarball(c: HonoContext) {\n return validateUpstreamAndDelegate(c)\n}\n\n/**\n * Handle unencoded scoped package versions like /npm/@types/node/18.0.0\n * This is used for the `/:upstream/:scope/:pkg/:version` route\n */\nexport async function handleUpstreamScopedVersion(c: HonoContext) {\n return validateUpstreamAndDelegate(c)\n}\n\n/**\n * Handle URL-encoded scoped packages like /npm/@babel%2Fcore\n * This is used for the `/:upstream/:scope%2f:pkg` route\n */\nexport async function handleUpstreamEncodedScoped(c: HonoContext) {\n return validateUpstreamAndDelegate(c)\n}\n\n/**\n * Unified route handler for 3-segment paths: /npm/pkg/version OR /npm/@scope/package\n * This is used for the `/:upstream/:param2/:param3` route\n */\nexport async function handleUpstreamUnified(c: HonoContext) {\n return validateUpstreamAndDelegate(c)\n}\n\n/**\n * Handle upstream tarball requests like /npm/lodash/-/lodash-4.17.21.tgz\n * This is used for the `/:upstream/:pkg/-/:tarball` route\n */\nexport async function handleUpstreamTarball(c: HonoContext) {\n return validateUpstreamAndDelegate(c)\n}\n\n// Route definitions for OpenAPI documentation\n\n// Package manifest routes\nexport const getPackageRoute = createRoute({\n method: 'get',\n path: '/{pkg}',\n tags: ['Packages'],\n summary: 'Get Package Manifest',\n description: `Get the full package manifest (packument) for a package\n\\`\\`\\`bash\n$ npm view lodash\n\\`\\`\\``,\n request: {\n params: z.object({\n pkg: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n 'dist-tags': z.record(z.string()),\n versions: z.record(z.any()),\n }),\n },\n },\n description: 'Package manifest',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const getScopedPackageRoute = createRoute({\n method: 'get',\n path: '/{scope}/{pkg}',\n tags: ['Packages'],\n summary: 'Get Scoped Package Manifest',\n description: `Get the full package manifest for a scoped package\n\\`\\`\\`bash\n$ npm view @types/node\n\\`\\`\\``,\n request: {\n params: z.object({\n scope: z.string(),\n pkg: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n 'dist-tags': z.record(z.string()),\n versions: z.record(z.any()),\n }),\n },\n },\n description: 'Package manifest',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\n// Package version routes\nexport const getPackageVersionRoute = createRoute({\n method: 'get',\n path: '/{pkg}/{version}',\n tags: ['Packages'],\n summary: 'Get Package Version Manifest',\n description: `Get the manifest for a specific version of a package\n\\`\\`\\`bash\n$ npm view lodash@4.17.21\n\\`\\`\\``,\n request: {\n params: z.object({\n pkg: z.string(),\n version: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n version: z.string(),\n dist: z.object({\n tarball: z.string(),\n shasum: z.string(),\n }),\n }),\n },\n },\n description: 'Package version manifest',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package version not found',\n },\n },\n})\n\nexport const getScopedPackageVersionRoute = createRoute({\n method: 'get',\n path: '/{scope}/{pkg}/{version}',\n tags: ['Packages'],\n summary: 'Get Scoped Package Version Manifest',\n description: `Get the manifest for a specific version of a scoped package\n\\`\\`\\`bash\n$ npm view @types/node@18.0.0\n\\`\\`\\``,\n request: {\n params: z.object({\n scope: z.string(),\n pkg: z.string(),\n version: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n version: z.string(),\n dist: z.object({\n tarball: z.string(),\n shasum: z.string(),\n }),\n }),\n },\n },\n description: 'Package version manifest',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package version not found',\n },\n },\n})\n\n// Package tarball routes\nexport const getPackageTarballRoute = createRoute({\n method: 'get',\n path: '/{pkg}/-/{tarball}',\n tags: ['Packages'],\n summary: 'Download Package Tarball',\n description: `Download the tarball for a specific version of a package`,\n request: {\n params: z.object({\n pkg: z.string(),\n tarball: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/octet-stream': {\n schema: z.string().openapi({ format: 'binary' }),\n },\n },\n description: 'Package tarball',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Tarball not found',\n },\n },\n})\n\nexport const getScopedPackageTarballRoute = createRoute({\n method: 'get',\n path: '/{scope}/{pkg}/-/{tarball}',\n tags: ['Packages'],\n summary: 'Download Scoped Package Tarball',\n description: `Download the tarball for a specific version of a scoped package`,\n request: {\n params: z.object({\n scope: z.string(),\n pkg: z.string(),\n tarball: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/octet-stream': {\n schema: z.string().openapi({ format: 'binary' }),\n },\n },\n description: 'Package tarball',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Tarball not found',\n },\n },\n})\n\n// Package publishing route\nexport const publishPackageRoute = createRoute({\n method: 'put',\n path: '/{pkg}',\n tags: ['Packages'],\n summary: 'Publish Package',\n description: `Publish a new version of a package\n\\`\\`\\`bash\n$ npm publish\n\\`\\`\\``,\n request: {\n params: z.object({\n pkg: z.string(),\n }),\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n versions: z.record(z.any()),\n 'dist-tags': z.record(z.string()),\n _attachments: z.record(z.any()).optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n ok: z.boolean(),\n id: z.string(),\n rev: z.string(),\n }),\n },\n },\n description: 'Package published successfully',\n },\n 400: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Bad request',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n },\n})\n\n// Dist-tag route definitions\nexport const getPackageDistTagsRoute = createRoute({\n method: 'get',\n path: '/-/package/{pkg}/dist-tags',\n tags: ['Dist-Tags'],\n summary: 'Get Package Dist Tags',\n description: `Get all dist-tags for a package\n\\`\\`\\`bash\n$ npm dist-tag ls mypackage\n\\`\\`\\``,\n request: {\n params: z.object({\n pkg: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.record(z.string()),\n },\n },\n description: 'Package dist-tags',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const putPackageDistTagRoute = createRoute({\n method: 'put',\n path: '/-/package/{pkg}/dist-tags/{tag}',\n tags: ['Dist-Tags'],\n summary: 'Set Package Dist Tag',\n description: `Set or update a dist-tag for a package version\n\\`\\`\\`bash\n$ npm dist-tag add mypackage@1.0.0 beta\n\\`\\`\\``,\n request: {\n params: z.object({\n pkg: z.string(),\n tag: z.string(),\n }),\n body: {\n content: {\n 'text/plain': {\n schema: z.string(),\n },\n },\n },\n },\n responses: {\n 201: {\n content: {\n 'application/json': {\n schema: z.object({\n ok: z.boolean(),\n id: z.string(),\n rev: z.string(),\n }),\n },\n },\n description: 'Dist-tag set successfully',\n },\n 400: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Invalid version or tag',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Cannot modify dist-tags on proxied packages',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const deletePackageDistTagRoute = createRoute({\n method: 'delete',\n path: '/-/package/{pkg}/dist-tags/{tag}',\n tags: ['Dist-Tags'],\n summary: 'Delete Package Dist Tag',\n description: `Delete a dist-tag from a package\n\\`\\`\\`bash\n$ npm dist-tag rm mypackage beta\n\\`\\`\\``,\n request: {\n params: z.object({\n pkg: z.string(),\n tag: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n ok: z.boolean(),\n id: z.string(),\n rev: z.string(),\n }),\n },\n },\n description: 'Dist-tag deleted successfully',\n },\n 400: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Cannot delete latest tag or invalid request',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Cannot modify dist-tags on proxied packages',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package or tag not found',\n },\n },\n})\n\n// =============================================================================\n// Upstream Package Routes\n// =============================================================================\n\n// Upstream package manifest routes\nexport const getUpstreamPackageRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{pkg}',\n tags: ['Packages'],\n summary: 'Get upstream package manifest',\n description:\n 'Retrieve package manifest from upstream registry (e.g., npm, jsr)',\n request: {\n params: z.object({\n upstream: z.string().min(1).openapi({\n description: 'Upstream registry name (e.g., npm, jsr)',\n }),\n pkg: z.string().min(1).openapi({ description: 'Package name' }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z\n .object({\n name: z.string(),\n 'dist-tags': z.record(z.string()),\n versions: z.record(z.unknown()),\n time: z.record(z.string()),\n })\n .openapi({ description: 'Package manifest data' }),\n },\n },\n description: 'Package manifest retrieved successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found in upstream registry',\n },\n },\n})\n\nexport const getUpstreamScopedPackageRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{scope}/{pkg}',\n tags: ['Packages'],\n summary: 'Get upstream scoped package manifest',\n description:\n 'Retrieve scoped package manifest from upstream registry',\n request: {\n params: z.object({\n upstream: z\n .string()\n .min(1)\n .openapi({ description: 'Upstream registry name' }),\n scope: z\n .string()\n .min(1)\n .openapi({ description: 'Package scope (e.g., @types)' }),\n pkg: z.string().min(1).openapi({ description: 'Package name' }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n 'dist-tags': z.record(z.string()),\n versions: z.record(z.unknown()),\n time: z.record(z.string()),\n }),\n },\n },\n description: 'Scoped package manifest retrieved successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Scoped package not found in upstream registry',\n },\n },\n})\n\n// Upstream package version routes\nexport const getUpstreamPackageVersionRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{pkg}/{version}',\n tags: ['Packages'],\n summary: 'Get upstream package version manifest',\n description:\n 'Retrieve specific version manifest from upstream registry',\n request: {\n params: z.object({\n upstream: z\n .string()\n .min(1)\n .openapi({ description: 'Upstream registry name' }),\n pkg: z.string().min(1).openapi({ description: 'Package name' }),\n version: z\n .string()\n .min(1)\n .openapi({ description: 'Package version' }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n version: z.string(),\n dependencies: z.record(z.string()).optional(),\n peerDependencies: z.record(z.string()).optional(),\n optionalDependencies: z.record(z.string()).optional(),\n peerDependenciesMeta: z.record(z.string()).optional(),\n bin: z.record(z.string()).optional(),\n engines: z.record(z.string()).optional(),\n dist: z.object({\n tarball: z.string(),\n }),\n }),\n },\n },\n description: 'Package version manifest retrieved successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package version not found in upstream registry',\n },\n },\n})\n\nexport const getUpstreamScopedPackageVersionRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{scope}/{pkg}/{version}',\n tags: ['Packages'],\n summary: 'Get upstream scoped package version manifest',\n description:\n 'Retrieve specific version manifest for scoped package from upstream registry',\n request: {\n params: z.object({\n upstream: z\n .string()\n .min(1)\n .openapi({ description: 'Upstream registry name' }),\n scope: z\n .string()\n .min(1)\n .openapi({ description: 'Package scope' }),\n pkg: z.string().min(1).openapi({ description: 'Package name' }),\n version: z\n .string()\n .min(1)\n .openapi({ description: 'Package version' }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n version: z.string(),\n dependencies: z.record(z.string()).optional(),\n peerDependencies: z.record(z.string()).optional(),\n optionalDependencies: z.record(z.string()).optional(),\n peerDependenciesMeta: z.record(z.string()).optional(),\n bin: z.record(z.string()).optional(),\n engines: z.record(z.string()).optional(),\n dist: z.object({\n tarball: z.string(),\n }),\n }),\n },\n },\n description:\n 'Scoped package version manifest retrieved successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description:\n 'Scoped package version not found in upstream registry',\n },\n },\n})\n\n// Upstream package tarball routes\nexport const getUpstreamPackageTarballRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{pkg}/-/{tarball}',\n tags: ['Packages'],\n summary: 'Download upstream package tarball',\n description: 'Download package tarball from upstream registry',\n request: {\n params: z.object({\n upstream: z\n .string()\n .min(1)\n .openapi({ description: 'Upstream registry name' }),\n pkg: z.string().min(1).openapi({ description: 'Package name' }),\n tarball: z\n .string()\n .min(1)\n .openapi({ description: 'Tarball filename' }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/octet-stream': {\n schema: z.string().openapi({ format: 'binary' }),\n },\n },\n description: 'Package tarball downloaded successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package tarball not found in upstream registry',\n },\n },\n})\n\nexport const getUpstreamScopedPackageTarballRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{scope}/{pkg}/-/{tarball}',\n tags: ['Packages'],\n summary: 'Download upstream scoped package tarball',\n description:\n 'Download scoped package tarball from upstream registry',\n request: {\n params: z.object({\n upstream: z\n .string()\n .min(1)\n .openapi({ description: 'Upstream registry name' }),\n scope: z\n .string()\n .min(1)\n .openapi({ description: 'Package scope' }),\n pkg: z.string().min(1).openapi({ description: 'Package name' }),\n tarball: z\n .string()\n .min(1)\n .openapi({ description: 'Tarball filename' }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/octet-stream': {\n schema: z.string().openapi({ format: 'binary' }),\n },\n },\n description: 'Scoped package tarball downloaded successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description:\n 'Scoped package tarball not found in upstream registry',\n },\n },\n})\n\n// Special upstream routes for URL-encoded scoped packages\nexport const getUpstreamEncodedScopedPackageRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{scope%2f:pkg}',\n tags: ['Packages'],\n summary: 'Get upstream URL-encoded scoped package',\n description:\n 'Retrieve scoped package manifest using URL-encoded scope format',\n request: {\n params: z.object({\n upstream: z\n .string()\n .min(1)\n .openapi({ description: 'Upstream registry name' }),\n 'scope%2f:pkg': z.string().min(1).openapi({\n description:\n 'URL-encoded scoped package name (e.g., @babel%2Fcore)',\n }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n 'dist-tags': z.record(z.string()),\n versions: z.record(z.unknown()),\n time: z.record(z.string()),\n }),\n },\n },\n description:\n 'URL-encoded scoped package manifest retrieved successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description:\n 'URL-encoded scoped package not found in upstream registry',\n },\n },\n})\n\n// Unified upstream route (handles both scoped packages and versions)\nexport const getUpstreamUnifiedRoute = createRoute({\n method: 'get',\n path: '/{upstream}/{param2}/{param3}',\n tags: ['Packages'],\n summary: 'Unified upstream route handler',\n description:\n 'Handles both /upstream/@scope/package and /upstream/package/version patterns',\n request: {\n params: z.object({\n upstream: z\n .string()\n .min(1)\n .openapi({ description: 'Upstream registry name' }),\n param2: z\n .string()\n .min(1)\n .openapi({ description: 'Either package name or scope' }),\n param3: z\n .string()\n .min(1)\n .openapi({ description: 'Either version or package name' }),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.union([\n z.object({\n name: z.string(),\n 'dist-tags': z.record(z.string()),\n versions: z.record(z.unknown()),\n time: z.record(z.string()),\n }),\n z.object({\n name: z.string(),\n version: z.string(),\n dependencies: z.record(z.string()).optional(),\n peerDependencies: z.record(z.string()).optional(),\n optionalDependencies: z.record(z.string()).optional(),\n peerDependenciesMeta: z.record(z.string()).optional(),\n bin: z.record(z.string()).optional(),\n engines: z.record(z.string()).optional(),\n dist: z.object({\n tarball: z.string(),\n }),\n }),\n ]),\n },\n },\n description:\n 'Package manifest or version data retrieved successfully',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found in upstream registry',\n },\n },\n})\n", "/**\n * Cache utilities for efficient upstream package management\n *\n * Strategy:\n * - Return cached data immediately when available (even if stale)\n * - Queue background refresh if cache is stale\n * - Only fetch upstream synchronously if no cache exists\n * - Use Cloudflare Queues for reliable background processing\n */\n\nimport type {\n HonoContext,\n CacheOptions,\n CacheResult,\n CacheValidation,\n QueueMessage,\n PackageManifest,\n DatabaseOperations,\n ParsedPackage,\n} from '../../types.ts'\n\n// Helper function to get typed database from context\nfunction getDb(c: HonoContext): DatabaseOperations {\n return c.get('db')\n}\n\n/**\n * Stale-while-revalidate cache strategy for package data\n * Returns stale cache immediately and refreshes in background via queue\n */\nexport async function getCachedPackageWithRefresh<T>(\n c: HonoContext,\n packageName: string,\n fetchUpstreamFn: () => Promise<T>,\n options: CacheOptions = {},\n): Promise<CacheResult<T>> {\n const {\n packumentTtlMinutes = 5, // Short TTL for packuments (they change frequently)\n staleWhileRevalidateMinutes = 60, // Allow stale data for up to 1 hour while refreshing\n forceRefresh = false,\n upstream = 'npm',\n } = options\n\n // If forcing refresh, skip cache entirely\n if (forceRefresh) {\n const upstreamData = await fetchUpstreamFn()\n c.waitUntil?.(\n cachePackageData(c, packageName, upstreamData, options),\n )\n return {\n package: upstreamData,\n fromCache: false,\n }\n }\n\n // Get cached data first\n const cachedResult = await getCachedPackageData(\n c,\n packageName,\n packumentTtlMinutes,\n staleWhileRevalidateMinutes,\n )\n\n if (cachedResult.data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { valid, stale, data } = cachedResult\n\n if (valid) {\n // Cache is fresh - return immediately\n return {\n package: data as T,\n fromCache: true,\n stale: false,\n }\n } else if (stale) {\n // Cache is stale but within stale-while-revalidate window\n // Return stale data immediately and queue background refresh\n\n // Queue background refresh using Cloudflare Queues\n if (c.env.CACHE_REFRESH_QUEUE) {\n await queuePackageRefresh(\n c,\n packageName,\n upstream,\n fetchUpstreamFn,\n options,\n )\n } else {\n // Fallback to waitUntil if queue not available\n c.waitUntil?.(\n refreshPackageInBackground(\n c,\n packageName,\n fetchUpstreamFn,\n options,\n ),\n )\n }\n\n return {\n package: data as T,\n fromCache: true,\n stale: true,\n }\n }\n }\n\n // No cache data available - fetch upstream synchronously\n const upstreamData = await fetchUpstreamFn()\n\n // Cache the fresh data in background\n c.waitUntil?.(\n cachePackageData(c, packageName, upstreamData, options),\n )\n\n return {\n package: upstreamData,\n fromCache: false,\n stale: false,\n }\n}\n\n/**\n * Queue a package refresh job using Cloudflare Queues\n * Note: We can't serialize functions, so we'll need to recreate the fetch function in the queue consumer\n */\nasync function queuePackageRefresh<T>(\n c: HonoContext,\n packageName: string,\n upstream: string,\n _fetchUpstreamFn: () => Promise<T>,\n options: CacheOptions,\n): Promise<void> {\n try {\n const message: QueueMessage = {\n type: 'package_refresh',\n packageName,\n upstream,\n timestamp: Date.now(),\n options: {\n packumentTtlMinutes: options.packumentTtlMinutes || 5,\n upstream: options.upstream || 'npm',\n },\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n await c.env.CACHE_REFRESH_QUEUE.send(message)\n } catch (_error) {\n // Background queue failed, but don't block the response\n // Log to monitoring system instead of console\n }\n}\n\n/**\n * Background refresh function (fallback when queue is not available)\n */\nasync function refreshPackageInBackground<T>(\n c: HonoContext,\n packageName: string,\n fetchUpstreamFn: () => Promise<T>,\n options: CacheOptions,\n): Promise<void> {\n try {\n const upstreamData = await fetchUpstreamFn()\n await cachePackageData(c, packageName, upstreamData, options)\n } catch (_error) {\n // Background queue failed, but don't block the response\n // Log to monitoring system instead of console\n }\n}\n\n/**\n * Reconstruct a full packument from cached database data\n */\nasync function reconstructPackumentFromCache(\n c: HonoContext,\n packageName: string,\n cachedPackage: ParsedPackage,\n): Promise<any> {\n try {\n // Get all versions for this package\n const versions = await getDb(c).getVersionsByPackage(packageName)\n\n // Build the versions object\n\n const versionsObject: Record<string, any> = {}\n\n const timeObject: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n modified:\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (cachedPackage as any).lastUpdated ||\n new Date().toISOString(),\n }\n\n versions.forEach(versionData => {\n if (versionData.version) {\n versionsObject[versionData.version] = versionData.manifest\n if (versionData.published_at) {\n timeObject[versionData.version] = versionData.published_at\n }\n }\n })\n\n // Parse tags from the cached package\n const distTags =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n typeof (cachedPackage as any).tags === 'string' ?\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n (JSON.parse((cachedPackage as any).tags || '{}') as Record<\n string,\n string\n >)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n : ((cachedPackage as any).tags as Record<string, string>)\n\n // Construct the packument structure\n return {\n name: packageName,\n 'dist-tags': distTags,\n versions: versionsObject,\n time: timeObject,\n }\n } catch (error) {\n // TODO: Replace with proper logging system\n // eslint-disable-next-line no-console\n console.error(\n 'Failed to reconstruct packument from cache:',\n error,\n )\n return null\n }\n}\n\n/**\n * Enhanced cache data retrieval with stale-while-revalidate support\n */\nasync function getCachedPackageData(\n c: HonoContext,\n packageName: string,\n ttlMinutes: number,\n staleWhileRevalidateMinutes: number,\n): Promise<CacheValidation> {\n try {\n const cachedPackage = await getDb(c).getCachedPackage(packageName)\n\n if (\n !cachedPackage?.cachedAt ||\n cachedPackage.origin !== 'upstream'\n ) {\n return { valid: false, stale: false, data: null }\n }\n\n const cacheTime = new Date(cachedPackage.cachedAt).getTime()\n const now = new Date().getTime()\n const ttlMs = ttlMinutes * 60 * 1000\n const staleMs = staleWhileRevalidateMinutes * 60 * 1000\n\n const age = now - cacheTime\n const isValid = age < ttlMs\n const isStale = age < staleMs // Still usable even if stale\n\n // Reconstruct the full packument from cached data\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const reconstructedPackument =\n await reconstructPackumentFromCache(\n c,\n packageName,\n cachedPackage,\n )\n\n return {\n valid: isValid,\n stale: isStale && !isValid, // Stale means expired but within stale window\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n data: reconstructedPackument,\n }\n } catch (_error) {\n // Log error to monitoring system instead of console\n return { valid: false, stale: false, data: null }\n }\n}\n\n/**\n * Stale-while-revalidate cache strategy for version data\n * Returns stale cache immediately and refreshes in background via queue\n */\nexport async function getCachedVersionWithRefresh<T>(\n c: HonoContext,\n spec: string,\n fetchUpstreamFn: () => Promise<T>,\n options: CacheOptions = {},\n): Promise<CacheResult<T>> {\n const {\n manifestTtlMinutes = 525600, // 1 year TTL for manifests\n staleWhileRevalidateMinutes = 1051200, // Allow stale for 2 years (manifests rarely change)\n forceRefresh = false,\n upstream = 'npm',\n } = options\n\n // If forcing refresh, skip cache entirely\n if (forceRefresh) {\n const upstreamData = await fetchUpstreamFn()\n c.waitUntil?.(cacheVersionData(c, spec, upstreamData, options))\n return {\n version: upstreamData,\n fromCache: false,\n }\n }\n\n // Get cached data first\n const cachedResult = await getCachedVersionData(\n c,\n spec,\n manifestTtlMinutes,\n staleWhileRevalidateMinutes,\n )\n\n if (cachedResult.data) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { valid, stale, data } = cachedResult\n\n if (valid) {\n // Cache is fresh - return immediately\n return {\n version: data as T,\n fromCache: true,\n stale: false,\n }\n } else if (stale) {\n // Cache is stale but within stale-while-revalidate window\n // Return stale data immediately and queue background refresh\n\n // Queue background refresh using Cloudflare Queues\n if (c.env.CACHE_REFRESH_QUEUE) {\n await queueVersionRefresh(\n c,\n spec,\n upstream,\n fetchUpstreamFn,\n options,\n )\n } else {\n // Fallback to waitUntil if queue not available\n c.waitUntil?.(\n refreshVersionInBackground(\n c,\n spec,\n fetchUpstreamFn,\n options,\n ),\n )\n }\n\n return {\n version: data as T,\n fromCache: true,\n stale: true,\n }\n }\n }\n\n // No cache data available - fetch upstream synchronously\n const upstreamData = await fetchUpstreamFn()\n\n // Cache the fresh data in background\n c.waitUntil?.(cacheVersionData(c, spec, upstreamData, options))\n\n return {\n version: upstreamData,\n fromCache: false,\n stale: false,\n }\n}\n\n/**\n * Queue a version refresh job using Cloudflare Queues\n */\nasync function queueVersionRefresh<T>(\n c: HonoContext,\n spec: string,\n upstream: string,\n _fetchUpstreamFn: () => Promise<T>,\n options: CacheOptions,\n): Promise<void> {\n try {\n const message: QueueMessage = {\n type: 'version_refresh',\n spec,\n upstream,\n timestamp: Date.now(),\n options: {\n manifestTtlMinutes: options.manifestTtlMinutes || 525600,\n upstream: options.upstream || 'npm',\n },\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n await c.env.CACHE_REFRESH_QUEUE.send(message)\n } catch (_error) {\n // Background queue failed, but don't block the response\n // Log to monitoring system instead of console\n }\n}\n\n/**\n * Background refresh function for versions (fallback when queue is not available)\n */\nasync function refreshVersionInBackground<T>(\n c: HonoContext,\n spec: string,\n fetchUpstreamFn: () => Promise<T>,\n options: CacheOptions,\n): Promise<void> {\n try {\n const upstreamData = await fetchUpstreamFn()\n await cacheVersionData(c, spec, upstreamData, options)\n } catch (_error) {\n // Background queue failed, but don't block the response\n // Log to monitoring system instead of console\n }\n}\n\n/**\n * Enhanced cache data retrieval for versions with stale-while-revalidate support\n */\nasync function getCachedVersionData(\n c: HonoContext,\n spec: string,\n ttlMinutes: number,\n staleWhileRevalidateMinutes: number,\n): Promise<CacheValidation> {\n try {\n const cachedVersion = await getDb(c).getCachedVersion(spec)\n\n if (\n !cachedVersion?.cachedAt ||\n cachedVersion.origin !== 'upstream'\n ) {\n return { valid: false, stale: false, data: null }\n }\n\n const cacheTime = new Date(cachedVersion.cachedAt).getTime()\n const now = new Date().getTime()\n const ttlMs = ttlMinutes * 60 * 1000\n const staleMs = staleWhileRevalidateMinutes * 60 * 1000\n\n const age = now - cacheTime\n const isValid = age < ttlMs\n const isStale = age < staleMs // Still usable even if stale\n\n return {\n valid: isValid,\n stale: isStale && !isValid, // Stale means expired but within stale window\n data: cachedVersion,\n }\n } catch (_error) {\n // Log error to monitoring system instead of console\n return { valid: false, stale: false, data: null }\n }\n}\n\n/**\n * Cache package data in the database\n */\nasync function cachePackageData(\n c: HonoContext,\n packageName: string,\n packageData: unknown,\n options: CacheOptions,\n): Promise<void> {\n try {\n if (\n packageData &&\n typeof packageData === 'object' &&\n 'dist-tags' in packageData\n ) {\n const tags =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/no-unsafe-member-access\n ((packageData as any)['dist-tags'] as Record<\n string,\n string\n >) || {}\n await getDb(c).upsertCachedPackage(\n packageName,\n tags,\n options.upstream ?? 'npm',\n )\n }\n } catch (_error) {\n // Log error to monitoring system instead of console\n }\n}\n\n/**\n * Cache version data in the database\n */\nasync function cacheVersionData(\n c: HonoContext,\n spec: string,\n versionData: unknown,\n options: CacheOptions,\n): Promise<void> {\n try {\n if (versionData && typeof versionData === 'object') {\n const manifest = versionData as unknown as PackageManifest\n const publishedAt = new Date().toISOString()\n await getDb(c).upsertCachedVersion(\n spec,\n manifest,\n options.upstream ?? 'npm',\n publishedAt,\n )\n }\n } catch (_error) {\n // Log error to monitoring system instead of console\n }\n}\n\n/**\n * Generate storage path for tarball cache\n */\nexport function getTarballStoragePath(\n packageName: string,\n version: string,\n origin: 'local' | 'upstream' = 'local',\n upstream: string | null = null,\n): string {\n const sanitizedName = packageName.replace(/[@/]/g, '_')\n const sanitizedVersion = version.replace(/[^a-zA-Z0-9.-]/g, '_')\n\n if (origin === 'upstream' && upstream) {\n return `tarballs/${upstream}/${sanitizedName}/${sanitizedVersion}.tgz`\n }\n\n return `tarballs/local/${sanitizedName}/${sanitizedVersion}.tgz`\n}\n\n/**\n * Check if tarball is cached\n */\nexport async function isTarballCached(\n _c: HonoContext,\n packageName: string,\n version: string,\n origin: 'local' | 'upstream' = 'local',\n upstream: string | null = null,\n): Promise<boolean> {\n try {\n const _storagePath = getTarballStoragePath(\n packageName,\n version,\n origin,\n upstream,\n )\n // This would need to be implemented based on your storage solution\n // For now, return false as a placeholder\n return false\n } catch (_error) {\n // Log error to monitoring system instead of console\n return false\n }\n}\n\n/**\n * Cache tarball data\n */\nexport async function cacheTarball(\n _c: HonoContext,\n packageName: string,\n version: string,\n _tarballStream: ReadableStream,\n origin: 'local' | 'upstream' = 'local',\n upstream: string | null = null,\n): Promise<void> {\n try {\n const _storagePath = getTarballStoragePath(\n packageName,\n version,\n origin,\n upstream,\n )\n // This would need to be implemented based on your storage solution\n } catch (_error) {\n // Log error to monitoring system instead of console\n }\n}\n", "import { getAuthedUser } from '../utils/auth.ts'\nimport { createRoute, z } from '@hono/zod-openapi'\nimport type {\n HonoContext,\n AccessResponse,\n AuthUser,\n} from '../../types.ts'\n\ninterface PackageAccessEntry {\n name: string\n collaborators: Record<string, 'read-only' | 'read-write'>\n}\n\ninterface PackageListResponse {\n packages: PackageAccessEntry[]\n total: number\n}\n\n// Define interfaces for request bodies to ensure type safety\ninterface SetAccessRequestBody {\n collaborators?: Record<string, 'read-only' | 'read-write'>\n}\n\ninterface GrantAccessRequestBody {\n permission: 'read-only' | 'read-write'\n}\n\n/**\n * Lists all packages the authenticated user has access to\n */\nexport async function listPackagesAccess(c: HonoContext) {\n try {\n const user = await getAuthedUser({ c })\n if (!user?.uuid) {\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n // For now, return empty list - this would need to be implemented\n // based on your specific access control requirements\n const response: PackageListResponse = {\n packages: [],\n total: 0,\n }\n\n return c.json(response)\n } catch (_error) {\n // Hono middleware will log access errors\n return c.json({ error: 'Failed to list packages' }, 500)\n }\n}\n\n/**\n * Gets the access status for a specific package\n */\nexport async function getPackageAccessStatus(c: HonoContext) {\n try {\n const { scope, pkg } = c.req.param()\n const packageName = scope && pkg ? `${scope}/${pkg}` : scope\n\n if (!packageName) {\n return c.json({ error: 'Package name required' }, 400)\n }\n\n const user = await getAuthedUser({ c })\n if (!user?.uuid) {\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n // Check if user has access to this package\n const hasAccess = await checkPackageAccess(c, packageName, user)\n\n if (!hasAccess) {\n return c.json({ error: 'Access denied' }, 403)\n }\n\n // Return package access information\n const response: AccessResponse = {\n name: packageName,\n collaborators: {\n [user.uuid]: 'read-write', // Default the owner to read-write\n },\n }\n\n return c.json(response)\n } catch (_error) {\n // Hono middleware will log package access errors\n return c.json({ error: 'Failed to get package access' }, 500)\n }\n}\n\n/**\n * Sets the access status for a specific package\n */\nexport async function setPackageAccessStatus(c: HonoContext) {\n try {\n const { scope, pkg } = c.req.param()\n const packageName = scope && pkg ? `${scope}/${pkg}` : scope\n\n if (!packageName) {\n return c.json({ error: 'Package name required' }, 400)\n }\n\n const user = await getAuthedUser({ c })\n if (!user?.uuid) {\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n const body =\n (await c.req.json()) as unknown as SetAccessRequestBody\n\n // Check if user has admin access to this package\n const hasAdminAccess = await checkPackageAdminAccess(\n c,\n packageName,\n user,\n )\n\n if (!hasAdminAccess) {\n return c.json({ error: 'Admin access required' }, 403)\n }\n\n // Update package access (this would need to be implemented in your database)\n // For now, just return the requested access\n const response: AccessResponse = {\n name: packageName,\n collaborators: body.collaborators ?? {},\n }\n\n return c.json(response)\n } catch (_error) {\n // Hono middleware will log package access setting errors\n return c.json({ error: 'Failed to set package access' }, 500)\n }\n}\n\n/**\n * Grants access to a user for a specific package\n */\nexport async function grantPackageAccess(c: HonoContext) {\n try {\n const { scope, pkg, username } = c.req.param()\n const packageName = scope && pkg ? `${scope}/${pkg}` : scope\n\n if (!packageName || !username) {\n return c.json(\n { error: 'Package name and username required' },\n 400,\n )\n }\n\n const user = await getAuthedUser({ c })\n if (!user?.uuid) {\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n const body =\n (await c.req.json()) as unknown as GrantAccessRequestBody\n\n // Check if user has admin access to this package\n const hasAdminAccess = await checkPackageAdminAccess(\n c,\n packageName,\n user,\n )\n\n if (!hasAdminAccess) {\n return c.json({ error: 'Admin access required' }, 403)\n }\n\n // Grant access (this would need to be implemented in your database)\n // For now, just return success\n const response: AccessResponse = {\n name: packageName,\n collaborators: {\n [user.uuid]: 'read-write',\n [username]: body.permission,\n },\n }\n\n return c.json(response)\n } catch (_error) {\n // Hono middleware will log package access granting errors\n return c.json({ error: 'Failed to grant package access' }, 500)\n }\n}\n\n/**\n * Revokes access from a user for a specific package\n */\nexport async function revokePackageAccess(c: HonoContext) {\n try {\n const { scope, pkg, username } = c.req.param()\n const packageName = scope && pkg ? `${scope}/${pkg}` : scope\n\n if (!packageName || !username) {\n return c.json(\n { error: 'Package name and username required' },\n 400,\n )\n }\n\n const user = await getAuthedUser({ c })\n if (!user?.uuid) {\n return c.json({ error: 'Authentication required' }, 401)\n }\n\n // Check if user has admin access to this package\n const hasAdminAccess = await checkPackageAdminAccess(\n c,\n packageName,\n user,\n )\n\n if (!hasAdminAccess) {\n return c.json({ error: 'Admin access required' }, 403)\n }\n\n // Prevent users from revoking their own access\n if (username === user.uuid) {\n return c.json({ error: 'Cannot revoke your own access' }, 400)\n }\n\n // Revoke access (this would need to be implemented in your database)\n // For now, just return success\n const response: AccessResponse = {\n name: packageName,\n collaborators: {\n [user.uuid]: 'read-write',\n // username removed from collaborators\n },\n }\n\n return c.json(response)\n } catch (_error) {\n // Hono middleware will log package access revocation errors\n return c.json({ error: 'Failed to revoke package access' }, 500)\n }\n}\n\n/**\n * Helper function to check if user has access to a package\n */\nasync function checkPackageAccess(\n _c: HonoContext,\n packageName: string,\n user: AuthUser,\n): Promise<boolean> {\n if (!user.scope || !user.uuid) {\n return false\n }\n\n // Check if user has global access or specific package access\n for (const scope of user.scope) {\n if (scope.types.pkg) {\n // Check for global access\n if (scope.values.includes('*') && scope.types.pkg.read) {\n return true\n }\n\n // Check for specific package access\n if (\n scope.values.includes(packageName) &&\n scope.types.pkg.read\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\n/**\n * Helper function to check if user has admin access to a package\n */\nasync function checkPackageAdminAccess(\n _c: HonoContext,\n packageName: string,\n user: AuthUser,\n): Promise<boolean> {\n if (!user.scope || !user.uuid) {\n return false\n }\n\n // Check if user has global write access or specific package write access\n for (const scope of user.scope) {\n if (scope.types.pkg) {\n // Check for global write access\n if (scope.values.includes('*') && scope.types.pkg.write) {\n return true\n }\n\n // Check for specific package write access\n if (\n scope.values.includes(packageName) &&\n scope.types.pkg.write\n ) {\n return true\n }\n }\n }\n\n return false\n}\n\n// Route definitions for OpenAPI documentation\nexport const getPackageAccessRoute = createRoute({\n method: 'get',\n path: '/-/package/{pkg}/access',\n tags: ['Access Control'],\n summary: 'Get Package Access',\n description: `Get access control information for a package`,\n request: {\n params: z.object({\n pkg: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Package access information',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const setPackageAccessRoute = createRoute({\n method: 'post',\n path: '/-/package/{pkg}/access',\n tags: ['Access Control'],\n summary: 'Set Package Access',\n description: `Set access control information for a package`,\n request: {\n params: z.object({\n pkg: z.string(),\n }),\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n collaborators: z\n .record(z.enum(['read-only', 'read-write']))\n .optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Package access updated successfully',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const getScopedPackageAccessRoute = createRoute({\n method: 'get',\n path: '/-/package/{scope}%2f{pkg}/access',\n tags: ['Access Control'],\n summary: 'Get Scoped Package Access',\n description: `Get access control information for a scoped package`,\n request: {\n params: z.object({\n scope: z.string(),\n pkg: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Package access information',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const setScopedPackageAccessRoute = createRoute({\n method: 'post',\n path: '/-/package/{scope}%2f{pkg}/access',\n tags: ['Access Control'],\n summary: 'Set Scoped Package Access',\n description: `Set access control information for a scoped package`,\n request: {\n params: z.object({\n scope: z.string(),\n pkg: z.string(),\n }),\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n collaborators: z\n .record(z.enum(['read-only', 'read-write']))\n .optional(),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Package access updated successfully',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const listPackagesAccessRoute = createRoute({\n method: 'get',\n path: '/-/package/list',\n tags: ['Access Control'],\n summary: 'List Package Access',\n description: `List all packages the authenticated user has access to`,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n packages: z.array(\n z.object({\n name: z.string(),\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n ),\n total: z.number(),\n }),\n },\n },\n description: 'List of packages with access information',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n },\n})\n\nexport const grantPackageAccessRoute = createRoute({\n method: 'put',\n path: '/-/package/{pkg}/collaborators/{username}',\n tags: ['Access Control'],\n summary: 'Grant Package Access',\n description: `Grant access to a package for a specific user`,\n request: {\n params: z.object({\n pkg: z.string(),\n username: z.string(),\n }),\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n permission: z.enum(['read-only', 'read-write']),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Access granted successfully',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const revokePackageAccessRoute = createRoute({\n method: 'delete',\n path: '/-/package/{pkg}/collaborators/{username}',\n tags: ['Access Control'],\n summary: 'Revoke Package Access',\n description: `Revoke access to a package for a specific user`,\n request: {\n params: z.object({\n pkg: z.string(),\n username: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Access revoked successfully',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const grantScopedPackageAccessRoute = createRoute({\n method: 'put',\n path: '/-/package/{scope}%2f{pkg}/collaborators/{username}',\n tags: ['Access Control'],\n summary: 'Grant Scoped Package Access',\n description: `Grant access to a scoped package for a specific user`,\n request: {\n params: z.object({\n scope: z.string(),\n pkg: z.string(),\n username: z.string(),\n }),\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n permission: z.enum(['read-only', 'read-write']),\n }),\n },\n },\n },\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Access granted successfully',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n\nexport const revokeScopedPackageAccessRoute = createRoute({\n method: 'delete',\n path: '/-/package/{scope}%2f{pkg}/collaborators/{username}',\n tags: ['Access Control'],\n summary: 'Revoke Scoped Package Access',\n description: `Revoke access to a scoped package for a specific user`,\n request: {\n params: z.object({\n scope: z.string(),\n pkg: z.string(),\n username: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n collaborators: z.record(\n z.enum(['read-only', 'read-write']),\n ),\n }),\n },\n },\n description: 'Access revoked successfully',\n },\n 401: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Authentication required',\n },\n 403: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Insufficient permissions',\n },\n 404: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Package not found',\n },\n },\n})\n", "import type { HonoContext } from '../../types.ts'\nimport { createRoute, z } from '@hono/zod-openapi'\n\n/**\n * Search for packages by text query\n */\nexport async function searchPackages(c: HonoContext) {\n try {\n const text = c.req.query('text')\n\n if (!text) {\n return c.json(\n {\n error: 'Missing required parameter \"text\"',\n },\n 400,\n )\n }\n\n // Use the existing database search function\n const results = await c.get('db').searchPackages(text)\n\n return c.json(results)\n } catch (error) {\n // TODO: Replace with proper logging system\n // eslint-disable-next-line no-console\n console.error('Search error:', error)\n return c.json(\n {\n error: 'Internal server error',\n },\n 500,\n )\n }\n}\n\n// Route definition for OpenAPI documentation\nexport const searchPackagesRoute = createRoute({\n method: 'get',\n path: '/-/search',\n tags: ['Search'],\n summary: 'Search Packages',\n description: `Search for packages by text query\n\\`\\`\\`bash\n$ npm search react\n\\`\\`\\``,\n request: {\n query: z.object({\n text: z.string().describe('Search query string'),\n size: z\n .string()\n .optional()\n .describe('Number of results to return (default: 20)'),\n from: z\n .string()\n .optional()\n .describe('Offset for pagination (default: 0)'),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n objects: z.array(\n z.object({\n package: z.object({\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n date: z.string().optional(),\n links: z\n .object({\n npm: z.string().optional(),\n homepage: z.string().optional(),\n repository: z.string().optional(),\n bugs: z.string().optional(),\n })\n .optional(),\n author: z\n .object({\n name: z.string(),\n email: z.string().optional(),\n })\n .optional(),\n publisher: z\n .object({\n username: z.string(),\n email: z.string().optional(),\n })\n .optional(),\n maintainers: z\n .array(\n z.object({\n username: z.string(),\n email: z.string().optional(),\n }),\n )\n .optional(),\n }),\n score: z.object({\n final: z.number(),\n detail: z.object({\n quality: z.number(),\n popularity: z.number(),\n maintenance: z.number(),\n }),\n }),\n searchScore: z.number(),\n }),\n ),\n total: z.number(),\n time: z.string(),\n }),\n },\n },\n description: 'Search results',\n },\n 400: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Bad request - missing text parameter',\n },\n },\n})\n", "import { createRoute, z } from '@hono/zod-openapi'\nimport type { Context } from 'hono'\nimport type { Environment } from '../../types.ts'\n\n// Route definitions for miscellaneous endpoints\n\nexport const auditRoute = createRoute({\n method: 'post',\n path: '/-/npm/audit',\n tags: ['Security'],\n summary: 'Security Audit (Not Implemented)',\n description: `\u26A0\uFE0F **NOT IMPLEMENTED** - This endpoint is planned for future implementation.\n\nCurrently returns a placeholder response indicating the feature is not available.\n \nFor actual security auditing, use:\n- \\`npm audit\\` with the official npm registry\n- Third-party security scanning tools\n- Socket.dev integration (planned for v1.x)\n\n\\`\\`\\`bash\n$ npm audit # Will hit this endpoint but get \"not implemented\" response\n\\`\\`\\``,\n request: {\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string().optional(),\n version: z.string().optional(),\n requires: z.record(z.string()).optional(),\n dependencies: z.record(z.any()).optional(),\n }),\n },\n },\n },\n },\n responses: {\n 501: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n message: z.string(),\n feature: z.literal('security_audit'),\n status: z.literal('not_implemented'),\n }),\n },\n },\n description:\n 'Feature not implemented - security auditing is planned for future release',\n },\n 400: {\n content: {\n 'application/json': {\n schema: z.object({\n error: z.string(),\n }),\n },\n },\n description: 'Invalid request format',\n },\n },\n})\n\nexport const auditQuickRoute = createRoute({\n method: 'post',\n path: '/-/npm/v1/security/audits/quick',\n tags: ['NPM Compatibility'],\n summary: 'Quick Security Audit',\n description: `\u26A0\uFE0F **REDIRECTS TO /-/npm/audit** - This endpoint redirects to the main audit endpoint with a 308 status.\n\nThe main audit endpoint is currently not implemented and returns a \"not implemented\" response.`,\n request: {\n body: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string().optional(),\n version: z.string().optional(),\n requires: z.record(z.string()).optional(),\n dependencies: z.record(z.any()).optional(),\n }),\n },\n },\n },\n },\n responses: {\n 308: {\n description:\n 'Permanent redirect to /-/npm/audit (which returns 501 Not Implemented)',\n },\n },\n})\n\nexport const advisoriesBulkRoute = createRoute({\n method: 'post',\n path: '/-/npm/v1/security/advisories/bulk',\n tags: ['NPM Compatibility'],\n summary: 'Bulk Security Advisories',\n description: `\u26A0\uFE0F **REDIRECTS TO /-/npm/audit** - This endpoint redirects to the main audit endpoint with a 308 status.\n\nThe main audit endpoint is currently not implemented and returns a \"not implemented\" response.`,\n request: {\n body: {\n content: {\n 'application/json': {\n schema: z.record(z.array(z.string())),\n },\n },\n },\n },\n responses: {\n 308: {\n description:\n 'Permanent redirect to /-/npm/audit (which returns 501 Not Implemented)',\n },\n },\n})\n\n// Dashboard/GUI routes\nexport const dashboardDataRoute = createRoute({\n method: 'get',\n path: '/dashboard.json',\n tags: ['Dashboard'],\n summary: 'Dashboard Data',\n description: `Get dashboard configuration data for the VSR web interface`,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n registry: z.object({\n url: z.string(),\n name: z.string(),\n }),\n features: z.object({\n search: z.boolean(),\n publish: z.boolean(),\n access: z.boolean(),\n }),\n }),\n },\n },\n description: 'Dashboard configuration',\n },\n },\n})\n\nexport const appDataRoute = createRoute({\n method: 'get',\n path: '/app-data.json',\n tags: ['Dashboard'],\n summary: 'App Data',\n description: `Get application data for the VSR web interface`,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n packages: z.array(\n z.object({\n name: z.string(),\n version: z.string(),\n description: z.string().optional(),\n }),\n ),\n stats: z.object({\n totalPackages: z.number(),\n totalDownloads: z.number(),\n }),\n }),\n },\n },\n description: 'Application data',\n },\n },\n})\n\n// npm v1 API compatibility redirects\nexport const searchRedirectRoute = createRoute({\n method: 'get',\n path: '/-/v1/search',\n tags: ['NPM Compatibility'],\n summary: 'Search',\n description: `Redirect to current search endpoint for npm v1 compatibility`,\n request: {},\n responses: {\n 308: {\n description: 'Permanent redirect to /-/search',\n },\n },\n})\n\nexport const userRedirectRoute = createRoute({\n method: 'get',\n path: '/-/npm/v1/user',\n tags: ['NPM Compatibility'],\n summary: 'User Profile',\n description: `Redirect to current user endpoint for npm v1 compatibility`,\n request: {},\n responses: {\n 308: {\n description: 'Permanent redirect to /-/user',\n },\n },\n})\n\nexport const tokensRedirectRoute = createRoute({\n method: 'get',\n path: '/-/npm/v1/tokens',\n tags: ['NPM Compatibility'],\n summary: 'Get Tokens',\n description: `Redirect to current tokens endpoint for npm v1 compatibility`,\n request: {},\n responses: {\n 308: {\n description: 'Permanent redirect to /-/tokens',\n },\n },\n})\n\nexport const createTokenRedirectRoute = createRoute({\n method: 'post',\n path: '/-/npm/v1/tokens',\n tags: ['NPM Compatibility'],\n summary: 'Create Token',\n description: `Redirect to current create token endpoint for npm v1 compatibility`,\n request: {},\n responses: {\n 308: {\n description: 'Permanent redirect to /-/tokens',\n },\n },\n})\n\nexport const updateTokenRedirectRoute = createRoute({\n method: 'put',\n path: '/-/npm/v1/tokens',\n tags: ['NPM Compatibility'],\n summary: 'Update Token',\n description: `Redirect to current update token endpoint for npm v1 compatibility`,\n request: {},\n responses: {\n 308: {\n description: 'Permanent redirect to /-/tokens',\n },\n },\n})\n\nexport const deleteTokenRedirectRoute = createRoute({\n method: 'delete',\n path: '/-/npm/v1/tokens/token/{token}',\n tags: ['NPM Compatibility'],\n summary: 'Delete Token',\n description: `Redirect to current delete token endpoint for npm v1 compatibility`,\n request: {\n params: z.object({\n token: z.string(),\n }),\n },\n responses: {\n 308: {\n description: 'Permanent redirect to /-/tokens/:token',\n },\n },\n})\n\n// Static asset routes (for documentation purposes)\nexport const staticAssetsRoute = createRoute({\n method: 'get',\n path: '/public/{path}',\n tags: ['Static Assets'],\n summary: 'Static Assets',\n description: `Serve static assets (CSS, JS, images, etc.)`,\n request: {\n params: z.object({\n path: z.string(),\n }),\n },\n responses: {\n 200: {\n content: {\n 'application/octet-stream': {\n schema: z.string().openapi({ format: 'binary' }),\n },\n },\n description: 'Static file content',\n },\n 404: {\n description: 'File not found',\n },\n },\n})\n\nexport const faviconRoute = createRoute({\n method: 'get',\n path: '/favicon.ico',\n tags: ['Static Assets'],\n summary: 'Favicon',\n description: `Serve the favicon for the registry`,\n request: {},\n responses: {\n 200: {\n content: {\n 'image/x-icon': {\n schema: z.string().openapi({ format: 'binary' }),\n },\n },\n description: 'Favicon file',\n },\n },\n})\n\nexport const robotsRoute = createRoute({\n method: 'get',\n path: '/robots.txt',\n tags: ['Static Assets'],\n summary: 'Robots.txt',\n description: `Serve robots.txt for web crawlers`,\n request: {},\n responses: {\n 200: {\n content: {\n 'text/plain': {\n schema: z.string(),\n },\n },\n description: 'Robots.txt content',\n },\n },\n})\n\nexport const webManifestRoute = createRoute({\n method: 'get',\n path: '/manifest.json',\n tags: ['Static Assets'],\n summary: 'Web App Manifest',\n description: `Serve web app manifest for PWA support`,\n request: {},\n responses: {\n 200: {\n content: {\n 'application/json': {\n schema: z.object({\n name: z.string(),\n short_name: z.string(),\n description: z.string(),\n start_url: z.string(),\n display: z.string(),\n theme_color: z.string(),\n background_color: z.string(),\n icons: z.array(\n z.object({\n src: z.string(),\n sizes: z.string(),\n type: z.string(),\n }),\n ),\n }),\n },\n },\n description: 'Web app manifest',\n },\n },\n})\n\n// Dashboard route handlers\nexport async function handleDashboardData(\n c: Context,\n): Promise<Response> {\n const env = c.env as Environment\n\n // If daemon is enabled, proxy to daemon service\n\n if (env.DAEMON_ENABLED) {\n try {\n const DAEMON_URL = 'http://localhost:3000'\n const data = await fetch(`${DAEMON_URL}/dashboard.json`)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const jsonData = (await data.json()) as Record<string, any>\n return c.json(jsonData)\n } catch (_error) {\n // Fall through to standalone mode if daemon is unreachable\n }\n }\n\n // Standalone mode: provide dashboard data directly\n const dashboardData = {\n registry: {\n url: env.URL || 'http://localhost:1337',\n name: 'vlt serverless registry',\n },\n features: {\n search: true,\n publish: true,\n access: true,\n },\n }\n\n return c.json(dashboardData)\n}\n\nexport async function handleAppData(c: Context): Promise<Response> {\n const env = c.env as Environment\n\n // If daemon is enabled, proxy to daemon service\n\n if (env.DAEMON_ENABLED) {\n try {\n const DAEMON_URL = 'http://localhost:3000'\n const data = await fetch(`${DAEMON_URL}/app-data.json`)\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const jsonData = (await data.json()) as Record<string, any>\n return c.json(jsonData)\n } catch (_error) {\n // Fall through to standalone mode if daemon is unreachable\n }\n }\n\n // Standalone mode: provide app data directly from the registry database\n try {\n // For now, return empty data structure - in a full implementation,\n // we would query the database for actual package data\n const packages: {\n name: string\n version: string\n description?: string\n }[] = []\n\n const appData = {\n packages,\n stats: {\n totalPackages: packages.length,\n totalDownloads: 0, // This would need to be tracked separately\n },\n }\n\n return c.json(appData)\n } catch (_error) {\n // If database is not available, return empty data\n const appData = {\n packages: [],\n stats: {\n totalPackages: 0,\n totalDownloads: 0,\n },\n }\n\n return c.json(appData)\n }\n}\n\n// Security audit handler (not implemented)\nexport async function handleSecurityAudit(\n c: Context,\n): Promise<Response> {\n return c.json(\n {\n error: 'Security audit not implemented',\n message: 'This feature is not yet available in VSR',\n status: 'not_implemented',\n feature: 'security_audit',\n },\n 501,\n )\n}\n", "/**\n * Simple tracing utility for debugging and monitoring\n */\n\n/**\n * Logs a trace message with timestamp\n * @param {string} _message - The message to log\n * @param {any} _data - Optional additional data to log\n */\nexport function trace(_message: string, _data?: any): void {\n // Tracing disabled for production\n}\n\n/**\n * Measures execution time of a function\n * @param {string} name - Name of the operation being measured\n * @param {() => Promise<any>} fn - Function to measure\n * @returns {Promise<any>} Result of the function\n */\nexport async function measureTime<T>(\n name: string,\n fn: () => Promise<T>,\n): Promise<T> {\n const start = performance.now()\n try {\n const result = await fn()\n const duration = performance.now() - start\n trace(`${name} completed in ${duration.toFixed(2)}ms`)\n return result\n } catch (error) {\n const duration = performance.now() - start\n trace(`${name} failed after ${duration.toFixed(2)}ms`, error)\n throw error\n }\n}\n\n/**\n * Session monitoring middleware for tracking requests\n * @param {any} _c - The Hono context\n * @param {() => Promise<void>} next - The next middleware function\n * @returns {Promise<void>} Result of next middleware\n */\nexport function sessionMonitor(\n _c: any,\n next: () => Promise<void>,\n): Promise<void> {\n // Session monitoring is currently disabled\n // This middleware can be extended to add session tracking functionality\n trace('Session monitoring middleware called')\n\n return next()\n}\n", "import type { HonoContext } from '../../types.ts'\n\n/**\n * Handles static asset serving\n */\nexport const handleStaticAssets = async (c: HonoContext) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n const response = (await c.env.ASSETS.fetch(c.req.raw)) as Response\n\n // If the ASSETS binding returns a 404, return a proper 404 response\n // with mutable headers to avoid the secure headers middleware conflict\n if (response.status === 404) {\n return await c.notFound()\n }\n\n // For other non-200 responses, create a new response to avoid header conflicts\n if (!response.ok) {\n return c.text('Asset not available', response.status as any)\n }\n\n return response\n } catch (error) {\n // TODO: Replace with proper logging system\n // eslint-disable-next-line no-console\n console.error('Error serving static asset:', error)\n return c.text('Internal Server Error', 500)\n }\n}\n\n/**\n * Handles favicon requests\n */\nexport const handleFavicon = async (c: HonoContext) => {\n // Redirect to the correct favicon path\n return c.redirect('/public/images/favicon/favicon.ico', 301)\n}\n\n/**\n * Handles robots.txt requests\n */\nexport function handleRobots(c: HonoContext) {\n return c.text(`User-agent: *\nAllow: /\n\nSitemap: ${c.req.url.replace(/\\/robots\\.txt$/, '/sitemap.xml')}`)\n}\n\n/**\n * Handles manifest.json requests for PWA\n */\nexport function handleManifest(c: HonoContext) {\n return c.json({\n name: 'VLT Serverless Registry',\n short_name: 'VSR',\n description: 'A serverless npm registry',\n start_url: '/',\n display: 'standalone',\n background_color: '#ffffff',\n theme_color: '#000000',\n icons: [\n {\n src: '/public/images/favicon/web-app-manifest-192x192.png',\n sizes: '192x192',\n type: 'image/png',\n },\n {\n src: '/public/images/favicon/web-app-manifest-512x512.png',\n sizes: '512x512',\n type: 'image/png',\n },\n ],\n })\n}\n", "import type { QueueBatch, Environment } from '../../types.ts'\nimport { createDatabaseOperations } from '../db/client.ts'\nimport {\n getUpstreamConfig,\n buildUpstreamUrl,\n} from '../utils/upstream.ts'\n\n/**\n * Queue handler for background cache refresh jobs\n *\n * Processes queue messages to refresh package and version cache data\n * from upstream registries. This runs in the background to keep\n * cached data fresh without blocking user requests.\n */\nexport async function queue(batch: QueueBatch, env: Environment) {\n if (!env.DB) {\n throw new Error('Database not available')\n }\n const db = createDatabaseOperations(env.DB)\n\n for (const message of batch.messages) {\n try {\n const {\n type,\n packageName,\n spec,\n upstream,\n options: _options,\n } = message.body\n\n if (type === 'package_refresh' && packageName) {\n // Handle package refresh - refetch from upstream and cache\n const upstreamConfig = getUpstreamConfig(upstream)\n if (upstreamConfig) {\n const upstreamUrl = buildUpstreamUrl(\n upstreamConfig,\n packageName,\n )\n const response = await fetch(upstreamUrl, {\n headers: { Accept: 'application/json' },\n })\n\n if (response.ok) {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n const upstreamData = (await response.json()) as Record<\n string,\n any\n >\n\n // Cache the package metadata\n if (upstreamData['dist-tags']) {\n await db.upsertCachedPackage(\n packageName,\n upstreamData['dist-tags'] as Record<string, string>,\n upstream,\n new Date().toISOString(),\n )\n }\n\n // Cache all versions\n if (upstreamData.versions) {\n const versionPromises = Object.entries(\n upstreamData.versions as Record<string, any>,\n ).map(async ([version, manifest]) => {\n try {\n await db.upsertCachedVersion(\n `${packageName}@${version}`,\n manifest as Record<string, any>,\n upstream,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (manifest.publishedAt as string) ||\n new Date().toISOString(),\n )\n } catch (_error) {\n // Silently fail individual versions\n }\n })\n await Promise.allSettled(versionPromises)\n }\n }\n }\n } else if (type === 'version_refresh' && spec) {\n // Handle version refresh - similar logic for individual versions\n // (This would be implemented if needed)\n }\n\n // Acknowledge successful processing\n message.ack()\n } catch (error) {\n // Retry failed messages\n // TODO: Replace with proper logging system\n // eslint-disable-next-line no-console\n console.error('Queue processing error:', error)\n message.retry()\n }\n }\n}\n"],
|
|
6
|
+
"mappings": "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BACA,OACA,QACA,SACA,UACA,QACA,YACA,gBACA,YACA,WACAC,SACA,SACA,MACA,UACA,SACA,SACA,SACA,QACA,WACA,QACA,SACA,SACA,QACA,WACA,QACA,YACA,YACA,SACA,cACA,UACA,eACA,WACA,eACA,iBACA,mBACA,oBACA,OACA,kBACA,WACA,4BACA,2BACA,eACA,aACA,cACA,iBACA,UACA,OACA,gBAEI,UA8GC;AAnOP,IAAAC,gBAAA;AAAA;AAAA;AAAA;AAAA,IAAAC;AAAA;AACA;AACA,IAAM,gBAAgB,WAAW,SAAS;AACnC,IAAM,mBAAmB,cAAc;AACvC,KAAM,EAAE,MAAM,UAAU,aAAa;AAAA,MAC1C;AAAA,IACF;AACA,IAAM,eAAe,IAAI,QAAa;AAAA,MACpC,KAAK,cAAc;AAAA,MACnB;AAAA,MACA;AAAA,IACF,CAAC;AACM,KAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE;AACJ,IAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AA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",
|
|
7
|
+
"names": ["init_performance", "performance", "init_performance", "PerformanceMark", "init_performance", "init_performance", "performance", "init_performance", "init_performance", "clear", "count", "countReset", "createTask", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "profile", "profileEnd", "table", "time", "timeEnd", "timeLog", "timeStamp", "trace", "warn", "init_console", "init_performance", "init_console", "init_performance", "hrtime", "init_performance", "dir", "env", "count", "init_performance", "init_performance", "init_performance", "init_performance", "cwd", "hrtime", "assert", "init_process", "init_performance", "init_process", "init_performance", "YEAR", "URL", "init_performance", "env", "init_config", "init_performance", "env", "URL", "initializeGlobalConfig", "init_config", "init_performance", "init_performance", "init_performance", "debug", "init_performance", "debug", "init_performance", "init_performance", "numeric", "init_performance", "debug", "version", "release", "init_performance", "parse", "version", "init_performance", "parse", "valid", "version", "init_performance", "parse", "version", "init_performance", "version", "release", "init_performance", "parse", "version2", "init_performance", "init_performance", "init_performance", "init_performance", "parse", "version", "init_performance", "init_performance", "rcompare", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "gt", "init_performance", "lt", "init_performance", "eq", "init_performance", "init_performance", "gte", "init_performance", "lte", "init_performance", "eq", "gt", "gte", "lt", "lte", "init_performance", "parse", "coerce", "version", "init_performance", "init_performance", "debug", "version", "init_performance", "debug", "version", "init_performance", "satisfies", "version", "init_performance", "init_performance", "maxSatisfying", "versions", "init_performance", "versions", "init_performance", "gt", "require_valid", "init_performance", "validRange", "init_performance", "satisfies", "gt", "lt", "lte", "gte", "version", "init_performance", "version", "init_performance", "version", "init_performance", "init_performance", "satisfies", "versions", "version", "init_performance", "satisfies", "gt", "lt", "eq", "require_semver", "init_performance", "constants", "parse", "valid", "rcompare", "gt", "lt", "eq", "gte", "lte", "coerce", "satisfies", "maxSatisfying", "validRange", "isBuiltin", "init_performance", "error", "flushCompileCache", "createRequire", "init_module", "init_performance", "isBuiltin", "init_performance", "init_module", "init_performance", "validate", "version", "context", "URL", "init_performance", "init_performance", "version", "packageName", "remainingSegments", "config", "init_performance", "init_performance", "init_performance", "init_performance", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "error", "_a", "referencedSchema", "config", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "context", "isError", "handler", "init_performance", "init_performance", "init_performance", "init_performance", "raw", "text", "init_performance", "context", "text", "init_performance", "init_performance", "handler", "handlers", "app", "env", "context", "init_performance", "init_performance", "init_performance", "tokens", "context", "node", "init_performance", "tokens", "handlers", "handler", "init_performance", "init_performance", "handler", "init_performance", "init_performance", "init_performance", "Node", "handler", "node", "Node", "handler", "Hono", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "util", "objectUtil", "error", "init_performance", "init_performance", "init_performance", "errorUtil", "error", "errorMap", "version", "ctx", "result", "issues", "elements", "processed", "result", "r", "ZodFirstPartyTypeKind", "Hono", "handler", "validator", "config", "document", "app", "init_performance", "init_performance", "init_performance", "init_performance", "handler", "error", "except2", "init_performance", "init_performance", "process", "time", "log", "logger2", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "isString", "init_performance", "isString", "init_performance", "PREFIX", "console", "logger", "logger", "init_performance", "logger", "init_performance", "handler", "handler", "logger", "performance", "handler", "error", "handler", "init_performance", "crypto", "init_performance", "splitPath", "splitPath", "States", "resolve", "handler", "resolve", "getModule", "version", "init_performance", "error", "ex", "init_performance", "init_performance", "DEBUG_BUILD", "context", "context", "logger", "ScopeClass", "sentry", "sentry", "ScopeClass", "init_performance", "init_performance", "DEBUG_BUILD", "logger", "init_performance", "DEBUG_BUILD", "logger", "resolve", "DEBUG_BUILD", "logger", "release", "DEBUG_BUILD", "logger", "DEBUG_BUILD", "logger", "env", "resolve", "trace", "isError", "isErrorEvent", "release", "DEBUG_BUILD", "logger", "send", "DEBUG_BUILD", "logger", "error", "parseStackFrames", "error", "exceptionFromError", "eventFromUnknownInput", "eventFromMessage", "defineIntegration", "setupIntegrations", "getModule", "init_config", "init_performance", "error", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "config", "init_performance", "init_performance", "init_performance", "table", "init_performance", "table", "config", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "config", "table", "init_performance", "init_performance", "table", "init_performance", "value", "startFrom", "config", "table", "ref", "actions", "table", "config", "init_performance", "sql", "init_performance", "init_performance", "version", "version", "otel", "rawTracer", "init_performance", "config", "param", "sql", "raw", "join", "placeholder", "name", "SQL", "name", "result", "node", "table", "table", "table", "init_performance", "init_performance", "table", "config", "relations", "table", "config", "init_performance", "init_performance", "init_performance", "table", "config", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "ForeignKeyBuilder", "config", "table", "ForeignKey", "init_performance", "uniqueKeyName", "table", "UniqueConstraintBuilder", "table", "UniqueConstraint", "UniqueOnConstraintBuilder", "uniqueKeyName", "config", "table", "ref", "actions", "ForeignKeyBuilder", "uniqueKeyName", "table", "config", "init_performance", "table", "config", "init_performance", "config", "table", "init_performance", "table", "config", "init_performance", "table", "init_performance", "config", "table", "InlineForeignKeys", "name", "table", "init_performance", "table", "table", "init_performance", "init_performance", "init_performance", "init_performance", "table", "init_performance", "init_performance", "config", "table", "select", "sql", "joinOn", "field", "init_performance", "init_performance", "config", "table", "on", "join", "except", "table", "config", "init_performance", "table", "on", "join", "init_performance", "init_performance", "table", "config", "init_performance", "table", "config", "init_performance", "init_performance", "sql", "init_performance", "sql", "builtQuery", "config", "logger", "config", "logger", "versions", "init_performance", "versions", "logger", "error", "versions", "version", "init_performance", "init_performance", "init_performance", "init_performance", "URL", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "customTheme", "error", "init_performance", "getDb", "error", "init_performance", "semver", "import_validate_npm_package_name", "init_performance", "getDb", "upstreamData", "valid", "versions", "error", "isValid", "getDb", "getDb", "rewriteTarballUrlIfNeeded", "version", "context", "URL", "version", "getDb", "upstream", "versions", "URL", "context", "rewriteTarballUrlIfNeeded", "validate", "error", "packageData", "time", "getDefaultUpstream", "verifyToken", "isValid", "isValidUpstreamName", "getUpstreamConfig", "init_performance", "init_performance", "text", "error", "init_performance", "env", "DAEMON_URL", "packages", "init_performance", "trace", "trace", "init_performance", "error", "init_performance", "env", "version", "error"]
|
|
8
|
+
}
|