@effect/platform 0.22.0 → 0.23.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/Worker/dist/effect-platform-Worker.cjs.d.mts +2 -0
- package/Worker/dist/effect-platform-Worker.cjs.d.mts.map +1 -0
- package/Worker/dist/effect-platform-Worker.cjs.d.ts +2 -0
- package/Worker/dist/effect-platform-Worker.cjs.d.ts.map +1 -0
- package/Worker/dist/effect-platform-Worker.cjs.dev.js +291 -0
- package/Worker/dist/effect-platform-Worker.cjs.js +7 -0
- package/Worker/dist/effect-platform-Worker.cjs.mjs +10 -0
- package/Worker/dist/effect-platform-Worker.cjs.prod.js +291 -0
- package/Worker/dist/effect-platform-Worker.esm.js +252 -0
- package/Worker/package.json +4 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts +2 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts.map +1 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts +2 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts.map +1 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.dev.js +65 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.js +7 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.mjs +4 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.prod.js +65 -0
- package/WorkerError/dist/effect-platform-WorkerError.esm.js +40 -0
- package/WorkerError/package.json +4 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts +2 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts.map +1 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts +2 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts.map +1 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.dev.js +129 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.js +7 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.mjs +5 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.prod.js +129 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.esm.js +97 -0
- package/WorkerRunner/package.json +4 -0
- package/dist/declarations/src/Worker.d.ts +170 -0
- package/dist/declarations/src/Worker.d.ts.map +1 -0
- package/dist/declarations/src/WorkerError.d.ts +30 -0
- package/dist/declarations/src/WorkerError.d.ts.map +1 -0
- package/dist/declarations/src/WorkerRunner.d.ts +72 -0
- package/dist/declarations/src/WorkerRunner.d.ts.map +1 -0
- package/dist/declarations/src/index.d.ts +12 -0
- package/dist/declarations/src/index.d.ts.map +1 -1
- package/dist/effect-platform.cjs.dev.js +9 -0
- package/dist/effect-platform.cjs.mjs +4 -1
- package/dist/effect-platform.cjs.prod.js +9 -0
- package/dist/effect-platform.esm.js +6 -0
- package/package.json +27 -6
- package/src/Worker.ts +207 -0
- package/src/WorkerError.ts +34 -0
- package/src/WorkerRunner.ts +83 -0
- package/src/index.ts +15 -0
- package/src/internal/worker.ts +262 -0
- package/src/internal/workerError.ts +16 -0
- package/src/internal/workerRunner.ts +83 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as Cause from "effect/Cause"
|
|
2
|
+
import * as Context from "effect/Context"
|
|
3
|
+
import * as Effect from "effect/Effect"
|
|
4
|
+
import * as Either from "effect/Either"
|
|
5
|
+
import * as Fiber from "effect/Fiber"
|
|
6
|
+
import { pipe } from "effect/Function"
|
|
7
|
+
import * as Queue from "effect/Queue"
|
|
8
|
+
import * as Stream from "effect/Stream"
|
|
9
|
+
import type * as Worker from "../Worker"
|
|
10
|
+
import type * as WorkerRunner from "../WorkerRunner"
|
|
11
|
+
|
|
12
|
+
/** @internal */
|
|
13
|
+
export const PlatformRunnerTypeId: WorkerRunner.PlatformRunnerTypeId = Symbol.for(
|
|
14
|
+
"@effect/platform/Runner/PlatformRunner"
|
|
15
|
+
) as WorkerRunner.PlatformRunnerTypeId
|
|
16
|
+
|
|
17
|
+
/** @internal */
|
|
18
|
+
export const PlatformRunner = Context.Tag<WorkerRunner.PlatformRunner>(
|
|
19
|
+
PlatformRunnerTypeId
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
/** @internal */
|
|
23
|
+
export const make = <I, R, E, O>(
|
|
24
|
+
process: (request: I) => Stream.Stream<R, E, O> | Effect.Effect<R, E, O>,
|
|
25
|
+
options?: WorkerRunner.Runner.Options<O>
|
|
26
|
+
) =>
|
|
27
|
+
Effect.gen(function*(_) {
|
|
28
|
+
const platform = yield* _(PlatformRunner)
|
|
29
|
+
const backing = yield* _(platform.start<Worker.Worker.Request<I>, Worker.Worker.Response<E, O>>())
|
|
30
|
+
const fiberMap = new Map<number, Fiber.Fiber<never, void>>()
|
|
31
|
+
|
|
32
|
+
const handleRequests = pipe(
|
|
33
|
+
Queue.take(backing.queue),
|
|
34
|
+
Effect.tap((req) => {
|
|
35
|
+
const id = req[0]
|
|
36
|
+
if (req[1] === 1) {
|
|
37
|
+
const fiber = fiberMap.get(id)
|
|
38
|
+
if (!fiber) return Effect.unit
|
|
39
|
+
return Fiber.interrupt(fiber)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const stream = process(req[2])
|
|
43
|
+
|
|
44
|
+
const effect = Effect.isEffect(stream) ?
|
|
45
|
+
Effect.matchCauseEffect(stream, {
|
|
46
|
+
onFailure: (cause) =>
|
|
47
|
+
Either.match(Cause.failureOrCause(cause), {
|
|
48
|
+
onLeft: (error) => backing.send([id, 2, error]),
|
|
49
|
+
onRight: (cause) => backing.send([id, 3, Cause.squash(cause)])
|
|
50
|
+
}),
|
|
51
|
+
onSuccess: (data) => backing.send([id, 1, data])
|
|
52
|
+
}) :
|
|
53
|
+
pipe(
|
|
54
|
+
stream,
|
|
55
|
+
Stream.tap((item) => backing.send([id, 0, item], options?.transfers ? options.transfers(item) : undefined)),
|
|
56
|
+
Stream.runDrain,
|
|
57
|
+
Effect.matchCauseEffect({
|
|
58
|
+
onFailure: (cause) =>
|
|
59
|
+
Either.match(Cause.failureOrCause(cause), {
|
|
60
|
+
onLeft: (error) => backing.send([id, 2, error]),
|
|
61
|
+
onRight: (cause) => backing.send([id, 3, Cause.squash(cause)])
|
|
62
|
+
}),
|
|
63
|
+
onSuccess: () => backing.send([id, 1])
|
|
64
|
+
})
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
return pipe(
|
|
68
|
+
effect,
|
|
69
|
+
Effect.ensuring(Effect.sync(() => fiberMap.delete(id))),
|
|
70
|
+
Effect.fork,
|
|
71
|
+
Effect.tap((fiber) => Effect.sync(() => fiberMap.set(id, fiber)))
|
|
72
|
+
)
|
|
73
|
+
}),
|
|
74
|
+
Effect.forever
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
return yield* _(
|
|
78
|
+
Effect.all([
|
|
79
|
+
handleRequests,
|
|
80
|
+
Fiber.join(backing.fiber)
|
|
81
|
+
], { concurrency: "unbounded", discard: true })
|
|
82
|
+
)
|
|
83
|
+
})
|