44import * as Cause from "../../Cause.ts"
55import * as Deferred from "../../Deferred.ts"
66import * as Effect from "../../Effect.ts"
7+ import * as Fiber from "../../Fiber.ts"
78import * as Layer from "../../Layer.ts"
89import * as Metric from "../../Metric.ts"
910import * as Queue from "../../Queue.ts"
@@ -23,9 +24,14 @@ const ResponseSchema = Schema.toCodecJson(DevToolsSchema.Response)
2324 * @since 4.0.0
2425 * @category tags
2526 */
26- export class DevToolsClient extends ServiceMap.Service<DevToolsClient, {
27- readonly sendUnsafe: (_: DevToolsSchema.Span | DevToolsSchema.SpanEvent) => void
28- }>()("effect/devtools/DevToolsClient") {}
27+ export class DevToolsClient extends ServiceMap.Service<
28+ DevToolsClient,
29+ {
30+ readonly sendUnsafe: (
31+ _: DevToolsSchema.Span | DevToolsSchema.SpanEvent
32+ ) => void
33+ }
34+ >()("effect/devtools/DevToolsClient") {}
2935
3036const makeEffect = Effect.gen(function*() {
3137 const socket = yield* Socket.Socket
@@ -37,7 +43,9 @@ const makeEffect = Effect.gen(function*() {
3743 Queue.offerUnsafe(requests, toMetricsSnapshot(services))
3844 })
3945
40- const handleResponse = (response: DevToolsSchema.Response): Effect.Effect<void> => {
46+ const handleResponse = (
47+ response: DevToolsSchema.Response
48+ ): Effect.Effect<void> => {
4149 switch (response._tag) {
4250 case "MetricsRequest": {
4351 return offerMetricsSnapshot
@@ -48,7 +56,7 @@ const makeEffect = Effect.gen(function*() {
4856 }
4957 }
5058
51- yield* Stream.fromQueue(requests).pipe(
59+ const fiber = yield* Stream.fromQueue(requests).pipe(
5260 Stream.pipeThroughChannel(
5361 Ndjson.duplexSchemaString(Socket.toChannelString(socket), {
5462 inputSchema: RequestSchema,
@@ -57,12 +65,15 @@ const makeEffect = Effect.gen(function*() {
5765 ),
5866 Stream.onFirst(() => Deferred.completeWith(connected, Effect.void)),
5967 Stream.runForEach(handleResponse),
60- Effect.forkScoped
68+ Effect.forkDetach
6169 )
6270
6371 yield* Effect.addFinalizer(() =>
6472 offerMetricsSnapshot.pipe(
65- Effect.andThen(Effect.flatMap(Effect.fiberId, (id) => Queue.failCause(requests, Cause.interrupt(id))))
73+ Effect.andThen(
74+ Effect.flatMap(Effect.fiberId, (id) => Queue.failCause(requests, Cause.interrupt(id)))
75+ ),
76+ Effect.andThen(Fiber.await(fiber))
6677 )
6778 )
6879
@@ -84,7 +95,9 @@ const makeEffect = Effect.gen(function*() {
8495 })
8596})
8697
87- const toMetricsSnapshot = (services: ServiceMap.ServiceMap<never>): DevToolsSchema.MetricsSnapshot => ({
98+ const toMetricsSnapshot = (
99+ services: ServiceMap.ServiceMap<never>
100+ ): DevToolsSchema.MetricsSnapshot => ({
88101 _tag: "MetricsSnapshot",
89102 metrics: Metric.snapshotUnsafe(services)
90103})
@@ -108,11 +121,7 @@ export const make: Effect.Effect<
108121 * @since 4.0.0
109122 * @category layers
110123 */
111- export const layer: Layer.Layer<
112- DevToolsClient,
113- never,
114- Socket.Socket
115- > = Layer.effect(DevToolsClient, make)
124+ export const layer: Layer.Layer<DevToolsClient, never, Socket.Socket> = Layer.effect(DevToolsClient, make)
116125
117126const makeTracerEffect = Effect.gen(function*() {
118127 const client = yield* DevToolsClient
@@ -162,10 +171,6 @@ export const makeTracer: Effect.Effect<Tracer.Tracer, never, DevToolsClient> = m
162171 * @since 4.0.0
163172 * @category layers
164173 */
165- export const layerTracer: Layer.Layer<
166- never,
167- never,
168- Socket.Socket
169- > = Layer.effect(Tracer.Tracer, makeTracer).pipe(
174+ export const layerTracer: Layer.Layer<never, never, Socket.Socket> = Layer.effect(Tracer.Tracer, makeTracer).pipe(
170175 Layer.provide(layer)
171176)
0 commit comments