Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@elysiajs/node

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@elysiajs/node - npm Package Compare versions

Comparing version
1.4.3
to
1.4.4
+30
-7
dist/cjs/handle.js

@@ -78,2 +78,26 @@ "use strict";

};
function mergeHeaders(responseHeaders, setHeaders) {
const headers = new Headers(Object.fromEntries(responseHeaders.entries()));
if (setHeaders instanceof Headers)
for (const key of setHeaders.keys()) {
if (key === "set-cookie") {
if (headers.has("set-cookie")) continue;
for (const cookie of setHeaders.getSetCookie())
headers.append("set-cookie", cookie);
} else if (!responseHeaders.has(key))
headers.set(key, setHeaders?.get(key) ?? "");
}
else
for (const key in setHeaders)
if (key === "set-cookie")
headers.append(key, setHeaders[key]);
else if (!responseHeaders.has(key))
headers.set(key, setHeaders[key]);
return headers;
}
function mergeStatus(responseStatus, setStatus) {
if (typeof setStatus === "string") setStatus = import_utils.StatusMap[setStatus];
if (responseStatus === 200) return setStatus;
return responseStatus;
}
var createResponseHandler = (handler) => {

@@ -83,8 +107,4 @@ const handleStream2 = (0, import_utils2.createStreamHandler)(handler);

const newResponse = new import_srvx.FastResponse(response.body, {
headers: Object.assign(
// @ts-ignore
Object.fromEntries(response.headers.entries()),
set2.headers
),
status: response.status ?? set2.status
headers: mergeHeaders(response.headers, set2.headers),
status: mergeStatus(response.status, set2.status)
});

@@ -95,3 +115,6 @@ if (!newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked")

(0, import_utils2.responseToSetHeaders)(newResponse, set2),
request
request,
// @ts-ignore
true
// don't auto-format SSE for pre-formatted Response
);

@@ -98,0 +121,0 @@ return newResponse;

+76
-49

@@ -29,6 +29,6 @@ "use strict";

var import_utils8 = require("elysia/utils");
var import_crossws = require("crossws");
var import_server = require("crossws/server");
// src/ws.ts
var import_crossws = require("crossws");
var import_elysia = require("elysia");

@@ -209,3 +209,38 @@ var import_utils = require("elysia/adapter/utils");

}
return { handler, context: store };
function createConfig(app) {
return (0, import_crossws.defineHooks)({
async upgrade(request) {
const id = request.wsId = randomId();
const response = await app.handle(request);
const context = store[id];
if (!context) return response;
return {
context,
headers: context.data.set.headers
};
},
open(ws) {
const context = ws.context;
context.open(ws);
},
message(ws, message) {
const context = ws.context;
context.message(ws, message.text());
},
close(ws, detail) {
const context = ws.context;
context.close(
// ws is parsed in context.open
ws,
detail.code,
detail.reason
);
},
error(ws, error) {
const context = ws.context;
context.error?.(ws, error);
}
});
}
return { handler, createConfig, context: store };
}

@@ -262,2 +297,26 @@

};
function mergeHeaders(responseHeaders, setHeaders) {
const headers = new Headers(Object.fromEntries(responseHeaders.entries()));
if (setHeaders instanceof Headers)
for (const key of setHeaders.keys()) {
if (key === "set-cookie") {
if (headers.has("set-cookie")) continue;
for (const cookie of setHeaders.getSetCookie())
headers.append("set-cookie", cookie);
} else if (!responseHeaders.has(key))
headers.set(key, setHeaders?.get(key) ?? "");
}
else
for (const key in setHeaders)
if (key === "set-cookie")
headers.append(key, setHeaders[key]);
else if (!responseHeaders.has(key))
headers.set(key, setHeaders[key]);
return headers;
}
function mergeStatus(responseStatus, setStatus) {
if (typeof setStatus === "string") setStatus = import_utils3.StatusMap[setStatus];
if (responseStatus === 200) return setStatus;
return responseStatus;
}
var createResponseHandler = (handler) => {

@@ -267,8 +326,4 @@ const handleStream2 = (0, import_utils4.createStreamHandler)(handler);

const newResponse = new import_srvx.FastResponse(response.body, {
headers: Object.assign(
// @ts-ignore
Object.fromEntries(response.headers.entries()),
set2.headers
),
status: response.status ?? set2.status
headers: mergeHeaders(response.headers, set2.headers),
status: mergeStatus(response.status, set2.status)
});

@@ -279,3 +334,6 @@ if (!newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked")

(0, import_utils4.responseToSetHeaders)(newResponse, set2),
request
request,
// @ts-ignore
true
// don't auto-format SSE for pre-formatted Response
);

@@ -791,47 +849,13 @@ return newResponse;

}
const websocket = (0, import_crossws.defineHooks)({
async upgrade(request) {
const id = request.wsId = (0, import_utils8.randomId)();
const response = await app.handle(request);
const context = ws.context[id];
if (!context) return response;
return {
context,
headers: context.data.set.headers
};
},
open(ws2) {
const context = ws2.context;
context.open(ws2);
},
message(ws2, message) {
const context = ws2.context;
context.message(
ws2,
message.text()
);
},
close(ws2, detail) {
const context = ws2.context;
context.close(
// ws is parsed in context.open
ws2,
detail.code,
detail.reason
);
},
error(ws2, error) {
const context = ws2.context;
context.error?.(ws2, error);
}
});
const serverOptions = typeof options === "number" ? {
port: options,
silent: true,
websocket,
fetch: app.fetch
websocket: ws.createConfig(app),
fetch: app.fetch,
reusePort: true
} : {
reusePort: true,
...options,
silent: true,
websocket,
websocket: ws.createConfig(app),
fetch: app.fetch

@@ -862,2 +886,3 @@ };

