@effect/platform 0.21.0 → 0.22.1

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 (116) hide show
  1. package/Http/App/dist/effect-platform-Http-App.cjs.dev.js +22 -1
  2. package/Http/App/dist/effect-platform-Http-App.cjs.mjs +1 -0
  3. package/Http/App/dist/effect-platform-Http-App.cjs.prod.js +22 -1
  4. package/Http/App/dist/effect-platform-Http-App.esm.js +21 -1
  5. package/Http/Client/dist/effect-platform-Http-Client.cjs.dev.js +12 -12
  6. package/Http/Client/dist/effect-platform-Http-Client.cjs.mjs +2 -2
  7. package/Http/Client/dist/effect-platform-Http-Client.cjs.prod.js +12 -12
  8. package/Http/Client/dist/effect-platform-Http-Client.esm.js +12 -12
  9. package/Http/ClientRequest/dist/effect-platform-Http-ClientRequest.esm.js +2 -2
  10. package/Http/Middleware/dist/effect-platform-Http-Middleware.cjs.dev.js +5 -13
  11. package/Http/Middleware/dist/effect-platform-Http-Middleware.cjs.mjs +0 -2
  12. package/Http/Middleware/dist/effect-platform-Http-Middleware.cjs.prod.js +5 -13
  13. package/Http/Middleware/dist/effect-platform-Http-Middleware.esm.js +7 -13
  14. package/Http/Router/dist/effect-platform-Http-Router.cjs.dev.js +1 -1
  15. package/Http/Router/dist/effect-platform-Http-Router.cjs.prod.js +1 -1
  16. package/Http/Router/dist/effect-platform-Http-Router.esm.js +3 -3
  17. package/Http/ServerError/dist/effect-platform-Http-ServerError.esm.js +1 -1
  18. package/Http/ServerRequest/dist/effect-platform-Http-ServerRequest.cjs.dev.js +1 -1
  19. package/Http/ServerRequest/dist/effect-platform-Http-ServerRequest.cjs.prod.js +1 -1
  20. package/Http/ServerRequest/dist/effect-platform-Http-ServerRequest.esm.js +2 -2
  21. package/Http/ServerResponse/dist/effect-platform-Http-ServerResponse.esm.js +1 -1
  22. package/HttpClient/dist/effect-platform-HttpClient.cjs.dev.js +5 -5
  23. package/HttpClient/dist/effect-platform-HttpClient.cjs.prod.js +5 -5
  24. package/HttpClient/dist/effect-platform-HttpClient.esm.js +6 -6
  25. package/HttpServer/dist/effect-platform-HttpServer.cjs.dev.js +12 -11
  26. package/HttpServer/dist/effect-platform-HttpServer.cjs.prod.js +12 -11
  27. package/HttpServer/dist/effect-platform-HttpServer.esm.js +14 -13
  28. package/Worker/dist/effect-platform-Worker.cjs.d.mts +2 -0
  29. package/Worker/dist/effect-platform-Worker.cjs.d.mts.map +1 -0
  30. package/Worker/dist/effect-platform-Worker.cjs.d.ts +2 -0
  31. package/Worker/dist/effect-platform-Worker.cjs.d.ts.map +1 -0
  32. package/Worker/dist/effect-platform-Worker.cjs.dev.js +291 -0
  33. package/Worker/dist/effect-platform-Worker.cjs.js +7 -0
  34. package/Worker/dist/effect-platform-Worker.cjs.mjs +10 -0
  35. package/Worker/dist/effect-platform-Worker.cjs.prod.js +291 -0
  36. package/Worker/dist/effect-platform-Worker.esm.js +252 -0
  37. package/Worker/package.json +4 -0
  38. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts +2 -0
  39. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts.map +1 -0
  40. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts +2 -0
  41. package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts.map +1 -0
  42. package/WorkerError/dist/effect-platform-WorkerError.cjs.dev.js +65 -0
  43. package/WorkerError/dist/effect-platform-WorkerError.cjs.js +7 -0
  44. package/WorkerError/dist/effect-platform-WorkerError.cjs.mjs +4 -0
  45. package/WorkerError/dist/effect-platform-WorkerError.cjs.prod.js +65 -0
  46. package/WorkerError/dist/effect-platform-WorkerError.esm.js +40 -0
  47. package/WorkerError/package.json +4 -0
  48. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts +2 -0
  49. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts.map +1 -0
  50. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts +2 -0
  51. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts.map +1 -0
  52. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.dev.js +129 -0
  53. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.js +7 -0
  54. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.mjs +5 -0
  55. package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.prod.js +129 -0
  56. package/WorkerRunner/dist/effect-platform-WorkerRunner.esm.js +97 -0
  57. package/WorkerRunner/package.json +4 -0
  58. package/dist/{App-1ca51fa7.esm.js → App-2d206a13.esm.js} +9 -1
  59. package/dist/{App-d8b904fa.cjs.prod.js → App-7ef679dc.cjs.prod.js} +9 -0
  60. package/dist/{App-18152f12.cjs.dev.js → App-bad10dc1.cjs.dev.js} +9 -0
  61. package/dist/{Client-3938c9f5.cjs.dev.js → Client-0146412d.cjs.dev.js} +16 -19
  62. package/dist/{Client-e8ebeb3a.esm.js → Client-4f8f804b.esm.js} +18 -21
  63. package/dist/{Client-5497adf2.cjs.prod.js → Client-e9835f16.cjs.prod.js} +16 -19
  64. package/dist/{ClientRequest-490c76cd.esm.js → ClientRequest-27630c54.esm.js} +1 -1
  65. package/dist/Middleware-934a0c8f.esm.js +41 -0
  66. package/dist/Middleware-a2c50c35.cjs.dev.js +46 -0
  67. package/dist/Middleware-e53794a3.cjs.prod.js +46 -0
  68. package/dist/{Router-3112d780.esm.js → Router-2505b5dd.esm.js} +2 -2
  69. package/dist/{Router-2c0b718b.cjs.prod.js → Router-3645c2b3.cjs.prod.js} +3 -3
  70. package/dist/{Router-06c5cb9a.cjs.dev.js → Router-b9feed01.cjs.dev.js} +3 -3
  71. package/dist/{ServerError-04ad5b57.esm.js → ServerError-97730ed2.esm.js} +1 -1
  72. package/dist/{ServerRequest-41c7e979.esm.js → ServerRequest-078a4bb2.esm.js} +2 -2
  73. package/dist/ServerRequest-705b12bb.cjs.prod.js +2 -2
  74. package/dist/ServerRequest-8e9629a5.cjs.dev.js +2 -2
  75. package/dist/{ServerResponse-03c252ea.esm.js → ServerResponse-de572c21.esm.js} +1 -1
  76. package/dist/{clientRequest-6121a7f6.esm.js → clientRequest-fe7578cf.esm.js} +1 -1
  77. package/dist/declarations/src/Error.d.ts +1 -1
  78. package/dist/declarations/src/Error.d.ts.map +1 -1
  79. package/dist/declarations/src/Http/App.d.ts +5 -0
  80. package/dist/declarations/src/Http/App.d.ts.map +1 -1
  81. package/dist/declarations/src/Http/Client.d.ts +5 -6
  82. package/dist/declarations/src/Http/Client.d.ts.map +1 -1
  83. package/dist/declarations/src/Http/Middleware.d.ts +0 -10
  84. package/dist/declarations/src/Http/Middleware.d.ts.map +1 -1
  85. package/dist/declarations/src/Worker.d.ts +170 -0
  86. package/dist/declarations/src/Worker.d.ts.map +1 -0
  87. package/dist/declarations/src/WorkerError.d.ts +30 -0
  88. package/dist/declarations/src/WorkerError.d.ts.map +1 -0
  89. package/dist/declarations/src/WorkerRunner.d.ts +72 -0
  90. package/dist/declarations/src/WorkerRunner.d.ts.map +1 -0
  91. package/dist/declarations/src/index.d.ts +12 -0
  92. package/dist/declarations/src/index.d.ts.map +1 -1
  93. package/dist/effect-platform.cjs.dev.js +9 -0
  94. package/dist/effect-platform.cjs.mjs +4 -1
  95. package/dist/effect-platform.cjs.prod.js +9 -0
  96. package/dist/effect-platform.esm.js +6 -0
  97. package/dist/middleware-85768a1e.cjs.prod.js +66 -0
  98. package/dist/middleware-98794cc2.cjs.dev.js +66 -0
  99. package/dist/middleware-ea618e68.esm.js +41 -0
  100. package/package.json +24 -3
  101. package/src/Error.ts +1 -1
  102. package/src/Http/App.ts +9 -0
  103. package/src/Http/Client.ts +10 -8
  104. package/src/Http/Middleware.ts +0 -12
  105. package/src/Worker.ts +207 -0
  106. package/src/WorkerError.ts +34 -0
  107. package/src/WorkerRunner.ts +83 -0
  108. package/src/index.ts +15 -0
  109. package/src/internal/http/client.ts +33 -33
  110. package/src/internal/http/middleware.ts +4 -26
  111. package/src/internal/worker.ts +262 -0
  112. package/src/internal/workerError.ts +16 -0
  113. package/src/internal/workerRunner.ts +83 -0
  114. package/dist/Middleware-04ddadf1.esm.js +0 -100
  115. package/dist/Middleware-3e264366.cjs.dev.js +0 -127
  116. package/dist/Middleware-8b05423d.cjs.prod.js +0 -127
