@replit/river 0.2.1 → 0.3.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.
@@ -1,11 +1,12 @@
1
1
  import http from 'http';
2
2
  import { bench, describe } from 'vitest';
3
- import { createWebSocketServer, createWsTransports, onServerReady, waitForMessage, } from '../transport/util';
3
+ import { createWebSocketServer, createWsTransports, onServerReady, } from '../testUtils';
4
4
  import largePayload from './largePayload.json';
5
5
  import { TestServiceConstructor } from './integration.test';
6
6
  import { createServer } from '../router/server';
7
7
  import { createClient } from '../router/client';
8
8
  import { StupidlyLargeService } from './typescript-stress.test';
9
+ import { waitForMessage } from '../transport';
9
10
  let smallId = 0;
10
11
  let largeId = 0;
11
12
  const dummyPayloadSmall = () => ({
@@ -18,7 +18,7 @@ export declare const TestServiceConstructor: () => {
18
18
  output: import("@sinclair/typebox").TObject<{
19
19
  result: import("@sinclair/typebox").TNumber;
20
20
  }>;
21
- handler: (context: import("..").ServiceContextWithState<{
21
+ handler: (context: import("../router").ServiceContextWithState<{
22
22
  count: number;
23
23
  }>, input: import("../transport/message").TransportMessage<{
24
24
  n: number;
@@ -36,7 +36,7 @@ export declare const TestServiceConstructor: () => {
36
36
  output: import("@sinclair/typebox").TObject<{
37
37
  response: import("@sinclair/typebox").TString;
38
38
  }>;
39
- handler: (context: import("..").ServiceContextWithState<{
39
+ handler: (context: import("../router").ServiceContextWithState<{
40
40
  count: number;
41
41
  }>, input: AsyncIterable<import("../transport/message").TransportMessage<{
42
42
  msg: string;
@@ -3,10 +3,9 @@ import { Type } from '@sinclair/typebox';
3
3
  import { ServiceBuilder, serializeService } from '../router/builder';
4
4
  import { reply } from '../transport/message';
5
5
  import { afterAll, describe, expect, test } from 'vitest';
6
- import { createWebSocketServer, createWsTransports, onServerReady, } from '../transport/util';
6
+ import { createWebSocketServer, createWsTransports, onServerReady, asClientRpc, asClientStream, } from '../testUtils';
7
7
  import { createServer } from '../router/server';
8
8
  import { createClient } from '../router/client';
9
- import { asClientRpc, asClientStream } from '../router/server.util';
10
9
  export const EchoRequest = Type.Object({
11
10
  msg: Type.String(),
12
11
  ignore: Type.Boolean(),
@@ -11,7 +11,7 @@ export declare const StupidlyLargeService: () => {
11
11
  output: import("@sinclair/typebox").TObject<{
12
12
  b: import("@sinclair/typebox").TNumber;
13
13
  }>;
14
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
14
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
15
15
  a: number;
16
16
  }>) => Promise<import("../transport/message").TransportMessage<{
17
17
  b: number;
@@ -26,7 +26,7 @@ export declare const StupidlyLargeService: () => {
26
26
  output: import("@sinclair/typebox").TObject<{
27
27
  b: import("@sinclair/typebox").TNumber;
28
28
  }>;
29
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
29
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
30
30
  a: number;
31
31
  }>) => Promise<import("../transport/message").TransportMessage<{
32
32
  b: number;
@@ -41,7 +41,7 @@ export declare const StupidlyLargeService: () => {
41
41
  output: import("@sinclair/typebox").TObject<{
42
42
  b: import("@sinclair/typebox").TNumber;
43
43
  }>;
44
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
44
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
45
45
  a: number;
46
46
  }>) => Promise<import("../transport/message").TransportMessage<{
47
47
  b: number;
@@ -56,7 +56,7 @@ export declare const StupidlyLargeService: () => {
56
56
  output: import("@sinclair/typebox").TObject<{
57
57
  b: import("@sinclair/typebox").TNumber;
58
58
  }>;
59
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
59
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
60
60
  a: number;
61
61
  }>) => Promise<import("../transport/message").TransportMessage<{
62
62
  b: number;
@@ -71,7 +71,7 @@ export declare const StupidlyLargeService: () => {
71
71
  output: import("@sinclair/typebox").TObject<{
72
72
  b: import("@sinclair/typebox").TNumber;
73
73
  }>;
74
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
74
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
75
75
  a: number;
76
76
  }>) => Promise<import("../transport/message").TransportMessage<{
77
77
  b: number;
@@ -86,7 +86,7 @@ export declare const StupidlyLargeService: () => {
86
86
  output: import("@sinclair/typebox").TObject<{
87
87
  b: import("@sinclair/typebox").TNumber;
88
88
  }>;
89
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
89
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
90
90
  a: number;
91
91
  }>) => Promise<import("../transport/message").TransportMessage<{
92
92
  b: number;
@@ -101,7 +101,7 @@ export declare const StupidlyLargeService: () => {
101
101
  output: import("@sinclair/typebox").TObject<{
102
102
  b: import("@sinclair/typebox").TNumber;
103
103
  }>;
104
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
104
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
105
105
  a: number;
106
106
  }>) => Promise<import("../transport/message").TransportMessage<{
107
107
  b: number;
@@ -116,7 +116,7 @@ export declare const StupidlyLargeService: () => {
116
116
  output: import("@sinclair/typebox").TObject<{
117
117
  b: import("@sinclair/typebox").TNumber;
118
118
  }>;
119
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
119
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
120
120
  a: number;
121
121
  }>) => Promise<import("../transport/message").TransportMessage<{
122
122
  b: number;
@@ -131,7 +131,7 @@ export declare const StupidlyLargeService: () => {
131
131
  output: import("@sinclair/typebox").TObject<{
132
132
  b: import("@sinclair/typebox").TNumber;
133
133
  }>;
134
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
134
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
135
135
  a: number;
136
136
  }>) => Promise<import("../transport/message").TransportMessage<{
137
137
  b: number;
@@ -146,7 +146,7 @@ export declare const StupidlyLargeService: () => {
146
146
  output: import("@sinclair/typebox").TObject<{
147
147
  b: import("@sinclair/typebox").TNumber;
148
148
  }>;
149
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
149
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
150
150
  a: number;
151
151
  }>) => Promise<import("../transport/message").TransportMessage<{
152
152
  b: number;
@@ -161,7 +161,7 @@ export declare const StupidlyLargeService: () => {
161
161
  output: import("@sinclair/typebox").TObject<{
162
162
  b: import("@sinclair/typebox").TNumber;
163
163
  }>;
164
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
164
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
165
165
  a: number;
166
166
  }>) => Promise<import("../transport/message").TransportMessage<{
167
167
  b: number;
@@ -176,7 +176,7 @@ export declare const StupidlyLargeService: () => {
176
176
  output: import("@sinclair/typebox").TObject<{
177
177
  b: import("@sinclair/typebox").TNumber;
178
178
  }>;
179
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
179
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
180
180
  a: number;
181
181
  }>) => Promise<import("../transport/message").TransportMessage<{
182
182
  b: number;
@@ -191,7 +191,7 @@ export declare const StupidlyLargeService: () => {
191
191
  output: import("@sinclair/typebox").TObject<{
192
192
  b: import("@sinclair/typebox").TNumber;
193
193
  }>;
194
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
194
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
195
195
  a: number;
196
196
  }>) => Promise<import("../transport/message").TransportMessage<{
197
197
  b: number;
@@ -206,7 +206,7 @@ export declare const StupidlyLargeService: () => {
206
206
  output: import("@sinclair/typebox").TObject<{
207
207
  b: import("@sinclair/typebox").TNumber;
208
208
  }>;
209
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
209
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
210
210
  a: number;
211
211
  }>) => Promise<import("../transport/message").TransportMessage<{
212
212
  b: number;
@@ -221,7 +221,7 @@ export declare const StupidlyLargeService: () => {
221
221
  output: import("@sinclair/typebox").TObject<{
222
222
  b: import("@sinclair/typebox").TNumber;
223
223
  }>;
224
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
224
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
225
225
  a: number;
226
226
  }>) => Promise<import("../transport/message").TransportMessage<{
227
227
  b: number;
@@ -236,7 +236,7 @@ export declare const StupidlyLargeService: () => {
236
236
  output: import("@sinclair/typebox").TObject<{
237
237
  b: import("@sinclair/typebox").TNumber;
238
238
  }>;
239
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
239
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
240
240
  a: number;
241
241
  }>) => Promise<import("../transport/message").TransportMessage<{
242
242
  b: number;
@@ -251,7 +251,7 @@ export declare const StupidlyLargeService: () => {
251
251
  output: import("@sinclair/typebox").TObject<{
252
252
  b: import("@sinclair/typebox").TNumber;
253
253
  }>;
254
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
254
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
255
255
  a: number;
256
256
  }>) => Promise<import("../transport/message").TransportMessage<{
257
257
  b: number;
@@ -266,7 +266,7 @@ export declare const StupidlyLargeService: () => {
266
266
  output: import("@sinclair/typebox").TObject<{
267
267
  b: import("@sinclair/typebox").TNumber;
268
268
  }>;
269
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
269
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
270
270
  a: number;
271
271
  }>) => Promise<import("../transport/message").TransportMessage<{
272
272
  b: number;
@@ -281,7 +281,7 @@ export declare const StupidlyLargeService: () => {
281
281
  output: import("@sinclair/typebox").TObject<{
282
282
  b: import("@sinclair/typebox").TNumber;
283
283
  }>;
284
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
284
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
285
285
  a: number;
286
286
  }>) => Promise<import("../transport/message").TransportMessage<{
287
287
  b: number;
@@ -296,7 +296,7 @@ export declare const StupidlyLargeService: () => {
296
296
  output: import("@sinclair/typebox").TObject<{
297
297
  b: import("@sinclair/typebox").TNumber;
298
298
  }>;
299
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
299
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
300
300
  a: number;
301
301
  }>) => Promise<import("../transport/message").TransportMessage<{
302
302
  b: number;
@@ -311,7 +311,7 @@ export declare const StupidlyLargeService: () => {
311
311
  output: import("@sinclair/typebox").TObject<{
312
312
  b: import("@sinclair/typebox").TNumber;
313
313
  }>;
314
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
314
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
315
315
  a: number;
316
316
  }>) => Promise<import("../transport/message").TransportMessage<{
317
317
  b: number;
@@ -326,7 +326,7 @@ export declare const StupidlyLargeService: () => {
326
326
  output: import("@sinclair/typebox").TObject<{
327
327
  b: import("@sinclair/typebox").TNumber;
328
328
  }>;
329
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
329
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
330
330
  a: number;
331
331
  }>) => Promise<import("../transport/message").TransportMessage<{
332
332
  b: number;
@@ -341,7 +341,7 @@ export declare const StupidlyLargeService: () => {
341
341
  output: import("@sinclair/typebox").TObject<{
342
342
  b: import("@sinclair/typebox").TNumber;
343
343
  }>;
344
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
344
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
345
345
  a: number;
346
346
  }>) => Promise<import("../transport/message").TransportMessage<{
347
347
  b: number;
@@ -356,7 +356,7 @@ export declare const StupidlyLargeService: () => {
356
356
  output: import("@sinclair/typebox").TObject<{
357
357
  b: import("@sinclair/typebox").TNumber;
358
358
  }>;
359
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
359
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
360
360
  a: number;
361
361
  }>) => Promise<import("../transport/message").TransportMessage<{
362
362
  b: number;
@@ -371,7 +371,7 @@ export declare const StupidlyLargeService: () => {
371
371
  output: import("@sinclair/typebox").TObject<{
372
372
  b: import("@sinclair/typebox").TNumber;
373
373
  }>;
374
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
374
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
375
375
  a: number;
376
376
  }>) => Promise<import("../transport/message").TransportMessage<{
377
377
  b: number;
@@ -386,7 +386,7 @@ export declare const StupidlyLargeService: () => {
386
386
  output: import("@sinclair/typebox").TObject<{
387
387
  b: import("@sinclair/typebox").TNumber;
388
388
  }>;
389
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
389
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
390
390
  a: number;
391
391
  }>) => Promise<import("../transport/message").TransportMessage<{
392
392
  b: number;
@@ -401,7 +401,7 @@ export declare const StupidlyLargeService: () => {
401
401
  output: import("@sinclair/typebox").TObject<{
402
402
  b: import("@sinclair/typebox").TNumber;
403
403
  }>;
404
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
404
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
405
405
  a: number;
406
406
  }>) => Promise<import("../transport/message").TransportMessage<{
407
407
  b: number;
@@ -416,7 +416,7 @@ export declare const StupidlyLargeService: () => {
416
416
  output: import("@sinclair/typebox").TObject<{
417
417
  b: import("@sinclair/typebox").TNumber;
418
418
  }>;
419
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
419
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
420
420
  a: number;
421
421
  }>) => Promise<import("../transport/message").TransportMessage<{
422
422
  b: number;
@@ -431,7 +431,7 @@ export declare const StupidlyLargeService: () => {
431
431
  output: import("@sinclair/typebox").TObject<{
432
432
  b: import("@sinclair/typebox").TNumber;
433
433
  }>;
434
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
434
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
435
435
  a: number;
436
436
  }>) => Promise<import("../transport/message").TransportMessage<{
437
437
  b: number;
@@ -446,7 +446,7 @@ export declare const StupidlyLargeService: () => {
446
446
  output: import("@sinclair/typebox").TObject<{
447
447
  b: import("@sinclair/typebox").TNumber;
448
448
  }>;
449
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
449
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
450
450
  a: number;
451
451
  }>) => Promise<import("../transport/message").TransportMessage<{
452
452
  b: number;
@@ -461,7 +461,7 @@ export declare const StupidlyLargeService: () => {
461
461
  output: import("@sinclair/typebox").TObject<{
462
462
  b: import("@sinclair/typebox").TNumber;
463
463
  }>;
464
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
464
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
465
465
  a: number;
466
466
  }>) => Promise<import("../transport/message").TransportMessage<{
467
467
  b: number;
@@ -476,7 +476,7 @@ export declare const StupidlyLargeService: () => {
476
476
  output: import("@sinclair/typebox").TObject<{
477
477
  b: import("@sinclair/typebox").TNumber;
478
478
  }>;
479
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
479
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
480
480
  a: number;
481
481
  }>) => Promise<import("../transport/message").TransportMessage<{
482
482
  b: number;
@@ -491,7 +491,7 @@ export declare const StupidlyLargeService: () => {
491
491
  output: import("@sinclair/typebox").TObject<{
492
492
  b: import("@sinclair/typebox").TNumber;
493
493
  }>;
494
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
494
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
495
495
  a: number;
496
496
  }>) => Promise<import("../transport/message").TransportMessage<{
497
497
  b: number;
@@ -506,7 +506,7 @@ export declare const StupidlyLargeService: () => {
506
506
  output: import("@sinclair/typebox").TObject<{
507
507
  b: import("@sinclair/typebox").TNumber;
508
508
  }>;
509
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
509
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
510
510
  a: number;
511
511
  }>) => Promise<import("../transport/message").TransportMessage<{
512
512
  b: number;
@@ -521,7 +521,7 @@ export declare const StupidlyLargeService: () => {
521
521
  output: import("@sinclair/typebox").TObject<{
522
522
  b: import("@sinclair/typebox").TNumber;
523
523
  }>;
524
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
524
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
525
525
  a: number;
526
526
  }>) => Promise<import("../transport/message").TransportMessage<{
527
527
  b: number;
@@ -536,7 +536,7 @@ export declare const StupidlyLargeService: () => {
536
536
  output: import("@sinclair/typebox").TObject<{
537
537
  b: import("@sinclair/typebox").TNumber;
538
538
  }>;
539
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
539
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
540
540
  a: number;
541
541
  }>) => Promise<import("../transport/message").TransportMessage<{
542
542
  b: number;
@@ -551,7 +551,7 @@ export declare const StupidlyLargeService: () => {
551
551
  output: import("@sinclair/typebox").TObject<{
552
552
  b: import("@sinclair/typebox").TNumber;
553
553
  }>;
554
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
554
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
555
555
  a: number;
556
556
  }>) => Promise<import("../transport/message").TransportMessage<{
557
557
  b: number;
@@ -566,7 +566,7 @@ export declare const StupidlyLargeService: () => {
566
566
  output: import("@sinclair/typebox").TObject<{
567
567
  b: import("@sinclair/typebox").TNumber;
568
568
  }>;
569
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
569
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
570
570
  a: number;
571
571
  }>) => Promise<import("../transport/message").TransportMessage<{
572
572
  b: number;
@@ -581,7 +581,7 @@ export declare const StupidlyLargeService: () => {
581
581
  output: import("@sinclair/typebox").TObject<{
582
582
  b: import("@sinclair/typebox").TNumber;
583
583
  }>;
584
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
584
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
585
585
  a: number;
586
586
  }>) => Promise<import("../transport/message").TransportMessage<{
587
587
  b: number;
@@ -596,7 +596,7 @@ export declare const StupidlyLargeService: () => {
596
596
  output: import("@sinclair/typebox").TObject<{
597
597
  b: import("@sinclair/typebox").TNumber;
598
598
  }>;
599
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
599
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
600
600
  a: number;
601
601
  }>) => Promise<import("../transport/message").TransportMessage<{
602
602
  b: number;
@@ -611,7 +611,7 @@ export declare const StupidlyLargeService: () => {
611
611
  output: import("@sinclair/typebox").TObject<{
612
612
  b: import("@sinclair/typebox").TNumber;
613
613
  }>;
614
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
614
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
615
615
  a: number;
616
616
  }>) => Promise<import("../transport/message").TransportMessage<{
617
617
  b: number;
@@ -626,7 +626,7 @@ export declare const StupidlyLargeService: () => {
626
626
  output: import("@sinclair/typebox").TObject<{
627
627
  b: import("@sinclair/typebox").TNumber;
628
628
  }>;
629
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
629
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
630
630
  a: number;
631
631
  }>) => Promise<import("../transport/message").TransportMessage<{
632
632
  b: number;
@@ -641,7 +641,7 @@ export declare const StupidlyLargeService: () => {
641
641
  output: import("@sinclair/typebox").TObject<{
642
642
  b: import("@sinclair/typebox").TNumber;
643
643
  }>;
644
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
644
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
645
645
  a: number;
646
646
  }>) => Promise<import("../transport/message").TransportMessage<{
647
647
  b: number;
@@ -656,7 +656,7 @@ export declare const StupidlyLargeService: () => {
656
656
  output: import("@sinclair/typebox").TObject<{
657
657
  b: import("@sinclair/typebox").TNumber;
658
658
  }>;
659
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
659
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
660
660
  a: number;
661
661
  }>) => Promise<import("../transport/message").TransportMessage<{
662
662
  b: number;
@@ -671,7 +671,7 @@ export declare const StupidlyLargeService: () => {
671
671
  output: import("@sinclair/typebox").TObject<{
672
672
  b: import("@sinclair/typebox").TNumber;
673
673
  }>;
674
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
674
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
675
675
  a: number;
676
676
  }>) => Promise<import("../transport/message").TransportMessage<{
677
677
  b: number;
@@ -686,7 +686,7 @@ export declare const StupidlyLargeService: () => {
686
686
  output: import("@sinclair/typebox").TObject<{
687
687
  b: import("@sinclair/typebox").TNumber;
688
688
  }>;
689
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
689
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
690
690
  a: number;
691
691
  }>) => Promise<import("../transport/message").TransportMessage<{
692
692
  b: number;
@@ -701,7 +701,7 @@ export declare const StupidlyLargeService: () => {
701
701
  output: import("@sinclair/typebox").TObject<{
702
702
  b: import("@sinclair/typebox").TNumber;
703
703
  }>;
704
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
704
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
705
705
  a: number;
706
706
  }>) => Promise<import("../transport/message").TransportMessage<{
707
707
  b: number;
@@ -716,7 +716,7 @@ export declare const StupidlyLargeService: () => {
716
716
  output: import("@sinclair/typebox").TObject<{
717
717
  b: import("@sinclair/typebox").TNumber;
718
718
  }>;
719
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
719
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
720
720
  a: number;
721
721
  }>) => Promise<import("../transport/message").TransportMessage<{
722
722
  b: number;
@@ -731,7 +731,7 @@ export declare const StupidlyLargeService: () => {
731
731
  output: import("@sinclair/typebox").TObject<{
732
732
  b: import("@sinclair/typebox").TNumber;
733
733
  }>;
734
- handler: (context: import("..").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
734
+ handler: (context: import("../router").ServiceContextWithState<{}>, input: import("../transport/message").TransportMessage<{
735
735
  a: number;
736
736
  }>) => Promise<import("../transport/message").TransportMessage<{
737
737
  b: number;
@@ -0,0 +1,2 @@
1
+ export { NaiveJsonCodec } from './json';
2
+ export type { Codec } from './types';
@@ -0,0 +1 @@
1
+ export { NaiveJsonCodec } from './json';
@@ -1,6 +1,6 @@
1
1
  import { pushable } from 'it-pushable';
2
2
  import { msg } from '../transport/message';
3
- import { waitForMessage } from '../transport/util';
3
+ import { waitForMessage } from '../transport';
4
4
  const noop = () => { };
5
5
  function _createRecursiveProxy(callback, path) {
6
6
  const proxy = new Proxy(noop, {
@@ -0,0 +1,7 @@
1
+ export { serializeService, ServiceBuilder } from './builder';
2
+ export type { ValidProcType, ProcListing, Service, ProcHandler, ProcInput, ProcOutput, ProcType, Procedure, } from './builder';
3
+ export { createClient } from './client';
4
+ export type { ServerClient } from './client';
5
+ export { createServer } from './server';
6
+ export type { Server } from './server';
7
+ export type { ServiceContext, ServiceContextWithState } from './context';
@@ -0,0 +1,3 @@
1
+ export { serializeService, ServiceBuilder } from './builder';
2
+ export { createClient } from './client';
3
+ export { createServer } from './server';
@@ -0,0 +1,14 @@
1
+ /// <reference types="node" />
2
+ import WebSocket from 'isomorphic-ws';
3
+ import { WebSocketServer } from 'ws';
4
+ import http from 'http';
5
+ import { WebSocketTransport } from './transport/impls/ws';
6
+ import { Static, TObject } from '@sinclair/typebox';
7
+ import { Procedure, ServiceContext } from './router';
8
+ import { Pushable } from 'it-pushable';
9
+ export declare function createWebSocketServer(server: http.Server): Promise<WebSocket.Server<typeof WebSocket, typeof http.IncomingMessage>>;
10
+ export declare function onServerReady(server: http.Server): Promise<number>;
11
+ export declare function createLocalWebSocketClient(port: number): Promise<WebSocket>;
12
+ export declare function createWsTransports(port: number, wss: WebSocketServer): [WebSocketTransport, WebSocketTransport];
13
+ export declare function asClientRpc<State extends object | unknown, I extends TObject, O extends TObject>(state: State, proc: Procedure<State, 'rpc', I, O>, extendedContext?: Omit<ServiceContext, 'state'>): (msg: Static<I>) => Promise<Static<O>>;
14
+ export declare function asClientStream<State extends object | unknown, I extends TObject, O extends TObject>(state: State, proc: Procedure<State, 'stream', I, O>, extendedContext?: Omit<ServiceContext, 'state'>): [Pushable<Static<I>>, Pushable<Static<O>>];
@@ -0,0 +1,73 @@
1
+ import WebSocket from 'isomorphic-ws';
2
+ import { WebSocketServer } from 'ws';
3
+ import { WebSocketTransport } from './transport/impls/ws';
4
+ import { payloadToTransportMessage } from './transport';
5
+ import { pushable } from 'it-pushable';
6
+ export async function createWebSocketServer(server) {
7
+ return new WebSocketServer({ server });
8
+ }
9
+ export async function onServerReady(server) {
10
+ return new Promise((resolve, reject) => {
11
+ server.listen(() => {
12
+ const addr = server.address();
13
+ if (typeof addr === 'object' && addr) {
14
+ resolve(addr.port);
15
+ }
16
+ else {
17
+ reject(new Error("couldn't find a port to allocate"));
18
+ }
19
+ });
20
+ });
21
+ }
22
+ export async function createLocalWebSocketClient(port) {
23
+ return new WebSocket(`ws://localhost:${port}`);
24
+ }
25
+ export function createWsTransports(port, wss) {
26
+ return [
27
+ new WebSocketTransport(async () => {
28
+ return createLocalWebSocketClient(port);
29
+ }, 'client'),
30
+ new WebSocketTransport(async () => {
31
+ return new Promise((resolve) => {
32
+ wss.on('connection', async function onConnect(serverSock) {
33
+ wss.removeListener('connection', onConnect);
34
+ resolve(serverSock);
35
+ });
36
+ });
37
+ }, 'SERVER'),
38
+ ];
39
+ }
40
+ export function asClientRpc(state, proc, extendedContext) {
41
+ return (msg) => proc
42
+ .handler({ ...extendedContext, state }, payloadToTransportMessage(msg))
43
+ .then((res) => res.payload);
44
+ }
45
+ export function asClientStream(state, proc, extendedContext) {
46
+ const rawInput = pushable({ objectMode: true });
47
+ const rawOutput = pushable({ objectMode: true });
48
+ const transportInput = pushable({
49
+ objectMode: true,
50
+ });
51
+ const transportOutput = pushable({
52
+ objectMode: true,
53
+ });
54
+ // wrapping in transport
55
+ (async () => {
56
+ for await (const rawIn of rawInput) {
57
+ transportInput.push(payloadToTransportMessage(rawIn));
58
+ }
59
+ transportInput.end();
60
+ })();
61
+ // unwrap from transport
62
+ (async () => {
63
+ for await (const transportRes of transportOutput) {
64
+ rawOutput.push(transportRes.payload);
65
+ }
66
+ })();
67
+ // handle
68
+ (async () => {
69
+ await proc.handler({ ...extendedContext, state }, transportInput, transportOutput);
70
+ transportOutput.end();
71
+ })();
72
+ return [rawInput, rawOutput];
73
+ }
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
- import { OpaqueTransportMessage, TransportClientId } from './message';
3
- import { Transport } from './types';
4
- export declare class StreamTransport extends Transport {
2
+ import { OpaqueTransportMessage, TransportClientId } from '../message';
3
+ import { Transport } from '../types';
4
+ export declare class StdioTransport extends Transport {
5
5
  input: NodeJS.ReadableStream;
6
6
  output: NodeJS.WritableStream;
7
7
  constructor(clientId: TransportClientId, input?: NodeJS.ReadableStream, output?: NodeJS.WritableStream);
@@ -1,7 +1,7 @@
1
- import { NaiveJsonCodec } from '../codec/json';
2
- import { Transport } from './types';
1
+ import { NaiveJsonCodec } from '../../codec/json';
2
+ import { Transport } from '../types';
3
3
  import readline from 'readline';
4
- export class StreamTransport extends Transport {
4
+ export class StdioTransport extends Transport {
5
5
  input;
6
6
  output;
7
7
  constructor(clientId, input = process.stdin, output = process.stdout) {
@@ -1,13 +1,13 @@
1
1
  import { describe, test, expect } from 'vitest';
2
2
  import stream from 'node:stream';
3
- import { StreamTransport } from './stream';
4
- import { waitForMessage } from './util';
3
+ import { StdioTransport } from './stdio';
4
+ import { waitForMessage } from '..';
5
5
  describe('sending and receiving across node streams works', () => {
6
6
  test('basic send/receive', async () => {
7
7
  const clientToServer = new stream.PassThrough();
8
8
  const serverToClient = new stream.PassThrough();
9
- const serverTransport = new StreamTransport('SERVER', clientToServer, serverToClient);
10
- const clientTransport = new StreamTransport('client', serverToClient, clientToServer);
9
+ const serverTransport = new StdioTransport('SERVER', clientToServer, serverToClient);
10
+ const clientTransport = new StdioTransport('client', serverToClient, clientToServer);
11
11
  const msg = {
12
12
  msg: 'cool',
13
13
  test: 123,
@@ -1,7 +1,7 @@
1
1
  /// <reference types="ws" />
2
2
  import WebSocket from 'isomorphic-ws';
3
- import { Transport } from './types';
4
- import { MessageId, OpaqueTransportMessage, TransportClientId } from './message';
3
+ import { Transport } from '../types';
4
+ import { MessageId, OpaqueTransportMessage, TransportClientId } from '../message';
5
5
  interface Options {
6
6
  retryIntervalMs: number;
7
7
  }
@@ -1,6 +1,6 @@
1
- import { Transport } from './types';
2
- import { NaiveJsonCodec } from '../codec/json';
3
- import { log } from '../logging';
1
+ import { Transport } from '../types';
2
+ import { NaiveJsonCodec } from '../../codec/json';
3
+ import { log } from '../../logging';
4
4
  const defaultOptions = {
5
5
  retryIntervalMs: 250,
6
6
  };
@@ -1,7 +1,8 @@
1
1
  import http from 'http';
2
2
  import { describe, test, expect, afterAll } from 'vitest';
3
- import { createWebSocketServer, createWsTransports, onServerReady, waitForMessage, } from './util';
3
+ import { createWebSocketServer, createWsTransports, onServerReady, } from '../../testUtils';
4
4
  import { nanoid } from 'nanoid';
5
+ import { waitForMessage } from '..';
5
6
  const getMsg = () => ({
6
7
  id: nanoid(),
7
8
  from: 'client',
@@ -0,0 +1,6 @@
1
+ import { OpaqueTransportMessage } from './message';
2
+ import { Transport } from './types';
3
+ export { Transport } from './types';
4
+ export { TransportMessageSchema, OpaqueTransportMessageSchema, TransportAckSchema, msg, payloadToTransportMessage, ack, reply, } from './message';
5
+ export type { TransportMessage, MessageId, OpaqueTransportMessage, TransportClientId, TransportMessageAck, } from './message';
6
+ export declare function waitForMessage(t: Transport, filter?: (msg: OpaqueTransportMessage) => boolean): Promise<unknown>;
@@ -0,0 +1,14 @@
1
+ // re-export
2
+ export { Transport } from './types';
3
+ export { TransportMessageSchema, OpaqueTransportMessageSchema, TransportAckSchema, msg, payloadToTransportMessage, ack, reply, } from './message';
4
+ export async function waitForMessage(t, filter) {
5
+ return new Promise((resolve, _reject) => {
6
+ function onMessage(msg) {
7
+ if (!filter || filter?.(msg)) {
8
+ resolve(msg.payload);
9
+ t.removeMessageListener(onMessage);
10
+ }
11
+ }
12
+ t.addMessageListener(onMessage);
13
+ });
14
+ }
package/package.json CHANGED
@@ -2,10 +2,19 @@
2
2
  "name": "@replit/river",
3
3
  "sideEffects": false,
4
4
  "description": "It's like tRPC but... with JSON Schema Support, duplex streaming and support for service multiplexing. Transport agnostic!",
5
- "version": "0.2.1",
5
+ "version": "0.3.0",
6
6
  "type": "module",
7
- "main": "index.js",
8
- "types": "index.d.ts",
7
+ "main": "dist/index.js",
8
+ "exports": {
9
+ ".": "./dist/router/index.js",
10
+ "./logging": "./dist/logging/index.js",
11
+ "./codec": "./dist/codec/index.js",
12
+ "./test-util": "./dist/testUtils.js",
13
+ "./package.json": "./package.json",
14
+ "./transport": "./dist/transport/index.js",
15
+ "./transport/ws": "./dist/transport/impls/ws.js",
16
+ "./transport/stdio": "./dist/transport/impls/stdio.js"
17
+ },
9
18
  "files": [
10
19
  "dist"
11
20
  ],
@@ -21,7 +30,7 @@
21
30
  "prettier": "^3.0.0",
22
31
  "tsup": "^7.2.0",
23
32
  "typescript": "^5.2.2",
24
- "vitest": "^0.34.3"
33
+ "vitest": "^0.34.6"
25
34
  },
26
35
  "scripts": {
27
36
  "check": "tsc --noEmit && npx prettier . --check",
package/dist/index.d.ts DELETED
@@ -1,14 +0,0 @@
1
- export { serializeService, ServiceBuilder } from './router/builder';
2
- export type { ValidProcType, ProcListing, Service, ProcHandler, ProcInput, ProcOutput, ProcType, Procedure, } from './router/builder';
3
- export { createClient } from './router/client';
4
- export type { ServerClient } from './router/client';
5
- export { createServer } from './router/server';
6
- export { asClientRpc, asClientStream } from './router/server.util';
7
- export type { Server } from './router/server';
8
- export type { ServiceContext, ServiceContextWithState } from './router/context';
9
- export { Transport } from './transport/types';
10
- export { TransportMessageSchema, OpaqueTransportMessageSchema, TransportAckSchema, msg, payloadToTransportMessage, ack, reply, } from './transport/message';
11
- export type { TransportMessage, MessageId, OpaqueTransportMessage, TransportClientId, TransportMessageAck, } from './transport/message';
12
- export { StreamTransport } from './transport/stream';
13
- export { WebSocketTransport } from './transport/ws';
14
- export { createWebSocketServer, onServerReady, createWsTransports, waitForMessage, createLocalWebSocketClient, } from './transport/util';
package/dist/index.js DELETED
@@ -1,9 +0,0 @@
1
- export { serializeService, ServiceBuilder } from './router/builder';
2
- export { createClient } from './router/client';
3
- export { createServer } from './router/server';
4
- export { asClientRpc, asClientStream } from './router/server.util';
5
- export { Transport } from './transport/types';
6
- export { TransportMessageSchema, OpaqueTransportMessageSchema, TransportAckSchema, msg, payloadToTransportMessage, ack, reply, } from './transport/message';
7
- export { StreamTransport } from './transport/stream';
8
- export { WebSocketTransport } from './transport/ws';
9
- export { createWebSocketServer, onServerReady, createWsTransports, waitForMessage, createLocalWebSocketClient, } from './transport/util';
@@ -1,6 +0,0 @@
1
- import { Static, TObject } from '@sinclair/typebox';
2
- import { Procedure } from './builder';
3
- import type { Pushable } from 'it-pushable';
4
- import { ServiceContext } from './context';
5
- export declare function asClientRpc<State extends object | unknown, I extends TObject, O extends TObject>(state: State, proc: Procedure<State, 'rpc', I, O>, extendedContext?: Omit<ServiceContext, 'state'>): (msg: Static<I>) => Promise<Static<O>>;
6
- export declare function asClientStream<State extends object | unknown, I extends TObject, O extends TObject>(state: State, proc: Procedure<State, 'stream', I, O>, extendedContext?: Omit<ServiceContext, 'state'>): [Pushable<Static<I>>, Pushable<Static<O>>];
@@ -1,32 +0,0 @@
1
- import { payloadToTransportMessage, } from '../transport/message';
2
- import { pushable } from 'it-pushable';
3
- export function asClientRpc(state, proc, extendedContext) {
4
- return (msg) => proc
5
- .handler({ ...extendedContext, state }, payloadToTransportMessage(msg))
6
- .then((res) => res.payload);
7
- }
8
- export function asClientStream(state, proc, extendedContext) {
9
- const i = pushable({ objectMode: true });
10
- const o = pushable({ objectMode: true });
11
- const ri = pushable({ objectMode: true });
12
- const ro = pushable({ objectMode: true });
13
- // wrapping in transport
14
- (async () => {
15
- for await (const rawIn of i) {
16
- ri.push(payloadToTransportMessage(rawIn));
17
- }
18
- ri.end();
19
- })();
20
- // unwrap from transport
21
- (async () => {
22
- for await (const transportRes of ro) {
23
- o.push(transportRes.payload);
24
- }
25
- })();
26
- // handle
27
- (async () => {
28
- await proc.handler({ ...extendedContext, state }, ri, ro);
29
- ro.end();
30
- })();
31
- return [i, o];
32
- }
@@ -1,7 +0,0 @@
1
- import { OpaqueTransportMessage, TransportClientId } from './message';
2
- import { Transport } from './types';
3
- export declare class StdioTransport extends Transport {
4
- constructor(clientId: TransportClientId);
5
- send(msg: OpaqueTransportMessage): string;
6
- close(): Promise<void>;
7
- }
@@ -1,20 +0,0 @@
1
- import { NaiveJsonCodec } from '../codec/json';
2
- import { Transport } from './types';
3
- import readline from 'readline';
4
- export class StdioTransport extends Transport {
5
- constructor(clientId) {
6
- super(NaiveJsonCodec, clientId);
7
- const { stdin, stdout } = process;
8
- const rl = readline.createInterface({
9
- input: stdin,
10
- output: stdout,
11
- });
12
- rl.on('line', (msg) => this.onMessage(msg));
13
- }
14
- send(msg) {
15
- const id = msg.id;
16
- process.stdout.write(this.codec.toStringBuf(msg));
17
- return id;
18
- }
19
- async close() { }
20
- }
@@ -1,12 +0,0 @@
1
- /// <reference types="node" />
2
- import http from 'http';
3
- import WebSocket from 'isomorphic-ws';
4
- import { WebSocketServer } from 'ws';
5
- import { Transport } from './types';
6
- import { WebSocketTransport } from './ws';
7
- import { OpaqueTransportMessage } from './message';
8
- export declare function createWebSocketServer(server: http.Server): Promise<WebSocket.Server<typeof WebSocket, typeof http.IncomingMessage>>;
9
- export declare function onServerReady(server: http.Server): Promise<number>;
10
- export declare function createLocalWebSocketClient(port: number): Promise<WebSocket>;
11
- export declare function createWsTransports(port: number, wss: WebSocketServer): [WebSocketTransport, WebSocketTransport];
12
- export declare function waitForMessage(t: Transport, filter?: (msg: OpaqueTransportMessage) => boolean): Promise<unknown>;
@@ -1,48 +0,0 @@
1
- import WebSocket from 'isomorphic-ws';
2
- import { WebSocketServer } from 'ws';
3
- import { WebSocketTransport } from './ws';
4
- export async function createWebSocketServer(server) {
5
- return new WebSocketServer({ server });
6
- }
7
- export async function onServerReady(server) {
8
- return new Promise((resolve, reject) => {
9
- server.listen(() => {
10
- const addr = server.address();
11
- if (typeof addr === 'object' && addr) {
12
- resolve(addr.port);
13
- }
14
- else {
15
- reject(new Error("couldn't find a port to allocate"));
16
- }
17
- });
18
- });
19
- }
20
- export async function createLocalWebSocketClient(port) {
21
- return new WebSocket(`ws://localhost:${port}`);
22
- }
23
- export function createWsTransports(port, wss) {
24
- return [
25
- new WebSocketTransport(async () => {
26
- return createLocalWebSocketClient(port);
27
- }, 'client'),
28
- new WebSocketTransport(async () => {
29
- return new Promise((resolve) => {
30
- wss.on('connection', async function onConnect(serverSock) {
31
- wss.removeListener('connection', onConnect);
32
- resolve(serverSock);
33
- });
34
- });
35
- }, 'SERVER'),
36
- ];
37
- }
38
- export async function waitForMessage(t, filter) {
39
- return new Promise((resolve, _reject) => {
40
- function onMessage(msg) {
41
- if (!filter || filter?.(msg)) {
42
- resolve(msg.payload);
43
- t.removeMessageListener(onMessage);
44
- }
45
- }
46
- t.addMessageListener(onMessage);
47
- });
48
- }
@@ -1,12 +0,0 @@
1
- /// <reference types="node" />
2
- import http from 'http';
3
- import WebSocket from 'isomorphic-ws';
4
- import { WebSocketServer } from 'ws';
5
- import { Transport } from './types';
6
- import { OpaqueTransportMessage } from './message';
7
- export declare function createWebSocketServer(server: http.Server): Promise<WebSocket.Server<typeof WebSocket, typeof http.IncomingMessage>>;
8
- export declare function onServerReady(server: http.Server, port: number): Promise<void>;
9
- export declare function createWsTransports(port: number, wss: WebSocketServer): Promise<[Transport, Transport]>;
10
- export declare function waitForSocketReady(socket: WebSocket): Promise<void>;
11
- export declare function createWebSocketClient(port: number): Promise<WebSocket>;
12
- export declare function waitForMessage(t: Transport, filter?: (msg: OpaqueTransportMessage) => boolean): Promise<unknown>;
@@ -1,43 +0,0 @@
1
- import WebSocket from 'isomorphic-ws';
2
- import { WebSocketServer } from 'ws';
3
- import { WebSocketTransport } from './ws';
4
- export async function createWebSocketServer(server) {
5
- return new WebSocketServer({ server });
6
- }
7
- export async function onServerReady(server, port) {
8
- return new Promise((resolve) => {
9
- server.listen(port, resolve);
10
- });
11
- }
12
- export async function createWsTransports(port, wss) {
13
- return new Promise((resolve) => {
14
- const clientSockPromise = createWebSocketClient(port);
15
- wss.on('connection', async (serverSock) => {
16
- resolve([
17
- new WebSocketTransport(await clientSockPromise, 'client'),
18
- new WebSocketTransport(serverSock, 'SERVER'),
19
- ]);
20
- });
21
- });
22
- }
23
- export async function waitForSocketReady(socket) {
24
- return new Promise((resolve) => {
25
- socket.addEventListener('open', () => resolve());
26
- });
27
- }
28
- export async function createWebSocketClient(port) {
29
- const client = new WebSocket(`ws://localhost:${port}`);
30
- await waitForSocketReady(client);
31
- return client;
32
- }
33
- export async function waitForMessage(t, filter) {
34
- return new Promise((resolve, _reject) => {
35
- function onMessage(msg) {
36
- if (!filter || filter?.(msg)) {
37
- resolve(msg.payload);
38
- t.removeMessageListener(onMessage);
39
- }
40
- }
41
- t.addMessageListener(onMessage);
42
- });
43
- }