@effect/platform 0.58.26 → 0.59.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/cjs/Error.js +1 -25
- package/dist/cjs/Error.js.map +1 -1
- package/dist/cjs/HttpClientError.js +5 -6
- package/dist/cjs/HttpClientError.js.map +1 -1
- package/dist/cjs/HttpServerError.js +6 -5
- package/dist/cjs/HttpServerError.js.map +1 -1
- package/dist/cjs/Multipart.js.map +1 -1
- package/dist/cjs/Socket.js +11 -11
- package/dist/cjs/Socket.js.map +1 -1
- package/dist/cjs/Worker.js +10 -1
- package/dist/cjs/Worker.js.map +1 -1
- package/dist/cjs/WorkerError.js +13 -4
- package/dist/cjs/WorkerError.js.map +1 -1
- package/dist/cjs/WorkerRunner.js +6 -1
- package/dist/cjs/WorkerRunner.js.map +1 -1
- package/dist/cjs/internal/httpClient.js +7 -7
- package/dist/cjs/internal/httpClient.js.map +1 -1
- package/dist/cjs/internal/httpClientResponse.js +13 -13
- package/dist/cjs/internal/httpClientResponse.js.map +1 -1
- package/dist/cjs/internal/httpServerRequest.js +16 -16
- package/dist/cjs/internal/httpServerRequest.js.map +1 -1
- package/dist/cjs/internal/multipart.js +16 -16
- package/dist/cjs/internal/multipart.js.map +1 -1
- package/dist/cjs/internal/worker.js +126 -59
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/cjs/internal/workerRunner.js +43 -64
- package/dist/cjs/internal/workerRunner.js.map +1 -1
- package/dist/dts/Error.d.ts +0 -10
- package/dist/dts/Error.d.ts.map +1 -1
- package/dist/dts/HttpClientError.d.ts +6 -8
- package/dist/dts/HttpClientError.d.ts.map +1 -1
- package/dist/dts/HttpServerError.d.ts +10 -13
- package/dist/dts/HttpServerError.d.ts.map +1 -1
- package/dist/dts/Multipart.d.ts +3 -2
- package/dist/dts/Multipart.d.ts.map +1 -1
- package/dist/dts/Socket.d.ts +2 -4
- package/dist/dts/Socket.d.ts.map +1 -1
- package/dist/dts/Worker.d.ts +27 -27
- package/dist/dts/Worker.d.ts.map +1 -1
- package/dist/dts/WorkerError.d.ts +2 -2
- package/dist/dts/WorkerError.d.ts.map +1 -1
- package/dist/dts/WorkerRunner.d.ts +8 -5
- package/dist/dts/WorkerRunner.d.ts.map +1 -1
- package/dist/esm/Error.js +0 -23
- package/dist/esm/Error.js.map +1 -1
- package/dist/esm/HttpClientError.js +5 -6
- package/dist/esm/HttpClientError.js.map +1 -1
- package/dist/esm/HttpServerError.js +7 -6
- package/dist/esm/HttpServerError.js.map +1 -1
- package/dist/esm/Multipart.js.map +1 -1
- package/dist/esm/Socket.js +12 -12
- package/dist/esm/Socket.js.map +1 -1
- package/dist/esm/Worker.js +9 -0
- package/dist/esm/Worker.js.map +1 -1
- package/dist/esm/WorkerError.js +13 -4
- package/dist/esm/WorkerError.js.map +1 -1
- package/dist/esm/WorkerRunner.js +5 -0
- package/dist/esm/WorkerRunner.js.map +1 -1
- package/dist/esm/internal/httpClient.js +7 -7
- package/dist/esm/internal/httpClient.js.map +1 -1
- package/dist/esm/internal/httpClientResponse.js +13 -13
- package/dist/esm/internal/httpClientResponse.js.map +1 -1
- package/dist/esm/internal/httpServerRequest.js +16 -16
- package/dist/esm/internal/httpServerRequest.js.map +1 -1
- package/dist/esm/internal/multipart.js +17 -17
- package/dist/esm/internal/multipart.js.map +1 -1
- package/dist/esm/internal/worker.js +124 -57
- package/dist/esm/internal/worker.js.map +1 -1
- package/dist/esm/internal/workerRunner.js +42 -64
- package/dist/esm/internal/workerRunner.js.map +1 -1
- package/package.json +3 -3
- package/src/Error.ts +0 -38
- package/src/HttpClientError.ts +13 -6
- package/src/HttpServerError.ts +17 -6
- package/src/Multipart.ts +3 -2
- package/src/Socket.ts +10 -9
- package/src/Worker.ts +32 -29
- package/src/WorkerError.ts +15 -8
- package/src/WorkerRunner.ts +15 -8
- package/src/internal/httpClient.ts +7 -7
- package/src/internal/httpClientResponse.ts +13 -13
- package/src/internal/httpServerRequest.ts +15 -15
- package/src/internal/multipart.ts +16 -15
- package/src/internal/worker.ts +193 -146
- package/src/internal/workerRunner.ts +106 -136
|
@@ -5,14 +5,11 @@ import * as Chunk from "effect/Chunk"
|
|
|
5
5
|
import * as Context from "effect/Context"
|
|
6
6
|
import * as Effect from "effect/Effect"
|
|
7
7
|
import * as Either from "effect/Either"
|
|
8
|
-
import * as ExecutionStrategy from "effect/ExecutionStrategy"
|
|
9
|
-
import * as Exit from "effect/Exit"
|
|
10
8
|
import * as Fiber from "effect/Fiber"
|
|
11
|
-
import {
|
|
9
|
+
import { pipe } from "effect/Function"
|
|
12
10
|
import * as Layer from "effect/Layer"
|
|
13
|
-
import * as
|
|
14
|
-
import * as
|
|
15
|
-
import * as Scope from "effect/Scope"
|
|
11
|
+
import * as Schedule from "effect/Schedule"
|
|
12
|
+
import type * as Scope from "effect/Scope"
|
|
16
13
|
import * as Stream from "effect/Stream"
|
|
17
14
|
import * as Transferable from "../Transferable.js"
|
|
18
15
|
import type * as Worker from "../Worker.js"
|
|
@@ -30,146 +27,119 @@ export const PlatformRunner = Context.GenericTag<WorkerRunner.PlatformRunner>(
|
|
|
30
27
|
)
|
|
31
28
|
|
|
32
29
|
/** @internal */
|
|
33
|
-
export const
|
|
30
|
+
export const run = <I, E, R, O>(
|
|
34
31
|
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
35
32
|
options?: WorkerRunner.Runner.Options<I, O, E>
|
|
36
33
|
) =>
|
|
37
|
-
Effect.gen(function*(
|
|
38
|
-
const
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
Scope.close(scope, Exit.void),
|
|
42
|
-
Fiber.interruptFork(fiber)
|
|
43
|
-
)
|
|
44
|
-
const platform = yield* _(PlatformRunner)
|
|
45
|
-
const backing = yield* _(
|
|
46
|
-
platform.start<Worker.Worker.Request<I>, Worker.Worker.Response<E>>(shutdown),
|
|
47
|
-
Scope.extend(scope)
|
|
48
|
-
)
|
|
49
|
-
const fiberMap = new Map<number, Fiber.Fiber<void>>()
|
|
34
|
+
Effect.gen(function*() {
|
|
35
|
+
const platform = yield* PlatformRunner
|
|
36
|
+
const backing = yield* platform.start<Worker.Worker.Request<I>, Worker.Worker.Response<E>>()
|
|
37
|
+
const fiberMap = new Map<number, Fiber.Fiber<unknown, unknown>>()
|
|
50
38
|
|
|
51
|
-
yield*
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
return Effect.succeed(msg)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return Effect.map(options.decode!(req[2]), (data) => [msg[0], [req[0], req[1], data, req[3]]])
|
|
61
|
-
}) :
|
|
62
|
-
identity,
|
|
63
|
-
Effect.tap(([portId, req]) => {
|
|
64
|
-
const id = req[0]
|
|
65
|
-
if (req[1] === 1) {
|
|
66
|
-
const fiber = fiberMap.get(id)
|
|
67
|
-
if (!fiber) return Effect.void
|
|
68
|
-
return Fiber.interrupt(fiber)
|
|
69
|
-
}
|
|
39
|
+
return yield* backing.run((portId, [id, kind, data, span]): Effect.Effect<void, WorkerError, R> => {
|
|
40
|
+
if (kind === 1) {
|
|
41
|
+
const fiber = fiberMap.get(id)
|
|
42
|
+
if (!fiber) return Effect.void
|
|
43
|
+
return Fiber.interrupt(fiber)
|
|
44
|
+
}
|
|
70
45
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
? Effect.provideService(options.encodeOutput(req[2], data), Transferable.Collector, collector)
|
|
81
|
-
: Effect.succeed(data),
|
|
82
|
-
Effect.flatMap((payload) =>
|
|
83
|
-
backing.send(portId, [id, 0, [payload]], [
|
|
84
|
-
...transfers,
|
|
85
|
-
...collector.unsafeRead()
|
|
86
|
-
])
|
|
87
|
-
)
|
|
88
|
-
)
|
|
89
|
-
}) :
|
|
46
|
+
return Effect.withFiberRuntime<I, WorkerError>((fiber) => {
|
|
47
|
+
fiberMap.set(id, fiber)
|
|
48
|
+
return options?.decode ? options.decode(data) : Effect.succeed(data)
|
|
49
|
+
}).pipe(
|
|
50
|
+
Effect.flatMap((input) => {
|
|
51
|
+
const collector = Transferable.unsafeMakeCollector()
|
|
52
|
+
const stream = process(input)
|
|
53
|
+
let effect = Effect.isEffect(stream) ?
|
|
54
|
+
Effect.flatMap(stream, (out) =>
|
|
90
55
|
pipe(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
Effect.forEach(data, (data) => {
|
|
104
|
-
if (options?.transfers) {
|
|
105
|
-
for (const option of options.transfers(data)) {
|
|
106
|
-
transfers.push(option)
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
return Effect.orDie(options.encodeOutput!(req[2], data))
|
|
110
|
-
}),
|
|
111
|
-
Effect.provideService(Transferable.Collector, collector),
|
|
112
|
-
Effect.flatMap((payload) => {
|
|
113
|
-
collector.unsafeRead().forEach((transfer) => transfers.push(transfer))
|
|
114
|
-
return backing.send(portId, [id, 0, payload], transfers)
|
|
115
|
-
})
|
|
116
|
-
)
|
|
117
|
-
}),
|
|
118
|
-
Stream.runDrain,
|
|
119
|
-
Effect.andThen(backing.send(portId, [id, 1]))
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
if (req[3]) {
|
|
123
|
-
const [traceId, spanId, sampled] = req[3]
|
|
124
|
-
effect = Effect.withParentSpan(effect, {
|
|
125
|
-
_tag: "ExternalSpan",
|
|
126
|
-
traceId,
|
|
127
|
-
spanId,
|
|
128
|
-
sampled,
|
|
129
|
-
context: Context.empty()
|
|
130
|
-
})
|
|
131
|
-
}
|
|
56
|
+
options?.encodeOutput
|
|
57
|
+
? Effect.provideService(options.encodeOutput(input, out), Transferable.Collector, collector)
|
|
58
|
+
: Effect.succeed(out),
|
|
59
|
+
Effect.flatMap((payload) => backing.send(portId, [id, 0, [payload]], collector.unsafeRead()))
|
|
60
|
+
)) :
|
|
61
|
+
pipe(
|
|
62
|
+
stream,
|
|
63
|
+
Stream.runForEachChunk((chunk) => {
|
|
64
|
+
if (options?.encodeOutput === undefined) {
|
|
65
|
+
const payload = Chunk.toReadonlyArray(chunk)
|
|
66
|
+
return backing.send(portId, [id, 0, payload])
|
|
67
|
+
}
|
|
132
68
|
|
|
133
|
-
return effect
|
|
134
|
-
}),
|
|
135
|
-
Effect.catchIf(isWorkerError, (error) =>
|
|
136
|
-
backing.send(portId, [id, 3, WorkerError.encodeCause(Cause.fail(error))])),
|
|
137
|
-
Effect.catchAllCause((cause) =>
|
|
138
|
-
Either.match(Cause.failureOrCause(cause), {
|
|
139
|
-
onLeft: (error) => {
|
|
140
|
-
const transfers = options?.transfers ? options.transfers(error) : []
|
|
141
69
|
collector.unsafeClear()
|
|
142
70
|
return pipe(
|
|
143
|
-
options
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
Transferable.Collector,
|
|
147
|
-
collector
|
|
148
|
-
)
|
|
149
|
-
: Effect.succeed(error),
|
|
150
|
-
Effect.flatMap((payload) =>
|
|
151
|
-
backing.send(portId, [id, 2, payload as any], [
|
|
152
|
-
...transfers,
|
|
153
|
-
...collector.unsafeRead()
|
|
154
|
-
])
|
|
155
|
-
),
|
|
156
|
-
Effect.catchAllCause((cause) =>
|
|
157
|
-
backing.send(portId, [id, 3, WorkerError.encodeCause(cause)])
|
|
158
|
-
)
|
|
71
|
+
Effect.forEach(chunk, (data) => options.encodeOutput!(input, data)),
|
|
72
|
+
Effect.provideService(Transferable.Collector, collector),
|
|
73
|
+
Effect.flatMap((payload) => backing.send(portId, [id, 0, payload], collector.unsafeRead()))
|
|
159
74
|
)
|
|
160
|
-
},
|
|
161
|
-
|
|
75
|
+
}),
|
|
76
|
+
Effect.andThen(backing.send(portId, [id, 1]))
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
if (span) {
|
|
80
|
+
effect = Effect.withParentSpan(effect, {
|
|
81
|
+
_tag: "ExternalSpan",
|
|
82
|
+
traceId: span[0],
|
|
83
|
+
spanId: span[1],
|
|
84
|
+
sampled: span[2],
|
|
85
|
+
context: Context.empty()
|
|
162
86
|
})
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
Effect.
|
|
166
|
-
|
|
167
|
-
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return Effect.uninterruptibleMask((restore) =>
|
|
90
|
+
restore(effect).pipe(
|
|
91
|
+
Effect.catchIf(
|
|
92
|
+
isWorkerError,
|
|
93
|
+
(error) => backing.send(portId, [id, 3, WorkerError.encodeCause(Cause.fail(error))])
|
|
94
|
+
),
|
|
95
|
+
Effect.catchAllCause((cause) =>
|
|
96
|
+
Either.match(Cause.failureOrCause(cause), {
|
|
97
|
+
onLeft: (error) => {
|
|
98
|
+
collector.unsafeClear()
|
|
99
|
+
return pipe(
|
|
100
|
+
options?.encodeError
|
|
101
|
+
? Effect.provideService(
|
|
102
|
+
options.encodeError(input, error),
|
|
103
|
+
Transferable.Collector,
|
|
104
|
+
collector
|
|
105
|
+
)
|
|
106
|
+
: Effect.succeed(error),
|
|
107
|
+
Effect.flatMap((payload) =>
|
|
108
|
+
backing.send(portId, [id, 2, payload as any], collector.unsafeRead())
|
|
109
|
+
),
|
|
110
|
+
Effect.catchAllCause((cause) => backing.send(portId, [id, 3, WorkerError.encodeCause(cause)]))
|
|
111
|
+
)
|
|
112
|
+
},
|
|
113
|
+
onRight: (cause) => backing.send(portId, [id, 3, WorkerError.encodeCause(cause)])
|
|
114
|
+
})
|
|
115
|
+
)
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
}),
|
|
119
|
+
Effect.ensuring(Effect.sync(() => fiberMap.delete(id)))
|
|
120
|
+
)
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
/** @internal */
|
|
125
|
+
export const make = <I, E, R, O>(
|
|
126
|
+
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
127
|
+
options?: WorkerRunner.Runner.Options<I, O, E>
|
|
128
|
+
): Effect.Effect<void, WorkerError, WorkerRunner.PlatformRunner | R | Scope.Scope> =>
|
|
129
|
+
Effect.withFiberRuntime<void, never, WorkerRunner.PlatformRunner | R | Scope.Scope>((fiber) =>
|
|
130
|
+
run(process, options).pipe(
|
|
131
|
+
Effect.tapErrorCause(Effect.logDebug),
|
|
132
|
+
Effect.retry(Schedule.spaced(1000)),
|
|
133
|
+
Effect.annotateLogs({
|
|
134
|
+
package: "@effect/platform-node",
|
|
135
|
+
module: "WorkerRunner"
|
|
168
136
|
}),
|
|
169
|
-
Effect.
|
|
170
|
-
Effect.
|
|
137
|
+
Effect.ensuring(Fiber.interruptAsFork(fiber, fiber.id())),
|
|
138
|
+
Effect.interruptible,
|
|
139
|
+
Effect.forkScoped,
|
|
140
|
+
Effect.asVoid
|
|
171
141
|
)
|
|
172
|
-
|
|
142
|
+
)
|
|
173
143
|
|
|
174
144
|
/** @internal */
|
|
175
145
|
export const layer = <I, E, R, O>(
|
|
@@ -214,19 +184,19 @@ export const makeSerialized = <
|
|
|
214
184
|
decode(message) {
|
|
215
185
|
return Effect.mapError(
|
|
216
186
|
parseRequest(message),
|
|
217
|
-
(
|
|
187
|
+
(cause) => new WorkerError({ reason: "decode", cause })
|
|
218
188
|
)
|
|
219
189
|
},
|
|
220
190
|
encodeError(request, message) {
|
|
221
191
|
return Effect.mapError(
|
|
222
192
|
Serializable.serializeFailure(request as any, message),
|
|
223
|
-
(
|
|
193
|
+
(cause) => new WorkerError({ reason: "encode", cause })
|
|
224
194
|
)
|
|
225
195
|
},
|
|
226
196
|
encodeOutput(request, message) {
|
|
227
197
|
return Effect.catchAllCause(
|
|
228
198
|
Serializable.serializeSuccess(request as any, message),
|
|
229
|
-
(
|
|
199
|
+
(cause) => new WorkerError({ reason: "encode", cause })
|
|
230
200
|
)
|
|
231
201
|
}
|
|
232
202
|
}))
|