@trpc/server 11.0.0-alpha-tmp-issues-5851-take-two.452 → 11.0.0-alpha-tmp-issues-5851-take-two.457

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.
@@ -1,12 +1,12 @@
1
1
  {
2
- "bundleSize": 131734,
3
- "bundleOrigSize": 181182,
4
- "bundleReduction": 27.29,
2
+ "bundleSize": 131878,
3
+ "bundleOrigSize": 181211,
4
+ "bundleReduction": 27.22,
5
5
  "modules": [
6
6
  {
7
7
  "id": "/src/unstable-core-do-not-import/stream/jsonl.ts",
8
- "size": 17622,
9
- "origSize": 18419,
8
+ "size": 17766,
9
+ "origSize": 18448,
10
10
  "renderedExports": [
11
11
  "isPromise",
12
12
  "jsonlStreamProducer",
@@ -17,8 +17,8 @@
17
17
  "/src/unstable-core-do-not-import.ts",
18
18
  "/src/unstable-core-do-not-import/http/resolveResponse.ts"
19
19
  ],
20
- "percent": 13.38,
21
- "reduction": 4.33
20
+ "percent": 13.47,
21
+ "reduction": 3.7
22
22
  },
23
23
  {
24
24
  "id": "/src/unstable-core-do-not-import/http/resolveResponse.ts",
@@ -31,7 +31,7 @@
31
31
  "dependents": [
32
32
  "/src/unstable-core-do-not-import.ts"
33
33
  ],
34
- "percent": 12.96,
34
+ "percent": 12.95,
35
35
  "reduction": 0
36
36
  },
37
37
  {
@@ -46,7 +46,7 @@
46
46
  "dependents": [
47
47
  "/src/adapters/fastify/fastifyTRPCPlugin.ts"
48
48
  ],
49
- "percent": 10.84,
49
+ "percent": 10.82,
50
50
  "reduction": 0
51
51
  },
52
52
  {
@@ -113,7 +113,7 @@
113
113
  "/src/unstable-core-do-not-import.ts",
114
114
  "/src/unstable-core-do-not-import/http/resolveResponse.ts"
115
115
  ],
116
- "percent": 4.28,
116
+ "percent": 4.27,
117
117
  "reduction": 24.48
118
118
  },
119
119
  {
@@ -290,7 +290,7 @@
290
290
  "/src/adapters/node-http/index.ts",
291
291
  "/src/adapters/node-http/nodeHTTPRequestHandler.ts"
292
292
  ],
293
- "percent": 1.67,
293
+ "percent": 1.66,
294
294
  "reduction": 13.79
295
295
  },
296
296
  {
@@ -304,7 +304,7 @@
304
304
  "dependents": [
305
305
  "/src/adapters/next-app-dir/nextAppDirCaller.ts"
306
306
  ],
307
- "percent": 1.56,
307
+ "percent": 1.55,
308
308
  "reduction": 5.79
309
309
  },
310
310
  {
@@ -328,7 +328,7 @@
328
328
  "/src/unstable-core-do-not-import/procedureBuilder.ts",
329
329
  "/src/unstable-core-do-not-import/stream/jsonl.ts"
330
330
  ],
331
- "percent": 1.32,
331
+ "percent": 1.31,
332
332
  "reduction": 19.47
333
333
  },
334
334
  {
@@ -786,16 +786,6 @@
786
786
  "percent": 0,
787
787
  "reduction": 100
788
788
  },
789
- {
790
- "id": "/src/adapters/fetch/index.ts",
791
- "size": 0,
792
- "origSize": 64,
793
- "renderedExports": [],
794
- "removedExports": [],
795
- "dependents": [],
796
- "percent": 0,
797
- "reduction": 100
798
- },
799
789
  {
800
790
  "id": "/src/adapters/fastify/index.ts",
801
791
  "size": 0,
@@ -814,12 +804,22 @@
814
804
  "removedExports": [],
815
805
  "dependents": [
816
806
  "/src/adapters/express.ts",
817
- "/src/adapters/standalone.ts",
818
807
  "/src/adapters/next.ts",
808
+ "/src/adapters/standalone.ts",
819
809
  "/src/adapters/fastify/fastifyRequestHandler.ts"
820
810
  ],
821
811
  "percent": 0,
822
812
  "reduction": 100
813
+ },
814
+ {
815
+ "id": "/src/adapters/fetch/index.ts",
816
+ "size": 0,
817
+ "origSize": 64,
818
+ "renderedExports": [],
819
+ "removedExports": [],
820
+ "dependents": [],
821
+ "percent": 0,
822
+ "reduction": 100
823
823
  }
824
824
  ],
825
825
  "moduleCount": 55
