@mionjs/platform-bun 0.8.0-alpha.0 → 0.8.4
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.
|
@@ -93,6 +93,8 @@ async function startBunServer(options) {
|
|
|
93
93
|
};
|
|
94
94
|
process.on("SIGINT", shutdownHandler);
|
|
95
95
|
process.on("SIGTERM", shutdownHandler);
|
|
96
|
+
const { options: _nativeOpts, ...serializableConfig } = httpOptions;
|
|
97
|
+
router.setPlatformConfig(serializableConfig);
|
|
96
98
|
if (typeof Bun !== "undefined" && Bun.gc) {
|
|
97
99
|
Bun.gc(false);
|
|
98
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bunHttp.cjs","sources":["../../../src/bunHttp.ts"],"sourcesContent":["/* ########\n * 2023 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {\n dispatchRoute,\n getRouterFatalErrorResponse,\n resetRouter,\n decodeQueryBody,\n MionResponse as MionResponse,\n} from '@mionjs/router';\nimport {DEFAULT_BUN_HTTP_OPTIONS} from './constants.ts';\nimport type {BunHttpOptions} from './types.ts';\nimport {getENV, isMionCompileMode, SerializerModes} from '@mionjs/core';\nimport type {SerializerCode} from '@mionjs/core';\nimport {RpcError} from '@mionjs/core';\nimport {Server} from 'bun';\n\n// ############# PRIVATE STATE #############\n\nlet httpOptions: Readonly<BunHttpOptions> = {...DEFAULT_BUN_HTTP_OPTIONS};\nlet defaultHeaders: [string, string][] = [['server', '@mionjs']];\n\nexport function resetBunHttpOpts() {\n httpOptions = {...DEFAULT_BUN_HTTP_OPTIONS};\n defaultHeaders = [['server', '@mionjs']];\n resetRouter();\n}\n\nexport function setBunHttpOpts(options?: Partial<BunHttpOptions>) {\n httpOptions = {\n ...httpOptions,\n ...options,\n };\n // Pre-build default headers array once\n defaultHeaders = [['server', '@mionjs'], ...Object.entries(httpOptions.defaultResponseHeaders)];\n return httpOptions;\n}\n\nexport async function startBunServer(options?: Partial<BunHttpOptions>): Promise<Server<any>> {\n const isTest = getENV('NODE_ENV') === 'test';\n const isCompiling = isMionCompileMode();\n\n if (options) setBunHttpOpts(options);\n\n if (isCompiling) {\n console.log('Compiling routes metadata and skipping mion server initialization...', {\n port: httpOptions.port,\n httpOptions,\n });\n return undefined as any;\n }\n\n const port = httpOptions.port !== 80 ? `:${httpOptions.port}` : '';\n const url = `http://localhost${port}`;\n if (!isTest && !isCompiling) console.log(`mion bun server running on ${url}`);\n const server = Bun.serve({\n maxRequestBodySize: httpOptions.maxBodySize,\n port: httpOptions.port,\n ...httpOptions.options,\n\n async fetch(req) {\n const reqUrl = req.url;\n const pathStart = reqUrl.indexOf('/', 8);\n const queryStart = reqUrl.indexOf('?', pathStart);\n const path = queryStart === -1 ? reqUrl.slice(pathStart) : reqUrl.slice(pathStart, queryStart);\n const urlQuery = queryStart === -1 ? undefined : reqUrl.slice(queryStart + 1);\n const contentType = req.headers.get('content-type') || '';\n const isBinary = contentType.startsWith('application/octet-stream');\n let rawBody: any = req.body\n ? isBinary\n ? await req.arrayBuffer()\n : ((await req.json()) as Record<string, unknown>)\n : undefined;\n let reqBodyType: SerializerCode = isBinary ? SerializerModes.binary : SerializerModes.json;\n const queryBody = decodeQueryBody(urlQuery, rawBody);\n if (queryBody) {\n rawBody = queryBody.rawBody;\n reqBodyType = queryBody.bodyType;\n }\n const responseHeaders = new Headers(defaultHeaders);\n\n try {\n const platformResp = await dispatchRoute(\n path,\n rawBody,\n req.headers,\n responseHeaders,\n req,\n undefined,\n reqBodyType,\n urlQuery\n );\n return reply(platformResp, responseHeaders);\n } catch (e) {\n const error =\n e instanceof RpcError\n ? e\n : new RpcError({\n publicMessage: 'Unknown Error',\n type: 'unknown-error',\n originalError: e as Error,\n });\n return fatalFail(error, responseHeaders);\n }\n },\n error(errReq) {\n const responseHeaders = new Headers({\n server: '@mionjs',\n ...httpOptions.defaultResponseHeaders,\n });\n const error =\n errReq instanceof RpcError\n ? errReq\n : new RpcError({\n publicMessage: 'Connection Error',\n type: 'response-connection-error',\n originalError: errReq,\n });\n return fatalFail(error, responseHeaders);\n },\n });\n\n const shutdownHandler = function () {\n if (!isTest) console.log(`Shutting down mion server on ${url}`);\n server.stop(true);\n process.exit(0);\n };\n\n process.on('SIGINT', shutdownHandler);\n process.on('SIGTERM', shutdownHandler);\n\n // Hint to Bun's GC after initialization to clean up any temporary allocations\n if (typeof Bun !== 'undefined' && Bun.gc) {\n Bun.gc(false);\n }\n return server;\n}\n\n// only called whe there is an htt error or weird unhandled route errors\nfunction fatalFail(err: RpcError<string>, responseHeaders: any): Response {\n const routeResponse = getRouterFatalErrorResponse(err, responseHeaders);\n return reply(routeResponse, responseHeaders);\n}\n\nfunction reply(\n mionResp: MionResponse,\n // TODO: fix issue with Native Bun Headers type messing with Node Headers type\n // responseHeaders: Headers,\n responseHeaders: any\n): Response {\n const bodyType = mionResp.serializer;\n switch (bodyType) {\n case SerializerModes.stringifyJson: {\n // Pass string directly to Response - Bun handles encoding internally\n // and calculates content-length automatically. This avoids TextEncoder allocation.\n // content-type already set by serializer\n return new Response(mionResp.rawBody as string, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.json: {\n // Platform adapter uses Response.json() which handles JSON.stringify internally\n return Response.json(mionResp.body, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.binary: {\n const serializer = mionResp.binSerializer!;\n responseHeaders.set('content-length', String(serializer.getLength()));\n // content-type already set by serializer\n const response = new Response(serializer.getBufferView(), {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n // Mark buffer as ended immediately - Bun copies the buffer to the response\n serializer.markAsEnded();\n return response;\n }\n default: {\n const error = new RpcError({\n publicMessage: 'unknown-mion-response-format',\n type: 'unknown-error',\n errorData: {bodyType},\n });\n return fatalFail(error, responseHeaders);\n }\n }\n}\n"],"names":["DEFAULT_BUN_HTTP_OPTIONS","resetRouter","getENV","isMionCompileMode","SerializerModes","decodeQueryBody","dispatchRoute","RpcError","getRouterFatalErrorResponse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bunHttp.cjs","sources":["../../../src/bunHttp.ts"],"sourcesContent":["/* ########\n * 2023 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {\n dispatchRoute,\n getRouterFatalErrorResponse,\n resetRouter,\n decodeQueryBody,\n setPlatformConfig,\n MionResponse as MionResponse,\n} from '@mionjs/router';\nimport {DEFAULT_BUN_HTTP_OPTIONS} from './constants.ts';\nimport type {BunHttpOptions} from './types.ts';\nimport {getENV, isMionCompileMode, SerializerModes} from '@mionjs/core';\nimport type {SerializerCode} from '@mionjs/core';\nimport {RpcError} from '@mionjs/core';\nimport {Server} from 'bun';\n\n// ############# PRIVATE STATE #############\n\nlet httpOptions: Readonly<BunHttpOptions> = {...DEFAULT_BUN_HTTP_OPTIONS};\nlet defaultHeaders: [string, string][] = [['server', '@mionjs']];\n\nexport function resetBunHttpOpts() {\n httpOptions = {...DEFAULT_BUN_HTTP_OPTIONS};\n defaultHeaders = [['server', '@mionjs']];\n resetRouter();\n}\n\nexport function setBunHttpOpts(options?: Partial<BunHttpOptions>) {\n httpOptions = {\n ...httpOptions,\n ...options,\n };\n // Pre-build default headers array once\n defaultHeaders = [['server', '@mionjs'], ...Object.entries(httpOptions.defaultResponseHeaders)];\n return httpOptions;\n}\n\nexport async function startBunServer(options?: Partial<BunHttpOptions>): Promise<Server<any>> {\n const isTest = getENV('NODE_ENV') === 'test';\n const isCompiling = isMionCompileMode();\n\n if (options) setBunHttpOpts(options);\n\n if (isCompiling) {\n console.log('Compiling routes metadata and skipping mion server initialization...', {\n port: httpOptions.port,\n httpOptions,\n });\n return undefined as any;\n }\n\n const port = httpOptions.port !== 80 ? `:${httpOptions.port}` : '';\n const url = `http://localhost${port}`;\n if (!isTest && !isCompiling) console.log(`mion bun server running on ${url}`);\n const server = Bun.serve({\n maxRequestBodySize: httpOptions.maxBodySize,\n port: httpOptions.port,\n ...httpOptions.options,\n\n async fetch(req) {\n const reqUrl = req.url;\n const pathStart = reqUrl.indexOf('/', 8);\n const queryStart = reqUrl.indexOf('?', pathStart);\n const path = queryStart === -1 ? reqUrl.slice(pathStart) : reqUrl.slice(pathStart, queryStart);\n const urlQuery = queryStart === -1 ? undefined : reqUrl.slice(queryStart + 1);\n const contentType = req.headers.get('content-type') || '';\n const isBinary = contentType.startsWith('application/octet-stream');\n let rawBody: any = req.body\n ? isBinary\n ? await req.arrayBuffer()\n : ((await req.json()) as Record<string, unknown>)\n : undefined;\n let reqBodyType: SerializerCode = isBinary ? SerializerModes.binary : SerializerModes.json;\n const queryBody = decodeQueryBody(urlQuery, rawBody);\n if (queryBody) {\n rawBody = queryBody.rawBody;\n reqBodyType = queryBody.bodyType;\n }\n const responseHeaders = new Headers(defaultHeaders);\n\n try {\n const platformResp = await dispatchRoute(\n path,\n rawBody,\n req.headers,\n responseHeaders,\n req,\n undefined,\n reqBodyType,\n urlQuery\n );\n return reply(platformResp, responseHeaders);\n } catch (e) {\n const error =\n e instanceof RpcError\n ? e\n : new RpcError({\n publicMessage: 'Unknown Error',\n type: 'unknown-error',\n originalError: e as Error,\n });\n return fatalFail(error, responseHeaders);\n }\n },\n error(errReq) {\n const responseHeaders = new Headers({\n server: '@mionjs',\n ...httpOptions.defaultResponseHeaders,\n });\n const error =\n errReq instanceof RpcError\n ? errReq\n : new RpcError({\n publicMessage: 'Connection Error',\n type: 'response-connection-error',\n originalError: errReq,\n });\n return fatalFail(error, responseHeaders);\n },\n });\n\n const shutdownHandler = function () {\n if (!isTest) console.log(`Shutting down mion server on ${url}`);\n server.stop(true);\n process.exit(0);\n };\n\n process.on('SIGINT', shutdownHandler);\n process.on('SIGTERM', shutdownHandler);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {options: _nativeOpts, ...serializableConfig} = httpOptions;\n setPlatformConfig(serializableConfig);\n\n // Hint to Bun's GC after initialization to clean up any temporary allocations\n if (typeof Bun !== 'undefined' && Bun.gc) {\n Bun.gc(false);\n }\n return server;\n}\n\n// only called whe there is an htt error or weird unhandled route errors\nfunction fatalFail(err: RpcError<string>, responseHeaders: any): Response {\n const routeResponse = getRouterFatalErrorResponse(err, responseHeaders);\n return reply(routeResponse, responseHeaders);\n}\n\nfunction reply(\n mionResp: MionResponse,\n // TODO: fix issue with Native Bun Headers type messing with Node Headers type\n // responseHeaders: Headers,\n responseHeaders: any\n): Response {\n const bodyType = mionResp.serializer;\n switch (bodyType) {\n case SerializerModes.stringifyJson: {\n // Pass string directly to Response - Bun handles encoding internally\n // and calculates content-length automatically. This avoids TextEncoder allocation.\n // content-type already set by serializer\n return new Response(mionResp.rawBody as string, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.json: {\n // Platform adapter uses Response.json() which handles JSON.stringify internally\n return Response.json(mionResp.body, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.binary: {\n const serializer = mionResp.binSerializer!;\n responseHeaders.set('content-length', String(serializer.getLength()));\n // content-type already set by serializer\n const response = new Response(serializer.getBufferView(), {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n // Mark buffer as ended immediately - Bun copies the buffer to the response\n serializer.markAsEnded();\n return response;\n }\n default: {\n const error = new RpcError({\n publicMessage: 'unknown-mion-response-format',\n type: 'unknown-error',\n errorData: {bodyType},\n });\n return fatalFail(error, responseHeaders);\n }\n }\n}\n"],"names":["DEFAULT_BUN_HTTP_OPTIONS","resetRouter","getENV","isMionCompileMode","SerializerModes","decodeQueryBody","dispatchRoute","RpcError","setPlatformConfig","getRouterFatalErrorResponse"],"mappings":"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"}
|
package/.dist/esm/src/bunHttp.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resetRouter, decodeQueryBody, dispatchRoute, getRouterFatalErrorResponse } from "@mionjs/router";
|
|
1
|
+
import { resetRouter, decodeQueryBody, dispatchRoute, setPlatformConfig, getRouterFatalErrorResponse } from "@mionjs/router";
|
|
2
2
|
import { DEFAULT_BUN_HTTP_OPTIONS } from "./constants.js";
|
|
3
3
|
import { getENV, isMionCompileMode, RpcError, SerializerModes } from "@mionjs/core";
|
|
4
4
|
let httpOptions = { ...DEFAULT_BUN_HTTP_OPTIONS };
|
|
@@ -91,6 +91,8 @@ async function startBunServer(options) {
|
|
|
91
91
|
};
|
|
92
92
|
process.on("SIGINT", shutdownHandler);
|
|
93
93
|
process.on("SIGTERM", shutdownHandler);
|
|
94
|
+
const { options: _nativeOpts, ...serializableConfig } = httpOptions;
|
|
95
|
+
setPlatformConfig(serializableConfig);
|
|
94
96
|
if (typeof Bun !== "undefined" && Bun.gc) {
|
|
95
97
|
Bun.gc(false);
|
|
96
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bunHttp.js","sources":["../../../src/bunHttp.ts"],"sourcesContent":["/* ########\n * 2023 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {\n dispatchRoute,\n getRouterFatalErrorResponse,\n resetRouter,\n decodeQueryBody,\n MionResponse as MionResponse,\n} from '@mionjs/router';\nimport {DEFAULT_BUN_HTTP_OPTIONS} from './constants.ts';\nimport type {BunHttpOptions} from './types.ts';\nimport {getENV, isMionCompileMode, SerializerModes} from '@mionjs/core';\nimport type {SerializerCode} from '@mionjs/core';\nimport {RpcError} from '@mionjs/core';\nimport {Server} from 'bun';\n\n// ############# PRIVATE STATE #############\n\nlet httpOptions: Readonly<BunHttpOptions> = {...DEFAULT_BUN_HTTP_OPTIONS};\nlet defaultHeaders: [string, string][] = [['server', '@mionjs']];\n\nexport function resetBunHttpOpts() {\n httpOptions = {...DEFAULT_BUN_HTTP_OPTIONS};\n defaultHeaders = [['server', '@mionjs']];\n resetRouter();\n}\n\nexport function setBunHttpOpts(options?: Partial<BunHttpOptions>) {\n httpOptions = {\n ...httpOptions,\n ...options,\n };\n // Pre-build default headers array once\n defaultHeaders = [['server', '@mionjs'], ...Object.entries(httpOptions.defaultResponseHeaders)];\n return httpOptions;\n}\n\nexport async function startBunServer(options?: Partial<BunHttpOptions>): Promise<Server<any>> {\n const isTest = getENV('NODE_ENV') === 'test';\n const isCompiling = isMionCompileMode();\n\n if (options) setBunHttpOpts(options);\n\n if (isCompiling) {\n console.log('Compiling routes metadata and skipping mion server initialization...', {\n port: httpOptions.port,\n httpOptions,\n });\n return undefined as any;\n }\n\n const port = httpOptions.port !== 80 ? `:${httpOptions.port}` : '';\n const url = `http://localhost${port}`;\n if (!isTest && !isCompiling) console.log(`mion bun server running on ${url}`);\n const server = Bun.serve({\n maxRequestBodySize: httpOptions.maxBodySize,\n port: httpOptions.port,\n ...httpOptions.options,\n\n async fetch(req) {\n const reqUrl = req.url;\n const pathStart = reqUrl.indexOf('/', 8);\n const queryStart = reqUrl.indexOf('?', pathStart);\n const path = queryStart === -1 ? reqUrl.slice(pathStart) : reqUrl.slice(pathStart, queryStart);\n const urlQuery = queryStart === -1 ? undefined : reqUrl.slice(queryStart + 1);\n const contentType = req.headers.get('content-type') || '';\n const isBinary = contentType.startsWith('application/octet-stream');\n let rawBody: any = req.body\n ? isBinary\n ? await req.arrayBuffer()\n : ((await req.json()) as Record<string, unknown>)\n : undefined;\n let reqBodyType: SerializerCode = isBinary ? SerializerModes.binary : SerializerModes.json;\n const queryBody = decodeQueryBody(urlQuery, rawBody);\n if (queryBody) {\n rawBody = queryBody.rawBody;\n reqBodyType = queryBody.bodyType;\n }\n const responseHeaders = new Headers(defaultHeaders);\n\n try {\n const platformResp = await dispatchRoute(\n path,\n rawBody,\n req.headers,\n responseHeaders,\n req,\n undefined,\n reqBodyType,\n urlQuery\n );\n return reply(platformResp, responseHeaders);\n } catch (e) {\n const error =\n e instanceof RpcError\n ? e\n : new RpcError({\n publicMessage: 'Unknown Error',\n type: 'unknown-error',\n originalError: e as Error,\n });\n return fatalFail(error, responseHeaders);\n }\n },\n error(errReq) {\n const responseHeaders = new Headers({\n server: '@mionjs',\n ...httpOptions.defaultResponseHeaders,\n });\n const error =\n errReq instanceof RpcError\n ? errReq\n : new RpcError({\n publicMessage: 'Connection Error',\n type: 'response-connection-error',\n originalError: errReq,\n });\n return fatalFail(error, responseHeaders);\n },\n });\n\n const shutdownHandler = function () {\n if (!isTest) console.log(`Shutting down mion server on ${url}`);\n server.stop(true);\n process.exit(0);\n };\n\n process.on('SIGINT', shutdownHandler);\n process.on('SIGTERM', shutdownHandler);\n\n // Hint to Bun's GC after initialization to clean up any temporary allocations\n if (typeof Bun !== 'undefined' && Bun.gc) {\n Bun.gc(false);\n }\n return server;\n}\n\n// only called whe there is an htt error or weird unhandled route errors\nfunction fatalFail(err: RpcError<string>, responseHeaders: any): Response {\n const routeResponse = getRouterFatalErrorResponse(err, responseHeaders);\n return reply(routeResponse, responseHeaders);\n}\n\nfunction reply(\n mionResp: MionResponse,\n // TODO: fix issue with Native Bun Headers type messing with Node Headers type\n // responseHeaders: Headers,\n responseHeaders: any\n): Response {\n const bodyType = mionResp.serializer;\n switch (bodyType) {\n case SerializerModes.stringifyJson: {\n // Pass string directly to Response - Bun handles encoding internally\n // and calculates content-length automatically. This avoids TextEncoder allocation.\n // content-type already set by serializer\n return new Response(mionResp.rawBody as string, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.json: {\n // Platform adapter uses Response.json() which handles JSON.stringify internally\n return Response.json(mionResp.body, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.binary: {\n const serializer = mionResp.binSerializer!;\n responseHeaders.set('content-length', String(serializer.getLength()));\n // content-type already set by serializer\n const response = new Response(serializer.getBufferView(), {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n // Mark buffer as ended immediately - Bun copies the buffer to the response\n serializer.markAsEnded();\n return response;\n }\n default: {\n const error = new RpcError({\n publicMessage: 'unknown-mion-response-format',\n type: 'unknown-error',\n errorData: {bodyType},\n });\n return fatalFail(error, responseHeaders);\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bunHttp.js","sources":["../../../src/bunHttp.ts"],"sourcesContent":["/* ########\n * 2023 mion\n * Author: Ma-jerez\n * License: MIT\n * The software is provided \"as is\", without warranty of any kind.\n * ######## */\n\nimport {\n dispatchRoute,\n getRouterFatalErrorResponse,\n resetRouter,\n decodeQueryBody,\n setPlatformConfig,\n MionResponse as MionResponse,\n} from '@mionjs/router';\nimport {DEFAULT_BUN_HTTP_OPTIONS} from './constants.ts';\nimport type {BunHttpOptions} from './types.ts';\nimport {getENV, isMionCompileMode, SerializerModes} from '@mionjs/core';\nimport type {SerializerCode} from '@mionjs/core';\nimport {RpcError} from '@mionjs/core';\nimport {Server} from 'bun';\n\n// ############# PRIVATE STATE #############\n\nlet httpOptions: Readonly<BunHttpOptions> = {...DEFAULT_BUN_HTTP_OPTIONS};\nlet defaultHeaders: [string, string][] = [['server', '@mionjs']];\n\nexport function resetBunHttpOpts() {\n httpOptions = {...DEFAULT_BUN_HTTP_OPTIONS};\n defaultHeaders = [['server', '@mionjs']];\n resetRouter();\n}\n\nexport function setBunHttpOpts(options?: Partial<BunHttpOptions>) {\n httpOptions = {\n ...httpOptions,\n ...options,\n };\n // Pre-build default headers array once\n defaultHeaders = [['server', '@mionjs'], ...Object.entries(httpOptions.defaultResponseHeaders)];\n return httpOptions;\n}\n\nexport async function startBunServer(options?: Partial<BunHttpOptions>): Promise<Server<any>> {\n const isTest = getENV('NODE_ENV') === 'test';\n const isCompiling = isMionCompileMode();\n\n if (options) setBunHttpOpts(options);\n\n if (isCompiling) {\n console.log('Compiling routes metadata and skipping mion server initialization...', {\n port: httpOptions.port,\n httpOptions,\n });\n return undefined as any;\n }\n\n const port = httpOptions.port !== 80 ? `:${httpOptions.port}` : '';\n const url = `http://localhost${port}`;\n if (!isTest && !isCompiling) console.log(`mion bun server running on ${url}`);\n const server = Bun.serve({\n maxRequestBodySize: httpOptions.maxBodySize,\n port: httpOptions.port,\n ...httpOptions.options,\n\n async fetch(req) {\n const reqUrl = req.url;\n const pathStart = reqUrl.indexOf('/', 8);\n const queryStart = reqUrl.indexOf('?', pathStart);\n const path = queryStart === -1 ? reqUrl.slice(pathStart) : reqUrl.slice(pathStart, queryStart);\n const urlQuery = queryStart === -1 ? undefined : reqUrl.slice(queryStart + 1);\n const contentType = req.headers.get('content-type') || '';\n const isBinary = contentType.startsWith('application/octet-stream');\n let rawBody: any = req.body\n ? isBinary\n ? await req.arrayBuffer()\n : ((await req.json()) as Record<string, unknown>)\n : undefined;\n let reqBodyType: SerializerCode = isBinary ? SerializerModes.binary : SerializerModes.json;\n const queryBody = decodeQueryBody(urlQuery, rawBody);\n if (queryBody) {\n rawBody = queryBody.rawBody;\n reqBodyType = queryBody.bodyType;\n }\n const responseHeaders = new Headers(defaultHeaders);\n\n try {\n const platformResp = await dispatchRoute(\n path,\n rawBody,\n req.headers,\n responseHeaders,\n req,\n undefined,\n reqBodyType,\n urlQuery\n );\n return reply(platformResp, responseHeaders);\n } catch (e) {\n const error =\n e instanceof RpcError\n ? e\n : new RpcError({\n publicMessage: 'Unknown Error',\n type: 'unknown-error',\n originalError: e as Error,\n });\n return fatalFail(error, responseHeaders);\n }\n },\n error(errReq) {\n const responseHeaders = new Headers({\n server: '@mionjs',\n ...httpOptions.defaultResponseHeaders,\n });\n const error =\n errReq instanceof RpcError\n ? errReq\n : new RpcError({\n publicMessage: 'Connection Error',\n type: 'response-connection-error',\n originalError: errReq,\n });\n return fatalFail(error, responseHeaders);\n },\n });\n\n const shutdownHandler = function () {\n if (!isTest) console.log(`Shutting down mion server on ${url}`);\n server.stop(true);\n process.exit(0);\n };\n\n process.on('SIGINT', shutdownHandler);\n process.on('SIGTERM', shutdownHandler);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {options: _nativeOpts, ...serializableConfig} = httpOptions;\n setPlatformConfig(serializableConfig);\n\n // Hint to Bun's GC after initialization to clean up any temporary allocations\n if (typeof Bun !== 'undefined' && Bun.gc) {\n Bun.gc(false);\n }\n return server;\n}\n\n// only called whe there is an htt error or weird unhandled route errors\nfunction fatalFail(err: RpcError<string>, responseHeaders: any): Response {\n const routeResponse = getRouterFatalErrorResponse(err, responseHeaders);\n return reply(routeResponse, responseHeaders);\n}\n\nfunction reply(\n mionResp: MionResponse,\n // TODO: fix issue with Native Bun Headers type messing with Node Headers type\n // responseHeaders: Headers,\n responseHeaders: any\n): Response {\n const bodyType = mionResp.serializer;\n switch (bodyType) {\n case SerializerModes.stringifyJson: {\n // Pass string directly to Response - Bun handles encoding internally\n // and calculates content-length automatically. This avoids TextEncoder allocation.\n // content-type already set by serializer\n return new Response(mionResp.rawBody as string, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.json: {\n // Platform adapter uses Response.json() which handles JSON.stringify internally\n return Response.json(mionResp.body, {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n }\n case SerializerModes.binary: {\n const serializer = mionResp.binSerializer!;\n responseHeaders.set('content-length', String(serializer.getLength()));\n // content-type already set by serializer\n const response = new Response(serializer.getBufferView(), {\n status: mionResp.statusCode,\n headers: responseHeaders,\n });\n // Mark buffer as ended immediately - Bun copies the buffer to the response\n serializer.markAsEnded();\n return response;\n }\n default: {\n const error = new RpcError({\n publicMessage: 'unknown-mion-response-format',\n type: 'unknown-error',\n errorData: {bodyType},\n });\n return fatalFail(error, responseHeaders);\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mionjs/platform-bun",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "mion server for bun runtime",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -56,13 +56,13 @@
|
|
|
56
56
|
"url": "https://github.com/MionKit/mion/issues"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@mionjs/core": "^0.8.
|
|
60
|
-
"@mionjs/router": "^0.8.
|
|
59
|
+
"@mionjs/core": "^0.8.4",
|
|
60
|
+
"@mionjs/router": "^0.8.4"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@deepkit/core": "1.0.19",
|
|
64
64
|
"@deepkit/type-compiler": "1.0.19",
|
|
65
65
|
"bun-types": "latest"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "c53dbf8bc494d950876e0bf171cb15078356a6cf"
|
|
68
68
|
}
|