@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.
@@ -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 { pipe } from "effect/Function";
5
+ import * as Exit from "effect/Exit";
5
6
  import * as Layer from "effect/Layer";
6
- import * as Queue from "effect/Queue";
7
- const platformWorkerImpl = /*#__PURE__*/Worker.PlatformWorker.of({
8
- [Worker.PlatformWorkerTypeId]: Worker.PlatformWorkerTypeId,
9
- spawn(worker_) {
10
- return Effect.gen(function* (_) {
11
- const worker = worker_;
12
- yield* _(Effect.addFinalizer(() => pipe(Effect.async(resume => {
13
- worker.once("exit", () => {
14
- resume(Effect.void);
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
- fiber,
52
- queue,
53
- send
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","pipe","Layer","Queue","platformWorkerImpl","PlatformWorker","of","PlatformWorkerTypeId","spawn","worker_","gen","_","worker","addFinalizer","async","resume","once","void","postMessage","timeout","orElse","sync","terminate","queue","unbounded","shutdown","fiber","on","message","unsafeOffer","error","reason","code","Error","interruptible","forkScoped","send","transfers","try","catch","layerWorker","succeed","layerManager","provide","layer","merge","layerSpawner"],"sources":["../../../src/internal/worker.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
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 Cause from "effect/Cause";
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 Queue from "effect/Queue";
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(shutdown) {
12
- return Effect.gen(function* (_) {
13
+ start() {
14
+ return Effect.gen(function* () {
13
15
  if (!WorkerThreads.parentPort) {
14
- return yield* _(new WorkerError({
16
+ return yield* new WorkerError({
15
17
  reason: "spawn",
16
- error: new Error("not in worker")
17
- }));
18
+ cause: new Error("not in a worker thread")
19
+ });
18
20
  }
19
21
  const port = WorkerThreads.parentPort;
20
- const queue = yield* _(Queue.unbounded());
21
- yield* _(Effect.async(resume => {
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
- queue.unsafeOffer([0, message[1]]);
33
+ runFork(restore(handler(0, message[1])));
25
34
  } else {
26
- Effect.runFork(shutdown);
35
+ Deferred.unsafeDone(fiberSet.deferred, Exit.interrupt(FiberId.none));
27
36
  }
28
37
  });
29
- port.on("messageerror", error => {
30
- resume(new WorkerError({
38
+ port.on("messageerror", cause => {
39
+ Deferred.unsafeDone(fiberSet.deferred, new WorkerError({
31
40
  reason: "decode",
32
- error
41
+ cause
33
42
  }));
34
43
  });
35
- port.on("error", error => {
36
- resume(new WorkerError({
44
+ port.on("error", cause => {
45
+ Deferred.unsafeDone(fiberSet.deferred, new WorkerError({
37
46
  reason: "unknown",
38
- error
47
+ cause
39
48
  }));
40
49
  });
41
- }), Effect.tapErrorCause(cause => Cause.isInterruptedOnly(cause) ? Effect.void : Effect.logDebug(cause)), Effect.retry(Schedule.forever), Effect.annotateLogs({
42
- package: "@effect/platform-node",
43
- module: "WorkerRunner"
44
- }), Effect.interruptible, Effect.forkScoped);
45
- const send = (_portId, message, transfers) => Effect.sync(() => port.postMessage([1, message], transfers));
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
- queue,
56
+ run,
50
57
  send
51
58
  };
52
59
  });
@@ -1 +1 @@
1
- {"version":3,"file":"workerRunner.js","names":["WorkerError","Runner","Cause","Effect","Layer","Queue","Schedule","WorkerThreads","platformRunnerImpl","PlatformRunner","of","PlatformRunnerTypeId","start","shutdown","gen","_","parentPort","reason","error","Error","port","queue","unbounded","async","resume","on","message","unsafeOffer","runFork","tapErrorCause","cause","isInterruptedOnly","void","logDebug","retry","forever","annotateLogs","package","module","interruptible","forkScoped","send","_portId","transfers","sync","postMessage","layer","succeed"],"sources":["../../../src/internal/workerRunner.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,WAAW,QAAQ,8BAA8B;AAC1D,OAAO,KAAKC,MAAM,MAAM,+BAA+B;AACvD,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAKC,aAAa,MAAM,qBAAqB;AAEpD,MAAMC,kBAAkB,gBAAGP,MAAM,CAACQ,cAAc,CAACC,EAAE,CAAC;EAClD,CAACT,MAAM,CAACU,oBAAoB,GAAGV,MAAM,CAACU,oBAAoB;EAC1DC,KAAKA,CAAOC,QAA6B;IACvC,OAAOV,MAAM,CAACW,GAAG,CAAC,WAAUC,CAAC;MAC3B,IAAI,CAACR,aAAa,CAACS,UAAU,EAAE;QAC7B,OAAO,OAAOD,CAAC,CAAC,IAAIf,WAAW,CAAC;UAAEiB,MAAM,EAAE,OAAO;UAAEC,KAAK,EAAE,IAAIC,KAAK,CAAC,eAAe;QAAC,CAAE,CAAC,CAAC;MAC1F;MACA,MAAMC,IAAI,GAAGb,aAAa,CAACS,UAAU;MACrC,MAAMK,KAAK,GAAG,OAAON,CAAC,CAACV,KAAK,CAACiB,SAAS,EAAyC,CAAC;MAChF,OAAOP,CAAC,CACNZ,MAAM,CAACoB,KAAK,CAAsBC,MAAM,IAAI;QAC1CJ,IAAI,CAACK,EAAE,CAAC,SAAS,EAAGC,OAAwC,IAAI;UAC9D,IAAIA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YACpBL,KAAK,CAACM,WAAW,CAAC,CAAC,CAAC,EAAED,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;UACpC,CAAC,MAAM;YACLvB,MAAM,CAACyB,OAAO,CAACf,QAAQ,CAAC;UAC1B;QACF,CAAC,CAAC;QACFO,IAAI,CAACK,EAAE,CAAC,cAAc,EAAGP,KAAK,IAAI;UAChCM,MAAM,CAAC,IAAIxB,WAAW,CAAC;YAAEiB,MAAM,EAAE,QAAQ;YAAEC;UAAK,CAAE,CAAC,CAAC;QACtD,CAAC,CAAC;QACFE,IAAI,CAACK,EAAE,CAAC,OAAO,EAAGP,KAAK,IAAI;UACzBM,MAAM,CAAC,IAAIxB,WAAW,CAAC;YAAEiB,MAAM,EAAE,SAAS;YAAEC;UAAK,CAAE,CAAC,CAAC;QACvD,CAAC,CAAC;MACJ,CAAC,CAAC,EACFf,MAAM,CAAC0B,aAAa,CAAEC,KAAK,IAAK5B,KAAK,CAAC6B,iBAAiB,CAACD,KAAK,CAAC,GAAG3B,MAAM,CAAC6B,IAAI,GAAG7B,MAAM,CAAC8B,QAAQ,CAACH,KAAK,CAAC,CAAC,EACtG3B,MAAM,CAAC+B,KAAK,CAAC5B,QAAQ,CAAC6B,OAAO,CAAC,EAC9BhC,MAAM,CAACiC,YAAY,CAAC;QAClBC,OAAO,EAAE,uBAAuB;QAChCC,MAAM,EAAE;OACT,CAAC,EACFnC,MAAM,CAACoC,aAAa,EACpBpC,MAAM,CAACqC,UAAU,CAClB;MACD,MAAMC,IAAI,GAAGA,CAACC,OAAe,EAAEhB,OAAU,EAAEiB,SAAkC,KAC3ExC,MAAM,CAACyC,IAAI,CAAC,MAAMxB,IAAI,CAACyB,WAAW,CAAC,CAAC,CAAC,EAAEnB,OAAO,CAAC,EAAEiB,SAAgB,CAAC,CAAC;MACrE;MACAvB,IAAI,CAACyB,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;MACrB,OAAO;QAAExB,KAAK;QAAEoB;MAAI,CAAE;IACxB,CAAC,CAAC;EACJ;CACD,CAAC;AAEF;AACA,OAAO,MAAMK,KAAK,gBAAG1C,KAAK,CAAC2C,OAAO,CAAC9C,MAAM,CAACQ,cAAc,EAAED,kBAAkB,CAAC","ignoreList":[]}
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.53.25",
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.17.1",
16
- "@effect/platform-node-shared": "^0.8.25"
15
+ "ws": "^8.18.0",
16
+ "@effect/platform-node-shared": "^0.9.0"
17
17
  },
18
18
  "peerDependencies": {
19
- "@effect/platform": "^0.58.26",
20
- "effect": "^3.5.2"
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
- error: _
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
- error: _
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
- error: _
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(error: Error) {
134
+ function onError(cause: Error) {
135
135
  resume(Effect.fail(
136
136
  new Error.RequestError({
137
137
  request,
138
138
  reason: "Transport",
139
- error
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(error: Error) {
161
+ function onError(cause: Error) {
162
162
  resume(Effect.fail(
163
163
  new Error.RequestError({
164
164
  request,
165
165
  reason: "Transport",
166
- error
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
- error: _
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: (error) =>
78
+ catch: (cause) =>
79
79
  new Error.RequestError({
80
80
  request,
81
81
  reason: "Transport",
82
- error
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
- error: _
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
- error: _
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
- error: _
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
- error: _
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
- error: _
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
- error: _
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(error: Error) {
64
- resume(Effect.fail(new Error.ServeError({ error })))
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
- error: _
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
- error: "not an upgradeable ServerRequest"
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: (error) =>
385
+ catch: (cause) =>
386
386
  new Error.ResponseError({
387
387
  request,
388
388
  response,
389
389
  reason: "Decode",
390
- error
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", (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
- error
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
- (error) =>
441
+ (cause) =>
442
442
  new Error.ResponseError({
443
443
  request,
444
444
  response,
445
445
  reason: "Decode",
446
- error
446
+ cause
447
447
  })
448
448
  ),
449
- NodeSink.fromWritable(() => nodeResponse, (error) =>
449
+ NodeSink.fromWritable(() => nodeResponse, (cause) =>
450
450
  new Error.ResponseError({
451
451
  request,
452
452
  response,
453
453
  reason: "Decode",
454
- error
454
+ cause
455
455
  }))
456
456
  ).pipe(
457
457
  Effect.interruptible,
@@ -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 { pipe } from "effect/Function"
5
+ import * as Exit from "effect/Exit"
5
6
  import * as Layer from "effect/Layer"
6
- import * as Queue from "effect/Queue"
7
+ import * as Scope from "effect/Scope"
7
8
  import type * as WorkerThreads from "node:worker_threads"
8
9
 
9
- const platformWorkerImpl = Worker.PlatformWorker.of({
10
- [Worker.PlatformWorkerTypeId]: Worker.PlatformWorkerTypeId,
11
- spawn<I, O>(worker_: unknown) {
12
- return Effect.gen(function*(_) {
13
- const worker = worker_ as WorkerThreads.Worker
14
- yield* _(Effect.addFinalizer(() =>
15
- pipe(
16
- Effect.async<void>((resume) => {
17
- worker.once("exit", () => {
18
- resume(Effect.void)
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
- Effect.timeout(5000),
23
- Effect.orElse(() => Effect.sync(() => worker.terminate()))
24
- )
25
- ))
26
- const queue = yield* _(Queue.unbounded<Worker.BackingWorker.Message<O>>())
27
- yield* _(Effect.addFinalizer(() => Queue.shutdown(queue)))
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