@@ -96,8 +96,9 @@ export declare function jsonlStreamConsumer<THead>(opts: {
96
96
  }): Promise<readonly [Awaited<THead>, {
97
97
  readonly controllers: Map<ChunkIndex, {
98
98
  controller: ReadableStreamDefaultController<ChunkData | StreamInterruptedError>;
99
- abortController: AbortController;
99
+ returned: boolean;
100
100
  }>;
101
+ readonly streamAbortController: AbortController;
101
102
  }]>;
102
103
  export {};
103
104
  //# sourceMappingURL=jsonl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../../src/unstable-core-do-not-import/stream/jsonl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../../src/unstable-core-do-not-import/stream/jsonl.ts"],"names":[],"mappings":"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"}
@@ -333,12 +333,18 @@ function createConsumerStream(from) {
333
333
  let headDeferred = createDeferred.createDeferred();
334
334
  const chunkDeferred = new Map();
335
335
  const controllers = new Map();
336
+ const maybeAbortStream = ()=>{
337
+ if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.returned)) {
338
+ // nothing is listening to the stream anymore
339
+ streamAbortController.abort();
340
+ }
341
+ };
336
342
  function hydrateChunkDefinition(value, path) {
337
343
  const [_path, type, chunkId] = value;
338
344
  const { readable , controller } = createReadableStream.createReadableStream();
339
345
  const wrapper = {
340
346
  controller,
341
- abortController: new AbortController()
347
+ returned: false
342
348
  };
343
349
  controllers.set(chunkId, wrapper);
344
350
  // resolve chunk deferred if it exists
@@ -377,6 +383,7 @@ function createConsumerStream(from) {
377
383
  }).catch(reject).finally(()=>{
378
384
  // reader.releaseLock();
379
385
  controllers.delete(chunkId);
386
+ maybeAbortStream();
380
387
  });
381
388
  });
382
389
  }
@@ -407,23 +414,22 @@ function createConsumerStream(from) {
407
414
  };
408
415
  case ASYNC_ITERABLE_STATUS_DONE:
409
416
  controllers.delete(chunkId);
417
+ maybeAbortStream();
410
418
  return {
411
419
  done: true,
412
420
  value: undefined
413
421
  };
414
422
  case ASYNC_ITERABLE_STATUS_ERROR:
415
423
  controllers.delete(chunkId);
424
+ maybeAbortStream();
416
425
  throw opts.formatError?.({
417
426
  error: data
418
427
  }) ?? new AsyncError(data);
419
428
  }
420
429
  },
421
430
  return: async ()=>{
422
- wrapper.abortController.abort();
423
- if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.abortController.signal.aborted)) {
424
- // nothing is listening to the stream anymore
425
- streamAbortController.abort();
426
- }
431
+ wrapper.returned = true;
432
+ maybeAbortStream();
427
433
  return {
428
434
  done: true,
429
435
  value: undefined
@@ -507,7 +513,8 @@ function createConsumerStream(from) {
507
513
  return [
508
514
  await headDeferred.promise,
509
515
  {
510
- controllers
516
+ controllers,
517
+ streamAbortController
511
518
  }
512
519
  ];
513
520
  }
@@ -331,12 +331,18 @@ function createConsumerStream(from) {
331
331
  let headDeferred = createDeferred();
332
332
  const chunkDeferred = new Map();
333
333
  const controllers = new Map();
334
+ const maybeAbortStream = ()=>{
335
+ if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.returned)) {
336
+ // nothing is listening to the stream anymore
337
+ streamAbortController.abort();
338
+ }
339
+ };
334
340
  function hydrateChunkDefinition(value, path) {
335
341
  const [_path, type, chunkId] = value;
336
342
  const { readable , controller } = createReadableStream();
337
343
  const wrapper = {
338
344
  controller,
339
- abortController: new AbortController()
345
+ returned: false
340
346
  };
341
347
  controllers.set(chunkId, wrapper);
342
348
  // resolve chunk deferred if it exists
@@ -375,6 +381,7 @@ function createConsumerStream(from) {
375
381
  }).catch(reject).finally(()=>{
376
382
  // reader.releaseLock();
377
383
  controllers.delete(chunkId);
384
+ maybeAbortStream();
378
385
  });
379
386
  });
380
387
  }
@@ -405,23 +412,22 @@ function createConsumerStream(from) {
405
412
  };
406
413
  case ASYNC_ITERABLE_STATUS_DONE:
407
414
  controllers.delete(chunkId);
415
+ maybeAbortStream();
408
416
  return {
409
417
  done: true,
410
418
  value: undefined
411
419
  };
412
420
  case ASYNC_ITERABLE_STATUS_ERROR:
413
421
  controllers.delete(chunkId);
422
+ maybeAbortStream();
414
423
  throw opts.formatError?.({
415
424
  error: data
416
425
  }) ?? new AsyncError(data);
417
426
  }
418
427
  },
