@livestore/utils 0.4.0-dev.2 → 0.4.0-dev.20

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 (184) hide show
  1. package/dist/.tsbuildinfo.json +1 -1
  2. package/dist/NoopTracer.d.ts.map +1 -1
  3. package/dist/NoopTracer.js +1 -0
  4. package/dist/NoopTracer.js.map +1 -1
  5. package/dist/browser/Opfs/Opfs.d.ts +51 -0
  6. package/dist/browser/Opfs/Opfs.d.ts.map +1 -0
  7. package/dist/browser/Opfs/Opfs.js +345 -0
  8. package/dist/browser/Opfs/Opfs.js.map +1 -0
  9. package/dist/browser/Opfs/debug-utils.d.ts +20 -0
  10. package/dist/browser/Opfs/debug-utils.d.ts.map +1 -0
  11. package/dist/browser/Opfs/debug-utils.js +94 -0
  12. package/dist/browser/Opfs/debug-utils.js.map +1 -0
  13. package/dist/browser/Opfs/mod.d.ts +4 -0
  14. package/dist/browser/Opfs/mod.d.ts.map +1 -0
  15. package/dist/browser/Opfs/mod.js +4 -0
  16. package/dist/browser/Opfs/mod.js.map +1 -0
  17. package/dist/browser/Opfs/utils.d.ts +68 -0
  18. package/dist/browser/Opfs/utils.d.ts.map +1 -0
  19. package/dist/browser/Opfs/utils.js +206 -0
  20. package/dist/browser/Opfs/utils.js.map +1 -0
  21. package/dist/browser/QuotaExceededError.d.ts +59 -0
  22. package/dist/browser/QuotaExceededError.d.ts.map +1 -0
  23. package/dist/browser/QuotaExceededError.js +2 -0
  24. package/dist/browser/QuotaExceededError.js.map +1 -0
  25. package/dist/browser/WebChannelBrowser.d.ts +22 -0
  26. package/dist/browser/WebChannelBrowser.d.ts.map +1 -0
  27. package/dist/browser/WebChannelBrowser.js +76 -0
  28. package/dist/browser/WebChannelBrowser.js.map +1 -0
  29. package/dist/browser/WebError.d.ts +425 -0
  30. package/dist/browser/WebError.d.ts.map +1 -0
  31. package/dist/browser/WebError.js +414 -0
  32. package/dist/browser/WebError.js.map +1 -0
  33. package/dist/browser/WebError.test.d.ts +2 -0
  34. package/dist/browser/WebError.test.d.ts.map +1 -0
  35. package/dist/browser/WebError.test.js +46 -0
  36. package/dist/browser/WebError.test.js.map +1 -0
  37. package/dist/browser/WebLock.d.ts.map +1 -0
  38. package/dist/browser/WebLock.js.map +1 -0
  39. package/dist/{browser.d.ts → browser/detect.d.ts} +1 -1
  40. package/dist/browser/detect.d.ts.map +1 -0
  41. package/dist/{browser.js → browser/detect.js} +1 -1
  42. package/dist/browser/detect.js.map +1 -0
  43. package/dist/browser/mod.d.ts +8 -0
  44. package/dist/browser/mod.d.ts.map +1 -0
  45. package/dist/browser/mod.js +8 -0
  46. package/dist/browser/mod.js.map +1 -0
  47. package/dist/effect/Debug.d.ts +38 -0
  48. package/dist/effect/Debug.d.ts.map +1 -0
  49. package/dist/effect/Debug.js +287 -0
  50. package/dist/effect/Debug.js.map +1 -0
  51. package/dist/effect/Effect.d.ts +9 -3
  52. package/dist/effect/Effect.d.ts.map +1 -1
  53. package/dist/effect/Effect.js +4 -2
  54. package/dist/effect/Effect.js.map +1 -1
  55. package/dist/effect/Error.d.ts +1 -1
  56. package/dist/effect/Error.js.map +1 -1
  57. package/dist/effect/Logger.d.ts +4 -1
  58. package/dist/effect/Logger.d.ts.map +1 -1
  59. package/dist/effect/Logger.js +12 -3
  60. package/dist/effect/Logger.js.map +1 -1
  61. package/dist/effect/OtelTracer.d.ts +5 -0
  62. package/dist/effect/OtelTracer.d.ts.map +1 -0
  63. package/dist/effect/OtelTracer.js +8 -0
  64. package/dist/effect/OtelTracer.js.map +1 -0
  65. package/dist/effect/RpcClient.d.ts +32 -0
  66. package/dist/effect/RpcClient.d.ts.map +1 -0
  67. package/dist/effect/RpcClient.js +149 -0
  68. package/dist/effect/RpcClient.js.map +1 -0
  69. package/dist/effect/Schema/index.d.ts +2 -2
  70. package/dist/effect/Schema/index.d.ts.map +1 -1
  71. package/dist/effect/Schema/index.js +12 -2
  72. package/dist/effect/Schema/index.js.map +1 -1
  73. package/dist/effect/Stream.d.ts +73 -2
  74. package/dist/effect/Stream.d.ts.map +1 -1
  75. package/dist/effect/Stream.js +68 -1
  76. package/dist/effect/Stream.js.map +1 -1
  77. package/dist/effect/Stream.test.d.ts +2 -0
  78. package/dist/effect/Stream.test.d.ts.map +1 -0
  79. package/dist/effect/Stream.test.js +84 -0
  80. package/dist/effect/Stream.test.js.map +1 -0
  81. package/dist/effect/SubscriptionRef.d.ts +2 -2
  82. package/dist/effect/SubscriptionRef.d.ts.map +1 -1
  83. package/dist/effect/SubscriptionRef.js +6 -1
  84. package/dist/effect/SubscriptionRef.js.map +1 -1
  85. package/dist/effect/WebChannel/WebChannel.d.ts +2 -21
  86. package/dist/effect/WebChannel/WebChannel.d.ts.map +1 -1
  87. package/dist/effect/WebChannel/WebChannel.js +5 -81
  88. package/dist/effect/WebChannel/WebChannel.js.map +1 -1
  89. package/dist/effect/WebChannel/WebChannel.test.js +1 -1
  90. package/dist/effect/WebChannel/WebChannel.test.js.map +1 -1
  91. package/dist/effect/WebChannel/common.d.ts +1 -1
  92. package/dist/effect/WebChannel/common.d.ts.map +1 -1
  93. package/dist/effect/WebSocket.d.ts.map +1 -1
  94. package/dist/effect/WebSocket.js +12 -12
  95. package/dist/effect/WebSocket.js.map +1 -1
  96. package/dist/effect/mod.d.ts +32 -0
  97. package/dist/effect/mod.d.ts.map +1 -0
  98. package/dist/effect/mod.js +35 -0
  99. package/dist/effect/mod.js.map +1 -0
  100. package/dist/global.d.ts +1 -0
  101. package/dist/global.d.ts.map +1 -1
  102. package/dist/global.js.map +1 -1
  103. package/dist/misc.js +1 -1
  104. package/dist/misc.js.map +1 -1
  105. package/dist/mod.d.ts +3 -1
  106. package/dist/mod.d.ts.map +1 -1
  107. package/dist/mod.js +5 -1
  108. package/dist/mod.js.map +1 -1
  109. package/dist/node/ChildProcessRunner/ChildProcessRunner.d.ts.map +1 -1
  110. package/dist/node/ChildProcessRunner/ChildProcessRunner.js +66 -10
  111. package/dist/node/ChildProcessRunner/ChildProcessRunner.js.map +1 -1
  112. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js +177 -3
  113. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.js.map +1 -1
  114. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts +14 -5
  115. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.d.ts.map +1 -1
  116. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js +7 -1
  117. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/schema.js.map +1 -1
  118. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js +13 -3
  119. package/dist/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.js.map +1 -1
  120. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts +16 -0
  121. package/dist/node/ChildProcessRunner/ChildProcessWorker.d.ts.map +1 -1
  122. package/dist/node/ChildProcessRunner/ChildProcessWorker.js +98 -2
  123. package/dist/node/ChildProcessRunner/ChildProcessWorker.js.map +1 -1
  124. package/dist/node/mod.d.ts +8 -2
  125. package/dist/node/mod.d.ts.map +1 -1
  126. package/dist/node/mod.js +11 -3
  127. package/dist/node/mod.js.map +1 -1
  128. package/dist/qr.d.ts +38 -0
  129. package/dist/qr.d.ts.map +1 -0
  130. package/dist/qr.js +109 -0
  131. package/dist/qr.js.map +1 -0
  132. package/package.json +54 -44
  133. package/src/NoopTracer.ts +1 -0
  134. package/src/browser/Opfs/Opfs.ts +428 -0
  135. package/src/browser/Opfs/debug-utils.ts +151 -0
  136. package/src/browser/Opfs/mod.ts +3 -0
  137. package/src/browser/Opfs/utils.ts +270 -0
  138. package/src/browser/QuotaExceededError.ts +59 -0
  139. package/src/browser/WebChannelBrowser.ts +131 -0
  140. package/src/browser/WebError.test.ts +66 -0
  141. package/src/browser/WebError.ts +599 -0
  142. package/src/browser/mod.ts +8 -0
  143. package/src/effect/Debug.ts +375 -0
  144. package/src/effect/Effect.ts +31 -4
  145. package/src/effect/Error.ts +1 -1
  146. package/src/effect/Logger.ts +14 -4
  147. package/src/effect/OtelTracer.ts +11 -0
  148. package/src/effect/RpcClient.ts +212 -0
  149. package/src/effect/Schema/index.ts +17 -3
  150. package/src/effect/Stream.test.ts +127 -0
  151. package/src/effect/Stream.ts +111 -2
  152. package/src/effect/SubscriptionRef.ts +14 -2
  153. package/src/effect/WebChannel/WebChannel.test.ts +1 -1
  154. package/src/effect/WebChannel/WebChannel.ts +13 -135
  155. package/src/effect/WebChannel/common.ts +1 -1
  156. package/src/effect/WebSocket.ts +11 -10
  157. package/src/effect/{index.ts → mod.ts} +42 -15
  158. package/src/global.ts +1 -0
  159. package/src/misc.ts +1 -1
  160. package/src/mod.ts +10 -1
  161. package/src/node/ChildProcessRunner/ChildProcessRunner.ts +71 -10
  162. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/ChildProcessRunner.test.ts +258 -3
  163. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/schema.ts +14 -1
  164. package/src/node/ChildProcessRunner/ChildProcessRunnerTest/serializedWorker.ts +16 -3
  165. package/src/node/ChildProcessRunner/ChildProcessWorker.ts +111 -3
  166. package/src/node/mod.ts +13 -6
  167. package/src/qr.ts +125 -0
  168. package/dist/browser.d.ts.map +0 -1
  169. package/dist/browser.js.map +0 -1
  170. package/dist/effect/Schema/msgpack.d.ts +0 -3
  171. package/dist/effect/Schema/msgpack.d.ts.map +0 -1
  172. package/dist/effect/Schema/msgpack.js +0 -7
  173. package/dist/effect/Schema/msgpack.js.map +0 -1
  174. package/dist/effect/WebLock.d.ts.map +0 -1
  175. package/dist/effect/WebLock.js.map +0 -1
  176. package/dist/effect/index.d.ts +0 -27
  177. package/dist/effect/index.d.ts.map +0 -1
  178. package/dist/effect/index.js +0 -31
  179. package/dist/effect/index.js.map +0 -1
  180. package/src/effect/Schema/msgpack.ts +0 -8
  181. /package/dist/{effect → browser}/WebLock.d.ts +0 -0
  182. /package/dist/{effect → browser}/WebLock.js +0 -0
  183. /package/src/{effect → browser}/WebLock.ts +0 -0
  184. /package/src/{browser.ts → browser/detect.ts} +0 -0
