@trpc/server 10.28.2 → 10.29.0
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/adapters/aws-lambda/index.js +1 -1
- package/dist/adapters/aws-lambda/index.mjs +1 -1
- package/dist/adapters/express.js +5 -4
- package/dist/adapters/express.mjs +5 -4
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts +1 -1
- package/dist/adapters/fastify/fastifyRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fastify/index.js +50 -15
- package/dist/adapters/fastify/index.mjs +50 -15
- package/dist/adapters/fetch/fetchRequestHandler.d.ts.map +1 -1
- package/dist/adapters/fetch/index.js +66 -20
- package/dist/adapters/fetch/index.mjs +66 -20
- package/dist/adapters/next.js +3 -2
- package/dist/adapters/next.mjs +3 -2
- package/dist/adapters/node-http/content-type/form-data/index.js +19 -46
- package/dist/adapters/node-http/content-type/form-data/index.mjs +19 -40
- package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts +7 -3
- package/dist/adapters/node-http/content-type/form-data/streamSlice.d.ts.map +1 -1
- package/dist/adapters/node-http/index.js +5 -4
- package/dist/adapters/node-http/index.mjs +5 -4
- package/dist/adapters/node-http/nodeHTTPRequestHandler.d.ts.map +1 -1
- package/dist/adapters/standalone.js +5 -4
- package/dist/adapters/standalone.mjs +5 -4
- package/dist/batchStreamFormatter-2c1405a1.js +31 -0
- package/dist/batchStreamFormatter-93cdcdd4.js +32 -0
- package/dist/batchStreamFormatter-fc1ffb26.mjs +30 -0
- package/dist/http/batchStreamFormatter.d.ts +24 -0
- package/dist/http/batchStreamFormatter.d.ts.map +1 -0
- package/dist/http/index.d.ts +1 -0
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +3 -1
- package/dist/http/index.mjs +2 -1
- package/dist/http/internals/types.d.ts +7 -0
- package/dist/http/internals/types.d.ts.map +1 -1
- package/dist/http/resolveHTTPResponse.d.ts +36 -2
- package/dist/http/resolveHTTPResponse.d.ts.map +1 -1
- package/dist/{nodeHTTPRequestHandler-bd47641d.js → nodeHTTPRequestHandler-53b9fc2d.js} +44 -12
- package/dist/{nodeHTTPRequestHandler-0f979796.mjs → nodeHTTPRequestHandler-bdad2781.mjs} +42 -13
- package/dist/{nodeHTTPRequestHandler-5bbf93f1.js → nodeHTTPRequestHandler-e637755a.js} +42 -13
- package/dist/resolveHTTPResponse-2bdf2cd7.js +256 -0
- package/dist/resolveHTTPResponse-2c307e04.js +284 -0
- package/dist/resolveHTTPResponse-a9be3d96.mjs +282 -0
- package/package.json +4 -4
- package/src/adapters/fastify/fastifyRequestHandler.ts +64 -17
- package/src/adapters/fetch/fetchRequestHandler.ts +72 -25
- package/src/adapters/node-http/content-type/form-data/streamSlice.ts +19 -21
- package/src/adapters/node-http/nodeHTTPRequestHandler.ts +51 -12
- package/src/http/batchStreamFormatter.ts +29 -0
- package/src/http/index.ts +1 -0
- package/src/http/internals/types.ts +8 -0
- package/src/http/resolveHTTPResponse.ts +335 -124
- package/dist/resolveHTTPResponse-4e576698.mjs +0 -174
- package/dist/resolveHTTPResponse-9523b4e3.js +0 -176
- package/dist/resolveHTTPResponse-ba557d3e.js +0 -166
|
@@ -6,9 +6,6 @@ import { mkdir, rm, unlink, stat } from 'node:fs/promises';
|
|
|
6
6
|
import { tmpdir } from 'node:os';
|
|
7
7
|
import { resolve, dirname, basename, extname } from 'node:path';
|
|
8
8
|
import { promisify } from 'node:util';
|
|
9
|
-
import _class_private_field_get from '@swc/helpers/src/_class_private_field_get.mjs';
|
|
10
|
-
import _class_private_field_init from '@swc/helpers/src/_class_private_field_init.mjs';
|
|
11
|
-
import _class_private_field_set from '@swc/helpers/src/_class_private_field_set.mjs';
|
|
12
9
|
|
|
13
10
|
function stringToArray(s) {
|
|
14
11
|
const utf8 = unescape(encodeURIComponent(s));
|
|
@@ -444,26 +441,25 @@ function createMemoryUploadHandler({ filter , maxPartSize =3000000 } = {}) {
|
|
|
444
441
|
};
|
|
445
442
|
}
|
|
446
443
|
|
|
447
|
-
var _start = /*#__PURE__*/ new WeakMap(), _end = /*#__PURE__*/ new WeakMap(), _offset = /*#__PURE__*/ new WeakMap(), _emitUp = /*#__PURE__*/ new WeakMap(), _emitDown = /*#__PURE__*/ new WeakMap();
|
|
448
444
|
class SliceStream extends Transform {
|
|
449
445
|
_transform(chunk, _, done) {
|
|
450
|
-
|
|
451
|
-
if (!
|
|
452
|
-
|
|
453
|
-
const start = chunk.length - (
|
|
454
|
-
if (
|
|
455
|
-
const end = chunk.length - (
|
|
456
|
-
|
|
446
|
+
this.indexOffset += chunk.length;
|
|
447
|
+
if (!this.emitUp && this.indexOffset >= this.startIndex) {
|
|
448
|
+
this.emitUp = true;
|
|
449
|
+
const start = chunk.length - (this.indexOffset - this.startIndex);
|
|
450
|
+
if (this.indexOffset > this.endIndex) {
|
|
451
|
+
const end = chunk.length - (this.indexOffset - this.endIndex);
|
|
452
|
+
this.emitDown = true;
|
|
457
453
|
this.push(chunk.slice(start, end));
|
|
458
454
|
} else {
|
|
459
455
|
this.push(chunk.slice(start, chunk.length));
|
|
460
456
|
}
|
|
461
457
|
return done();
|
|
462
458
|
}
|
|
463
|
-
if (
|
|
464
|
-
if (
|
|
465
|
-
|
|
466
|
-
this.push(chunk.slice(0, chunk.length - (
|
|
459
|
+
if (this.emitUp && !this.emitDown) {
|
|
460
|
+
if (this.indexOffset >= this.endIndex) {
|
|
461
|
+
this.emitDown = true;
|
|
462
|
+
this.push(chunk.slice(0, chunk.length - (this.indexOffset - this.endIndex)));
|
|
467
463
|
} else {
|
|
468
464
|
this.push(chunk);
|
|
469
465
|
}
|
|
@@ -471,34 +467,17 @@ class SliceStream extends Transform {
|
|
|
471
467
|
}
|
|
472
468
|
return done();
|
|
473
469
|
}
|
|
474
|
-
constructor(
|
|
470
|
+
constructor(startIndex = 0, endIndex = Infinity){
|
|
475
471
|
super();
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
writable: true,
|
|
482
|
-
value: void 0
|
|
483
|
-
});
|
|
484
|
-
_class_private_field_init(this, _offset, {
|
|
485
|
-
writable: true,
|
|
486
|
-
value: 0
|
|
487
|
-
});
|
|
488
|
-
_class_private_field_init(this, _emitUp, {
|
|
489
|
-
writable: true,
|
|
490
|
-
value: false
|
|
491
|
-
});
|
|
492
|
-
_class_private_field_init(this, _emitDown, {
|
|
493
|
-
writable: true,
|
|
494
|
-
value: false
|
|
495
|
-
});
|
|
496
|
-
_class_private_field_set(this, _start, start);
|
|
497
|
-
_class_private_field_set(this, _end, end);
|
|
472
|
+
this.startIndex = startIndex;
|
|
473
|
+
this.endIndex = endIndex;
|
|
474
|
+
this.indexOffset = 0;
|
|
475
|
+
this.emitUp = false;
|
|
476
|
+
this.emitDown = false;
|
|
498
477
|
}
|
|
499
478
|
}
|
|
500
|
-
function streamSlice(
|
|
501
|
-
return new SliceStream(
|
|
479
|
+
function streamSlice(startIndex = 0, endIndex = Infinity) {
|
|
480
|
+
return new SliceStream(startIndex, endIndex);
|
|
502
481
|
}
|
|
503
482
|
|
|
504
483
|
async function readableStreamToString(stream, encoding) {
|
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
import { Transform, TransformCallback } from 'node:stream';
|
|
4
4
|
declare class SliceStream extends Transform {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
private startIndex;
|
|
6
|
+
private endIndex;
|
|
7
|
+
private indexOffset;
|
|
8
|
+
private emitUp;
|
|
9
|
+
private emitDown;
|
|
10
|
+
constructor(startIndex?: number, endIndex?: number);
|
|
7
11
|
_transform(chunk: any, _: BufferEncoding, done: TransformCallback): void;
|
|
8
12
|
}
|
|
9
|
-
export declare function streamSlice(
|
|
13
|
+
export declare function streamSlice(startIndex?: number, endIndex?: number): SliceStream;
|
|
10
14
|
export {};
|
|
11
15
|
//# sourceMappingURL=streamSlice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streamSlice.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/node-http/content-type/form-data/streamSlice.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE3D,cAAM,WAAY,SAAQ,SAAS
|
|
1
|
+
{"version":3,"file":"streamSlice.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/node-http/content-type/form-data/streamSlice.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE3D,cAAM,WAAY,SAAQ,SAAS;IAKrB,OAAO,CAAC,UAAU;IAAM,OAAO,CAAC,QAAQ;IAJpD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEL,UAAU,SAAI,EAAU,QAAQ,SAAW;IAI/D,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;CAiCzE;AAED,wBAAgB,WAAW,CAAC,UAAU,SAAI,EAAE,QAAQ,SAAW,GAAG,WAAW,CAE5E"}
|
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var nodeHTTPRequestHandler = require('../../nodeHTTPRequestHandler-
|
|
6
|
-
require('../../resolveHTTPResponse-9523b4e3.js');
|
|
7
|
-
require('../../config-f3ce0144.js');
|
|
8
|
-
require('../../TRPCError-16b2e52d.js');
|
|
5
|
+
var nodeHTTPRequestHandler = require('../../nodeHTTPRequestHandler-e637755a.js');
|
|
9
6
|
require('../../index-4a823936.js');
|
|
10
7
|
require('../../codes-0eeb600d.js');
|
|
8
|
+
require('../../resolveHTTPResponse-2c307e04.js');
|
|
9
|
+
require('../../config-f3ce0144.js');
|
|
10
|
+
require('../../TRPCError-16b2e52d.js');
|
|
11
11
|
require('../../transformTRPCResponse-48d70ef6.js');
|
|
12
12
|
require('../../contentType-8356d528.js');
|
|
13
|
+
require('../../batchStreamFormatter-93cdcdd4.js');
|
|
13
14
|
require('./content-type/json/index.js');
|
|
14
15
|
require('../../contentType-8c16408e.js');
|
|
15
16
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export { n as nodeHTTPRequestHandler } from '../../nodeHTTPRequestHandler-
|
|
2
|
-
import '../../resolveHTTPResponse-4e576698.mjs';
|
|
3
|
-
import '../../config-65c5b6d1.mjs';
|
|
4
|
-
import '../../TRPCError-2b10c8d2.mjs';
|
|
1
|
+
export { n as nodeHTTPRequestHandler } from '../../nodeHTTPRequestHandler-bdad2781.mjs';
|
|
5
2
|
import '../../index-044a193b.mjs';
|
|
6
3
|
import '../../codes-24aa1ce1.mjs';
|
|
4
|
+
import '../../resolveHTTPResponse-a9be3d96.mjs';
|
|
5
|
+
import '../../config-65c5b6d1.mjs';
|
|
6
|
+
import '../../TRPCError-2b10c8d2.mjs';
|
|
7
7
|
import '../../transformTRPCResponse-3dca0b20.mjs';
|
|
8
8
|
import '../../contentType-acc3be52.mjs';
|
|
9
|
+
import '../../batchStreamFormatter-fc1ffb26.mjs';
|
|
9
10
|
import './content-type/json/index.mjs';
|
|
10
11
|
import '../../contentType-3194ed5f.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeHTTPRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/nodeHTTPRequestHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"nodeHTTPRequestHandler.d.ts","sourceRoot":"","sources":["../../../src/adapters/node-http/nodeHTTPRequestHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAOvC,OAAO,EACL,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAIjB,wBAAsB,sBAAsB,CAC1C,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,eAAe,EAChC,SAAS,SAAS,gBAAgB,EAClC,IAAI,EAAE,6BAA6B,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,iBAkHlE"}
|
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var http = require('node:http');
|
|
6
|
-
var nodeHTTPRequestHandler = require('../nodeHTTPRequestHandler-
|
|
7
|
-
require('../resolveHTTPResponse-9523b4e3.js');
|
|
8
|
-
require('../config-f3ce0144.js');
|
|
9
|
-
require('../TRPCError-16b2e52d.js');
|
|
6
|
+
var nodeHTTPRequestHandler = require('../nodeHTTPRequestHandler-e637755a.js');
|
|
10
7
|
require('../index-4a823936.js');
|
|
11
8
|
require('../codes-0eeb600d.js');
|
|
9
|
+
require('../resolveHTTPResponse-2c307e04.js');
|
|
10
|
+
require('../config-f3ce0144.js');
|
|
11
|
+
require('../TRPCError-16b2e52d.js');
|
|
12
12
|
require('../transformTRPCResponse-48d70ef6.js');
|
|
13
13
|
require('../contentType-8356d528.js');
|
|
14
|
+
require('../batchStreamFormatter-93cdcdd4.js');
|
|
14
15
|
require('./node-http/content-type/json/index.js');
|
|
15
16
|
require('../contentType-8c16408e.js');
|
|
16
17
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import http from 'node:http';
|
|
2
|
-
import { n as nodeHTTPRequestHandler } from '../nodeHTTPRequestHandler-
|
|
3
|
-
import '../resolveHTTPResponse-4e576698.mjs';
|
|
4
|
-
import '../config-65c5b6d1.mjs';
|
|
5
|
-
import '../TRPCError-2b10c8d2.mjs';
|
|
2
|
+
import { n as nodeHTTPRequestHandler } from '../nodeHTTPRequestHandler-bdad2781.mjs';
|
|
6
3
|
import '../index-044a193b.mjs';
|
|
7
4
|
import '../codes-24aa1ce1.mjs';
|
|
5
|
+
import '../resolveHTTPResponse-a9be3d96.mjs';
|
|
6
|
+
import '../config-65c5b6d1.mjs';
|
|
7
|
+
import '../TRPCError-2b10c8d2.mjs';
|
|
8
8
|
import '../transformTRPCResponse-3dca0b20.mjs';
|
|
9
9
|
import '../contentType-acc3be52.mjs';
|
|
10
|
+
import '../batchStreamFormatter-fc1ffb26.mjs';
|
|
10
11
|
import './node-http/content-type/json/index.mjs';
|
|
11
12
|
import '../contentType-3194ed5f.mjs';
|
|
12
13
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a batch response as a line-delimited JSON stream
|
|
3
|
+
* that the `unstable_httpBatchStreamLink` can parse:
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const formatter = getBatchStreamFormatter();
|
|
8
|
+
* res.send(formatter(1, 'response #2'));
|
|
9
|
+
* res.send(formatter(0, 'response #1'));
|
|
10
|
+
* res.send(formatter.end());
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Expected format:
|
|
14
|
+
* ```json
|
|
15
|
+
* {"1":"response #2"
|
|
16
|
+
* ,"0":"response #1"
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
function getBatchStreamFormatter() {
|
|
21
|
+
let first = true;
|
|
22
|
+
function format(index, string) {
|
|
23
|
+
const prefix = first ? '{' : ',';
|
|
24
|
+
first = false;
|
|
25
|
+
return `${prefix}"${index}":${string}\n`;
|
|
26
|
+
}
|
|
27
|
+
format.end = () => '}';
|
|
28
|
+
return format;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { getBatchStreamFormatter as g };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Format a batch response as a line-delimited JSON stream
|
|
5
|
+
* that the `unstable_httpBatchStreamLink` can parse:
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const formatter = getBatchStreamFormatter();
|
|
10
|
+
* res.send(formatter(1, 'response #2'));
|
|
11
|
+
* res.send(formatter(0, 'response #1'));
|
|
12
|
+
* res.send(formatter.end());
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Expected format:
|
|
16
|
+
* ```json
|
|
17
|
+
* {"1":"response #2"
|
|
18
|
+
* ,"0":"response #1"
|
|
19
|
+
* }
|
|
20
|
+
* ```
|
|
21
|
+
*/ function getBatchStreamFormatter() {
|
|
22
|
+
let first = true;
|
|
23
|
+
function format(index, string) {
|
|
24
|
+
const prefix = first ? '{' : ',';
|
|
25
|
+
first = false;
|
|
26
|
+
return `${prefix}"${index}":${string}\n`;
|
|
27
|
+
}
|
|
28
|
+
format.end = ()=>'}';
|
|
29
|
+
return format;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
exports.getBatchStreamFormatter = getBatchStreamFormatter;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a batch response as a line-delimited JSON stream
|
|
3
|
+
* that the `unstable_httpBatchStreamLink` can parse:
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const formatter = getBatchStreamFormatter();
|
|
8
|
+
* res.send(formatter(1, 'response #2'));
|
|
9
|
+
* res.send(formatter(0, 'response #1'));
|
|
10
|
+
* res.send(formatter.end());
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Expected format:
|
|
14
|
+
* ```json
|
|
15
|
+
* {"1":"response #2"
|
|
16
|
+
* ,"0":"response #1"
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/ function getBatchStreamFormatter() {
|
|
20
|
+
let first = true;
|
|
21
|
+
function format(index, string) {
|
|
22
|
+
const prefix = first ? '{' : ',';
|
|
23
|
+
first = false;
|
|
24
|
+
return `${prefix}"${index}":${string}\n`;
|
|
25
|
+
}
|
|
26
|
+
format.end = ()=>'}';
|
|
27
|
+
return format;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { getBatchStreamFormatter as g };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format a batch response as a line-delimited JSON stream
|
|
3
|
+
* that the `unstable_httpBatchStreamLink` can parse:
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```ts
|
|
7
|
+
* const formatter = getBatchStreamFormatter();
|
|
8
|
+
* res.send(formatter(1, 'response #2'));
|
|
9
|
+
* res.send(formatter(0, 'response #1'));
|
|
10
|
+
* res.send(formatter.end());
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Expected format:
|
|
14
|
+
* ```json
|
|
15
|
+
* {"1":"response #2"
|
|
16
|
+
* ,"0":"response #1"
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function getBatchStreamFormatter(): {
|
|
21
|
+
(index: number, string: string): string;
|
|
22
|
+
end(): string;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=batchStreamFormatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchStreamFormatter.d.ts","sourceRoot":"","sources":["../../src/http/batchStreamFormatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB;YAEd,MAAM,UAAU,MAAM;;EAO9C"}
|
package/dist/http/index.d.ts
CHANGED
package/dist/http/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,SAAS,CAAC;AACxB,cAAc,wBAAwB,CAAC"}
|
package/dist/http/index.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var index = require('../index-4a823936.js');
|
|
6
|
-
var resolveHTTPResponse = require('../resolveHTTPResponse-
|
|
6
|
+
var resolveHTTPResponse = require('../resolveHTTPResponse-2c307e04.js');
|
|
7
|
+
var batchStreamFormatter = require('../batchStreamFormatter-93cdcdd4.js');
|
|
7
8
|
require('../codes-0eeb600d.js');
|
|
8
9
|
require('../config-f3ce0144.js');
|
|
9
10
|
require('../TRPCError-16b2e52d.js');
|
|
@@ -16,3 +17,4 @@ exports.TRPC_ERROR_CODES_BY_NUMBER = index.TRPC_ERROR_CODES_BY_NUMBER;
|
|
|
16
17
|
exports.getHTTPStatusCode = index.getHTTPStatusCode;
|
|
17
18
|
exports.getHTTPStatusCodeFromError = index.getHTTPStatusCodeFromError;
|
|
18
19
|
exports.resolveHTTPResponse = resolveHTTPResponse.resolveHTTPResponse;
|
|
20
|
+
exports.getBatchStreamFormatter = batchStreamFormatter.getBatchStreamFormatter;
|
package/dist/http/index.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { T as TRPC_ERROR_CODES_BY_NUMBER, b as getHTTPStatusCode, g as getHTTPStatusCodeFromError } from '../index-044a193b.mjs';
|
|
2
|
-
export { r as resolveHTTPResponse } from '../resolveHTTPResponse-
|
|
2
|
+
export { r as resolveHTTPResponse } from '../resolveHTTPResponse-a9be3d96.mjs';
|
|
3
|
+
export { g as getBatchStreamFormatter } from '../batchStreamFormatter-fc1ffb26.mjs';
|
|
3
4
|
import '../codes-24aa1ce1.mjs';
|
|
4
5
|
import '../config-65c5b6d1.mjs';
|
|
5
6
|
import '../TRPCError-2b10c8d2.mjs';
|
|
@@ -9,6 +9,7 @@ export interface HTTPResponse {
|
|
|
9
9
|
headers?: HTTPHeaders;
|
|
10
10
|
body?: string;
|
|
11
11
|
}
|
|
12
|
+
export type ResponseChunk = [procedureIndex: number, responseBody: string];
|
|
12
13
|
/**
|
|
13
14
|
* @internal
|
|
14
15
|
*/
|
|
@@ -21,5 +22,11 @@ export type ResponseMetaFn<TRouter extends AnyRouter> = (opts: {
|
|
|
21
22
|
paths?: string[];
|
|
22
23
|
type: ProcedureType | 'unknown';
|
|
23
24
|
errors: TRPCError[];
|
|
25
|
+
/**
|
|
26
|
+
* `true` if the `ResponseMeta` are being
|
|
27
|
+
* generated without knowing the response data
|
|
28
|
+
* (e.g. for streaming requests).
|
|
29
|
+
*/
|
|
30
|
+
eagerGeneration: boolean;
|
|
24
31
|
}) => ResponseMeta;
|
|
25
32
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/http/internals/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,SAAS,IAAI,CAAC,IAAI,EAAE;IAC7D,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IACzD,GAAG,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClC;;QAEI;IACJ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/http/internals/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AAE3E;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,OAAO,SAAS,SAAS,IAAI,CAAC,IAAI,EAAE;IAC7D,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;IACzD,GAAG,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClC;;QAEI;IACJ,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B,KAAK,YAAY,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { AnyRouter, inferRouterContext } from '../core';
|
|
|
2
2
|
import { TRPCError } from '../error/TRPCError';
|
|
3
3
|
import { Maybe } from '../types';
|
|
4
4
|
import { BaseContentTypeHandler } from './contentType';
|
|
5
|
-
import { HTTPResponse } from './internals/types';
|
|
5
|
+
import { HTTPResponse, ResponseChunk } from './internals/types';
|
|
6
6
|
import { HTTPBaseHandlerOptions, HTTPRequest } from './types';
|
|
7
7
|
interface ResolveHTTPRequestOptions<TRouter extends AnyRouter, TRequest extends HTTPRequest> extends HTTPBaseHandlerOptions<TRouter, TRequest> {
|
|
8
8
|
createContext: () => Promise<inferRouterContext<TRouter>>;
|
|
@@ -11,7 +11,41 @@ interface ResolveHTTPRequestOptions<TRouter extends AnyRouter, TRequest extends
|
|
|
11
11
|
error?: Maybe<TRPCError>;
|
|
12
12
|
contentTypeHandler?: BaseContentTypeHandler<any>;
|
|
13
13
|
preprocessedBody?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Called as soon as the response head is known,
|
|
16
|
+
* with headers that were generated **without** knowing the response body.
|
|
17
|
+
*
|
|
18
|
+
* Without this callback, streaming is disabled.
|
|
19
|
+
*/
|
|
20
|
+
onHead: (headResponse: Omit<HTTPResponse, 'body'>) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Called for every procedure with `[index, result]`.
|
|
23
|
+
*
|
|
24
|
+
* Will be called a single time with `index = -1` if
|
|
25
|
+
* - response is an error
|
|
26
|
+
* - response is empty (HEAD request)
|
|
27
|
+
*
|
|
28
|
+
* Without this callback, streaming is disabled.
|
|
29
|
+
*/
|
|
30
|
+
onChunk: (chunk: ResponseChunk) => void;
|
|
14
31
|
}
|
|
15
|
-
|
|
32
|
+
/**
|
|
33
|
+
* Since `resolveHTTPResponse` is a public API (community adapters),
|
|
34
|
+
* let's give it a strong type signature to increase discoverability.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Non-streaming signature for `resolveHTTPResponse`:
|
|
38
|
+
* @param opts.onHead `undefined`
|
|
39
|
+
* @param opts.onChunk `undefined`
|
|
40
|
+
* @returns `Promise<HTTPResponse>`
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveHTTPResponse<TRouter extends AnyRouter, TRequest extends HTTPRequest>(opts: Omit<ResolveHTTPRequestOptions<TRouter, TRequest>, 'onHead' | 'onChunk'>): Promise<HTTPResponse>;
|
|
43
|
+
/**
|
|
44
|
+
* Streaming signature for `resolveHTTPResponse`:
|
|
45
|
+
* @param opts.onHead called as soon as the response head is known
|
|
46
|
+
* @param opts.onChunk called for every procedure with `[index, result]`
|
|
47
|
+
* @returns `Promise<void>` since the response is streamed
|
|
48
|
+
*/
|
|
49
|
+
export declare function resolveHTTPResponse<TRouter extends AnyRouter, TRequest extends HTTPRequest>(opts: ResolveHTTPRequestOptions<TRouter, TRequest>): Promise<void>;
|
|
16
50
|
export {};
|
|
17
51
|
//# sourceMappingURL=resolveHTTPResponse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveHTTPResponse.d.ts","sourceRoot":"","sources":["../../src/http/resolveHTTPResponse.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolveHTTPResponse.d.ts","sourceRoot":"","sources":["../../src/http/resolveHTTPResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,kBAAkB,EAGnB,MAAM,SAAS,CAAC;AACjB,OAAO,EAA2B,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIxE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EACL,sBAAsB,EAEvB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAe,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAoB9D,UAAU,yBAAyB,CACjC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,WAAW,CAC5B,SAAQ,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC;IACjD,aAAa,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1D,GAAG,EAAE,QAAQ,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACzB,kBAAkB,CAAC,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,MAAM,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;IAC3D;;;;;;;;OAQG;IACH,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CACzC;AAyJD;;;GAGG;AAEH;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,WAAW,EAE5B,IAAI,EAAE,IAAI,CACR,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,EAC5C,QAAQ,GAAG,SAAS,CACrB,GACA,OAAO,CAAC,YAAY,CAAC,CAAC;AACzB;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,SAAS,SAAS,EACzB,QAAQ,SAAS,WAAW,EAC5B,IAAI,EAAE,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import './index-ca9a128e.js';
|
|
2
|
+
import { r as resolveHTTPResponse } from './resolveHTTPResponse-2bdf2cd7.js';
|
|
3
|
+
import { g as getBatchStreamFormatter } from './batchStreamFormatter-2c1405a1.js';
|
|
2
4
|
import { nodeHTTPJSONContentTypeHandler } from './adapters/node-http/content-type/json/index.js';
|
|
3
5
|
|
|
4
6
|
const defaultJSONContentTypeHandler = nodeHTTPJSONContentTypeHandler();
|
|
@@ -33,7 +35,40 @@ async function nodeHTTPRequestHandler(opts) {
|
|
|
33
35
|
query,
|
|
34
36
|
body: bodyResult.ok ? bodyResult.data : undefined,
|
|
35
37
|
};
|
|
36
|
-
const
|
|
38
|
+
const onHead = (head) => {
|
|
39
|
+
if ('status' in head &&
|
|
40
|
+
(!opts.res.statusCode || opts.res.statusCode === 200)) {
|
|
41
|
+
opts.res.statusCode = head.status;
|
|
42
|
+
}
|
|
43
|
+
for (const [key, value] of Object.entries(head.headers ?? {})) {
|
|
44
|
+
/* istanbul ignore if -- @preserve */
|
|
45
|
+
if (typeof value === 'undefined') {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
opts.res.setHeader(key, value);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const formatter = getBatchStreamFormatter();
|
|
52
|
+
let isStream = false;
|
|
53
|
+
const onChunk = ([index, string]) => {
|
|
54
|
+
if (index === -1) {
|
|
55
|
+
/**
|
|
56
|
+
* Full response, no streaming. This can happen
|
|
57
|
+
* - if the response is an error
|
|
58
|
+
* - if response is empty (HEAD request)
|
|
59
|
+
*/
|
|
60
|
+
opts.res.end(string);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (!isStream) {
|
|
64
|
+
opts.res.setHeader('Transfer-Encoding', 'chunked');
|
|
65
|
+
const vary = opts.res.getHeader('Vary');
|
|
66
|
+
opts.res.setHeader('Vary', vary ? 'trpc-batch-mode, ' + vary : 'trpc-batch-mode');
|
|
67
|
+
isStream = true;
|
|
68
|
+
}
|
|
69
|
+
opts.res.write(formatter(index, string));
|
|
70
|
+
};
|
|
71
|
+
await resolveHTTPResponse({
|
|
37
72
|
batching: opts.batching,
|
|
38
73
|
responseMeta: opts.responseMeta,
|
|
39
74
|
path: opts.path,
|
|
@@ -49,18 +84,15 @@ async function nodeHTTPRequestHandler(opts) {
|
|
|
49
84
|
});
|
|
50
85
|
},
|
|
51
86
|
contentTypeHandler,
|
|
87
|
+
onHead,
|
|
88
|
+
onChunk,
|
|
52
89
|
});
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
res.statusCode = result.status;
|
|
56
|
-
}
|
|
57
|
-
for (const [key, value] of Object.entries(result.headers ?? {})) {
|
|
58
|
-
if (typeof value === 'undefined') {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
res.setHeader(key, value);
|
|
90
|
+
if (!isStream) {
|
|
91
|
+
return opts.res;
|
|
62
92
|
}
|
|
63
|
-
res.end(
|
|
93
|
+
opts.res.write(formatter.end());
|
|
94
|
+
opts.res.end();
|
|
95
|
+
return opts.res;
|
|
64
96
|
});
|
|
65
97
|
}
|
|
66
98
|
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import './index-044a193b.mjs';
|
|
2
|
+
import { r as resolveHTTPResponse } from './resolveHTTPResponse-a9be3d96.mjs';
|
|
3
|
+
import { g as getBatchStreamFormatter } from './batchStreamFormatter-fc1ffb26.mjs';
|
|
2
4
|
import { nodeHTTPJSONContentTypeHandler } from './adapters/node-http/content-type/json/index.mjs';
|
|
3
5
|
|
|
4
6
|
const defaultJSONContentTypeHandler = nodeHTTPJSONContentTypeHandler();
|
|
@@ -29,7 +31,37 @@ async function nodeHTTPRequestHandler(opts) {
|
|
|
29
31
|
query,
|
|
30
32
|
body: bodyResult.ok ? bodyResult.data : undefined
|
|
31
33
|
};
|
|
32
|
-
const
|
|
34
|
+
const onHead = (head)=>{
|
|
35
|
+
if ('status' in head && (!opts.res.statusCode || opts.res.statusCode === 200)) {
|
|
36
|
+
opts.res.statusCode = head.status;
|
|
37
|
+
}
|
|
38
|
+
for (const [key, value] of Object.entries(head.headers ?? {})){
|
|
39
|
+
/* istanbul ignore if -- @preserve */ if (typeof value === 'undefined') {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
opts.res.setHeader(key, value);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const formatter = getBatchStreamFormatter();
|
|
46
|
+
let isStream = false;
|
|
47
|
+
const onChunk = ([index, string])=>{
|
|
48
|
+
if (index === -1) {
|
|
49
|
+
/**
|
|
50
|
+
* Full response, no streaming. This can happen
|
|
51
|
+
* - if the response is an error
|
|
52
|
+
* - if response is empty (HEAD request)
|
|
53
|
+
*/ opts.res.end(string);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (!isStream) {
|
|
57
|
+
opts.res.setHeader('Transfer-Encoding', 'chunked');
|
|
58
|
+
const vary = opts.res.getHeader('Vary');
|
|
59
|
+
opts.res.setHeader('Vary', vary ? 'trpc-batch-mode, ' + vary : 'trpc-batch-mode');
|
|
60
|
+
isStream = true;
|
|
61
|
+
}
|
|
62
|
+
opts.res.write(formatter(index, string));
|
|
63
|
+
};
|
|
64
|
+
await resolveHTTPResponse({
|
|
33
65
|
batching: opts.batching,
|
|
34
66
|
responseMeta: opts.responseMeta,
|
|
35
67
|
path: opts.path,
|
|
@@ -44,19 +76,16 @@ async function nodeHTTPRequestHandler(opts) {
|
|
|
44
76
|
req: opts.req
|
|
45
77
|
});
|
|
46
78
|
},
|
|
47
|
-
contentTypeHandler
|
|
79
|
+
contentTypeHandler,
|
|
80
|
+
onHead,
|
|
81
|
+
onChunk
|
|
48
82
|
});
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
res.statusCode = result.status;
|
|
52
|
-
}
|
|
53
|
-
for (const [key, value] of Object.entries(result.headers ?? {})){
|
|
54
|
-
if (typeof value === 'undefined') {
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
res.setHeader(key, value);
|
|
83
|
+
if (!isStream) {
|
|
84
|
+
return opts.res;
|
|
58
85
|
}
|
|
59
|
-
res.end(
|
|
86
|
+
opts.res.write(formatter.end());
|
|
87
|
+
opts.res.end();
|
|
88
|
+
return opts.res;
|
|
60
89
|
});
|
|
61
90
|
}
|
|
62
91
|
|