419
428
  return: async ()=>{
420
- wrapper.abortController.abort();
421
- if (chunkDeferred.size === 0 && Array.from(controllers.values()).every((it)=>it.abortController.signal.aborted)) {
422
- // nothing is listening to the stream anymore
423
- streamAbortController.abort();
424
- }
429
+ wrapper.returned = true;
430
+ maybeAbortStream();
425
431
  return {
426
432
  done: true,
427
433
  value: undefined
@@ -505,7 +511,8 @@ function createConsumerStream(from) {
505
511
  return [
506
512
  await headDeferred.promise,
507
513
  {
508
- controllers
514
+ controllers,
515
+ streamAbortController
509
516
  }
510
517
  ];
511
518
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trpc/server",
3
- "version": "11.0.0-alpha-tmp-issues-5851-take-two.452+aa936a8f2",
3
+ "version": "11.0.0-alpha-tmp-issues-5851-take-two.457+d001d20ed",
4
4
  "description": "The tRPC server library",
5
5
  "author": "KATT",
6
6
  "license": "MIT",
@@ -149,5 +149,5 @@
149
149
  "funding": [
150
150
  "https://trpc.io/sponsor"
151
151
  ],
152
- "gitHead": "aa936a8f2cc2f671abfa3cbb27a55200ea539cba"
152
+ "gitHead": "d001d20ed0a9cda4a71c3a32276c1914bf0c2214"
153
153
  }
@@ -442,11 +442,21 @@ export async function jsonlStreamConsumer<THead>(opts: {
442
442
  type ChunkController = ReadableStreamDefaultController<ControllerChunk>;
443
443
  type ControllerWrapper = {
444
444
  controller: ChunkController;
445
- abortController: AbortController;
445
+ returned: boolean;
446
446
  };
447
447
  const chunkDeferred = new Map<ChunkIndex, Deferred<ControllerWrapper>>();
448
448
  const controllers = new Map<ChunkIndex, ControllerWrapper>();
449
449
 
450
+ const maybeAbortStream = () => {
451
+ if (
452
+ chunkDeferred.size === 0 &&
453
+ Array.from(controllers.values()).every((it) => it.returned)
454
+ ) {
455
+ // nothing is listening to the stream anymore
456
+ streamAbortController.abort();
457
+ }
458
+ };
459
+
450
460
  function hydrateChunkDefinition(value: ChunkDefinition, path: PathArray) {
451
461
  const [_path, type, chunkId] = value;
452
462
 
@@ -454,7 +464,7 @@ export async function jsonlStreamConsumer<THead>(opts: {
454
464
 
455
465
  const wrapper: ControllerWrapper = {
456
466
  controller,
457
- abortController: new AbortController(),
467
+ returned: false,
458
468
  };
459
469
  controllers.set(chunkId, wrapper);
460
470
 
@@ -486,6 +496,7 @@ export async function jsonlStreamConsumer<THead>(opts: {
486
496
  switch (status) {
487
497
  case PROMISE_STATUS_FULFILLED:
488
498
  resolve(hydrate(data, path));
499
+
489
500
  break;
490
501
  case PROMISE_STATUS_REJECTED:
491
502
  reject(
@@ -498,6 +509,8 @@ export async function jsonlStreamConsumer<THead>(opts: {
498
509
  .finally(() => {
499
510
  // reader.releaseLock();
500
511
  controllers.delete(chunkId);
512
+
513
+ maybeAbortStream();
501
514
  });
502
515
  });
503
516
  }
@@ -529,12 +542,14 @@ export async function jsonlStreamConsumer<THead>(opts: {
529
542
  };
530
543
  case ASYNC_ITERABLE_STATUS_DONE:
531
544
  controllers.delete(chunkId);
545
+ maybeAbortStream();
532
546
  return {
533
547
  done: true,
534
548
  value: undefined,
535
549
  };
536
550
  case ASYNC_ITERABLE_STATUS_ERROR:
537
551
  controllers.delete(chunkId);
552
+ maybeAbortStream();
538
553
  throw (
539
554
  opts.formatError?.({ error: data }) ??
540
555
  new AsyncError(data)
@@ -542,16 +557,8 @@ export async function jsonlStreamConsumer<THead>(opts: {
542
557
  }
543
558
  },
544
559
  return: async () => {
545
- wrapper.abortController.abort();
546
- if (
547
- chunkDeferred.size === 0 &&
548
- Array.from(controllers.values()).every(
549
- (it) => it.abortController.signal.aborted,
550
- )
551
- ) {
552
- // nothing is listening to the stream anymore
553
- streamAbortController.abort();
554
- }
560
+ wrapper.returned = true;
561
+ maybeAbortStream();
555
562
  return {
556
563
  done: true,
557
564
  value: undefined,
@@ -645,6 +652,7 @@ export async function jsonlStreamConsumer<THead>(opts: {
645
652
  await headDeferred.promise,
646
653
  {
647
654
  controllers,
655
+ streamAbortController,
648
656
  },
649
657
  ] as const;
650
658
  }