@@ -0,0 +1,149 @@
1
+ export * from '@effect/rpc/RpcClient';
2
+ import { Socket } from '@effect/platform';
3
+ import { RpcClient, RpcClientError, RpcSerialization } from '@effect/rpc';
4
+ import { Protocol } from '@effect/rpc/RpcClient';
5
+ import { constPing } from '@effect/rpc/RpcMessage';
6
+ import { Cause, Deferred, Effect, Layer, Option, Schedule } from 'effect';
7
+ import { constVoid, identity } from 'effect/Function';
8
+ import * as SubscriptionRef from "./SubscriptionRef.js";
9
+ // This is based on `makeProtocolSocket` / `layerProtocolSocket` from `@effect/rpc` in order to:
10
+ // - Add a `isConnected` subscription ref to track the connection state
11
+ // - Add a ping schedule to the socket
12
+ // - Add a retry schedule to the socket
13
+ export const layerProtocolSocketWithIsConnected = (options) => Layer.scoped(Protocol, makeProtocolSocketWithIsConnected(options));
14
+ export const makeProtocolSocketWithIsConnected = (options) => Protocol.make(Effect.fnUntraced(function* (writeResponse) {
15
+ const socket = yield* Socket.Socket;
16
+ const serialization = yield* RpcSerialization.RpcSerialization;
17
+ const write = yield* socket.writer;
18
+ const parser = serialization.unsafeMake();
19
+ const pinger = yield* makePinger(write(parser.encode(constPing)), options?.pingSchedule);
20
+ yield* Effect.suspend(() => {
21
+ // We rely on the heartbeat watchdog while streaming arbitrarily long payloads.
22
+ // Reset the timer as soon as _any_ frame arrives so that large batches which
23
+ // don't contain explicit `Pong` messages don't trigger the open-timeout defect.
24
+ // (The actual pong handler still calls `onPong()` to resolve manual pings.)
25
+ // CHANGED: don't reset parser on every message
26
+ // parser = serialization.unsafeMake()
27
+ pinger.reset();
28
+ return socket
29
+ .runRaw((message) => {
30
+ try {
31
+ const responses = parser.decode(message);
32
+ if (responses.length === 0)
33
+ return;
34
+ let i = 0;
35
+ return Effect.whileLoop({
36
+ while: () => i < responses.length,
37
+ body: () => {
38
+ const response = responses[i++];
39
+ // Keep extending the watchdog for each data frame to avoid
40
+ // disconnecting mid-stream when the server is busy sending batches.
41
+ pinger.reset();
42
+ if (response._tag === 'Pong') {
43
+ pinger.onPong();
44
+ }
45
+ return writeResponse(response).pipe(
46
+ // CHANGED: set isConnected to true on pong
47
+ Effect.tap(Effect.fn(function* () {
48
+ if (options?.isConnected !== undefined) {
49
+ yield* SubscriptionRef.set(options.isConnected, true);
50
+ }
51
+ })));
52
+ },
53
+ step: constVoid,
54
+ });
55
+ }
56
+ catch (defect) {
57
+ return writeResponse({
58
+ _tag: 'ClientProtocolError',
59
+ error: new RpcClientError.RpcClientError({
60
+ reason: 'Protocol',
61
+ message: 'Error decoding message',
62
+ cause: Cause.fail(defect),
63
+ }),
64
+ });
65
+ }
66
+ })
67
+ .pipe(Effect.raceFirst(Effect.zipRight(pinger.timeout, Effect.fail(new Socket.SocketGenericError({
68
+ reason: 'OpenTimeout',
69
+ cause: new Error('ping timeout'),
70
+ })))));
71
+ }).pipe(Effect.zipRight(Effect.fail(new Socket.SocketCloseError({
72
+ reason: 'Close',
73
+ code: 1000,
74
+ closeReason: 'Closing connection',
75
+ }))), Effect.tapErrorCause(Effect.fn(function* (cause) {
76
+ // CHANGED: set isConnected to false on error
77
+ if (options?.isConnected !== undefined) {
78
+ yield* SubscriptionRef.set(options.isConnected, false);
79
+ }
80
+ const error = Cause.failureOption(cause);
81
+ if (options?.retryTransientErrors &&
82
+ Option.isSome(error) &&
83
+ (error.value.reason === 'Open' || error.value.reason === 'OpenTimeout')) {
84
+ return;
85
+ }
86
+ // yield* Effect.logError('Error in socket', cause)
87
+ return yield* writeResponse({
88
+ _tag: 'ClientProtocolError',
89
+ error: new RpcClientError.RpcClientError({
90
+ reason: 'Protocol',
91
+ message: 'Error in socket',
92
+ cause: Cause.squash(cause),
93
+ }),
94
+ });
95
+ })),
96
+ // CHANGED: make configurable via schedule
97
+ options?.retryTransientErrors ? Effect.retry(options.retryTransientErrors) : identity, Effect.annotateLogs({
98
+ module: 'RpcClient',
99
+ method: 'makeProtocolSocket',
100
+ }), Effect.interruptible, Effect.ignore, // Errors are already handled
101
+ Effect.provide(Layer.setUnhandledErrorLogLevel(Option.none())), Effect.forkScoped);
102
+ return {
103
+ send: (request) => {
104
+ const encoded = parser.encode(request);
105
+ if (encoded === undefined)
106
+ return Effect.void;
107
+ return Effect.orDie(write(encoded));
108
+ },
109
+ supportsAck: true,
110
+ supportsTransferables: false,
111
+ pinger,
112
+ };
113
+ }));
114
+ 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))) {
116
+ // CHANGED: add manual ping deferreds
117
+ const manualPingDeferreds = new Set();
118
+ let recievedPong = true;
119
+ const latch = Effect.unsafeMakeLatch();
120
+ const reset = () => {
121
+ recievedPong = true;
122
+ latch.unsafeClose();
123
+ };
124
+ const onPong = () => {
125
+ recievedPong = true;
126
+ // CHANGED: mark all manual ping deferreds as done
127
+ for (const deferred of manualPingDeferreds) {
128
+ Deferred.unsafeDone(deferred, Effect.void);
129
+ }
130
+ };
131
+ yield* Effect.suspend(() => {
132
+ // Starting new ping
133
+ if (!recievedPong)
134
+ return latch.open;
135
+ recievedPong = false;
136
+ return writePing;
137
+ }).pipe(
138
+ // CHANGED: make configurable via schedule
139
+ Effect.schedule(pingSchedule), Effect.ignore, Effect.forever, Effect.interruptible, Effect.forkScoped);
140
+ // CHANGED: add manual ping
141
+ const ping = Effect.gen(function* () {
142
+ const deferred = yield* Deferred.make();
143
+ manualPingDeferreds.add(deferred);
144
+ yield* deferred;
145
+ manualPingDeferreds.delete(deferred);
146
+ });
147
+ return { timeout: latch.await, reset, onPong, ping };
148
+ });
149
+ //# sourceMappingURL=RpcClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RpcClient.js","sourceRoot":"","sources":["../../src/effect/RpcClient.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,SAAS,EAA0B,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAc,MAAM,QAAQ,CAAA;AACrF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAA;AAEvD,gGAAgG;AAChG,uEAAuE;AACvE,sCAAsC;AACtC,uCAAuC;AAEvC,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,OAKlD,EAAmF,EAAE,CACpF,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC,OAAO,CAAC,CAAC,CAAA;AAEpE,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,OAOjD,EAA2G,EAAE,CAC5G,QAAQ,CAAC,IAAI,CACX,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,aAAa;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IACnC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC,gBAAgB,CAAA;IAE9D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA;IAClC,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,CAAA;IAEzC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;IAEzF,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACzB,+EAA+E;QAC/E,6EAA6E;QAC7E,gFAAgF;QAChF,4EAA4E;QAC5E,+CAA+C;QAC/C,sCAAsC;QACtC,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,OAAO,MAAM;aACV,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAA6B,CAAA;gBACpE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAM;gBAClC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACT,OAAO,MAAM,CAAC,SAAS,CAAC;oBACtB,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM;oBACjC,IAAI,EAAE,GAAG,EAAE;wBACT,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAE,CAAE,CAAA;wBAChC,2DAA2D;wBAC3D,oEAAoE;wBACpE,MAAM,CAAC,KAAK,EAAE,CAAA;wBACd,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;4BAC7B,MAAM,CAAC,MAAM,EAAE,CAAA;wBACjB,CAAC;wBACD,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI;wBACjC,2CAA2C;wBAC3C,MAAM,CAAC,GAAG,CACR,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;4BACjB,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;gCACvC,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;4BACvD,CAAC;wBACH,CAAC,CAAC,CACH,CACF,CAAA;oBACH,CAAC;oBACD,IAAI,EAAE,SAAS;iBAChB,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;gBAChB,OAAO,aAAa,CAAC;oBACnB,IAAI,EAAE,qBAAqB;oBAC3B,KAAK,EAAE,IAAI,cAAc,CAAC,cAAc,CAAC;wBACvC,MAAM,EAAE,UAAU;wBAClB,OAAO,EAAE,wBAAwB;wBACjC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;qBAC1B,CAAC;iBACH,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CACH,MAAM,CAAC,SAAS,CACd,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,IAAI,CACT,IAAI,MAAM,CAAC,kBAAkB,CAAC;YAC5B,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,IAAI,KAAK,CAAC,cAAc,CAAC;SACjC,CAAC,CACH,CACF,CACF,CACF,CAAA;IACL,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CACb,MAAM,CAAC,IAAI,CACT,IAAI,MAAM,CAAC,gBAAgB,CAAC;QAC1B,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,oBAAoB;KAClC,CAAC,CACH,CACF,EACD,MAAM,CAAC,aAAa,CAClB,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK;QACxB,6CAA6C;QAC7C,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;YACvC,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QACxD,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACxC,IACE,OAAO,EAAE,oBAAoB;YAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YACpB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,aAAa,CAAC,EACvE,CAAC;YACD,OAAM;QACR,CAAC;QACD,mDAAmD;QACnD,OAAO,KAAK,CAAC,CAAC,aAAa,CAAC;YAC1B,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,IAAI,cAAc,CAAC,cAAc,CAAC;gBACvC,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,iBAAiB;gBAC1B,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;aAC3B,CAAC;SACH,CAAC,CAAA;IACJ,CAAC,CAAC,CACH;IACD,0CAA0C;IAC1C,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,EACrF,MAAM,CAAC,YAAY,CAAC;QAClB,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,oBAAoB;KAC7B,CAAC,EACF,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,MAAM,EAAE,6BAA6B;IAC5C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAC9D,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,OAAO;QACL,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;YAChB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YACtC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAA;YAE7C,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;QACrC,CAAC;QACD,WAAW,EAAE,IAAI;QACjB,qBAAqB,EAAE,KAAK;QAC5B,MAAM;KACP,CAAA;AACH,CAAC,CAAC,CACH,CAAA;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAE,QAAgB,CAAC,MAAsB,CAAC,CAAA;AAIlH,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAC5C,SAAiC,EACjC,eAA2C,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAErG,qCAAqC;IACrC,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkC,CAAA;IAErE,IAAI,YAAY,GAAG,IAAI,CAAA;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,EAAE,CAAA;IACtC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,YAAY,GAAG,IAAI,CAAA;QACnB,KAAK,CAAC,WAAW,EAAE,CAAA;IACrB,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,YAAY,GAAG,IAAI,CAAA;QACnB,kDAAkD;QAClD,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;YAC3C,QAAQ,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC,CAAA;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;QACzB,oBAAoB;QACpB,IAAI,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC,IAAI,CAAA;QACpC,YAAY,GAAG,KAAK,CAAA;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC,CAAC,CAAC,IAAI;IACL,0CAA0C;IAC1C,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC7B,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,2BAA2B;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAe,CAAA;QACpD,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACjC,KAAK,CAAC,CAAC,QAAQ,CAAA;QACf,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAW,CAAA;AAC/D,CAAC,CAAC,CAAA"}
@@ -1,11 +1,11 @@
1
- import type { SchemaAST } from 'effect';
2
1
  import { Effect, Schema } from 'effect';
