@replit/river 0.9.2 → 0.10.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.
Files changed (54) hide show
  1. package/dist/__tests__/bandwidth.bench.js +11 -11
  2. package/dist/__tests__/cleanup.test.d.ts +2 -0
  3. package/dist/__tests__/cleanup.test.d.ts.map +1 -0
  4. package/dist/__tests__/{invariants.test.js → cleanup.test.js} +47 -20
  5. package/dist/__tests__/disconnects.test.d.ts +2 -0
  6. package/dist/__tests__/disconnects.test.d.ts.map +1 -0
  7. package/dist/__tests__/disconnects.test.js +163 -0
  8. package/dist/__tests__/e2e.test.js +33 -32
  9. package/dist/__tests__/fixtures/cleanup.d.ts +2 -2
  10. package/dist/__tests__/fixtures/cleanup.d.ts.map +1 -1
  11. package/dist/__tests__/fixtures/cleanup.js +6 -9
  12. package/dist/__tests__/fixtures/services.d.ts +36 -36
  13. package/dist/__tests__/fixtures/services.d.ts.map +1 -1
  14. package/dist/__tests__/fixtures/services.js +36 -53
  15. package/dist/__tests__/handler.test.js +6 -7
  16. package/dist/__tests__/typescript-stress.test.d.ts +149 -149
  17. package/dist/__tests__/typescript-stress.test.d.ts.map +1 -1
  18. package/dist/__tests__/typescript-stress.test.js +14 -14
  19. package/dist/router/builder.d.ts +6 -7
  20. package/dist/router/builder.d.ts.map +1 -1
  21. package/dist/router/client.d.ts +7 -3
  22. package/dist/router/client.d.ts.map +1 -1
  23. package/dist/router/client.js +204 -106
  24. package/dist/router/defs.d.ts +16 -0
  25. package/dist/router/defs.d.ts.map +1 -0
  26. package/dist/router/defs.js +11 -0
  27. package/dist/router/index.d.ts +2 -0
  28. package/dist/router/index.d.ts.map +1 -1
  29. package/dist/router/index.js +1 -0
  30. package/dist/router/result.d.ts +2 -1
  31. package/dist/router/result.d.ts.map +1 -1
  32. package/dist/router/result.js +5 -1
  33. package/dist/router/server.d.ts +5 -5
  34. package/dist/router/server.d.ts.map +1 -1
  35. package/dist/router/server.js +125 -82
  36. package/dist/transport/impls/stdio/stdio.test.js +1 -2
  37. package/dist/transport/impls/ws/client.d.ts +1 -4
  38. package/dist/transport/impls/ws/client.d.ts.map +1 -1
  39. package/dist/transport/impls/ws/client.js +5 -6
  40. package/dist/transport/impls/ws/server.d.ts +3 -0
  41. package/dist/transport/impls/ws/server.d.ts.map +1 -1
  42. package/dist/transport/impls/ws/server.js +28 -23
  43. package/dist/transport/impls/ws/ws.test.js +84 -16
  44. package/dist/transport/index.d.ts +0 -9
  45. package/dist/transport/index.d.ts.map +1 -1
  46. package/dist/transport/index.js +0 -21
  47. package/dist/transport/message.d.ts +3 -4
  48. package/dist/transport/message.d.ts.map +1 -1
  49. package/dist/util/testHelpers.d.ts +20 -97
  50. package/dist/util/testHelpers.d.ts.map +1 -1
  51. package/dist/util/testHelpers.js +94 -249
  52. package/package.json +14 -13
  53. package/dist/__tests__/invariants.test.d.ts +0 -2
  54. package/dist/__tests__/invariants.test.d.ts.map +0 -1
@@ -23,11 +23,11 @@ export declare const TestServiceConstructor: () => {
23
23
  errors: import("@sinclair/typebox").TNever;
24
24
  handler: (context: import("../../router").ServiceContextWithState<{
25
25
  count: number;
26
- }>, input: import("../../transport/message").TransportMessage<{
26
+ }>, input: {
27
27
  n: number;
28
- }>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
28
+ }) => Promise<import("../../router/result").Result<{
29
29
  result: number;
30
- }, never>>>;
30
+ }, never>>;
31
31
  type: "rpc";
32
32
  };