publish() {
return 0;
},

@@ -873,2 +898,3 @@ ref() {

server = (0, import_server.serve)(serverOptions);
return serverInfo;
},

@@ -881,3 +907,3 @@ requestIP() {

stop() {
server.close();
return server.close();
},

@@ -895,2 +921,3 @@ upgrade() {

},
// @ts-ignore
raw: server

@@ -897,0 +924,0 @@ };

@@ -8,3 +8,5 @@ import type { ReadStream } from 'fs';

}
export declare function mergeHeaders(responseHeaders: Headers, setHeaders: Context['set']['headers']): Headers;
export declare function mergeStatus(responseStatus: number, setStatus: Context['set']['status']): number | undefined;
export declare const createResponseHandler: (handler: CreateHandlerParameter) => (response: Response, set: Context["set"], request?: Request) => any;
export {};

@@ -24,3 +24,5 @@ "use strict";

createResponseHandler: () => createResponseHandler,
handleFile: () => handleFile
handleFile: () => handleFile,
mergeHeaders: () => mergeHeaders,
mergeStatus: () => mergeStatus
});

@@ -72,2 +74,26 @@ module.exports = __toCommonJS(utils_exports);

};
function mergeHeaders(responseHeaders, setHeaders) {
const headers = new Headers(Object.fromEntries(responseHeaders.entries()));
if (setHeaders instanceof Headers)
for (const key of setHeaders.keys()) {
if (key === "set-cookie") {
if (headers.has("set-cookie")) continue;
for (const cookie of setHeaders.getSetCookie())
headers.append("set-cookie", cookie);
} else if (!responseHeaders.has(key))
headers.set(key, setHeaders?.get(key) ?? "");
}
else
for (const key in setHeaders)
if (key === "set-cookie")
headers.append(key, setHeaders[key]);
else if (!responseHeaders.has(key))
headers.set(key, setHeaders[key]);
return headers;
}
function mergeStatus(responseStatus, setStatus) {
if (typeof setStatus === "string") setStatus = import_utils.StatusMap[setStatus];
if (responseStatus === 200) return setStatus;
return responseStatus;
}
var createResponseHandler = (handler) => {

@@ -77,8 +103,4 @@ const handleStream = (0, import_utils2.createStreamHandler)(handler);

const newResponse = new import_srvx.FastResponse(response.body, {
headers: Object.assign(
// @ts-ignore
Object.fromEntries(response.headers.entries()),
set.headers
),
status: response.status ?? set.status
headers: mergeHeaders(response.headers, set.headers),
status: mergeStatus(response.status, set.status)
});

@@ -89,3 +111,6 @@ if (!newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked")

(0, import_utils2.responseToSetHeaders)(newResponse, set),
request
request,
// @ts-ignore
true
// don't auto-format SSE for pre-formatted Response
);

@@ -98,3 +123,5 @@ return newResponse;

createResponseHandler,
handleFile
handleFile,
mergeHeaders,
mergeStatus
});

@@ -23,3 +23,18 @@ import { Peer, WSError } from 'crossws';

