@livestore/utils 0.4.0 → 0.5.0-dev.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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/NoopTracer.d.ts +7 -8
- package/dist/NoopTracer.d.ts.map +1 -1
- package/dist/NoopTracer.js +3 -18
- package/dist/NoopTracer.js.map +1 -1
- package/dist/NoopTracer.test.d.ts +2 -0
- package/dist/NoopTracer.test.d.ts.map +1 -0
- package/dist/NoopTracer.test.js +17 -0
- package/dist/NoopTracer.test.js.map +1 -0
- package/dist/browser/Opfs/Opfs.d.ts +179 -29
- package/dist/browser/Opfs/Opfs.d.ts.map +1 -1
- package/dist/browser/Opfs/Opfs.js +132 -307
- package/dist/browser/Opfs/Opfs.js.map +1 -1
- package/dist/browser/Opfs/debug-utils.d.ts.map +1 -1
- package/dist/browser/Opfs/debug-utils.js +5 -4
- package/dist/browser/Opfs/debug-utils.js.map +1 -1
- package/dist/browser/Opfs/utils.d.ts +8 -8
- package/dist/browser/Opfs/utils.d.ts.map +1 -1
- package/dist/browser/Opfs/utils.js +35 -26
- package/dist/browser/Opfs/utils.js.map +1 -1
- package/dist/browser/QuotaExceededError.d.ts +10 -9
- package/dist/browser/QuotaExceededError.d.ts.map +1 -1
- package/dist/browser/WebChannelBrowser.d.ts.map +1 -1
- package/dist/browser/WebChannelBrowser.js +21 -10
- package/dist/browser/WebChannelBrowser.js.map +1 -1
- package/dist/browser/WebError.d.ts +54 -86
- package/dist/browser/WebError.d.ts.map +1 -1
- package/dist/browser/WebError.js +91 -84
- package/dist/browser/WebError.js.map +1 -1
- package/dist/browser/WebError.test.js +6 -6
- package/dist/browser/WebError.test.js.map +1 -1
- package/dist/browser/WebLock.d.ts.map +1 -1
- package/dist/browser/WebLock.js +13 -13
- package/dist/browser/WebLock.js.map +1 -1
- package/dist/effect/Debug.d.ts +4 -7
- package/dist/effect/Debug.d.ts.map +1 -1
- package/dist/effect/Debug.js +32 -36
- package/dist/effect/Debug.js.map +1 -1
- package/dist/effect/Effect.d.ts +31 -22
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +51 -47
- package/dist/effect/Effect.js.map +1 -1
- package/dist/effect/Effect.test.d.ts +2 -0
- package/dist/effect/Effect.test.d.ts.map +1 -0
- package/dist/effect/Effect.test.js +72 -0
- package/dist/effect/Effect.test.js.map +1 -0
- package/dist/effect/Error.d.ts +4 -6
- package/dist/effect/Error.d.ts.map +1 -1
- package/dist/effect/Logger.d.ts +0 -6
- package/dist/effect/Logger.d.ts.map +1 -1
- package/dist/effect/Logger.js +0 -32
- package/dist/effect/Logger.js.map +1 -1
- package/dist/effect/OtelTracer.d.ts +1 -1
- package/dist/effect/OtelTracer.d.ts.map +1 -1
- package/dist/effect/OtelTracer.js +2 -3
- package/dist/effect/OtelTracer.js.map +1 -1
- package/dist/effect/RpcClient.d.ts +7 -7
- package/dist/effect/RpcClient.d.ts.map +1 -1
- package/dist/effect/RpcClient.js +72 -52
- package/dist/effect/RpcClient.js.map +1 -1
- package/dist/effect/Schedule.d.ts +1 -1
- package/dist/effect/Schedule.d.ts.map +1 -1
- package/dist/effect/Schedule.js +2 -2
- package/dist/effect/Schedule.js.map +1 -1
- package/dist/effect/Schema/debug-diff.d.ts +1 -1
- package/dist/effect/Schema/debug-diff.d.ts.map +1 -1
- package/dist/effect/Schema/debug-diff.js +5 -7
- package/dist/effect/Schema/debug-diff.js.map +1 -1
- package/dist/effect/Schema/debug-diff.test.js +7 -4
- package/dist/effect/Schema/debug-diff.test.js.map +1 -1
- package/dist/effect/Schema/index.d.ts +28 -20
- package/dist/effect/Schema/index.d.ts.map +1 -1
- package/dist/effect/Schema/index.js +55 -28
- package/dist/effect/Schema/index.js.map +1 -1
- package/dist/effect/Stream.d.ts +13 -5
- package/dist/effect/Stream.d.ts.map +1 -1
- package/dist/effect/Stream.js +19 -12
- package/dist/effect/Stream.js.map +1 -1
- package/dist/effect/Stream.test.js +9 -9
- package/dist/effect/Stream.test.js.map +1 -1
- package/dist/effect/Subscribable.d.ts +9 -3
- package/dist/effect/Subscribable.d.ts.map +1 -1
- package/dist/effect/Subscribable.js +20 -35
- package/dist/effect/Subscribable.js.map +1 -1
- package/dist/effect/SubscriptionRef.d.ts +5 -6
- package/dist/effect/SubscriptionRef.d.ts.map +1 -1
- package/dist/effect/SubscriptionRef.js +2 -3
- package/dist/effect/SubscriptionRef.js.map +1 -1
- package/dist/effect/TaskTracing.d.ts +1 -1
- package/dist/effect/TaskTracing.d.ts.map +1 -1
- package/dist/effect/TaskTracing.js +12 -16
- package/dist/effect/TaskTracing.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.d.ts +7 -7
- package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
- package/dist/effect/WebChannel/WebChannel.js +64 -43
- package/dist/effect/WebChannel/WebChannel.js.map +1 -1
- package/dist/effect/WebChannel/WebChannel.test.js +15 -15
- package/dist/effect/WebChannel/WebChannel.test.js.map +1 -1
- package/dist/effect/WebChannel/broadcastChannelWithAck.d.ts.map +1 -1
- package/dist/effect/WebChannel/broadcastChannelWithAck.js +16 -9
- package/dist/effect/WebChannel/broadcastChannelWithAck.js.map +1 -1
- package/dist/effect/WebChannel/common.d.ts +16 -17
- package/dist/effect/WebChannel/common.d.ts.map +1 -1
- package/dist/effect/WebChannel/common.js +6 -6
- package/dist/effect/WebChannel/common.js.map +1 -1
- package/dist/effect/WebSocket.d.ts +4 -6
- package/dist/effect/WebSocket.d.ts.map +1 -1
- package/dist/effect/WebSocket.js +4 -4
- package/dist/effect/WebSocket.js.map +1 -1
- package/dist/effect/WebSocket.test.js +2 -2
- package/dist/effect/WebSocket.test.js.map +1 -1
- package/dist/effect/mod.browser-build.test.d.ts +2 -0
- package/dist/effect/mod.browser-build.test.d.ts.map +1 -0
- package/dist/effect/mod.browser-build.test.js +18 -0
- package/dist/effect/mod.browser-build.test.js.map +1 -0
- package/dist/effect/mod.d.ts +13 -15
- package/dist/effect/mod.d.ts.map +1 -1
- package/dist/effect/mod.js +13 -18
- package/dist/effect/mod.js.map +1 -1
- package/dist/effect/spanEvent.d.ts.map +1 -1
- package/dist/effect/spanEvent.js +2 -2
- package/dist/effect/spanEvent.js.map +1 -1
- package/dist/effect/spanEvent.test.js +10 -13
- package/dist/effect/spanEvent.test.js.map +1 -1
- package/dist/fast-deep-equal.d.ts.map +1 -1
- package/dist/fast-deep-equal.js +1 -2
- package/dist/fast-deep-equal.js.map +1 -1
- package/dist/misc.js +2 -2
- package/dist/misc.js.map +1 -1
- package/dist/mod.d.ts +0 -35
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +0 -8
- package/dist/mod.js.map +1 -1
- package/dist/node/mod.d.ts +17 -11
- package/dist/node/mod.d.ts.map +1 -1
- package/dist/node/mod.js +23 -16
- package/dist/node/mod.js.map +1 -1
- package/dist/object/index.d.ts +0 -9
- package/dist/object/index.d.ts.map +1 -1
- package/dist/object/index.js +0 -9
- package/dist/object/index.js.map +1 -1
- package/dist/string.d.ts +0 -2
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +0 -2
- package/dist/string.js.map +1 -1
- package/package.json +18 -36
- package/src/NoopTracer.test.ts +20 -0
- package/src/NoopTracer.ts +18 -41
- package/src/browser/Opfs/Opfs.ts +304 -277
- package/src/browser/Opfs/debug-utils.ts +7 -6
- package/src/browser/Opfs/utils.ts +36 -26
- package/src/browser/QuotaExceededError.ts +13 -10
- package/src/browser/WebChannelBrowser.ts +25 -11
- package/src/browser/WebError.test.ts +6 -6
- package/src/browser/WebError.ts +107 -133
- package/src/browser/WebLock.ts +13 -14
- package/src/effect/Debug.ts +66 -59
- package/src/effect/Effect.test.ts +117 -0
- package/src/effect/Effect.ts +84 -71
- package/src/effect/Logger.ts +0 -48
- package/src/effect/OtelTracer.ts +2 -3
- package/src/effect/RpcClient.ts +80 -61
- package/src/effect/Schedule.ts +4 -5
- package/src/effect/Schema/debug-diff.test.ts +6 -6
- package/src/effect/Schema/debug-diff.ts +6 -8
- package/src/effect/Schema/index.ts +122 -61
- package/src/effect/Stream.test.ts +9 -9
- package/src/effect/Stream.ts +23 -16
- package/src/effect/Subscribable.ts +31 -42
- package/src/effect/SubscriptionRef.ts +8 -12
- package/src/effect/TaskTracing.ts +13 -16
- package/src/effect/WebChannel/WebChannel.test.ts +23 -23
- package/src/effect/WebChannel/WebChannel.ts +87 -55
- package/src/effect/WebChannel/broadcastChannelWithAck.ts +21 -11
- package/src/effect/WebChannel/common.ts +14 -15
- package/src/effect/WebSocket.test.ts +2 -2
- package/src/effect/WebSocket.ts +9 -6
- package/src/effect/mod.browser-build.test.ts +19 -0
- package/src/effect/mod.ts +35 -69
- package/src/effect/spanEvent.test.ts +10 -13
- package/src/effect/spanEvent.ts +5 -3
- package/src/fast-deep-equal.ts +1 -2
- package/src/misc.ts +2 -2
- package/src/mod.ts +0 -36
- package/src/node/mod.ts +26 -20
- package/src/object/index.ts +0 -24
- package/src/string.ts +0 -3
- package/dist/effect/BucketQueue.d.ts +0 -20
- package/dist/effect/BucketQueue.d.ts.map +0 -1
- package/dist/effect/BucketQueue.js +0 -34
- package/dist/effect/BucketQueue.js.map +0 -1
- package/dist/effect/Scheduler.d.ts +0 -4
- package/dist/effect/Scheduler.d.ts.map +0 -1
- package/dist/effect/Scheduler.js +0 -9
- package/dist/effect/Scheduler.js.map +0 -1
- package/dist/effect/ServiceContext.d.ts +0 -37
- package/dist/effect/ServiceContext.d.ts.map +0 -1
- package/dist/effect/ServiceContext.js +0 -55
- package/dist/effect/ServiceContext.js.map +0 -1
- package/dist/guards.d.ts +0 -20
- package/dist/guards.d.ts.map +0 -1
- package/dist/guards.js +0 -20
- package/dist/guards.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts +0 -4
- package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js +0 -128
- package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts +0 -10
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +0 -217
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +0 -84
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +0 -68
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts +0 -2
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +0 -52
- package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +0 -23
- package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +0 -1
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js +0 -138
- package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +0 -1
- package/dist/object/omit.d.ts +0 -3
- package/dist/object/omit.d.ts.map +0 -1
- package/dist/object/omit.js +0 -14
- package/dist/object/omit.js.map +0 -1
- package/dist/object/pick.d.ts +0 -14
- package/dist/object/pick.d.ts.map +0 -1
- package/dist/object/pick.js +0 -17
- package/dist/object/pick.js.map +0 -1
- package/dist/time.d.ts +0 -12
- package/dist/time.d.ts.map +0 -1
- package/dist/time.js +0 -22
- package/dist/time.js.map +0 -1
- package/src/effect/BucketQueue.ts +0 -49
- package/src/effect/Scheduler.ts +0 -13
- package/src/effect/ServiceContext.ts +0 -108
- package/src/guards.ts +0 -23
- package/src/node/ChildProcessRunner/ChildProcessRunner.ts +0 -148
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +0 -311
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +0 -78
- package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +0 -65
- package/src/node/ChildProcessRunner/ChildProcessWorker.ts +0 -169
- package/src/object/omit.ts +0 -17
- package/src/object/pick.ts +0 -27
- package/src/time.ts +0 -25
package/dist/effect/RpcClient.js
CHANGED
|
@@ -1,29 +1,33 @@
|
|
|
1
|
-
export * from '
|
|
2
|
-
import {
|
|
3
|
-
import { RpcClient, RpcClientError, RpcSerialization } from '
|
|
4
|
-
import { Protocol } from '
|
|
5
|
-
import { constPing } from '
|
|
6
|
-
import {
|
|
7
|
-
import { constVoid, identity } from 'effect/Function';
|
|
1
|
+
export * from 'effect/unstable/rpc/RpcClient';
|
|
2
|
+
import { Cause, Deferred, Effect, Function, Latch, Layer, References, Result, Schedule } from 'effect';
|
|
3
|
+
import { RpcClient, RpcClientError, RpcSerialization } from 'effect/unstable/rpc';
|
|
4
|
+
import { Protocol } from 'effect/unstable/rpc/RpcClient';
|
|
5
|
+
import { constPing } from 'effect/unstable/rpc/RpcMessage';
|
|
6
|
+
import { Socket } from 'effect/unstable/socket';
|
|
8
7
|
import * as SubscriptionRef from "./SubscriptionRef.js";
|
|
9
8
|
// This is based on `makeProtocolSocket` / `layerProtocolSocket` from `@effect/rpc` in order to:
|
|
10
9
|
// - Add a `isConnected` subscription ref to track the connection state
|
|
11
10
|
// - Add a ping schedule to the socket
|
|
12
11
|
// - Add a retry schedule to the socket
|
|
13
|
-
export const layerProtocolSocketWithIsConnected = (options) => Layer.
|
|
14
|
-
export const makeProtocolSocketWithIsConnected = (options) => Protocol.make(Effect.fnUntraced(function* (writeResponse) {
|
|
12
|
+
export const layerProtocolSocketWithIsConnected = (options) => Layer.effect(Protocol, makeProtocolSocketWithIsConnected(options));
|
|
13
|
+
export const makeProtocolSocketWithIsConnected = (options) => Protocol.make(Effect.fnUntraced(function* (writeResponse, clientIds) {
|
|
15
14
|
const socket = yield* Socket.Socket;
|
|
16
15
|
const serialization = yield* RpcSerialization.RpcSerialization;
|
|
16
|
+
const requestClientMap = new Map();
|
|
17
17
|
const write = yield* socket.writer;
|
|
18
|
-
|
|
18
|
+
let parser = serialization.makeUnsafe();
|
|
19
19
|
const pinger = yield* makePinger(write(parser.encode(constPing)), options?.pingSchedule);
|
|
20
|
+
let currentError;
|
|
21
|
+
const markConnected = SubscriptionRef.set(options.isConnected, true);
|
|
22
|
+
const broadcast = (response) => Effect.forEach(clientIds, (clientId) => writeResponse(clientId, response));
|
|
20
23
|
yield* Effect.suspend(() => {
|
|
21
24
|
// We rely on the heartbeat watchdog while streaming arbitrarily long payloads.
|
|
22
25
|
// Reset the timer as soon as _any_ frame arrives so that large batches which
|
|
23
26
|
// don't contain explicit `Pong` messages don't trigger the open-timeout defect.
|
|
24
27
|
// (The actual pong handler still calls `onPong()` to resolve manual pings.)
|
|
25
28
|
// CHANGED: don't reset parser on every message
|
|
26
|
-
// parser = serialization.
|
|
29
|
+
// parser = serialization.makeUnsafe()
|
|
30
|
+
currentError = undefined;
|
|
27
31
|
pinger.reset();
|
|
28
32
|
return socket
|
|
29
33
|
.runRaw((message) => {
|
|
@@ -41,66 +45,82 @@ export const makeProtocolSocketWithIsConnected = (options) => Protocol.make(Effe
|
|
|
41
45
|
pinger.reset();
|
|
42
46
|
if (response._tag === 'Pong') {
|
|
43
47
|
pinger.onPong();
|
|
48
|
+
return markConnected;
|
|
44
49
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
if ('requestId' in response) {
|
|
51
|
+
const clientId = requestClientMap.get(response.requestId);
|
|
52
|
+
if (clientId !== undefined) {
|
|
53
|
+
if (response._tag === 'Exit') {
|
|
54
|
+
requestClientMap.delete(response.requestId);
|
|
55
|
+
}
|
|
56
|
+
return markConnected.pipe(Effect.andThen(writeResponse(clientId, response)));
|
|
50
57
|
}
|
|
51
|
-
}
|
|
58
|
+
}
|
|
59
|
+
return markConnected.pipe(Effect.andThen(broadcast(response)));
|
|
52
60
|
},
|
|
53
|
-
step: constVoid,
|
|
61
|
+
step: Function.constVoid,
|
|
54
62
|
});
|
|
55
63
|
}
|
|
56
64
|
catch (defect) {
|
|
57
|
-
return
|
|
65
|
+
return broadcast({
|
|
58
66
|
_tag: 'ClientProtocolError',
|
|
59
67
|
error: new RpcClientError.RpcClientError({
|
|
60
|
-
reason:
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
reason: new RpcClientError.RpcClientDefect({
|
|
69
|
+
message: 'Error decoding message',
|
|
70
|
+
cause: defect,
|
|
71
|
+
}),
|
|
63
72
|
}),
|
|
64
73
|
});
|
|
65
74
|
}
|
|
66
75
|
})
|
|
67
|
-
.pipe(Effect.raceFirst(Effect.
|
|
68
|
-
reason:
|
|
69
|
-
|
|
76
|
+
.pipe(Effect.raceFirst(Effect.flatMap(pinger.timeout, () => Effect.fail(new Socket.SocketError({
|
|
77
|
+
reason: new Socket.SocketOpenError({
|
|
78
|
+
kind: 'Timeout',
|
|
79
|
+
cause: new Error('ping timeout'),
|
|
80
|
+
}),
|
|
70
81
|
})))));
|
|
71
|
-
}).pipe(Effect.
|
|
72
|
-
reason:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
}).pipe(Effect.flatMap(() => Effect.fail(new Socket.SocketError({
|
|
83
|
+
reason: new Socket.SocketCloseError({
|
|
84
|
+
code: 1000,
|
|
85
|
+
closeReason: 'Closing connection',
|
|
86
|
+
}),
|
|
87
|
+
}))), Effect.tapCause(Effect.fn(function* (cause) {
|
|
76
88
|
// CHANGED: set isConnected to false on error
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
const error = Cause.failureOption(cause);
|
|
89
|
+
yield* SubscriptionRef.set(options.isConnected, false);
|
|
90
|
+
const error = Cause.findError(cause);
|
|
81
91
|
if (options?.retryTransientErrors !== undefined &&
|
|
82
|
-
|
|
83
|
-
|
|
92
|
+
Result.isSuccess(error) === true &&
|
|
93
|
+
error.success.reason._tag === 'SocketOpenError') {
|
|
84
94
|
return;
|
|
85
95
|
}
|
|
86
96
|
// yield* Effect.logError('Error in socket', cause)
|
|
87
|
-
|
|
97
|
+
currentError = new RpcClientError.RpcClientError({
|
|
98
|
+
reason: Result.isSuccess(error) === true
|
|
99
|
+
? error.success.reason
|
|
100
|
+
: new RpcClientError.RpcClientDefect({
|
|
101
|
+
message: 'Unknown socket error',
|
|
102
|
+
cause: Cause.squash(cause),
|
|
103
|
+
}),
|
|
104
|
+
});
|
|
105
|
+
return yield* broadcast({
|
|
88
106
|
_tag: 'ClientProtocolError',
|
|
89
|
-
error:
|
|
90
|
-
reason: 'Protocol',
|
|
91
|
-
message: 'Error in socket',
|
|
92
|
-
cause: Cause.squash(cause),
|
|
93
|
-
}),
|
|
107
|
+
error: currentError,
|
|
94
108
|
});
|
|
95
109
|
})),
|
|
96
110
|
// CHANGED: make configurable via schedule
|
|
97
|
-
options?.retryTransientErrors !== undefined ? Effect.retry(options.retryTransientErrors) : identity, Effect.annotateLogs({
|
|
111
|
+
options?.retryTransientErrors !== undefined ? Effect.retry(options.retryTransientErrors) : Function.identity, Effect.annotateLogs({
|
|
98
112
|
module: 'RpcClient',
|
|
99
113
|
method: 'makeProtocolSocket',
|
|
100
114
|
}), Effect.interruptible, Effect.ignore, // Errors are already handled
|
|
101
|
-
Effect.
|
|
115
|
+
Effect.provideService(References.UnhandledLogLevel, undefined), Effect.forkScoped);
|
|
102
116
|
return {
|
|
103
|
-
send: (request) => {
|
|
117
|
+
send: (clientId, request) => {
|
|
118
|
+
if (currentError !== undefined) {
|
|
119
|
+
return Effect.fail(currentError);
|
|
120
|
+
}
|
|
121
|
+
if (request._tag === 'Request') {
|
|
122
|
+
requestClientMap.set(request.id, clientId);
|
|
123
|
+
}
|
|
104
124
|
const encoded = parser.encode(request);
|
|
105
125
|
if (encoded === undefined)
|
|
106
126
|
return Effect.void;
|
|
@@ -112,28 +132,28 @@ export const makeProtocolSocketWithIsConnected = (options) => Protocol.make(Effe
|
|
|
112
132
|
};
|
|
113
133
|
}));
|
|
114
134
|
export const SocketPinger = Effect.map(RpcClient.Protocol, (protocol) => protocol.pinger);
|
|
115
|
-
const makePinger = Effect.fnUntraced(function* (writePing, pingSchedule = Schedule.spaced(10000).pipe(Schedule.addDelay(() => 5000))) {
|
|
135
|
+
const makePinger = Effect.fnUntraced(function* (writePing, pingSchedule = Schedule.spaced(10000).pipe(Schedule.addDelay(() => Effect.succeed(5000)))) {
|
|
116
136
|
// CHANGED: add manual ping deferreds
|
|
117
137
|
const manualPingDeferreds = new Set();
|
|
118
138
|
let recievedPong = true;
|
|
119
|
-
const latch =
|
|
139
|
+
const latch = Latch.makeUnsafe();
|
|
120
140
|
const reset = () => {
|
|
121
141
|
recievedPong = true;
|
|
122
|
-
latch.
|
|
142
|
+
latch.closeUnsafe();
|
|
123
143
|
};
|
|
124
144
|
const onPong = () => {
|
|
125
145
|
recievedPong = true;
|
|
126
146
|
// CHANGED: mark all manual ping deferreds as done
|
|
127
147
|
for (const deferred of manualPingDeferreds) {
|
|
128
|
-
Deferred.
|
|
148
|
+
Deferred.doneUnsafe(deferred, Effect.void);
|
|
129
149
|
}
|
|
130
150
|
};
|
|
131
151
|
yield* Effect.suspend(() => {
|
|
132
152
|
// Starting new ping
|
|
133
153
|
if (recievedPong === false)
|
|
134
|
-
return latch.open;
|
|
154
|
+
return Effect.asVoid(latch.open);
|
|
135
155
|
recievedPong = false;
|
|
136
|
-
return writePing;
|
|
156
|
+
return Effect.asVoid(writePing);
|
|
137
157
|
}).pipe(
|
|
138
158
|
// CHANGED: make configurable via schedule
|
|
139
159
|
Effect.schedule(pingSchedule), Effect.ignore, Effect.forever, Effect.interruptible, Effect.forkScoped);
|
|
@@ -141,7 +161,7 @@ const makePinger = Effect.fnUntraced(function* (writePing, pingSchedule = Schedu
|
|
|
141
161
|
const ping = Effect.gen(function* () {
|
|
142
162
|
const deferred = yield* Deferred.make();
|
|
143
163
|
manualPingDeferreds.add(deferred);
|
|
144
|
-
yield* deferred;
|
|
164
|
+
yield* Deferred.await(deferred);
|
|
145
165
|
manualPingDeferreds.delete(deferred);
|
|
146
166
|
});
|
|
147
167
|
return { timeout: latch.await, reset, onPong, ping };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RpcClient.js","sourceRoot":"","sources":["../../src/effect/RpcClient.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"RpcClient.js","sourceRoot":"","sources":["../../src/effect/RpcClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Duration, Schedule } from 'effect';
|
|
2
2
|
export * from 'effect/Schedule';
|
|
3
|
-
export declare const exponentialBackoff10Sec: Schedule.Schedule<Duration.
|
|
3
|
+
export declare const exponentialBackoff10Sec: Schedule.Schedule<Duration.Duration, unknown, never, never>;
|
|
4
4
|
//# sourceMappingURL=Schedule.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schedule.d.ts","sourceRoot":"","sources":["../../src/effect/Schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"Schedule.d.ts","sourceRoot":"","sources":["../../src/effect/Schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEzD,cAAc,iBAAiB,CAAA;AAE/B,eAAO,MAAM,uBAAuB,6DAInC,CAAA"}
|
package/dist/effect/Schedule.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Duration, pipe, Schedule } from 'effect';
|
|
1
|
+
import { Duration, Effect, pipe, Schedule } from 'effect';
|
|
2
2
|
export * from 'effect/Schedule';
|
|
3
3
|
export const exponentialBackoff10Sec = pipe(Schedule.exponential(Duration.millis(10), 4), // 10ms, 40ms, 160ms, 640ms, 2560ms, ...
|
|
4
|
-
Schedule.
|
|
4
|
+
Schedule.modifyDelay(({ duration }) => Effect.succeed(Duration.min(duration, Duration.seconds(1)))), Schedule.upTo({ duration: Duration.seconds(10) }));
|
|
5
5
|
//# sourceMappingURL=Schedule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schedule.js","sourceRoot":"","sources":["../../src/effect/Schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"Schedule.js","sourceRoot":"","sources":["../../src/effect/Schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEzD,cAAc,iBAAiB,CAAA;AAE/B,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CACzC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,wCAAwC;AACtF,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnG,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAClD,CAAA"}
|
|
@@ -8,5 +8,5 @@ export type DiffItem = {
|
|
|
8
8
|
/**
|
|
9
9
|
* Diffs two values for a given schema and traverses downwards and returns a list of differences.
|
|
10
10
|
*/
|
|
11
|
-
export declare const debugDiff: <A, I, R>(base: Schema.
|
|
11
|
+
export declare const debugDiff: <A, I, R>(base: Schema.Top) => (a: A, b: A) => DiffItem[];
|
|
12
12
|
//# sourceMappingURL=debug-diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-diff.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/debug-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAE1C,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,GAAG,CAAA;IACN,CAAC,EAAE,GAAG,CAAA;IACN,GAAG,EAAE,SAAS,CAAC,GAAG,CAAA;CACnB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GACnB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"debug-diff.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/debug-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAE1C,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,CAAC,EAAE,GAAG,CAAA;IACN,CAAC,EAAE,GAAG,CAAA;IACN,GAAG,EAAE,SAAS,CAAC,GAAG,CAAA;CACnB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,GACnB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,MAAM,CAAC,GAAG,MACzB,GAAG,CAAC,EAAE,GAAG,CAAC,KAAG,QAAQ,EAIrB,CAAA"}
|
|
@@ -8,7 +8,7 @@ export const debugDiff = (base) => (a, b) => {
|
|
|
8
8
|
return bag;
|
|
9
9
|
};
|
|
10
10
|
const debugDiffImpl = (ast, a, b, path, bag) => {
|
|
11
|
-
const eq = Schema.
|
|
11
|
+
const eq = Schema.toEquivalence({ ast });
|
|
12
12
|
if (eq(a, b) === false) {
|
|
13
13
|
// bag.push({ path, a, b, ast })
|
|
14
14
|
if (SchemaAST.isUnion(ast) === true) {
|
|
@@ -26,9 +26,8 @@ const debugDiffImpl = (ast, a, b, path, bag) => {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
else if (SchemaAST.
|
|
30
|
-
const
|
|
31
|
-
for (const prop of props) {
|
|
29
|
+
else if (SchemaAST.isObjects(ast) === true) {
|
|
30
|
+
for (const prop of ast.propertySignatures) {
|
|
32
31
|
debugDiffImpl(prop.type, a[prop.name], b[prop.name], `${path}.${prop.name.toString()}`, bag);
|
|
33
32
|
}
|
|
34
33
|
}
|
|
@@ -41,10 +40,9 @@ const debugDiffImpl = (ast, a, b, path, bag) => {
|
|
|
41
40
|
const isTaggedUnion = (ast) => {
|
|
42
41
|
if (SchemaAST.isUnion(ast) === true) {
|
|
43
42
|
return ast.types.every((type) => {
|
|
44
|
-
if (SchemaAST.
|
|
43
|
+
if (SchemaAST.isObjects(type) === false)
|
|
45
44
|
return false;
|
|
46
|
-
|
|
47
|
-
return props.some((prop) => prop.name.toString() === '_tag');
|
|
45
|
+
return type.propertySignatures.some((prop) => prop.name.toString() === '_tag');
|
|
48
46
|
});
|
|
49
47
|
}
|
|
50
48
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-diff.js","sourceRoot":"","sources":["../../../src/effect/Schema/debug-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAS1C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GACpB,CAAU,
|
|
1
|
+
{"version":3,"file":"debug-diff.js","sourceRoot":"","sources":["../../../src/effect/Schema/debug-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAS1C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GACpB,CAAU,IAAgB,EAAE,EAAE,CAC9B,CAAC,CAAI,EAAE,CAAI,EAAc,EAAE;IACzB,MAAM,GAAG,GAAG,EAAgB,CAAA;IAC5B,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;IACtC,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAEH,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAE,CAAM,EAAE,CAAM,EAAE,IAAY,EAAE,GAAe,EAAE,EAAE;IAC1F,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAS,CAAC,CAAA;IAC/C,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QACvB,gCAAgC;QAEhC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACpC,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;gBAC7B,OAAM;YACR,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACH,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;wBACpC,OAAM;oBACR,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBAC1C,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;YAC9F,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW;YACX,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAW,EAAE;IACpD,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK;gBAAE,OAAO,KAAK,CAAA;YACrD,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,CAAA;QAChF,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
|
|
@@ -5,7 +5,7 @@ describe('debug-diff', () => {
|
|
|
5
5
|
test('simple object', () => {
|
|
6
6
|
const schema = Schema.Struct({
|
|
7
7
|
a: Schema.String,
|
|
8
|
-
b: Schema.
|
|
8
|
+
b: Schema.Finite,
|
|
9
9
|
});
|
|
10
10
|
const a = { a: 'hello', b: 1 };
|
|
11
11
|
const b = { a: 'world', b: 2 };
|
|
@@ -29,7 +29,7 @@ describe('debug-diff', () => {
|
|
|
29
29
|
const schema = Schema.Struct({
|
|
30
30
|
a: Schema.String,
|
|
31
31
|
b: Schema.Struct({
|
|
32
|
-
c: Schema.
|
|
32
|
+
c: Schema.Finite,
|
|
33
33
|
}),
|
|
34
34
|
});
|
|
35
35
|
const a = { a: 'hello', b: { c: 1 } };
|
|
@@ -51,7 +51,7 @@ describe('debug-diff', () => {
|
|
|
51
51
|
`);
|
|
52
52
|
});
|
|
53
53
|
test('union', () => {
|
|
54
|
-
const schema = Schema.Union(Schema.String, Schema.
|
|
54
|
+
const schema = Schema.Union([Schema.String, Schema.Finite]);
|
|
55
55
|
const a = 'hello';
|
|
56
56
|
const b = 1;
|
|
57
57
|
const diff = debugDiff(schema)(a, b);
|
|
@@ -66,7 +66,10 @@ describe('debug-diff', () => {
|
|
|
66
66
|
`);
|
|
67
67
|
});
|
|
68
68
|
test('tagged union', () => {
|
|
69
|
-
const schema = Schema.Union(
|
|
69
|
+
const schema = Schema.Union([
|
|
70
|
+
Schema.TaggedStruct('a', { a: Schema.String }),
|
|
71
|
+
Schema.TaggedStruct('b', { b: Schema.Finite }),
|
|
72
|
+
]);
|
|
70
73
|
const a = { _tag: 'a', a: 'hello' };
|
|
71
74
|
const b = { _tag: 'b', b: 1 };
|
|
72
75
|
const diff = debugDiff(schema)(a, b);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug-diff.test.js","sourceRoot":"","sources":["../../../src/effect/Schema/debug-diff.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAG/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,CAAC,EAAE,MAAM,CAAC,MAAM;YAChB,CAAC,EAAE,MAAM,CAAC,MAAM;SACjB,CAAC,CAAA;QAEF,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;QAE9B,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;KAa3C,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,CAAC,EAAE,MAAM,CAAC,MAAM;YAChB,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC;gBACf,CAAC,EAAE,MAAM,CAAC,MAAM;aACjB,CAAC;SACH,CAAC,CAAA;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAA;QACrC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAA;QACrC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;KAa3C,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"debug-diff.test.js","sourceRoot":"","sources":["../../../src/effect/Schema/debug-diff.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import { Effect, Schema } from 'effect';
|
|
2
|
-
import type { ParseError } from 'effect/ParseResult';
|
|
3
|
-
import type { ParseOptions } from 'effect/SchemaAST';
|
|
4
|
-
import * as SchemaAST from 'effect/SchemaAST';
|
|
1
|
+
import { Effect, Schema, SchemaAST } from 'effect';
|
|
5
2
|
export * from 'effect/Schema';
|
|
6
3
|
export * from './debug-diff.ts';
|
|
7
|
-
|
|
8
|
-
export declare const
|
|
9
|
-
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export
|
|
22
|
-
export declare const
|
|
4
|
+
type PluckSchema<Fields extends Schema.Struct.Fields, K extends keyof Fields> = Schema.Codec<Fields[K]['Type'], Schema.Struct<Pick<Fields, K>>['Encoded'], Schema.Struct<Pick<Fields, K>>['DecodingServices'], Schema.Struct<Pick<Fields, K>>['EncodingServices']>;
|
|
5
|
+
export declare const pluck: <const K extends PropertyKey>(key: K) => <Fields extends { readonly [P in K]: Schema.Top; }>(schema: Schema.Struct<Fields>) => PluckSchema<Fields, K & keyof Fields>;
|
|
6
|
+
/**
|
|
7
|
+
* Like {@link fromJsonString}, but the ENCODED form is an *indented* JSON string
|
|
8
|
+
* (default 2-space) instead of compact — for committed/human-read JSON files
|
|
9
|
+
* (package.json, release plans, CI previews) that must stay diff-friendly while
|
|
10
|
+
* still round-tripping through the schema.
|
|
11
|
+
*
|
|
12
|
+
* Use a concrete schema for known shapes (adds validation) or `Schema.Unknown`
|
|
13
|
+
* for open-ended ones (the indented analogue of `fromJsonString(Schema.Unknown)`).
|
|
14
|
+
*
|
|
15
|
+
* TODO collapse into `fromJsonString(schema, { space })` now that Effect 4 accepts a
|
|
16
|
+
* `space` option; kept separate here to keep the Effect upgrade free of release-tooling changes.
|
|
17
|
+
*/
|
|
18
|
+
export declare const jsonStringIndented: <S extends Schema.Top>(schema: S, space?: number | string) => Schema.decodeTo<S, Schema.String, never, never>;
|
|
19
|
+
export declare const head: <S extends Schema.Top>(array: Schema.$Array<S>) => Schema.decodeTo<Schema.Option<Schema.toType<S>>, Schema.$Array<S>>;
|
|
20
|
+
type HeadOrElse<S extends Schema.Top> = Schema.decodeTo<Schema.toType<S>, Schema.$Array<S>>;
|
|
21
|
+
export declare const headOrElse: {
|
|
22
|
+
<S extends Schema.Top>(array: Schema.$Array<S>, orElse?: () => S['Type']): HeadOrElse<S>;
|
|
23
|
+
(): <S extends Schema.Top>(array: Schema.$Array<S>) => HeadOrElse<S>;
|
|
24
|
+
<S extends Schema.Top>(orElse: () => S['Type']): (array: Schema.$Array<S>) => HeadOrElse<S>;
|
|
25
|
+
};
|
|
26
|
+
export declare const hash: (schema: Schema.Top) => number;
|
|
27
|
+
export declare const getResolvedPropertySignatures: (schema: Schema.Top) => ReadonlyArray<SchemaAST.PropertySignature>;
|
|
28
|
+
export declare const encodeWithTransferables: <A, I>(schema: Schema.Codec<A, I>, options?: SchemaAST.ParseOptions) => (a: A, overrideOptions?: SchemaAST.ParseOptions) => Effect.Effect<readonly [I, Transferable[]], Schema.SchemaError, never>;
|
|
29
|
+
export declare const decodeSyncDebug: <A, I>(schema: Schema.Codec<A, I>, options?: SchemaAST.ParseOptions) => (i: I, overrideOptions?: SchemaAST.ParseOptions) => A;
|
|
30
|
+
export declare const encodeSyncDebug: <A, I>(schema: Schema.Codec<A, I>, options?: SchemaAST.ParseOptions) => (a: A, overrideOptions?: SchemaAST.ParseOptions) => I;
|
|
23
31
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import { shouldNeverHappen } from "../../mod.js";
|
|
1
|
+
import { Array, Effect, Function, Hash, Option, Result, Schema, SchemaAST, SchemaGetter, SchemaIssue, SchemaTransformation, Struct, } from 'effect';
|
|
2
|
+
import { Transferable } from 'effect/unstable/workers';
|
|
3
|
+
import { shouldNeverHappen } from "../../misc.js";
|
|
5
4
|
export * from 'effect/Schema';
|
|
6
5
|
export * from "./debug-diff.js";
|
|
6
|
+
export const pluck = (key) => (schema) => {
|
|
7
|
+
const field = schema.fields[key];
|
|
8
|
+
return schema.mapFields(Struct.pick([key])).pipe(Schema.decodeTo(Schema.toType(field), {
|
|
9
|
+
decode: SchemaGetter.transform((whole) => whole[key]),
|
|
10
|
+
encode: SchemaGetter.transform((value) => ({ [key]: value })),
|
|
11
|
+
}));
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Like {@link fromJsonString}, but the ENCODED form is an *indented* JSON string
|
|
15
|
+
* (default 2-space) instead of compact — for committed/human-read JSON files
|
|
16
|
+
* (package.json, release plans, CI previews) that must stay diff-friendly while
|
|
17
|
+
* still round-tripping through the schema.
|
|
18
|
+
*
|
|
19
|
+
* Use a concrete schema for known shapes (adds validation) or `Schema.Unknown`
|
|
20
|
+
* for open-ended ones (the indented analogue of `fromJsonString(Schema.Unknown)`).
|
|
21
|
+
*
|
|
22
|
+
* TODO collapse into `fromJsonString(schema, { space })` now that Effect 4 accepts a
|
|
23
|
+
* `space` option; kept separate here to keep the Effect upgrade free of release-tooling changes.
|
|
24
|
+
*/
|
|
25
|
+
export const jsonStringIndented = (schema, space = 2) => schema.pipe(Schema.encodeTo(Schema.String, {
|
|
26
|
+
decode: SchemaGetter.parseJson(),
|
|
27
|
+
encode: SchemaGetter.stringifyJson({ space }),
|
|
28
|
+
}));
|
|
29
|
+
export const head = (array) => array.pipe(Schema.decodeTo(Schema.Option(Schema.toType(array.value)), SchemaTransformation.transform({
|
|
30
|
+
decode: Array.head,
|
|
31
|
+
encode: Option.match({
|
|
32
|
+
onNone: () => [],
|
|
33
|
+
onSome: Array.of,
|
|
34
|
+
}),
|
|
35
|
+
})));
|
|
36
|
+
export const headOrElse = Function.dual((args) => Schema.isSchema(args[0]), (array, orElse) => array.pipe(Schema.decodeTo(Schema.toType(array.value), SchemaTransformation.transformOrFail({
|
|
37
|
+
decode: (array) => Array.isReadonlyArrayNonEmpty(array) === true
|
|
38
|
+
? Effect.succeed(Array.headNonEmpty(array))
|
|
39
|
+
: orElse === undefined
|
|
40
|
+
? Effect.fail(new SchemaIssue.InvalidValue({
|
|
41
|
+
message: 'Unable to retrieve the first element of an empty array',
|
|
42
|
+
}))
|
|
43
|
+
: Effect.succeed(orElse()),
|
|
44
|
+
encode: (value) => Effect.succeed(Array.of(value)),
|
|
45
|
+
}))));
|
|
7
46
|
// NOTE this is a temporary workaround until Effect schema has a better way to hash schemas
|
|
8
47
|
// https://github.com/Effect-TS/effect/issues/2719
|
|
9
48
|
// TODO remove this once the issue is resolved
|
|
@@ -16,43 +55,31 @@ export const hash = (schema) => {
|
|
|
16
55
|
return Hash.hash(schema.ast.toString());
|
|
17
56
|
}
|
|
18
57
|
};
|
|
19
|
-
const resolveStructAst = (ast) => {
|
|
20
|
-
if (SchemaAST.isTransformation(ast) === true) {
|
|
21
|
-
return resolveStructAst(ast.from);
|
|
22
|
-
}
|
|
23
|
-
return ast;
|
|
24
|
-
};
|
|
25
58
|
export const getResolvedPropertySignatures = (schema) => {
|
|
26
|
-
const resolvedAst =
|
|
27
|
-
return SchemaAST.
|
|
59
|
+
const resolvedAst = SchemaAST.toType(schema.ast);
|
|
60
|
+
return SchemaAST.isObjects(resolvedAst) === true ? resolvedAst.propertySignatures : [];
|
|
28
61
|
};
|
|
29
62
|
export const encodeWithTransferables = (schema, options) => (a, overrideOptions) => Effect.gen(function* () {
|
|
30
63
|
const collector = yield* Transferable.makeCollector;
|
|
31
|
-
const encoded = yield* Schema.
|
|
32
|
-
return [encoded, collector.
|
|
64
|
+
const encoded = yield* Schema.encodeEffect(schema, options)(a, overrideOptions).pipe(Effect.provideService(Transferable.Collector, collector));
|
|
65
|
+
return [encoded, collector.readUnsafe()];
|
|
33
66
|
});
|
|
34
67
|
export const decodeSyncDebug = (schema, options) => (input, overrideOptions) => {
|
|
35
|
-
const res = Schema.
|
|
36
|
-
if (res
|
|
37
|
-
return shouldNeverHappen(`decodeSyncDebug failed:`, res.
|
|
68
|
+
const res = Schema.decodeResult(schema, options)(input, overrideOptions);
|
|
69
|
+
if (Result.isFailure(res) === true) {
|
|
70
|
+
return shouldNeverHappen(`decodeSyncDebug failed:`, res.failure);
|
|
38
71
|
}
|
|
39
72
|
else {
|
|
40
|
-
return res.
|
|
73
|
+
return res.success;
|
|
41
74
|
}
|
|
42
75
|
};
|
|
43
76
|
export const encodeSyncDebug = (schema, options) => (input, overrideOptions) => {
|
|
44
|
-
const res = Schema.
|
|
45
|
-
if (res
|
|
46
|
-
return shouldNeverHappen(`encodeSyncDebug failed:`, res.
|
|
77
|
+
const res = Schema.encodeResult(schema, options)(input, overrideOptions);
|
|
78
|
+
if (Result.isFailure(res) === true) {
|
|
79
|
+
return shouldNeverHappen(`encodeSyncDebug failed:`, res.failure);
|
|
47
80
|
}
|
|
48
81
|
else {
|
|
49
|
-
return res.
|
|
82
|
+
return res.success;
|
|
50
83
|
}
|
|
51
84
|
};
|
|
52
|
-
export const swap = (schema) => Schema.transformOrFail(Schema.typeSchema(schema), Schema.encodedSchema(schema), {
|
|
53
|
-
decode: ParseResult.encode(schema),
|
|
54
|
-
encode: ParseResult.decode(schema),
|
|
55
|
-
});
|
|
56
|
-
export const Base64FromUint8Array = swap(Schema.Uint8ArrayFromBase64);
|
|
57
|
-
export const JsonValue = Schema.Union(Schema.String, Schema.Number, Schema.Boolean, Schema.Null, Schema.Array(Schema.suspend(() => JsonValue)), Schema.Record({ key: Schema.String, value: Schema.suspend(() => JsonValue) })).annotations({ identifier: 'JsonValue' });
|
|
58
85
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"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"}
|