3
2
  import type { ParseError } from 'effect/ParseResult';
4
3
  import type { ParseOptions } from 'effect/SchemaAST';
4
+ import * as SchemaAST from 'effect/SchemaAST';
5
5
  export * from 'effect/Schema';
6
6
  export * from './debug-diff.ts';
7
- export * from './msgpack.ts';
8
7
  export declare const hash: (schema: Schema.Schema<any>) => number;
8
+ export declare const getResolvedPropertySignatures: (schema: Schema.Schema.AnyNoContext) => ReadonlyArray<SchemaAST.PropertySignature>;
9
9
  export declare const encodeWithTransferables: <A, I, R>(schema: Schema.Schema<A, I, R>, options?: ParseOptions | undefined) => (a: A, overrideOptions?: ParseOptions | undefined) => Effect.Effect<[I, Transferable[]], ParseError, R>;
10
10
  export declare const decodeSyncDebug: <A, I>(schema: Schema.Schema<A, I, never>, options?: SchemaAST.ParseOptions) => (i: I, overrideOptions?: SchemaAST.ParseOptions) => A;
11
11
  export declare const encodeSyncDebug: <A, I>(schema: Schema.Schema<A, I, never>, options?: SchemaAST.ParseOptions) => (a: A, overrideOptions?: SchemaAST.ParseOptions) => I;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,MAAM,EAAqB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAIpD,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAK5B,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAS9C,CAAA;AAED,eAAO,MAAM,uBAAuB,GACjC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,YAAY,GAAG,SAAS,MAC3E,GAAG,CAAC,EAAE,kBAAkB,YAAY,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAShG,CAAA;AAEN,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAClC,OAAO,CAAC,EAAE,SAAS,CAAC,YAAY,KAC7B,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,YAAY,KAAK,CAOxD,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAClC,OAAO,CAAC,EAAE,SAAS,CAAC,YAAY,KAC7B,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,YAAY,KAAK,CAOxD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAIhF,CAAA;AAEJ,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAqC,CAAA;AAExG,MAAM,WAAW,SAAU,SAAQ,aAAa,CAAC,SAAS,CAAC;CAAG;AAC9D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,CAAA;AAEjF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAOV,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAqB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAI7C,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAK/B,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,WAS9C,CAAA;AAUD,eAAO,MAAM,6BAA6B,GACxC,QAAQ,MAAM,CAAC,MAAM,CAAC,YAAY,KACjC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAG3C,CAAA;AAED,eAAO,MAAM,uBAAuB,GACjC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,YAAY,GAAG,SAAS,MAC3E,GAAG,CAAC,EAAE,kBAAkB,YAAY,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAShG,CAAA;AAEN,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAClC,OAAO,CAAC,EAAE,SAAS,CAAC,YAAY,KAC7B,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,YAAY,KAAK,CAOxD,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EACjC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAClC,OAAO,CAAC,EAAE,SAAS,CAAC,YAAY,KAC7B,CAAC,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE,SAAS,CAAC,YAAY,KAAK,CAOxD,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAIhF,CAAA;AAEJ,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAqC,CAAA;AAExG,MAAM,WAAW,SAAU,SAAQ,aAAa,CAAC,SAAS,CAAC;CAAG;AAC9D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,CAAA;AAEjF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAOL,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { Transferable } from '@effect/platform';