33
33
  } & {
@@ -43,13 +43,13 @@ export declare const TestServiceConstructor: () => {
43
43
  errors: import("@sinclair/typebox").TNever;
44
44
  handler: (context: import("../../router").ServiceContextWithState<{
45
45
  count: number;
46
- }>, input: AsyncIterable<import("../../transport/message").TransportMessage<{
46
+ }>, input: AsyncIterableIterator<{
47
47
  end?: boolean | undefined;
48
48
  msg: string;
49
49
  ignore: boolean;
50
- }>>, output: import("it-pushable").Pushable<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
50
+ }>, output: import("it-pushable").Pushable<import("../../router/result").Result<{
51
51
  response: string;
52
- }, never>>, void, unknown>) => Promise<void>;
52
+ }, never>, void, unknown>) => Promise<void>;
53
53
  type: "stream";
54
54
  };
55
55
  } & {
@@ -68,15 +68,15 @@ export declare const TestServiceConstructor: () => {
68
68
  errors: import("@sinclair/typebox").TNever;
69
69
  handler: (context: import("../../router").ServiceContextWithState<{
70
70
  count: number;
71
- }>, init: import("../../transport/message").TransportMessage<{
71
+ }>, init: {
72
72
  prefix: string;
73
- }>, input: AsyncIterable<import("../../transport/message").TransportMessage<{
73
+ }, input: AsyncIterableIterator<{
74
74
  end?: boolean | undefined;
75
75
  msg: string;
76
76
  ignore: boolean;
77
- }>>, output: import("it-pushable").Pushable<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
77
+ }>, output: import("it-pushable").Pushable<import("../../router/result").Result<{
78
78
  response: string;
79
- }, never>>, void, unknown>) => Promise<void>;
79
+ }, never>, void, unknown>) => Promise<void>;
80
80
  type: "stream";
81
81
  };
82
82
  };
@@ -97,11 +97,11 @@ export declare const OrderingServiceConstructor: () => {
97
97
  errors: import("@sinclair/typebox").TNever;
98
98
  handler: (context: import("../../router").ServiceContextWithState<{
99
99
  msgs: number[];
100
- }>, input: import("../../transport/message").TransportMessage<{
100
+ }>, input: {
101
101
  n: number;
102
- }>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
102
+ }) => Promise<import("../../router/result").Result<{
103
103
  n: number;
104
- }, never>>>;
104
+ }, never>>;
105
105
  type: "rpc";
106
106
  };
107
107
  } & {
@@ -113,9 +113,9 @@ export declare const OrderingServiceConstructor: () => {
113
113
  errors: import("@sinclair/typebox").TNever;
114
114
  handler: (context: import("../../router").ServiceContextWithState<{
115
115
  msgs: number[];
116
- }>, input: import("../../transport/message").TransportMessage<{}>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
116
+ }>, input: {}) => Promise<import("../../router/result").Result<{
117
117
  msgs: number[];
118
- }, never>>>;
118
+ }, never>>;
119
119
  type: "rpc";
120
120
  };
121
121
  };
@@ -132,11 +132,11 @@ export declare const BinaryFileServiceConstructor: () => {
132
132
  contents: import("@sinclair/typebox").TUint8Array;
133
133
  }>;
134
134
  errors: import("@sinclair/typebox").TNever;
135
- handler: (context: import("../../router").ServiceContextWithState<{}>, input: import("../../transport/message").TransportMessage<{
135
+ handler: (context: import("../../router").ServiceContextWithState<{}>, input: {
136
136
  file: string;
137
- }>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
137
+ }) => Promise<import("../../router/result").Result<{
138
138
  contents: Uint8Array;
139
- }, never>>>;
139
+ }, never>>;
140
140
  type: "rpc";
141
141
  };
142
142
  };
@@ -162,10 +162,10 @@ export declare const FallibleServiceConstructor: () => {
162
162
  test: import("@sinclair/typebox").TString;
163
163
  }>;
164
164
  }>;
165
- handler: (context: import("../../router").ServiceContextWithState<{}>, input: import("../../transport/message").TransportMessage<{
165
+ handler: (context: import("../../router").ServiceContextWithState<{}>, input: {
166
166
  a: number;
167
167
  b: number;
168
- }>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
168
+ }) => Promise<import("../../router/result").Result<{
169
169
  result: number;
170
170
  }, {
171
171
  message: string;
@@ -173,7 +173,7 @@ export declare const FallibleServiceConstructor: () => {
173
173
  extras: {
174
174
  test: string;
175
175
  };
176
- }>>>;
176
+ }>>;
177
177
  type: "rpc";
178
178
  };