handler: (app: AnyElysia, path: string, options: AnyWSLocalHook) => void;
createConfig: (app: AnyElysia) => {
upgrade(request: Request & {
readonly context?: Record<string, unknown>;
}): Promise<Response | {
context: any;
headers: any;
}>;
open(ws: Peer<import("crossws").AdapterInternal>): void;
message(ws: Peer<import("crossws").AdapterInternal>, message: import("crossws").Message): void;
close(ws: Peer<import("crossws").AdapterInternal>, detail: {
code?: number;
reason?: string;
}): void;
error(ws: Peer<import("crossws").AdapterInternal>, error: WSError): void;
};
context: Record<string, NodeWebSocketContext>;
};

@@ -26,2 +26,3 @@ "use strict";

module.exports = __toCommonJS(ws_exports);
var import_crossws = require("crossws");
var import_elysia = require("elysia");

@@ -202,3 +203,38 @@ var import_utils = require("elysia/adapter/utils");

}
return { handler, context: store };
function createConfig(app) {
return (0, import_crossws.defineHooks)({
async upgrade(request) {
const id = request.wsId = randomId();
const response = await app.handle(request);
const context = store[id];
if (!context) return response;
return {
context,
headers: context.data.set.headers
};
},
open(ws) {
const context = ws.context;
context.open(ws);
},
message(ws, message) {
const context = ws.context;
context.message(ws, message.text());
},
close(ws, detail) {
const context = ws.context;
context.close(
// ws is parsed in context.open
ws,
detail.code,
detail.reason
);
},
error(ws, error) {
const context = ws.context;
context.error?.(ws, error);
}
});
}
return { handler, createConfig, context: store };
}

@@ -205,0 +241,0 @@ // Annotate the CommonJS export names for ESM import in node:

@@ -12,3 +12,3 @@ // src/handle.ts

import { FastResponse as Response } from "srvx";
import { isNotEmpty } from "elysia/utils";
import { isNotEmpty, StatusMap } from "elysia/utils";
import {

@@ -60,2 +60,26 @@ createStreamHandler,

};
function mergeHeaders(responseHeaders, setHeaders) {
const headers = new Headers(Object.fromEntries(responseHeaders.entries()));
if (setHeaders instanceof Headers)
for (const key of setHeaders.keys()) {
if (key === "set-cookie") {
if (headers.has("set-cookie")) continue;
for (const cookie of setHeaders.getSetCookie())
headers.append("set-cookie", cookie);
} else if (!responseHeaders.has(key))
headers.set(key, setHeaders?.get(key) ?? "");
}
else
for (const key in setHeaders)
if (key === "set-cookie")
headers.append(key, setHeaders[key]);
else if (!responseHeaders.has(key))
headers.set(key, setHeaders[key]);
return headers;
}
function mergeStatus(responseStatus, setStatus) {
if (typeof setStatus === "string") setStatus = StatusMap[setStatus];
if (responseStatus === 200) return setStatus;
return responseStatus;
}
var createResponseHandler = (handler) => {

@@ -65,8 +89,4 @@ const handleStream2 = createStreamHandler(handler);

const newResponse = new Response(response.body, {
headers: Object.assign(
// @ts-ignore
Object.fromEntries(response.headers.entries()),
set2.headers
),
status: response.status ?? set2.status
headers: mergeHeaders(response.headers, set2.headers),
status: mergeStatus(response.status, set2.status)
});

@@ -77,3 +97,6 @@ if (!newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked")

responseToSetHeaders(newResponse, set2),
request
request,
// @ts-ignore
true
// don't auto-format SSE for pre-formatted Response
);

@@ -80,0 +103,0 @@ return newResponse;

// src/index.ts
import { WebStandardAdapter } from "elysia/adapter/web-standard";
import { isNumericString, randomId } from "elysia/utils";
import { defineHooks } from "crossws";
import { isNumericString, randomId as randomId2 } from "elysia/utils";
import { serve } from "crossws/server";
// src/ws.ts
import { defineHooks } from "crossws";
import {

@@ -191,3 +191,38 @@ getSchemaValidator,

}
return { handler, context: store };
function createConfig(app) {
return defineHooks({
async upgrade(request) {
const id = request.wsId = randomId();
const response = await app.handle(request);
const context = store[id];
if (!context) return response;
return {
context,
headers: context.data.set.headers
};
},
open(ws) {
const context = ws.context;
context.open(ws);
},
message(ws, message) {
const context = ws.context;
context.message(ws, message.text());
},
close(ws, detail) {
const context = ws.context;
context.close(
// ws is parsed in context.open
ws,
detail.code,
detail.reason
);
},
error(ws, error) {
const context = ws.context;
context.error?.(ws, error);
}
});
}
return { handler, createConfig, context: store };
}

