@effect/platform 0.64.1 → 0.65.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/FetchHttpClient/package.json +6 -0
- package/README.md +173 -195
- package/dist/cjs/FetchHttpClient.js +32 -0
- package/dist/cjs/FetchHttpClient.js.map +1 -0
- package/dist/cjs/HttpApiClient.js +1 -1
- package/dist/cjs/HttpApiClient.js.map +1 -1
- package/dist/cjs/HttpClient.js +5 -36
- package/dist/cjs/HttpClient.js.map +1 -1
- package/dist/cjs/HttpClientRequest.js +11 -11
- package/dist/cjs/HttpClientRequest.js.map +1 -1
- package/dist/cjs/HttpClientResponse.js +2 -61
- package/dist/cjs/HttpClientResponse.js.map +1 -1
- package/dist/cjs/HttpIncomingMessage.js +2 -29
- package/dist/cjs/HttpIncomingMessage.js.map +1 -1
- package/dist/cjs/Runtime.js +1 -1
- package/dist/cjs/Runtime.js.map +1 -1
- package/dist/cjs/Socket.js +42 -53
- package/dist/cjs/Socket.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/internal/fetchHttpClient.js +52 -0
- package/dist/cjs/internal/fetchHttpClient.js.map +1 -0
- package/dist/cjs/internal/httpClient.js +82 -71
- package/dist/cjs/internal/httpClient.js.map +1 -1
- package/dist/cjs/internal/httpClientRequest.js +13 -13
- package/dist/cjs/internal/httpClientRequest.js.map +1 -1
- package/dist/cjs/internal/httpClientResponse.js +1 -33
- package/dist/cjs/internal/httpClientResponse.js.map +1 -1
- package/dist/cjs/internal/worker.js +21 -29
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/dts/FetchHttpClient.d.ts +27 -0
- package/dist/dts/FetchHttpClient.d.ts.map +1 -0
- package/dist/dts/HttpApiClient.d.ts +2 -2
- package/dist/dts/HttpClient.d.ts +53 -61
- package/dist/dts/HttpClient.d.ts.map +1 -1
- package/dist/dts/HttpClientRequest.d.ts +11 -11
- package/dist/dts/HttpClientRequest.d.ts.map +1 -1
- package/dist/dts/HttpClientResponse.d.ts +4 -90
- package/dist/dts/HttpClientResponse.d.ts.map +1 -1
- package/dist/dts/HttpIncomingMessage.d.ts +0 -16
- package/dist/dts/HttpIncomingMessage.d.ts.map +1 -1
- package/dist/dts/HttpServer.d.ts +1 -1
- package/dist/dts/Socket.d.ts +3 -3
- package/dist/dts/Socket.d.ts.map +1 -1
- package/dist/dts/index.d.ts +4 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/internal/fetchHttpClient.d.ts +2 -0
- package/dist/dts/internal/fetchHttpClient.d.ts.map +1 -0
- package/dist/esm/FetchHttpClient.js +21 -0
- package/dist/esm/FetchHttpClient.js.map +1 -0
- package/dist/esm/HttpApiClient.js +1 -1
- package/dist/esm/HttpApiClient.js.map +1 -1
- package/dist/esm/HttpClient.js +4 -35
- package/dist/esm/HttpClient.js.map +1 -1
- package/dist/esm/HttpClientRequest.js +10 -10
- package/dist/esm/HttpClientRequest.js.map +1 -1
- package/dist/esm/HttpClientResponse.js +1 -63
- package/dist/esm/HttpClientResponse.js.map +1 -1
- package/dist/esm/HttpIncomingMessage.js +0 -24
- package/dist/esm/HttpIncomingMessage.js.map +1 -1
- package/dist/esm/Runtime.js +1 -1
- package/dist/esm/Runtime.js.map +1 -1
- package/dist/esm/Socket.js +42 -53
- package/dist/esm/Socket.js.map +1 -1
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal/fetchHttpClient.js +44 -0
- package/dist/esm/internal/fetchHttpClient.js.map +1 -0
- package/dist/esm/internal/httpClient.js +79 -69
- package/dist/esm/internal/httpClient.js.map +1 -1
- package/dist/esm/internal/httpClientRequest.js +11 -11
- package/dist/esm/internal/httpClientRequest.js.map +1 -1
- package/dist/esm/internal/httpClientResponse.js +0 -24
- package/dist/esm/internal/httpClientResponse.js.map +1 -1
- package/dist/esm/internal/worker.js +21 -29
- package/dist/esm/internal/worker.js.map +1 -1
- package/package.json +11 -3
- package/src/FetchHttpClient.ts +25 -0
- package/src/HttpApiClient.ts +5 -5
- package/src/HttpClient.ts +79 -85
- package/src/HttpClientRequest.ts +21 -21
- package/src/HttpClientResponse.ts +4 -162
- package/src/HttpIncomingMessage.ts +0 -43
- package/src/HttpServer.ts +1 -1
- package/src/Runtime.ts +1 -1
- package/src/Socket.ts +42 -58
- package/src/index.ts +5 -0
- package/src/internal/fetchHttpClient.ts +53 -0
- package/src/internal/httpClient.ts +149 -125
- package/src/internal/httpClientRequest.ts +12 -12
- package/src/internal/httpClientResponse.ts +6 -96
- package/src/internal/worker.ts +40 -55
|
@@ -5,8 +5,8 @@ import * as Effect from "effect/Effect"
|
|
|
5
5
|
import { dual } from "effect/Function"
|
|
6
6
|
import * as Inspectable from "effect/Inspectable"
|
|
7
7
|
import * as Option from "effect/Option"
|
|
8
|
-
import type { Scope } from "effect/Scope"
|
|
9
8
|
import * as Stream from "effect/Stream"
|
|
9
|
+
import type { Unify } from "effect/Unify"
|
|
10
10
|
import * as Cookies from "../Cookies.js"
|
|
11
11
|
import * as Headers from "../Headers.js"
|
|
12
12
|
import * as Error from "../HttpClientError.js"
|
|
@@ -194,63 +194,10 @@ export const schemaNoBody = <
|
|
|
194
194
|
})
|
|
195
195
|
}
|
|
196
196
|
|
|
197
|
-
/** @internal */
|
|
198
|
-
export const arrayBuffer = <E, R>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) =>
|
|
199
|
-
Effect.scoped(Effect.flatMap(effect, (_) => _.arrayBuffer))
|
|
200
|
-
|
|
201
|
-
/** @internal */
|
|
202
|
-
export const text = <E, R>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) =>
|
|
203
|
-
Effect.scoped(Effect.flatMap(effect, (_) => _.text))
|
|
204
|
-
|
|
205
|
-
/** @internal */
|
|
206
|
-
export const json = <E, R>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) =>
|
|
207
|
-
Effect.scoped(Effect.flatMap(effect, (_) => _.json))
|
|
208
|
-
|
|
209
|
-
/** @internal */
|
|
210
|
-
export const urlParamsBody = <E, R>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) =>
|
|
211
|
-
Effect.scoped(Effect.flatMap(effect, (_) => _.urlParamsBody))
|
|
212
|
-
|
|
213
|
-
/** @internal */
|
|
214
|
-
export const formData = <E, R>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) =>
|
|
215
|
-
Effect.scoped(Effect.flatMap(effect, (_) => _.formData))
|
|
216
|
-
|
|
217
|
-
/** @internal */
|
|
218
|
-
export const void_ = <E, R>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) =>
|
|
219
|
-
Effect.scoped(Effect.asVoid(effect))
|
|
220
|
-
|
|
221
197
|
/** @internal */
|
|
222
198
|
export const stream = <E, R>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) =>
|
|
223
199
|
Stream.unwrapScoped(Effect.map(effect, (_) => _.stream))
|
|
224
200
|
|
|
225
|
-
/** @internal */
|
|
226
|
-
export const schemaJsonScoped = <
|
|
227
|
-
R,
|
|
228
|
-
I extends {
|
|
229
|
-
readonly status?: number | undefined
|
|
230
|
-
readonly headers?: Readonly<Record<string, string>> | undefined
|
|
231
|
-
readonly body?: unknown | undefined
|
|
232
|
-
},
|
|
233
|
-
A
|
|
234
|
-
>(schema: Schema.Schema<A, I, R>, options?: ParseOptions | undefined) => {
|
|
235
|
-
const decode = schemaJson(schema, options)
|
|
236
|
-
return <E, R2>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R2>) =>
|
|
237
|
-
Effect.scoped(Effect.flatMap(effect, decode))
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/** @internal */
|
|
241
|
-
export const schemaNoBodyScoped = <
|
|
242
|
-
R,
|
|
243
|
-
I extends {
|
|
244
|
-
readonly status?: number | undefined
|
|
245
|
-
readonly headers?: Readonly<Record<string, string>> | undefined
|
|
246
|
-
},
|
|
247
|
-
A
|
|
248
|
-
>(schema: Schema.Schema<A, I, R>, options?: ParseOptions | undefined) => {
|
|
249
|
-
const decode = schemaNoBody(schema, options)
|
|
250
|
-
return <E, R2>(effect: Effect.Effect<ClientResponse.HttpClientResponse, E, R2>) =>
|
|
251
|
-
Effect.scoped(Effect.flatMap(effect, decode))
|
|
252
|
-
}
|
|
253
|
-
|
|
254
201
|
/** @internal */
|
|
255
202
|
export const matchStatus = dual<
|
|
256
203
|
<
|
|
@@ -264,7 +211,7 @@ export const matchStatus = dual<
|
|
|
264
211
|
}
|
|
265
212
|
>(
|
|
266
213
|
cases: Cases
|
|
267
|
-
) => (self: ClientResponse.HttpClientResponse) => Cases[keyof Cases] extends (_: any) => infer R ? R : never,
|
|
214
|
+
) => (self: ClientResponse.HttpClientResponse) => Cases[keyof Cases] extends (_: any) => infer R ? Unify<R> : never,
|
|
268
215
|
<
|
|
269
216
|
const Cases extends {
|
|
270
217
|
readonly [status: number]: (_: ClientResponse.HttpClientResponse) => any
|
|
@@ -274,7 +221,10 @@ export const matchStatus = dual<
|
|
|
274
221
|
readonly "5xx"?: (_: ClientResponse.HttpClientResponse) => any
|
|
275
222
|
readonly orElse: (_: ClientResponse.HttpClientResponse) => any
|
|
276
223
|
}
|
|
277
|
-
>(
|
|
224
|
+
>(
|
|
225
|
+
self: ClientResponse.HttpClientResponse,
|
|
226
|
+
cases: Cases
|
|
227
|
+
) => Cases[keyof Cases] extends (_: any) => infer R ? Unify<R> : never
|
|
278
228
|
>(2, (self, cases) => {
|
|
279
229
|
const status = self.status
|
|
280
230
|
if (cases[status]) {
|
|
@@ -290,43 +240,3 @@ export const matchStatus = dual<
|
|
|
290
240
|
}
|
|
291
241
|
return cases.orElse(self)
|
|
292
242
|
})
|
|
293
|
-
|
|
294
|
-
/** @internal */
|
|
295
|
-
export const matchStatusScoped = dual<
|
|
296
|
-
<
|
|
297
|
-
const Cases extends {
|
|
298
|
-
readonly [status: number]: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
299
|
-
readonly "2xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
300
|
-
readonly "3xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
301
|
-
readonly "4xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
302
|
-
readonly "5xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
303
|
-
readonly orElse: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
304
|
-
}
|
|
305
|
-
>(cases: Cases) => <E, R>(self: Effect.Effect<ClientResponse.HttpClientResponse, E, R>) => Effect.Effect<
|
|
306
|
-
Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _A : never,
|
|
307
|
-
E | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never),
|
|
308
|
-
Exclude<
|
|
309
|
-
R | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _R : never),
|
|
310
|
-
Scope
|
|
311
|
-
>
|
|
312
|
-
>,
|
|
313
|
-
<
|
|
314
|
-
E,
|
|
315
|
-
R,
|
|
316
|
-
const Cases extends {
|
|
317
|
-
readonly [status: number]: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
318
|
-
readonly "2xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
319
|
-
readonly "3xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
320
|
-
readonly "4xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
321
|
-
readonly "5xx"?: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
322
|
-
readonly orElse: (_: ClientResponse.HttpClientResponse) => Effect.Effect<any, any, any>
|
|
323
|
-
}
|
|
324
|
-
>(self: Effect.Effect<ClientResponse.HttpClientResponse, E, R>, cases: Cases) => Effect.Effect<
|
|
325
|
-
Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _A : never,
|
|
326
|
-
E | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never),
|
|
327
|
-
Exclude<
|
|
328
|
-
R | (Cases[keyof Cases] extends (_: any) => Effect.Effect<infer _A, infer _E, infer _R> ? _R : never),
|
|
329
|
-
Scope
|
|
330
|
-
>
|
|
331
|
-
>
|
|
332
|
-
>(2, (self, cases) => Effect.scoped(Effect.flatMap(self, matchStatus(cases) as any)))
|
package/src/internal/worker.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import * as Schema from "@effect/schema/Schema"
|
|
2
2
|
import * as Serializable from "@effect/schema/Serializable"
|
|
3
|
-
import * as Cause from "effect/Cause"
|
|
4
3
|
import * as Channel from "effect/Channel"
|
|
5
|
-
import * as Chunk from "effect/Chunk"
|
|
6
4
|
import * as Context from "effect/Context"
|
|
7
5
|
import * as Deferred from "effect/Deferred"
|
|
8
6
|
import * as Effect from "effect/Effect"
|
|
@@ -11,9 +9,9 @@ import * as FiberRef from "effect/FiberRef"
|
|
|
11
9
|
import * as FiberSet from "effect/FiberSet"
|
|
12
10
|
import { identity, pipe } from "effect/Function"
|
|
13
11
|
import * as Layer from "effect/Layer"
|
|
12
|
+
import * as Mailbox from "effect/Mailbox"
|
|
14
13
|
import * as Option from "effect/Option"
|
|
15
14
|
import * as Pool from "effect/Pool"
|
|
16
|
-
import * as Queue from "effect/Queue"
|
|
17
15
|
import * as Schedule from "effect/Schedule"
|
|
18
16
|
import * as Scope from "effect/Scope"
|
|
19
17
|
import * as Stream from "effect/Stream"
|
|
@@ -62,7 +60,7 @@ export const makeManager = Effect.gen(function*() {
|
|
|
62
60
|
let requestIdCounter = 0
|
|
63
61
|
const requestMap = new Map<
|
|
64
62
|
number,
|
|
65
|
-
|
|
63
|
+
Mailbox.Mailbox<O, E | WorkerError> | Deferred.Deferred<O, E | WorkerError>
|
|
66
64
|
>()
|
|
67
65
|
|
|
68
66
|
const collector = Transferable.unsafeMakeCollector()
|
|
@@ -84,10 +82,10 @@ export const makeManager = Effect.gen(function*() {
|
|
|
84
82
|
return handleMessage(message[1])
|
|
85
83
|
}).pipe(
|
|
86
84
|
Effect.onError((cause) =>
|
|
87
|
-
Effect.forEach(requestMap.values(), (
|
|
88
|
-
Deferred.DeferredTypeId in
|
|
89
|
-
? Deferred.failCause(
|
|
90
|
-
:
|
|
85
|
+
Effect.forEach(requestMap.values(), (mailbox) =>
|
|
86
|
+
Deferred.DeferredTypeId in mailbox
|
|
87
|
+
? Deferred.failCause(mailbox, cause)
|
|
88
|
+
: mailbox.failCause(cause))
|
|
91
89
|
),
|
|
92
90
|
Effect.retry(Schedule.spaced(1000)),
|
|
93
91
|
Effect.annotateLogs({
|
|
@@ -100,10 +98,10 @@ export const makeManager = Effect.gen(function*() {
|
|
|
100
98
|
|
|
101
99
|
yield* Effect.addFinalizer(() =>
|
|
102
100
|
Effect.zipRight(
|
|
103
|
-
Effect.forEach(requestMap.values(), (
|
|
104
|
-
Deferred.DeferredTypeId in
|
|
105
|
-
? Deferred.interrupt(
|
|
106
|
-
:
|
|
101
|
+
Effect.forEach(requestMap.values(), (mailbox) =>
|
|
102
|
+
Deferred.DeferredTypeId in mailbox
|
|
103
|
+
? Deferred.interrupt(mailbox)
|
|
104
|
+
: mailbox.end, {
|
|
107
105
|
discard: true
|
|
108
106
|
}),
|
|
109
107
|
Effect.sync(() => requestMap.clear())
|
|
@@ -112,61 +110,58 @@ export const makeManager = Effect.gen(function*() {
|
|
|
112
110
|
|
|
113
111
|
const handleMessage = (response: Worker.Worker.Response<E, O>) =>
|
|
114
112
|
Effect.suspend(() => {
|
|
115
|
-
const
|
|
116
|
-
if (!
|
|
113
|
+
const mailbox = requestMap.get(response[0])
|
|
114
|
+
if (!mailbox) return Effect.void
|
|
117
115
|
|
|
118
116
|
switch (response[1]) {
|
|
119
117
|
// data
|
|
120
118
|
case 0: {
|
|
121
|
-
return Deferred.DeferredTypeId in
|
|
122
|
-
? Deferred.succeed(
|
|
123
|
-
:
|
|
119
|
+
return Deferred.DeferredTypeId in mailbox
|
|
120
|
+
? Deferred.succeed(mailbox, response[2][0])
|
|
121
|
+
: mailbox.offerAll(response[2])
|
|
124
122
|
}
|
|
125
123
|
// end
|
|
126
124
|
case 1: {
|
|
127
125
|
if (response.length === 2) {
|
|
128
|
-
return Deferred.DeferredTypeId in
|
|
129
|
-
? Deferred.interrupt(
|
|
130
|
-
:
|
|
126
|
+
return Deferred.DeferredTypeId in mailbox
|
|
127
|
+
? Deferred.interrupt(mailbox)
|
|
128
|
+
: mailbox.end
|
|
131
129
|
}
|
|
132
|
-
return Deferred.DeferredTypeId in
|
|
133
|
-
? Deferred.succeed(
|
|
134
|
-
: Effect.zipRight(
|
|
135
|
-
Queue.offer(queue, Exit.succeed(response[2])),
|
|
136
|
-
Queue.offer(queue, Exit.failCause(Cause.empty))
|
|
137
|
-
)
|
|
130
|
+
return Deferred.DeferredTypeId in mailbox
|
|
131
|
+
? Deferred.succeed(mailbox, response[2][0])
|
|
132
|
+
: Effect.zipRight(mailbox.offerAll(response[2]), mailbox.end)
|
|
138
133
|
}
|
|
139
134
|
// error / defect
|
|
140
135
|
case 2:
|
|
141
136
|
case 3: {
|
|
142
137
|
if (response[1] === 2) {
|
|
143
|
-
return Deferred.DeferredTypeId in
|
|
144
|
-
? Deferred.fail(
|
|
145
|
-
:
|
|
138
|
+
return Deferred.DeferredTypeId in mailbox
|
|
139
|
+
? Deferred.fail(mailbox, response[2])
|
|
140
|
+
: mailbox.fail(response[2])
|
|
146
141
|
}
|
|
147
142
|
const cause = WorkerError.decodeCause(response[2])
|
|
148
|
-
return Deferred.DeferredTypeId in
|
|
149
|
-
? Deferred.failCause(
|
|
150
|
-
:
|
|
143
|
+
return Deferred.DeferredTypeId in mailbox
|
|
144
|
+
? Deferred.failCause(mailbox, cause)
|
|
145
|
+
: mailbox.failCause(cause)
|
|
151
146
|
}
|
|
152
147
|
}
|
|
153
148
|
})
|
|
154
149
|
|
|
155
150
|
const executeAcquire = <
|
|
156
|
-
Q extends
|
|
157
|
-
>(request: I,
|
|
151
|
+
Q extends Mailbox.Mailbox<O, E | WorkerError> | Deferred.Deferred<O, E | WorkerError>
|
|
152
|
+
>(request: I, makeMailbox: Effect.Effect<Q>) =>
|
|
158
153
|
Effect.withFiberRuntime<{
|
|
159
154
|
readonly id: number
|
|
160
|
-
readonly
|
|
155
|
+
readonly mailbox: Q
|
|
161
156
|
}>((fiber) => {
|
|
162
157
|
const context = fiber.getFiberRef(FiberRef.currentContext)
|
|
163
158
|
const span = Context.getOption(context, Tracer.ParentSpan).pipe(
|
|
164
159
|
Option.filter((span): span is Tracer.Span => span._tag === "Span")
|
|
165
160
|
)
|
|
166
161
|
const id = requestIdCounter++
|
|
167
|
-
return
|
|
168
|
-
Effect.tap((
|
|
169
|
-
requestMap.set(id,
|
|
162
|
+
return makeMailbox.pipe(
|
|
163
|
+
Effect.tap((mailbox) => {
|
|
164
|
+
requestMap.set(id, mailbox)
|
|
170
165
|
return wrappedEncode(request).pipe(
|
|
171
166
|
Effect.tap((payload) =>
|
|
172
167
|
backing.send([
|
|
@@ -177,13 +172,13 @@ export const makeManager = Effect.gen(function*() {
|
|
|
177
172
|
], collector.unsafeRead())
|
|
178
173
|
),
|
|
179
174
|
Effect.catchAllCause((cause) =>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
175
|
+
Mailbox.isMailbox<O, E | WorkerError>(mailbox)
|
|
176
|
+
? mailbox.failCause(cause)
|
|
177
|
+
: Deferred.failCause(mailbox, cause)
|
|
183
178
|
)
|
|
184
179
|
)
|
|
185
180
|
}),
|
|
186
|
-
Effect.map((
|
|
181
|
+
Effect.map((mailbox) => ({ id, mailbox }))
|
|
187
182
|
)
|
|
188
183
|
})
|
|
189
184
|
|
|
@@ -197,18 +192,8 @@ export const makeManager = Effect.gen(function*() {
|
|
|
197
192
|
const execute = (request: I) =>
|
|
198
193
|
Stream.fromChannel(
|
|
199
194
|
Channel.acquireUseRelease(
|
|
200
|
-
executeAcquire(request,
|
|
201
|
-
({
|
|
202
|
-
const loop: Channel.Channel<Chunk.Chunk<O>, unknown, E | WorkerError, unknown, void, unknown> = Channel
|
|
203
|
-
.flatMap(
|
|
204
|
-
Queue.take(queue),
|
|
205
|
-
Exit.match({
|
|
206
|
-
onFailure: (cause) => Cause.isEmpty(cause) ? Channel.void : Channel.failCause(cause),
|
|
207
|
-
onSuccess: (value) => Channel.flatMap(Channel.write(Chunk.unsafeFromArray(value)), () => loop)
|
|
208
|
-
})
|
|
209
|
-
)
|
|
210
|
-
return loop
|
|
211
|
-
},
|
|
195
|
+
executeAcquire(request, Mailbox.make<O, E | WorkerError>()),
|
|
196
|
+
({ mailbox }) => Mailbox.toChannel(mailbox),
|
|
212
197
|
executeRelease
|
|
213
198
|
)
|
|
214
199
|
)
|
|
@@ -216,7 +201,7 @@ export const makeManager = Effect.gen(function*() {
|
|
|
216
201
|
const executeEffect = (request: I) =>
|
|
217
202
|
Effect.acquireUseRelease(
|
|
218
203
|
executeAcquire(request, Deferred.make<O, WorkerError | E>()),
|
|
219
|
-
({
|
|
204
|
+
({ mailbox }) => Deferred.await(mailbox),
|
|
220
205
|
executeRelease
|
|
221
206
|
)
|
|
222
207
|
|