@effect/platform 0.27.2 → 0.27.3
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/Worker/dist/effect-platform-Worker.cjs.dev.js +4 -10
- package/Worker/dist/effect-platform-Worker.cjs.prod.js +4 -10
- package/Worker/dist/effect-platform-Worker.esm.js +4 -10
- package/dist/declarations/src/Worker.d.ts +3 -2
- package/dist/declarations/src/Worker.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Worker.ts +3 -2
- package/src/internal/worker.ts +13 -19
|
@@ -78,7 +78,6 @@ const makeManager$1 = /*#__PURE__*/Effect__namespace.gen(function* (_) {
|
|
|
78
78
|
}) {
|
|
79
79
|
return Effect__namespace.gen(function* (_) {
|
|
80
80
|
const id = idCounter++;
|
|
81
|
-
const fiberId = yield* _(Effect__namespace.fiberId);
|
|
82
81
|
let requestIdCounter = 0;
|
|
83
82
|
const readyLatch = yield* _(Deferred__namespace.make());
|
|
84
83
|
const semaphore = yield* _(Effect__namespace.makeSemaphore(permits));
|
|
@@ -137,20 +136,15 @@ const makeManager$1 = /*#__PURE__*/Effect__namespace.gen(function* (_) {
|
|
|
137
136
|
return Stream__namespace.fromChannel(loop);
|
|
138
137
|
});
|
|
139
138
|
const executeEffect = request => Effect__namespace.acquireUseRelease(executeAcquire(request), ([, queue]) => Effect__namespace.flatten(Queue__namespace.take(queue)), executeRelease);
|
|
140
|
-
const handleMessages =
|
|
141
|
-
const postMessages =
|
|
139
|
+
const handleMessages = yield* _(Queue__namespace.take(backing.queue), Effect__namespace.flatMap(handleMessage), Effect__namespace.forever, Effect__namespace.interruptible, Effect__namespace.forkScoped);
|
|
140
|
+
const postMessages = yield* _(semaphore.take(1), Effect__namespace.zipRight(outbound.take), Effect__namespace.flatMap(([id, request]) => Function.pipe(Effect__namespace.suspend(() => {
|
|
142
141
|
const result = requestMap.get(id);
|
|
143
142
|
if (!result) return Effect__namespace.unit;
|
|
144
143
|
const transferables = transfers(request);
|
|
145
144
|
const payload = encode ? encode(request) : request;
|
|
146
145
|
return Effect__namespace.zipRight(backing.send([id, 0, payload], transferables), Deferred__namespace.await(result[1]));
|
|
147
|
-
}), Effect__namespace.ensuring(semaphore.release(1)), Effect__namespace.fork)), Effect__namespace.forever);
|
|
148
|
-
const
|
|
149
|
-
concurrency: "unbounded",
|
|
150
|
-
discard: true
|
|
151
|
-
}), Effect__namespace.forkDaemon);
|
|
152
|
-
yield* _(Effect__namespace.addFinalizer(() => fiber.interruptAsFork(fiberId)));
|
|
153
|
-
const join = Fiber__namespace.join(fiber);
|
|
146
|
+
}), Effect__namespace.ensuring(semaphore.release(1)), Effect__namespace.fork)), Effect__namespace.forever, Effect__namespace.interruptible, Effect__namespace.forkScoped);
|
|
147
|
+
const join = Fiber__namespace.joinAll([backing.fiber, handleMessages, postMessages]);
|
|
154
148
|
return {
|
|
155
149
|
id,
|
|
156
150
|
join,
|
|
@@ -78,7 +78,6 @@ const makeManager$1 = /*#__PURE__*/Effect__namespace.gen(function* (_) {
|
|
|
78
78
|
}) {
|
|
79
79
|
return Effect__namespace.gen(function* (_) {
|
|
80
80
|
const id = idCounter++;
|
|
81
|
-
const fiberId = yield* _(Effect__namespace.fiberId);
|
|
82
81
|
let requestIdCounter = 0;
|
|
83
82
|
const readyLatch = yield* _(Deferred__namespace.make());
|
|
84
83
|
const semaphore = yield* _(Effect__namespace.makeSemaphore(permits));
|
|
@@ -137,20 +136,15 @@ const makeManager$1 = /*#__PURE__*/Effect__namespace.gen(function* (_) {
|
|
|
137
136
|
return Stream__namespace.fromChannel(loop);
|
|
138
137
|
});
|
|
139
138
|
const executeEffect = request => Effect__namespace.acquireUseRelease(executeAcquire(request), ([, queue]) => Effect__namespace.flatten(Queue__namespace.take(queue)), executeRelease);
|
|
140
|
-
const handleMessages =
|
|
141
|
-
const postMessages =
|
|
139
|
+
const handleMessages = yield* _(Queue__namespace.take(backing.queue), Effect__namespace.flatMap(handleMessage), Effect__namespace.forever, Effect__namespace.interruptible, Effect__namespace.forkScoped);
|
|
140
|
+
const postMessages = yield* _(semaphore.take(1), Effect__namespace.zipRight(outbound.take), Effect__namespace.flatMap(([id, request]) => Function.pipe(Effect__namespace.suspend(() => {
|
|
142
141
|
const result = requestMap.get(id);
|
|
143
142
|
if (!result) return Effect__namespace.unit;
|
|
144
143
|
const transferables = transfers(request);
|
|
145
144
|
const payload = encode ? encode(request) : request;
|
|
146
145
|
return Effect__namespace.zipRight(backing.send([id, 0, payload], transferables), Deferred__namespace.await(result[1]));
|
|
147
|
-
}), Effect__namespace.ensuring(semaphore.release(1)), Effect__namespace.fork)), Effect__namespace.forever);
|
|
148
|
-
const
|
|
149
|
-
concurrency: "unbounded",
|
|
150
|
-
discard: true
|
|
151
|
-
}), Effect__namespace.forkDaemon);
|
|
152
|
-
yield* _(Effect__namespace.addFinalizer(() => fiber.interruptAsFork(fiberId)));
|
|
153
|
-
const join = Fiber__namespace.join(fiber);
|
|
146
|
+
}), Effect__namespace.ensuring(semaphore.release(1)), Effect__namespace.fork)), Effect__namespace.forever, Effect__namespace.interruptible, Effect__namespace.forkScoped);
|
|
147
|
+
const join = Fiber__namespace.joinAll([backing.fiber, handleMessages, postMessages]);
|
|
154
148
|
return {
|
|
155
149
|
id,
|
|
156
150
|
join,
|
|
@@ -45,7 +45,6 @@ const makeManager$1 = /*#__PURE__*/Effect.gen(function* (_) {
|
|
|
45
45
|
}) {
|
|
46
46
|
return Effect.gen(function* (_) {
|
|
47
47
|
const id = idCounter++;
|
|
48
|
-
const fiberId = yield* _(Effect.fiberId);
|
|
49
48
|
let requestIdCounter = 0;
|
|
50
49
|
const readyLatch = yield* _(Deferred.make());
|
|
51
50
|
const semaphore = yield* _(Effect.makeSemaphore(permits));
|
|
@@ -104,20 +103,15 @@ const makeManager$1 = /*#__PURE__*/Effect.gen(function* (_) {
|
|
|
104
103
|
return Stream.fromChannel(loop);
|
|
105
104
|
});
|
|
106
105
|
const executeEffect = request => Effect.acquireUseRelease(executeAcquire(request), ([, queue]) => Effect.flatten(Queue.take(queue)), executeRelease);
|
|
107
|
-
const handleMessages =
|
|
108
|
-
const postMessages =
|
|
106
|
+
const handleMessages = yield* _(Queue.take(backing.queue), Effect.flatMap(handleMessage), Effect.forever, Effect.interruptible, Effect.forkScoped);
|
|
107
|
+
const postMessages = yield* _(semaphore.take(1), Effect.zipRight(outbound.take), Effect.flatMap(([id, request]) => pipe(Effect.suspend(() => {
|
|
109
108
|
const result = requestMap.get(id);
|
|
110
109
|
if (!result) return Effect.unit;
|
|
111
110
|
const transferables = transfers(request);
|
|
112
111
|
const payload = encode ? encode(request) : request;
|
|
113
112
|
return Effect.zipRight(backing.send([id, 0, payload], transferables), Deferred.await(result[1]));
|
|
114
|
-
}), Effect.ensuring(semaphore.release(1)), Effect.fork)), Effect.forever);
|
|
115
|
-
const
|
|
116
|
-
concurrency: "unbounded",
|
|
117
|
-
discard: true
|
|
118
|
-
}), Effect.forkDaemon);
|
|
119
|
-
yield* _(Effect.addFinalizer(() => fiber.interruptAsFork(fiberId)));
|
|
120
|
-
const join = Fiber.join(fiber);
|
|
113
|
+
}), Effect.ensuring(semaphore.release(1)), Effect.fork)), Effect.forever, Effect.interruptible, Effect.forkScoped);
|
|
114
|
+
const join = Fiber.joinAll([backing.fiber, handleMessages, postMessages]);
|
|
121
115
|
return {
|
|
122
116
|
id,
|
|
123
117
|
join,
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { Effect } from "effect";
|
|
5
4
|
import type * as Context from "effect/Context";
|
|
6
5
|
import type * as Duration from "effect/Duration";
|
|
6
|
+
import type * as Effect from "effect/Effect";
|
|
7
|
+
import type * as Fiber from "effect/Fiber";
|
|
7
8
|
import type * as Layer from "effect/Layer";
|
|
8
9
|
import type * as Pool from "effect/Pool";
|
|
9
10
|
import type * as Queue from "effect/Queue";
|
|
@@ -15,7 +16,7 @@ import type { WorkerError } from "./WorkerError.js";
|
|
|
15
16
|
* @category models
|
|
16
17
|
*/
|
|
17
18
|
export interface BackingWorker<I, O> {
|
|
18
|
-
readonly
|
|
19
|
+
readonly fiber: Fiber.Fiber<WorkerError, never>;
|
|
19
20
|
readonly send: (message: I, transfers?: ReadonlyArray<unknown>) => Effect.Effect<never, never, void>;
|
|
20
21
|
readonly queue: Queue.Dequeue<BackingWorker.Message<O>>;
|
|
21
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Worker.d.ts","sourceRoot":"../../../src","sources":["Worker.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Worker.d.ts","sourceRoot":"../../../src","sources":["Worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Worker.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @since 1.0.0
|
|
3
3
|
*/
|
|
4
|
-
import type { Effect } from "effect"
|
|
5
4
|
import type * as Context from "effect/Context"
|
|
6
5
|
import type * as Duration from "effect/Duration"
|
|
6
|
+
import type * as Effect from "effect/Effect"
|
|
7
|
+
import type * as Fiber from "effect/Fiber"
|
|
7
8
|
import type * as Layer from "effect/Layer"
|
|
8
9
|
import type * as Pool from "effect/Pool"
|
|
9
10
|
import type * as Queue from "effect/Queue"
|
|
@@ -17,7 +18,7 @@ import type { WorkerError } from "./WorkerError"
|
|
|
17
18
|
* @category models
|
|
18
19
|
*/
|
|
19
20
|
export interface BackingWorker<I, O> {
|
|
20
|
-
readonly
|
|
21
|
+
readonly fiber: Fiber.Fiber<WorkerError, never>
|
|
21
22
|
readonly send: (message: I, transfers?: ReadonlyArray<unknown>) => Effect.Effect<never, never, void>
|
|
22
23
|
readonly queue: Queue.Dequeue<BackingWorker.Message<O>>
|
|
23
24
|
}
|
package/src/internal/worker.ts
CHANGED
|
@@ -53,7 +53,6 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
53
53
|
spawn<I, E, O>({ encode, permits = 1, queue, spawn, transfers = (_) => [] }: Worker.Worker.Options<I>) {
|
|
54
54
|
return Effect.gen(function*(_) {
|
|
55
55
|
const id = idCounter++
|
|
56
|
-
const fiberId = yield* _(Effect.fiberId)
|
|
57
56
|
let requestIdCounter = 0
|
|
58
57
|
const readyLatch = yield* _(Deferred.make<never, void>())
|
|
59
58
|
const semaphore = yield* _(Effect.makeSemaphore(permits))
|
|
@@ -170,13 +169,15 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
170
169
|
executeRelease
|
|
171
170
|
)
|
|
172
171
|
|
|
173
|
-
const handleMessages =
|
|
172
|
+
const handleMessages = yield* _(
|
|
174
173
|
Queue.take(backing.queue),
|
|
175
174
|
Effect.flatMap(handleMessage),
|
|
176
|
-
Effect.forever
|
|
175
|
+
Effect.forever,
|
|
176
|
+
Effect.interruptible,
|
|
177
|
+
Effect.forkScoped
|
|
177
178
|
)
|
|
178
179
|
|
|
179
|
-
const postMessages =
|
|
180
|
+
const postMessages = yield* _(
|
|
180
181
|
semaphore.take(1),
|
|
181
182
|
Effect.zipRight(outbound.take),
|
|
182
183
|
Effect.flatMap(([id, request]) =>
|
|
@@ -195,23 +196,16 @@ export const makeManager = Effect.gen(function*(_) {
|
|
|
195
196
|
Effect.fork
|
|
196
197
|
)
|
|
197
198
|
),
|
|
198
|
-
Effect.forever
|
|
199
|
+
Effect.forever,
|
|
200
|
+
Effect.interruptible,
|
|
201
|
+
Effect.forkScoped
|
|
199
202
|
)
|
|
200
203
|
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
never,
|
|
207
|
-
WorkerError,
|
|
208
|
-
never
|
|
209
|
-
>,
|
|
210
|
-
Effect.forkDaemon
|
|
211
|
-
)
|
|
212
|
-
yield* _(Effect.addFinalizer(() => fiber.interruptAsFork(fiberId)))
|
|
213
|
-
|
|
214
|
-
const join = Fiber.join(fiber)
|
|
204
|
+
const join = Fiber.joinAll([backing.fiber, handleMessages, postMessages]) as Effect.Effect<
|
|
205
|
+
never,
|
|
206
|
+
WorkerError,
|
|
207
|
+
never
|
|
208
|
+
>
|
|
215
209
|
|
|
216
210
|
return { id, join, execute, executeEffect }
|
|
217
211
|
}).pipe(Effect.parallelFinalizers)
|