179
179
  } & {
@@ -190,16 +190,16 @@ export declare const FallibleServiceConstructor: () => {
190
190
  code: import("@sinclair/typebox").TLiteral<"STREAM_ERROR">;
191
191
  message: import("@sinclair/typebox").TString;
192
192
  }>;
193
- handler: (context: import("../../router").ServiceContextWithState<{}>, input: AsyncIterable<import("../../transport/message").TransportMessage<{
193
+ handler: (context: import("../../router").ServiceContextWithState<{}>, input: AsyncIterableIterator<{
194
194
  msg: string;
195
195
  throwResult: boolean;
196
196
  throwError: boolean;
197
- }>>, output: import("it-pushable").Pushable<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
197
+ }>, output: import("it-pushable").Pushable<import("../../router/result").Result<{
198
198
  response: string;
199
199
  }, {
200
200
  message: string;
201
201
  code: "STREAM_ERROR";
202
- }>>, void, unknown>) => Promise<void>;
202
+ }>, void, unknown>) => Promise<void>;
203
203
  type: "stream";
204
204
  };
205
205
  };
@@ -220,11 +220,11 @@ export declare const SubscribableServiceConstructor: () => {
220
220
  errors: import("@sinclair/typebox").TNever;
221
221
  handler: (context: import("../../router").ServiceContextWithState<{
222
222
  count: Observable<number>;
223
- }>, input: import("../../transport/message").TransportMessage<{
223
+ }>, input: {
224
224
  n: number;
225
- }>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
225
+ }) => Promise<import("../../router/result").Result<{
226
226
  result: number;
227
- }, never>>>;
227
+ }, never>>;
228
228
  type: "rpc";
229
229
  };
230
230
  } & {
@@ -236,9 +236,9 @@ export declare const SubscribableServiceConstructor: () => {
236
236
  errors: import("@sinclair/typebox").TNever;
237
237
  handler: (context: import("../../router").ServiceContextWithState<{
238
238
  count: Observable<number>;
239
- }>, input: import("../../transport/message").TransportMessage<{}>, output: import("it-pushable").Pushable<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
239
+ }>, input: {}, output: import("it-pushable").Pushable<import("../../router/result").Result<{
240
240
  result: number;
241
- }, never>>, void, unknown>) => Promise<void>;
241
+ }, never>, void, unknown>) => Promise<void>;
242
242
  type: "subscription";
243
243
  };
244
244
  };
@@ -255,11 +255,11 @@ export declare const UploadableServiceConstructor: () => {
255
255
  result: import("@sinclair/typebox").TNumber;
256
256
  }>;
257
257
  errors: import("@sinclair/typebox").TNever;
258
- handler: (context: import("../../router").ServiceContextWithState<{}>, input: AsyncIterable<import("../../transport/message").TransportMessage<{
258
+ handler: (context: import("../../router").ServiceContextWithState<{}>, input: AsyncIterableIterator<{
259
259
  n: number;
260
- }>>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
260
+ }>) => Promise<import("../../router/result").Result<{
261
261
  result: number;
262
- }, never>>>;
262
+ }, never>>;
263
263
  type: "upload";
264
264
  };
265
265
  } & {
@@ -274,13 +274,13 @@ export declare const UploadableServiceConstructor: () => {
274
274
  result: import("@sinclair/typebox").TString;
275
275
  }>;
276
276
  errors: import("@sinclair/typebox").TNever;
277
- handler: (context: import("../../router").ServiceContextWithState<{}>, init: import("../../transport/message").TransportMessage<{
277
+ handler: (context: import("../../router").ServiceContextWithState<{}>, init: {
278
278
  prefix: string;
279
- }>, input: AsyncIterable<import("../../transport/message").TransportMessage<{
279
+ }, input: AsyncIterableIterator<{
280
280
  n: number;
281
- }>>) => Promise<import("../../transport/message").TransportMessage<import("../../router/result").Result<{
281
+ }>) => Promise<import("../../router/result").Result<{
282
282
  result: string;
283
- }, never>>>;
283
+ }, never>>;
284
284
  type: "upload";
285
285
  };
286
286
  };
