@effect/platform 0.43.11 → 0.44.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 +4 -0
- package/dist/cjs/Error.js.map +1 -1
- package/dist/cjs/Http/App.js.map +1 -1
- package/dist/cjs/Http/Body.js.map +1 -1
- package/dist/cjs/Http/Client.js.map +1 -1
- package/dist/cjs/Http/ClientError.js +4 -0
- package/dist/cjs/Http/ClientError.js.map +1 -1
- package/dist/cjs/Http/ClientResponse.js.map +1 -1
- package/dist/cjs/Http/IncomingMessage.js.map +1 -1
- package/dist/cjs/Http/Multipart.js.map +1 -1
- package/dist/cjs/Http/Server.js +26 -1
- package/dist/cjs/Http/Server.js.map +1 -1
- package/dist/cjs/Http/ServerError.js.map +1 -1
- package/dist/cjs/Http/ServerResponse.js.map +1 -1
- package/dist/cjs/HttpServer.js +7 -1
- package/dist/cjs/HttpServer.js.map +1 -1
- package/dist/cjs/KeyValueStore.js.map +1 -1
- package/dist/cjs/Path.js.map +1 -1
- package/dist/cjs/Transferable.js +51 -48
- package/dist/cjs/Transferable.js.map +1 -1
- package/dist/cjs/Worker.js +6 -1
- package/dist/cjs/Worker.js.map +1 -1
- package/dist/cjs/WorkerError.js +4 -0
- package/dist/cjs/WorkerError.js.map +1 -1
- package/dist/cjs/index.js +62 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/commandExecutor.js +1 -1
- package/dist/cjs/internal/commandExecutor.js.map +1 -1
- package/dist/cjs/internal/effectify.js.map +1 -1
- package/dist/cjs/internal/fileSystem.js +1 -1
- package/dist/cjs/internal/fileSystem.js.map +1 -1
- package/dist/cjs/internal/http/body.js.map +1 -1
- package/dist/cjs/internal/http/client.js +2 -2
- package/dist/cjs/internal/http/client.js.map +1 -1
- package/dist/cjs/internal/http/etag.js +1 -1
- package/dist/cjs/internal/http/etag.js.map +1 -1
- package/dist/cjs/internal/http/multipart.js.map +1 -1
- package/dist/cjs/internal/http/platform.js +1 -1
- package/dist/cjs/internal/http/platform.js.map +1 -1
- package/dist/cjs/internal/http/router.js +1 -1
- package/dist/cjs/internal/http/router.js.map +1 -1
- package/dist/cjs/internal/http/server.js +23 -2
- package/dist/cjs/internal/http/server.js.map +1 -1
- package/dist/cjs/internal/http/serverRequest.js +1 -1
- package/dist/cjs/internal/http/serverRequest.js.map +1 -1
- package/dist/cjs/internal/http/serverResponse.js.map +1 -1
- package/dist/cjs/internal/keyValueStore.js +2 -2
- package/dist/cjs/internal/keyValueStore.js.map +1 -1
- package/dist/cjs/internal/path.js +9 -4
- package/dist/cjs/internal/path.js.map +1 -1
- package/dist/cjs/internal/terminal.js +1 -1
- package/dist/cjs/internal/terminal.js.map +1 -1
- package/dist/cjs/internal/worker.js +16 -12
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/cjs/internal/workerError.js.map +1 -1
- package/dist/cjs/internal/workerRunner.js +15 -12
- package/dist/cjs/internal/workerRunner.js.map +1 -1
- package/dist/dts/Command.d.ts +9 -9
- package/dist/dts/Command.d.ts.map +1 -1
- package/dist/dts/CommandExecutor.d.ts +13 -13
- package/dist/dts/CommandExecutor.d.ts.map +1 -1
- package/dist/dts/Effectify.d.ts +55 -55
- package/dist/dts/Effectify.d.ts.map +1 -1
- package/dist/dts/Error.d.ts +2 -6
- package/dist/dts/Error.d.ts.map +1 -1
- package/dist/dts/FileSystem.d.ts +35 -35
- package/dist/dts/FileSystem.d.ts.map +1 -1
- package/dist/dts/Http/App.d.ts +5 -5
- package/dist/dts/Http/App.d.ts.map +1 -1
- package/dist/dts/Http/Body.d.ts +10 -11
- package/dist/dts/Http/Body.d.ts.map +1 -1
- package/dist/dts/Http/Client.d.ts +32 -32
- package/dist/dts/Http/Client.d.ts.map +1 -1
- package/dist/dts/Http/ClientError.d.ts +2 -6
- package/dist/dts/Http/ClientError.d.ts.map +1 -1
- package/dist/dts/Http/ClientRequest.d.ts +16 -16
- package/dist/dts/Http/ClientRequest.d.ts.map +1 -1
- package/dist/dts/Http/ClientResponse.d.ts +3 -3
- package/dist/dts/Http/ClientResponse.d.ts.map +1 -1
- package/dist/dts/Http/Etag.d.ts +2 -2
- package/dist/dts/Http/Etag.d.ts.map +1 -1
- package/dist/dts/Http/IncomingMessage.d.ts +10 -10
- package/dist/dts/Http/IncomingMessage.d.ts.map +1 -1
- package/dist/dts/Http/Middleware.d.ts +3 -3
- package/dist/dts/Http/Multipart.d.ts +18 -19
- package/dist/dts/Http/Multipart.d.ts.map +1 -1
- package/dist/dts/Http/Multiplex.d.ts +4 -4
- package/dist/dts/Http/Multiplex.d.ts.map +1 -1
- package/dist/dts/Http/Platform.d.ts +3 -3
- package/dist/dts/Http/Platform.d.ts.map +1 -1
- package/dist/dts/Http/Router.d.ts +10 -10
- package/dist/dts/Http/Router.d.ts.map +1 -1
- package/dist/dts/Http/Server.d.ts +39 -14
- package/dist/dts/Http/Server.d.ts.map +1 -1
- package/dist/dts/Http/ServerError.d.ts +2 -3
- package/dist/dts/Http/ServerError.d.ts.map +1 -1
- package/dist/dts/Http/ServerRequest.d.ts +9 -9
- package/dist/dts/Http/ServerRequest.d.ts.map +1 -1
- package/dist/dts/Http/ServerResponse.d.ts +7 -7
- package/dist/dts/Http/ServerResponse.d.ts.map +1 -1
- package/dist/dts/Http/UrlParams.d.ts +4 -4
- package/dist/dts/HttpServer.d.ts +24 -0
- package/dist/dts/HttpServer.d.ts.map +1 -1
- package/dist/dts/KeyValueStore.d.ts +21 -21
- package/dist/dts/KeyValueStore.d.ts.map +1 -1
- package/dist/dts/Path.d.ts +3 -3
- package/dist/dts/Path.d.ts.map +1 -1
- package/dist/dts/Runtime.d.ts +1 -1
- package/dist/dts/Runtime.d.ts.map +1 -1
- package/dist/dts/Terminal.d.ts +5 -5
- package/dist/dts/Terminal.d.ts.map +1 -1
- package/dist/dts/Transferable.d.ts +35 -13
- package/dist/dts/Transferable.d.ts.map +1 -1
- package/dist/dts/Worker.d.ts +58 -41
- package/dist/dts/Worker.d.ts.map +1 -1
- package/dist/dts/WorkerError.d.ts +3 -7
- package/dist/dts/WorkerError.d.ts.map +1 -1
- package/dist/dts/WorkerRunner.d.ts +13 -13
- package/dist/dts/WorkerRunner.d.ts.map +1 -1
- package/dist/dts/index.d.ts +61 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/esm/Error.js +3 -0
- package/dist/esm/Error.js.map +1 -1
- package/dist/esm/Http/App.js.map +1 -1
- package/dist/esm/Http/Body.js.map +1 -1
- package/dist/esm/Http/Client.js.map +1 -1
- package/dist/esm/Http/ClientError.js +3 -0
- package/dist/esm/Http/ClientError.js.map +1 -1
- package/dist/esm/Http/ClientResponse.js.map +1 -1
- package/dist/esm/Http/IncomingMessage.js.map +1 -1
- package/dist/esm/Http/Multipart.js.map +1 -1
- package/dist/esm/Http/Server.js +25 -0
- package/dist/esm/Http/Server.js.map +1 -1
- package/dist/esm/Http/ServerError.js.map +1 -1
- package/dist/esm/Http/ServerResponse.js.map +1 -1
- package/dist/esm/HttpServer.js +24 -0
- package/dist/esm/HttpServer.js.map +1 -1
- package/dist/esm/KeyValueStore.js.map +1 -1
- package/dist/esm/Path.js.map +1 -1
- package/dist/esm/Transferable.js +48 -45
- package/dist/esm/Transferable.js.map +1 -1
- package/dist/esm/Worker.js +5 -0
- package/dist/esm/Worker.js.map +1 -1
- package/dist/esm/WorkerError.js +3 -0
- package/dist/esm/WorkerError.js.map +1 -1
- package/dist/esm/index.js +61 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/commandExecutor.js +2 -2
- package/dist/esm/internal/commandExecutor.js.map +1 -1
- package/dist/esm/internal/effectify.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/body.js.map +1 -1
- package/dist/esm/internal/http/client.js +2 -2
- package/dist/esm/internal/http/client.js.map +1 -1
- package/dist/esm/internal/http/etag.js +1 -1
- package/dist/esm/internal/http/etag.js.map +1 -1
- package/dist/esm/internal/http/multipart.js.map +1 -1
- package/dist/esm/internal/http/platform.js +1 -1
- package/dist/esm/internal/http/platform.js.map +1 -1
- package/dist/esm/internal/http/router.js +1 -1
- package/dist/esm/internal/http/router.js.map +1 -1
- package/dist/esm/internal/http/server.js +18 -1
- package/dist/esm/internal/http/server.js.map +1 -1
- package/dist/esm/internal/http/serverRequest.js +1 -1
- package/dist/esm/internal/http/serverRequest.js.map +1 -1
- package/dist/esm/internal/http/serverResponse.js.map +1 -1
- package/dist/esm/internal/keyValueStore.js +2 -2
- package/dist/esm/internal/keyValueStore.js.map +1 -1
- package/dist/esm/internal/path.js +3 -3
- package/dist/esm/internal/path.js.map +1 -1
- package/dist/esm/internal/terminal.js +2 -2
- package/dist/esm/internal/terminal.js.map +1 -1
- package/dist/esm/internal/worker.js +14 -11
- package/dist/esm/internal/worker.js.map +1 -1
- package/dist/esm/internal/workerError.js.map +1 -1
- package/dist/esm/internal/workerRunner.js +15 -12
- package/dist/esm/internal/workerRunner.js.map +1 -1
- package/package.json +11 -3
- package/src/Command.ts +9 -9
- package/src/CommandExecutor.ts +13 -13
- package/src/Effectify.ts +55 -55
- package/src/Error.ts +2 -3
- package/src/FileSystem.ts +35 -35
- package/src/Http/App.ts +5 -5
- package/src/Http/Body.ts +12 -13
- package/src/Http/Client.ts +37 -37
- package/src/Http/ClientError.ts +2 -3
- package/src/Http/ClientRequest.ts +17 -17
- package/src/Http/ClientResponse.ts +8 -5
- package/src/Http/Etag.ts +2 -2
- package/src/Http/IncomingMessage.ts +27 -23
- package/src/Http/Middleware.ts +4 -4
- package/src/Http/Multipart.ts +22 -25
- package/src/Http/Multiplex.ts +4 -4
- package/src/Http/Platform.ts +3 -3
- package/src/Http/Router.ts +16 -16
- package/src/Http/Server.ts +53 -18
- package/src/Http/ServerError.ts +2 -3
- package/src/Http/ServerRequest.ts +22 -22
- package/src/Http/ServerResponse.ts +9 -10
- package/src/Http/UrlParams.ts +6 -6
- package/src/HttpServer.ts +24 -0
- package/src/KeyValueStore.ts +23 -23
- package/src/Path.ts +3 -3
- package/src/Runtime.ts +1 -1
- package/src/Terminal.ts +4 -4
- package/src/Transferable.ts +88 -70
- package/src/Worker.ts +73 -57
- package/src/WorkerError.ts +3 -4
- package/src/WorkerRunner.ts +21 -21
- package/src/index.ts +74 -0
- package/src/internal/command.ts +7 -7
- package/src/internal/commandExecutor.ts +3 -3
- package/src/internal/effectify.ts +1 -1
- package/src/internal/fileSystem.ts +3 -3
- package/src/internal/http/body.ts +12 -12
- package/src/internal/http/client.ts +42 -46
- package/src/internal/http/clientRequest.ts +15 -15
- package/src/internal/http/clientResponse.ts +18 -18
- package/src/internal/http/etag.ts +1 -1
- package/src/internal/http/middleware.ts +4 -4
- package/src/internal/http/multipart.ts +32 -39
- package/src/internal/http/multiplex.ts +5 -5
- package/src/internal/http/platform.ts +2 -2
- package/src/internal/http/router.ts +14 -14
- package/src/internal/http/server.ts +60 -23
- package/src/internal/http/serverRequest.ts +24 -24
- package/src/internal/http/serverResponse.ts +11 -11
- package/src/internal/keyValueStore.ts +7 -7
- package/src/internal/path.ts +4 -4
- package/src/internal/terminal.ts +2 -2
- package/src/internal/worker.ts +55 -39
- package/src/internal/workerError.ts +1 -1
- package/src/internal/workerRunner.ts +55 -30
|
@@ -15,7 +15,7 @@ import * as internalBody from "./body.js"
|
|
|
15
15
|
/** @internal */
|
|
16
16
|
export const TypeId: ServerResponse.TypeId = Symbol.for("@effect/platform/Http/ServerResponse") as ServerResponse.TypeId
|
|
17
17
|
|
|
18
|
-
class ServerResponseImpl extends Effectable.StructuralClass<
|
|
18
|
+
class ServerResponseImpl extends Effectable.StructuralClass<ServerResponse.ServerResponse>
|
|
19
19
|
implements ServerResponse.ServerResponse
|
|
20
20
|
{
|
|
21
21
|
readonly [TypeId]: ServerResponse.TypeId
|
|
@@ -42,7 +42,7 @@ class ServerResponseImpl extends Effectable.StructuralClass<never, never, Server
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
commit(): Effect.Effect<
|
|
45
|
+
commit(): Effect.Effect<ServerResponse.ServerResponse> {
|
|
46
46
|
return Effect.succeed(this)
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -95,7 +95,7 @@ export const text = (body: string, options?: ServerResponse.Options.WithContentT
|
|
|
95
95
|
export const json = (
|
|
96
96
|
body: unknown,
|
|
97
97
|
options?: ServerResponse.Options.WithContent
|
|
98
|
-
): Effect.Effect<
|
|
98
|
+
): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError> =>
|
|
99
99
|
Effect.map(internalBody.json(body), (body) =>
|
|
100
100
|
new ServerResponseImpl(
|
|
101
101
|
options?.status ?? 200,
|
|
@@ -117,14 +117,14 @@ export const unsafeJson = (
|
|
|
117
117
|
)
|
|
118
118
|
|
|
119
119
|
/** @internal */
|
|
120
|
-
export const schemaJson = <
|
|
121
|
-
schema: Schema.Schema<
|
|
120
|
+
export const schemaJson = <A, I, R>(
|
|
121
|
+
schema: Schema.Schema<A, I, R>
|
|
122
122
|
) => {
|
|
123
123
|
const encode = internalBody.jsonSchema(schema)
|
|
124
124
|
return (
|
|
125
125
|
body: A,
|
|
126
126
|
options?: ServerResponse.Options.WithContent
|
|
127
|
-
): Effect.Effect<
|
|
127
|
+
): Effect.Effect<ServerResponse.ServerResponse, Body.BodyError, R> =>
|
|
128
128
|
Effect.map(encode(body), (body) =>
|
|
129
129
|
new ServerResponseImpl(
|
|
130
130
|
options?.status ?? 200,
|
|
@@ -138,7 +138,7 @@ export const schemaJson = <R, I, A>(
|
|
|
138
138
|
export const file = (
|
|
139
139
|
path: string,
|
|
140
140
|
options?: ServerResponse.Options & FileSystem.StreamOptions
|
|
141
|
-
): Effect.Effect<
|
|
141
|
+
): Effect.Effect<ServerResponse.ServerResponse, PlatformError.PlatformError, Platform.Platform> =>
|
|
142
142
|
Effect.flatMap(
|
|
143
143
|
Platform.Platform,
|
|
144
144
|
(platform) => platform.fileResponse(path, options)
|
|
@@ -148,7 +148,7 @@ export const file = (
|
|
|
148
148
|
export const fileWeb = (
|
|
149
149
|
file: Body.Body.FileLike,
|
|
150
150
|
options?: ServerResponse.Options.WithContent & FileSystem.StreamOptions
|
|
151
|
-
): Effect.Effect<
|
|
151
|
+
): Effect.Effect<ServerResponse.ServerResponse, never, Platform.Platform> =>
|
|
152
152
|
Effect.flatMap(
|
|
153
153
|
Platform.Platform,
|
|
154
154
|
(platform) => platform.fileWebResponse(file, options)
|
|
@@ -189,7 +189,7 @@ export const formData = (
|
|
|
189
189
|
|
|
190
190
|
/** @internal */
|
|
191
191
|
export const stream = (
|
|
192
|
-
body: Stream.Stream<
|
|
192
|
+
body: Stream.Stream<Uint8Array, unknown>,
|
|
193
193
|
options?: ServerResponse.Options
|
|
194
194
|
): ServerResponse.ServerResponse =>
|
|
195
195
|
new ServerResponseImpl(
|
|
@@ -268,7 +268,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
|
|
|
268
268
|
if (withoutBody) {
|
|
269
269
|
return new Response(undefined, {
|
|
270
270
|
status: response.status,
|
|
271
|
-
statusText: response.statusText,
|
|
271
|
+
statusText: response.statusText as string,
|
|
272
272
|
headers: response.headers
|
|
273
273
|
})
|
|
274
274
|
}
|
|
@@ -277,7 +277,7 @@ export const toWeb = (response: ServerResponse.ServerResponse, withoutBody = fal
|
|
|
277
277
|
case "Empty": {
|
|
278
278
|
return new Response(undefined, {
|
|
279
279
|
status: response.status,
|
|
280
|
-
statusText: response.statusText,
|
|
280
|
+
statusText: response.statusText as string,
|
|
281
281
|
headers: response.headers
|
|
282
282
|
})
|
|
283
283
|
}
|
|
@@ -14,7 +14,7 @@ export const TypeId: KeyValueStore.TypeId = Symbol.for(
|
|
|
14
14
|
) as KeyValueStore.TypeId
|
|
15
15
|
|
|
16
16
|
/** @internal */
|
|
17
|
-
export const keyValueStoreTag = Context.
|
|
17
|
+
export const keyValueStoreTag = Context.GenericTag<KeyValueStore.KeyValueStore>("@effect/platform/KeyValueStore")
|
|
18
18
|
|
|
19
19
|
/** @internal */
|
|
20
20
|
export const make: (
|
|
@@ -68,9 +68,9 @@ export const SchemaStoreTypeId: KeyValueStore.SchemaStoreTypeId = Symbol.for(
|
|
|
68
68
|
) as KeyValueStore.SchemaStoreTypeId
|
|
69
69
|
|
|
70
70
|
/** @internal */
|
|
71
|
-
const makeSchemaStore = <
|
|
71
|
+
const makeSchemaStore = <A, I, R>(
|
|
72
72
|
store: KeyValueStore.KeyValueStore,
|
|
73
|
-
schema: Schema.Schema<
|
|
73
|
+
schema: Schema.Schema<A, I, R>
|
|
74
74
|
): KeyValueStore.SchemaStore<R, A> => {
|
|
75
75
|
const jsonSchema = Schema.parseJson(schema)
|
|
76
76
|
const parse = Schema.decodeUnknown(jsonSchema)
|
|
@@ -166,11 +166,11 @@ export const layerFileSystem = (directory: string) =>
|
|
|
166
166
|
)
|
|
167
167
|
|
|
168
168
|
/** @internal */
|
|
169
|
-
export const layerSchema = <
|
|
170
|
-
schema: Schema.Schema<
|
|
171
|
-
tagIdentifier
|
|
169
|
+
export const layerSchema = <A, I, R>(
|
|
170
|
+
schema: Schema.Schema<A, I, R>,
|
|
171
|
+
tagIdentifier: string
|
|
172
172
|
) => {
|
|
173
|
-
const tag = Context.
|
|
173
|
+
const tag = Context.GenericTag<KeyValueStore.SchemaStore<R, A>>(tagIdentifier)
|
|
174
174
|
const layer = Layer.effect(tag, Effect.map(keyValueStoreTag, (store) => store.forSchema(schema)))
|
|
175
175
|
return { tag, layer } as const
|
|
176
176
|
}
|
package/src/internal/path.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenericTag } from "effect/Context"
|
|
2
2
|
import * as Effect from "effect/Effect"
|
|
3
3
|
import { identity } from "effect/Function"
|
|
4
4
|
import * as Layer from "effect/Layer"
|
|
5
|
-
import
|
|
5
|
+
import PathB from "path-browserify"
|
|
6
6
|
import { BadArgument } from "../Error.js"
|
|
7
7
|
import type { Path as _Path } from "../Path.js"
|
|
8
8
|
|
|
9
9
|
/** @internal */
|
|
10
|
-
export const Path =
|
|
10
|
+
export const Path = GenericTag<_Path>("@effect/platform/Path")
|
|
11
11
|
|
|
12
12
|
/** @internal */
|
|
13
13
|
export const layer = Layer.succeed(
|
|
@@ -28,7 +28,7 @@ export const layer = Layer.succeed(
|
|
|
28
28
|
* - MIT
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
-
function fromFileUrl(url: URL): Effect.Effect<
|
|
31
|
+
function fromFileUrl(url: URL): Effect.Effect<string, BadArgument> {
|
|
32
32
|
if (url.protocol !== "file:") {
|
|
33
33
|
return Effect.fail(BadArgument({
|
|
34
34
|
module: "Path",
|
package/src/internal/terminal.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GenericTag } from "effect/Context"
|
|
2
2
|
import type * as Terminal from "../Terminal.js"
|
|
3
3
|
|
|
4
4
|
/** @internal */
|
|
5
|
-
export const tag =
|
|
5
|
+
export const tag = GenericTag<Terminal.Terminal>("@effect/platform/Terminal")
|
package/src/internal/worker.ts
CHANGED
|
@@ -39,8 +39,8 @@ export const PlatformWorkerTypeId: Worker.PlatformWorkerTypeId = Symbol.for(
|
|
|
39
39
|
) as Worker.PlatformWorkerTypeId
|
|
40
40
|
|
|
41
41
|
/** @internal */
|
|
42
|
-
export const PlatformWorker = Context.
|
|
43
|
-
|
|
42
|
+
export const PlatformWorker = Context.GenericTag<Worker.PlatformWorker>(
|
|
43
|
+
"@effect/platform/Worker/PlatformWorker"
|
|
44
44
|
)
|
|
45
45
|
|
|
46
46
|
/** @internal */
|
|
@@ -49,8 +49,13 @@ export const WorkerManagerTypeId: Worker.WorkerManagerTypeId = Symbol.for(
|
|
|
49
49
|
) as Worker.WorkerManagerTypeId
|
|
50
50
|
|
|
51
51
|
/** @internal */
|
|
52
|
-
export const WorkerManager = Context.
|
|
53
|
-
|
|
52
|
+
export const WorkerManager = Context.GenericTag<Worker.WorkerManager>(
|
|
53
|
+
"@effect/platform/Worker/WorkerManager"
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
/** @internal */
|
|
57
|
+
export const Spawner = Context.GenericTag<Worker.Spawner, Worker.SpawnerFn>(
|
|
58
|
+
"@effect/platform/Worker/Spawner"
|
|
54
59
|
)
|
|
55
60
|
|
|
56
61
|
/** @internal */
|
|
@@ -64,28 +69,37 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
64
69
|
initialMessage,
|
|
65
70
|
permits = 1,
|
|
66
71
|
queue,
|
|
67
|
-
spawn,
|
|
68
72
|
transfers = (_) => []
|
|
69
73
|
}: Worker.Worker.Options<I>) {
|
|
70
74
|
return Effect.gen(function*(_) {
|
|
75
|
+
const spawn = yield* _(Spawner)
|
|
71
76
|
const id = idCounter++
|
|
72
77
|
let requestIdCounter = 0
|
|
73
78
|
const semaphore = yield* _(Effect.makeSemaphore(permits))
|
|
74
79
|
const requestMap = new Map<
|
|
75
80
|
number,
|
|
76
|
-
readonly [Queue.Queue<Exit.Exit<E | WorkerError
|
|
81
|
+
readonly [Queue.Queue<Exit.Exit<ReadonlyArray<O>, E | WorkerError>>, Deferred.Deferred<void>]
|
|
77
82
|
>()
|
|
78
83
|
const sendQueue = yield* _(Effect.acquireRelease(
|
|
79
84
|
Queue.unbounded<readonly [message: Worker.Worker.Request, transfers?: ReadonlyArray<unknown>]>(),
|
|
80
85
|
Queue.shutdown
|
|
81
86
|
))
|
|
82
87
|
|
|
88
|
+
const collector = Transferable.unsafeMakeCollector()
|
|
89
|
+
const wrappedEncode = encode ?
|
|
90
|
+
((message: I) =>
|
|
91
|
+
Effect.zipRight(
|
|
92
|
+
collector.clear,
|
|
93
|
+
Effect.provideService(encode(message), Transferable.Collector, collector)
|
|
94
|
+
)) :
|
|
95
|
+
Effect.succeed
|
|
96
|
+
|
|
83
97
|
const outbound = queue ?? (yield* _(defaultQueue<I>()))
|
|
84
98
|
yield* _(Effect.addFinalizer(() => outbound.shutdown))
|
|
85
99
|
|
|
86
100
|
yield* _(
|
|
87
101
|
Effect.gen(function*(_) {
|
|
88
|
-
const readyLatch = yield* _(Deferred.make<
|
|
102
|
+
const readyLatch = yield* _(Deferred.make<void>())
|
|
89
103
|
const backing = yield* _(
|
|
90
104
|
platform.spawn<Worker.Worker.Request, Worker.Worker.Response<E, O>>(spawn(id))
|
|
91
105
|
)
|
|
@@ -172,8 +186,8 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
172
186
|
Effect.tap(
|
|
173
187
|
Effect.all([
|
|
174
188
|
Effect.sync(() => requestIdCounter++),
|
|
175
|
-
Queue.unbounded<Exit.Exit<E | WorkerError
|
|
176
|
-
Deferred.make<
|
|
189
|
+
Queue.unbounded<Exit.Exit<ReadonlyArray<O>, E | WorkerError>>(),
|
|
190
|
+
Deferred.make<void>(),
|
|
177
191
|
Effect.map(
|
|
178
192
|
Effect.serviceOption(Tracer.ParentSpan),
|
|
179
193
|
Option.filter((span): span is Tracer.Span => span._tag === "Span")
|
|
@@ -189,8 +203,8 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
189
203
|
const executeRelease = (
|
|
190
204
|
[id, , deferred]: [
|
|
191
205
|
number,
|
|
192
|
-
Queue.Queue<Exit.Exit<E | WorkerError
|
|
193
|
-
Deferred.Deferred<
|
|
206
|
+
Queue.Queue<Exit.Exit<ReadonlyArray<O>, E | WorkerError>>,
|
|
207
|
+
Deferred.Deferred<void>,
|
|
194
208
|
Option.Option<Tracer.Span>
|
|
195
209
|
],
|
|
196
210
|
exit: Exit.Exit<unknown, unknown>
|
|
@@ -211,8 +225,8 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
211
225
|
executeRelease
|
|
212
226
|
),
|
|
213
227
|
([, queue]) => {
|
|
214
|
-
const loop: Channel.Channel<
|
|
215
|
-
|
|
228
|
+
const loop: Channel.Channel<Chunk.Chunk<O>, unknown, E | WorkerError, unknown, void, unknown> = Channel
|
|
229
|
+
.flatMap(
|
|
216
230
|
Queue.take(queue),
|
|
217
231
|
Exit.match({
|
|
218
232
|
onFailure: (cause) => Cause.isEmpty(cause) ? Channel.unit : Channel.failCause(cause),
|
|
@@ -244,8 +258,12 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
244
258
|
)
|
|
245
259
|
return pipe(
|
|
246
260
|
Effect.flatMap(
|
|
247
|
-
|
|
248
|
-
(payload) =>
|
|
261
|
+
wrappedEncode(request),
|
|
262
|
+
(payload) =>
|
|
263
|
+
sendQueue.offer([[id, 0, payload, spanTuple], [
|
|
264
|
+
...transferables,
|
|
265
|
+
...collector.unsafeRead()
|
|
266
|
+
]])
|
|
249
267
|
),
|
|
250
268
|
Effect.catchAllCause((cause) => Queue.offer(result[0], Exit.failCause(cause))),
|
|
251
269
|
Effect.zipRight(Deferred.await(result[1]))
|
|
@@ -278,9 +296,8 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
278
296
|
export const layerManager = Layer.effect(WorkerManager, makeManager)
|
|
279
297
|
|
|
280
298
|
/** @internal */
|
|
281
|
-
export const makePool = <
|
|
282
|
-
<I
|
|
283
|
-
options: Worker.WorkerPool.Options<I, W>
|
|
299
|
+
export const makePool = <I, E, O>(
|
|
300
|
+
options: Worker.WorkerPool.Options<I>
|
|
284
301
|
) =>
|
|
285
302
|
Effect.gen(function*(_) {
|
|
286
303
|
const manager = yield* _(WorkerManager)
|
|
@@ -329,27 +346,22 @@ export const makePool = <W>() =>
|
|
|
329
346
|
})
|
|
330
347
|
|
|
331
348
|
/** @internal */
|
|
332
|
-
export const makePoolLayer = <
|
|
333
|
-
<Tag, I, E, O>(
|
|
349
|
+
export const makePoolLayer = <Tag, I, E, O>(
|
|
334
350
|
tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>,
|
|
335
|
-
options: Worker.WorkerPool.Options<I
|
|
336
|
-
) => Layer.scoped(tag, makePool
|
|
351
|
+
options: Worker.WorkerPool.Options<I>
|
|
352
|
+
) => Layer.scoped(tag, makePool(options))
|
|
337
353
|
|
|
338
354
|
/** @internal */
|
|
339
355
|
export const makeSerialized = <
|
|
340
|
-
I extends Schema.TaggedRequest.Any
|
|
341
|
-
W = unknown
|
|
356
|
+
I extends Schema.TaggedRequest.Any
|
|
342
357
|
>(
|
|
343
|
-
options: Worker.SerializedWorker.Options<I
|
|
344
|
-
): Effect.Effect<Worker.WorkerManager |
|
|
358
|
+
options: Worker.SerializedWorker.Options<I>
|
|
359
|
+
): Effect.Effect<Worker.SerializedWorker<I>, WorkerError, Worker.WorkerManager | Worker.Spawner | Scope.Scope> =>
|
|
345
360
|
Effect.gen(function*(_) {
|
|
346
361
|
const manager = yield* _(WorkerManager)
|
|
347
362
|
const backing = yield* _(
|
|
348
363
|
manager.spawn({
|
|
349
364
|
...options as any,
|
|
350
|
-
transfers(message) {
|
|
351
|
-
return Transferable.get(message)
|
|
352
|
-
},
|
|
353
365
|
encode(message) {
|
|
354
366
|
return Effect.mapError(Serializable.serialize(message as any), (error) => WorkerError("encode", error))
|
|
355
367
|
}
|
|
@@ -380,15 +392,14 @@ export const makeSerialized = <
|
|
|
380
392
|
})
|
|
381
393
|
|
|
382
394
|
/** @internal */
|
|
383
|
-
export const makePoolSerialized = <
|
|
384
|
-
|
|
385
|
-
options: Worker.SerializedWorkerPool.Options<I, W>
|
|
395
|
+
export const makePoolSerialized = <I extends Schema.TaggedRequest.Any>(
|
|
396
|
+
options: Worker.SerializedWorkerPool.Options<I>
|
|
386
397
|
) =>
|
|
387
398
|
Effect.gen(function*(_) {
|
|
388
399
|
const manager = yield* _(WorkerManager)
|
|
389
400
|
const workers = new Set<Worker.SerializedWorker<I>>()
|
|
390
401
|
const acquire = pipe(
|
|
391
|
-
makeSerialized<I
|
|
402
|
+
makeSerialized<I>(options),
|
|
392
403
|
Effect.tap((worker) => Effect.sync(() => workers.add(worker))),
|
|
393
404
|
Effect.tap((worker) => Effect.addFinalizer(() => Effect.sync(() => workers.delete(worker)))),
|
|
394
405
|
options.onCreate ? Effect.tap(options.onCreate) : identity,
|
|
@@ -432,9 +443,14 @@ export const makePoolSerialized = <W>() =>
|
|
|
432
443
|
})
|
|
433
444
|
|
|
434
445
|
/** @internal */
|
|
435
|
-
export const makePoolSerializedLayer =
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
446
|
+
export const makePoolSerializedLayer = <Tag, I extends Schema.TaggedRequest.Any>(
|
|
447
|
+
tag: Context.Tag<Tag, Worker.SerializedWorkerPool<I>>,
|
|
448
|
+
options: Worker.SerializedWorkerPool.Options<I>
|
|
449
|
+
) => Layer.scoped(tag, makePoolSerialized(options))
|
|
450
|
+
|
|
451
|
+
/** @internal */
|
|
452
|
+
export const layerSpawner = <W = unknown>(spawner: Worker.SpawnerFn<W>) =>
|
|
453
|
+
Layer.succeed(
|
|
454
|
+
Spawner,
|
|
455
|
+
spawner
|
|
456
|
+
)
|
|
@@ -10,7 +10,7 @@ export const WorkerErrorTypeId: WorkerError_.WorkerErrorTypeId = Symbol.for(
|
|
|
10
10
|
export const WorkerError = (
|
|
11
11
|
reason: WorkerError_.WorkerError["reason"],
|
|
12
12
|
error: unknown,
|
|
13
|
-
stack?: string
|
|
13
|
+
stack?: string | undefined
|
|
14
14
|
): WorkerError_.WorkerError =>
|
|
15
15
|
Data.struct({
|
|
16
16
|
[WorkerErrorTypeId]: WorkerErrorTypeId,
|
|
@@ -25,13 +25,13 @@ export const PlatformRunnerTypeId: WorkerRunner.PlatformRunnerTypeId = Symbol.fo
|
|
|
25
25
|
) as WorkerRunner.PlatformRunnerTypeId
|
|
26
26
|
|
|
27
27
|
/** @internal */
|
|
28
|
-
export const PlatformRunner = Context.
|
|
29
|
-
|
|
28
|
+
export const PlatformRunner = Context.GenericTag<WorkerRunner.PlatformRunner>(
|
|
29
|
+
"@effect/platform/Runner/PlatformRunner"
|
|
30
30
|
)
|
|
31
31
|
|
|
32
32
|
/** @internal */
|
|
33
33
|
export const make = <I, R, E, O>(
|
|
34
|
-
process: (request: I) => Stream.Stream<
|
|
34
|
+
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
35
35
|
options?: WorkerRunner.Runner.Options<I, E, O>
|
|
36
36
|
) =>
|
|
37
37
|
Effect.gen(function*(_) {
|
|
@@ -46,12 +46,12 @@ export const make = <I, R, E, O>(
|
|
|
46
46
|
platform.start<Worker.Worker.Request<I>, Worker.Worker.Response<E>>(shutdown),
|
|
47
47
|
Scope.extend(scope)
|
|
48
48
|
)
|
|
49
|
-
const fiberMap = new Map<number, Fiber.Fiber<
|
|
49
|
+
const fiberMap = new Map<number, Fiber.Fiber<void>>()
|
|
50
50
|
|
|
51
51
|
yield* _(
|
|
52
52
|
Queue.take(backing.queue),
|
|
53
53
|
options?.decode ?
|
|
54
|
-
Effect.flatMap((req): Effect.Effect<
|
|
54
|
+
Effect.flatMap((req): Effect.Effect<Worker.Worker.Request<I>, WorkerError.WorkerError> => {
|
|
55
55
|
if (req[1] === 1) {
|
|
56
56
|
return Effect.succeed(req)
|
|
57
57
|
}
|
|
@@ -68,26 +68,41 @@ export const make = <I, R, E, O>(
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
const stream = process(req[2])
|
|
71
|
+
const collector = Transferable.unsafeMakeCollector()
|
|
71
72
|
|
|
72
73
|
let effect = Effect.isEffect(stream) ?
|
|
73
74
|
Effect.matchCauseEffect(stream, {
|
|
74
75
|
onFailure: (cause) =>
|
|
75
76
|
Either.match(Cause.failureOrCause(cause), {
|
|
76
77
|
onLeft: (error) => {
|
|
77
|
-
const transfers = options?.transfers ? options.transfers(error) :
|
|
78
|
+
const transfers = options?.transfers ? options.transfers(error) : []
|
|
78
79
|
return pipe(
|
|
79
|
-
options?.encodeError
|
|
80
|
-
|
|
80
|
+
options?.encodeError
|
|
81
|
+
? Effect.provideService(options.encodeError(req[2], error), Transferable.Collector, collector)
|
|
82
|
+
: Effect.succeed(error),
|
|
83
|
+
Effect.flatMap((payload) =>
|
|
84
|
+
backing.send([id, 2, payload as any], [
|
|
85
|
+
...transfers,
|
|
86
|
+
...collector.unsafeRead()
|
|
87
|
+
])
|
|
88
|
+
),
|
|
81
89
|
Effect.catchAllCause((cause) => backing.send([id, 3, Cause.squash(cause)]))
|
|
82
90
|
)
|
|
83
91
|
},
|
|
84
92
|
onRight: (cause) => backing.send([id, 3, Cause.squash(cause)])
|
|
85
93
|
}),
|
|
86
94
|
onSuccess: (data) => {
|
|
87
|
-
const transfers = options?.transfers ? options.transfers(data) :
|
|
95
|
+
const transfers = options?.transfers ? options.transfers(data) : []
|
|
88
96
|
return pipe(
|
|
89
|
-
options?.encodeOutput
|
|
90
|
-
|
|
97
|
+
options?.encodeOutput
|
|
98
|
+
? Effect.provideService(options.encodeOutput(req[2], data), Transferable.Collector, collector)
|
|
99
|
+
: Effect.succeed(data),
|
|
100
|
+
Effect.flatMap((payload) =>
|
|
101
|
+
backing.send([id, 0, [payload]], [
|
|
102
|
+
...transfers,
|
|
103
|
+
...collector.unsafeRead()
|
|
104
|
+
])
|
|
105
|
+
),
|
|
91
106
|
Effect.catchAllCause((cause) => backing.send([id, 3, Cause.squash(cause)]))
|
|
92
107
|
)
|
|
93
108
|
}
|
|
@@ -103,7 +118,8 @@ export const make = <I, R, E, O>(
|
|
|
103
118
|
}
|
|
104
119
|
|
|
105
120
|
const transfers: Array<unknown> = []
|
|
106
|
-
|
|
121
|
+
collector.unsafeClear()
|
|
122
|
+
return pipe(
|
|
107
123
|
Effect.forEach(data, (data) => {
|
|
108
124
|
if (options?.transfers) {
|
|
109
125
|
for (const option of options.transfers(data)) {
|
|
@@ -112,7 +128,11 @@ export const make = <I, R, E, O>(
|
|
|
112
128
|
}
|
|
113
129
|
return Effect.orDie(options.encodeOutput!(req[2], data))
|
|
114
130
|
}),
|
|
115
|
-
(
|
|
131
|
+
Effect.provideService(Transferable.Collector, collector),
|
|
132
|
+
Effect.flatMap((payload) => {
|
|
133
|
+
collector.unsafeRead().forEach((transfer) => transfers.push(transfer))
|
|
134
|
+
return backing.send([id, 0, payload], transfers)
|
|
135
|
+
})
|
|
116
136
|
)
|
|
117
137
|
}),
|
|
118
138
|
Stream.runDrain,
|
|
@@ -120,10 +140,18 @@ export const make = <I, R, E, O>(
|
|
|
120
140
|
onFailure: (cause) =>
|
|
121
141
|
Either.match(Cause.failureOrCause(cause), {
|
|
122
142
|
onLeft: (error) => {
|
|
123
|
-
const transfers = options?.transfers ? options.transfers(error) :
|
|
143
|
+
const transfers = options?.transfers ? options.transfers(error) : []
|
|
144
|
+
collector.unsafeClear()
|
|
124
145
|
return pipe(
|
|
125
|
-
options?.encodeError
|
|
126
|
-
|
|
146
|
+
options?.encodeError
|
|
147
|
+
? Effect.provideService(options.encodeError(req[2], error), Transferable.Collector, collector)
|
|
148
|
+
: Effect.succeed(error),
|
|
149
|
+
Effect.flatMap((payload) =>
|
|
150
|
+
backing.send([id, 2, payload as any], [
|
|
151
|
+
...transfers,
|
|
152
|
+
...collector.unsafeRead()
|
|
153
|
+
])
|
|
154
|
+
),
|
|
127
155
|
Effect.catchAllCause((cause) => backing.send([id, 3, Cause.squash(cause)]))
|
|
128
156
|
)
|
|
129
157
|
},
|
|
@@ -158,9 +186,9 @@ export const make = <I, R, E, O>(
|
|
|
158
186
|
|
|
159
187
|
/** @internal */
|
|
160
188
|
export const layer = <I, R, E, O>(
|
|
161
|
-
process: (request: I) => Stream.Stream<
|
|
189
|
+
process: (request: I) => Stream.Stream<O, E, R> | Effect.Effect<O, E, R>,
|
|
162
190
|
options?: WorkerRunner.Runner.Options<I, E, O>
|
|
163
|
-
): Layer.Layer<WorkerRunner.PlatformRunner | R
|
|
191
|
+
): Layer.Layer<never, WorkerError.WorkerError, WorkerRunner.PlatformRunner | R> =>
|
|
164
192
|
Layer.scopedDiscard(make(process, options))
|
|
165
193
|
|
|
166
194
|
/** @internal */
|
|
@@ -170,20 +198,20 @@ export const makeSerialized = <
|
|
|
170
198
|
A extends Schema.TaggedRequest.Any,
|
|
171
199
|
const Handlers extends WorkerRunner.SerializedRunner.Handlers<A>
|
|
172
200
|
>(
|
|
173
|
-
schema: Schema.Schema<
|
|
201
|
+
schema: Schema.Schema<A, I, R>,
|
|
174
202
|
handlers: Handlers
|
|
175
203
|
): Effect.Effect<
|
|
204
|
+
void,
|
|
205
|
+
WorkerError.WorkerError,
|
|
176
206
|
| R
|
|
177
207
|
| WorkerRunner.PlatformRunner
|
|
178
208
|
| Scope.Scope
|
|
179
|
-
| WorkerRunner.SerializedRunner.HandlersContext<Handlers
|
|
180
|
-
WorkerError.WorkerError,
|
|
181
|
-
void
|
|
209
|
+
| WorkerRunner.SerializedRunner.HandlersContext<Handlers>
|
|
182
210
|
> =>
|
|
183
211
|
Effect.gen(function*(_) {
|
|
184
212
|
const scope = yield* _(Effect.scope)
|
|
185
213
|
let context = Context.empty() as Context.Context<any>
|
|
186
|
-
const parseRequest = Schema.decodeUnknown(schema) as (_: unknown) => Effect.Effect<
|
|
214
|
+
const parseRequest = Schema.decodeUnknown(schema) as (_: unknown) => Effect.Effect<A>
|
|
187
215
|
|
|
188
216
|
return yield* _(make((request: A) => {
|
|
189
217
|
const result = (handlers as any)[request._tag](request)
|
|
@@ -197,9 +225,6 @@ export const makeSerialized = <
|
|
|
197
225
|
}
|
|
198
226
|
return Stream.provideContext(result as any, context)
|
|
199
227
|
}, {
|
|
200
|
-
transfers(message) {
|
|
201
|
-
return Transferable.get(message)
|
|
202
|
-
},
|
|
203
228
|
decode(message) {
|
|
204
229
|
return Effect.mapError(
|
|
205
230
|
parseRequest(message),
|
|
@@ -228,12 +253,12 @@ export const layerSerialized = <
|
|
|
228
253
|
A extends Schema.TaggedRequest.Any,
|
|
229
254
|
const Handlers extends WorkerRunner.SerializedRunner.Handlers<A>
|
|
230
255
|
>(
|
|
231
|
-
schema: Schema.Schema<
|
|
256
|
+
schema: Schema.Schema<A, I, R>,
|
|
232
257
|
handlers: Handlers
|
|
233
258
|
): Layer.Layer<
|
|
259
|
+
never,
|
|
260
|
+
WorkerError.WorkerError,
|
|
234
261
|
| R
|
|
235
262
|
| WorkerRunner.PlatformRunner
|
|
236
|
-
| WorkerRunner.SerializedRunner.HandlersContext<Handlers
|
|
237
|
-
WorkerError.WorkerError,
|
|
238
|
-
never
|
|
263
|
+
| WorkerRunner.SerializedRunner.HandlersContext<Handlers>
|
|
239
264
|
> => Layer.scopedDiscard(makeSerialized(schema, handlers))
|