@eslym/sveltekit-adapter-bun 2.1.0-rc.7 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -168,20 +168,21 @@ export type PreCompressOptions = {
168
168
 
169
169
  ## Runtime Environments
170
170
 
171
- | Name | Description | Default |
172
- | ---------------------- | ------------------------------------------------------------------------------------ | ---------- |
173
- | `HTTP_HOST` | The host for the server | `0.0.0.0` |
174
- | `HTTP_PORT` | The port for the server | `3000` |
175
- | `HTTP_SOCKET` | The path of the unix socket which the server will listen to (this will disable http) | - |
176
- | `HTTP_PROTOCOL_HEADER` | The header name to get the protocol from the request | - |
177
- | `HTTP_HOST_HEADER` | The header name to get the host from the request | - |
178
- | `HTTP_IP_HEADER` | The header name to get the client ip from the request (usually `X-Forwarded-For`) | - |
179
- | `HTTP_XFF_DEPTH` | The depth of the `X-Forwarded-For` header to get the client ip | `1` |
180
- | `HTTP_OVERRIDE_ORIGIN` | Force the request origin when it is unable to retrieve from the request | - |
181
- | `HTTP_IDLE_TIMEOUT` | The request timeout for the server(in seconds) | `30` |
182
- | `HTTP_MAX_BODY` | The maximum body size for the request | `128mib` |
183
- | `WS_IDLE_TIMEOUT` | The websocket idle timeout (in seconds) | `120` |
184
- | `WS_MAX_PAYLOAD` | The maximum payload size for the websocket | `16mib` |
185
- | `WS_NO_PING` | Disable automatic ping response | `false` |
186
- | `CACHE_ASSET_AGE` | The max-age for the cache-control header for the assets | `14400` |
187
- | `CACHE_IMMUTABLE_AGE` | The max-age for the cache-control header for the immutable assets | `31536000` |
171
+ | Name | Description | Default |
172
+ | ---------------------- | --------------------------------------------------------------------------------------------------------- | ---------- |
173
+ | `HTTP_HOST` | The host for the server | `0.0.0.0` |
174
+ | `HTTP_PORT` | The port for the server | `3000` |
175
+ | `HTTP_SOCKET` | The path of the unix socket which the server will listen to (this will disable http) | - |
176
+ | `HTTP_PROTOCOL_HEADER` | The header name to get the protocol from the request | - |
177
+ | `HTTP_HOST_HEADER` | The header name to get the host from the request | - |
178
+ | `HTTP_IP_HEADER` | The header name to get the client ip from the request (usually `X-Forwarded-For`) | - |
179
+ | `HTTP_XFF_DEPTH` | The depth of the `X-Forwarded-For` header to get the client ip | `1` |
180
+ | `HTTP_TRUSTED_PROXIES` | A comma separated list of trusted proxies IP or CIDR, used to determine the client IP and override origin | - |
181
+ | `HTTP_OVERRIDE_ORIGIN` | Force the request origin when it is unable to retrieve from the request | - |
182
+ | `HTTP_IDLE_TIMEOUT` | The request timeout for the server(in seconds) | `30` |
183
+ | `HTTP_MAX_BODY` | The maximum body size for the request | `128mib` |
184
+ | `WS_IDLE_TIMEOUT` | The websocket idle timeout (in seconds) | `120` |
185
+ | `WS_MAX_PAYLOAD` | The maximum payload size for the websocket | `16mib` |
186
+ | `WS_NO_PING` | Disable automatic ping response | `false` |
187
+ | `CACHE_ASSET_AGE` | The max-age for the cache-control header for the assets | `14400` |
188
+ | `CACHE_IMMUTABLE_AGE` | The max-age for the cache-control header for the immutable assets | `31536000` |
package/dist/dev.js CHANGED
@@ -228,8 +228,8 @@ async function startDevServer({
228
228
  if (!("Bun" in globalThis)) {
229
229
  throw new Error("Please run with bun");
230
230
  }
231
- if (satisfies(">=1.2.6") && !hmrPort) {
232
- throw new Error("hmrPort must be specified when using Bun >= 1.2.6.");
231
+ if (satisfies(">=1.2.6") && typeof hmrPort !== "number") {
232
+ hmrPort = 0;
233
233
  }
234
234
  if (!config) {
235
235
  for (const cfg of [
@@ -360,4 +360,4 @@ export {
360
360
  patchSveltekit
361
361
  };
362
362
 
363
- //# debugId=A891BF296B10E66764756E2164756E21
363
+ //# debugId=B0B32EB73A8B181964756E2164756E21
package/dist/dev.js.map CHANGED
@@ -2,13 +2,13 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/dev.ts", "../src/symbols.ts", "../src/dev-internal/version.ts", "../src/dev-internal/bunternal.ts", "../src/dev-internal/mock-http.ts"],
4
4
  "sourcesContent": [
5
- "import { EventEmitter } from 'events';\nimport { IncomingMessage, ServerResponse } from 'http';\nimport type { Server, WebSocketHandler as BunWSHandler } from 'bun';\nimport type { DevServeOptions, WebSocketHandler } from './types';\nimport { symServer, symUpgrades } from './symbols';\nimport type { ViteDevServer } from 'vite';\nimport {\n bunternal,\n bunternalPlugin,\n patchBunternal,\n setupBunternal\n} from './dev-internal/bunternal';\nimport { satisfies } from './dev-internal/version';\nimport { mockedHttpPlugin, mockNodeRequest, patchMockHttp } from './dev-internal/mock-http';\n\nexport async function patchSveltekit() {\n console.log(\n 'Now patchSveltekit function uses Bun plugin instead of bun patch,\\nyou can now safely remove all patches to @sveltejs/kit in package.json'\n );\n Bun.plugin({\n name: 'bun-patch-sveltekit',\n setup(build) {\n build.onLoad(\n { filter: /\\/@sveltejs\\/kit\\/src\\/exports\\/node\\/index\\.js$/ },\n async (args) => {\n const src = await Bun.file(args.path).text();\n return {\n contents: satisfies('<1.2.5') ? patchBunternal(src) : patchMockHttp(src)\n };\n }\n );\n }\n });\n}\n\nexport async function startDevServer({\n port = 5173,\n host = 'localhost',\n idleTimeout = 30,\n config,\n websocket = {} as any,\n hmrPort = undefined,\n ...serveOptions\n}: DevServeOptions & {\n port?: number;\n host?: string;\n config?: string;\n} = {}) {\n if (!('Bun' in globalThis)) {\n throw new Error('Please run with bun');\n }\n if (satisfies('>=1.2.6') && !hmrPort) {\n throw new Error('hmrPort must be specified when using Bun >= 1.2.6.');\n }\n\n if (!config) {\n for (const cfg of [\n 'vite.config.ts',\n 'vite.config.js',\n 'vite.config.cjs',\n 'vite.config.mjs'\n ]) {\n if (Bun.file(cfg).size) {\n config = cfg;\n break;\n }\n }\n }\n if (!config) {\n throw new Error('No config file found.');\n }\n const { createServer } = await import('vite');\n\n const upgrades = new WeakMap<Response, WebSocketHandler>();\n\n (globalThis as any)[symUpgrades] = upgrades;\n\n const mockServer = new EventEmitter();\n\n const vite = await createServer({\n configFile: config,\n server: {\n hmr: satisfies('<1.2.6')\n ? {\n server: mockServer as any\n }\n : {\n port: hmrPort\n },\n middlewareMode: true,\n },\n appType: 'custom',\n plugins: [satisfies('<1.2.5') ? bunternalPlugin : mockedHttpPlugin]\n });\n\n const hooks = await vite\n .ssrLoadModule('./src/hooks.server.ts')\n .catch(() => ({}) as Record<string, any>);\n\n await hooks.beforeServe?.();\n\n const getResponse = satisfies('<1.2.6') ? legacyReqRes : mockedReqRes;\n\n const server = Bun.serve({\n ...serveOptions,\n hostname: host,\n port,\n idleTimeout,\n async fetch(request: Request, server: Server<WebSocketHandler>) {\n const response = await getResponse(vite, request, server, mockServer);\n\n if (!response) return;\n\n if (upgrades.has(response)) {\n const ws = upgrades.get(response)!;\n if (server.upgrade(request, { data: ws, headers: response.headers })) {\n return;\n }\n }\n\n return response;\n },\n websocket: {\n ...websocket,\n open(ws) {\n return ws.data.open?.(ws);\n },\n message(ws, message) {\n return ws.data.message(ws, message);\n },\n drain(ws) {\n return ws.data.drain?.(ws);\n },\n close(ws, code, reason) {\n return ws.data.close?.(ws, code, reason);\n },\n ping(ws, buffer) {\n return ws.data.ping?.(ws, buffer);\n },\n pong(ws, buffer) {\n return ws.data.pong?.(ws, buffer);\n }\n } as BunWSHandler<WebSocketHandler>\n } as any);\n\n (mockServer as any)[bunternal] = server;\n\n (globalThis as any)[symServer] = server;\n\n await hooks.afterServe?.(server);\n\n console.log(`Serving on ${server.url}`);\n}\n\nfunction legacyReqRes(\n vite: ViteDevServer,\n request: Request,\n server: Server<WebSocketHandler>,\n mockServer: EventEmitter\n) {\n let pendingResponse: Response | undefined;\n let pendingError: Error | undefined;\n\n const { promise, resolve, reject } = Promise.withResolvers<Response>();\n\n function raise(err: any) {\n if (pendingError) return;\n reject((pendingError = err));\n }\n\n function respond(res: Response) {\n if (pendingResponse) return;\n resolve((pendingResponse = res));\n }\n\n const req = new IncomingMessage(request as any);\n const res = new (ServerResponse as any)(req, respond) as ServerResponse;\n\n const socket = req.socket as any;\n setupBunternal(socket, server, mockServer, res, request);\n\n req.once('error', raise);\n res.once('error', raise);\n\n if (request.headers.get('upgrade')) {\n if (request.headers.get('sec-websocket-protocol') === 'vite-hmr') {\n mockServer.emit('upgrade', req, socket, Buffer.alloc(0));\n return;\n }\n }\n\n vite.middlewares(req, res, (err: any) => {\n if (err) {\n vite.ssrFixStacktrace(err);\n raise(err);\n }\n });\n\n return promise;\n}\n\nfunction mockedReqRes(vite: ViteDevServer, request: Request, server: Server<WebSocketHandler>) {\n const { req, res, promise, reject } = mockNodeRequest(request, server);\n\n vite.middlewares(req, res, (err: any) => {\n if (err) {\n vite.ssrFixStacktrace(err);\n reject(err);\n }\n });\n\n return promise;\n}\n",
5
+ "import { EventEmitter } from 'events';\nimport { IncomingMessage, ServerResponse } from 'http';\nimport type { Server, WebSocketHandler as BunWSHandler } from 'bun';\nimport type { DevServeOptions, WebSocketHandler } from './types';\nimport { symServer, symUpgrades } from './symbols';\nimport type { ViteDevServer } from 'vite';\nimport {\n bunternal,\n bunternalPlugin,\n patchBunternal,\n setupBunternal\n} from './dev-internal/bunternal';\nimport { satisfies } from './dev-internal/version';\nimport { mockedHttpPlugin, mockNodeRequest, patchMockHttp } from './dev-internal/mock-http';\n\nexport async function patchSveltekit() {\n console.log(\n 'Now patchSveltekit function uses Bun plugin instead of bun patch,\\nyou can now safely remove all patches to @sveltejs/kit in package.json'\n );\n Bun.plugin({\n name: 'bun-patch-sveltekit',\n setup(build) {\n build.onLoad(\n { filter: /\\/@sveltejs\\/kit\\/src\\/exports\\/node\\/index\\.js$/ },\n async (args) => {\n const src = await Bun.file(args.path).text();\n return {\n contents: satisfies('<1.2.5') ? patchBunternal(src) : patchMockHttp(src)\n };\n }\n );\n }\n });\n}\n\nexport async function startDevServer({\n port = 5173,\n host = 'localhost',\n idleTimeout = 30,\n config,\n websocket = {} as any,\n hmrPort = undefined,\n ...serveOptions\n}: DevServeOptions & {\n port?: number;\n host?: string;\n config?: string;\n} = {}) {\n if (!('Bun' in globalThis)) {\n throw new Error('Please run with bun');\n }\n if (satisfies('>=1.2.6') && typeof hmrPort !== 'number') {\n // let vite pick one\n hmrPort = 0;\n }\n\n if (!config) {\n for (const cfg of [\n 'vite.config.ts',\n 'vite.config.js',\n 'vite.config.cjs',\n 'vite.config.mjs'\n ]) {\n if (Bun.file(cfg).size) {\n config = cfg;\n break;\n }\n }\n }\n if (!config) {\n throw new Error('No config file found.');\n }\n const { createServer } = await import('vite');\n\n const upgrades = new WeakMap<Response, WebSocketHandler>();\n\n (globalThis as any)[symUpgrades] = upgrades;\n\n const mockServer = new EventEmitter();\n\n const vite = await createServer({\n configFile: config,\n server: {\n hmr: satisfies('<1.2.6')\n ? {\n server: mockServer as any\n }\n : {\n port: hmrPort\n },\n middlewareMode: true,\n },\n appType: 'custom',\n plugins: [satisfies('<1.2.5') ? bunternalPlugin : mockedHttpPlugin]\n });\n\n const hooks = await vite\n .ssrLoadModule('./src/hooks.server.ts')\n .catch(() => ({}) as Record<string, any>);\n\n await hooks.beforeServe?.();\n\n const getResponse = satisfies('<1.2.6') ? legacyReqRes : mockedReqRes;\n\n const server = Bun.serve({\n ...serveOptions,\n hostname: host,\n port,\n idleTimeout,\n async fetch(request: Request, server: Server<WebSocketHandler>) {\n const response = await getResponse(vite, request, server, mockServer);\n\n if (!response) return;\n\n if (upgrades.has(response)) {\n const ws = upgrades.get(response)!;\n if (server.upgrade(request, { data: ws, headers: response.headers })) {\n return;\n }\n }\n\n return response;\n },\n websocket: {\n ...websocket,\n open(ws) {\n return ws.data.open?.(ws);\n },\n message(ws, message) {\n return ws.data.message(ws, message);\n },\n drain(ws) {\n return ws.data.drain?.(ws);\n },\n close(ws, code, reason) {\n return ws.data.close?.(ws, code, reason);\n },\n ping(ws, buffer) {\n return ws.data.ping?.(ws, buffer);\n },\n pong(ws, buffer) {\n return ws.data.pong?.(ws, buffer);\n }\n } as BunWSHandler<WebSocketHandler>\n } as any);\n\n (mockServer as any)[bunternal] = server;\n\n (globalThis as any)[symServer] = server;\n\n await hooks.afterServe?.(server);\n\n console.log(`Serving on ${server.url}`);\n}\n\nfunction legacyReqRes(\n vite: ViteDevServer,\n request: Request,\n server: Server<WebSocketHandler>,\n mockServer: EventEmitter\n) {\n let pendingResponse: Response | undefined;\n let pendingError: Error | undefined;\n\n const { promise, resolve, reject } = Promise.withResolvers<Response>();\n\n function raise(err: any) {\n if (pendingError) return;\n reject((pendingError = err));\n }\n\n function respond(res: Response) {\n if (pendingResponse) return;\n resolve((pendingResponse = res));\n }\n\n const req = new IncomingMessage(request as any);\n const res = new (ServerResponse as any)(req, respond) as ServerResponse;\n\n const socket = req.socket as any;\n setupBunternal(socket, server, mockServer, res, request);\n\n req.once('error', raise);\n res.once('error', raise);\n\n if (request.headers.get('upgrade')) {\n if (request.headers.get('sec-websocket-protocol') === 'vite-hmr') {\n mockServer.emit('upgrade', req, socket, Buffer.alloc(0));\n return;\n }\n }\n\n vite.middlewares(req, res, (err: any) => {\n if (err) {\n vite.ssrFixStacktrace(err);\n raise(err);\n }\n });\n\n return promise;\n}\n\nfunction mockedReqRes(vite: ViteDevServer, request: Request, server: Server<WebSocketHandler>) {\n const { req, res, promise, reject } = mockNodeRequest(request, server);\n\n vite.middlewares(req, res, (err: any) => {\n if (err) {\n vite.ssrFixStacktrace(err);\n reject(err);\n }\n });\n\n return promise;\n}\n",
6
6
  "import { name as adapterName } from '../package.json';\n\nexport const symServer: unique symbol = Symbol.for(`${adapterName}/server`);\nexport const symUpgrades: unique symbol = Symbol.for(`${adapterName}/upgrades`);\n",
7
7
  "export function satisfies(range: string) {\n return Bun.semver.satisfies(Bun.version, range);\n}\n",
8
8
  "import type { Server } from 'bun';\nimport type { EventEmitter } from 'events';\nimport type { ServerResponse } from 'http';\nimport type { Plugin } from 'vite';\nimport { satisfies } from './version';\nimport type { WebSocketHandler } from '../types';\n\nexport const bunternal = Symbol.for('::bunternal::');\n\nfunction setupBunternalOld(\n socket: any,\n bunServer: Server<WebSocketHandler>,\n httpServer: EventEmitter,\n httpRes: ServerResponse,\n bunReq: Request\n) {\n socket[bunternal] = [bunServer, httpServer, httpRes, bunReq];\n}\n\nfunction setupBunternalNew(\n socket: any,\n _: Server<WebSocketHandler>,\n httpServer: EventEmitter,\n httpRes: ServerResponse,\n bunReq: Request\n) {\n socket[bunternal] = [httpServer, httpRes, bunReq];\n}\n\nexport const setupBunternal = satisfies('<1.1.25') ? setupBunternalOld : setupBunternalNew;\n\nexport function patchBunternal(src: string) {\n const bunReqIndex = satisfies('<1.1.25') ? 2 : 3;\n\n const getRequestPatch = `\n\tif(Symbol.for('::bunternal::') in request.socket) {\n\t\treturn request.socket[Symbol.for('::bunternal::')][${bunReqIndex}];\n\t}\n`;\n\n const setResponsePatch = `\n\tif('Bun' in globalThis && '_reply' in res) {\n\t\tres._reply(response);\n\t\treturn;\n\t}\n`;\n const getReq = src.indexOf('export async function getRequest');\n const getReqStart = src.indexOf('\\n', getReq);\n\n const setRes = src.indexOf('export async function setResponse');\n const setResStart = src.indexOf('\\n', setRes);\n\n return src\n .slice(0, getReqStart)\n .concat(getRequestPatch)\n .concat(src.slice(getReqStart, setResStart))\n .concat(setResponsePatch)\n .concat(src.slice(setResStart));\n}\n\nexport const bunternalPlugin: Plugin = {\n name: 'sveltekit-adapter-bun/bunternal',\n transform(src, id, options) {\n if (!options?.ssr) return;\n if (!id.endsWith('/node_modules/@sveltejs/kit/src/exports/node/index.js')) return;\n\n return {\n code: patchBunternal(src)\n };\n }\n};\n",
9
9
  "import { IncomingMessage, ServerResponse, type OutgoingHttpHeaders } from 'http';\nimport type { Socket } from 'net';\nimport { Duplex, PassThrough, Readable } from 'stream';\nimport type { Plugin } from 'vite';\nimport type { WebSocketHandler } from '../types';\n\nconst kReq = Symbol.for('::adapter-bun::request::');\nconst kRes = Symbol.for('::adapter-bun::response::');\n\nfunction defineGetter<T, K extends keyof T>(object: T, property: K, getter: () => T[K]) {\n Object.defineProperty(object, property, { get: getter });\n}\n\nexport function mockNodeRequest(\n request: Request,\n server: Bun.Server<WebSocketHandler>\n): {\n req: IncomingMessage;\n res: ServerResponse;\n promise: Promise<Response>;\n reject: (err: any) => void;\n} {\n const remote = server.requestIP(request)!;\n\n const cloned = request.clone();\n\n const readable = cloned.body\n ? Readable.fromWeb(cloned.body as any)\n : new Readable({\n read() {\n this.push(null);\n }\n });\n const writable = new PassThrough();\n writable.on('error', (err) => console.error('Writable stream error:', err));\n\n const mockSocket = Duplex.from({ readable, writable }) as any as Socket;\n mockSocket.on('error', (err) => console.error('Mock socket error:', err));\n\n defineGetter(mockSocket, 'remoteAddress', () => remote.address);\n defineGetter(mockSocket, 'remotePort', () => remote.port);\n defineGetter(mockSocket, 'remoteFamily', () => remote.family);\n defineGetter(mockSocket, 'address', () => () => remote);\n defineGetter(mockSocket, 'localAddress', () => server.hostname);\n defineGetter(mockSocket, 'localPort', () => server.port);\n defineGetter(mockSocket, 'setKeepAlive', () => () => mockSocket);\n defineGetter(mockSocket, 'setTimeout', () => () => mockSocket);\n defineGetter(mockSocket, 'setNoDelay', () => () => mockSocket);\n defineGetter(mockSocket, 'ref', () => () => mockSocket);\n defineGetter(mockSocket, 'unref', () => () => mockSocket);\n defineGetter(mockSocket, 'encrypted' as any, () => server.url.protocol === 'https:');\n\n const req = new IncomingMessage(mockSocket);\n req.socket = mockSocket;\n\n const url = new URL(request.url);\n\n req.method = request.method;\n req.url = url.pathname + url.search;\n req.headers = {};\n\n request.headers.forEach((value, name) => {\n req.headers[name] = value;\n });\n\n (req as any)[kReq] = request;\n\n const { promise, resolve, reject } = Promise.withResolvers<Response>();\n\n const headers = new Headers();\n let headerSent = false;\n\n (writable as any).setHeader = (name: string, value: string | number | string[]) => {\n headers.delete(name);\n if (Array.isArray(value)) {\n for (const v of value) {\n headers.append(name, v);\n }\n } else {\n headers.set(name, `${value}`);\n }\n };\n\n (writable as any).appendHeader = (name: string, value: string | number | string[]) => {\n if (Array.isArray(value)) {\n for (const v of value) {\n headers.append(name, v);\n }\n } else {\n headers.append(name, `${value}`);\n }\n };\n\n (writable as any).getHeader = (name: string) => {\n return headers.get(name);\n };\n\n (writable as any).writeHead = (statusCode: number) => {\n if (!headers.has('content-type')) {\n headers.set('content-type', Bun.file(url.pathname).type);\n }\n const body = Readable.toWeb(writable);\n const response = new Response(body as any, {\n status: statusCode,\n headers: headers\n });\n headerSent = true;\n resolve(response);\n };\n\n (writable as any)[kRes] = resolve;\n\n const old_write = writable._write.bind(writable);\n\n writable._write = (...args: any[]) => {\n if (!headerSent) {\n (writable as any).statusCode ??= 200;\n (writable as any).writeHead((writable as any).statusCode);\n writable._write = old_write;\n writable.end = old_end;\n }\n (old_write as any)(...args);\n };\n\n const old_end = writable.end.bind(writable);\n (writable as any).end = (...args: any[]) => {\n if (!headerSent) {\n (writable as any).statusCode ??= 200;\n (writable as any).writeHead((writable as any).statusCode);\n writable._write = old_write;\n writable.end = old_end;\n }\n (old_end as any)(...args);\n };\n\n return {\n req,\n res: writable as any,\n promise,\n reject\n };\n}\n\nexport function patchMockHttp(src: string) {\n const getRequestPatch = `\n if(Symbol.for('::adapter-bun::request::') in request) {\n return request[Symbol.for('::adapter-bun::request::')];\n }\n`;\n\n const setResponsePatch = `\n if(Symbol.for('::adapter-bun::response::') in res) {\n res[Symbol.for('::adapter-bun::response::')](response);\n return;\n }\n`;\n const getReq = src.indexOf('export async function getRequest');\n const getReqStart = src.indexOf('\\n', getReq);\n\n const setRes = src.indexOf('export async function setResponse');\n const setResStart = src.indexOf('\\n', setRes);\n\n return src\n .slice(0, getReqStart)\n .concat(getRequestPatch)\n .concat(src.slice(getReqStart, setResStart))\n .concat(setResponsePatch)\n .concat(src.slice(setResStart));\n}\n\nexport const mockedHttpPlugin: Plugin = {\n name: 'sveltekit-adapter-bun/mocked-http',\n transform(src, id, options) {\n if (!options?.ssr) return;\n if (!id.endsWith('/node_modules/@sveltejs/kit/src/exports/node/index.js')) return;\n\n return {\n code: patchMockHttp(src)\n };\n }\n};\n"
10
10
  ],
11
- "mappings": "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",
12
- "debugId": "A891BF296B10E66764756E2164756E21",
11
+ "mappings": "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",
12
+ "debugId": "B0B32EB73A8B181964756E2164756E21",
13
13
  "names": []
14
14
  }
@@ -12,15 +12,18 @@ var name = "@eslym/sveltekit-adapter-bun";
12
12
 
13
13
  // src/files/server.ts
14
14
  var server = new Server(manifest);
15
- await server.init({
16
- env: Bun.env,
17
- read(file) {
18
- if (assets.has(file)) {
19
- return assets.get(file).file.stream();
15
+ async function get_server() {
16
+ await server.init({
17
+ env: Bun.env,
18
+ read(file) {
19
+ if (assets.has(file)) {
20
+ return assets.get(file).file.stream();
21
+ }
22
+ return Bun.file(join(globalThis[Symbol.for(`${name}::root`)], "clients", file)).stream();
20
23
  }
21
- return Bun.file(join(globalThis[Symbol.for(`${name}::root`)], "clients", file)).stream();
22
- }
23
- });
24
+ });
25
+ return server;
26
+ }
24
27
 
25
28
  // src/files/utils.ts
26
29
  var urls = new WeakMap;
@@ -293,8 +296,8 @@ function clone_req(url, request) {
293
296
  integrity: request.integrity
294
297
  });
295
298
  }
296
- async function first_resolve(request, resolvers) {
297
- const args = { request };
299
+ async function first_resolve(request, ip, resolvers) {
300
+ const args = { request, ip };
298
301
  for (let i = 0;i < resolvers.length; i++) {
299
302
  const _r = resolvers[i](args);
300
303
  const response = _r instanceof Promise ? await _r : _r;
@@ -328,12 +331,21 @@ function resolve_xff_ip(request, depth) {
328
331
  const ips = request.headers.get("x-forwarded-for").split(",");
329
332
  return ips.at(-depth) || undefined;
330
333
  }
334
+ function resolve_trusted_proxy_ip(trustedProxies, request, fallback) {
335
+ return fallback && trustedProxies.check(fallback) ? resolve_xff_ip(request, 1) ?? fallback : fallback;
336
+ }
337
+ function override_origin_with_trusted_proxies(trustedProxies, args) {
338
+ if (!args.ip || !trustedProxies.check(args.ip))
339
+ return;
340
+ override_origin_with_header("x-forwarded-host", "x-forwarded-proto", args);
341
+ }
331
342
  function create_fetch({
332
343
  overrideOrigin,
333
344
  hostHeader,
334
345
  protocolHeader,
335
346
  ipHeader,
336
- xffDepth
347
+ xffDepth,
348
+ trustedProxies
337
349
  }) {
338
350
  let getIp = undefined;
339
351
  if (ipHeader === "x-forwarded-for") {
@@ -351,6 +363,9 @@ function create_fetch({
351
363
  resolvers.push(override_origin.bind(null, new URL(overrideOrigin)));
352
364
  } else if (hostHeader || protocolHeader) {
353
365
  resolvers.push(override_origin_with_header.bind(null, hostHeader, protocolHeader));
366
+ } else if (trustedProxies) {
367
+ getIp = resolve_trusted_proxy_ip.bind(null, trustedProxies);
368
+ resolvers.push(override_origin_with_trusted_proxies.bind(null, trustedProxies));
354
369
  }
355
370
  if (SERVE_STATIC) {
356
371
  resolvers.push(serve_static);
@@ -358,10 +373,11 @@ function create_fetch({
358
373
  return (request, srv) => {
359
374
  const request_ip = srv.requestIP(request)?.address;
360
375
  const try_get_ip = getIp ? () => getIp(request, request_ip) : () => request_ip;
361
- return first_resolve(request, [
376
+ return first_resolve(request, request_ip, [
362
377
  ...resolvers,
363
378
  async (args) => {
364
- const res = await server.respond(args.request, {
379
+ const server2 = await get_server();
380
+ const res = await server2.respond(args.request, {
365
381
  getClientAddress() {
366
382
  const ip = try_get_ip();
367
383
  if (ip)
@@ -389,6 +405,66 @@ function create_fetch({
389
405
  };
390
406
  }
391
407
 
408
+ // src/files/trustedproxy.ts
409
+ import { BlockList, isIPv4, isIPv6 } from "net";
410
+ function isCidr4(str) {
411
+ const match = str.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\/(\d{1,2})$/);
412
+ if (!match)
413
+ return false;
414
+ const [_, ip, prefix] = match;
415
+ if (!isIPv4(ip))
416
+ return false;
417
+ const prefixNum = parseInt(prefix, 10);
418
+ return prefixNum >= 0 && prefixNum <= 32;
419
+ }
420
+ function isCidr6(str) {
421
+ const match = str.match(/^([a-fA-F0-9:]+)\/(\d{1,3})$/);
422
+ if (!match)
423
+ return false;
424
+ const [_, ip, prefix] = match;
425
+ if (!isIPv6(ip))
426
+ return false;
427
+ const prefixNum = parseInt(prefix, 10);
428
+ return prefixNum >= 0 && prefixNum <= 128;
429
+ }
430
+ function isRange4(str) {
431
+ const match = str.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
432
+ if (!match)
433
+ return false;
434
+ const [_, start, end] = match;
435
+ return isIPv4(start) && isIPv4(end);
436
+ }
437
+ function isRange6(str) {
438
+ const match = str.match(/^([a-fA-F0-9:]+)-([a-fA-F0-9:]+)$/);
439
+ if (!match)
440
+ return false;
441
+ const [_, start, end] = match;
442
+ return isIPv6(start) && isIPv6(end);
443
+ }
444
+ function create_blocklist(entries) {
445
+ const blocklist = new BlockList;
446
+ for (const entry of entries) {
447
+ if (isCidr4(entry)) {
448
+ const [ip, prefix] = entry.split("/");
449
+ blocklist.addSubnet(ip, parseInt(prefix, 10));
450
+ } else if (isCidr6(entry)) {
451
+ const [ip, prefix] = entry.split("/");
452
+ blocklist.addSubnet(ip, parseInt(prefix, 10));
453
+ } else if (isRange4(entry)) {
454
+ const [start, end] = entry.split("-");
455
+ blocklist.addRange(start, end);
456
+ } else if (isRange6(entry)) {
457
+ const [start, end] = entry.split("-");
458
+ blocklist.addRange(start, end);
459
+ } else if (isIPv4(entry) || isIPv6(entry)) {
460
+ blocklist.addAddress(entry);
461
+ } else {
462
+ throw new Error(`Invalid blocklist entry: ${entry}`);
463
+ }
464
+ }
465
+ return blocklist;
466
+ }
467
+
392
468
  // src/files/index.ts
393
469
  var websocketHandler = {
394
470
  message(ws, message) {
@@ -439,7 +515,8 @@ function serve() {
439
515
  hostHeader: get_env("HTTP_HOST_HEADER"),
440
516
  protocolHeader: get_env("HTTP_PROTOCOL_HEADER"),
441
517
  ipHeader: get_env("HTTP_IP_HEADER"),
442
- xffDepth: int_env("HTTP_XFF_DEPTH", 1)
518
+ xffDepth: int_env("HTTP_XFF_DEPTH", 1),
519
+ trustedProxies: get_env("HTTP_TRUSTED_PROXIES")?.trim() ? create_blocklist(get_env("HTTP_TRUSTED_PROXIES").split(",").map((s) => s.trim())) : undefined
443
520
  }),
444
521
  websocket: {
445
522
  ...websocketOptions(),
package/dist/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { WebSocketHandler as WSHandler, ServeOptions as BunServeOptions, ServerWebSocket } from 'bun';
2
2
  import type { Server } from 'bun';
3
+ import type { BlockList } from 'node:net';
3
4
  type BunWSHandler = WSHandler<WebSocketHandler>;
4
5
  export type CreateFetchOptions = {
5
6
  overrideOrigin?: string;
@@ -7,6 +8,7 @@ export type CreateFetchOptions = {
7
8
  protocolHeader?: string;
8
9
  ipHeader?: string;
9
10
  xffDepth?: number;
11
+ trustedProxies?: BlockList;
10
12
  };
11
13
  export type ServeOptions = {
12
14
  port: number;
package/package.json CHANGED
@@ -38,5 +38,5 @@
38
38
  "@rollup/plugin-node-resolve": "^15.3.1",
39
39
  "rollup": "^4.55.3"
40
40
  },
41
- "version": "2.1.0-rc.7"
41
+ "version": "2.1.0"
42
42
  }