@effect/platform 0.40.1 → 0.40.2
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/Transferable.js.map +1 -1
- package/dist/cjs/Worker.js.map +1 -1
- package/dist/cjs/internal/worker.js +8 -5
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/cjs/internal/workerRunner.js +12 -2
- package/dist/cjs/internal/workerRunner.js.map +1 -1
- package/dist/dts/HttpClient.d.ts +7 -7
- package/dist/dts/HttpServer.d.ts +10 -10
- package/dist/dts/Transferable.d.ts +3 -3
- package/dist/dts/Transferable.d.ts.map +1 -1
- package/dist/dts/Worker.d.ts +10 -3
- package/dist/dts/Worker.d.ts.map +1 -1
- package/dist/esm/HttpClient.js +7 -7
- package/dist/esm/HttpServer.js +10 -10
- package/dist/esm/Transferable.js.map +1 -1
- package/dist/esm/Worker.js.map +1 -1
- package/dist/esm/internal/worker.js +8 -5
- package/dist/esm/internal/worker.js.map +1 -1
- package/dist/esm/internal/workerRunner.js +12 -2
- package/dist/esm/internal/workerRunner.js.map +1 -1
- package/package.json +3 -3
- package/src/HttpClient.ts +7 -7
- package/src/HttpServer.ts +10 -10
- package/src/Transferable.ts +6 -11
- package/src/Worker.ts +13 -3
- package/src/internal/worker.ts +18 -8
- package/src/internal/workerRunner.ts +13 -2
package/src/internal/worker.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as Schema from "@effect/schema/Schema"
|
|
2
2
|
import * as Serializable from "@effect/schema/Serializable"
|
|
3
|
+
import { Tracer } from "effect"
|
|
3
4
|
import * as Cause from "effect/Cause"
|
|
4
5
|
import * as Channel from "effect/Channel"
|
|
5
6
|
import * as Chunk from "effect/Chunk"
|
|
@@ -10,6 +11,7 @@ import * as Exit from "effect/Exit"
|
|
|
10
11
|
import * as Fiber from "effect/Fiber"
|
|
11
12
|
import { identity, pipe } from "effect/Function"
|
|
12
13
|
import * as Layer from "effect/Layer"
|
|
14
|
+
import * as Option from "effect/Option"
|
|
13
15
|
import * as Pool from "effect/Pool"
|
|
14
16
|
import * as Queue from "effect/Queue"
|
|
15
17
|
import * as ReadonlyArray from "effect/ReadonlyArray"
|
|
@@ -23,9 +25,9 @@ import { WorkerError } from "../WorkerError.js"
|
|
|
23
25
|
/** @internal */
|
|
24
26
|
export const defaultQueue = <I>() =>
|
|
25
27
|
Effect.map(
|
|
26
|
-
Queue.unbounded<readonly [id: number, item: I]>(),
|
|
28
|
+
Queue.unbounded<readonly [id: number, item: I, span: Option.Option<Tracer.Span>]>(),
|
|
27
29
|
(queue): Worker.WorkerQueue<I> => ({
|
|
28
|
-
offer: (id, item) => Queue.offer(queue, [id, item]),
|
|
30
|
+
offer: (id, item, span) => Queue.offer(queue, [id, item, span]),
|
|
29
31
|
take: Queue.take(queue),
|
|
30
32
|
shutdown: Queue.shutdown(queue)
|
|
31
33
|
})
|
|
@@ -170,12 +172,16 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
170
172
|
Effect.all([
|
|
171
173
|
Effect.sync(() => requestIdCounter++),
|
|
172
174
|
Queue.unbounded<Exit.Exit<E | WorkerError, ReadonlyArray<O>>>(),
|
|
173
|
-
Deferred.make<never, void>()
|
|
175
|
+
Deferred.make<never, void>(),
|
|
176
|
+
Effect.map(
|
|
177
|
+
Effect.serviceOption(Tracer.ParentSpan),
|
|
178
|
+
Option.filter((span): span is Tracer.Span => span._tag === "Span")
|
|
179
|
+
)
|
|
174
180
|
]),
|
|
175
|
-
([id, queue, deferred]) =>
|
|
181
|
+
([id, queue, deferred, span]) =>
|
|
176
182
|
Effect.suspend(() => {
|
|
177
183
|
requestMap.set(id, [queue, deferred])
|
|
178
|
-
return outbound.offer(id, request)
|
|
184
|
+
return outbound.offer(id, request, span)
|
|
179
185
|
})
|
|
180
186
|
)
|
|
181
187
|
|
|
@@ -183,7 +189,8 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
183
189
|
[id, , deferred]: [
|
|
184
190
|
number,
|
|
185
191
|
Queue.Queue<Exit.Exit<E | WorkerError, ReadonlyArray<O>>>,
|
|
186
|
-
Deferred.Deferred<never, void
|
|
192
|
+
Deferred.Deferred<never, void>,
|
|
193
|
+
Option.Option<Tracer.Span>
|
|
187
194
|
],
|
|
188
195
|
exit: Exit.Exit<unknown, unknown>
|
|
189
196
|
) => {
|
|
@@ -225,16 +232,19 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
225
232
|
yield* _(
|
|
226
233
|
semaphore.take(1),
|
|
227
234
|
Effect.zipRight(outbound.take),
|
|
228
|
-
Effect.flatMap(([id, request]) =>
|
|
235
|
+
Effect.flatMap(([id, request, span]) =>
|
|
229
236
|
pipe(
|
|
230
237
|
Effect.suspend(() => {
|
|
231
238
|
const result = requestMap.get(id)
|
|
232
239
|
if (!result) return Effect.unit
|
|
233
240
|
const transferables = transfers(request)
|
|
241
|
+
const spanTuple = Option.getOrUndefined(
|
|
242
|
+
Option.map(span, (span) => [span.traceId, span.spanId, span.sampled] as const)
|
|
243
|
+
)
|
|
234
244
|
return pipe(
|
|
235
245
|
Effect.flatMap(
|
|
236
246
|
encode ? encode(request) : Effect.succeed(request),
|
|
237
|
-
(payload) => sendQueue.offer([[id, 0, payload], transferables])
|
|
247
|
+
(payload) => sendQueue.offer([[id, 0, payload, spanTuple], transferables])
|
|
238
248
|
),
|
|
239
249
|
Effect.catchAllCause((cause) => Queue.offer(result[0], Exit.failCause(cause))),
|
|
240
250
|
Effect.zipRight(Deferred.await(result[1]))
|
|
@@ -44,7 +44,7 @@ export const make = <I, R, E, O>(
|
|
|
44
44
|
return Effect.succeed(req)
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
return Effect.map(options.decode!(req[2]), (data) => [req[0], req[1], data])
|
|
47
|
+
return Effect.map(options.decode!(req[2]), (data) => [req[0], req[1], data, req[3]])
|
|
48
48
|
}) :
|
|
49
49
|
identity,
|
|
50
50
|
Effect.tap((req) => {
|
|
@@ -57,7 +57,7 @@ export const make = <I, R, E, O>(
|
|
|
57
57
|
|
|
58
58
|
const stream = process(req[2])
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
let effect = Effect.isEffect(stream) ?
|
|
61
61
|
Effect.matchCauseEffect(stream, {
|
|
62
62
|
onFailure: (cause) =>
|
|
63
63
|
Either.match(Cause.failureOrCause(cause), {
|
|
@@ -119,6 +119,17 @@ export const make = <I, R, E, O>(
|
|
|
119
119
|
})
|
|
120
120
|
)
|
|
121
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
|
+
}
|
|
132
|
+
|
|
122
133
|
return pipe(
|
|
123
134
|
effect,
|
|
124
135
|
Effect.ensuring(Effect.sync(() => fiberMap.delete(id))),
|