2
2
  import { Effect, Hash, ParseResult, Schema } from 'effect';
3
+ import * as SchemaAST from 'effect/SchemaAST';
3
4
  import { shouldNeverHappen } from "../../mod.js";
4
5
  export * from 'effect/Schema';
5
6
  export * from "./debug-diff.js";
6
- export * from "./msgpack.js";
7
7
  // NOTE this is a temporary workaround until Effect schema has a better way to hash schemas
8
8
  // https://github.com/Effect-TS/effect/issues/2719
9
9
  // TODO remove this once the issue is resolved
@@ -16,6 +16,16 @@ export const hash = (schema) => {
16
16
  return Hash.hash(schema.ast.toString());
17
17
  }
18
18
  };
19
+ const resolveStructAst = (ast) => {
20
+ if (SchemaAST.isTransformation(ast)) {
21
+ return resolveStructAst(ast.from);
22
+ }
23
+ return ast;
24
+ };
25
+ export const getResolvedPropertySignatures = (schema) => {
26
+ const resolvedAst = resolveStructAst(schema.ast);
27
+ return SchemaAST.getPropertySignatures(resolvedAst);
28
+ };
19
29
  export const encodeWithTransferables = (schema, options) => (a, overrideOptions) => Effect.gen(function* () {
20
30
  const collector = yield* Transferable.makeCollector;
21
31
  const encoded = yield* Schema.encode(schema, options)(a, overrideOptions).pipe(Effect.provideService(Transferable.Collector, collector));
@@ -44,5 +54,5 @@ export const swap = (schema) => Schema.transformOrFail(Schema.typeSchema(schema)
44
54
  encode: ParseResult.decode(schema),
45
55
  });
46
56
  export const Base64FromUint8Array = swap(Schema.Uint8ArrayFromBase64);
47
- 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({ title: 'JsonValue' });
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' });
48
58
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/effect/Schema/index.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,81 @@
1
+ /** biome-ignore-all lint/suspicious/useIterableCallbackReturn: Biome bug */
1
2
  export * from 'effect/Stream';
2
- import type { Chunk } from 'effect';
3
- import { Effect, Stream } from 'effect';
3
+ import { type Cause, Chunk, Effect, Option, Stream } from 'effect';
4
4
  export declare const tapLog: <R, E, A>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E, R>;
5
5
  export declare const tapSync: <A>(tapFn: (a: A) => unknown) => <R, E>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E, R>;
6
6
  export declare const tapLogWithLabel: (label: string) => <R, E, A>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E, R>;
7
7
  export declare const tapChunk: <R1, E1, A, Z>(f: (a: Chunk.Chunk<A>) => Effect.Effect<Z, E1, R1>) => <R, E>(self: Stream.Stream<A, E, R>) => Stream.Stream<A, E1 | E, R1 | R>;
8
8
  export declare const skipRepeated: <A>(isEqual?: (prevEl: A, newEl: A) => boolean) => <R, E>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E, R>;
9
9
  export declare const skipRepeated_: <R, E, A>(stream: Stream.Stream<A, E, R>, isEqual?: (prevEl: A, newEl: A) => boolean) => Stream.Stream<A, E, R>;
10
+ /**
11
+ * Returns the first element of the stream or `None` if the stream is empty.
12
+ * It's different than `Stream.runHead` which runs the stream to completion.
13
+ * */
14
+ export declare const runFirst: <A, E, R>(stream: Stream.Stream<A, E, R>) => Effect.Effect<Option.Option<A>, E, R>;
15
+ /**
16
+ * Returns the first element of the stream or throws a `NoSuchElementException` if the stream is empty.
17
+ * It's different than `Stream.runHead` which runs the stream to completion.
18
+ * */
19
+ export declare const runFirstUnsafe: <A, E, R>(stream: Stream.Stream<A, E, R>) => Effect.Effect<A, Cause.NoSuchElementException | E, R>;
20
+ export declare const runCollectReadonlyArray: <A, E, R>(stream: Stream.Stream<A, E, R>) => Effect.Effect<readonly A[], E, R>;
21
+ /**
22
+ * Concatenates two streams where the second stream has access to the last element
23
+ * of the first stream as an `Option`. If the first stream is empty, the callback
24
+ * receives `Option.none()`.
25
+ *
26
+ * @param stream - The first stream to consume
27
+ * @param getStream2 - Function that receives the last element from the first stream
28
+ * and returns the second stream to concatenate
29
+ * @returns A new stream containing all elements from both streams
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * // Direct usage
34
+ * const result = concatWithLastElement(
35
+ * Stream.make(1, 2, 3),
36
+ * lastElement => lastElement.pipe(
37
+ * Option.match({
38
+ * onNone: () => Stream.make('empty'),
39
+ * onSome: last => Stream.make(`last-was-${last}`)
40
+ * })
41
+ * )
42
+ * )
43
+ *
44
+ * // Piped usage
45
+ * const result = Stream.make(1, 2, 3).pipe(
46
+ * concatWithLastElement(lastElement =>
47
+ * Stream.make(lastElement.pipe(Option.getOrElse(() => 0)) * 10)
48
+ * )
49
+ * )
50
+ * ```
51
+ */
52
+ export declare const concatWithLastElement: {
53
+ <A1, A2, E2, R2>(getStream2: (lastElement: Option.Option<A1>) => Stream.Stream<A2, E2, R2>): <E1, R1>(stream: Stream.Stream<A1, E1, R1>) => Stream.Stream<A1 | A2, E1 | E2, R1 | R2>;
54
+ <A1, E1, R1, A2, E2, R2>(stream: Stream.Stream<A1, E1, R1>, getStream2: (lastElement: Option.Option<A1>) => Stream.Stream<A2, E2, R2>): Stream.Stream<A1 | A2, E1 | E2, R1 | R2>;
55
+ };
56
+ /**
57
+ * Emits a default value if the stream is empty, otherwise passes through all elements.
58
+ * Uses `concatWithLastElement` internally to detect if the stream was empty.
59
+ *
60
+ * @param fallbackValue - The value to emit if the stream is empty
61
+ * @returns A dual function that can be used in pipe or direct call
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * // Direct usage
66
+ * const result = emitIfEmpty(Stream.empty, 'default')
67
+ * // Emits: 'default'
68
+ *
69
+ * // Piped usage
70
+ * const result = Stream.make(1, 2, 3).pipe(emitIfEmpty('fallback'))
71
+ * // Emits: 1, 2, 3
72
+ *
73
+ * const empty = Stream.empty.pipe(emitIfEmpty('fallback'))
74
+ * // Emits: 'fallback'
75
+ * ```
76
+ */
77
+ export declare const emitIfEmpty: {
78
+ <A>(fallbackValue: A): <E, R>(stream: Stream.Stream<A, E, R>) => Stream.Stream<A, E, R>;
79
+ <A, E, R>(stream: Stream.Stream<A, E, R>, fallbackValue: A): Stream.Stream<A, E, R>;
80
+ };
10
81
  //# sourceMappingURL=Stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/effect/Stream.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAE7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,MAAM,EAAqB,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE1D,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACU,CAAA;AAEhG,eAAO,MAAM,OAAO,GACjB,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,MAC3B,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACL,CAAA;AAE1D,eAAO,MAAM,eAAe,GACzB,OAAO,MAAM,MACb,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACuC,CAAA;AAEzG,eAAO,MAAM,QAAQ,GAClB,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,MAChE,CAAC,EAAE,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAMlE,CAAA;AAIL,eAAO,MAAM,YAAY,GACtB,CAAC,EAAE,UAAS,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAoB,MACzD,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC7B,CAAA;AAElC,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACnC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,UAAS,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAoB,KACrD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAwBrB,CAAA"}
1
+ {"version":3,"file":"Stream.d.ts","sourceRoot":"","sources":["../../src/effect/Stream.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
+ /** biome-ignore-all lint/suspicious/useIterableCallbackReturn: Biome bug */
1
2
  export * from 'effect/Stream';
2
- import { Effect, Option, pipe, Ref, Stream } from 'effect';
3
+ import { Chunk, Effect, Option, pipe, Ref, Stream } from 'effect';
4
+ import { dual } from 'effect/Function';
3
5
  export const tapLog = (stream) => tapChunk(Effect.forEach((_) => Effect.succeed(console.log(_))))(stream);
4
6
  export const tapSync = (tapFn) => (stream) => Stream.tap(stream, (a) => Effect.sync(() => tapFn(a)));
5
7
  export const tapLogWithLabel = (label) => (stream) => tapChunk(Effect.forEach((_) => Effect.succeed(console.log(label, _))))(stream);
@@ -14,4 +16,69 @@ export const skipRepeated_ = (stream, isEqual = isIdentity) => pipe(Ref.make(Opt
14
16
  return Effect.succeed(false);
15
17
  }
16
18
  }))))));
