@effect/platform 0.27.1 → 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 +6 -12
- package/Worker/dist/effect-platform-Worker.cjs.prod.js +6 -12
- package/Worker/dist/effect-platform-Worker.esm.js +6 -12
- 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 +15 -23
|
@@ -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,27 +136,22 @@ 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,
|
|
157
151
|
execute,
|
|
158
152
|
executeEffect
|
|
159
153
|
};
|
|
160
|
-
});
|
|
154
|
+
}).pipe(Effect__namespace.parallelFinalizers);
|
|
161
155
|
}
|
|
162
156
|
});
|
|
163
157
|
});
|
|
@@ -189,7 +183,7 @@ const makePool$1 = () => options => Effect__namespace.gen(function* (_) {
|
|
|
189
183
|
executeEffect: message => Effect__namespace.flatMap(Effect__namespace.scoped(backing.get()), worker => worker.executeEffect(message))
|
|
190
184
|
};
|
|
191
185
|
return pool;
|
|
192
|
-
})
|
|
186
|
+
});
|
|
193
187
|
|
|
194
188
|
/** @internal */
|
|
195
189
|
const makePoolLayer$1 = managerLayer => (tag, options) => Layer__namespace.provide(managerLayer, Layer__namespace.scoped(tag, makePool$1()(options)));
|
|
@@ -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,27 +136,22 @@ 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,
|
|
157
151
|
execute,
|
|
158
152
|
executeEffect
|
|
159
153
|
};
|
|
160
|
-
});
|
|
154
|
+
}).pipe(Effect__namespace.parallelFinalizers);
|
|
161
155
|
}
|
|
162
156
|
});
|
|
163
157
|
});
|
|
@@ -189,7 +183,7 @@ const makePool$1 = () => options => Effect__namespace.gen(function* (_) {
|
|
|
189
183
|
executeEffect: message => Effect__namespace.flatMap(Effect__namespace.scoped(backing.get()), worker => worker.executeEffect(message))
|
|
190
184
|
};
|
|
191
185
|
return pool;
|
|
192
|
-
})
|
|
186
|
+
});
|
|
193
187
|
|
|
194
188
|
/** @internal */
|
|
195
189
|
const makePoolLayer$1 = managerLayer => (tag, options) => Layer__namespace.provide(managerLayer, Layer__namespace.scoped(tag, makePool$1()(options)));
|
|
@@ -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,27 +103,22 @@ 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,
|
|
124
118
|
execute,
|
|
125
119
|
executeEffect
|
|
126
120
|
};
|
|
127
|
-
});
|
|
121
|
+
}).pipe(Effect.parallelFinalizers);
|
|
128
122
|
}
|
|
129
123
|
});
|
|
130
124
|
});
|
|
@@ -156,7 +150,7 @@ const makePool$1 = () => options => Effect.gen(function* (_) {
|
|
|
156
150
|
executeEffect: message => Effect.flatMap(Effect.scoped(backing.get()), worker => worker.executeEffect(message))
|
|
157
151
|
};
|
|
158
152
|
return pool;
|
|
159
|
-
})
|
|
153
|
+
});
|
|
160
154
|
|
|
161
155
|
/** @internal */
|
|
162
156
|
const makePoolLayer$1 = managerLayer => (tag, options) => Layer.provide(managerLayer, Layer.scoped(tag, makePool$1()(options)));
|
|
@@ -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,26 +196,19 @@ 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)
|
|
218
212
|
}
|
|
219
213
|
})
|
|
220
214
|
})
|
|
@@ -271,9 +265,7 @@ export const makePool = <W>() =>
|
|
|
271
265
|
}
|
|
272
266
|
|
|
273
267
|
return pool
|
|
274
|
-
})
|
|
275
|
-
Effect.parallelFinalizers
|
|
276
|
-
)
|
|
268
|
+
})
|
|
277
269
|
|
|
278
270
|
/** @internal */
|
|
279
271
|
export const makePoolLayer = <W>(managerLayer: Layer.Layer<never, never, Worker.WorkerManager>) =>
|