@effect/platform 0.22.0 → 0.23.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.
Files changed (50) hide show
  1. package/Worker/dist/effect-platform-Worker.cjs.d.mts +2 -0
  2. package/Worker/dist/effect-platform-Worker.cjs.d.mts.map +1 -0
  3. package/Worker/dist/effect-platform-Worker.cjs.d.ts +2 -0
  4. package/Worker/dist/effect-platform-Worker.cjs.d.ts.map +1 -0
  5. package/Worker/dist/effect-platform-Worker.cjs.dev.js +291 -0
  6. package/Worker/dist/effect-platform-Worker.cjs.js +7 -0
  7. package/Worker/dist/effect-platform-Worker.cjs.mjs +10 -0
  8. package/Worker/dist/effect-platform-Worker.cjs.prod.js +291 -0
  9. package/Worker/dist/effect-platform-Worker.esm.js +252 -0
  10. package/Worker/package.json +4 -0
  11. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts +2 -0
  12. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts.map +1 -0
  13. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts +2 -0
  14. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts.map +1 -0
  15. package/WorkerError/dist/effect-platform-WorkerError.cjs.dev.js +65 -0
  16. package/WorkerError/dist/effect-platform-WorkerError.cjs.js +7 -0
  17. package/WorkerError/dist/effect-platform-WorkerError.cjs.mjs +4 -0
  18. package/WorkerError/dist/effect-platform-WorkerError.cjs.prod.js +65 -0
  19. package/WorkerError/dist/effect-platform-WorkerError.esm.js +40 -0
  20. package/WorkerError/package.json +4 -0
  21. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts +2 -0
  22. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts.map +1 -0
  23. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts +2 -0
  24. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts.map +1 -0
  25. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.dev.js +129 -0
  26. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.js +7 -0
  27. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.mjs +5 -0
  28. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.prod.js +129 -0
  29. package/WorkerRunner/dist/effect-platform-WorkerRunner.esm.js +97 -0
  30. package/WorkerRunner/package.json +4 -0
  31. package/dist/declarations/src/Worker.d.ts +170 -0
  32. package/dist/declarations/src/Worker.d.ts.map +1 -0
  33. package/dist/declarations/src/WorkerError.d.ts +30 -0
  34. package/dist/declarations/src/WorkerError.d.ts.map +1 -0
  35. package/dist/declarations/src/WorkerRunner.d.ts +72 -0
  36. package/dist/declarations/src/WorkerRunner.d.ts.map +1 -0
  37. package/dist/declarations/src/index.d.ts +12 -0
  38. package/dist/declarations/src/index.d.ts.map +1 -1
  39. package/dist/effect-platform.cjs.dev.js +9 -0
  40. package/dist/effect-platform.cjs.mjs +4 -1
  41. package/dist/effect-platform.cjs.prod.js +9 -0
  42. package/dist/effect-platform.esm.js +6 -0
  43. package/package.json +27 -6
  44. package/src/Worker.ts +207 -0
  45. package/src/WorkerError.ts +34 -0
  46. package/src/WorkerRunner.ts +83 -0
  47. package/src/index.ts +15 -0
  48. package/src/internal/worker.ts +262 -0
  49. package/src/internal/workerError.ts +16 -0
  50. package/src/internal/workerRunner.ts +83 -0
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/Worker.js";
2
+ //# sourceMappingURL=effect-platform-Worker.cjs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-Worker.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/Worker.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/Worker";
2
+ //# sourceMappingURL=effect-platform-Worker.cjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-Worker.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/Worker.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,291 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Context = require('effect/Context');
6
+ var Deferred = require('effect/Deferred');
7
+ var Effect = require('effect/Effect');
8
+ var Exit = require('effect/Exit');
9
+ var Fiber = require('effect/Fiber');
10
+ var Function = require('effect/Function');
11
+ var Layer = require('effect/Layer');
12
+ var Pool = require('effect/Pool');
13
+ var Queue = require('effect/Queue');
14
+ var Stream = require('effect/Stream');
15
+
16
+ function _interopNamespace(e) {
17
+ if (e && e.__esModule) return e;
18
+ var n = Object.create(null);
19
+ if (e) {
20
+ Object.keys(e).forEach(function (k) {
21
+ if (k !== 'default') {
22
+ var d = Object.getOwnPropertyDescriptor(e, k);
23
+ Object.defineProperty(n, k, d.get ? d : {
24
+ enumerable: true,
25
+ get: function () { return e[k]; }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n["default"] = e;
31
+ return Object.freeze(n);
32
+ }
33
+
34
+ var Context__namespace = /*#__PURE__*/_interopNamespace(Context);
35
+ var Deferred__namespace = /*#__PURE__*/_interopNamespace(Deferred);
36
+ var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
37
+ var Exit__namespace = /*#__PURE__*/_interopNamespace(Exit);
38
+ var Fiber__namespace = /*#__PURE__*/_interopNamespace(Fiber);
39
+ var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
40
+ var Pool__namespace = /*#__PURE__*/_interopNamespace(Pool);
41
+ var Queue__namespace = /*#__PURE__*/_interopNamespace(Queue);
42
+ var Stream__namespace = /*#__PURE__*/_interopNamespace(Stream);
43
+
44
+ /** @internal */
45
+ const defaultQueue = () => Effect__namespace.map(Queue__namespace.unbounded(), queue => ({
46
+ offer: (id, item) => Queue__namespace.offer(queue, [id, item]),
47
+ take: Queue__namespace.take(queue),
48
+ shutdown: Queue__namespace.shutdown(queue)
49
+ }));
50
+
51
+ /** @internal */
52
+ const PlatformWorkerTypeId$1 = /*#__PURE__*/Symbol.for("@effect/platform/Worker/PlatformWorker");
53
+
54
+ /** @internal */
55
+ const PlatformWorker$1 = /*#__PURE__*/Context__namespace.Tag(PlatformWorkerTypeId$1);
56
+
57
+ /** @internal */
58
+ const WorkerManagerTypeId$1 = /*#__PURE__*/Symbol.for("@effect/platform/Worker/WorkerManager");
59
+
60
+ /** @internal */
61
+ const WorkerManager$1 = /*#__PURE__*/Context__namespace.Tag(WorkerManagerTypeId$1);
62
+
63
+ /** @internal */
64
+ const makeManager$1 = /*#__PURE__*/Effect__namespace.gen(function* (_) {
65
+ const platform = yield* _(PlatformWorker$1);
66
+ let idCounter = 0;
67
+ return WorkerManager$1.of({
68
+ [WorkerManagerTypeId$1]: WorkerManagerTypeId$1,
69
+ spawn({
70
+ permits = 1,
71
+ queue,
72
+ spawn,
73
+ transfers = _ => []
74
+ }) {
75
+ return Effect__namespace.gen(function* (_) {
76
+ const id = idCounter++;
77
+ const fiberId = yield* _(Effect__namespace.fiberId);
78
+ let requestIdCounter = 0;
79
+ const readyLatch = yield* _(Deferred__namespace.make());
80
+ const semaphore = yield* _(Effect__namespace.makeSemaphore(permits));
81
+ const requestMap = new Map();
82
+ const outbound = queue ?? (yield* _(defaultQueue()));
83
+ yield* _(Effect__namespace.addFinalizer(() => outbound.shutdown));
84
+ const backing = yield* _(platform.spawn(spawn(id)));
85
+ yield* _(Effect__namespace.addFinalizer(() => Effect__namespace.zipRight(Effect__namespace.forEach(requestMap.values(), ([queue]) => Queue__namespace.shutdown(queue), {
86
+ discard: true
87
+ }), Effect__namespace.sync(() => requestMap.clear()))));
88
+ const handleMessage = msg => Effect__namespace.suspend(() => {
89
+ switch (msg[0]) {
90
+ case 0:
91
+ {
92
+ return Deferred__namespace.complete(readyLatch, Effect__namespace.unit);
93
+ }
94
+ case 1:
95
+ {
96
+ const response = msg[1];
97
+ const queue = requestMap.get(response[0]);
98
+ if (!queue) return Effect__namespace.unit;
99
+ switch (response[1]) {
100
+ // data
101
+ case 0:
102
+ {
103
+ return Queue__namespace.offer(queue[0], Exit__namespace.succeed(response[2]));
104
+ }
105
+ // end
106
+ case 1:
107
+ {
108
+ return response.length === 2 ? Queue__namespace.shutdown(queue[0]) : Effect__namespace.zipRight(Queue__namespace.offer(queue[0], Exit__namespace.succeed(response[2])), Queue__namespace.shutdown(queue[0]));
109
+ }
110
+ // error / defect
111
+ case 2:
112
+ case 3:
113
+ {
114
+ return Effect__namespace.zipRight(Queue__namespace.offer(queue[0], response[1] === 2 ? Exit__namespace.fail(response[2]) : Exit__namespace.die(response[2])), Queue__namespace.shutdown(queue[0]));
115
+ }
116
+ }
117
+ }
118
+ }
119
+ });
120
+ const executeAcquire = request => Effect__namespace.tap(Effect__namespace.all([Effect__namespace.sync(() => requestIdCounter++), Queue__namespace.unbounded(), Deferred__namespace.make()]), ([id, queue, deferred]) => Effect__namespace.suspend(() => {
121
+ requestMap.set(id, [queue, deferred]);
122
+ return outbound.offer(id, request);
123
+ }));
124
+ const executeRelease = ([id,, deferred], exit) => {
125
+ const release = Effect__namespace.zipRight(Deferred__namespace.complete(deferred, Effect__namespace.unit), Effect__namespace.sync(() => requestMap.delete(id)));
126
+ return Exit__namespace.isInterrupted(exit) ? Effect__namespace.zipRight(backing.send([id, 1]), release) : release;
127
+ };
128
+ const execute = request => Stream__namespace.flatMap(Stream__namespace.acquireRelease(executeAcquire(request), executeRelease), ([, queue]) => Stream__namespace.flatten(Stream__namespace.fromQueue(queue)));
129
+ const executeEffect = request => Effect__namespace.acquireUseRelease(executeAcquire(request), ([, queue]) => Effect__namespace.flatten(Queue__namespace.take(queue)), executeRelease);
130
+ const handleMessages = yield* _(Queue__namespace.take(backing.queue), Effect__namespace.flatMap(handleMessage), Effect__namespace.forever, Effect__namespace.forkDaemon);
131
+ yield* _(Effect__namespace.addFinalizer(() => handleMessages.interruptAsFork(fiberId)));
132
+ const postMessages = yield* _(semaphore.take(1), Effect__namespace.zipRight(outbound.take), Effect__namespace.flatMap(([id, request]) => Function.pipe(Effect__namespace.suspend(() => {
133
+ const result = requestMap.get(id);
134
+ if (!result) return Effect__namespace.unit;
135
+ const transferables = transfers(request);
136
+ return Effect__namespace.zipRight(backing.send([id, 0, request], transferables), Deferred__namespace.await(result[1]));
137
+ }), Effect__namespace.ensuring(semaphore.release(1)), Effect__namespace.fork)), Effect__namespace.forever, Effect__namespace.forkDaemon);
138
+ yield* _(Effect__namespace.addFinalizer(() => postMessages.interruptAsFork(fiberId)));
139
+ const join = Effect__namespace.race(Fiber__namespace.joinAll([handleMessages, postMessages]), backing.join);
140
+ return {
141
+ id,
142
+ join,
143
+ execute,
144
+ executeEffect
145
+ };
146
+ });
147
+ }
148
+ });
149
+ });
150
+
151
+ /** @internal */
152
+ const layerManager$1 = /*#__PURE__*/Layer__namespace.effect(WorkerManager$1, makeManager$1);
153
+
154
+ /** @internal */
155
+ const makePool$1 = () => options => Effect__namespace.gen(function* (_) {
156
+ const manager = yield* _(WorkerManager$1);
157
+ const backing = yield* _("timeToLive" in options ? Pool__namespace.makeWithTTL({
158
+ acquire: manager.spawn(options),
159
+ min: options.minSize,
160
+ max: options.maxSize,
161
+ timeToLive: options.timeToLive
162
+ }) : Pool__namespace.make({
163
+ acquire: manager.spawn(options),
164
+ size: options.size
165
+ }));
166
+ const pool = {
167
+ backing,
168
+ execute: message => Stream__namespace.unwrap(Effect__namespace.map(Effect__namespace.scoped(backing.get()), worker => worker.execute(message))),
169
+ executeEffect: message => Effect__namespace.flatMap(Effect__namespace.scoped(backing.get()), worker => worker.executeEffect(message))
170
+ };
171
+ return pool;
172
+ });
173
+
174
+ /** @internal */
175
+ const makePoolLayer$1 = managerLayer => (tag, options) => Layer__namespace.provide(managerLayer, Layer__namespace.scoped(tag, makePool$1()(options)));
176
+
177
+ /**
178
+ * @since 1.0.0
179
+ */
180
+
181
+ /**
182
+ * @since 1.0.0
183
+ * @category models
184
+ */
185
+
186
+ /**
187
+ * @since 1.0.0
188
+ * @category models
189
+ */
190
+
191
+ /**
192
+ * @since 1.0.0
193
+ * @category type ids
194
+ */
195
+ const PlatformWorkerTypeId = PlatformWorkerTypeId$1;
196
+
197
+ /**
198
+ * @since 1.0.0
199
+ * @category type ids
200
+ */
201
+
202
+ /**
203
+ * @since 1.0.0
204
+ * @category models
205
+ */
206
+
207
+ /**
208
+ * @since 1.0.0
209
+ * @category tags
210
+ */
211
+ const PlatformWorker = PlatformWorker$1;
212
+
213
+ /**
214
+ * @since 1.0.0
215
+ * @category models
216
+ */
217
+
218
+ /**
219
+ * @since 1.0.0
220
+ * @category models
221
+ */
222
+
223
+ /**
224
+ * @since 1.0.0
225
+ * @category models
226
+ */
227
+
228
+ /**
229
+ * @since 1.0.0
230
+ * @category models
231
+ */
232
+
233
+ /**
234
+ * @category models
235
+ * @since 1.0.0
236
+ */
237
+
238
+ /**
239
+ * @since 1.0.0
240
+ * @category type ids
241
+ */
242
+ const WorkerManagerTypeId = WorkerManagerTypeId$1;
243
+
244
+ /**
245
+ * @since 1.0.0
246
+ * @category type ids
247
+ */
248
+
249
+ /**
250
+ * @since 1.0.0
251
+ * @category models
252
+ */
253
+
254
+ /**
255
+ * @since 1.0.0
256
+ * @category tags
257
+ */
258
+ const WorkerManager = WorkerManager$1;
259
+
260
+ /**
261
+ * @since 1.0.0
262
+ * @category constructors
263
+ */
264
+ const makeManager = makeManager$1;
265
+
266
+ /**
267
+ * @since 1.0.0
268
+ * @category layers
269
+ */
270
+ const layerManager = layerManager$1;
271
+
272
+ /**
273
+ * @since 1.0.0
274
+ * @category constructors
275
+ */
276
+ const makePool = makePool$1;
277
+
278
+ /**
279
+ * @since 1.0.0
280
+ * @category constructors
281
+ */
282
+ const makePoolLayer = makePoolLayer$1;
283
+
284
+ exports.PlatformWorker = PlatformWorker;
285
+ exports.PlatformWorkerTypeId = PlatformWorkerTypeId;
286
+ exports.WorkerManager = WorkerManager;
287
+ exports.WorkerManagerTypeId = WorkerManagerTypeId;
288
+ exports.layerManager = layerManager;
289
+ exports.makeManager = makeManager;
290
+ exports.makePool = makePool;
291
+ exports.makePoolLayer = makePoolLayer;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === "production") {
4
+ module.exports = require("./effect-platform-Worker.cjs.prod.js");
5
+ } else {
6
+ module.exports = require("./effect-platform-Worker.cjs.dev.js");
7
+ }
@@ -0,0 +1,10 @@
1
+ export {
2
+ PlatformWorker,
3
+ PlatformWorkerTypeId,
4
+ WorkerManager,
5
+ WorkerManagerTypeId,
6
+ layerManager,
7
+ makeManager,
8
+ makePool,
9
+ makePoolLayer
10
+ } from "./effect-platform-Worker.cjs.js";
@@ -0,0 +1,291 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Context = require('effect/Context');
6
+ var Deferred = require('effect/Deferred');
7
+ var Effect = require('effect/Effect');
8
+ var Exit = require('effect/Exit');
9
+ var Fiber = require('effect/Fiber');
10
+ var Function = require('effect/Function');
11
+ var Layer = require('effect/Layer');
12
+ var Pool = require('effect/Pool');
13
+ var Queue = require('effect/Queue');
14
+ var Stream = require('effect/Stream');
15
+
16
+ function _interopNamespace(e) {
17
+ if (e && e.__esModule) return e;
18
+ var n = Object.create(null);
19
+ if (e) {
20
+ Object.keys(e).forEach(function (k) {
21
+ if (k !== 'default') {
22
+ var d = Object.getOwnPropertyDescriptor(e, k);
23
+ Object.defineProperty(n, k, d.get ? d : {
24
+ enumerable: true,
25
+ get: function () { return e[k]; }
26
+ });
27
+ }
28
+ });
29
+ }
30
+ n["default"] = e;
31
+ return Object.freeze(n);
32
+ }
33
+
34
+ var Context__namespace = /*#__PURE__*/_interopNamespace(Context);
35
+ var Deferred__namespace = /*#__PURE__*/_interopNamespace(Deferred);
36
+ var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
37
+ var Exit__namespace = /*#__PURE__*/_interopNamespace(Exit);
38
+ var Fiber__namespace = /*#__PURE__*/_interopNamespace(Fiber);
39
+ var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
40
+ var Pool__namespace = /*#__PURE__*/_interopNamespace(Pool);
41
+ var Queue__namespace = /*#__PURE__*/_interopNamespace(Queue);
42
+ var Stream__namespace = /*#__PURE__*/_interopNamespace(Stream);
43
+
44
+ /** @internal */
45
+ const defaultQueue = () => Effect__namespace.map(Queue__namespace.unbounded(), queue => ({
46
+ offer: (id, item) => Queue__namespace.offer(queue, [id, item]),
47
+ take: Queue__namespace.take(queue),
48
+ shutdown: Queue__namespace.shutdown(queue)
49
+ }));
50
+
51
+ /** @internal */
52
+ const PlatformWorkerTypeId$1 = /*#__PURE__*/Symbol.for("@effect/platform/Worker/PlatformWorker");
53
+
54
+ /** @internal */
55
+ const PlatformWorker$1 = /*#__PURE__*/Context__namespace.Tag(PlatformWorkerTypeId$1);
56
+
57
+ /** @internal */
58
+ const WorkerManagerTypeId$1 = /*#__PURE__*/Symbol.for("@effect/platform/Worker/WorkerManager");
59
+
60
+ /** @internal */
61
+ const WorkerManager$1 = /*#__PURE__*/Context__namespace.Tag(WorkerManagerTypeId$1);
62
+
63
+ /** @internal */
64
+ const makeManager$1 = /*#__PURE__*/Effect__namespace.gen(function* (_) {
65
+ const platform = yield* _(PlatformWorker$1);
66
+ let idCounter = 0;
67
+ return WorkerManager$1.of({
68
+ [WorkerManagerTypeId$1]: WorkerManagerTypeId$1,
69
+ spawn({
70
+ permits = 1,
71
+ queue,
72
+ spawn,
73
+ transfers = _ => []
74
+ }) {
75
+ return Effect__namespace.gen(function* (_) {
76
+ const id = idCounter++;
77
+ const fiberId = yield* _(Effect__namespace.fiberId);
78
+ let requestIdCounter = 0;
79
+ const readyLatch = yield* _(Deferred__namespace.make());
80
+ const semaphore = yield* _(Effect__namespace.makeSemaphore(permits));
81
+ const requestMap = new Map();
82
+ const outbound = queue ?? (yield* _(defaultQueue()));
83
+ yield* _(Effect__namespace.addFinalizer(() => outbound.shutdown));
84
+ const backing = yield* _(platform.spawn(spawn(id)));
85
+ yield* _(Effect__namespace.addFinalizer(() => Effect__namespace.zipRight(Effect__namespace.forEach(requestMap.values(), ([queue]) => Queue__namespace.shutdown(queue), {
86
+ discard: true
87
+ }), Effect__namespace.sync(() => requestMap.clear()))));
88
+ const handleMessage = msg => Effect__namespace.suspend(() => {
89
+ switch (msg[0]) {
90
+ case 0:
91
+ {
92
+ return Deferred__namespace.complete(readyLatch, Effect__namespace.unit);
93
+ }
94
+ case 1:
95
+ {
96
+ const response = msg[1];
97
+ const queue = requestMap.get(response[0]);
98
+ if (!queue) return Effect__namespace.unit;
99
+ switch (response[1]) {
100
+ // data
101
+ case 0:
102
+ {
103
+ return Queue__namespace.offer(queue[0], Exit__namespace.succeed(response[2]));
104
+ }
105
+ // end
106
+ case 1:
107
+ {
108
+ return response.length === 2 ? Queue__namespace.shutdown(queue[0]) : Effect__namespace.zipRight(Queue__namespace.offer(queue[0], Exit__namespace.succeed(response[2])), Queue__namespace.shutdown(queue[0]));
109
+ }
110
+ // error / defect
111
+ case 2:
112
+ case 3:
113
+ {
114
+ return Effect__namespace.zipRight(Queue__namespace.offer(queue[0], response[1] === 2 ? Exit__namespace.fail(response[2]) : Exit__namespace.die(response[2])), Queue__namespace.shutdown(queue[0]));
115
+ }
116
+ }
117
+ }
118
+ }
119
+ });
120
+ const executeAcquire = request => Effect__namespace.tap(Effect__namespace.all([Effect__namespace.sync(() => requestIdCounter++), Queue__namespace.unbounded(), Deferred__namespace.make()]), ([id, queue, deferred]) => Effect__namespace.suspend(() => {
121
+ requestMap.set(id, [queue, deferred]);
122
+ return outbound.offer(id, request);
123
+ }));
124
+ const executeRelease = ([id,, deferred], exit) => {
125
+ const release = Effect__namespace.zipRight(Deferred__namespace.complete(deferred, Effect__namespace.unit), Effect__namespace.sync(() => requestMap.delete(id)));
126
+ return Exit__namespace.isInterrupted(exit) ? Effect__namespace.zipRight(backing.send([id, 1]), release) : release;
127
+ };
128
+ const execute = request => Stream__namespace.flatMap(Stream__namespace.acquireRelease(executeAcquire(request), executeRelease), ([, queue]) => Stream__namespace.flatten(Stream__namespace.fromQueue(queue)));
129
+ const executeEffect = request => Effect__namespace.acquireUseRelease(executeAcquire(request), ([, queue]) => Effect__namespace.flatten(Queue__namespace.take(queue)), executeRelease);
130
+ const handleMessages = yield* _(Queue__namespace.take(backing.queue), Effect__namespace.flatMap(handleMessage), Effect__namespace.forever, Effect__namespace.forkDaemon);
131
+ yield* _(Effect__namespace.addFinalizer(() => handleMessages.interruptAsFork(fiberId)));
132
+ const postMessages = yield* _(semaphore.take(1), Effect__namespace.zipRight(outbound.take), Effect__namespace.flatMap(([id, request]) => Function.pipe(Effect__namespace.suspend(() => {
133
+ const result = requestMap.get(id);
134
+ if (!result) return Effect__namespace.unit;
135
+ const transferables = transfers(request);
136
+ return Effect__namespace.zipRight(backing.send([id, 0, request], transferables), Deferred__namespace.await(result[1]));
137
+ }), Effect__namespace.ensuring(semaphore.release(1)), Effect__namespace.fork)), Effect__namespace.forever, Effect__namespace.forkDaemon);
138
+ yield* _(Effect__namespace.addFinalizer(() => postMessages.interruptAsFork(fiberId)));
139
+ const join = Effect__namespace.race(Fiber__namespace.joinAll([handleMessages, postMessages]), backing.join);
140
+ return {
141
+ id,
142
+ join,
143
+ execute,
144
+ executeEffect
145
+ };
146
+ });
147
+ }
148
+ });
149
+ });
150
+
151
+ /** @internal */
152
+ const layerManager$1 = /*#__PURE__*/Layer__namespace.effect(WorkerManager$1, makeManager$1);
153
+
154
+ /** @internal */
155
+ const makePool$1 = () => options => Effect__namespace.gen(function* (_) {
156
+ const manager = yield* _(WorkerManager$1);
157
+ const backing = yield* _("timeToLive" in options ? Pool__namespace.makeWithTTL({
158
+ acquire: manager.spawn(options),
159
+ min: options.minSize,
160
+ max: options.maxSize,
161
+ timeToLive: options.timeToLive
162
+ }) : Pool__namespace.make({
163
+ acquire: manager.spawn(options),
164
+ size: options.size
165
+ }));
166
+ const pool = {
167
+ backing,
168
+ execute: message => Stream__namespace.unwrap(Effect__namespace.map(Effect__namespace.scoped(backing.get()), worker => worker.execute(message))),
169
+ executeEffect: message => Effect__namespace.flatMap(Effect__namespace.scoped(backing.get()), worker => worker.executeEffect(message))
170
+ };
171
+ return pool;
172
+ });
173
+
174
+ /** @internal */
175
+ const makePoolLayer$1 = managerLayer => (tag, options) => Layer__namespace.provide(managerLayer, Layer__namespace.scoped(tag, makePool$1()(options)));
176
+
177
+ /**
178
+ * @since 1.0.0
179
+ */
180
+
181
+ /**
182
+ * @since 1.0.0
183
+ * @category models
184
+ */
185
+
186
+ /**
187
+ * @since 1.0.0
188
+ * @category models
189
+ */
190
+
191
+ /**
192
+ * @since 1.0.0
193
+ * @category type ids
194
+ */
195
+ const PlatformWorkerTypeId = PlatformWorkerTypeId$1;
196
+
197
+ /**
198
+ * @since 1.0.0
199
+ * @category type ids
200
+ */
201
+
202
+ /**
203
+ * @since 1.0.0
204
+ * @category models
205
+ */
206
+
207
+ /**
208
+ * @since 1.0.0
209
+ * @category tags
210
+ */
211
+ const PlatformWorker = PlatformWorker$1;
212
+
213
+ /**
214
+ * @since 1.0.0
215
+ * @category models
216
+ */
217
+
218
+ /**
219
+ * @since 1.0.0
220
+ * @category models
221
+ */
222
+
223
+ /**
224
+ * @since 1.0.0
225
+ * @category models
226
+ */
227
+
228
+ /**
229
+ * @since 1.0.0
230
+ * @category models
231
+ */
232
+
233
+ /**
234
+ * @category models
235
+ * @since 1.0.0
236
+ */
237
+
238
+ /**
239
+ * @since 1.0.0
240
+ * @category type ids
241
+ */
242
+ const WorkerManagerTypeId = WorkerManagerTypeId$1;
243
+
244
+ /**
245
+ * @since 1.0.0
246
+ * @category type ids
247
+ */
248
+
249
+ /**
250
+ * @since 1.0.0
251
+ * @category models
252
+ */
253
+
254
+ /**
255
+ * @since 1.0.0
256
+ * @category tags
257
+ */
258
+ const WorkerManager = WorkerManager$1;
259
+
260
+ /**
261
+ * @since 1.0.0
262
+ * @category constructors
263
+ */
264
+ const makeManager = makeManager$1;
265
+
266
+ /**
267
+ * @since 1.0.0
268
+ * @category layers
269
+ */
270
+ const layerManager = layerManager$1;
271
+
272
+ /**
273
+ * @since 1.0.0
274
+ * @category constructors
275
+ */
276
+ const makePool = makePool$1;
277
+
278
+ /**
279
+ * @since 1.0.0
280
+ * @category constructors
281
+ */
282
+ const makePoolLayer = makePoolLayer$1;
283
+
284
+ exports.PlatformWorker = PlatformWorker;
285
+ exports.PlatformWorkerTypeId = PlatformWorkerTypeId;
286
+ exports.WorkerManager = WorkerManager;
287
+ exports.WorkerManagerTypeId = WorkerManagerTypeId;
288
+ exports.layerManager = layerManager;
289
+ exports.makeManager = makeManager;
290
+ exports.makePool = makePool;
291
+ exports.makePoolLayer = makePoolLayer;