@@ -206,3 +241,3 @@

import { FastResponse as Response } from "srvx";
import { isNotEmpty as isNotEmpty2 } from "elysia/utils";
import { isNotEmpty as isNotEmpty2, StatusMap } from "elysia/utils";
import {

@@ -254,2 +289,26 @@ createStreamHandler,

};
function mergeHeaders(responseHeaders, setHeaders) {
const headers = new Headers(Object.fromEntries(responseHeaders.entries()));
if (setHeaders instanceof Headers)
for (const key of setHeaders.keys()) {
if (key === "set-cookie") {
if (headers.has("set-cookie")) continue;
for (const cookie of setHeaders.getSetCookie())
headers.append("set-cookie", cookie);
} else if (!responseHeaders.has(key))
headers.set(key, setHeaders?.get(key) ?? "");
}
else
for (const key in setHeaders)
if (key === "set-cookie")
headers.append(key, setHeaders[key]);
else if (!responseHeaders.has(key))
headers.set(key, setHeaders[key]);
return headers;
}
function mergeStatus(responseStatus, setStatus) {
if (typeof setStatus === "string") setStatus = StatusMap[setStatus];
if (responseStatus === 200) return setStatus;
return responseStatus;
}
var createResponseHandler = (handler) => {

@@ -259,8 +318,4 @@ const handleStream2 = createStreamHandler(handler);

const newResponse = new Response(response.body, {
headers: Object.assign(
// @ts-ignore
Object.fromEntries(response.headers.entries()),
set2.headers
),
status: response.status ?? set2.status
headers: mergeHeaders(response.headers, set2.headers),
status: mergeStatus(response.status, set2.status)
});

@@ -271,3 +326,6 @@ if (!newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked")

responseToSetHeaders(newResponse, set2),
request
request,
// @ts-ignore
true
// don't auto-format SSE for pre-formatted Response
);

@@ -783,47 +841,13 @@ return newResponse;

}
const websocket = defineHooks({
async upgrade(request) {
const id = request.wsId = randomId();
const response = await app.handle(request);
const context = ws.context[id];
if (!context) return response;
return {
context,
headers: context.data.set.headers
};
},
open(ws2) {
const context = ws2.context;
context.open(ws2);
},
message(ws2, message) {
const context = ws2.context;
context.message(
ws2,
message.text()
);
},
close(ws2, detail) {
const context = ws2.context;
context.close(
// ws is parsed in context.open
ws2,
detail.code,
detail.reason
);
},
error(ws2, error) {
const context = ws2.context;
context.error?.(ws2, error);
}
});
const serverOptions = typeof options === "number" ? {
port: options,
silent: true,
websocket,
fetch: app.fetch
websocket: ws.createConfig(app),
fetch: app.fetch,
reusePort: true
} : {
reusePort: true,
...options,
silent: true,
websocket,
websocket: ws.createConfig(app),
fetch: app.fetch

@@ -837,3 +861,3 @@ };

...server,
id: randomId(),
id: randomId2(),
development: process.env.NODE_ENV !== "production",

@@ -855,2 +879,3 @@ fetch: app.fetch,

publish() {
return 0;
},

@@ -866,2 +891,3 @@ ref() {

server = serve(serverOptions);
return serverInfo;
},

@@ -874,3 +900,3 @@ requestIP() {

stop() {
server.close();
return server.close();
},

@@ -888,2 +914,3 @@ upgrade() {

},
// @ts-ignore
raw: server

@@ -890,0 +917,0 @@ };

