@effect/platform 0.48.28 → 0.49.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/README.md +12 -12
- package/dist/cjs/Http/App.js +13 -11
- package/dist/cjs/Http/App.js.map +1 -1
- package/dist/cjs/Http/Client.js +13 -3
- package/dist/cjs/Http/Client.js.map +1 -1
- package/dist/cjs/Http/ClientResponse.js +9 -9
- package/dist/cjs/Http/ClientResponse.js.map +1 -1
- package/dist/cjs/Http/Cookies.js +7 -7
- package/dist/cjs/Http/Cookies.js.map +1 -1
- package/dist/cjs/Http/Headers.js +7 -7
- package/dist/cjs/Http/Headers.js.map +1 -1
- package/dist/cjs/Http/IncomingMessage.js +7 -7
- package/dist/cjs/Http/IncomingMessage.js.map +1 -1
- package/dist/cjs/Http/Middleware.js +11 -1
- package/dist/cjs/Http/Middleware.js.map +1 -1
- package/dist/cjs/Http/Multiplex.js.map +1 -1
- package/dist/cjs/Http/Router.js +1 -6
- package/dist/cjs/Http/Router.js.map +1 -1
- package/dist/cjs/Http/UrlParams.js +13 -13
- package/dist/cjs/Http/UrlParams.js.map +1 -1
- package/dist/cjs/PlatformConfigProvider.js +2 -2
- package/dist/cjs/PlatformConfigProvider.js.map +1 -1
- package/dist/cjs/Socket.js +6 -6
- package/dist/cjs/Socket.js.map +1 -1
- package/dist/cjs/Transferable.js +1 -1
- package/dist/cjs/Transferable.js.map +1 -1
- package/dist/cjs/WorkerRunner.js.map +1 -1
- package/dist/cjs/internal/command.js +1 -1
- package/dist/cjs/internal/command.js.map +1 -1
- package/dist/cjs/internal/fileSystem.js +2 -2
- package/dist/cjs/internal/fileSystem.js.map +1 -1
- package/dist/cjs/internal/http/client.js +19 -16
- package/dist/cjs/internal/http/client.js.map +1 -1
- package/dist/cjs/internal/http/clientResponse.js +5 -5
- package/dist/cjs/internal/http/clientResponse.js.map +1 -1
- package/dist/cjs/internal/http/middleware.js +8 -3
- package/dist/cjs/internal/http/middleware.js.map +1 -1
- package/dist/cjs/internal/http/multipart.js +4 -4
- package/dist/cjs/internal/http/multipart.js.map +1 -1
- package/dist/cjs/internal/http/multiplex.js +2 -2
- package/dist/cjs/internal/http/multiplex.js.map +1 -1
- package/dist/cjs/internal/http/router.js +11 -11
- package/dist/cjs/internal/http/router.js.map +1 -1
- package/dist/cjs/internal/worker.js +7 -7
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/cjs/internal/workerRunner.js +14 -13
- package/dist/cjs/internal/workerRunner.js.map +1 -1
- package/dist/dts/Command.d.ts +3 -3
- package/dist/dts/Command.d.ts.map +1 -1
- package/dist/dts/Http/App.d.ts +7 -7
- package/dist/dts/Http/App.d.ts.map +1 -1
- package/dist/dts/Http/Client.d.ts +78 -65
- package/dist/dts/Http/Client.d.ts.map +1 -1
- package/dist/dts/Http/ClientResponse.d.ts +5 -5
- package/dist/dts/Http/Cookies.d.ts +3 -3
- package/dist/dts/Http/Cookies.d.ts.map +1 -1
- package/dist/dts/Http/Headers.d.ts +4 -4
- package/dist/dts/Http/Headers.d.ts.map +1 -1
- package/dist/dts/Http/IncomingMessage.d.ts +4 -3
- package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
- package/dist/dts/Http/Middleware.d.ts +22 -5
- package/dist/dts/Http/Middleware.d.ts.map +1 -1
- package/dist/dts/Http/Multiplex.d.ts +22 -22
- package/dist/dts/Http/Multiplex.d.ts.map +1 -1
- package/dist/dts/Http/Router.d.ts +98 -66
- package/dist/dts/Http/Router.d.ts.map +1 -1
- package/dist/dts/Http/Server.d.ts +11 -11
- package/dist/dts/Http/Server.d.ts.map +1 -1
- package/dist/dts/Http/ServerRequest.d.ts +1 -1
- package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
- package/dist/dts/Http/TraceContext.d.ts.map +1 -1
- package/dist/dts/Http/UrlParams.d.ts.map +1 -1
- package/dist/dts/PlatformConfigProvider.d.ts.map +1 -1
- package/dist/dts/Socket.d.ts +10 -10
- package/dist/dts/Socket.d.ts.map +1 -1
- package/dist/dts/Transferable.d.ts.map +1 -1
- package/dist/dts/Worker.d.ts +6 -6
- package/dist/dts/Worker.d.ts.map +1 -1
- package/dist/dts/WorkerRunner.d.ts +5 -5
- package/dist/dts/WorkerRunner.d.ts.map +1 -1
- package/dist/dts/internal/http/router.d.ts +1 -1
- package/dist/dts/internal/http/router.d.ts.map +1 -1
- package/dist/esm/Http/App.js +13 -11
- package/dist/esm/Http/App.js.map +1 -1
- package/dist/esm/Http/Client.js +12 -2
- package/dist/esm/Http/Client.js.map +1 -1
- package/dist/esm/Http/ClientResponse.js +5 -5
- package/dist/esm/Http/ClientResponse.js.map +1 -1
- package/dist/esm/Http/Cookies.js +7 -7
- package/dist/esm/Http/Cookies.js.map +1 -1
- package/dist/esm/Http/Headers.js +7 -7
- package/dist/esm/Http/Headers.js.map +1 -1
- package/dist/esm/Http/IncomingMessage.js +3 -3
- package/dist/esm/Http/IncomingMessage.js.map +1 -1
- package/dist/esm/Http/Middleware.js +10 -0
- package/dist/esm/Http/Middleware.js.map +1 -1
- package/dist/esm/Http/Multiplex.js.map +1 -1
- package/dist/esm/Http/Router.js +0 -5
- package/dist/esm/Http/Router.js.map +1 -1
- package/dist/esm/Http/UrlParams.js +13 -13
- package/dist/esm/Http/UrlParams.js.map +1 -1
- package/dist/esm/PlatformConfigProvider.js +2 -2
- package/dist/esm/PlatformConfigProvider.js.map +1 -1
- package/dist/esm/Socket.js +6 -6
- package/dist/esm/Socket.js.map +1 -1
- package/dist/esm/Transferable.js +1 -1
- package/dist/esm/Transferable.js.map +1 -1
- package/dist/esm/WorkerRunner.js.map +1 -1
- package/dist/esm/internal/command.js +1 -1
- package/dist/esm/internal/command.js.map +1 -1
- package/dist/esm/internal/fileSystem.js +2 -2
- package/dist/esm/internal/fileSystem.js.map +1 -1
- package/dist/esm/internal/http/client.js +18 -13
- package/dist/esm/internal/http/client.js.map +1 -1
- package/dist/esm/internal/http/clientResponse.js +2 -2
- package/dist/esm/internal/http/clientResponse.js.map +1 -1
- package/dist/esm/internal/http/middleware.js +7 -2
- package/dist/esm/internal/http/middleware.js.map +1 -1
- package/dist/esm/internal/http/multipart.js +4 -4
- package/dist/esm/internal/http/multipart.js.map +1 -1
- package/dist/esm/internal/http/multiplex.js +2 -2
- package/dist/esm/internal/http/multiplex.js.map +1 -1
- package/dist/esm/internal/http/router.js +10 -9
- package/dist/esm/internal/http/router.js.map +1 -1
- package/dist/esm/internal/worker.js +7 -7
- package/dist/esm/internal/worker.js.map +1 -1
- package/dist/esm/internal/workerRunner.js +14 -13
- package/dist/esm/internal/workerRunner.js.map +1 -1
- package/package.json +3 -3
- package/src/Command.ts +3 -3
- package/src/Http/App.ts +44 -41
- package/src/Http/Client.ts +105 -90
- package/src/Http/ClientResponse.ts +7 -7
- package/src/Http/Cookies.ts +9 -9
- package/src/Http/Headers.ts +12 -12
- package/src/Http/IncomingMessage.ts +16 -6
- package/src/Http/Middleware.ts +30 -6
- package/src/Http/Multiplex.ts +38 -38
- package/src/Http/Router.ts +156 -141
- package/src/Http/Server.ts +16 -16
- package/src/Http/ServerRequest.ts +1 -1
- package/src/Http/UrlParams.ts +15 -15
- package/src/PlatformConfigProvider.ts +2 -2
- package/src/Socket.ts +6 -6
- package/src/Transferable.ts +1 -1
- package/src/Worker.ts +9 -9
- package/src/WorkerRunner.ts +5 -4
- package/src/internal/command.ts +12 -6
- package/src/internal/fileSystem.ts +2 -2
- package/src/internal/http/client.ts +221 -204
- package/src/internal/http/clientResponse.ts +2 -2
- package/src/internal/http/middleware.ts +24 -1
- package/src/internal/http/multipart.ts +4 -4
- package/src/internal/http/multiplex.ts +54 -54
- package/src/internal/http/router.ts +146 -116
- package/src/internal/http/server.ts +17 -17
- package/src/internal/http/serverRequest.ts +1 -1
- package/src/internal/worker.ts +14 -14
- package/src/internal/workerRunner.ts +20 -16
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 * as Array from "effect/Array"
|
|
3
4
|
import * as Cause from "effect/Cause"
|
|
4
5
|
import * as Channel from "effect/Channel"
|
|
5
6
|
import * as Chunk from "effect/Chunk"
|
|
@@ -13,7 +14,6 @@ import * as Layer from "effect/Layer"
|
|
|
13
14
|
import * as Option from "effect/Option"
|
|
14
15
|
import * as Pool from "effect/Pool"
|
|
15
16
|
import * as Queue from "effect/Queue"
|
|
16
|
-
import * as ReadonlyArray from "effect/ReadonlyArray"
|
|
17
17
|
import * as Schedule from "effect/Schedule"
|
|
18
18
|
import type * as Scope from "effect/Scope"
|
|
19
19
|
import * as Stream from "effect/Stream"
|
|
@@ -64,7 +64,7 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
64
64
|
let idCounter = 0
|
|
65
65
|
return WorkerManager.of({
|
|
66
66
|
[WorkerManagerTypeId]: WorkerManagerTypeId,
|
|
67
|
-
spawn<I,
|
|
67
|
+
spawn<I, O, E>({
|
|
68
68
|
encode,
|
|
69
69
|
initialMessage,
|
|
70
70
|
permits = 1,
|
|
@@ -112,7 +112,7 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
112
112
|
Queue.take(backing.queue),
|
|
113
113
|
Effect.flatMap((msg) => {
|
|
114
114
|
if (msg[0] === 0) {
|
|
115
|
-
return Deferred.complete(readyLatch, Effect.
|
|
115
|
+
return Deferred.complete(readyLatch, Effect.void)
|
|
116
116
|
}
|
|
117
117
|
return handleMessage(msg[1])
|
|
118
118
|
}),
|
|
@@ -153,7 +153,7 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
153
153
|
const handleMessage = (response: Worker.Worker.Response<E, O>) =>
|
|
154
154
|
Effect.suspend(() => {
|
|
155
155
|
const queue = requestMap.get(response[0])
|
|
156
|
-
if (!queue) return Effect.
|
|
156
|
+
if (!queue) return Effect.void
|
|
157
157
|
|
|
158
158
|
switch (response[1]) {
|
|
159
159
|
// data
|
|
@@ -210,7 +210,7 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
210
210
|
exit: Exit.Exit<unknown, unknown>
|
|
211
211
|
) => {
|
|
212
212
|
const release = Effect.zipRight(
|
|
213
|
-
Deferred.complete(deferred, Effect.
|
|
213
|
+
Deferred.complete(deferred, Effect.void),
|
|
214
214
|
Effect.sync(() => requestMap.delete(id))
|
|
215
215
|
)
|
|
216
216
|
return Exit.isFailure(exit) ?
|
|
@@ -229,7 +229,7 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
229
229
|
.flatMap(
|
|
230
230
|
Queue.take(queue),
|
|
231
231
|
Exit.match({
|
|
232
|
-
onFailure: (cause) => Cause.isEmpty(cause) ? Channel.
|
|
232
|
+
onFailure: (cause) => Cause.isEmpty(cause) ? Channel.void : Channel.failCause(cause),
|
|
233
233
|
onSuccess: (value) => Channel.flatMap(Channel.write(Chunk.unsafeFromArray(value)), () => loop)
|
|
234
234
|
})
|
|
235
235
|
)
|
|
@@ -240,7 +240,7 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
240
240
|
const executeEffect = (request: I) =>
|
|
241
241
|
Effect.acquireUseRelease(
|
|
242
242
|
executeAcquire(request),
|
|
243
|
-
([, queue]) => Effect.flatMap(Queue.take(queue), Exit.map(
|
|
243
|
+
([, queue]) => Effect.flatMap(Queue.take(queue), Exit.map(Array.unsafeGet(0))),
|
|
244
244
|
executeRelease
|
|
245
245
|
)
|
|
246
246
|
|
|
@@ -251,7 +251,7 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
251
251
|
pipe(
|
|
252
252
|
Effect.suspend(() => {
|
|
253
253
|
const result = requestMap.get(id)
|
|
254
|
-
if (!result) return Effect.
|
|
254
|
+
if (!result) return Effect.void
|
|
255
255
|
const transferables = transfers(request)
|
|
256
256
|
const spanTuple = Option.getOrUndefined(
|
|
257
257
|
Option.map(span, (span) => [span.traceId, span.spanId, span.sampled] as const)
|
|
@@ -296,14 +296,14 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
296
296
|
export const layerManager = Layer.effect(WorkerManager, makeManager)
|
|
297
297
|
|
|
298
298
|
/** @internal */
|
|
299
|
-
export const makePool = <I,
|
|
299
|
+
export const makePool = <I, O, E>(
|
|
300
300
|
options: Worker.WorkerPool.Options<I>
|
|
301
301
|
) =>
|
|
302
302
|
Effect.gen(function*(_) {
|
|
303
303
|
const manager = yield* _(WorkerManager)
|
|
304
|
-
const workers = new Set<Worker.Worker<I,
|
|
304
|
+
const workers = new Set<Worker.Worker<I, O, E>>()
|
|
305
305
|
const acquire = pipe(
|
|
306
|
-
manager.spawn<I,
|
|
306
|
+
manager.spawn<I, O, E>(options),
|
|
307
307
|
Effect.tap((worker) => Effect.sync(() => workers.add(worker))),
|
|
308
308
|
Effect.tap((worker) => Effect.addFinalizer(() => Effect.sync(() => workers.delete(worker)))),
|
|
309
309
|
options.onCreate ? Effect.tap(options.onCreate) : identity
|
|
@@ -321,7 +321,7 @@ export const makePool = <I, E, O>(
|
|
|
321
321
|
size: options.size
|
|
322
322
|
})
|
|
323
323
|
)
|
|
324
|
-
const pool: Worker.WorkerPool<I,
|
|
324
|
+
const pool: Worker.WorkerPool<I, O, E> = {
|
|
325
325
|
backing,
|
|
326
326
|
broadcast: (message: I) =>
|
|
327
327
|
Effect.forEach(workers, (worker) => worker.executeEffect(message), {
|
|
@@ -346,8 +346,8 @@ export const makePool = <I, E, O>(
|
|
|
346
346
|
})
|
|
347
347
|
|
|
348
348
|
/** @internal */
|
|
349
|
-
export const makePoolLayer = <Tag, I,
|
|
350
|
-
tag: Context.Tag<Tag, Worker.WorkerPool<I,
|
|
349
|
+
export const makePoolLayer = <Tag, I, O, E>(
|
|
350
|
+
tag: Context.Tag<Tag, Worker.WorkerPool<I, O, E>>,
|
|
351
351
|
options: Worker.WorkerPool.Options<I>
|
|
352
352
|
) => Layer.scoped(tag, makePool(options))
|
|
353
353
|
|
|
@@ -32,13 +32,13 @@ export const PlatformRunner = Context.GenericTag<WorkerRunner.PlatformRunner>(
|
|
|
32
32
|
/** @internal */
|
|
33
33
|
export const make = <I, R, E, O>(
|
|
34
34
|
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
35
|
-
options?: WorkerRunner.Runner.Options<I,
|
|
35
|
+
options?: WorkerRunner.Runner.Options<I, O, E>
|
|
36
36
|
) =>
|
|
37
37
|
Effect.gen(function*(_) {
|
|
38
38
|
const scope = yield* _(Scope.fork(yield* _(Effect.scope), ExecutionStrategy.parallel))
|
|
39
39
|
const fiber = Option.getOrThrow(Fiber.getCurrentFiber())
|
|
40
40
|
const shutdown = Effect.zipRight(
|
|
41
|
-
Scope.close(scope, Exit.
|
|
41
|
+
Scope.close(scope, Exit.void),
|
|
42
42
|
Fiber.interruptFork(fiber)
|
|
43
43
|
)
|
|
44
44
|
const platform = yield* _(PlatformRunner)
|
|
@@ -51,19 +51,20 @@ export const make = <I, R, E, O>(
|
|
|
51
51
|
yield* _(
|
|
52
52
|
Queue.take(backing.queue),
|
|
53
53
|
options?.decode ?
|
|
54
|
-
Effect.flatMap((
|
|
54
|
+
Effect.flatMap((msg): Effect.Effect<readonly [portId: number, Worker.Worker.Request<I>], WorkerError> => {
|
|
55
|
+
const req = msg[1]
|
|
55
56
|
if (req[1] === 1) {
|
|
56
|
-
return Effect.succeed(
|
|
57
|
+
return Effect.succeed(msg)
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
return Effect.map(options.decode!(req[2]), (data) => [req[0], req[1], data, req[3]])
|
|
60
|
+
return Effect.map(options.decode!(req[2]), (data) => [msg[0], [req[0], req[1], data, req[3]]])
|
|
60
61
|
}) :
|
|
61
62
|
identity,
|
|
62
|
-
Effect.tap((req) => {
|
|
63
|
+
Effect.tap(([portId, req]) => {
|
|
63
64
|
const id = req[0]
|
|
64
65
|
if (req[1] === 1) {
|
|
65
66
|
const fiber = fiberMap.get(id)
|
|
66
|
-
if (!fiber) return Effect.
|
|
67
|
+
if (!fiber) return Effect.void
|
|
67
68
|
return Fiber.interrupt(fiber)
|
|
68
69
|
}
|
|
69
70
|
|
|
@@ -79,7 +80,7 @@ export const make = <I, R, E, O>(
|
|
|
79
80
|
? Effect.provideService(options.encodeOutput(req[2], data), Transferable.Collector, collector)
|
|
80
81
|
: Effect.succeed(data),
|
|
81
82
|
Effect.flatMap((payload) =>
|
|
82
|
-
backing.send([id, 0, [payload]], [
|
|
83
|
+
backing.send(portId, [id, 0, [payload]], [
|
|
83
84
|
...transfers,
|
|
84
85
|
...collector.unsafeRead()
|
|
85
86
|
])
|
|
@@ -93,7 +94,7 @@ export const make = <I, R, E, O>(
|
|
|
93
94
|
if (options?.encodeOutput === undefined) {
|
|
94
95
|
const payload = Chunk.toReadonlyArray(data)
|
|
95
96
|
const transfers = options?.transfers ? payload.flatMap(options.transfers) : undefined
|
|
96
|
-
return backing.send([id, 0, payload], transfers)
|
|
97
|
+
return backing.send(portId, [id, 0, payload], transfers)
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
const transfers: Array<unknown> = []
|
|
@@ -110,12 +111,12 @@ export const make = <I, R, E, O>(
|
|
|
110
111
|
Effect.provideService(Transferable.Collector, collector),
|
|
111
112
|
Effect.flatMap((payload) => {
|
|
112
113
|
collector.unsafeRead().forEach((transfer) => transfers.push(transfer))
|
|
113
|
-
return backing.send([id, 0, payload], transfers)
|
|
114
|
+
return backing.send(portId, [id, 0, payload], transfers)
|
|
114
115
|
})
|
|
115
116
|
)
|
|
116
117
|
}),
|
|
117
118
|
Stream.runDrain,
|
|
118
|
-
Effect.andThen(backing.send([id, 1]))
|
|
119
|
+
Effect.andThen(backing.send(portId, [id, 1]))
|
|
119
120
|
)
|
|
120
121
|
|
|
121
122
|
if (req[3]) {
|
|
@@ -131,7 +132,8 @@ export const make = <I, R, E, O>(
|
|
|
131
132
|
|
|
132
133
|
return effect
|
|
133
134
|
}),
|
|
134
|
-
Effect.catchIf(isWorkerError, (error) =>
|
|
135
|
+
Effect.catchIf(isWorkerError, (error) =>
|
|
136
|
+
backing.send(portId, [id, 3, WorkerError.encodeCause(Cause.fail(error))])),
|
|
135
137
|
Effect.catchAllCause((cause) =>
|
|
136
138
|
Either.match(Cause.failureOrCause(cause), {
|
|
137
139
|
onLeft: (error) => {
|
|
@@ -146,15 +148,17 @@ export const make = <I, R, E, O>(
|
|
|
146
148
|
)
|
|
147
149
|
: Effect.succeed(error),
|
|
148
150
|
Effect.flatMap((payload) =>
|
|
149
|
-
backing.send([id, 2, payload as any], [
|
|
151
|
+
backing.send(portId, [id, 2, payload as any], [
|
|
150
152
|
...transfers,
|
|
151
153
|
...collector.unsafeRead()
|
|
152
154
|
])
|
|
153
155
|
),
|
|
154
|
-
Effect.catchAllCause((cause) =>
|
|
156
|
+
Effect.catchAllCause((cause) =>
|
|
157
|
+
backing.send(portId, [id, 3, WorkerError.encodeCause(cause)])
|
|
158
|
+
)
|
|
155
159
|
)
|
|
156
160
|
},
|
|
157
|
-
onRight: (cause) => backing.send([id, 3, WorkerError.encodeCause(cause)])
|
|
161
|
+
onRight: (cause) => backing.send(portId, [id, 3, WorkerError.encodeCause(cause)])
|
|
158
162
|
})
|
|
159
163
|
),
|
|
160
164
|
Effect.ensuring(Effect.sync(() => fiberMap.delete(id))),
|
|
@@ -170,7 +174,7 @@ export const make = <I, R, E, O>(
|
|
|
170
174
|
/** @internal */
|
|
171
175
|
export const layer = <I, R, E, O>(
|
|
172
176
|
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
173
|
-
options?: WorkerRunner.Runner.Options<I,
|
|
177
|
+
options?: WorkerRunner.Runner.Options<I, O, E>
|
|
174
178
|
): Layer.Layer<never, WorkerError, WorkerRunner.PlatformRunner | R> => Layer.scopedDiscard(make(process, options))
|
|
175
179
|
|
|
176
180
|
/** @internal */
|