@@ -1 +1 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../__tests__/fixtures/services.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,WAAW;;;;EAItB,CAAC;AACH,eAAO,MAAM,YAAY;;EAA2C,CAAC;AAErE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDpB,CAAC;AAEhB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBxB,CAAC;AAEhB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;CAc1B,CAAC;AAEhB,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiExB,CAAC;AAEhB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2B5B,CAAC;AAEhB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuC1B,CAAC"}
1
+ {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../__tests__/fixtures/services.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,WAAW;;;;EAItB,CAAC;AACH,eAAO,MAAM,YAAY;;EAA2C,CAAC;AAErE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8CpB,CAAC;AAEhB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBxB,CAAC;AAEhB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;CAc1B,CAAC;AAEhB,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDxB,CAAC;AAEhB,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B5B,CAAC;AAEhB,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B1B,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { Type } from '@sinclair/typebox';
2
2
  import { ServiceBuilder } from '../../router/builder';
3
- import { reply } from '../../transport/message';
4
3
  import { Err, Ok } from '../../router/result';
5
4
  import { Observable } from './observable';
6
5
  export const EchoRequest = Type.Object({
@@ -18,10 +17,9 @@ export const TestServiceConstructor = () => ServiceBuilder.create('test')
18
17
  input: Type.Object({ n: Type.Number() }),
19
18
  output: Type.Object({ result: Type.Number() }),
20
19
  errors: Type.Never(),
21
- async handler(ctx, msg) {
22
- const { n } = msg.payload;
20
+ async handler(ctx, { n }) {
23
21
  ctx.state.count += n;
24
- return reply(msg, Ok({ result: ctx.state.count }));
22
+ return Ok({ result: ctx.state.count });
25
23
  },
26
24
  })
27
25
  .defineProcedure('echo', {
@@ -30,12 +28,11 @@ export const TestServiceConstructor = () => ServiceBuilder.create('test')
30
28
  output: EchoResponse,
31
29
  errors: Type.Never(),
32
30
  async handler(_ctx, msgStream, returnStream) {
33
- for await (const msg of msgStream) {
34
- const req = msg.payload;
35
- if (!req.ignore) {
36
- returnStream.push(reply(msg, Ok({ response: req.msg })));
31
+ for await (const { ignore, msg, end } of msgStream) {
32
+ if (!ignore) {
33
+ returnStream.push(Ok({ response: msg }));
37
34
  }
38
- if (req.end) {
35
+ if (end) {
39
36
  returnStream.end();
40
37
  }
41
38
  }
@@ -48,10 +45,9 @@ export const TestServiceConstructor = () => ServiceBuilder.create('test')
48
45
  output: EchoResponse,
49
46
  errors: Type.Never(),
50
47
  async handler(_ctx, init, msgStream, returnStream) {
51
- for await (const msg of msgStream) {
52
- const req = msg.payload;
53
- if (!req.ignore) {
54
- returnStream.push(reply(msg, Ok({ response: `${init.payload.prefix} ${req.msg}` })));
48
+ for await (const { ignore, msg } of msgStream) {
49
+ if (!ignore) {
50
+ returnStream.push(Ok({ response: `${init.prefix} ${msg}` }));
55
51
  }
56
52
  }
57
53
  },
@@ -66,10 +62,9 @@ export const OrderingServiceConstructor = () => ServiceBuilder.create('test')
66
62
  input: Type.Object({ n: Type.Number() }),
67
63
  output: Type.Object({ n: Type.Number() }),
68
64
  errors: Type.Never(),
69
- async handler(ctx, msg) {
70
- const { n } = msg.payload;
65
+ async handler(ctx, { n }) {
71
66
  ctx.state.msgs.push(n);
72
- return reply(msg, Ok({ n }));
67
+ return Ok({ n });
73
68
  },
74
69
  })
75
70
  .defineProcedure('getAll', {
@@ -77,8 +72,8 @@ export const OrderingServiceConstructor = () => ServiceBuilder.create('test')
77
72
  input: Type.Object({}),
78
73
  output: Type.Object({ msgs: Type.Array(Type.Number()) }),
79
74
  errors: Type.Never(),
80
- async handler(ctx, msg) {
81
- return reply(msg, Ok({ msgs: ctx.state.msgs }));
75
+ async handler(ctx, _msg) {
76
+ return Ok({ msgs: ctx.state.msgs });
82
77
  },
83
78
  })
84
79
  .finalize();
@@ -88,9 +83,9 @@ export const BinaryFileServiceConstructor = () => ServiceBuilder.create('bin')
88
83
  input: Type.Object({ file: Type.String() }),
89
84
  output: Type.Object({ contents: Type.Uint8Array() }),
90
85
  errors: Type.Never(),
91
- async handler(_ctx, msg) {
92
- const bytes = new TextEncoder().encode(`contents for file ${msg.payload.file}`);
93
- return reply(msg, Ok({ contents: bytes }));
86
+ async handler(_ctx, { file }) {
87
+ const bytes = new TextEncoder().encode(`contents for file ${file}`);
88
+ return Ok({ contents: bytes });
94
89
  },
95
90
  })
96
91
  .finalize();
@@ -109,20 +104,16 @@ export const FallibleServiceConstructor = () => ServiceBuilder.create('fallible'
109
104
  extras: Type.Object({ test: Type.String() }),
110
105
  }),
111
106
  ]),
112
- async handler(_ctx, msg) {
113
- const { a, b } = msg.payload;
107
+ async handler(_ctx, { a, b }) {
114
108
  if (b === 0) {
115
- return reply(msg, {
116
- ok: false,
117
- payload: {
118
- code: DIV_BY_ZERO,
119
- message: 'Cannot divide by zero',
120
- extras: { test: 'abc' },
121
- },
109
+ return Err({
110
+ code: DIV_BY_ZERO,
111
+ message: 'Cannot divide by zero',
112
+ extras: { test: 'abc' },
122
113
  });
123
114
  }
124
115
  else {
125
- return reply(msg, Ok({ result: a / b }));
116
+ return Ok({ result: a / b });
126
117
  }
127
118
  },
128
119
  })
@@ -141,19 +132,18 @@ export const FallibleServiceConstructor = () => ServiceBuilder.create('fallible'
141
132
  }),
142
133
  ]),
143
134
  async handler(_ctx, msgStream, returnStream) {
144
- for await (const msg of msgStream) {
145
- const req = msg.payload;
146
- if (req.throwError) {
135
+ for await (const { msg, throwError, throwResult } of msgStream) {
136
+ if (throwError) {
147
137
  throw new Error('some message');
148
138
  }
149
- else if (req.throwResult) {
150
- returnStream.push(reply(msg, Err({
139
+ else if (throwResult) {
140
+ returnStream.push(Err({
151
141
  code: STREAM_ERROR,
152
142
  message: 'field throwResult was set to true',
153
- })));
143
+ }));
154
144
  }
155
145
  else {
156
- returnStream.push(reply(msg, Ok({ response: req.msg })));
146
+ returnStream.push(Ok({ response: msg }));
157
147
  }
158
148
  }
159
149
  },
@@ -168,10 +158,9 @@ export const SubscribableServiceConstructor = () => ServiceBuilder.create('subsc
168
158
  input: Type.Object({ n: Type.Number() }),
169
159
  output: Type.Object({ result: Type.Number() }),
170
160
  errors: Type.Never(),
171
- async handler(ctx, msg) {
172
- const { n } = msg.payload;
161
+ async handler(ctx, { n }) {
173
162
  ctx.state.count.set((prev) => prev + n);
174
- return reply(msg, Ok({ result: ctx.state.count.get() }));
163
+ return Ok({ result: ctx.state.count.get() });
175
164
  },
176
165
  })
177
166
  .defineProcedure('value', {
@@ -179,9 +168,9 @@ export const SubscribableServiceConstructor = () => ServiceBuilder.create('subsc
179
168
  input: Type.Object({}),
180
169
  output: Type.Object({ result: Type.Number() }),
181
170
  errors: Type.Never(),
182
- async handler(ctx, msg, returnStream) {
171
+ async handler(ctx, _msg, returnStream) {
183
172
  ctx.state.count.observe((count) => {
184
- returnStream.push(reply(msg, Ok({ result: count })));
173
+ returnStream.push(Ok({ result: count }));
185
174
  });
186
175
  },
187
176
  })
@@ -195,13 +184,10 @@ export const UploadableServiceConstructor = () => ServiceBuilder.create('uploada
195
184
  errors: Type.Never(),
196
185
  async handler(_ctx, msgStream) {
197
186
  let result = 0;
198
- let lastMsg;
199
- for await (const msg of msgStream) {
200
- const { n } = msg.payload;
187
+ for await (const { n } of msgStream) {
201
188
  result += n;
202
- lastMsg = msg;
203
189
  }
204
- return reply(lastMsg, Ok({ result: result }));
190
+ return Ok({ result: result });
205
191
  },
206
192
  })
207
193
  .defineProcedure('addMultipleWithPrefix', {
@@ -212,13 +198,10 @@ export const UploadableServiceConstructor = () => ServiceBuilder.create('uploada
212
198
  errors: Type.Never(),
213
199
  async handler(_ctx, init, msgStream) {
214
200
  let result = 0;
215
- let lastMsg;
216
- for await (const msg of msgStream) {
217
- const { n } = msg.payload;
201
+ for await (const { n } of msgStream) {
218
202
  result += n;
219
- lastMsg = msg;
220
203
  }
221
- return reply(lastMsg, Ok({ result: init.payload.prefix + ' ' + result }));
204
+ return Ok({ result: init.prefix + ' ' + result });
222
205
  },
223
206
  })
224
207
  .finalize();
@@ -1,13 +1,12 @@
1
- import { asClientRpc, asClientStream, asClientStreamWithInitialization, asClientSubscription, asClientUpload, asClientUploadWithInitialization, iterNext, } from '../util/testHelpers';
1
+ import { asClientRpc, asClientStream, asClientSubscription, asClientUpload, iterNext, } from '../util/testHelpers';
2
2
  import { assert, describe, expect, test } from 'vitest';
3
3
  import { DIV_BY_ZERO, FallibleServiceConstructor, STREAM_ERROR, SubscribableServiceConstructor, UploadableServiceConstructor, TestServiceConstructor, } from './fixtures/services';
4
4
  import { UNCAUGHT_ERROR } from '../router/result';
5
5
  import { Observable } from './fixtures/observable';
6
6
  describe('server-side test', () => {
7
7
  const service = TestServiceConstructor();
8
- const initialState = { count: 0 };
9
8
  test('rpc basic', async () => {
10
- const add = asClientRpc(initialState, service.procedures.add);
9
+ const add = asClientRpc({ count: 0 }, service.procedures.add);
11
10
  const result = await add({ n: 3 });
12
11
  assert(result.ok);
13
12
  expect(result.payload).toStrictEqual({ result: 3 });
@@ -35,7 +34,7 @@ describe('server-side test', () => {
35
34
  });
36
35
  });
37
36
  test('stream basic', async () => {
38
- const [input, output] = asClientStream(initialState, service.procedures.echo);
37
+ const [input, output] = asClientStream({ count: 0 }, service.procedures.echo);
39
38
  input.push({ msg: 'abc', ignore: false });
40
39
  input.push({ msg: 'def', ignore: true });
41
40
  input.push({ msg: 'ghi', ignore: false });
@@ -49,7 +48,7 @@ describe('server-side test', () => {
49
48
  expect(output.readableLength).toBe(0);
50
49
  });
51
50
  test('stream with initialization', async () => {
52
- const [input, output] = asClientStreamWithInitialization(initialState, service.procedures.echoWithPrefix, { prefix: 'test' });
51
+ const [input, output] = asClientStream({ count: 0 }, service.procedures.echoWithPrefix, { prefix: 'test' });
53
52
  input.push({ msg: 'abc', ignore: false });
54
53
  input.push({ msg: 'def', ignore: true });
55
54
  input.push({ msg: 'ghi', ignore: false });
@@ -101,7 +100,7 @@ describe('server-side test', () => {
101
100
  });
102
101
  test('uploads', async () => {
103
102
  const service = UploadableServiceConstructor();
104
- const [input, result] = asClientUpload({}, service.procedures.addMultiple);
103
+ const [input, result] = await asClientUpload({}, service.procedures.addMultiple);
105
104
  input.push({ n: 1 });
106
105
  input.push({ n: 2 });
107
106
  input.end();
@@ -109,7 +108,7 @@ describe('server-side test', () => {
109
108
  });
110
109
  test('uploads with initialization', async () => {
111
110
  const service = UploadableServiceConstructor();
112
- const [input, result] = asClientUploadWithInitialization({}, service.procedures.addMultipleWithPrefix, { prefix: 'test' });
111
+ const [input, result] = await asClientUpload({}, service.procedures.addMultipleWithPrefix, { prefix: 'test' });
113
112
  input.push({ n: 1 });
114
113
  input.push({ n: 2 });
115
114
  input.end();