@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
@@ -0,0 +1,114 @@
1
+ import { A as AnyService, d as AnyProcedure, P as PayloadType, b as Result, R as RiverError, S as ServiceContext, e as ProcType, f as ProcInput, g as ProcOutput, h as ProcErrors, i as ProcHasInit, j as ProcInit } from '../builder-3c4485f0.js';
2
+ export { E as Err, O as Ok, n as ProcHandler, l as ProcListing, a as Procedure, p as RiverErrorSchema, c as RiverUncaughtSchema, m as Service, k as ServiceBuilder, o as ServiceContextWithState, U as UNCAUGHT_ERROR, V as ValidProcType, s as serializeService } from '../builder-3c4485f0.js';
3
+ import { Transport, Connection, TransportClientId } from '../transport/index.cjs';
4
+ import { Pushable } from 'it-pushable';
5
+ import { Static } from '@sinclair/typebox';
6
+ import '../types-3e5768ec.js';
7
+
8
+ /**
9
+ * Defines a type for a collection service definitions. Should be
10
+ * build with the {@link buildServiceDefs} function.
11
+ * @template T - An array of services.
12
+ */
13
+ type ServiceDefs<T extends AnyService[] = AnyService[]> = {
14
+ [K in T[number]['name']]: T[number];
15
+ };
16
+ /**
17
+ * Builds service definitions based on an array of services.
18
+ * @param services - The array of services.
19
+ * @returns The service definitions.
20
+ */
21
+ declare function buildServiceDefs<T extends AnyService[]>(services: T): ServiceDefs<T>;
22
+
23
+ /**
24
+ * Represents a server with a set of services. Use {@link createServer} to create it.
25
+ * @template Services - The type of services provided by the server.
26
+ */
27
+ interface Server<Services> {
28
+ services: Services;
29
+ streams: Map<string, ProcStream>;
30
+ close(): Promise<void>;
31
+ }
32
+ interface ProcStream {
33
+ id: string;
34
+ serviceName: string;
35
+ procedureName: string;
36
+ procedure: AnyProcedure;
37
+ incoming: Pushable<PayloadType>;
38
+ outgoing: Pushable<Result<Static<PayloadType>, Static<RiverError>>>;
39
+ promises: {
40
+ outputHandler: Promise<unknown>;
41
+ inputHandler: Promise<unknown>;
42
+ };
43
+ }
44
+ /**
45
+ * Creates a server instance that listens for incoming messages from a transport and routes them to the appropriate service and procedure.
46
+ * The server tracks the state of each service along with open streams and the extended context object.
47
+ * @param transport - The transport to listen to.
48
+ * @param services - An object containing all the services to be registered on the server.
49
+ * @param extendedContext - An optional object containing additional context to be passed to all services.
50
+ * @returns A promise that resolves to a server instance with the registered services.
51
+ */
52
+ declare function createServer<Services extends ServiceDefs>(transport: Transport<Connection>, services: Services, extendedContext?: Omit<ServiceContext, 'state'>): Server<Services>;
53
+
54
+ type AsyncIter<T> = AsyncGenerator<T, T, unknown>;
55
+ /**
56
+ * A helper type to transform an actual service type into a type
57
+ * we can case to in the proxy.
58
+ * @template Router - The type of the Router.
59
+ */
60
+ type ServiceClient<Router extends AnyService> = {
61
+ [ProcName in keyof Router['procedures']]: ProcType<Router, ProcName> extends 'rpc' ? {
62
+ rpc: (input: Static<ProcInput<Router, ProcName>>) => Promise<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>;
63
+ } : ProcType<Router, ProcName> extends 'upload' ? ProcHasInit<Router, ProcName> extends true ? {
64
+ upload: (init: Static<ProcInit<Router, ProcName>>) => Promise<[
65
+ Pushable<Static<ProcInput<Router, ProcName>>>,
66
+ Promise<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>
67
+ ]>;
68
+ } : {
69
+ upload: () => Promise<[
70
+ Pushable<Static<ProcInput<Router, ProcName>>>,
71
+ Promise<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>
72
+ ]>;
73
+ } : ProcType<Router, ProcName> extends 'stream' ? ProcHasInit<Router, ProcName> extends true ? {
74
+ stream: (init: Static<ProcInit<Router, ProcName>>) => Promise<[
75
+ Pushable<Static<ProcInput<Router, ProcName>>>,
76
+ AsyncIter<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>,
77
+ () => void
78
+ ]>;
79
+ } : {
80
+ stream: () => Promise<[
81
+ Pushable<Static<ProcInput<Router, ProcName>>>,
82
+ AsyncIter<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>,
83
+ () => void
84
+ ]>;
85
+ } : ProcType<Router, ProcName> extends 'subscription' ? {
86
+ subscribe: (input: Static<ProcInput<Router, ProcName>>) => Promise<[
87
+ AsyncIter<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>,
88
+ () => void
89
+ ]>;
90
+ } : never;
91
+ };
92
+ /**
93
+ * Defines a type that represents a client for a server with a set of services.
94
+ * @template Srv - The type of the server.
95
+ */
96
+ type ServerClient<Srv extends Server<ServiceDefs>> = {
97
+ [SvcName in keyof Srv['services']]: ServiceClient<Srv['services'][SvcName]>;
98
+ };
99
+ /**
100
+ * Creates a client for a given server using the provided transport.
101
+ * Note that the client only needs the type of the server, not the actual
102
+ * server definition itself.
103
+ *
104
+ * This relies on a proxy to dynamically create the client, so the client
105
+ * will be typed as if it were the actual server with the appropriate services
106
+ * and procedures.
107
+ *
108
+ * @template Srv - The type of the server.
109
+ * @param {Transport} transport - The transport to use for communication.
110
+ * @returns The client for the server.
111
+ */
112
+ declare const createClient: <Srv extends Server<ServiceDefs>>(transport: Transport<Connection>, serverId?: TransportClientId) => ServerClient<Srv>;
113
+
114
+ export { PayloadType, ProcInput, ProcOutput, ProcType, Result, RiverError, Server, ServerClient, ServiceContext, ServiceDefs, buildServiceDefs, createClient, createServer };
@@ -1,10 +1,114 @@
1
- export { serializeService, ServiceBuilder } from './builder';
2
- export type { ValidProcType, ProcListing, Service, ProcHandler, ProcInput, ProcOutput, ProcType, Procedure, PayloadType, } 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';
8
- export { Ok, Err, UNCAUGHT_ERROR, RiverUncaughtSchema } from './result';
9
- export type { RiverErrorSchema, RiverError, Result } from './result';
10
- //# sourceMappingURL=index.d.ts.map
1
+ import { A as AnyService, d as AnyProcedure, P as PayloadType, b as Result, R as RiverError, S as ServiceContext, e as ProcType, f as ProcInput, g as ProcOutput, h as ProcErrors, i as ProcHasInit, j as ProcInit } from '../builder-3c4485f0.js';
2
+ export { E as Err, O as Ok, n as ProcHandler, l as ProcListing, a as Procedure, p as RiverErrorSchema, c as RiverUncaughtSchema, m as Service, k as ServiceBuilder, o as ServiceContextWithState, U as UNCAUGHT_ERROR, V as ValidProcType, s as serializeService } from '../builder-3c4485f0.js';
3
+ import { Transport, Connection, TransportClientId } from '../transport/index.js';
4
+ import { Pushable } from 'it-pushable';
5
+ import { Static } from '@sinclair/typebox';
6
+ import '../types-3e5768ec.js';
7
+
8
+ /**
9
+ * Defines a type for a collection service definitions. Should be
10
+ * build with the {@link buildServiceDefs} function.
11
+ * @template T - An array of services.
12
+ */
13
+ type ServiceDefs<T extends AnyService[] = AnyService[]> = {
14
+ [K in T[number]['name']]: T[number];
15
+ };
16
+ /**
17
+ * Builds service definitions based on an array of services.
18
+ * @param services - The array of services.
19
+ * @returns The service definitions.
20
+ */
21
+ declare function buildServiceDefs<T extends AnyService[]>(services: T): ServiceDefs<T>;
22
+
23
+ /**
24
+ * Represents a server with a set of services. Use {@link createServer} to create it.
25
+ * @template Services - The type of services provided by the server.
26
+ */
27
+ interface Server<Services> {
28
+ services: Services;
29
+ streams: Map<string, ProcStream>;
30
+ close(): Promise<void>;
31
+ }
32
+ interface ProcStream {
33
+ id: string;
34
+ serviceName: string;
35
+ procedureName: string;
36
+ procedure: AnyProcedure;
37
+ incoming: Pushable<PayloadType>;
38
+ outgoing: Pushable<Result<Static<PayloadType>, Static<RiverError>>>;
39
+ promises: {
40
+ outputHandler: Promise<unknown>;
41
+ inputHandler: Promise<unknown>;
42
+ };
43
+ }
44
+ /**
45
+ * Creates a server instance that listens for incoming messages from a transport and routes them to the appropriate service and procedure.
46
+ * The server tracks the state of each service along with open streams and the extended context object.
47
+ * @param transport - The transport to listen to.
48
+ * @param services - An object containing all the services to be registered on the server.
49
+ * @param extendedContext - An optional object containing additional context to be passed to all services.
50
+ * @returns A promise that resolves to a server instance with the registered services.
51
+ */
52
+ declare function createServer<Services extends ServiceDefs>(transport: Transport<Connection>, services: Services, extendedContext?: Omit<ServiceContext, 'state'>): Server<Services>;
53
+
54
+ type AsyncIter<T> = AsyncGenerator<T, T, unknown>;
55
+ /**
56
+ * A helper type to transform an actual service type into a type
57
+ * we can case to in the proxy.
58
+ * @template Router - The type of the Router.
59
+ */
60
+ type ServiceClient<Router extends AnyService> = {
61
+ [ProcName in keyof Router['procedures']]: ProcType<Router, ProcName> extends 'rpc' ? {
62
+ rpc: (input: Static<ProcInput<Router, ProcName>>) => Promise<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>;
63
+ } : ProcType<Router, ProcName> extends 'upload' ? ProcHasInit<Router, ProcName> extends true ? {
64
+ upload: (init: Static<ProcInit<Router, ProcName>>) => Promise<[
65
+ Pushable<Static<ProcInput<Router, ProcName>>>,
66
+ Promise<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>
67
+ ]>;
68
+ } : {
69
+ upload: () => Promise<[
70
+ Pushable<Static<ProcInput<Router, ProcName>>>,
71
+ Promise<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>
72
+ ]>;
73
+ } : ProcType<Router, ProcName> extends 'stream' ? ProcHasInit<Router, ProcName> extends true ? {
74
+ stream: (init: Static<ProcInit<Router, ProcName>>) => Promise<[
75
+ Pushable<Static<ProcInput<Router, ProcName>>>,
76
+ AsyncIter<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>,
77
+ () => void
78
+ ]>;
79
+ } : {
80
+ stream: () => Promise<[
81
+ Pushable<Static<ProcInput<Router, ProcName>>>,
82
+ AsyncIter<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>,
83
+ () => void
84
+ ]>;
85
+ } : ProcType<Router, ProcName> extends 'subscription' ? {
86
+ subscribe: (input: Static<ProcInput<Router, ProcName>>) => Promise<[
87
+ AsyncIter<Result<Static<ProcOutput<Router, ProcName>>, Static<ProcErrors<Router, ProcName>>>>,
88
+ () => void
89
+ ]>;
90
+ } : never;
91
+ };
92
+ /**
93
+ * Defines a type that represents a client for a server with a set of services.
94
+ * @template Srv - The type of the server.
95
+ */
96
+ type ServerClient<Srv extends Server<ServiceDefs>> = {
97
+ [SvcName in keyof Srv['services']]: ServiceClient<Srv['services'][SvcName]>;
98
+ };
99
+ /**
100
+ * Creates a client for a given server using the provided transport.
101
+ * Note that the client only needs the type of the server, not the actual
102
+ * server definition itself.
103
+ *
104
+ * This relies on a proxy to dynamically create the client, so the client
105
+ * will be typed as if it were the actual server with the appropriate services
106
+ * and procedures.
107
+ *
108
+ * @template Srv - The type of the server.
109
+ * @param {Transport} transport - The transport to use for communication.
110
+ * @returns The client for the server.
111
+ */
112
+ declare const createClient: <Srv extends Server<ServiceDefs>>(transport: Transport<Connection>, serverId?: TransportClientId) => ServerClient<Srv>;
113
+
114
+ export { PayloadType, ProcInput, ProcOutput, ProcType, Result, RiverError, Server, ServerClient, ServiceContext, ServiceDefs, buildServiceDefs, createClient, createServer };
@@ -1,4 +1,24 @@
1
- export { serializeService, ServiceBuilder } from './builder';
2
- export { createClient } from './client';
3
- export { createServer } from './server';
4
- export { Ok, Err, UNCAUGHT_ERROR, RiverUncaughtSchema } from './result';
1
+ import {
2
+ Err,
3
+ Ok,
4
+ RiverUncaughtSchema,
5
+ ServiceBuilder,
6
+ UNCAUGHT_ERROR,
7
+ buildServiceDefs,
8
+ createClient,
9
+ createServer,
10
+ serializeService
11
+ } from "../chunk-7WJ6YLE5.js";
12
+ import "../chunk-ZE4MX7DF.js";
13
+ import "../chunk-SLUSVGQH.js";
14
+ export {
15
+ Err,
16
+ Ok,
17
+ RiverUncaughtSchema,
18
+ ServiceBuilder,
19
+ UNCAUGHT_ERROR,
20
+ buildServiceDefs,
21
+ createClient,
22
+ createServer,
23
+ serializeService
24
+ };