@@ -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,252 @@
1
+ import * as Context from 'effect/Context';
2
+ import * as Deferred from 'effect/Deferred';
3
+ import * as Effect from 'effect/Effect';
4
+ import * as Exit from 'effect/Exit';
5
+ import * as Fiber from 'effect/Fiber';
6
+ import { pipe } from 'effect/Function';
7
+ import * as Layer from 'effect/Layer';
8
+ import * as Pool from 'effect/Pool';
9
+ import * as Queue from 'effect/Queue';
10
+ import * as Stream from 'effect/Stream';
11
+
12
+ /** @internal */
13
+ const defaultQueue = () => Effect.map(Queue.unbounded(), queue => ({
14
+ offer: (id, item) => Queue.offer(queue, [id, item]),
15
+ take: Queue.take(queue),
16
+ shutdown: Queue.shutdown(queue)
17
+ }));
18
+
19
+ /** @internal */
20
+ const PlatformWorkerTypeId$1 = /*#__PURE__*/Symbol.for("@effect/platform/Worker/PlatformWorker");
21
+
22
+ /** @internal */
23
+ const PlatformWorker$1 = /*#__PURE__*/Context.Tag(PlatformWorkerTypeId$1);
24
+
25
+ /** @internal */
26
+ const WorkerManagerTypeId$1 = /*#__PURE__*/Symbol.for("@effect/platform/Worker/WorkerManager");
27
+
28
+ /** @internal */
29
+ const WorkerManager$1 = /*#__PURE__*/Context.Tag(WorkerManagerTypeId$1);
30
+
31
+ /** @internal */
32
+ const makeManager$1 = /*#__PURE__*/Effect.gen(function* (_) {
33
+ const platform = yield* _(PlatformWorker$1);
34
+ let idCounter = 0;
35
+ return WorkerManager$1.of({
36
+ [WorkerManagerTypeId$1]: WorkerManagerTypeId$1,
37
+ spawn({
38
+ permits = 1,
39
+ queue,
40
+ spawn,
41
+ transfers = _ => []
42
+ }) {
43
+ return Effect.gen(function* (_) {
44
+ const id = idCounter++;
45
+ const fiberId = yield* _(Effect.fiberId);
46
+ let requestIdCounter = 0;
47
+ const readyLatch = yield* _(Deferred.make());
48
+ const semaphore = yield* _(Effect.makeSemaphore(permits));
49
+ const requestMap = new Map();
50
+ const outbound = queue ?? (yield* _(defaultQueue()));
51
+ yield* _(Effect.addFinalizer(() => outbound.shutdown));
52
+ const backing = yield* _(platform.spawn(spawn(id)));
53
+ yield* _(Effect.addFinalizer(() => Effect.zipRight(Effect.forEach(requestMap.values(), ([queue]) => Queue.shutdown(queue), {
54
+ discard: true
55
+ }), Effect.sync(() => requestMap.clear()))));
56
+ const handleMessage = msg => Effect.suspend(() => {
57
+ switch (msg[0]) {
58
+ case 0:
59
+ {
60
+ return Deferred.complete(readyLatch, Effect.unit);
61
+ }
62
+ case 1:
63
+ {
64
+ const response = msg[1];
65
+ const queue = requestMap.get(response[0]);
66
+ if (!queue) return Effect.unit;
67
+ switch (response[1]) {
68
+ // data
69
+ case 0:
70
+ {
71
+ return Queue.offer(queue[0], Exit.succeed(response[2]));
72
+ }
73
+ // end
74
+ case 1:
75
+ {
76
+ return response.length === 2 ? Queue.shutdown(queue[0]) : Effect.zipRight(Queue.offer(queue[0], Exit.succeed(response[2])), Queue.shutdown(queue[0]));
77
+ }
78
+ // error / defect
79
+ case 2:
80
+ case 3:
81
+ {
82
+ return Effect.zipRight(Queue.offer(queue[0], response[1] === 2 ? Exit.fail(response[2]) : Exit.die(response[2])), Queue.shutdown(queue[0]));
83
+ }
84
+ }
85
+ }
86
+ }
87
+ });
88
+ const executeAcquire = request => Effect.tap(Effect.all([Effect.sync(() => requestIdCounter++), Queue.unbounded(), Deferred.make()]), ([id, queue, deferred]) => Effect.suspend(() => {
89
+ requestMap.set(id, [queue, deferred]);
90
+ return outbound.offer(id, request);
91
+ }));
92
+ const executeRelease = ([id,, deferred], exit) => {
93
+ const release = Effect.zipRight(Deferred.complete(deferred, Effect.unit), Effect.sync(() => requestMap.delete(id)));
94
+ return Exit.isInterrupted(exit) ? Effect.zipRight(backing.send([id, 1]), release) : release;
95
+ };
96
+ const execute = request => Stream.flatMap(Stream.acquireRelease(executeAcquire(request), executeRelease), ([, queue]) => Stream.flatten(Stream.fromQueue(queue)));
97
+ const executeEffect = request => Effect.acquireUseRelease(executeAcquire(request), ([, queue]) => Effect.flatten(Queue.take(queue)), executeRelease);
98
+ const handleMessages = yield* _(Queue.take(backing.queue), Effect.flatMap(handleMessage), Effect.forever, Effect.forkDaemon);
99
+ yield* _(Effect.addFinalizer(() => handleMessages.interruptAsFork(fiberId)));
100
+ const postMessages = yield* _(semaphore.take(1), Effect.zipRight(outbound.take), Effect.flatMap(([id, request]) => pipe(Effect.suspend(() => {
101
+ const result = requestMap.get(id);
102
+ if (!result) return Effect.unit;
103
+ const transferables = transfers(request);
104
+ return Effect.zipRight(backing.send([id, 0, request], transferables), Deferred.await(result[1]));
105
+ }), Effect.ensuring(semaphore.release(1)), Effect.fork)), Effect.forever, Effect.forkDaemon);
106
+ yield* _(Effect.addFinalizer(() => postMessages.interruptAsFork(fiberId)));
107
+ const join = Effect.race(Fiber.joinAll([handleMessages, postMessages]), backing.join);
108
+ return {
109
+ id,
110
+ join,
111
+ execute,
112
+ executeEffect
113
+ };
114
+ });
115
+ }
116
+ });
117
+ });
118
+
119
+ /** @internal */
120
+ const layerManager$1 = /*#__PURE__*/Layer.effect(WorkerManager$1, makeManager$1);
121
+
122
+ /** @internal */
123
+ const makePool$1 = () => options => Effect.gen(function* (_) {
124
+ const manager = yield* _(WorkerManager$1);
125
+ const backing = yield* _("timeToLive" in options ? Pool.makeWithTTL({
126
+ acquire: manager.spawn(options),
127
+ min: options.minSize,
128
+ max: options.maxSize,
129
+ timeToLive: options.timeToLive
130
+ }) : Pool.make({
131
+ acquire: manager.spawn(options),
132
+ size: options.size
133
+ }));
134
+ const pool = {
135
+ backing,
136
+ execute: message => Stream.unwrap(Effect.map(Effect.scoped(backing.get()), worker => worker.execute(message))),
137
+ executeEffect: message => Effect.flatMap(Effect.scoped(backing.get()), worker => worker.executeEffect(message))
138
+ };
139
+ return pool;
140
+ });
141
+
142
+ /** @internal */
143
+ const makePoolLayer$1 = managerLayer => (tag, options) => Layer.provide(managerLayer, Layer.scoped(tag, makePool$1()(options)));
144
+
145
+ /**
146
+ * @since 1.0.0
147
+ */
148
+
149
+ /**
150
+ * @since 1.0.0
151
+ * @category models
152
+ */
153
+
154
+ /**
155
+ * @since 1.0.0
156
+ * @category models
157
+ */
158
+
159
+ /**
160
+ * @since 1.0.0
161
+ * @category type ids
162
+ */
163
+ const PlatformWorkerTypeId = PlatformWorkerTypeId$1;
164
+
165
+ /**
166
+ * @since 1.0.0
167
+ * @category type ids
168
+ */
169
+
170
+ /**
171
+ * @since 1.0.0
172
+ * @category models
173
+ */
174
+
175
+ /**
176
+ * @since 1.0.0
177
+ * @category tags
178
+ */
179
+ const PlatformWorker = PlatformWorker$1;
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 models
194
+ */
195
+
196
+ /**
197
+ * @since 1.0.0
198
+ * @category models
199
+ */
200
+
201
+ /**
202
+ * @category models
203
+ * @since 1.0.0
204
+ */
205
+
206
+ /**
207
+ * @since 1.0.0
208
+ * @category type ids
209
+ */
210
+ const WorkerManagerTypeId = WorkerManagerTypeId$1;
211
+
212
+ /**
213
+ * @since 1.0.0
214
+ * @category type ids
215
+ */
216
+
217
+ /**
218
+ * @since 1.0.0
219
+ * @category models
220
+ */
221
+
222
+ /**
223
+ * @since 1.0.0
224
+ * @category tags
225
+ */
226
+ const WorkerManager = WorkerManager$1;
227
+
228
+ /**
229
+ * @since 1.0.0
230
+ * @category constructors
231
+ */
232
+ const makeManager = makeManager$1;
233
+
234
+ /**
235
+ * @since 1.0.0
236
+ * @category layers
237
+ */
238
+ const layerManager = layerManager$1;
239
+
240
+ /**
241
+ * @since 1.0.0
242
+ * @category constructors
243
+ */
244
+ const makePool = makePool$1;
245
+
246
+ /**
247
+ * @since 1.0.0
248
+ * @category constructors
249
+ */
250
+ const makePoolLayer = makePoolLayer$1;
251
+
252
+ export { PlatformWorker, PlatformWorkerTypeId, WorkerManager, WorkerManagerTypeId, layerManager, makeManager, makePool, makePoolLayer };
@@ -0,0 +1,4 @@
1
+ {
2
+ "main": "dist/effect-platform-Worker.cjs.js",
3
+ "module": "dist/effect-platform-Worker.esm.js"
4
+ }
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/WorkerError.js";
2
+ //# sourceMappingURL=effect-platform-WorkerError.cjs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-WorkerError.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerError.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/WorkerError";
2
+ //# sourceMappingURL=effect-platform-WorkerError.cjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-WorkerError.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerError.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,65 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Data = require('effect/Data');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n["default"] = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var Data__namespace = /*#__PURE__*/_interopNamespace(Data);
26
+
27
+ /** @internal */
28
+ const WorkerErrorTypeId$1 = /*#__PURE__*/Symbol.for("@effect-ts/platform/Worker/WorkerError");
29
+
30
+ /** @internal */
31
+ const WorkerError$1 = (reason, error) => Data__namespace.struct({
32
+ [WorkerErrorTypeId$1]: WorkerErrorTypeId$1,
33
+ _tag: "WorkerError",
34
+ reason,
35
+ error
36
+ });
37
+
38
+ /**
39
+ * @since 1.0.0
40
+ */
41
+
42
+ /**
43
+ * @since 1.0.0
44
+ * @category type ids
45
+ */
46
+ const WorkerErrorTypeId = WorkerErrorTypeId$1;
47
+
48
+ /**
49
+ * @since 1.0.0
50
+ * @category type ids
51
+ */
52
+
53
+ /**
54
+ * @since 1.0.0
55
+ * @category errors
56
+ */
57
+
58
+ /**
59
+ * @since 1.0.0
60
+ * @category errors
61
+ */
62
+ const WorkerError = WorkerError$1;
63
+
64
+ exports.WorkerError = WorkerError;
65
+ exports.WorkerErrorTypeId = WorkerErrorTypeId;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === "production") {
4
+ module.exports = require("./effect-platform-WorkerError.cjs.prod.js");
5
+ } else {
6
+ module.exports = require("./effect-platform-WorkerError.cjs.dev.js");
7
+ }
@@ -0,0 +1,4 @@
1
+ export {
2
+ WorkerError,
3
+ WorkerErrorTypeId
4
+ } from "./effect-platform-WorkerError.cjs.js";