19
+ /**
20
+ * Returns the first element of the stream or `None` if the stream is empty.
21
+ * It's different than `Stream.runHead` which runs the stream to completion.
22
+ * */
23
+ export const runFirst = (stream) => stream.pipe(Stream.take(1), Stream.runCollect, Effect.map(Chunk.head));
24
+ /**
25
+ * Returns the first element of the stream or throws a `NoSuchElementException` if the stream is empty.
26
+ * It's different than `Stream.runHead` which runs the stream to completion.
27
+ * */
28
+ export const runFirstUnsafe = (stream) => runFirst(stream).pipe(Effect.flatten);
29
+ export const runCollectReadonlyArray = (stream) => stream.pipe(Stream.runCollect, Effect.map(Chunk.toReadonlyArray));
30
+ /**
31
+ * Concatenates two streams where the second stream has access to the last element
32
+ * of the first stream as an `Option`. If the first stream is empty, the callback
33
+ * receives `Option.none()`.
34
+ *
35
+ * @param stream - The first stream to consume
36
+ * @param getStream2 - Function that receives the last element from the first stream
37
+ * and returns the second stream to concatenate
38
+ * @returns A new stream containing all elements from both streams
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * // Direct usage
43
+ * const result = concatWithLastElement(
44
+ * Stream.make(1, 2, 3),
45
+ * lastElement => lastElement.pipe(
46
+ * Option.match({
47
+ * onNone: () => Stream.make('empty'),
48
+ * onSome: last => Stream.make(`last-was-${last}`)
49
+ * })
50
+ * )
51
+ * )
52
+ *
53
+ * // Piped usage
54
+ * const result = Stream.make(1, 2, 3).pipe(
55
+ * concatWithLastElement(lastElement =>
56
+ * Stream.make(lastElement.pipe(Option.getOrElse(() => 0)) * 10)
57
+ * )
58
+ * )
59
+ * ```
60
+ */
61
+ export const concatWithLastElement = dual(2, (stream1, getStream2) => pipe(Ref.make(Option.none()), Stream.fromEffect, Stream.flatMap((lastRef) => pipe(stream1, Stream.tap((value) => Ref.set(lastRef, Option.some(value))), Stream.concat(pipe(Ref.get(lastRef), Effect.map(getStream2), Stream.unwrap))))));
62
+ /**
63
+ * Emits a default value if the stream is empty, otherwise passes through all elements.
64
+ * Uses `concatWithLastElement` internally to detect if the stream was empty.
65
+ *
66
+ * @param fallbackValue - The value to emit if the stream is empty
67
+ * @returns A dual function that can be used in pipe or direct call
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * // Direct usage
72
+ * const result = emitIfEmpty(Stream.empty, 'default')
73
+ * // Emits: 'default'
74
+ *
75
+ * // Piped usage
76
+ * const result = Stream.make(1, 2, 3).pipe(emitIfEmpty('fallback'))
77
+ * // Emits: 1, 2, 3
78
+ *
79
+ * const empty = Stream.empty.pipe(emitIfEmpty('fallback'))
80
+ * // Emits: 'fallback'
81
+ * ```
82
+ */
83
+ export const emitIfEmpty = dual(2, (stream, fallbackValue) => concatWithLastElement(stream, (lastElement) => lastElement._tag === 'None' ? Stream.make(fallbackValue) : Stream.empty));
17
84
  //# sourceMappingURL=Stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Stream.js","sourceRoot":"","sources":["../../src/effect/Stream.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAG7B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE1D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAU,MAA8B,EAA0B,EAAE,CACxF,QAAQ,CAAwB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAEhG,MAAM,CAAC,MAAM,OAAO,GAClB,CAAI,KAAwB,EAAE,EAAE,CAChC,CAAO,MAA8B,EAA0B,EAAE,CAC/D,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAE1D,MAAM,CAAC,MAAM,eAAe,GAC1B,CAAC,KAAa,EAAE,EAAE,CAClB,CAAU,MAA8B,EAA0B,EAAE,CAClE,QAAQ,CAAwB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzG,MAAM,CAAC,MAAM,QAAQ,GACnB,CAAe,CAAkD,EAAE,EAAE,CACrE,CAAO,IAA4B,EAAoC,EAAE,CACvE,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CACtC,IAAI,CACF,CAAC,CAAC,MAAM,CAAC,EACT,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CACzB,CACF,CAAA;AAEL,MAAM,UAAU,GAAG,CAAI,EAAK,EAAE,EAAK,EAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAA;AAE1D,MAAM,CAAC,MAAM,YAAY,GACvB,CAAI,UAA4C,UAAU,EAAE,EAAE,CAC9D,CAAO,MAA8B,EAA0B,EAAE,CAC/D,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAElC,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAA8B,EAC9B,UAA4C,UAAU,EAC9B,EAAE,CAC1B,IAAI,CACF,GAAG,CAAC,IAAI,CAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,EACzC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACrB,IAAI,CACF,MAAM,EACN,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,CACzB,IAAI,CACF,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EACZ,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;IACxB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QAClE,OAAO,IAAI,CACT,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CACvB,CAAA;IACH,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC,CAAC,CACH,CACF,CACF,CACF,CACF,CAAA"}
