@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.
- package/Worker/dist/effect-platform-Worker.cjs.d.mts +2 -0
- package/Worker/dist/effect-platform-Worker.cjs.d.mts.map +1 -0
- package/Worker/dist/effect-platform-Worker.cjs.d.ts +2 -0
- package/Worker/dist/effect-platform-Worker.cjs.d.ts.map +1 -0
- package/Worker/dist/effect-platform-Worker.cjs.dev.js +291 -0
- package/Worker/dist/effect-platform-Worker.cjs.js +7 -0
- package/Worker/dist/effect-platform-Worker.cjs.mjs +10 -0
- package/Worker/dist/effect-platform-Worker.cjs.prod.js +291 -0
- package/Worker/dist/effect-platform-Worker.esm.js +252 -0
- package/Worker/package.json +4 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts +2 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.mts.map +1 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts +2 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.d.ts.map +1 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.dev.js +65 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.js +7 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.mjs +4 -0
- package/WorkerError/dist/effect-platform-WorkerError.cjs.prod.js +65 -0
- package/WorkerError/dist/effect-platform-WorkerError.esm.js +40 -0
- package/WorkerError/package.json +4 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts +2 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.mts.map +1 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts +2 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.d.ts.map +1 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.dev.js +129 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.js +7 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.mjs +5 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.cjs.prod.js +129 -0
- package/WorkerRunner/dist/effect-platform-WorkerRunner.esm.js +97 -0
- package/WorkerRunner/package.json +4 -0
- package/dist/declarations/src/Worker.d.ts +170 -0
- package/dist/declarations/src/Worker.d.ts.map +1 -0
- package/dist/declarations/src/WorkerError.d.ts +30 -0
- package/dist/declarations/src/WorkerError.d.ts.map +1 -0
- package/dist/declarations/src/WorkerRunner.d.ts +72 -0
- package/dist/declarations/src/WorkerRunner.d.ts.map +1 -0
- package/dist/declarations/src/index.d.ts +12 -0
- package/dist/declarations/src/index.d.ts.map +1 -1
- package/dist/effect-platform.cjs.dev.js +9 -0
- package/dist/effect-platform.cjs.mjs +4 -1
- package/dist/effect-platform.cjs.prod.js +9 -0
- package/dist/effect-platform.esm.js +6 -0
- package/package.json +27 -6
- package/src/Worker.ts +207 -0
- package/src/WorkerError.ts +34 -0
- package/src/WorkerRunner.ts +83 -0
- package/src/index.ts +15 -0
- package/src/internal/worker.ts +262 -0
- package/src/internal/workerError.ts +16 -0
- package/src/internal/workerRunner.ts +83 -0
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"effect-platform-WorkerError.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerError.d.ts"],"names":[],"mappings":"AAAA"}
|
|
@@ -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,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,40 @@
|
|
|
1
|
+
import * as Data from 'effect/Data';
|
|
2
|
+
|
|
3
|
+
/** @internal */
|
|
4
|
+
const WorkerErrorTypeId$1 = /*#__PURE__*/Symbol.for("@effect-ts/platform/Worker/WorkerError");
|
|
5
|
+
|
|
6
|
+
/** @internal */
|
|
7
|
+
const WorkerError$1 = (reason, error) => Data.struct({
|
|
8
|
+
[WorkerErrorTypeId$1]: WorkerErrorTypeId$1,
|
|
9
|
+
_tag: "WorkerError",
|
|
10
|
+
reason,
|
|
11
|
+
error
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
* @category type ids
|
|
21
|
+
*/
|
|
22
|
+
const WorkerErrorTypeId = WorkerErrorTypeId$1;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
* @category type ids
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
* @category errors
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
* @category errors
|
|
37
|
+
*/
|
|
38
|
+
const WorkerError = WorkerError$1;
|
|
39
|
+
|
|
40
|
+
export { WorkerError, WorkerErrorTypeId };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-platform-WorkerRunner.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerRunner.d.ts"],"names":[],"mappings":"AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-platform-WorkerRunner.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerRunner.d.ts"],"names":[],"mappings":"AAAA"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var Cause = require('effect/Cause');
|
|
6
|
+
var Context = require('effect/Context');
|
|
7
|
+
var Effect = require('effect/Effect');
|
|
8
|
+
var Either = require('effect/Either');
|
|
9
|
+
var Fiber = require('effect/Fiber');
|
|
10
|
+
var Function = require('effect/Function');
|
|
11
|
+
var Queue = require('effect/Queue');
|
|
12
|
+
var Stream = require('effect/Stream');
|
|
13
|
+
|
|
14
|
+
function _interopNamespace(e) {
|
|
15
|
+
if (e && e.__esModule) return e;
|
|
16
|
+
var n = Object.create(null);
|
|
17
|
+
if (e) {
|
|
18
|
+
Object.keys(e).forEach(function (k) {
|
|
19
|
+
if (k !== 'default') {
|
|
20
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
21
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return e[k]; }
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
n["default"] = e;
|
|
29
|
+
return Object.freeze(n);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var Cause__namespace = /*#__PURE__*/_interopNamespace(Cause);
|
|
33
|
+
var Context__namespace = /*#__PURE__*/_interopNamespace(Context);
|
|
34
|
+
var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
|
|
35
|
+
var Either__namespace = /*#__PURE__*/_interopNamespace(Either);
|
|
36
|
+
var Fiber__namespace = /*#__PURE__*/_interopNamespace(Fiber);
|
|
37
|
+
var Queue__namespace = /*#__PURE__*/_interopNamespace(Queue);
|
|
38
|
+
var Stream__namespace = /*#__PURE__*/_interopNamespace(Stream);
|
|
39
|
+
|
|
40
|
+
/** @internal */
|
|
41
|
+
const PlatformRunnerTypeId$1 = /*#__PURE__*/Symbol.for("@effect/platform/Runner/PlatformRunner");
|
|
42
|
+
|
|
43
|
+
/** @internal */
|
|
44
|
+
const PlatformRunner$1 = /*#__PURE__*/Context__namespace.Tag(PlatformRunnerTypeId$1);
|
|
45
|
+
|
|
46
|
+
/** @internal */
|
|
47
|
+
const make$1 = (process, options) => Effect__namespace.gen(function* (_) {
|
|
48
|
+
const platform = yield* _(PlatformRunner$1);
|
|
49
|
+
const backing = yield* _(platform.start());
|
|
50
|
+
const fiberMap = new Map();
|
|
51
|
+
const handleRequests = Function.pipe(Queue__namespace.take(backing.queue), Effect__namespace.tap(req => {
|
|
52
|
+
const id = req[0];
|
|
53
|
+
if (req[1] === 1) {
|
|
54
|
+
const fiber = fiberMap.get(id);
|
|
55
|
+
if (!fiber) return Effect__namespace.unit;
|
|
56
|
+
return Fiber__namespace.interrupt(fiber);
|
|
57
|
+
}
|
|
58
|
+
const stream = process(req[2]);
|
|
59
|
+
const effect = Effect__namespace.isEffect(stream) ? Effect__namespace.matchCauseEffect(stream, {
|
|
60
|
+
onFailure: cause => Either__namespace.match(Cause__namespace.failureOrCause(cause), {
|
|
61
|
+
onLeft: error => backing.send([id, 2, error]),
|
|
62
|
+
onRight: cause => backing.send([id, 3, Cause__namespace.squash(cause)])
|
|
63
|
+
}),
|
|
64
|
+
onSuccess: data => backing.send([id, 1, data])
|
|
65
|
+
}) : Function.pipe(stream, Stream__namespace.tap(item => backing.send([id, 0, item], options?.transfers ? options.transfers(item) : undefined)), Stream__namespace.runDrain, Effect__namespace.matchCauseEffect({
|
|
66
|
+
onFailure: cause => Either__namespace.match(Cause__namespace.failureOrCause(cause), {
|
|
67
|
+
onLeft: error => backing.send([id, 2, error]),
|
|
68
|
+
onRight: cause => backing.send([id, 3, Cause__namespace.squash(cause)])
|
|
69
|
+
}),
|
|
70
|
+
onSuccess: () => backing.send([id, 1])
|
|
71
|
+
}));
|
|
72
|
+
return Function.pipe(effect, Effect__namespace.ensuring(Effect__namespace.sync(() => fiberMap.delete(id))), Effect__namespace.fork, Effect__namespace.tap(fiber => Effect__namespace.sync(() => fiberMap.set(id, fiber))));
|
|
73
|
+
}), Effect__namespace.forever);
|
|
74
|
+
return yield* _(Effect__namespace.all([handleRequests, Fiber__namespace.join(backing.fiber)], {
|
|
75
|
+
concurrency: "unbounded",
|
|
76
|
+
discard: true
|
|
77
|
+
}));
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @since 1.0.0
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @since 1.0.0
|
|
86
|
+
* @category models
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @since 1.0.0
|
|
91
|
+
* @category models
|
|
92
|
+
*/
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @since 1.0.0
|
|
96
|
+
* @category type ids
|
|
97
|
+
*/
|
|
98
|
+
const PlatformRunnerTypeId = PlatformRunnerTypeId$1;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @since 1.0.0
|
|
102
|
+
* @category type ids
|
|
103
|
+
*/
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @since 1.0.0
|
|
107
|
+
* @category models
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @since 1.0.0
|
|
112
|
+
* @category tags
|
|
113
|
+
*/
|
|
114
|
+
const PlatformRunner = PlatformRunner$1;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @since 1.0.0
|
|
118
|
+
* @category models
|
|
119
|
+
*/
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @since 1.0.0
|
|
123
|
+
* @category constructors
|
|
124
|
+
*/
|
|
125
|
+
const make = make$1;
|
|
126
|
+
|
|
127
|
+
exports.PlatformRunner = PlatformRunner;
|
|
128
|
+
exports.PlatformRunnerTypeId = PlatformRunnerTypeId;
|
|
129
|
+
exports.make = make;
|