@replit/river 0.9.3 → 0.10.1

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 (129) hide show
  1. package/dist/{router/builder.d.ts → builder-3c4485f0.d.ts} +82 -28
  2. package/dist/chunk-7WJ6YLE5.js +683 -0
  3. package/dist/chunk-AJQU4AZG.js +284 -0
  4. package/dist/chunk-ORAG7IAU.js +0 -0
  5. package/dist/chunk-PC65ZFWJ.js +29 -0
  6. package/dist/chunk-R6H2BIMC.js +49 -0
  7. package/dist/chunk-RGMHF6PF.js +65 -0
  8. package/dist/chunk-SLUSVGQH.js +30 -0
  9. package/dist/chunk-UU2Z7LDR.js +113 -0
  10. package/dist/chunk-WVT5QXMZ.js +20 -0
  11. package/dist/chunk-ZE4MX7DF.js +75 -0
  12. package/dist/codec/index.cjs +94 -0
  13. package/dist/codec/index.d.cts +15 -0
  14. package/dist/codec/index.d.ts +15 -4
  15. package/dist/codec/index.js +10 -2
  16. package/dist/connection-8e19874c.d.ts +11 -0
  17. package/dist/connection-f7688cc1.d.ts +11 -0
  18. package/dist/logging/index.cjs +56 -0
  19. package/dist/logging/index.d.cts +28 -0
  20. package/dist/logging/index.d.ts +6 -6
  21. package/dist/logging/index.js +9 -40
  22. package/dist/router/index.cjs +770 -0
  23. package/dist/router/index.d.cts +114 -0
  24. package/dist/router/index.d.ts +114 -10
  25. package/dist/router/index.js +24 -4
  26. package/dist/transport/impls/ws/client.cjs +505 -0
  27. package/dist/transport/impls/ws/client.d.cts +42 -0
  28. package/dist/transport/impls/ws/client.d.ts +9 -12
  29. package/dist/transport/impls/ws/client.js +10 -101
  30. package/dist/transport/impls/ws/server.cjs +457 -0
  31. package/dist/transport/impls/ws/server.d.cts +21 -0
  32. package/dist/transport/impls/ws/server.d.ts +14 -10
  33. package/dist/transport/impls/ws/server.js +11 -47
  34. package/dist/transport/index.cjs +362 -0
  35. package/dist/transport/{transport.d.ts → index.d.cts} +119 -7
  36. package/dist/transport/index.d.ts +273 -13
  37. package/dist/transport/index.js +20 -23
  38. package/dist/{codec/types.d.ts → types-3e5768ec.d.ts} +3 -2
  39. package/dist/util/testHelpers.cjs +731 -0
  40. package/dist/util/testHelpers.d.cts +79 -0
  41. package/dist/util/testHelpers.d.ts +34 -108
  42. package/dist/util/testHelpers.js +137 -320
  43. package/package.json +52 -23
  44. package/dist/__tests__/bandwidth.bench.d.ts +0 -2
  45. package/dist/__tests__/bandwidth.bench.d.ts.map +0 -1
  46. package/dist/__tests__/bandwidth.bench.js +0 -90
  47. package/dist/__tests__/e2e.test.d.ts +0 -2
  48. package/dist/__tests__/e2e.test.d.ts.map +0 -1
  49. package/dist/__tests__/e2e.test.js +0 -316
  50. package/dist/__tests__/fixtures/cleanup.d.ts +0 -12
  51. package/dist/__tests__/fixtures/cleanup.d.ts.map +0 -1
  52. package/dist/__tests__/fixtures/cleanup.js +0 -39
  53. package/dist/__tests__/fixtures/largePayload.json +0 -33
  54. package/dist/__tests__/fixtures/observable.d.ts +0 -26
  55. package/dist/__tests__/fixtures/observable.d.ts.map +0 -1
  56. package/dist/__tests__/fixtures/observable.js +0 -38
  57. package/dist/__tests__/fixtures/observable.test.d.ts +0 -2
  58. package/dist/__tests__/fixtures/observable.test.d.ts.map +0 -1
  59. package/dist/__tests__/fixtures/observable.test.js +0 -39
  60. package/dist/__tests__/fixtures/services.d.ts +0 -288
  61. package/dist/__tests__/fixtures/services.d.ts.map +0 -1
  62. package/dist/__tests__/fixtures/services.js +0 -224
  63. package/dist/__tests__/handler.test.d.ts +0 -2
  64. package/dist/__tests__/handler.test.d.ts.map +0 -1
  65. package/dist/__tests__/handler.test.js +0 -121
  66. package/dist/__tests__/invariants.test.d.ts +0 -2
  67. package/dist/__tests__/invariants.test.d.ts.map +0 -1
  68. package/dist/__tests__/invariants.test.js +0 -138
  69. package/dist/__tests__/serialize.test.d.ts +0 -2
  70. package/dist/__tests__/serialize.test.d.ts.map +0 -1
  71. package/dist/__tests__/serialize.test.js +0 -208
  72. package/dist/__tests__/typescript-stress.test.d.ts +0 -1583
  73. package/dist/__tests__/typescript-stress.test.d.ts.map +0 -1
  74. package/dist/__tests__/typescript-stress.test.js +0 -123
  75. package/dist/codec/binary.d.ts +0 -7
  76. package/dist/codec/binary.d.ts.map +0 -1
  77. package/dist/codec/binary.js +0 -20
  78. package/dist/codec/codec.test.d.ts +0 -5
  79. package/dist/codec/codec.test.d.ts.map +0 -1
  80. package/dist/codec/codec.test.js +0 -41
  81. package/dist/codec/index.d.ts.map +0 -1
  82. package/dist/codec/json.d.ts +0 -7
  83. package/dist/codec/json.d.ts.map +0 -1
  84. package/dist/codec/json.js +0 -51
  85. package/dist/codec/types.d.ts.map +0 -1
  86. package/dist/codec/types.js +0 -1
  87. package/dist/logging/index.d.ts.map +0 -1
  88. package/dist/router/builder.d.ts.map +0 -1
  89. package/dist/router/builder.js +0 -91
  90. package/dist/router/client.d.ts +0 -68
  91. package/dist/router/client.d.ts.map +0 -1
  92. package/dist/router/client.js +0 -159
  93. package/dist/router/context.d.ts +0 -30
  94. package/dist/router/context.d.ts.map +0 -1
  95. package/dist/router/context.js +0 -1
  96. package/dist/router/index.d.ts.map +0 -1
  97. package/dist/router/result.d.ts +0 -25
  98. package/dist/router/result.d.ts.map +0 -1
  99. package/dist/router/result.js +0 -18
  100. package/dist/router/server.d.ts +0 -39
  101. package/dist/router/server.d.ts.map +0 -1
  102. package/dist/router/server.js +0 -217
  103. package/dist/transport/events.d.ts +0 -19
  104. package/dist/transport/events.d.ts.map +0 -1
  105. package/dist/transport/events.js +0 -26
  106. package/dist/transport/impls/stdio/stdio.d.ts +0 -33
  107. package/dist/transport/impls/stdio/stdio.d.ts.map +0 -1
  108. package/dist/transport/impls/stdio/stdio.js +0 -75
  109. package/dist/transport/impls/stdio/stdio.test.d.ts +0 -2
  110. package/dist/transport/impls/stdio/stdio.test.d.ts.map +0 -1
  111. package/dist/transport/impls/stdio/stdio.test.js +0 -25
  112. package/dist/transport/impls/ws/client.d.ts.map +0 -1
  113. package/dist/transport/impls/ws/connection.d.ts +0 -11
  114. package/dist/transport/impls/ws/connection.d.ts.map +0 -1
  115. package/dist/transport/impls/ws/connection.js +0 -23
  116. package/dist/transport/impls/ws/server.d.ts.map +0 -1
  117. package/dist/transport/impls/ws/ws.test.d.ts +0 -2
  118. package/dist/transport/impls/ws/ws.test.d.ts.map +0 -1
  119. package/dist/transport/impls/ws/ws.test.js +0 -117
  120. package/dist/transport/index.d.ts.map +0 -1
  121. package/dist/transport/message.d.ts +0 -143
  122. package/dist/transport/message.d.ts.map +0 -1
  123. package/dist/transport/message.js +0 -113
  124. package/dist/transport/message.test.d.ts +0 -2
  125. package/dist/transport/message.test.d.ts.map +0 -1
  126. package/dist/transport/message.test.js +0 -52
  127. package/dist/transport/transport.d.ts.map +0 -1
  128. package/dist/transport/transport.js +0 -281
  129. package/dist/util/testHelpers.d.ts.map +0 -1