1
+ {"version":3,"file":"Stream.js","sourceRoot":"","sources":["../../src/effect/Stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Stream.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stream.test.d.ts","sourceRoot":"","sources":["../../src/effect/Stream.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { Effect, Option, Stream } from 'effect';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { concatWithLastElement, runCollectReadonlyArray } from "./Stream.js";
4
+ describe('concatWithLastElement', () => {
5
+ it('should concatenate streams with access to last element of first stream', async () => {
6
+ const stream1 = Stream.make(1, 2, 3);
7
+ const result = concatWithLastElement(stream1, (lastElement) => lastElement.pipe(Option.match({
8
+ onNone: () => Stream.make('no-previous'),
9
+ onSome: (last) => Stream.make(`last-was-${last}`, 'continuing'),
10
+ })));
11
+ const collected = await Effect.runPromise(runCollectReadonlyArray(result));
12
+ expect(collected).toEqual([1, 2, 3, 'last-was-3', 'continuing']);
13
+ });
14
+ it('should handle empty first stream', async () => {
15
+ const stream1 = Stream.empty;
16
+ const result = concatWithLastElement(stream1, (lastElement) => lastElement.pipe(Option.match({
17
+ onNone: () => Stream.make('no-previous-element'),
18
+ onSome: (last) => Stream.make(`last-was-${last}`),
19
+ })));
20
+ const collected = await Effect.runPromise(runCollectReadonlyArray(result));
21
+ expect(collected).toEqual(['no-previous-element']);
22
+ });
23
+ it('should handle single element first stream', async () => {
24
+ const stream1 = Stream.make('single');
25
+ const result = concatWithLastElement(stream1, (lastElement) => lastElement.pipe(Option.match({
26
+ onNone: () => Stream.make('unexpected'),
27
+ onSome: (last) => Stream.make(`after-${last}`),
28
+ })));
29
+ const collected = await Effect.runPromise(runCollectReadonlyArray(result));
30
+ expect(collected).toEqual(['single', 'after-single']);
31
+ });
32
+ it('should handle empty second stream', async () => {
33
+ const stream1 = Stream.make(1, 2, 3);
34
+ const result = concatWithLastElement(stream1, () => Stream.empty);
35
+ const collected = await Effect.runPromise(runCollectReadonlyArray(result));
36
+ expect(collected).toEqual([1, 2, 3]);
37
+ });
38
+ it('should preserve error handling from first stream', async () => {
39
+ const stream1 = Stream.fail('first-error');
40
+ const result = concatWithLastElement(stream1, () => Stream.make('should-not-reach'));
41
+ const outcome = await Effect.runPromise(Effect.either(runCollectReadonlyArray(result)));
42
+ expect(outcome._tag).toBe('Left');
43
+ if (outcome._tag === 'Left') {
44
+ expect(outcome.left).toBe('first-error');
45
+ }
46
+ });
47
+ it('should preserve error handling from second stream', async () => {
48
+ const stream1 = Stream.make(1, 2);
49
+ const result = concatWithLastElement(stream1, () => Stream.fail('second-error'));
50
+ const outcome = await Effect.runPromise(Effect.either(runCollectReadonlyArray(result)));
51
+ expect(outcome._tag).toBe('Left');
52
+ if (outcome._tag === 'Left') {
53
+ expect(outcome.left).toBe('second-error');
54
+ }
55
+ });
56
+ it('should work with different types in streams', async () => {
57
+ const stream1 = Stream.make(1, 2, 3);
58
+ const result = concatWithLastElement(stream1, (lastElement) => lastElement.pipe(Option.match({
59
+ onNone: () => Stream.make('no-number'),
60
+ onSome: (last) => Stream.make(last * 10, last * 100),
61
+ })));
62
+ const collected = await Effect.runPromise(runCollectReadonlyArray(result));
63
+ expect(collected).toEqual([1, 2, 3, 30, 300]);
64
+ });
65
+ it('should handle async effects in streams', async () => {
66
+ const stream1 = Stream.fromEffect(Effect.succeed('async-value'));
67
+ const result = concatWithLastElement(stream1, (lastElement) => lastElement.pipe(Option.match({
68
+ onNone: () => Stream.fromEffect(Effect.succeed('no-async')),
69
+ onSome: (last) => Stream.fromEffect(Effect.succeed(`processed-${last}`)),
70
+ })));
71
+ const collected = await Effect.runPromise(runCollectReadonlyArray(result));
72
+ expect(collected).toEqual(['async-value', 'processed-async-value']);
73
+ });
74
+ it('should work with dual function - piped style', async () => {
75
+ const stream1 = Stream.make('a', 'b', 'c');
76
+ const result = stream1.pipe(concatWithLastElement((lastElement) => lastElement.pipe(Option.match({
77
+ onNone: () => Stream.make('no-last'),
78
+ onSome: (last) => Stream.make(`last-${last}`, 'done'),
79
+ }))));
80
+ const collected = await Effect.runPromise(runCollectReadonlyArray(result));
81
+ expect(collected).toEqual(['a', 'b', 'c', 'last-c', 'done']);
82
+ });
83
+ });
84
+ //# sourceMappingURL=Stream.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stream.test.js","sourceRoot":"","sources":["../../src/effect/Stream.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import type { SubscriptionRef } from 'effect';
2
- import { Effect } from 'effect';
1
+ import { Effect, Stream, SubscriptionRef } from 'effect';
3
2
  import type { Predicate, Refinement } from 'effect/Predicate';
4
3
  export * from 'effect/SubscriptionRef';
5
4
  export declare const waitUntil: {
@@ -8,4 +7,5 @@ export declare const waitUntil: {
8
7
  <A, B extends A>(sref: SubscriptionRef.SubscriptionRef<A>, refinement: Refinement<NoInfer<A>, B>): Effect.Effect<B, never, never>;
9
8
  <A, B extends A>(sref: SubscriptionRef.SubscriptionRef<A>, predicate: Predicate<B>): Effect.Effect<A, never, never>;
10
9
  };
10
+ export declare const fromStream: <A>(stream: Stream.Stream<A>, initialValue: A) => Effect.Effect<SubscriptionRef.SubscriptionRef<A>, never, import("effect/Scope").Scope>;
11
11
  //# sourceMappingURL=SubscriptionRef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionRef.d.ts","sourceRoot":"","sources":["../../src/effect/SubscriptionRef.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAS,MAAM,EAAgB,MAAM,QAAQ,CAAA;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7D,cAAc,wBAAwB,CAAA;AAEtC,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACb,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC,CAAC,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/E,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACb,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GACtB,CAAC,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/E,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACb,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EACxC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;CAGpH,CAAA"}
1
+ {"version":3,"file":"SubscriptionRef.d.ts","sourceRoot":"","sources":["../../src/effect/SubscriptionRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAQ,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7D,cAAc,wBAAwB,CAAA;AAEtC,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACb,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC,CAAC,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/E,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACb,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GACtB,CAAC,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC/E,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EACb,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EACxC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACpC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IACjC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;CAGpH,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,2FAWnE,CAAA"}
@@ -1,5 +1,10 @@
1
- import { Chunk, Effect, pipe, Stream } from 'effect';
1
+ import { Chunk, Effect, pipe, Stream, SubscriptionRef } from 'effect';
2
2
  import { dual } from 'effect/Function';
3
3
  export * from 'effect/SubscriptionRef';
4
4
  export const waitUntil = dual(2, (sref, predicate) => pipe(sref.changes, Stream.filter(predicate), Stream.take(1), Stream.runCollect, Effect.map(Chunk.unsafeHead)));
5
+ export const fromStream = (stream, initialValue) => Effect.gen(function* () {
6
+ const sref = yield* SubscriptionRef.make(initialValue);
7
+ yield* stream.pipe(Stream.tap((a) => SubscriptionRef.set(sref, a)), Stream.runDrain, Effect.forkScoped);
8
+ return sref;
9
+ });
5
10
  //# sourceMappingURL=SubscriptionRef.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubscriptionRef.js","sourceRoot":"","sources":["../../src/effect/SubscriptionRef.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,cAAc,wBAAwB,CAAA;AAEtC,MAAM,CAAC,MAAM,SAAS,GAYlB,IAAI,CAAC,CAAC,EAAE,CAAI,IAAwC,EAAE,SAA4B,EAAE,EAAE,CACxF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAC9G,CAAA"}
1
+ {"version":3,"file":"SubscriptionRef.js","sourceRoot":"","sources":["../../src/effect/SubscriptionRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAGtC,cAAc,wBAAwB,CAAA;AAEtC,MAAM,CAAC,MAAM,SAAS,GAYlB,IAAI,CAAC,CAAC,EAAE,CAAI,IAAwC,EAAE,SAA4B,EAAE,EAAE,CACxF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAC9G,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,MAAwB,EAAE,YAAe,EAAE,EAAE,CACzE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAEtD,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAC/C,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
@@ -5,25 +5,6 @@ import * as Schema from '../Schema/index.ts';
5
5
  import { type InputSchema, type WebChannel } from './common.ts';
6
6
  export declare const shutdown: <MsgListen, MsgSend>(webChannel: WebChannel<MsgListen, MsgSend>) => Effect.Effect<void>;
7
7
  export declare const noopChannel: <MsgListen, MsgSend>() => Effect.Effect<WebChannel<MsgListen, MsgSend>, never, Scope.Scope>;
8
- /** Only works in browser environments */
9
- export declare const broadcastChannel: <MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>({ channelName, schema: inputSchema, }: {
10
- channelName: string;
11
- schema: InputSchema<MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>;
12
- }) => Effect.Effect<WebChannel<MsgListen, MsgSend>, never, Scope.Scope>;
13
- /**
14
- * NOTE the `listenName` and `sendName` is needed for cases where both sides are using the same window
15
- * e.g. for a browser extension, so we need a way to know for which side a message is intended for.
16
- */
17
- export declare const windowChannel: <MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>({ listenWindow, sendWindow, targetOrigin, ids, schema: inputSchema, }: {
18
- listenWindow: Window;
19
- sendWindow: Window;
20
- targetOrigin?: string;
21
- ids: {
22
- own: string;
23
- other: string;
24
- };
25
- schema: InputSchema<MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>;
26
- }) => Effect.Effect<WebChannel<MsgListen, MsgSend>, never, Scope.Scope>;
27
8
  export declare const messagePortChannel: <MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>(args: {
28
9
  port: MessagePort;
29
10
  schema: InputSchema<MsgListen, MsgSend, MsgListenEncoded, MsgSendEncoded>;
@@ -65,7 +46,7 @@ export declare const queueChannelProxy: <MsgListen, MsgSend>({ schema: inputSche
65
46
  /**
66
47
  * Eagerly starts listening to a channel by buffering incoming messages in a queue.
67
48
  */
68
- export declare const toOpenChannel: (channel: WebChannel<any, any>, options?: {
49
+ export declare const toOpenChannel: <MsgListen, MsgSend>(channel: WebChannel<MsgListen, MsgSend>, options?: {
69
50
  /**
70
51
  * Sends a heartbeat message to the other end of the channel every `interval`.
71
52
  * If the other end doesn't respond within `timeout` milliseconds, the channel is shutdown.
@@ -74,6 +55,6 @@ export declare const toOpenChannel: (channel: WebChannel<any, any>, options?: {
74
55
  interval: DurationInput;
75
56
  timeout: DurationInput;
76
57
  };
77
- }) => Effect.Effect<WebChannel<any, any>, never, Scope.Scope>;
58
+ }) => Effect.Effect<WebChannel<MsgListen, MsgSend>, never, Scope.Scope>;
78
59
  export declare const sendDebugPing: (channel: WebChannel<any, any>) => Effect.Effect<void, import("effect/ParseResult").ParseError, never>;
79
60
  //# sourceMappingURL=WebChannel.d.ts.map