@@ -8,3 +8,5 @@ import type { ReadStream } from 'fs';

}
export declare function mergeHeaders(responseHeaders: Headers, setHeaders: Context['set']['headers']): Headers;
export declare function mergeStatus(responseStatus: number, setStatus: Context['set']['status']): number | undefined;
export declare const createResponseHandler: (handler: CreateHandlerParameter) => (response: Response, set: Context["set"], request?: Request) => any;
export {};
// src/utils.ts
import { FastResponse as Response } from "srvx";
import { isNotEmpty } from "elysia/utils";
import { isNotEmpty, StatusMap } from "elysia/utils";
import {

@@ -50,2 +50,26 @@ createStreamHandler,

};
function mergeHeaders(responseHeaders, setHeaders) {
const headers = new Headers(Object.fromEntries(responseHeaders.entries()));
if (setHeaders instanceof Headers)
for (const key of setHeaders.keys()) {
if (key === "set-cookie") {
if (headers.has("set-cookie")) continue;
for (const cookie of setHeaders.getSetCookie())
headers.append("set-cookie", cookie);
} else if (!responseHeaders.has(key))
headers.set(key, setHeaders?.get(key) ?? "");
}
else
for (const key in setHeaders)
if (key === "set-cookie")
headers.append(key, setHeaders[key]);
else if (!responseHeaders.has(key))
headers.set(key, setHeaders[key]);
return headers;
}
function mergeStatus(responseStatus, setStatus) {
if (typeof setStatus === "string") setStatus = StatusMap[setStatus];
if (responseStatus === 200) return setStatus;
return responseStatus;
}
var createResponseHandler = (handler) => {

@@ -55,8 +79,4 @@ const handleStream = createStreamHandler(handler);

const newResponse = new Response(response.body, {
headers: Object.assign(
// @ts-ignore
Object.fromEntries(response.headers.entries()),
set.headers
),
status: response.status ?? set.status
headers: mergeHeaders(response.headers, set.headers),
status: mergeStatus(response.status, set.status)
});

@@ -67,3 +87,6 @@ if (!newResponse.headers.has("content-length") && newResponse.headers.get("transfer-encoding") === "chunked")

responseToSetHeaders(newResponse, set),
request
request,
// @ts-ignore
true
// don't auto-format SSE for pre-formatted Response
);

@@ -75,3 +98,5 @@ return newResponse;

createResponseHandler,
handleFile
handleFile,
mergeHeaders,
mergeStatus
};

@@ -23,3 +23,18 @@ import { Peer, WSError } from 'crossws';

handler: (app: AnyElysia, path: string, options: AnyWSLocalHook) => void;
createConfig: (app: AnyElysia) => {
upgrade(request: Request & {
readonly context?: Record<string, unknown>;
}): Promise<Response | {
context: any;
headers: any;
}>;
open(ws: Peer<import("crossws").AdapterInternal>): void;
message(ws: Peer<import("crossws").AdapterInternal>, message: import("crossws").Message): void;
close(ws: Peer<import("crossws").AdapterInternal>, detail: {
code?: number;
reason?: string;
}): void;
error(ws: Peer<import("crossws").AdapterInternal>, error: WSError): void;
};
context: Record<string, NodeWebSocketContext>;
};
// src/ws.ts
import { defineHooks } from "crossws";
import {

@@ -185,3 +186,38 @@ getSchemaValidator,

}
return { handler, context: store };
function createConfig(app) {
return defineHooks({
async upgrade(request) {
const id = request.wsId = randomId();
const response = await app.handle(request);
const context = store[id];
if (!context) return response;
return {
context,
headers: context.data.set.headers
};
},
open(ws) {
const context = ws.context;
context.open(ws);
},
message(ws, message) {
const context = ws.context;
context.message(ws, message.text());
},
close(ws, detail) {
const context = ws.context;
context.close(
// ws is parsed in context.open
ws,
detail.code,
detail.reason
);
},
error(ws, error) {
const context = ws.context;
context.error?.(ws, error);
}
});
}
return { handler, createConfig, context: store };
}

@@ -188,0 +224,0 @@ export {

{
"name": "@elysiajs/node",
"version": "1.4.3",
"version": "1.4.4",
"description": "Elysia adapter to run Elysia on Node.js",

@@ -8,4 +8,5 @@ "license": "MIT",

"dev": "tsx --watch ./example/index.ts",
"test": "bun run test:node",
"test": "bun run test:node && bun run test:node-cluster",
"test:node": "npm install --prefix ./test/node/cjs/ && npm install --prefix ./test/node/esm/ && node ./test/node/cjs/index.js && node ./test/node/esm/index.js",
"test:node-cluster": "node ./test/cluster/cluster.cjs port && node ./test/cluster/cluster.cjs object && node ./test/cluster/cluster.cjs true && node ./test/cluster/cluster.cjs false",
"build": "bun build.ts",

@@ -16,3 +17,3 @@ "release": "npm run build && npm run test && npm publish --access public"

"crossws": "^0.4.1",
"srvx": "^0.10.0"
"srvx": "^0.11.2"
},

@@ -19,0 +20,0 @@ "peerDependencies": {

Sorry, the diff of this file is too big to display