UNPKG

@elysiajs/node

Version:

Plugin for Elysia for retreiving Bearer token

119 lines (118 loc) 3.69 kB
// src/index.ts import { WebStandardAdapter } from "elysia/adapter/web-standard"; import { serve } from "@hono/node-server"; import { isNumericString, randomId } from "elysia/utils"; var node = () => { return { ...WebStandardAdapter, name: "node", listen(app) { return (options, callback) => { if (typeof options === "string") { if (!isNumericString(options)) throw new Error("Port must be a numeric value"); options = parseInt(options); } const { promise: serverInfo, resolve: setServerInfo } = Promise.withResolvers(); app.server = serverInfo; const serverOptions = typeof options === "number" ? { port: options, fetch: app.fetch } : { ...options, // @ts-ignore host: options?.hostname }; let server = serve(serverOptions, () => { const address = server.address(); const hostname = typeof address === "string" ? address : address ? address.address : "localhost"; const port = typeof address === "string" ? 0 : address?.port ?? 0; const serverInfo2 = { ...server, id: randomId(), development: process.env.NODE_ENV !== "production", fetch: app.fetch, hostname, // @ts-expect-error get pendingRequests() { const { promise, resolve, reject } = Promise.withResolvers(); server.getConnections((error, total) => { if (error) reject(error); resolve(total); }); return promise; }, get pendingWebSockets() { return 0; }, port, publish() { throw new Error( "This adapter doesn't support uWebSocket Publish method" ); }, ref() { server.ref(); }, unref() { server.unref(); }, reload() { server.close(() => { server = serve(serverOptions); }); }, requestIP() { throw new Error( "This adapter doesn't support Bun requestIP method" ); }, stop() { server.close(); }, upgrade() { throw new Error( "This adapter doesn't support Web Standard Upgrade method" ); }, url: new URL( `http://${hostname === "::" ? "localhost" : hostname}:${port}` ), [Symbol.dispose]() { server.close(); }, // @ts-expect-error additional property raw: server }; setServerInfo(serverInfo2); if (callback) callback(serverInfo2); app.modules.then(() => { try { serverInfo2.reload( typeof options === "object" ? options : { port: options } ); } catch { } }); }); app.router.http.build?.(); if (app.event.start) for (let i = 0; i < app.event.start.length; i++) app.event.start[i].fn(this); process.on("beforeExit", () => { server.close(); if (app.event.stop) for (let i = 0; i < app.event.stop.length; i++) app.event.stop[i].fn(this); }); }; } }; }; var index_default = node; export { index_default as default, node };