Skip to content

Commit 2a24832

Browse files
committed
Added utilities for websockets
1 parent 5c7948f commit 2a24832

8 files changed

Lines changed: 76 additions & 9 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ This package lets you parse payload coming from http requests ( + multipart). Fu
77
## parseSimpleBody and parseFormDataBody
88

99
(sorry, docs are now incomplete. Look into <a href="./index.d.ts">TS declaration file</a> for more)
10+
11+
(and also importing "@ublitzjs/payload/ws" gives you 2 special high-performant cross-platform functions for easier handling of websocket messages)

index.cjs renamed to cjs/index.cjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ var { EventEmitter } = require("tseep");
33
var { tooLargeBody } = require("@ublitzjs/core");
44
var busboy = require("busboy");
55
var { nanoid } = require("nanoid");
6-
var { createWriteStream, WriteStream } = require("node:fs");
6+
var { createWriteStream} = require("node:fs");
77
var { Buffer } = require("node:buffer");
88
var { promises: fs } = require("node:fs");
99
var wroteToDiskFileEvent = Symbol(),

cjs/ws.cjs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var encoder = new TextEncoder(), decoder = new TextDecoder();
2+
function preParseWSMessage(rawMessage){
3+
var view = new Uint8Array(rawMessage);
4+
var eventLength = view[0]
5+
if (eventLength>100) throw new Error("event size > 100 bytes")
6+
if (eventLength + 2 > rawMessage.byteLength) throw new Error("Malformed payload")
7+
return {
8+
event: decoder.decode(view.subarray(1, 1 + eventLength)),
9+
message: view.subarray(1 + eventLength)
10+
}
11+
}
12+
function encodeWSMessage(event, payload){
13+
var encodedEvent = encoder.encode(event)
14+
if(encodedEvent.length > 100) throw new Error("event size > 100 bytes")
15+
var totalLength = 1 + encodedEvent.length + payload.byteLength
16+
var message = new Uint8Array(totalLength);
17+
message[0] = encodedEvent.length;
18+
message.set(encodedEvent, 1);
19+
message.set(payload instanceof Uint8Array
20+
? payload : new Uint8Array(payload),
21+
1 + encodedEvent.length
22+
);
23+
return message;
24+
}
25+
module.exports = {preParseWSMessage, encodeWSMessage}

index.mjs renamed to mjs/index.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { EventEmitter } from "tseep";
33
import { tooLargeBody } from "@ublitzjs/core";
44
import busboy from "busboy";
55
import { nanoid } from "nanoid";
6-
import { createWriteStream, WriteStream } from "node:fs";
6+
import { createWriteStream } from "node:fs";
77
import { Buffer } from "node:buffer";
88
import { promises as fs } from "node:fs";
99
var wroteToDiskFileEvent = Symbol(),

mjs/ws.mjs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
var encoder = new TextEncoder(), decoder = new TextDecoder();
2+
function preParseWSMessage(rawMessage){
3+
var view = new Uint8Array(rawMessage);
4+
var eventLength = view[0]
5+
if (eventLength>100) throw new Error("event size > 100 bytes")
6+
if (eventLength + 2 > rawMessage.byteLength) throw new Error("Malformed payload")
7+
return {
8+
event: decoder.decode(view.subarray(1, 1 + eventLength)),
9+
message: view.subarray(1 + eventLength)
10+
}
11+
}
12+
function encodeWSMessage(event, payload){
13+
var encodedEvent = encoder.encode(event)
14+
if(encodedEvent.length > 100) throw new Error("event size > 100 bytes")
15+
var totalLength = 1 + encodedEvent.length + payload.byteLength
16+
var message = new Uint8Array(totalLength);
17+
message[0] = encodedEvent.length;
18+
message.set(encodedEvent, 1);
19+
message.set(payload instanceof Uint8Array
20+
? payload : new Uint8Array(payload),
21+
1 + encodedEvent.length
22+
);
23+
return message;
24+
}
25+
export {preParseWSMessage, encodeWSMessage}
26+

package.json

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
11
{
22
"name": "@ublitzjs/payload",
3-
"version": "0.0.1",
3+
"version": "0.1.0",
44
"exports": {
5-
"types": "./index.d.ts",
6-
"import": "./index.mjs",
7-
"require": "./index.cjs"
5+
".": {
6+
"types": "./types/index.d.ts",
7+
"import": "./mjs/index.mjs",
8+
"require": "./cjs/index.cjs"
9+
},
10+
"./ws": {
11+
"types": "./types/ws.d.ts",
12+
"import": "./mjs/ws.mjs",
13+
"require": "./cjs/ws.cjs"
14+
}
815
},
916
"dependencies": {
1017
"nanoid": "^5.1.5",
1118
"tseep": "^1.3.1",
12-
"@ublitzjs/core": "^0.0.1",
19+
"@ublitzjs/core": "^0.1.0",
1320
"busboy": "^1.6.0"
1421
},
1522
"devDependencies": {
16-
"vitest": "^3.1.4",
17-
"undici": "^7.10.0"
23+
"@types/busboy": "^1.5.4",
24+
"@types/node": "^24.3.1",
25+
"undici": "^7.10.0",
26+
"vitest": "^3.1.4"
1827
},
1928
"publishConfig": {
2029
"access": "public"
File renamed without changes.

types/ws.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export function preParseWSMessage(rawMessage: ArrayBuffer): {
2+
event: string;
3+
message: Uint8Array<ArrayBuffer>;
4+
}
5+
export function encodeWSMessage(event: string, payload: Uint8Array | ArrayBufferLike): Uint8Array

0 commit comments

Comments
 (0)