@@ -1,138 +0,0 @@
1
- import { afterAll, assert, describe, expect, test } from 'vitest';
2
- import http from 'http';
3
- import { createWebSocketServer, createWsTransports, iterNext, onServerReady, } from '../util/testHelpers';
4
- import { SubscribableServiceConstructor, TestServiceConstructor, } from './fixtures/services';
5
- import { createClient, createServer } from '../router';
6
- import { ensureServerIsClean, ensureTransportQueuesAreEventuallyEmpty, waitUntil, } from './fixtures/cleanup';
7
- describe('procedures should leave no trace after finishing', async () => {
8
- const httpServer = http.createServer();
9
- const port = await onServerReady(httpServer);
10
- const webSocketServer = await createWebSocketServer(httpServer);
11
- const getTransports = () => createWsTransports(port, webSocketServer);
12
- afterAll(() => {
13
- webSocketServer.close();
14
- httpServer.close();
15
- });
16
- test('closing a transport from the client cleans up connection on the server', async () => {
17
- const [clientTransport, serverTransport] = getTransports();
18
- const serviceDefs = { test: TestServiceConstructor() };
19
- const server = await createServer(serverTransport, serviceDefs);
20
- const client = createClient(clientTransport);
21
- expect(clientTransport.connections.size).toEqual(0);
22
- expect(serverTransport.connections.size).toEqual(0);
23
- // start procedure
24
- await client.test.add.rpc({ n: 3 });
25
- // end procedure
26
- expect(clientTransport.connections.size).toEqual(1);
27
- expect(serverTransport.connections.size).toEqual(1);
28
- // should be back to 0 connections after client closes
29
- clientTransport.close();
30
- expect(clientTransport.connections.size).toEqual(0);
31
- await waitUntil(() => serverTransport.connections.size, 0, 'server should cleanup connection after client closes');
32
- });
33
- test('closing a transport from the server cleans up connection on the client', async () => {
34
- const [clientTransport, serverTransport] = getTransports();
35
- const serviceDefs = { test: TestServiceConstructor() };
36
- const server = await createServer(serverTransport, serviceDefs);
37
- const client = createClient(clientTransport);
38
- expect(clientTransport.connections.size).toEqual(0);
39
- expect(serverTransport.connections.size).toEqual(0);
40
- // start procedure
41
- await client.test.add.rpc({ n: 3 });
42
- // end procedure
43
- expect(clientTransport.connections.size).toEqual(1);
44
- expect(serverTransport.connections.size).toEqual(1);
45
- // should be back to 0 connections after client closes
46
- serverTransport.close();
47
- expect(serverTransport.connections.size).toEqual(0);
48
- await waitUntil(() => clientTransport.connections.size, 0, 'client should cleanup connection after server closes');
49
- });
50
- test('rpc', async () => {
51
- const [clientTransport, serverTransport] = getTransports();
52
- const serviceDefs = { test: TestServiceConstructor() };
53
- const server = await createServer(serverTransport, serviceDefs);
54
- const client = createClient(clientTransport);
55
- let serverListeners = serverTransport.eventDispatcher.numberOfListeners('message');
56
- let clientListeners = clientTransport.eventDispatcher.numberOfListeners('message');
57
- // start procedure
58
- await client.test.add.rpc({ n: 3 });
59
- // end procedure
60
- // number of message handlers shouldn't increase after rpc
61
- expect(serverTransport.eventDispatcher.numberOfListeners('message')).toEqual(serverListeners);
62
- expect(clientTransport.eventDispatcher.numberOfListeners('message')).toEqual(clientListeners);
63
- // check number of connections
64
- expect(serverTransport.connections.size).toEqual(1);
65
- expect(clientTransport.connections.size).toEqual(1);
66
- await ensureTransportQueuesAreEventuallyEmpty(clientTransport);
67
- await ensureTransportQueuesAreEventuallyEmpty(serverTransport);
68
- // ensure we have no streams left on the server
69
- await ensureServerIsClean(server);
70
- });
71
- test('stream', async () => {
72
- const [clientTransport, serverTransport] = getTransports();
73
- const serviceDefs = { test: TestServiceConstructor() };
74
- const server = await createServer(serverTransport, serviceDefs);
75
- const client = createClient(clientTransport);
76
- let serverListeners = serverTransport.eventDispatcher.numberOfListeners('message');
77
- let clientListeners = clientTransport.eventDispatcher.numberOfListeners('message');
78
- // start procedure
79
- const [input, output, close] = await client.test.echo.stream();
80
- input.push({ msg: '1', ignore: false });
81
- input.push({ msg: '2', ignore: false, end: true });
82
- const result1 = await iterNext(output);
83
- assert(result1.ok);
84
- expect(result1.payload).toStrictEqual({ response: '1' });
85
- // ensure we only have one stream despite pushing multiple messages.
86
- await waitUntil(() => server.streams.size, 1);
87
- input.end();
88
- // ensure we no longer have any streams since the input was closed.
89
- await waitUntil(() => server.streams.size, 0);
90
- const result2 = await iterNext(output);
91
- assert(result2.ok);
92
- expect(result2.payload).toStrictEqual({ response: '2' });
93
- const result3 = await output.next();
94
- assert(result3.done);
95
- close();
96
- // end procedure
97
- // number of message handlers shouldn't increase after stream ends
98
- expect(serverTransport.eventDispatcher.numberOfListeners('message')).toEqual(serverListeners);
99
- expect(clientTransport.eventDispatcher.numberOfListeners('message')).toEqual(clientListeners);
100
- // check number of connections
101
- expect(serverTransport.connections.size).toEqual(1);
102
- expect(clientTransport.connections.size).toEqual(1);
103
- await ensureTransportQueuesAreEventuallyEmpty(clientTransport);
104
- await ensureTransportQueuesAreEventuallyEmpty(serverTransport);
105
- // ensure we have no streams left on the server
106
- await ensureServerIsClean(server);
107
- });
108
- test('subscription', async () => {
109
- const [clientTransport, serverTransport] = getTransports();
110
- const serviceDefs = { test: SubscribableServiceConstructor() };
111
- const server = await createServer(serverTransport, serviceDefs);
112
- const client = createClient(clientTransport);
113
- let serverListeners = serverTransport.eventDispatcher.numberOfListeners('message');
114
- let clientListeners = clientTransport.eventDispatcher.numberOfListeners('message');
115
- // start procedure
116
- const [subscription, close] = await client.test.value.subscribe({});
117
- let result = await iterNext(subscription);
118
- assert(result.ok);
119
- expect(result.payload).toStrictEqual({ result: 0 });
120
- const add1 = await client.test.add.rpc({ n: 1 });
121
- assert(add1.ok);
122
- result = await iterNext(subscription);
123
- assert(result.ok);
124
- expect(result.payload).toStrictEqual({ result: 1 });
125
- close();
126
- // end procedure
127
- // number of message handlers shouldn't increase after stream ends
128
- expect(serverTransport.eventDispatcher.numberOfListeners('message')).toEqual(serverListeners);
129
- expect(clientTransport.eventDispatcher.numberOfListeners('message')).toEqual(clientListeners);
130
- // check number of connections
131
- expect(serverTransport.connections.size).toEqual(1);
132
- expect(clientTransport.connections.size).toEqual(1);
133
- await ensureTransportQueuesAreEventuallyEmpty(clientTransport);
134
- await ensureTransportQueuesAreEventuallyEmpty(serverTransport);
135
- // ensure we have no streams left on the server
136
- await ensureServerIsClean(server);
137
- });
138
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=serialize.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serialize.test.d.ts","sourceRoot":"","sources":["../../__tests__/serialize.test.ts"],"names":[],"mappings":""}
@@ -1,208 +0,0 @@
1
- import { expect, describe, test } from 'vitest';
2
- import { serializeService } from '../router/builder';
3
- import { BinaryFileServiceConstructor, FallibleServiceConstructor, TestServiceConstructor, } from './fixtures/services';
4
- describe('serialize service to jsonschema', () => {
5
- test('serialize basic service', () => {
6
- const service = TestServiceConstructor();
7
- expect(serializeService(service)).toStrictEqual({
8
- name: 'test',
9
- state: { count: 0 },
10
- procedures: {
11
- add: {
12
- input: {
13
- properties: {
14
- n: { type: 'number' },
15
- },
16
- required: ['n'],
17
- type: 'object',
18
- },
19
- output: {
20
- properties: {
21
- result: { type: 'number' },
22
- },
23
- required: ['result'],
24
- type: 'object',
25
- },
26
- errors: { not: {} },
27
- type: 'rpc',
28
- },
29
- echo: {
30
- input: {
31
- properties: {
32
- msg: { type: 'string' },
33
- ignore: { type: 'boolean' },
34
- end: { type: 'boolean' },
35
- },
36
- required: ['msg', 'ignore'],
37
- type: 'object',
38
- },
39
- output: {
40
- properties: {
41
- response: { type: 'string' },
42
- },
43
- required: ['response'],
44
- type: 'object',
45
- },
46
- errors: { not: {} },
47
- type: 'stream',
48
- },
49
- echoWithPrefix: {
50
- errors: {
51
- not: {},
52
- },
53
- init: {
54
- properties: {
55
- prefix: {
56
- type: 'string',
57
- },
58
- },
59
- required: ['prefix'],
60
- type: 'object',
61
- },
62
- input: {
63
- properties: {
64
- end: {
65
- type: 'boolean',
66
- },
67
- ignore: {
68
- type: 'boolean',
69
- },
70
- msg: {
71
- type: 'string',
72
- },
73
- },
74
- required: ['msg', 'ignore'],
75
- type: 'object',
76
- },
77
- output: {
78
- properties: {
79
- response: {
80
- type: 'string',
81
- },
82
- },
83
- required: ['response'],
84
- type: 'object',
85
- },
86
- type: 'stream',
87
- },
88
- },
89
- });
90
- });
91
- test('serialize service with binary', () => {
92
- const service = BinaryFileServiceConstructor();
93
- expect(serializeService(service)).toStrictEqual({
94
- name: 'bin',
95
- procedures: {
96
- getFile: {
97
- errors: {
98
- not: {},
99
- },
100
- input: {
101
- properties: {
102
- file: {
103
- type: 'string',
104
- },
105
- },
106
- required: ['file'],
107
- type: 'object',
108
- },
109
- output: {
110
- properties: {
111
- contents: {
112
- type: 'Uint8Array',
113
- },
114
- },
115
- required: ['contents'],
116
- type: 'object',
117
- },
118
- type: 'rpc',
119
- },
120
- },
121
- state: {},
122
- });
123
- });
124
- test('serialize service with errors', () => {
125
- const service = FallibleServiceConstructor();
126
- expect(serializeService(service)).toStrictEqual({
127
- name: 'fallible',
128
- state: {},
129
- procedures: {
130
- divide: {
131
- input: {
132
- properties: {
133
- a: { type: 'number' },
134
- b: { type: 'number' },
135
- },
136
- required: ['a', 'b'],
137
- type: 'object',
138
- },
139
- output: {
140
- properties: {
141
- result: { type: 'number' },
142
- },
143
- required: ['result'],
144
- type: 'object',
145
- },
146
- errors: {
147
- properties: {
148
- code: { const: 'DIV_BY_ZERO', type: 'string' },
149
- message: { type: 'string' },
150
- extras: {
151
- properties: {
152
- test: {
153
- type: 'string',
154
- },
155
- },
156
- required: ['test'],
157
- type: 'object',
158
- },
159
- },
160
- required: ['code', 'message', 'extras'],
161
- type: 'object',
162
- },
163
- type: 'rpc',
164
- },
165
- echo: {
166
- errors: {
167
- properties: {
168
- code: {
169
- const: 'STREAM_ERROR',
170
- type: 'string',
171
- },
172
- message: {
173
- type: 'string',
174
- },
175
- },
176
- required: ['code', 'message'],
177
- type: 'object',
178
- },
179
- input: {
180
- properties: {
181
- msg: {
182
- type: 'string',
183
- },
184
- throwError: {
185
- type: 'boolean',
186
- },
187
- throwResult: {
188
- type: 'boolean',
189
- },
190
- },
191
- required: ['msg', 'throwResult', 'throwError'],
192
- type: 'object',
193
- },
194
- output: {
195
- properties: {
196
- response: {
197
- type: 'string',
198
- },
199
- },
200
- required: ['response'],
201
- type: 'object',
202
- },
203
- type: 'stream',
204
- },
205
- },
206
- });
207
- });
208
- });