@livestore/utils 0.0.55-dev.1 → 0.0.55-dev.3
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.json +1 -1
- package/dist/effect/BrowserChannel.d.ts +25 -0
- package/dist/effect/BrowserChannel.d.ts.map +1 -0
- package/dist/effect/BrowserChannel.js +32 -0
- package/dist/effect/BrowserChannel.js.map +1 -0
- package/dist/effect/Effect.d.ts +3 -1
- package/dist/effect/Effect.d.ts.map +1 -1
- package/dist/effect/Effect.js +2 -0
- package/dist/effect/Effect.js.map +1 -1
- package/dist/effect/Stream.d.ts +1 -0
- package/dist/effect/Stream.d.ts.map +1 -1
- package/dist/effect/Stream.js +1 -0
- package/dist/effect/Stream.js.map +1 -1
- package/dist/effect/SubscriptionRef.d.ts +2 -2
- 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/index.d.ts +3 -6
- package/dist/effect/index.d.ts.map +1 -1
- package/dist/effect/index.js +3 -8
- package/dist/effect/index.js.map +1 -1
- package/package.json +14 -14
- package/src/effect/BrowserChannel.ts +90 -0
- package/src/effect/Effect.ts +9 -1
- package/src/effect/Stream.ts +5 -0
- package/src/effect/SubscriptionRef.ts +3 -11
- package/src/effect/index.ts +4 -8
- package/dist/effect/Schema.d.ts +0 -4
- package/dist/effect/Schema.d.ts.map +0 -1
- package/dist/effect/Schema.js +0 -15
- package/dist/effect/Schema.js.map +0 -1
- package/src/effect/browser-worker-tmp/BrowserWorker.ts +0 -26
- package/src/effect/browser-worker-tmp/BrowserWorkerRunner.ts +0 -14
- package/src/effect/browser-worker-tmp/internal/worker.ts +0 -71
- package/src/effect/browser-worker-tmp/internal/workerRunner.ts +0 -119
- package/src/effect/browser-worker-tmp/port-platform-runner.ts +0 -74
- package/src/effect/worker-tmp/Worker.ts +0 -374
- package/src/effect/worker-tmp/WorkerError.ts +0 -79
- package/src/effect/worker-tmp/WorkerRunner.ts +0 -181
- package/src/effect/worker-tmp/internal/worker.ts +0 -417
- package/src/effect/worker-tmp/internal/workerError.ts +0 -6
- package/src/effect/worker-tmp/internal/workerRunner.ts +0 -237
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
/* eslint-disable prefer-arrow/prefer-arrow-functions */
|
|
2
|
-
import { Transferable } from '@effect/platform'
|
|
3
|
-
import * as Schema from '@effect/schema/Schema'
|
|
4
|
-
import * as Serializable from '@effect/schema/Serializable'
|
|
5
|
-
import * as Cause from 'effect/Cause'
|
|
6
|
-
import * as Chunk from 'effect/Chunk'
|
|
7
|
-
import * as Context from 'effect/Context'
|
|
8
|
-
import * as Effect from 'effect/Effect'
|
|
9
|
-
import * as Either from 'effect/Either'
|
|
10
|
-
import * as ExecutionStrategy from 'effect/ExecutionStrategy'
|
|
11
|
-
import * as Exit from 'effect/Exit'
|
|
12
|
-
import * as Fiber from 'effect/Fiber'
|
|
13
|
-
import { identity, pipe } from 'effect/Function'
|
|
14
|
-
import * as Layer from 'effect/Layer'
|
|
15
|
-
import * as Option from 'effect/Option'
|
|
16
|
-
import * as Queue from 'effect/Queue'
|
|
17
|
-
import * as Scope from 'effect/Scope'
|
|
18
|
-
import * as Stream from 'effect/Stream'
|
|
19
|
-
|
|
20
|
-
import type * as Worker from '../Worker.js'
|
|
21
|
-
import { isWorkerError, WorkerError } from '../WorkerError.js'
|
|
22
|
-
import type * as WorkerRunner from '../WorkerRunner.js'
|
|
23
|
-
|
|
24
|
-
/** @internal */
|
|
25
|
-
export const PlatformRunnerTypeId: WorkerRunner.PlatformRunnerTypeId = Symbol.for(
|
|
26
|
-
'@effect/platform/Runner/PlatformRunner',
|
|
27
|
-
) as WorkerRunner.PlatformRunnerTypeId
|
|
28
|
-
|
|
29
|
-
/** @internal */
|
|
30
|
-
export const PlatformRunner = Context.GenericTag<WorkerRunner.PlatformRunner>('@effect/platform/Runner/PlatformRunner')
|
|
31
|
-
|
|
32
|
-
/** @internal */
|
|
33
|
-
export const make = <I, E, R, O>(
|
|
34
|
-
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
35
|
-
options?: WorkerRunner.Runner.Options<I, O, E>,
|
|
36
|
-
) =>
|
|
37
|
-
Effect.gen(function* (_) {
|
|
38
|
-
const scope = yield* _(Scope.fork(yield* _(Effect.scope), ExecutionStrategy.parallel))
|
|
39
|
-
const fiber = Option.getOrThrow(Fiber.getCurrentFiber())
|
|
40
|
-
const shutdown = Effect.zipRight(Scope.close(scope, Exit.void), Fiber.interruptFork(fiber))
|
|
41
|
-
const platform = yield* _(PlatformRunner)
|
|
42
|
-
const backing = yield* _(
|
|
43
|
-
platform.start<Worker.Worker.Request<I>, Worker.Worker.Response<E>>(shutdown),
|
|
44
|
-
Scope.extend(scope),
|
|
45
|
-
)
|
|
46
|
-
const fiberMap = new Map<number, Fiber.Fiber<void, unknown>>()
|
|
47
|
-
|
|
48
|
-
yield* _(
|
|
49
|
-
Queue.take(backing.queue),
|
|
50
|
-
options?.decode
|
|
51
|
-
? Effect.flatMap((msg): Effect.Effect<readonly [portId: number, Worker.Worker.Request<I>], WorkerError> => {
|
|
52
|
-
const req = msg[1]
|
|
53
|
-
if (req[1] === 1) {
|
|
54
|
-
return Effect.succeed(msg)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return Effect.map(options.decode!(req[2]), (data) => [msg[0], [req[0], req[1], data, req[3]]])
|
|
58
|
-
})
|
|
59
|
-
: identity,
|
|
60
|
-
Effect.tap(([portId, req]) => {
|
|
61
|
-
const id = req[0]
|
|
62
|
-
if (req[1] === 1) {
|
|
63
|
-
const fiber = fiberMap.get(id)
|
|
64
|
-
if (!fiber) return Effect.void
|
|
65
|
-
return Fiber.interrupt(fiber)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const collector = Transferable.unsafeMakeCollector()
|
|
69
|
-
return pipe(
|
|
70
|
-
Effect.sync(() => process(req[2])),
|
|
71
|
-
Effect.flatMap((stream) => {
|
|
72
|
-
let effect = Effect.isEffect(stream)
|
|
73
|
-
? Effect.flatMap(stream, (data) => {
|
|
74
|
-
const transfers = options?.transfers ? options.transfers(data) : []
|
|
75
|
-
return pipe(
|
|
76
|
-
options?.encodeOutput
|
|
77
|
-
? Effect.provideService(options.encodeOutput(req[2], data), Transferable.Collector, collector)
|
|
78
|
-
: Effect.succeed(data),
|
|
79
|
-
Effect.flatMap((payload) =>
|
|
80
|
-
backing.send(portId, [id, 0, [payload]], [...transfers, ...collector.unsafeRead()]),
|
|
81
|
-
),
|
|
82
|
-
)
|
|
83
|
-
})
|
|
84
|
-
: pipe(
|
|
85
|
-
stream,
|
|
86
|
-
Stream.chunks,
|
|
87
|
-
Stream.tap((data) => {
|
|
88
|
-
if (options?.encodeOutput === undefined) {
|
|
89
|
-
const payload = Chunk.toReadonlyArray(data)
|
|
90
|
-
const transfers = options?.transfers ? payload.flatMap(options.transfers) : undefined
|
|
91
|
-
return backing.send(portId, [id, 0, payload], transfers)
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
const transfers: unknown[] = []
|
|
95
|
-
collector.unsafeClear()
|
|
96
|
-
return pipe(
|
|
97
|
-
Effect.forEach(data, (data) => {
|
|
98
|
-
if (options?.transfers) {
|
|
99
|
-
for (const option of options.transfers(data)) {
|
|
100
|
-
transfers.push(option)
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return Effect.orDie(options.encodeOutput!(req[2], data))
|
|
104
|
-
}),
|
|
105
|
-
Effect.provideService(Transferable.Collector, collector),
|
|
106
|
-
Effect.flatMap((payload) => {
|
|
107
|
-
collector.unsafeRead().forEach((transfer) => transfers.push(transfer))
|
|
108
|
-
return backing.send(portId, [id, 0, payload], transfers)
|
|
109
|
-
}),
|
|
110
|
-
)
|
|
111
|
-
}),
|
|
112
|
-
Stream.runDrain,
|
|
113
|
-
Effect.andThen(backing.send(portId, [id, 1])),
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
if (req[3]) {
|
|
117
|
-
const [traceId, spanId, sampled] = req[3]
|
|
118
|
-
effect = Effect.withParentSpan(effect, {
|
|
119
|
-
_tag: 'ExternalSpan',
|
|
120
|
-
traceId,
|
|
121
|
-
spanId,
|
|
122
|
-
sampled,
|
|
123
|
-
context: Context.empty(),
|
|
124
|
-
})
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return effect
|
|
128
|
-
}),
|
|
129
|
-
Effect.catchIf(isWorkerError, (error) =>
|
|
130
|
-
backing.send(portId, [id, 3, WorkerError.encodeCause(Cause.fail(error))]),
|
|
131
|
-
),
|
|
132
|
-
Effect.onExit((exit) => {
|
|
133
|
-
if (exit._tag === 'Success') {
|
|
134
|
-
return Effect.void
|
|
135
|
-
}
|
|
136
|
-
return Either.match(Cause.failureOrCause(exit.cause), {
|
|
137
|
-
onLeft: (error) => {
|
|
138
|
-
const transfers = options?.transfers ? options.transfers(error) : []
|
|
139
|
-
collector.unsafeClear()
|
|
140
|
-
return pipe(
|
|
141
|
-
options?.encodeError
|
|
142
|
-
? Effect.provideService(options.encodeError(req[2], error), Transferable.Collector, collector)
|
|
143
|
-
: Effect.succeed(error),
|
|
144
|
-
Effect.flatMap((payload) =>
|
|
145
|
-
backing.send(portId, [id, 2, payload as any], [...transfers, ...collector.unsafeRead()]),
|
|
146
|
-
),
|
|
147
|
-
Effect.catchAllCause((cause) => backing.send(portId, [id, 3, WorkerError.encodeCause(cause)])),
|
|
148
|
-
)
|
|
149
|
-
},
|
|
150
|
-
onRight: (cause) => backing.send(portId, [id, 3, WorkerError.encodeCause(cause)]),
|
|
151
|
-
})
|
|
152
|
-
}),
|
|
153
|
-
Effect.ensuring(Effect.sync(() => fiberMap.delete(id))),
|
|
154
|
-
Effect.fork,
|
|
155
|
-
Effect.tap((fiber) => Effect.sync(() => fiberMap.set(id, fiber))),
|
|
156
|
-
)
|
|
157
|
-
}),
|
|
158
|
-
Effect.forever,
|
|
159
|
-
Effect.forkIn(scope),
|
|
160
|
-
)
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
/** @internal */
|
|
164
|
-
export const layer = <I, E, R, O>(
|
|
165
|
-
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
166
|
-
options?: WorkerRunner.Runner.Options<I, O, E>,
|
|
167
|
-
): Layer.Layer<never, WorkerError, WorkerRunner.PlatformRunner | R> => Layer.scopedDiscard(make(process, options))
|
|
168
|
-
|
|
169
|
-
/** @internal */
|
|
170
|
-
export const makeSerialized = <
|
|
171
|
-
R,
|
|
172
|
-
I,
|
|
173
|
-
A extends Schema.TaggedRequest.All,
|
|
174
|
-
const Handlers extends WorkerRunner.SerializedRunner.Handlers<A>,
|
|
175
|
-
>(
|
|
176
|
-
schema: Schema.Schema<A, I, R>,
|
|
177
|
-
handlers: Handlers,
|
|
178
|
-
): Effect.Effect<
|
|
179
|
-
void,
|
|
180
|
-
WorkerError,
|
|
181
|
-
R | WorkerRunner.PlatformRunner | Scope.Scope | WorkerRunner.SerializedRunner.HandlersContext<Handlers>
|
|
182
|
-
> =>
|
|
183
|
-
Effect.gen(function* (_) {
|
|
184
|
-
const scope = yield* _(Effect.scope)
|
|
185
|
-
let context = Context.empty() as Context.Context<any>
|
|
186
|
-
const parseRequest = Schema.decodeUnknown(schema) as (_: unknown) => Effect.Effect<A>
|
|
187
|
-
|
|
188
|
-
return yield* _(
|
|
189
|
-
make(
|
|
190
|
-
(request: A) => {
|
|
191
|
-
const result = (handlers as any)[request._tag](request)
|
|
192
|
-
if (Layer.isLayer(result)) {
|
|
193
|
-
return Effect.flatMap(Layer.buildWithScope(result, scope), (_) =>
|
|
194
|
-
Effect.sync(() => {
|
|
195
|
-
context = Context.merge(context, _)
|
|
196
|
-
}),
|
|
197
|
-
)
|
|
198
|
-
} else if (Effect.isEffect(result)) {
|
|
199
|
-
return Effect.provide(result, context)
|
|
200
|
-
}
|
|
201
|
-
return Stream.provideContext(result as any, context)
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
decode(message) {
|
|
205
|
-
return Effect.mapError(parseRequest(message), (error) => new WorkerError({ reason: 'decode', error }))
|
|
206
|
-
},
|
|
207
|
-
encodeError(request, message) {
|
|
208
|
-
return Effect.mapError(
|
|
209
|
-
Serializable.serializeFailure(request as any, message),
|
|
210
|
-
(error) => new WorkerError({ reason: 'encode', error }),
|
|
211
|
-
)
|
|
212
|
-
},
|
|
213
|
-
encodeOutput(request, message) {
|
|
214
|
-
return Effect.catchAllCause(
|
|
215
|
-
Serializable.serializeSuccess(request as any, message),
|
|
216
|
-
(error) => new WorkerError({ reason: 'encode', error }),
|
|
217
|
-
)
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
),
|
|
221
|
-
)
|
|
222
|
-
}) as any
|
|
223
|
-
|
|
224
|
-
/** @internal */
|
|
225
|
-
export const layerSerialized = <
|
|
226
|
-
R,
|
|
227
|
-
I,
|
|
228
|
-
A extends Schema.TaggedRequest.All,
|
|
229
|
-
const Handlers extends WorkerRunner.SerializedRunner.Handlers<A>,
|
|
230
|
-
>(
|
|
231
|
-
schema: Schema.Schema<A, I, R>,
|
|
232
|
-
handlers: Handlers,
|
|
233
|
-
): Layer.Layer<
|
|
234
|
-
never,
|
|
235
|
-
WorkerError,
|
|
236
|
-
R | WorkerRunner.PlatformRunner | WorkerRunner.SerializedRunner.HandlersContext<Handlers>
|
|
237
|
-
> => Layer.scopedDiscard(makeSerialized(schema, handlers))
|