trpc-uwebsockets 0.9.3 → 0.9.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.
- package/dist/utils.js +17 -22
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- package/src/utils.ts +18 -19
- package/test/index.spec.ts +29 -6
package/dist/utils.js
CHANGED
|
@@ -26,30 +26,25 @@ function readPostBody(method, res) {
|
|
|
26
26
|
}
|
|
27
27
|
let buffer;
|
|
28
28
|
res.onData((ab, isLast) => {
|
|
29
|
+
//resolve right away if there is only one chunk
|
|
30
|
+
if (buffer === undefined && isLast) {
|
|
31
|
+
resolve({
|
|
32
|
+
ok: true,
|
|
33
|
+
data: Buffer.from(ab).toString(),
|
|
34
|
+
});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
29
37
|
const chunk = Buffer.from(ab);
|
|
38
|
+
//else accumulate
|
|
39
|
+
if (buffer)
|
|
40
|
+
buffer = Buffer.concat([buffer, chunk]);
|
|
41
|
+
else
|
|
42
|
+
buffer = Buffer.concat([chunk]);
|
|
30
43
|
if (isLast) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
data: buffer.toString(), // do i need utf8?
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
// only a single chunk was recieved
|
|
40
|
-
resolve({
|
|
41
|
-
ok: true,
|
|
42
|
-
data: chunk.toString(),
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
if (buffer) {
|
|
48
|
-
buffer = Buffer.concat([buffer, chunk]);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
buffer = Buffer.concat([chunk]);
|
|
52
|
-
}
|
|
44
|
+
resolve({
|
|
45
|
+
ok: true,
|
|
46
|
+
data: buffer.toString(),
|
|
47
|
+
});
|
|
53
48
|
}
|
|
54
49
|
});
|
|
55
50
|
res.onAborted(() => {
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAyC;AAEzC,oDAAoD;AACpD;;EAEE;AAEK,MAAM,WAAW,GACtB,CAAC,OAA+B,EAAE,EAAE,CAAC,CAAC,IAAyB,EAAE,EAAE;IACjE,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,OAAO,gBAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AALS,QAAA,WAAW,eAKpB;AAEJ,SAAgB,YAAY,CAAC,MAAc,EAAE,GAAiB;IAC5D,OAAO,IAAI,OAAO,CAEhB,CAAC,OAAO,EAAE,EAAE;QACZ,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,yBAAyB;YACzB,OAAO,CAAC;gBACN,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;SACJ;QAED,IAAI,MAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAyC;AAEzC,oDAAoD;AACpD;;EAEE;AAEK,MAAM,WAAW,GACtB,CAAC,OAA+B,EAAE,EAAE,CAAC,CAAC,IAAyB,EAAE,EAAE;IACjE,IAAI,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,OAAO,gBAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC;AALS,QAAA,WAAW,eAKpB;AAEJ,SAAgB,YAAY,CAAC,MAAc,EAAE,GAAiB;IAC5D,OAAO,IAAI,OAAO,CAEhB,CAAC,OAAO,EAAE,EAAE;QACZ,IAAI,MAAM,IAAI,KAAK,EAAE;YACnB,yBAAyB;YACzB,OAAO,CAAC;gBACN,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,SAAS;aAChB,CAAC,CAAC;SACJ;QAED,IAAI,MAAc,CAAC;QAEnB,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE;YACxB,+CAA+C;YAC/C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,EAAE;gBAClC,OAAO,CAAC;oBACN,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;iBACjC,CAAC,CAAC;gBACH,OAAO;aACR;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE9B,iBAAiB;YACjB,IAAI,MAAM;gBAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;;gBAC/C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAErC,IAAI,MAAM,EAAE;gBACV,OAAO,CAAC;oBACN,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;iBACxB,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;YACjB,OAAO,CAAC;gBACN,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;aACxD,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AA7CD,oCA6CC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"private": false,
|
|
3
3
|
"name": "trpc-uwebsockets",
|
|
4
4
|
"description": "tRPC adapter for uWebSockets.js server",
|
|
5
|
-
"version": "0.9.
|
|
5
|
+
"version": "0.9.4",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"type": "commonjs",
|
|
8
8
|
"types": "./types/index.d.ts",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"test:coverage": "jest --coverage",
|
|
16
16
|
"test:publish": "yarn test && yarn build && yarn pack",
|
|
17
17
|
"prebuild": "yarn clean",
|
|
18
|
-
"prepublishOnly": "yarn prettier && yarn lint && yarn build",
|
|
18
|
+
"prepublishOnly": "yarn prettier && yarn lint && yarn test && yarn build",
|
|
19
19
|
"clean": "rimraf -rf ./dist && rimraf -rf ./types && rimraf -rf ./*-*.tgz",
|
|
20
20
|
"format": "yarn prettier && yarn lint",
|
|
21
21
|
"lint": "eslint . --ext .ts --fix",
|
package/src/utils.ts
CHANGED
|
@@ -25,29 +25,28 @@ export function readPostBody(method: string, res: HttpResponse) {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
let buffer: Buffer;
|
|
28
|
+
|
|
28
29
|
res.onData((ab, isLast) => {
|
|
30
|
+
//resolve right away if there is only one chunk
|
|
31
|
+
if (buffer === undefined && isLast) {
|
|
32
|
+
resolve({
|
|
33
|
+
ok: true,
|
|
34
|
+
data: Buffer.from(ab).toString(),
|
|
35
|
+
});
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
29
39
|
const chunk = Buffer.from(ab);
|
|
30
40
|
|
|
41
|
+
//else accumulate
|
|
42
|
+
if (buffer) buffer = Buffer.concat([buffer, chunk]);
|
|
43
|
+
else buffer = Buffer.concat([chunk]);
|
|
44
|
+
|
|
31
45
|
if (isLast) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
data: buffer.toString(), // do i need utf8?
|
|
37
|
-
});
|
|
38
|
-
} else {
|
|
39
|
-
// only a single chunk was recieved
|
|
40
|
-
resolve({
|
|
41
|
-
ok: true,
|
|
42
|
-
data: chunk.toString(),
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
} else {
|
|
46
|
-
if (buffer) {
|
|
47
|
-
buffer = Buffer.concat([buffer, chunk]);
|
|
48
|
-
} else {
|
|
49
|
-
buffer = Buffer.concat([chunk]);
|
|
50
|
-
}
|
|
46
|
+
resolve({
|
|
47
|
+
ok: true,
|
|
48
|
+
data: buffer.toString(),
|
|
49
|
+
});
|
|
51
50
|
}
|
|
52
51
|
});
|
|
53
52
|
|
package/test/index.spec.ts
CHANGED
|
@@ -27,13 +27,23 @@ function makeRouter() {
|
|
|
27
27
|
},
|
|
28
28
|
})
|
|
29
29
|
.query('error', {
|
|
30
|
-
resolve() {
|
|
30
|
+
async resolve() {
|
|
31
31
|
throw new TRPCError({
|
|
32
32
|
code: 'BAD_REQUEST',
|
|
33
33
|
message: 'error as expected',
|
|
34
34
|
});
|
|
35
35
|
},
|
|
36
36
|
})
|
|
37
|
+
.mutation('long-payload', {
|
|
38
|
+
input: z.object({
|
|
39
|
+
ping: z.any(),
|
|
40
|
+
}),
|
|
41
|
+
async resolve({ input }) {
|
|
42
|
+
return {
|
|
43
|
+
pong: input.ping,
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
})
|
|
37
47
|
.mutation('test', {
|
|
38
48
|
input: z.object({
|
|
39
49
|
value: z.string(),
|
|
@@ -114,11 +124,11 @@ async function startServer() {
|
|
|
114
124
|
// need to register everything on the app object,
|
|
115
125
|
// as uWebSockets does not have middleware
|
|
116
126
|
createUWebSocketsHandler(app, '/trpc', {
|
|
117
|
-
onRequest: (req, res) => {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
},
|
|
127
|
+
// onRequest: (req, res) => {
|
|
128
|
+
// // allows for prerequest handling
|
|
129
|
+
// const origin = req.headers.origin ?? '*';
|
|
130
|
+
// res.setHeader('Access-Control-Allow-Origin', origin);
|
|
131
|
+
// },
|
|
122
132
|
router: makeRouter(),
|
|
123
133
|
createContext: makeContext(),
|
|
124
134
|
});
|
|
@@ -237,6 +247,19 @@ test('setting cookies and headers', async () => {
|
|
|
237
247
|
expect(monsterRes.headers.get('x-spooked')).toEqual('true');
|
|
238
248
|
});
|
|
239
249
|
|
|
250
|
+
test('long payload', async () => {
|
|
251
|
+
const client = makeClient({});
|
|
252
|
+
const data = [...Array(50000)].map((x) => 0);
|
|
253
|
+
|
|
254
|
+
expect(
|
|
255
|
+
await client.mutation('long-payload', {
|
|
256
|
+
ping: data,
|
|
257
|
+
})
|
|
258
|
+
).toEqual({
|
|
259
|
+
pong: data,
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
|
|
240
263
|
test('error handling', async () => {
|
|
241
264
|
const indexRes = await fetch(`http://localhost:${testPort}`);
|
|
242
265
|
expect(indexRes.status).toEqual(200);
|