{"version":3,"file":"adapter-index.js","names":["server_assets","server_files","server_assets","server"],"sources":["../../node_modules/@sveltejs/adapter-bun/src/routes-util.js","../../node_modules/@sveltejs/adapter-bun/src/routes.js","../../node_modules/@sveltejs/adapter-bun/src/env.js","../../node_modules/@sveltejs/adapter-bun/src/handler.js","../../node_modules/@sveltejs/adapter-bun/src/index.js"],"sourcesContent":["/** @import { BunFile, BunRequest, Serve } from 'bun' */\nimport { app_dir, base, dir, embed } from '#@sveltejs/adapter-bun';\nimport path from 'node:path';\n\n/**\n * Embedded assets are imported by identity path; on-disk assets live under the\n * output directory next to this module.\n * @param {string} subdir\n * @param {string} filename\n * @returns {string}\n */\nfunction resolve_file(subdir, filename) {\n\treturn embed ? filename : path.resolve(dir, subdir, filename);\n}\n\n/**\n * @typedef {Serve.Routes<never, string>[string]} RouteHandler\n * @typedef {{ hash: string, mtime: number, br?: boolean, gz?: boolean }} AssetMeta\n */\n\nconst CONTENT_ENCODING = { br: 'br', gz: 'gzip' };\n\n// the URL Standard's path percent-encode set, plus `%` and `\\` so they stay literal\n// eslint-disable-next-line no-control-regex -- control characters are part of the encode set\nconst ESCAPED_PATH_CHAR = /[\\u0000-\\u001f\\u007f-\\u{10ffff} \"#<>?`{}%\\\\]/gu;\n\n/**\n * WHATWG path serialization: the exact bytes user agents put on the wire, because\n * Bun matches route keys against the raw request pathname.\n * @param {string} pathname\n * @returns {string}\n */\nfunction encode_pathname(pathname) {\n\treturn pathname.replace(ESCAPED_PATH_CHAR, (char) => encodeURIComponent(char));\n}\n\n/**\n * Registers a path both as user agents send it and fully percent-encoded,\n * so clients that escape sub-delims still match.\n * @param {string} pathname\n * @returns {string[]}\n */\nfunction route_paths(pathname) {\n\tconst minimal = encode_pathname(pathname);\n\tconst full = pathname.split('/').map(encodeURIComponent).join('/');\n\treturn minimal === full ? [minimal] : [minimal, full];\n}\n\n/**\n * @param {string} url\n * @returns {string[]}\n */\nfunction to_paths(url) {\n\treturn route_paths(path.posix.join(base, url));\n}\n\n/**\n * @param {string} url\n * @returns {string[]}\n */\nfunction to_directory_paths(url) {\n\tconst directory = `${path.posix.join(base, url).replace(/\\/$/, '')}/`;\n\tconst paths = route_paths(directory);\n\n\tif (directory !== '/') {\n\t\tpaths.push(...route_paths(directory.slice(0, -1)));\n\t}\n\n\treturn paths;\n}\n\n/**\n * If-None-Match takes precedence over If-Modified-Since (RFC 9110 §13.1.3);\n * dates compare at whole-second precision because HTTP dates have none finer.\n * @param {Request} request\n * @param {string} etag\n * @param {number} mtime\n * @returns {boolean}\n */\nfunction is_fresh(request, etag, mtime) {\n\tconst header = request.headers.get('if-none-match');\n\tif (header !== null) {\n\t\treturn header\n\t\t\t.split(',')\n\t\t\t.some((value) => ['*', etag].includes(value.trim().replace(/^W\\//, '')));\n\t}\n\n\tconst since = Date.parse(request.headers.get('if-modified-since') ?? '');\n\treturn Number.isFinite(since) && Math.trunc(mtime / 1000) <= Math.trunc(since / 1000);\n}\n\n/**\n * @param {string | null} accept\n * @param {AssetMeta} meta\n * @returns {'br' | 'gz' | null}\n */\nfunction negotiate(accept, meta) {\n\tif (accept === null || (!meta.br && !meta.gz)) return null;\n\n\tconst accepted = new Set();\n\tfor (const part of accept.split(',')) {\n\t\tconst [name = '', ...params] = part.trim().toLowerCase().split(';');\n\t\tif (params.some((param) => /^q=0(\\.0*)?$/.test(param.trim()))) continue;\n\t\taccepted.add(name.trim());\n\t}\n\n\tif (meta.br && (accepted.has('br') || accepted.has('*'))) return 'br';\n\tif (meta.gz && (accepted.has('gzip') || accepted.has('*'))) return 'gz';\n\treturn null;\n}\n\n/**\n * @param {string[]} paths\n * @param {RouteHandler} route\n * @returns {Array<[string, RouteHandler]>}\n */\nfunction route_entries(paths, route) {\n\treturn paths.map((route_path) => [route_path, route]);\n}\n\n/**\n * Serves one file with its build-time validator and precompressed variants.\n * @param {string} file\n * @param {AssetMeta} meta\n * @param {Record<string, string>} [extra_headers]\n * @returns {RouteHandler}\n */\nfunction file_route(file, meta, extra_headers = {}) {\n\tconst content_type = Bun.file(file).type;\n\tconst last_modified = new Date(meta.mtime).toUTCString();\n\n\t/** @param {BunRequest} request */\n\tconst handler = (request) => {\n\t\t// Bun serializes Range itself for file bodies; ranges apply to the identity representation\n\t\tconst encoding =\n\t\t\trequest.headers.get('range') === null\n\t\t\t\t? negotiate(request.headers.get('accept-encoding'), meta)\n\t\t\t\t: null;\n\t\tconst etag = encoding === null ? `\"${meta.hash}\"` : `\"${meta.hash}-${encoding}\"`;\n\n\t\t/** @type {Record<string, string>} */\n\t\tconst response_headers = {\n\t\t\t'content-type': content_type,\n\t\t\t...extra_headers,\n\t\t\tetag,\n\t\t\t'last-modified': last_modified\n\t\t};\n\t\tif (meta.br || meta.gz) response_headers['vary'] = 'accept-encoding';\n\n\t\tif (is_fresh(request, etag, meta.mtime)) {\n\t\t\treturn new Response(null, { status: 304, headers: response_headers });\n\t\t}\n\n\t\tlet body_file = file;\n\t\tif (encoding !== null) {\n\t\t\tresponse_headers['content-encoding'] = CONTENT_ENCODING[encoding];\n\t\t\tbody_file = `${file}.${encoding}`;\n\t\t}\n\t\treturn new Response(Bun.file(body_file), { headers: response_headers });\n\t};\n\n\treturn { GET: handler };\n}\n\n/**\n * @param {string} url\n * @param {string | undefined} filename\n * @param {AssetMeta} meta\n * @returns {Array<[string, RouteHandler]>}\n */\nexport function client_asset(url, filename = url, meta) {\n\tconst immutable = url.startsWith(`${app_dir}/immutable/`);\n\tconst route = file_route(\n\t\tresolve_file('client', filename),\n\t\tmeta,\n\t\timmutable ? { 'cache-control': 'public,max-age=31536000,immutable' } : {}\n\t);\n\n\tconst paths = to_paths(url);\n\tif (url.endsWith('/index.html') || url === 'index.html') {\n\t\tpaths.push(...to_directory_paths(url.slice(0, -'index.html'.length)));\n\t} else if (url.endsWith('.html')) {\n\t\t// sirv also serves `page.html` at `/page`\n\t\tpaths.push(...to_paths(url.slice(0, -'.html'.length)));\n\t}\n\n\treturn route_entries(paths, route);\n}\n\n/**\n * @param {string} url\n * @param {string} [filename]\n * @returns {BunFile}\n */\nexport function server_asset(url, filename = url) {\n\treturn Bun.file(resolve_file('client', filename));\n}\n\n/**\n * @param {string} url\n * @param {string | undefined} filename\n * @param {AssetMeta} meta\n * @returns {Array<[string, RouteHandler]>}\n */\nexport function prerendered_asset(url, filename = url, meta) {\n\tconst route = file_route(resolve_file('prerendered', filename), meta);\n\treturn route_entries(to_paths(url), route);\n}\n\n/**\n * @param {string} url\n * @param {string} filename\n * @param {AssetMeta} meta\n * @returns {Array<[string, RouteHandler]>}\n */\nexport function prerendered_page(url, filename, meta) {\n\tconst route = file_route(resolve_file('prerendered', filename), meta);\n\t// path already contains base, no need to add it here\n\tconst entries = route_entries(route_paths(url), route);\n\n\tconst inverted = url.endsWith('/') ? url.slice(0, -1) : `${url}/`;\n\tif (inverted) {\n\t\tconst canonical = encode_pathname(url);\n\t\tentries.push(\n\t\t\t...route_entries(route_paths(inverted), {\n\t\t\t\tGET: (req) => {\n\t\t\t\t\tconst location = canonical + new URL(req.url).search;\n\t\t\t\t\treturn new Response(null, { status: 308, headers: { location } });\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n\n\treturn entries;\n}\n\n/**\n * @param {string} url\n * @param {number} status\n * @param {string} location\n * @returns {Array<[string, RouteHandler]>}\n */\nexport function prerendered_redirect(url, status, location) {\n\tconst route = { GET: new Response(null, { status, headers: { location } }) };\n\t// path already contains base, no need to add it here\n\treturn route_entries(route_paths(url), route);\n}\n","import { assets, redirects, server_assets as server_files } from '#@sveltejs/adapter-bun';\nimport {\n\tclient_asset,\n\tprerendered_asset,\n\tprerendered_page,\n\tprerendered_redirect,\n\tserver_asset\n} from './routes-util.js';\n\nconst helpers = { client_asset, prerendered_asset, prerendered_page };\n\n// reversed because Object.fromEntries keeps the last duplicate: the first generated\n// entry for a path must win so exact files beat aliases, like sirv's lookup order\nexport const routes = Object.fromEntries(\n\t[\n\t\t...assets.flatMap(([helper, url, file, meta]) => helpers[helper](url, file, meta)),\n\t\t...redirects.flatMap(([url, status, location]) => prerendered_redirect(url, status, location))\n\t].reverse()\n);\n\nexport const server_assets = new Map(\n\tserver_files.map(([file, embedded]) => [file, server_asset(file, embedded)])\n);\n","import process from 'node:process';\nimport { env_prefix } from '#@sveltejs/adapter-bun';\n\nconst expected = new Set([\n\t'SOCKET_PATH',\n\t'HOST',\n\t'PORT',\n\t'REUSE_PORT',\n\t'IPV6_ONLY',\n\t'CONNECTION_IDLE_TIMEOUT',\n\t'BODY_SIZE_LIMIT',\n\t'SHUTDOWN_TIMEOUT',\n\t'DEVELOPMENT',\n\t'XFF_DEPTH',\n\t'ADDRESS_HEADER',\n\t'PROTOCOL_HEADER',\n\t'HOST_HEADER',\n\t'PORT_HEADER'\n]);\n\nif (env_prefix) {\n\tfor (const name in process.env) {\n\t\tif (name.startsWith(env_prefix) && !expected.has(name.slice(env_prefix.length))) {\n\t\t\tthrow new Error(\n\t\t\t\t`You should change envPrefix (${env_prefix}) to avoid conflicts with existing environment variables — unexpectedly saw ${name}`\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * @param {string} name\n * @param {string} value\n * @param {string} expected\n * @returns {never}\n */\nfunction parsing_error(name, value, expected) {\n\tthrow new Error(\n\t\t`Invalid value for environment variable ${env_prefix + name}: ${JSON.stringify(value)} (expected ${expected})`\n\t);\n}\n\n/**\n * @template {string | undefined} [T=undefined]\n * @param {string} name\n * @param {T} [fallback]\n * @returns {string | T}\n */\nexport function env(name, fallback) {\n\tconst prefixed = env_prefix + name;\n\treturn prefixed in process.env\n\t\t? /** @type {string} */ (process.env[prefixed])\n\t\t: /** @type {T} */ (fallback);\n}\n\n/** @type {Record<string, boolean>} */\nconst BOOLEANS = {\n\t1: true,\n\ttrue: true,\n\tyes: true,\n\ton: true,\n\t0: false,\n\tfalse: false,\n\tno: false,\n\toff: false\n};\n\n/**\n * @template {boolean | undefined} [T=undefined]\n * @param {string} name\n * @param {T} [fallback]\n * @returns {boolean | T}\n */\nexport function boolean_env(name, fallback) {\n\tconst value = env(name);\n\tif (value === undefined) return /** @type {T} */ (fallback);\n\treturn BOOLEANS[value.toLowerCase()] ?? parsing_error(name, value, 'a boolean');\n}\n\n/**\n * @template {number | undefined} [T=undefined]\n * @param {string} name\n * @param {T} [fallback]\n * @param {{ min?: number; max?: number }} [limits]\n * @returns {number | T}\n */\nexport function number_env(name, fallback, limits = {}) {\n\tconst value = env(name);\n\tif (value === undefined) return /** @type {T} */ (fallback);\n\tif (!/^\\d+$/.test(value)) {\n\t\tparsing_error(name, value, 'a non-negative integer');\n\t}\n\n\tconst number = Number(value);\n\tif (\n\t\t!Number.isSafeInteger(number) ||\n\t\tnumber < (limits.min ?? 0) ||\n\t\tnumber > (limits.max ?? Infinity)\n\t) {\n\t\tconst range =\n\t\t\tlimits.max === undefined\n\t\t\t\t? `at least ${limits.min ?? 0}`\n\t\t\t\t: `between ${limits.min ?? 0} and ${limits.max}`;\n\t\tparsing_error(name, value, `an integer ${range}`);\n\t}\n\n\treturn number;\n}\n\n/**\n * @template {number | undefined} [T=undefined]\n * @param {string} name\n * @param {T} [fallback]\n * @returns {number | T}\n */\nexport function bytes_env(name, fallback) {\n\tconst value = env(name);\n\tif (value === undefined) return /** @type {T} */ (fallback);\n\t// adapter-node documents Infinity as the value that disables the limit\n\tif (value === 'Infinity') return Infinity;\n\tif (!/^(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[KMG])?$/i.test(value)) {\n\t\tparsing_error(\n\t\t\tname,\n\t\t\tvalue,\n\t\t\t'a non-negative number with an optional K, M, or G suffix, or Infinity'\n\t\t);\n\t}\n\n\tconst suffix = value.at(-1)?.toUpperCase();\n\tconst multiplier =\n\t\t{\n\t\t\tK: 1024,\n\t\t\tM: 1024 * 1024,\n\t\t\tG: 1024 * 1024 * 1024\n\t\t}[/** @type {'K' | 'M' | 'G'} */ (suffix)] ?? 1;\n\tconst number = Number(multiplier === 1 ? value : value.slice(0, -1)) * multiplier;\n\n\tif (!Number.isSafeInteger(number)) {\n\t\tparsing_error(name, value, 'a non-negative number of whole bytes');\n\t}\n\n\treturn number;\n}\n","/** @import { Server as BunServer } from 'bun' */\nimport { env_prefix, origin, server } from '#@sveltejs/adapter-bun';\nimport { server_assets } from './routes.js';\nimport { env, number_env } from './env.js';\n\nconst address_header = env('ADDRESS_HEADER', '').toLowerCase();\nconst protocol_header = env('PROTOCOL_HEADER', '').toLowerCase();\nconst host_header = env('HOST_HEADER', '').toLowerCase();\nconst port_header = env('PORT_HEADER', '').toLowerCase();\nconst xff_depth = number_env('XFF_DEPTH', 1, { min: 1 });\n\nawait server.init({\n\tenv: Bun.env,\n\tread: (file) => server_assets.get(file)?.stream() ?? null\n});\n\n/**\n * The Bun-native SvelteKit request handler used by the generated server.\n * @param {Request} request\n * @param {BunServer<undefined>} bun_server\n * @returns {Promise<Response>}\n */\nexport async function handler(request, bun_server) {\n\tconst normalized_request = normalize_request(request);\n\tif (normalized_request instanceof Response) return normalized_request;\n\n\tconst response = await server.respond(normalized_request, {\n\t\tplatform: { server: bun_server },\n\t\tgetClientAddress: () => get_client_address(request, bun_server)\n\t});\n\n\tif (response.headers.get('content-type')?.startsWith('text/event-stream')) {\n\t\tbun_server.timeout(request, 0);\n\t\tresponse.headers.set('x-accel-buffering', 'no');\n\t}\n\n\treturn response;\n}\n\n/**\n * Rewrites the request onto the public origin the user actually requested.\n * @param {Request} request\n * @returns {Request | Response}\n */\nfunction normalize_request(request) {\n\ttry {\n\t\t// an empty Host header makes request.url relative, so parsing belongs in the try\n\t\tconst url = new URL(request.url);\n\t\tconst request_origin = origin || get_origin(request, url);\n\t\treturn request_origin === url.origin\n\t\t\t? request\n\t\t\t: new Request(request_origin + url.pathname + url.search, request);\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`Could not determine request origin: ${error instanceof Error ? error.message : String(error)}`\n\t\t);\n\t\treturn new Response('Bad Request', { status: 400 });\n\t}\n}\n\n/**\n * @param {Request} request\n * @param {URL} url\n * @returns {string}\n */\nfunction get_origin(request, url) {\n\t// assume TLS terminates upstream, like adapter-node; an http origin would fail CSRF checks\n\tconst protocol = decodeURIComponent(\n\t\t(protocol_header && request.headers.get(protocol_header)) || 'https'\n\t);\n\tif (!/^https?$/i.test(protocol)) {\n\t\tthrow new Error(\n\t\t\t`The ${protocol_header} header specified ${protocol} which is an invalid protocol scheme. It should only contain the protocol scheme (e.g. \\`https\\`)`\n\t\t);\n\t}\n\n\tconst host =\n\t\t(host_header && request.headers.get(host_header)) || (request.headers.get('host') ?? url.host);\n\tif (!host) {\n\t\tthrow new Error(\n\t\t\t`Could not determine host from the ${host_header ? `${host_header} or ` : ''}host header`\n\t\t);\n\t}\n\n\tconst port = port_header ? request.headers.get(port_header) : null;\n\tif (port && isNaN(+port)) {\n\t\tthrow new Error(\n\t\t\t`The ${port_header} header specified ${port} which is an invalid port because it is not a number. The value should only contain the port number (e.g. 443)`\n\t\t);\n\t}\n\n\t// canonicalized so the caller's comparison with url.origin matches (case, default ports)\n\treturn new URL(`${protocol}://${host}${port ? `:${port}` : ''}`).origin;\n}\n\n/**\n * @param {Request} request\n * @param {BunServer<undefined>} bun_server\n * @returns {string}\n */\nfunction get_client_address(request, bun_server) {\n\tif (!address_header) {\n\t\t// requestIP() is null over unix sockets; undefined matches adapter-node\n\t\treturn /** @type {string} */ (bun_server.requestIP(request)?.address);\n\t}\n\n\tconst value = request.headers.get(address_header);\n\tif (value === null) {\n\t\tthrow new Error(\n\t\t\t`Address header was specified with ${env_prefix}ADDRESS_HEADER=${address_header} but is absent from request`\n\t\t);\n\t}\n\tif (address_header !== 'x-forwarded-for') return value;\n\n\tconst addresses = value.split(',');\n\tif (xff_depth > addresses.length) {\n\t\tthrow new Error(\n\t\t\t`${env_prefix}XFF_DEPTH is ${xff_depth}, but only found ${addresses.length} addresses`\n\t\t);\n\t}\n\treturn addresses[addresses.length - xff_depth].trim();\n}\n","/** @import { Serve } from 'bun' */\nimport fs from 'node:fs';\nimport process from 'node:process';\nimport { server_options } from '#@sveltejs/adapter-bun';\nimport { routes } from './routes.js';\nimport { handler } from './handler.js';\nimport { boolean_env, bytes_env, env, number_env } from './env.js';\n\n// nothing enforces `engines.bun` at install time, and the build may have run on a newer Bun.\n// order() rather than satisfies(): a range would reject canary builds such as 1.5.0-canary.1\nif (Bun.semver.order(Bun.version, '1.4.0') < 0) {\n\tthrow new Error(\n\t\t`@sveltejs/adapter-bun requires Bun 1.4 or newer, but this is Bun ${Bun.version}`\n\t);\n}\n\nconst options = /** @type {Serve.Options<undefined>} */ ({ ...server_options });\n\nconst unix = env('SOCKET_PATH', options.unix);\n\nif (unix) {\n\toptions.unix = unix;\n\tdelete options.hostname;\n\tdelete options.port;\n\tdelete options.reusePort;\n\tdelete options.ipv6Only;\n\n\t// an unclean shutdown leaves the socket file behind and the next listen would\n\t// fail with EADDRINUSE; the zero-size check (same heuristic as adapter-node)\n\t// avoids deleting a regular file that happens to sit at this path\n\ttry {\n\t\tif (fs.statSync(unix).size === 0) fs.rmSync(unix);\n\t} catch {\n\t\t// ignore\n\t}\n} else {\n\tdelete options.unix;\n\toptions.hostname = env('HOST', options.hostname);\n\t// always set an explicit port: left undefined, Bun.serve reads the unprefixed\n\t// BUN_PORT/PORT/NODE_PORT itself, bypassing envPrefix isolation\n\toptions.port = env('PORT', options.port?.toString()) ?? 3000;\n\toptions.reusePort = boolean_env('REUSE_PORT', options.reusePort);\n\toptions.ipv6Only = boolean_env('IPV6_ONLY', options.ipv6Only);\n}\n\n// not IDLE_TIMEOUT: that name means idle-shutdown seconds on adapter-node, and a\n// carried-over value would crash on the 255 cap or silently kill slow requests\noptions.idleTimeout = number_env('CONNECTION_IDLE_TIMEOUT', options.idleTimeout, { max: 255 });\noptions.development = boolean_env('DEVELOPMENT') ?? options.development ?? false;\n\noptions.maxRequestBodySize = bytes_env('BODY_SIZE_LIMIT', options.maxRequestBodySize ?? 512 * 1024);\n\nconst shutdown_timeout = number_env('SHUTDOWN_TIMEOUT', 30);\n\noptions.fetch = handler;\noptions.routes = routes;\n\nconst server = Bun.serve(options);\n\nconsole.log(unix ? `Listening on ${unix}` : `Listening on ${server.url}`);\n\nlet shutting_down = false;\n\n/** @param {'SIGINT' | 'SIGTERM'} reason */\nasync function graceful_shutdown(reason) {\n\tif (shutting_down) return process.exit(1);\n\tshutting_down = true;\n\n\tif (server.pendingRequests !== 0) {\n\t\tconsole.log(\n\t\t\t`Waiting for ${server.pendingRequests} requests to finish before shutting down...\\n` +\n\t\t\t\t'Press Ctrl+C again to force shutdown.'\n\t\t);\n\t}\n\n\t// stop() waits for in-flight requests, and an open event stream is one forever,\n\t// so race the drain against the deadline. The timer must stay referenced: a\n\t// draining server no longer holds the event loop open on its own\n\t/** @type {ReturnType<typeof setTimeout> | undefined} */\n\tlet deadline;\n\tconst drained = await Promise.race([\n\t\tserver.stop().then(() => true),\n\t\tnew Promise((resolve) => {\n\t\t\tdeadline = setTimeout(() => resolve(false), shutdown_timeout * 1000);\n\t\t})\n\t]);\n\tclearTimeout(deadline);\n\n\t// force-close aborts the in-flight handlers, so shutdown listeners do not tear\n\t// down resources those handlers still hold\n\tif (!drained) await server.stop(true);\n\n\t// @ts-expect-error custom events cannot be typed\n\tprocess.emit('sveltekit:shutdown', reason);\n}\n\nprocess.on('SIGTERM', () => graceful_shutdown('SIGTERM'));\nprocess.on('SIGINT', () => graceful_shutdown('SIGINT'));\n"],"ignoreList":[0,1,2,3,4],"mappings":"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"}