@effect/platform-node 0.53.25 → 0.54.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/internal/httpClient.js +12 -12
- package/dist/cjs/internal/httpClient.js.map +1 -1
- package/dist/cjs/internal/httpClientUndici.js +14 -14
- package/dist/cjs/internal/httpClientUndici.js.map +1 -1
- package/dist/cjs/internal/httpServer.js +13 -13
- package/dist/cjs/internal/httpServer.js.map +1 -1
- package/dist/cjs/internal/worker.js +43 -49
- package/dist/cjs/internal/worker.js.map +1 -1
- package/dist/cjs/internal/workerRunner.js +33 -26
- package/dist/cjs/internal/workerRunner.js.map +1 -1
- package/dist/esm/internal/httpClient.js +12 -12
- package/dist/esm/internal/httpClient.js.map +1 -1
- package/dist/esm/internal/httpClientUndici.js +14 -14
- package/dist/esm/internal/httpClientUndici.js.map +1 -1
- package/dist/esm/internal/httpServer.js +13 -13
- package/dist/esm/internal/httpServer.js.map +1 -1
- package/dist/esm/internal/worker.js +43 -49
- package/dist/esm/internal/worker.js.map +1 -1
- package/dist/esm/internal/workerRunner.js +33 -26
- package/dist/esm/internal/workerRunner.js.map +1 -1
- package/package.json +5 -5
- package/src/internal/httpClient.ts +12 -12
- package/src/internal/httpClientUndici.ts +14 -14
- package/src/internal/httpServer.ts +13 -13
- package/src/internal/worker.ts +41 -43
- package/src/internal/workerRunner.ts +39 -35
|
@@ -1,58 +1,52 @@
|
|
|
1
1
|
import * as Worker from "@effect/platform/Worker";
|
|
2
2
|
import { WorkerError } from "@effect/platform/WorkerError";
|
|
3
|
+
import * as Deferred from "effect/Deferred";
|
|
3
4
|
import * as Effect from "effect/Effect";
|
|
4
|
-
import
|
|
5
|
+
import * as Exit from "effect/Exit";
|
|
5
6
|
import * as Layer from "effect/Layer";
|
|
6
|
-
import * as
|
|
7
|
-
const platformWorkerImpl = /*#__PURE__*/Worker.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
});
|
|
16
|
-
worker.postMessage([1]);
|
|
17
|
-
}), Effect.timeout(5000), Effect.orElse(() => Effect.sync(() => worker.terminate())))));
|
|
18
|
-
const queue = yield* _(Queue.unbounded());
|
|
19
|
-
yield* _(Effect.addFinalizer(() => Queue.shutdown(queue)));
|
|
20
|
-
const fiber = yield* _(Effect.async(resume => {
|
|
21
|
-
worker.on("message", message => {
|
|
22
|
-
queue.unsafeOffer(message);
|
|
23
|
-
});
|
|
24
|
-
worker.on("messageerror", error => {
|
|
25
|
-
resume(new WorkerError({
|
|
26
|
-
reason: "decode",
|
|
27
|
-
error
|
|
28
|
-
}));
|
|
29
|
-
});
|
|
30
|
-
worker.on("error", error => {
|
|
31
|
-
resume(new WorkerError({
|
|
32
|
-
reason: "unknown",
|
|
33
|
-
error
|
|
34
|
-
}));
|
|
35
|
-
});
|
|
36
|
-
worker.on("exit", code => {
|
|
37
|
-
resume(new WorkerError({
|
|
38
|
-
reason: "unknown",
|
|
39
|
-
error: new Error(`exited with code ${code}`)
|
|
40
|
-
}));
|
|
41
|
-
});
|
|
42
|
-
}), Effect.interruptible, Effect.forkScoped);
|
|
43
|
-
const send = (message, transfers) => Effect.try({
|
|
44
|
-
try: () => worker.postMessage([0, message], transfers),
|
|
45
|
-
catch: error => new WorkerError({
|
|
46
|
-
reason: "send",
|
|
47
|
-
error
|
|
48
|
-
})
|
|
7
|
+
import * as Scope from "effect/Scope";
|
|
8
|
+
const platformWorkerImpl = /*#__PURE__*/Worker.makePlatform()({
|
|
9
|
+
setup({
|
|
10
|
+
scope,
|
|
11
|
+
worker
|
|
12
|
+
}) {
|
|
13
|
+
return Effect.flatMap(Deferred.make(), exitDeferred => {
|
|
14
|
+
worker.on("exit", () => {
|
|
15
|
+
Deferred.unsafeDone(exitDeferred, Exit.void);
|
|
49
16
|
});
|
|
50
|
-
return {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
17
|
+
return Effect.as(Scope.addFinalizer(scope, Effect.suspend(() => {
|
|
18
|
+
worker.postMessage([1]);
|
|
19
|
+
return Deferred.await(exitDeferred);
|
|
20
|
+
}).pipe(Effect.timeout(5000), Effect.catchAllCause(() => Effect.sync(() => worker.terminate())))), worker);
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
listen({
|
|
24
|
+
deferred,
|
|
25
|
+
emit,
|
|
26
|
+
port
|
|
27
|
+
}) {
|
|
28
|
+
port.on("message", message => {
|
|
29
|
+
emit(message);
|
|
30
|
+
});
|
|
31
|
+
port.on("messageerror", cause => {
|
|
32
|
+
Deferred.unsafeDone(deferred, new WorkerError({
|
|
33
|
+
reason: "decode",
|
|
34
|
+
cause
|
|
35
|
+
}));
|
|
36
|
+
});
|
|
37
|
+
port.on("error", cause => {
|
|
38
|
+
Deferred.unsafeDone(deferred, new WorkerError({
|
|
39
|
+
reason: "unknown",
|
|
40
|
+
cause
|
|
41
|
+
}));
|
|
42
|
+
});
|
|
43
|
+
port.on("exit", code => {
|
|
44
|
+
Deferred.unsafeDone(deferred, new WorkerError({
|
|
45
|
+
reason: "unknown",
|
|
46
|
+
cause: new Error(`exited with code ${code}`)
|
|
47
|
+
}));
|
|
55
48
|
});
|
|
49
|
+
return Effect.void;
|
|
56
50
|
}
|
|
57
51
|
});
|
|
58
52
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","names":["Worker","WorkerError","Effect","
|
|
1
|
+
{"version":3,"file":"worker.js","names":["Worker","WorkerError","Deferred","Effect","Exit","Layer","Scope","platformWorkerImpl","makePlatform","setup","scope","worker","flatMap","make","exitDeferred","on","unsafeDone","void","as","addFinalizer","suspend","postMessage","await","pipe","timeout","catchAllCause","sync","terminate","listen","deferred","emit","port","message","cause","reason","code","Error","layerWorker","succeed","PlatformWorker","layerManager","provide","layer","spawn","merge","layerSpawner"],"sources":["../../../src/internal/worker.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,yBAAyB;AACjD,SAASC,WAAW,QAAQ,8BAA8B;AAC1D,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AAGrC,MAAMC,kBAAkB,gBAAGP,MAAM,CAACQ,YAAY,EAAwB,CAAC;EACrEC,KAAKA,CAAC;IAAEC,KAAK;IAAEC;EAAM,CAAE;IACrB,OAAOR,MAAM,CAACS,OAAO,CAACV,QAAQ,CAACW,IAAI,EAAQ,EAAGC,YAAY,IAAI;MAC5DH,MAAM,CAACI,EAAE,CAAC,MAAM,EAAE,MAAK;QACrBb,QAAQ,CAACc,UAAU,CAACF,YAAY,EAAEV,IAAI,CAACa,IAAI,CAAC;MAC9C,CAAC,CAAC;MACF,OAAOd,MAAM,CAACe,EAAE,CACdZ,KAAK,CAACa,YAAY,CAChBT,KAAK,EACLP,MAAM,CAACiB,OAAO,CAAC,MAAK;QAClBT,MAAM,CAACU,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,OAAOnB,QAAQ,CAACoB,KAAK,CAACR,YAAY,CAAC;MACrC,CAAC,CAAC,CAACS,IAAI,CACLpB,MAAM,CAACqB,OAAO,CAAC,IAAI,CAAC,EACpBrB,MAAM,CAACsB,aAAa,CAAC,MAAMtB,MAAM,CAACuB,IAAI,CAAC,MAAMf,MAAM,CAACgB,SAAS,EAAE,CAAC,CAAC,CAClE,CACF,EACDhB,MAAM,CACP;IACH,CAAC,CAAC;EACJ,CAAC;EACDiB,MAAMA,CAAC;IAAEC,QAAQ;IAAEC,IAAI;IAAEC;EAAI,CAAE;IAC7BA,IAAI,CAAChB,EAAE,CAAC,SAAS,EAAGiB,OAAO,IAAI;MAC7BF,IAAI,CAACE,OAAO,CAAC;IACf,CAAC,CAAC;IACFD,IAAI,CAAChB,EAAE,CAAC,cAAc,EAAGkB,KAAK,IAAI;MAChC/B,QAAQ,CAACc,UAAU,CACjBa,QAAQ,EACR,IAAI5B,WAAW,CAAC;QAAEiC,MAAM,EAAE,QAAQ;QAAED;MAAK,CAAE,CAAC,CAC7C;IACH,CAAC,CAAC;IACFF,IAAI,CAAChB,EAAE,CAAC,OAAO,EAAGkB,KAAK,IAAI;MACzB/B,QAAQ,CAACc,UAAU,CAACa,QAAQ,EAAE,IAAI5B,WAAW,CAAC;QAAEiC,MAAM,EAAE,SAAS;QAAED;MAAK,CAAE,CAAC,CAAC;IAC9E,CAAC,CAAC;IACFF,IAAI,CAAChB,EAAE,CAAC,MAAM,EAAGoB,IAAI,IAAI;MACvBjC,QAAQ,CAACc,UAAU,CACjBa,QAAQ,EACR,IAAI5B,WAAW,CAAC;QAAEiC,MAAM,EAAE,SAAS;QAAED,KAAK,EAAE,IAAIG,KAAK,CAAC,oBAAoBD,IAAI,EAAE;MAAC,CAAE,CAAC,CACrF;IACH,CAAC,CAAC;IACF,OAAOhC,MAAM,CAACc,IAAI;EACpB;CACD,CAAC;AAEF;AACA,OAAO,MAAMoB,WAAW,gBAAGhC,KAAK,CAACiC,OAAO,CAACtC,MAAM,CAACuC,cAAc,EAAEhC,kBAAkB,CAAC;AAEnF;AACA,OAAO,MAAMiC,YAAY,gBAAGnC,KAAK,CAACoC,OAAO,CAACzC,MAAM,CAACwC,YAAY,EAAEH,WAAW,CAAC;AAE3E;AACA,OAAO,MAAMK,KAAK,GAAIC,KAA2C,IAC/DtC,KAAK,CAACuC,KAAK,CACTJ,YAAY,EACZxC,MAAM,CAAC6C,YAAY,CAACF,KAAK,CAAC,CAC3B","ignoreList":[]}
|
|
@@ -1,52 +1,59 @@
|
|
|
1
1
|
import { WorkerError } from "@effect/platform/WorkerError";
|
|
2
2
|
import * as Runner from "@effect/platform/WorkerRunner";
|
|
3
|
-
import * as
|
|
3
|
+
import * as Deferred from "effect/Deferred";
|
|
4
4
|
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Exit from "effect/Exit";
|
|
6
|
+
import * as FiberId from "effect/FiberId";
|
|
7
|
+
import * as FiberSet from "effect/FiberSet";
|
|
5
8
|
import * as Layer from "effect/Layer";
|
|
6
|
-
import * as
|
|
7
|
-
import * as Schedule from "effect/Schedule";
|
|
9
|
+
import * as Scope from "effect/Scope";
|
|
8
10
|
import * as WorkerThreads from "node:worker_threads";
|
|
9
11
|
const platformRunnerImpl = /*#__PURE__*/Runner.PlatformRunner.of({
|
|
10
12
|
[Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
|
|
11
|
-
start(
|
|
12
|
-
return Effect.gen(function* (
|
|
13
|
+
start() {
|
|
14
|
+
return Effect.gen(function* () {
|
|
13
15
|
if (!WorkerThreads.parentPort) {
|
|
14
|
-
return yield*
|
|
16
|
+
return yield* new WorkerError({
|
|
15
17
|
reason: "spawn",
|
|
16
|
-
|
|
17
|
-
})
|
|
18
|
+
cause: new Error("not in a worker thread")
|
|
19
|
+
});
|
|
18
20
|
}
|
|
19
21
|
const port = WorkerThreads.parentPort;
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
+
const send = (_portId, message, transfers) => Effect.sync(() => port.postMessage([1, message], transfers));
|
|
23
|
+
const run = handler => Effect.uninterruptibleMask(restore => Scope.make().pipe(Effect.bindTo("scope"), Effect.bind("fiberSet", ({
|
|
24
|
+
scope
|
|
25
|
+
}) => FiberSet.make().pipe(Scope.extend(scope))), Effect.bind("runFork", ({
|
|
26
|
+
fiberSet
|
|
27
|
+
}) => FiberSet.runtime(fiberSet)()), Effect.tap(({
|
|
28
|
+
fiberSet,
|
|
29
|
+
runFork
|
|
30
|
+
}) => {
|
|
22
31
|
port.on("message", message => {
|
|
23
32
|
if (message[0] === 0) {
|
|
24
|
-
|
|
33
|
+
runFork(restore(handler(0, message[1])));
|
|
25
34
|
} else {
|
|
26
|
-
|
|
35
|
+
Deferred.unsafeDone(fiberSet.deferred, Exit.interrupt(FiberId.none));
|
|
27
36
|
}
|
|
28
37
|
});
|
|
29
|
-
port.on("messageerror",
|
|
30
|
-
|
|
38
|
+
port.on("messageerror", cause => {
|
|
39
|
+
Deferred.unsafeDone(fiberSet.deferred, new WorkerError({
|
|
31
40
|
reason: "decode",
|
|
32
|
-
|
|
41
|
+
cause
|
|
33
42
|
}));
|
|
34
43
|
});
|
|
35
|
-
port.on("error",
|
|
36
|
-
|
|
44
|
+
port.on("error", cause => {
|
|
45
|
+
Deferred.unsafeDone(fiberSet.deferred, new WorkerError({
|
|
37
46
|
reason: "unknown",
|
|
38
|
-
|
|
47
|
+
cause
|
|
39
48
|
}));
|
|
40
49
|
});
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// ready
|
|
47
|
-
port.postMessage([0]);
|
|
50
|
+
port.postMessage([0]);
|
|
51
|
+
}), Effect.flatMap(({
|
|
52
|
+
fiberSet,
|
|
53
|
+
scope
|
|
54
|
+
}) => restore(FiberSet.join(fiberSet)).pipe(Effect.ensuring(Scope.close(scope, Exit.void))))));
|
|
48
55
|
return {
|
|
49
|
-
|
|
56
|
+
run,
|
|
50
57
|
send
|
|
51
58
|
};
|
|
52
59
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workerRunner.js","names":["WorkerError","Runner","
|
|
1
|
+
{"version":3,"file":"workerRunner.js","names":["WorkerError","Runner","Deferred","Effect","Exit","FiberId","FiberSet","Layer","Scope","WorkerThreads","platformRunnerImpl","PlatformRunner","of","PlatformRunnerTypeId","start","gen","parentPort","reason","cause","Error","port","send","_portId","message","transfers","sync","postMessage","run","handler","uninterruptibleMask","restore","make","pipe","bindTo","bind","scope","extend","fiberSet","runtime","tap","runFork","on","unsafeDone","deferred","interrupt","none","flatMap","join","ensuring","close","void","layer","succeed"],"sources":["../../../src/internal/workerRunner.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/platform-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.54.0",
|
|
4
4
|
"description": "Platform specific implementations for the Node.js runtime",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"mime": "^3.0.0",
|
|
14
14
|
"undici": "^6.19.2",
|
|
15
|
-
"ws": "^8.
|
|
16
|
-
"@effect/platform-node-shared": "^0.
|
|
15
|
+
"ws": "^8.18.0",
|
|
16
|
+
"@effect/platform-node-shared": "^0.9.0"
|
|
17
17
|
},
|
|
18
18
|
"peerDependencies": {
|
|
19
|
-
"@effect/platform": "^0.
|
|
20
|
-
"effect": "^3.5.
|
|
19
|
+
"@effect/platform": "^0.59.0",
|
|
20
|
+
"effect": "^3.5.4"
|
|
21
21
|
},
|
|
22
22
|
"publishConfig": {
|
|
23
23
|
"provenance": true
|
|
@@ -102,27 +102,27 @@ const sendBody = (
|
|
|
102
102
|
|
|
103
103
|
return Effect.tryPromise({
|
|
104
104
|
try: () => pipeline(Readable.fromWeb(response.body! as any), nodeRequest),
|
|
105
|
-
catch: (
|
|
105
|
+
catch: (cause) =>
|
|
106
106
|
new Error.RequestError({
|
|
107
107
|
request,
|
|
108
108
|
reason: "Transport",
|
|
109
|
-
|
|
109
|
+
cause
|
|
110
110
|
})
|
|
111
111
|
})
|
|
112
112
|
}
|
|
113
113
|
case "Stream": {
|
|
114
114
|
return Stream.run(
|
|
115
|
-
Stream.mapError(body.stream, (
|
|
115
|
+
Stream.mapError(body.stream, (cause) =>
|
|
116
116
|
new Error.RequestError({
|
|
117
117
|
request,
|
|
118
118
|
reason: "Encode",
|
|
119
|
-
|
|
119
|
+
cause
|
|
120
120
|
})),
|
|
121
|
-
NodeSink.fromWritable(() => nodeRequest, (
|
|
121
|
+
NodeSink.fromWritable(() => nodeRequest, (cause) =>
|
|
122
122
|
new Error.RequestError({
|
|
123
123
|
request,
|
|
124
124
|
reason: "Transport",
|
|
125
|
-
|
|
125
|
+
cause
|
|
126
126
|
}))
|
|
127
127
|
)
|
|
128
128
|
}
|
|
@@ -131,12 +131,12 @@ const sendBody = (
|
|
|
131
131
|
|
|
132
132
|
const waitForResponse = (nodeRequest: Http.ClientRequest, request: ClientRequest.HttpClientRequest) =>
|
|
133
133
|
Effect.async<Http.IncomingMessage, Error.RequestError>((resume) => {
|
|
134
|
-
function onError(
|
|
134
|
+
function onError(cause: Error) {
|
|
135
135
|
resume(Effect.fail(
|
|
136
136
|
new Error.RequestError({
|
|
137
137
|
request,
|
|
138
138
|
reason: "Transport",
|
|
139
|
-
|
|
139
|
+
cause
|
|
140
140
|
})
|
|
141
141
|
))
|
|
142
142
|
}
|
|
@@ -158,12 +158,12 @@ const waitForResponse = (nodeRequest: Http.ClientRequest, request: ClientRequest
|
|
|
158
158
|
|
|
159
159
|
const waitForFinish = (nodeRequest: Http.ClientRequest, request: ClientRequest.HttpClientRequest) =>
|
|
160
160
|
Effect.async<void, Error.RequestError>((resume) => {
|
|
161
|
-
function onError(
|
|
161
|
+
function onError(cause: Error) {
|
|
162
162
|
resume(Effect.fail(
|
|
163
163
|
new Error.RequestError({
|
|
164
164
|
request,
|
|
165
165
|
reason: "Transport",
|
|
166
|
-
|
|
166
|
+
cause
|
|
167
167
|
})
|
|
168
168
|
))
|
|
169
169
|
}
|
|
@@ -190,12 +190,12 @@ class ClientResponseImpl extends HttpIncomingMessageImpl<Error.ResponseError>
|
|
|
190
190
|
readonly request: ClientRequest.HttpClientRequest,
|
|
191
191
|
source: Http.IncomingMessage
|
|
192
192
|
) {
|
|
193
|
-
super(source, (
|
|
193
|
+
super(source, (cause) =>
|
|
194
194
|
new Error.ResponseError({
|
|
195
195
|
request,
|
|
196
196
|
response: this,
|
|
197
197
|
reason: "Decode",
|
|
198
|
-
|
|
198
|
+
cause
|
|
199
199
|
}))
|
|
200
200
|
this[ClientResponse.TypeId] = ClientResponse.TypeId
|
|
201
201
|
}
|
|
@@ -75,11 +75,11 @@ export const make = (dispatcher: Undici.Dispatcher): Client.HttpClient.Default =
|
|
|
75
75
|
bodyTimeout: 0,
|
|
76
76
|
throwOnError: false
|
|
77
77
|
}),
|
|
78
|
-
catch: (
|
|
78
|
+
catch: (cause) =>
|
|
79
79
|
new Error.RequestError({
|
|
80
80
|
request,
|
|
81
81
|
reason: "Transport",
|
|
82
|
-
|
|
82
|
+
cause
|
|
83
83
|
})
|
|
84
84
|
})
|
|
85
85
|
),
|
|
@@ -152,24 +152,24 @@ class ClientResponseImpl extends Inspectable.Class implements ClientResponse.Htt
|
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
get stream(): Stream.Stream<Uint8Array, Error.ResponseError> {
|
|
155
|
-
return NodeStream.fromReadable(() => this.source.body, (
|
|
155
|
+
return NodeStream.fromReadable(() => this.source.body, (cause) =>
|
|
156
156
|
new Error.ResponseError({
|
|
157
157
|
request: this.request,
|
|
158
158
|
response: this,
|
|
159
159
|
reason: "Decode",
|
|
160
|
-
|
|
160
|
+
cause
|
|
161
161
|
}))
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
get json(): Effect.Effect<unknown, Error.ResponseError> {
|
|
165
165
|
return Effect.tryMap(this.text, {
|
|
166
166
|
try: (text) => text === "" ? null : JSON.parse(text) as unknown,
|
|
167
|
-
catch: (
|
|
167
|
+
catch: (cause) =>
|
|
168
168
|
new Error.ResponseError({
|
|
169
169
|
request: this.request,
|
|
170
170
|
response: this,
|
|
171
171
|
reason: "Decode",
|
|
172
|
-
|
|
172
|
+
cause
|
|
173
173
|
})
|
|
174
174
|
})
|
|
175
175
|
}
|
|
@@ -178,12 +178,12 @@ class ClientResponseImpl extends Inspectable.Class implements ClientResponse.Htt
|
|
|
178
178
|
get text(): Effect.Effect<string, Error.ResponseError> {
|
|
179
179
|
return this.textBody ??= Effect.tryPromise({
|
|
180
180
|
try: () => this.source.body.text(),
|
|
181
|
-
catch: (
|
|
181
|
+
catch: (cause) =>
|
|
182
182
|
new Error.ResponseError({
|
|
183
183
|
request: this.request,
|
|
184
184
|
response: this,
|
|
185
185
|
reason: "Decode",
|
|
186
|
-
|
|
186
|
+
cause
|
|
187
187
|
})
|
|
188
188
|
}).pipe(Effect.cached, Effect.runSync)
|
|
189
189
|
}
|
|
@@ -192,12 +192,12 @@ class ClientResponseImpl extends Inspectable.Class implements ClientResponse.Htt
|
|
|
192
192
|
return Effect.flatMap(this.text, (_) =>
|
|
193
193
|
Effect.try({
|
|
194
194
|
try: () => UrlParams.fromInput(new URLSearchParams(_)),
|
|
195
|
-
catch: (
|
|
195
|
+
catch: (cause) =>
|
|
196
196
|
new Error.ResponseError({
|
|
197
197
|
request: this.request,
|
|
198
198
|
response: this,
|
|
199
199
|
reason: "Decode",
|
|
200
|
-
|
|
200
|
+
cause
|
|
201
201
|
})
|
|
202
202
|
}))
|
|
203
203
|
}
|
|
@@ -206,12 +206,12 @@ class ClientResponseImpl extends Inspectable.Class implements ClientResponse.Htt
|
|
|
206
206
|
get formData(): Effect.Effect<FormData, Error.ResponseError> {
|
|
207
207
|
return this.formDataBody ??= Effect.tryPromise({
|
|
208
208
|
try: () => this.source.body.formData() as Promise<FormData>,
|
|
209
|
-
catch: (
|
|
209
|
+
catch: (cause) =>
|
|
210
210
|
new Error.ResponseError({
|
|
211
211
|
request: this.request,
|
|
212
212
|
response: this,
|
|
213
213
|
reason: "Decode",
|
|
214
|
-
|
|
214
|
+
cause
|
|
215
215
|
})
|
|
216
216
|
}).pipe(Effect.cached, Effect.runSync)
|
|
217
217
|
}
|
|
@@ -220,12 +220,12 @@ class ClientResponseImpl extends Inspectable.Class implements ClientResponse.Htt
|
|
|
220
220
|
get arrayBuffer(): Effect.Effect<ArrayBuffer, Error.ResponseError> {
|
|
221
221
|
return this.arrayBufferBody ??= Effect.tryPromise({
|
|
222
222
|
try: () => this.source.body.arrayBuffer(),
|
|
223
|
-
catch: (
|
|
223
|
+
catch: (cause) =>
|
|
224
224
|
new Error.ResponseError({
|
|
225
225
|
request: this.request,
|
|
226
226
|
response: this,
|
|
227
227
|
reason: "Decode",
|
|
228
|
-
|
|
228
|
+
cause
|
|
229
229
|
})
|
|
230
230
|
}).pipe(Effect.cached, Effect.runSync)
|
|
231
231
|
}
|
|
@@ -60,8 +60,8 @@ export const make = (
|
|
|
60
60
|
)
|
|
61
61
|
|
|
62
62
|
yield* Effect.async<void, Error.ServeError>((resume) => {
|
|
63
|
-
function onError(
|
|
64
|
-
resume(Effect.fail(new Error.ServeError({
|
|
63
|
+
function onError(cause: Error) {
|
|
64
|
+
resume(Effect.fail(new Error.ServeError({ cause })))
|
|
65
65
|
}
|
|
66
66
|
server.on("error", onError)
|
|
67
67
|
server.listen(options, () => {
|
|
@@ -212,11 +212,11 @@ class ServerRequestImpl extends HttpIncomingMessageImpl<Error.RequestError> impl
|
|
|
212
212
|
private headersOverride?: Headers.Headers,
|
|
213
213
|
remoteAddressOverride?: string
|
|
214
214
|
) {
|
|
215
|
-
super(source, (
|
|
215
|
+
super(source, (cause) =>
|
|
216
216
|
new Error.RequestError({
|
|
217
217
|
request: this,
|
|
218
218
|
reason: "Decode",
|
|
219
|
-
|
|
219
|
+
cause
|
|
220
220
|
}), remoteAddressOverride)
|
|
221
221
|
this[ServerRequest.TypeId] = ServerRequest.TypeId
|
|
222
222
|
}
|
|
@@ -293,7 +293,7 @@ class ServerRequestImpl extends HttpIncomingMessageImpl<Error.RequestError> impl
|
|
|
293
293
|
new Error.RequestError({
|
|
294
294
|
request: this,
|
|
295
295
|
reason: "Decode",
|
|
296
|
-
|
|
296
|
+
description: "not an upgradeable ServerRequest"
|
|
297
297
|
})
|
|
298
298
|
)
|
|
299
299
|
}
|
|
@@ -382,12 +382,12 @@ const handleResponse = (request: ServerRequest.HttpServerRequest, response: Serv
|
|
|
382
382
|
) {
|
|
383
383
|
return Effect.tryPromise({
|
|
384
384
|
try: (signal) => pipeline(body.body as any, nodeResponse, { signal, end: true }),
|
|
385
|
-
catch: (
|
|
385
|
+
catch: (cause) =>
|
|
386
386
|
new Error.ResponseError({
|
|
387
387
|
request,
|
|
388
388
|
response,
|
|
389
389
|
reason: "Decode",
|
|
390
|
-
|
|
390
|
+
cause
|
|
391
391
|
})
|
|
392
392
|
}).pipe(
|
|
393
393
|
Effect.interruptible,
|
|
@@ -414,13 +414,13 @@ const handleResponse = (request: ServerRequest.HttpServerRequest, response: Serv
|
|
|
414
414
|
return Effect.async<void, Error.ResponseError>((resume, signal) => {
|
|
415
415
|
Readable.fromWeb(r.body as any, { signal })
|
|
416
416
|
.pipe(nodeResponse)
|
|
417
|
-
.on("error", (
|
|
417
|
+
.on("error", (cause) => {
|
|
418
418
|
resume(Effect.fail(
|
|
419
419
|
new Error.ResponseError({
|
|
420
420
|
request,
|
|
421
421
|
response,
|
|
422
422
|
reason: "Decode",
|
|
423
|
-
|
|
423
|
+
cause
|
|
424
424
|
})
|
|
425
425
|
))
|
|
426
426
|
})
|
|
@@ -438,20 +438,20 @@ const handleResponse = (request: ServerRequest.HttpServerRequest, response: Serv
|
|
|
438
438
|
return Stream.run(
|
|
439
439
|
Stream.mapError(
|
|
440
440
|
body.stream,
|
|
441
|
-
(
|
|
441
|
+
(cause) =>
|
|
442
442
|
new Error.ResponseError({
|
|
443
443
|
request,
|
|
444
444
|
response,
|
|
445
445
|
reason: "Decode",
|
|
446
|
-
|
|
446
|
+
cause
|
|
447
447
|
})
|
|
448
448
|
),
|
|
449
|
-
NodeSink.fromWritable(() => nodeResponse, (
|
|
449
|
+
NodeSink.fromWritable(() => nodeResponse, (cause) =>
|
|
450
450
|
new Error.ResponseError({
|
|
451
451
|
request,
|
|
452
452
|
response,
|
|
453
453
|
reason: "Decode",
|
|
454
|
-
|
|
454
|
+
cause
|
|
455
455
|
}))
|
|
456
456
|
).pipe(
|
|
457
457
|
Effect.interruptible,
|
package/src/internal/worker.ts
CHANGED
|
@@ -1,55 +1,53 @@
|
|
|
1
1
|
import * as Worker from "@effect/platform/Worker"
|
|
2
2
|
import { WorkerError } from "@effect/platform/WorkerError"
|
|
3
|
+
import * as Deferred from "effect/Deferred"
|
|
3
4
|
import * as Effect from "effect/Effect"
|
|
4
|
-
import
|
|
5
|
+
import * as Exit from "effect/Exit"
|
|
5
6
|
import * as Layer from "effect/Layer"
|
|
6
|
-
import * as
|
|
7
|
+
import * as Scope from "effect/Scope"
|
|
7
8
|
import type * as WorkerThreads from "node:worker_threads"
|
|
8
9
|
|
|
9
|
-
const platformWorkerImpl = Worker.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
})
|
|
10
|
+
const platformWorkerImpl = Worker.makePlatform<WorkerThreads.Worker>()({
|
|
11
|
+
setup({ scope, worker }) {
|
|
12
|
+
return Effect.flatMap(Deferred.make<void>(), (exitDeferred) => {
|
|
13
|
+
worker.on("exit", () => {
|
|
14
|
+
Deferred.unsafeDone(exitDeferred, Exit.void)
|
|
15
|
+
})
|
|
16
|
+
return Effect.as(
|
|
17
|
+
Scope.addFinalizer(
|
|
18
|
+
scope,
|
|
19
|
+
Effect.suspend(() => {
|
|
20
20
|
worker.postMessage([1])
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const fiber = yield* _(
|
|
29
|
-
Effect.async<never, WorkerError>((resume) => {
|
|
30
|
-
worker.on("message", (message: Worker.BackingWorker.Message<O>) => {
|
|
31
|
-
queue.unsafeOffer(message)
|
|
32
|
-
})
|
|
33
|
-
worker.on("messageerror", (error) => {
|
|
34
|
-
resume(new WorkerError({ reason: "decode", error }))
|
|
35
|
-
})
|
|
36
|
-
worker.on("error", (error) => {
|
|
37
|
-
resume(new WorkerError({ reason: "unknown", error }))
|
|
38
|
-
})
|
|
39
|
-
worker.on("exit", (code) => {
|
|
40
|
-
resume(new WorkerError({ reason: "unknown", error: new Error(`exited with code ${code}`) }))
|
|
41
|
-
})
|
|
42
|
-
}),
|
|
43
|
-
Effect.interruptible,
|
|
44
|
-
Effect.forkScoped
|
|
21
|
+
return Deferred.await(exitDeferred)
|
|
22
|
+
}).pipe(
|
|
23
|
+
Effect.timeout(5000),
|
|
24
|
+
Effect.catchAllCause(() => Effect.sync(() => worker.terminate()))
|
|
25
|
+
)
|
|
26
|
+
),
|
|
27
|
+
worker
|
|
45
28
|
)
|
|
46
|
-
const send = (message: I, transfers?: ReadonlyArray<unknown>) =>
|
|
47
|
-
Effect.try({
|
|
48
|
-
try: () => worker.postMessage([0, message], transfers as any),
|
|
49
|
-
catch: (error) => new WorkerError({ reason: "send", error })
|
|
50
|
-
})
|
|
51
|
-
return { fiber, queue, send }
|
|
52
29
|
})
|
|
30
|
+
},
|
|
31
|
+
listen({ deferred, emit, port }) {
|
|
32
|
+
port.on("message", (message) => {
|
|
33
|
+
emit(message)
|
|
34
|
+
})
|
|
35
|
+
port.on("messageerror", (cause) => {
|
|
36
|
+
Deferred.unsafeDone(
|
|
37
|
+
deferred,
|
|
38
|
+
new WorkerError({ reason: "decode", cause })
|
|
39
|
+
)
|
|
40
|
+
})
|
|
41
|
+
port.on("error", (cause) => {
|
|
42
|
+
Deferred.unsafeDone(deferred, new WorkerError({ reason: "unknown", cause }))
|
|
43
|
+
})
|
|
44
|
+
port.on("exit", (code) => {
|
|
45
|
+
Deferred.unsafeDone(
|
|
46
|
+
deferred,
|
|
47
|
+
new WorkerError({ reason: "unknown", cause: new Error(`exited with code ${code}`) })
|
|
48
|
+
)
|
|
49
|
+
})
|
|
50
|
+
return Effect.void
|
|
53
51
|
}
|
|
54
52
|
})
|
|
55
53
|
|