@effect/platform-browser 0.10.1 → 0.10.2
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-browser-Worker.cjs.d.mts +2 -0
- package/Worker/dist/effect-platform-browser-Worker.cjs.d.mts.map +1 -0
- package/Worker/dist/effect-platform-browser-Worker.cjs.d.ts +2 -0
- package/Worker/dist/effect-platform-browser-Worker.cjs.d.ts.map +1 -0
- package/Worker/dist/effect-platform-browser-Worker.cjs.dev.js +125 -0
- package/Worker/dist/effect-platform-browser-Worker.cjs.js +7 -0
- package/Worker/dist/effect-platform-browser-Worker.cjs.mjs +1 -0
- package/Worker/dist/effect-platform-browser-Worker.cjs.prod.js +125 -0
- package/Worker/dist/effect-platform-browser-Worker.esm.js +90 -0
- package/Worker/package.json +4 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.d.mts +2 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.d.mts.map +1 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.d.ts +2 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.d.ts.map +1 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.dev.js +109 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.js +7 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.mjs +1 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.prod.js +109 -0
- package/WorkerRunner/dist/effect-platform-browser-WorkerRunner.esm.js +77 -0
- package/WorkerRunner/package.json +4 -0
- package/dist/declarations/src/Worker.d.ts +35 -0
- package/dist/declarations/src/Worker.d.ts.map +1 -0
- package/dist/declarations/src/WorkerRunner.d.ts +20 -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-browser.cjs.dev.js +6 -0
- package/dist/effect-platform-browser.cjs.mjs +3 -1
- package/dist/effect-platform-browser.cjs.prod.js +6 -0
- package/dist/effect-platform-browser.esm.js +4 -0
- package/package.json +18 -3
- package/src/Worker.ts +45 -0
- package/src/WorkerRunner.ts +25 -0
- package/src/index.ts +14 -0
- package/src/internal/worker.ts +58 -0
- package/src/internal/workerRunner.ts +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-platform-browser-Worker.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/Worker.d.ts"],"names":[],"mappings":"AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-platform-browser-Worker.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/Worker.d.ts"],"names":[],"mappings":"AAAA"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var Worker = require('@effect/platform/Worker');
|
|
6
|
+
var WorkerError = require('@effect/platform/WorkerError');
|
|
7
|
+
var effect = require('effect');
|
|
8
|
+
var Effect = require('effect/Effect');
|
|
9
|
+
var Layer = require('effect/Layer');
|
|
10
|
+
var Queue = require('effect/Queue');
|
|
11
|
+
|
|
12
|
+
function _interopNamespace(e) {
|
|
13
|
+
if (e && e.__esModule) return e;
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n["default"] = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var Worker__namespace = /*#__PURE__*/_interopNamespace(Worker);
|
|
31
|
+
var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
|
|
32
|
+
var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
|
|
33
|
+
var Queue__namespace = /*#__PURE__*/_interopNamespace(Queue);
|
|
34
|
+
|
|
35
|
+
const platformWorkerImpl = /*#__PURE__*/Worker__namespace.PlatformWorker.of({
|
|
36
|
+
[Worker__namespace.PlatformWorkerTypeId]: Worker__namespace.PlatformWorkerTypeId,
|
|
37
|
+
spawn(worker_) {
|
|
38
|
+
return Effect__namespace.gen(function* (_) {
|
|
39
|
+
const worker = worker_;
|
|
40
|
+
let port;
|
|
41
|
+
if ("port" in worker) {
|
|
42
|
+
port = worker.port;
|
|
43
|
+
port.start();
|
|
44
|
+
} else {
|
|
45
|
+
port = worker;
|
|
46
|
+
}
|
|
47
|
+
yield* _(Effect__namespace.addFinalizer(() => Effect__namespace.sync(() => port.postMessage([1]))));
|
|
48
|
+
const fiberId = yield* _(Effect__namespace.fiberId);
|
|
49
|
+
const queue = yield* _(Queue__namespace.unbounded());
|
|
50
|
+
const fiber = yield* _(Effect__namespace.async((resume, signal) => {
|
|
51
|
+
port.addEventListener("message", function (event) {
|
|
52
|
+
queue.unsafeOffer(event.data);
|
|
53
|
+
}, {
|
|
54
|
+
signal
|
|
55
|
+
});
|
|
56
|
+
port.addEventListener("error", function (event) {
|
|
57
|
+
resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", event.message)));
|
|
58
|
+
}, {
|
|
59
|
+
signal
|
|
60
|
+
});
|
|
61
|
+
}), Effect__namespace.forkDaemon);
|
|
62
|
+
yield* _(Effect__namespace.addFinalizer(() => fiber.interruptAsFork(fiberId)));
|
|
63
|
+
const join = effect.Fiber.join(fiber);
|
|
64
|
+
const send = (message, transfers) => Effect__namespace.sync(() => port.postMessage([0, message], transfers));
|
|
65
|
+
return {
|
|
66
|
+
join,
|
|
67
|
+
queue,
|
|
68
|
+
send
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
/** @internal */
|
|
75
|
+
const layerWorker$1 = /*#__PURE__*/Layer__namespace.succeed(Worker__namespace.PlatformWorker, platformWorkerImpl);
|
|
76
|
+
|
|
77
|
+
/** @internal */
|
|
78
|
+
const layerManager$1 = /*#__PURE__*/Layer__namespace.provide(layerWorker$1, Worker__namespace.layerManager);
|
|
79
|
+
|
|
80
|
+
/** @internal */
|
|
81
|
+
const makePool$1 = /*#__PURE__*/Worker__namespace.makePool();
|
|
82
|
+
|
|
83
|
+
/** @internal */
|
|
84
|
+
const makePoolLayer$1 = /*#__PURE__*/Worker__namespace.makePoolLayer(layerManager$1);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @since 1.0.0
|
|
88
|
+
*
|
|
89
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @since 1.0.0
|
|
94
|
+
* @category constructors
|
|
95
|
+
*/
|
|
96
|
+
const makePool = makePool$1;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @since 1.0.0
|
|
100
|
+
* @category constructors
|
|
101
|
+
*/
|
|
102
|
+
const makePoolLayer = makePoolLayer$1;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @since 1.0.0
|
|
106
|
+
* @category layers
|
|
107
|
+
*/
|
|
108
|
+
const layerManager = layerManager$1;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @since 1.0.0
|
|
112
|
+
* @category layers
|
|
113
|
+
*/
|
|
114
|
+
const layerWorker = layerWorker$1;
|
|
115
|
+
|
|
116
|
+
exports.layerManager = layerManager;
|
|
117
|
+
exports.layerWorker = layerWorker;
|
|
118
|
+
exports.makePool = makePool;
|
|
119
|
+
exports.makePoolLayer = makePoolLayer;
|
|
120
|
+
Object.keys(Worker).forEach(function (k) {
|
|
121
|
+
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
|
|
122
|
+
enumerable: true,
|
|
123
|
+
get: function () { return Worker[k]; }
|
|
124
|
+
});
|
|
125
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./effect-platform-browser-Worker.cjs.js";
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var Worker = require('@effect/platform/Worker');
|
|
6
|
+
var WorkerError = require('@effect/platform/WorkerError');
|
|
7
|
+
var effect = require('effect');
|
|
8
|
+
var Effect = require('effect/Effect');
|
|
9
|
+
var Layer = require('effect/Layer');
|
|
10
|
+
var Queue = require('effect/Queue');
|
|
11
|
+
|
|
12
|
+
function _interopNamespace(e) {
|
|
13
|
+
if (e && e.__esModule) return e;
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n["default"] = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var Worker__namespace = /*#__PURE__*/_interopNamespace(Worker);
|
|
31
|
+
var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
|
|
32
|
+
var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
|
|
33
|
+
var Queue__namespace = /*#__PURE__*/_interopNamespace(Queue);
|
|
34
|
+
|
|
35
|
+
const platformWorkerImpl = /*#__PURE__*/Worker__namespace.PlatformWorker.of({
|
|
36
|
+
[Worker__namespace.PlatformWorkerTypeId]: Worker__namespace.PlatformWorkerTypeId,
|
|
37
|
+
spawn(worker_) {
|
|
38
|
+
return Effect__namespace.gen(function* (_) {
|
|
39
|
+
const worker = worker_;
|
|
40
|
+
let port;
|
|
41
|
+
if ("port" in worker) {
|
|
42
|
+
port = worker.port;
|
|
43
|
+
port.start();
|
|
44
|
+
} else {
|
|
45
|
+
port = worker;
|
|
46
|
+
}
|
|
47
|
+
yield* _(Effect__namespace.addFinalizer(() => Effect__namespace.sync(() => port.postMessage([1]))));
|
|
48
|
+
const fiberId = yield* _(Effect__namespace.fiberId);
|
|
49
|
+
const queue = yield* _(Queue__namespace.unbounded());
|
|
50
|
+
const fiber = yield* _(Effect__namespace.async((resume, signal) => {
|
|
51
|
+
port.addEventListener("message", function (event) {
|
|
52
|
+
queue.unsafeOffer(event.data);
|
|
53
|
+
}, {
|
|
54
|
+
signal
|
|
55
|
+
});
|
|
56
|
+
port.addEventListener("error", function (event) {
|
|
57
|
+
resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", event.message)));
|
|
58
|
+
}, {
|
|
59
|
+
signal
|
|
60
|
+
});
|
|
61
|
+
}), Effect__namespace.forkDaemon);
|
|
62
|
+
yield* _(Effect__namespace.addFinalizer(() => fiber.interruptAsFork(fiberId)));
|
|
63
|
+
const join = effect.Fiber.join(fiber);
|
|
64
|
+
const send = (message, transfers) => Effect__namespace.sync(() => port.postMessage([0, message], transfers));
|
|
65
|
+
return {
|
|
66
|
+
join,
|
|
67
|
+
queue,
|
|
68
|
+
send
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
/** @internal */
|
|
75
|
+
const layerWorker$1 = /*#__PURE__*/Layer__namespace.succeed(Worker__namespace.PlatformWorker, platformWorkerImpl);
|
|
76
|
+
|
|
77
|
+
/** @internal */
|
|
78
|
+
const layerManager$1 = /*#__PURE__*/Layer__namespace.provide(layerWorker$1, Worker__namespace.layerManager);
|
|
79
|
+
|
|
80
|
+
/** @internal */
|
|
81
|
+
const makePool$1 = /*#__PURE__*/Worker__namespace.makePool();
|
|
82
|
+
|
|
83
|
+
/** @internal */
|
|
84
|
+
const makePoolLayer$1 = /*#__PURE__*/Worker__namespace.makePoolLayer(layerManager$1);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @since 1.0.0
|
|
88
|
+
*
|
|
89
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @since 1.0.0
|
|
94
|
+
* @category constructors
|
|
95
|
+
*/
|
|
96
|
+
const makePool = makePool$1;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* @since 1.0.0
|
|
100
|
+
* @category constructors
|
|
101
|
+
*/
|
|
102
|
+
const makePoolLayer = makePoolLayer$1;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @since 1.0.0
|
|
106
|
+
* @category layers
|
|
107
|
+
*/
|
|
108
|
+
const layerManager = layerManager$1;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @since 1.0.0
|
|
112
|
+
* @category layers
|
|
113
|
+
*/
|
|
114
|
+
const layerWorker = layerWorker$1;
|
|
115
|
+
|
|
116
|
+
exports.layerManager = layerManager;
|
|
117
|
+
exports.layerWorker = layerWorker;
|
|
118
|
+
exports.makePool = makePool;
|
|
119
|
+
exports.makePoolLayer = makePoolLayer;
|
|
120
|
+
Object.keys(Worker).forEach(function (k) {
|
|
121
|
+
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
|
|
122
|
+
enumerable: true,
|
|
123
|
+
get: function () { return Worker[k]; }
|
|
124
|
+
});
|
|
125
|
+
});
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as Worker from '@effect/platform/Worker';
|
|
2
|
+
export * from '@effect/platform/Worker';
|
|
3
|
+
import { WorkerError } from '@effect/platform/WorkerError';
|
|
4
|
+
import { Fiber } from 'effect';
|
|
5
|
+
import * as Effect from 'effect/Effect';
|
|
6
|
+
import * as Layer from 'effect/Layer';
|
|
7
|
+
import * as Queue from 'effect/Queue';
|
|
8
|
+
|
|
9
|
+
const platformWorkerImpl = /*#__PURE__*/Worker.PlatformWorker.of({
|
|
10
|
+
[Worker.PlatformWorkerTypeId]: Worker.PlatformWorkerTypeId,
|
|
11
|
+
spawn(worker_) {
|
|
12
|
+
return Effect.gen(function* (_) {
|
|
13
|
+
const worker = worker_;
|
|
14
|
+
let port;
|
|
15
|
+
if ("port" in worker) {
|
|
16
|
+
port = worker.port;
|
|
17
|
+
port.start();
|
|
18
|
+
} else {
|
|
19
|
+
port = worker;
|
|
20
|
+
}
|
|
21
|
+
yield* _(Effect.addFinalizer(() => Effect.sync(() => port.postMessage([1]))));
|
|
22
|
+
const fiberId = yield* _(Effect.fiberId);
|
|
23
|
+
const queue = yield* _(Queue.unbounded());
|
|
24
|
+
const fiber = yield* _(Effect.async((resume, signal) => {
|
|
25
|
+
port.addEventListener("message", function (event) {
|
|
26
|
+
queue.unsafeOffer(event.data);
|
|
27
|
+
}, {
|
|
28
|
+
signal
|
|
29
|
+
});
|
|
30
|
+
port.addEventListener("error", function (event) {
|
|
31
|
+
resume(Effect.fail(WorkerError("unknown", event.message)));
|
|
32
|
+
}, {
|
|
33
|
+
signal
|
|
34
|
+
});
|
|
35
|
+
}), Effect.forkDaemon);
|
|
36
|
+
yield* _(Effect.addFinalizer(() => fiber.interruptAsFork(fiberId)));
|
|
37
|
+
const join = Fiber.join(fiber);
|
|
38
|
+
const send = (message, transfers) => Effect.sync(() => port.postMessage([0, message], transfers));
|
|
39
|
+
return {
|
|
40
|
+
join,
|
|
41
|
+
queue,
|
|
42
|
+
send
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
/** @internal */
|
|
49
|
+
const layerWorker$1 = /*#__PURE__*/Layer.succeed(Worker.PlatformWorker, platformWorkerImpl);
|
|
50
|
+
|
|
51
|
+
/** @internal */
|
|
52
|
+
const layerManager$1 = /*#__PURE__*/Layer.provide(layerWorker$1, Worker.layerManager);
|
|
53
|
+
|
|
54
|
+
/** @internal */
|
|
55
|
+
const makePool$1 = /*#__PURE__*/Worker.makePool();
|
|
56
|
+
|
|
57
|
+
/** @internal */
|
|
58
|
+
const makePoolLayer$1 = /*#__PURE__*/Worker.makePoolLayer(layerManager$1);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @since 1.0.0
|
|
62
|
+
*
|
|
63
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
|
|
64
|
+
*/
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @since 1.0.0
|
|
68
|
+
* @category constructors
|
|
69
|
+
*/
|
|
70
|
+
const makePool = makePool$1;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @since 1.0.0
|
|
74
|
+
* @category constructors
|
|
75
|
+
*/
|
|
76
|
+
const makePoolLayer = makePoolLayer$1;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @since 1.0.0
|
|
80
|
+
* @category layers
|
|
81
|
+
*/
|
|
82
|
+
const layerManager = layerManager$1;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @since 1.0.0
|
|
86
|
+
* @category layers
|
|
87
|
+
*/
|
|
88
|
+
const layerWorker = layerWorker$1;
|
|
89
|
+
|
|
90
|
+
export { layerManager, layerWorker, makePool, makePoolLayer };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-platform-browser-WorkerRunner.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerRunner.d.ts"],"names":[],"mappings":"AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-platform-browser-WorkerRunner.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerRunner.d.ts"],"names":[],"mappings":"AAAA"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var WorkerError = require('@effect/platform/WorkerError');
|
|
6
|
+
var Runner = require('@effect/platform/WorkerRunner');
|
|
7
|
+
var Effect = require('effect/Effect');
|
|
8
|
+
var Layer = require('effect/Layer');
|
|
9
|
+
var Queue = require('effect/Queue');
|
|
10
|
+
|
|
11
|
+
function _interopNamespace(e) {
|
|
12
|
+
if (e && e.__esModule) return e;
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n["default"] = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var Runner__namespace = /*#__PURE__*/_interopNamespace(Runner);
|
|
30
|
+
var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
|
|
31
|
+
var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
|
|
32
|
+
var Queue__namespace = /*#__PURE__*/_interopNamespace(Queue);
|
|
33
|
+
|
|
34
|
+
const platformRunnerImpl = /*#__PURE__*/Runner__namespace.PlatformRunner.of({
|
|
35
|
+
[Runner__namespace.PlatformRunnerTypeId]: Runner__namespace.PlatformRunnerTypeId,
|
|
36
|
+
start() {
|
|
37
|
+
return Effect__namespace.gen(function* (_) {
|
|
38
|
+
const port = "postMessage" in self ? self : yield* _(Effect__namespace.async((resume, signal) => {
|
|
39
|
+
self.addEventListener("connect", function (event) {
|
|
40
|
+
const port = event.ports[0];
|
|
41
|
+
port.start();
|
|
42
|
+
resume(Effect__namespace.succeed(port));
|
|
43
|
+
}, {
|
|
44
|
+
once: true,
|
|
45
|
+
signal
|
|
46
|
+
});
|
|
47
|
+
}));
|
|
48
|
+
const queue = yield* _(Queue__namespace.unbounded());
|
|
49
|
+
const fiber = yield* _(Effect__namespace.async((resume, signal) => {
|
|
50
|
+
port.addEventListener("message", function (event) {
|
|
51
|
+
const message = event.data;
|
|
52
|
+
if (message[0] === 0) {
|
|
53
|
+
queue.unsafeOffer(message[1]);
|
|
54
|
+
} else {
|
|
55
|
+
Effect__namespace.runFork(Queue__namespace.shutdown(queue));
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
signal
|
|
59
|
+
});
|
|
60
|
+
port.addEventListener("messageerror", function (error) {
|
|
61
|
+
resume(Effect__namespace.fail(WorkerError.WorkerError("decode", error.message)));
|
|
62
|
+
}, {
|
|
63
|
+
signal
|
|
64
|
+
});
|
|
65
|
+
port.addEventListener("error", function (error) {
|
|
66
|
+
resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", error.message)));
|
|
67
|
+
}, {
|
|
68
|
+
signal
|
|
69
|
+
});
|
|
70
|
+
}), Effect__namespace.forkScoped);
|
|
71
|
+
const send = (message, transfer) => Effect__namespace.sync(() => port.postMessage([1, message], {
|
|
72
|
+
transfer: transfer
|
|
73
|
+
}));
|
|
74
|
+
// ready
|
|
75
|
+
port.postMessage([0]);
|
|
76
|
+
return {
|
|
77
|
+
fiber,
|
|
78
|
+
queue,
|
|
79
|
+
send
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
/** @internal */
|
|
86
|
+
const layer = /*#__PURE__*/Layer__namespace.succeed(Runner__namespace.PlatformRunner, platformRunnerImpl);
|
|
87
|
+
|
|
88
|
+
/** @internal */
|
|
89
|
+
const make$1 = (process, options) => Effect__namespace.provide(Runner__namespace.make(process, options), layer);
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @since 1.0.0
|
|
93
|
+
*
|
|
94
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @since 1.0.0
|
|
99
|
+
* @category constructors
|
|
100
|
+
*/
|
|
101
|
+
const make = make$1;
|
|
102
|
+
|
|
103
|
+
exports.make = make;
|
|
104
|
+
Object.keys(Runner).forEach(function (k) {
|
|
105
|
+
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
|
|
106
|
+
enumerable: true,
|
|
107
|
+
get: function () { return Runner[k]; }
|
|
108
|
+
});
|
|
109
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./effect-platform-browser-WorkerRunner.cjs.js";
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var WorkerError = require('@effect/platform/WorkerError');
|
|
6
|
+
var Runner = require('@effect/platform/WorkerRunner');
|
|
7
|
+
var Effect = require('effect/Effect');
|
|
8
|
+
var Layer = require('effect/Layer');
|
|
9
|
+
var Queue = require('effect/Queue');
|
|
10
|
+
|
|
11
|
+
function _interopNamespace(e) {
|
|
12
|
+
if (e && e.__esModule) return e;
|
|
13
|
+
var n = Object.create(null);
|
|
14
|
+
if (e) {
|
|
15
|
+
Object.keys(e).forEach(function (k) {
|
|
16
|
+
if (k !== 'default') {
|
|
17
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return e[k]; }
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
n["default"] = e;
|
|
26
|
+
return Object.freeze(n);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var Runner__namespace = /*#__PURE__*/_interopNamespace(Runner);
|
|
30
|
+
var Effect__namespace = /*#__PURE__*/_interopNamespace(Effect);
|
|
31
|
+
var Layer__namespace = /*#__PURE__*/_interopNamespace(Layer);
|
|
32
|
+
var Queue__namespace = /*#__PURE__*/_interopNamespace(Queue);
|
|
33
|
+
|
|
34
|
+
const platformRunnerImpl = /*#__PURE__*/Runner__namespace.PlatformRunner.of({
|
|
35
|
+
[Runner__namespace.PlatformRunnerTypeId]: Runner__namespace.PlatformRunnerTypeId,
|
|
36
|
+
start() {
|
|
37
|
+
return Effect__namespace.gen(function* (_) {
|
|
38
|
+
const port = "postMessage" in self ? self : yield* _(Effect__namespace.async((resume, signal) => {
|
|
39
|
+
self.addEventListener("connect", function (event) {
|
|
40
|
+
const port = event.ports[0];
|
|
41
|
+
port.start();
|
|
42
|
+
resume(Effect__namespace.succeed(port));
|
|
43
|
+
}, {
|
|
44
|
+
once: true,
|
|
45
|
+
signal
|
|
46
|
+
});
|
|
47
|
+
}));
|
|
48
|
+
const queue = yield* _(Queue__namespace.unbounded());
|
|
49
|
+
const fiber = yield* _(Effect__namespace.async((resume, signal) => {
|
|
50
|
+
port.addEventListener("message", function (event) {
|
|
51
|
+
const message = event.data;
|
|
52
|
+
if (message[0] === 0) {
|
|
53
|
+
queue.unsafeOffer(message[1]);
|
|
54
|
+
} else {
|
|
55
|
+
Effect__namespace.runFork(Queue__namespace.shutdown(queue));
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
signal
|
|
59
|
+
});
|
|
60
|
+
port.addEventListener("messageerror", function (error) {
|
|
61
|
+
resume(Effect__namespace.fail(WorkerError.WorkerError("decode", error.message)));
|
|
62
|
+
}, {
|
|
63
|
+
signal
|
|
64
|
+
});
|
|
65
|
+
port.addEventListener("error", function (error) {
|
|
66
|
+
resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", error.message)));
|
|
67
|
+
}, {
|
|
68
|
+
signal
|
|
69
|
+
});
|
|
70
|
+
}), Effect__namespace.forkScoped);
|
|
71
|
+
const send = (message, transfer) => Effect__namespace.sync(() => port.postMessage([1, message], {
|
|
72
|
+
transfer: transfer
|
|
73
|
+
}));
|
|
74
|
+
// ready
|
|
75
|
+
port.postMessage([0]);
|
|
76
|
+
return {
|
|
77
|
+
fiber,
|
|
78
|
+
queue,
|
|
79
|
+
send
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
/** @internal */
|
|
86
|
+
const layer = /*#__PURE__*/Layer__namespace.succeed(Runner__namespace.PlatformRunner, platformRunnerImpl);
|
|
87
|
+
|
|
88
|
+
/** @internal */
|
|
89
|
+
const make$1 = (process, options) => Effect__namespace.provide(Runner__namespace.make(process, options), layer);
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @since 1.0.0
|
|
93
|
+
*
|
|
94
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @since 1.0.0
|
|
99
|
+
* @category constructors
|
|
100
|
+
*/
|
|
101
|
+
const make = make$1;
|
|
102
|
+
|
|
103
|
+
exports.make = make;
|
|
104
|
+
Object.keys(Runner).forEach(function (k) {
|
|
105
|
+
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
|
|
106
|
+
enumerable: true,
|
|
107
|
+
get: function () { return Runner[k]; }
|
|
108
|
+
});
|
|
109
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { WorkerError } from '@effect/platform/WorkerError';
|
|
2
|
+
import * as Runner from '@effect/platform/WorkerRunner';
|
|
3
|
+
export * from '@effect/platform/WorkerRunner';
|
|
4
|
+
import * as Effect from 'effect/Effect';
|
|
5
|
+
import * as Layer from 'effect/Layer';
|
|
6
|
+
import * as Queue from 'effect/Queue';
|
|
7
|
+
|
|
8
|
+
const platformRunnerImpl = /*#__PURE__*/Runner.PlatformRunner.of({
|
|
9
|
+
[Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
|
|
10
|
+
start() {
|
|
11
|
+
return Effect.gen(function* (_) {
|
|
12
|
+
const port = "postMessage" in self ? self : yield* _(Effect.async((resume, signal) => {
|
|
13
|
+
self.addEventListener("connect", function (event) {
|
|
14
|
+
const port = event.ports[0];
|
|
15
|
+
port.start();
|
|
16
|
+
resume(Effect.succeed(port));
|
|
17
|
+
}, {
|
|
18
|
+
once: true,
|
|
19
|
+
signal
|
|
20
|
+
});
|
|
21
|
+
}));
|
|
22
|
+
const queue = yield* _(Queue.unbounded());
|
|
23
|
+
const fiber = yield* _(Effect.async((resume, signal) => {
|
|
24
|
+
port.addEventListener("message", function (event) {
|
|
25
|
+
const message = event.data;
|
|
26
|
+
if (message[0] === 0) {
|
|
27
|
+
queue.unsafeOffer(message[1]);
|
|
28
|
+
} else {
|
|
29
|
+
Effect.runFork(Queue.shutdown(queue));
|
|
30
|
+
}
|
|
31
|
+
}, {
|
|
32
|
+
signal
|
|
33
|
+
});
|
|
34
|
+
port.addEventListener("messageerror", function (error) {
|
|
35
|
+
resume(Effect.fail(WorkerError("decode", error.message)));
|
|
36
|
+
}, {
|
|
37
|
+
signal
|
|
38
|
+
});
|
|
39
|
+
port.addEventListener("error", function (error) {
|
|
40
|
+
resume(Effect.fail(WorkerError("unknown", error.message)));
|
|
41
|
+
}, {
|
|
42
|
+
signal
|
|
43
|
+
});
|
|
44
|
+
}), Effect.forkScoped);
|
|
45
|
+
const send = (message, transfer) => Effect.sync(() => port.postMessage([1, message], {
|
|
46
|
+
transfer: transfer
|
|
47
|
+
}));
|
|
48
|
+
// ready
|
|
49
|
+
port.postMessage([0]);
|
|
50
|
+
return {
|
|
51
|
+
fiber,
|
|
52
|
+
queue,
|
|
53
|
+
send
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/** @internal */
|
|
60
|
+
const layer = /*#__PURE__*/Layer.succeed(Runner.PlatformRunner, platformRunnerImpl);
|
|
61
|
+
|
|
62
|
+
/** @internal */
|
|
63
|
+
const make$1 = (process, options) => Effect.provide(Runner.make(process, options), layer);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
*
|
|
68
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @since 1.0.0
|
|
73
|
+
* @category constructors
|
|
74
|
+
*/
|
|
75
|
+
const make = make$1;
|
|
76
|
+
|
|
77
|
+
export { make };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
|
|
5
|
+
*/
|
|
6
|
+
import type * as Worker from "@effect/platform/Worker";
|
|
7
|
+
import type { Effect } from "effect";
|
|
8
|
+
import type * as Context from "effect/Context";
|
|
9
|
+
import type * as Layer from "effect/Layer";
|
|
10
|
+
import type * as Scope from "effect/Scope";
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export * from "@effect/platform/Worker";
|
|
15
|
+
/**
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
* @category constructors
|
|
18
|
+
*/
|
|
19
|
+
export declare const makePool: <I, E, O>(options: Worker.WorkerPool.Options<I, Worker | SharedWorker>) => Effect.Effect<Worker.WorkerManager | Scope.Scope, never, Worker.WorkerPool<I, E, O>>;
|
|
20
|
+
/**
|
|
21
|
+
* @since 1.0.0
|
|
22
|
+
* @category constructors
|
|
23
|
+
*/
|
|
24
|
+
export declare const makePoolLayer: <Tag, I, E, O>(tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>, options: Worker.WorkerPool.Options<I, Worker | SharedWorker>) => Layer.Layer<never, never, Tag>;
|
|
25
|
+
/**
|
|
26
|
+
* @since 1.0.0
|
|
27
|
+
* @category layers
|
|
28
|
+
*/
|
|
29
|
+
export declare const layerManager: Layer.Layer<never, never, Worker.WorkerManager>;
|
|
30
|
+
/**
|
|
31
|
+
* @since 1.0.0
|
|
32
|
+
* @category layers
|
|
33
|
+
*/
|
|
34
|
+
export declare const layerWorker: Layer.Layer<never, never, Worker.PlatformWorker>;
|
|
35
|
+
//# sourceMappingURL=Worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Worker.d.ts","sourceRoot":"../../../src","sources":["Worker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAG1C;;GAEG;AACH,cAAc,yBAAyB,CAAA;AAEvC;;;GAGG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,KACzD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAA;AAE7G;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACvC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EACjD,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC,KACzD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAA0B,CAAA;AAE5D;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,CAAyB,CAAA;AAElG;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,cAAc,CAAwB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkerError } from "@effect/platform/WorkerError";
|
|
7
|
+
import type * as Runner from "@effect/platform/WorkerRunner";
|
|
8
|
+
import type { Effect } from "effect";
|
|
9
|
+
import type * as Scope from "effect/Scope";
|
|
10
|
+
import type * as Stream from "effect/Stream";
|
|
11
|
+
/**
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export * from "@effect/platform/WorkerRunner";
|
|
15
|
+
/**
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
* @category constructors
|
|
18
|
+
*/
|
|
19
|
+
export declare const make: <I, R, E, O>(process: (request: I) => Stream.Stream<R, E, O>, options?: Runner.Runner.Options<O> | undefined) => Effect.Effect<R | Scope.Scope, WorkerError, void>;
|
|
20
|
+
//# sourceMappingURL=WorkerRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerRunner.d.ts","sourceRoot":"../../../src","sources":["WorkerRunner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,KAAK,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAG5C;;GAEG;AACH,cAAc,+BAA+B,CAAA;AAE7C;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5B,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,KAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAiB,CAAA"}
|
|
@@ -30,4 +30,16 @@ export * as Path from "./Path.js";
|
|
|
30
30
|
* @since 1.0.0
|
|
31
31
|
*/
|
|
32
32
|
export * as Runtime from "./Runtime.js";
|
|
33
|
+
/**
|
|
34
|
+
* @since 1.0.0
|
|
35
|
+
*
|
|
36
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
|
|
37
|
+
*/
|
|
38
|
+
export * as Worker from "./Worker.js";
|
|
39
|
+
/**
|
|
40
|
+
* @since 1.0.0
|
|
41
|
+
*
|
|
42
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
|
|
43
|
+
*/
|
|
44
|
+
export * as WorkerRunner from "./WorkerRunner.js";
|
|
33
45
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,SAAS,uBAA0C;AAE/D;;GAEG;AACH,OAAO,KAAK,SAAS,uBAA0C;AAE/D;;GAEG;AACH,OAAO,KAAK,KAAK,mBAAsC;AAEvD;;GAEG;AACH,OAAO,KAAK,UAAU,wBAA2C;AAEjE;;;;GAIG;AACH,OAAO,KAAK,aAAa,2BAA8C;AAEvE;;;;GAIG;AACH,OAAO,KAAK,IAAI,kBAAqC;AAErD;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAwC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,SAAS,uBAA0C;AAE/D;;GAEG;AACH,OAAO,KAAK,SAAS,uBAA0C;AAE/D;;GAEG;AACH,OAAO,KAAK,KAAK,mBAAsC;AAEvD;;GAEG;AACH,OAAO,KAAK,UAAU,wBAA2C;AAEjE;;;;GAIG;AACH,OAAO,KAAK,aAAa,2BAA8C;AAEvE;;;;GAIG;AACH,OAAO,KAAK,IAAI,kBAAqC;AAErD;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAwC;AAE3D;;;;GAIG;AACH,OAAO,KAAK,MAAM,oBAAuC;AAEzD;;;;GAIG;AACH,OAAO,KAAK,YAAY,0BAA6C"}
|
|
@@ -9,6 +9,8 @@ var HttpClient = require('@effect/platform-browser/HttpClient');
|
|
|
9
9
|
var KeyValueStore = require('@effect/platform-browser/KeyValueStore');
|
|
10
10
|
var Path = require('@effect/platform-browser/Path');
|
|
11
11
|
var Runtime = require('@effect/platform-browser/Runtime');
|
|
12
|
+
var Worker = require('@effect/platform-browser/Worker');
|
|
13
|
+
var WorkerRunner = require('@effect/platform-browser/WorkerRunner');
|
|
12
14
|
|
|
13
15
|
function _interopNamespace(e) {
|
|
14
16
|
if (e && e.__esModule) return e;
|
|
@@ -35,6 +37,8 @@ var HttpClient__namespace = /*#__PURE__*/_interopNamespace(HttpClient);
|
|
|
35
37
|
var KeyValueStore__namespace = /*#__PURE__*/_interopNamespace(KeyValueStore);
|
|
36
38
|
var Path__namespace = /*#__PURE__*/_interopNamespace(Path);
|
|
37
39
|
var Runtime__namespace = /*#__PURE__*/_interopNamespace(Runtime);
|
|
40
|
+
var Worker__namespace = /*#__PURE__*/_interopNamespace(Worker);
|
|
41
|
+
var WorkerRunner__namespace = /*#__PURE__*/_interopNamespace(WorkerRunner);
|
|
38
42
|
|
|
39
43
|
|
|
40
44
|
|
|
@@ -45,3 +49,5 @@ exports.HttpClient = HttpClient__namespace;
|
|
|
45
49
|
exports.KeyValueStore = KeyValueStore__namespace;
|
|
46
50
|
exports.Path = Path__namespace;
|
|
47
51
|
exports.Runtime = Runtime__namespace;
|
|
52
|
+
exports.Worker = Worker__namespace;
|
|
53
|
+
exports.WorkerRunner = WorkerRunner__namespace;
|
|
@@ -9,6 +9,8 @@ var HttpClient = require('@effect/platform-browser/HttpClient');
|
|
|
9
9
|
var KeyValueStore = require('@effect/platform-browser/KeyValueStore');
|
|
10
10
|
var Path = require('@effect/platform-browser/Path');
|
|
11
11
|
var Runtime = require('@effect/platform-browser/Runtime');
|
|
12
|
+
var Worker = require('@effect/platform-browser/Worker');
|
|
13
|
+
var WorkerRunner = require('@effect/platform-browser/WorkerRunner');
|
|
12
14
|
|
|
13
15
|
function _interopNamespace(e) {
|
|
14
16
|
if (e && e.__esModule) return e;
|
|
@@ -35,6 +37,8 @@ var HttpClient__namespace = /*#__PURE__*/_interopNamespace(HttpClient);
|
|
|
35
37
|
var KeyValueStore__namespace = /*#__PURE__*/_interopNamespace(KeyValueStore);
|
|
36
38
|
var Path__namespace = /*#__PURE__*/_interopNamespace(Path);
|
|
37
39
|
var Runtime__namespace = /*#__PURE__*/_interopNamespace(Runtime);
|
|
40
|
+
var Worker__namespace = /*#__PURE__*/_interopNamespace(Worker);
|
|
41
|
+
var WorkerRunner__namespace = /*#__PURE__*/_interopNamespace(WorkerRunner);
|
|
38
42
|
|
|
39
43
|
|
|
40
44
|
|
|
@@ -45,3 +49,5 @@ exports.HttpClient = HttpClient__namespace;
|
|
|
45
49
|
exports.KeyValueStore = KeyValueStore__namespace;
|
|
46
50
|
exports.Path = Path__namespace;
|
|
47
51
|
exports.Runtime = Runtime__namespace;
|
|
52
|
+
exports.Worker = Worker__namespace;
|
|
53
|
+
exports.WorkerRunner = WorkerRunner__namespace;
|
|
@@ -12,3 +12,7 @@ import * as Path from '@effect/platform-browser/Path';
|
|
|
12
12
|
export { Path };
|
|
13
13
|
import * as Runtime from '@effect/platform-browser/Runtime';
|
|
14
14
|
export { Runtime };
|
|
15
|
+
import * as Worker from '@effect/platform-browser/Worker';
|
|
16
|
+
export { Worker };
|
|
17
|
+
import * as WorkerRunner from '@effect/platform-browser/WorkerRunner';
|
|
18
|
+
export { WorkerRunner };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/platform-browser",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.2",
|
|
4
4
|
"description": "Unified interfaces for common platform-specific services",
|
|
5
5
|
"main": "dist/effect-platform-browser.cjs.js",
|
|
6
6
|
"module": "dist/effect-platform-browser.esm.js",
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"sideEffects": false,
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@effect/platform": "^0.22.
|
|
32
|
+
"@effect/platform": "^0.22.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"effect": "2.0.0-next.48",
|
|
36
|
+
"happy-dom": "^12.9.1",
|
|
36
37
|
"vitest-localstorage-mock": "^0.0.1"
|
|
37
38
|
},
|
|
38
39
|
"peerDependencies": {
|
|
@@ -47,7 +48,9 @@
|
|
|
47
48
|
"HttpClient",
|
|
48
49
|
"KeyValueStore",
|
|
49
50
|
"Path",
|
|
50
|
-
"Runtime"
|
|
51
|
+
"Runtime",
|
|
52
|
+
"Worker",
|
|
53
|
+
"WorkerRunner"
|
|
51
54
|
],
|
|
52
55
|
"exports": {
|
|
53
56
|
".": {
|
|
@@ -98,6 +101,18 @@
|
|
|
98
101
|
"module": "./Runtime/dist/effect-platform-browser-Runtime.esm.js",
|
|
99
102
|
"import": "./Runtime/dist/effect-platform-browser-Runtime.cjs.mjs",
|
|
100
103
|
"default": "./Runtime/dist/effect-platform-browser-Runtime.cjs.js"
|
|
104
|
+
},
|
|
105
|
+
"./Worker": {
|
|
106
|
+
"types": "./dist/declarations/src/Worker.d.ts",
|
|
107
|
+
"module": "./Worker/dist/effect-platform-browser-Worker.esm.js",
|
|
108
|
+
"import": "./Worker/dist/effect-platform-browser-Worker.cjs.mjs",
|
|
109
|
+
"default": "./Worker/dist/effect-platform-browser-Worker.cjs.js"
|
|
110
|
+
},
|
|
111
|
+
"./WorkerRunner": {
|
|
112
|
+
"types": "./dist/declarations/src/WorkerRunner.d.ts",
|
|
113
|
+
"module": "./WorkerRunner/dist/effect-platform-browser-WorkerRunner.esm.js",
|
|
114
|
+
"import": "./WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.mjs",
|
|
115
|
+
"default": "./WorkerRunner/dist/effect-platform-browser-WorkerRunner.cjs.js"
|
|
101
116
|
}
|
|
102
117
|
},
|
|
103
118
|
"scripts": {
|
package/src/Worker.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
|
|
5
|
+
*/
|
|
6
|
+
import type * as Worker from "@effect/platform/Worker"
|
|
7
|
+
import type { Effect } from "effect"
|
|
8
|
+
import type * as Context from "effect/Context"
|
|
9
|
+
import type * as Layer from "effect/Layer"
|
|
10
|
+
import type * as Scope from "effect/Scope"
|
|
11
|
+
import * as internal from "./internal/worker"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export * from "@effect/platform/Worker"
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
* @category constructors
|
|
21
|
+
*/
|
|
22
|
+
export const makePool: <I, E, O>(
|
|
23
|
+
options: Worker.WorkerPool.Options<I, Worker | SharedWorker>
|
|
24
|
+
) => Effect.Effect<Worker.WorkerManager | Scope.Scope, never, Worker.WorkerPool<I, E, O>> = internal.makePool
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
* @category constructors
|
|
29
|
+
*/
|
|
30
|
+
export const makePoolLayer: <Tag, I, E, O>(
|
|
31
|
+
tag: Context.Tag<Tag, Worker.WorkerPool<I, E, O>>,
|
|
32
|
+
options: Worker.WorkerPool.Options<I, Worker | SharedWorker>
|
|
33
|
+
) => Layer.Layer<never, never, Tag> = internal.makePoolLayer
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @since 1.0.0
|
|
37
|
+
* @category layers
|
|
38
|
+
*/
|
|
39
|
+
export const layerManager: Layer.Layer<never, never, Worker.WorkerManager> = internal.layerManager
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @since 1.0.0
|
|
43
|
+
* @category layers
|
|
44
|
+
*/
|
|
45
|
+
export const layerWorker: Layer.Layer<never, never, Worker.PlatformWorker> = internal.layerWorker
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 1.0.0
|
|
3
|
+
*
|
|
4
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkerError } from "@effect/platform/WorkerError"
|
|
7
|
+
import type * as Runner from "@effect/platform/WorkerRunner"
|
|
8
|
+
import type { Effect } from "effect"
|
|
9
|
+
import type * as Scope from "effect/Scope"
|
|
10
|
+
import type * as Stream from "effect/Stream"
|
|
11
|
+
import * as internal from "./internal/workerRunner"
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @since 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
export * from "@effect/platform/WorkerRunner"
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @since 1.0.0
|
|
20
|
+
* @category constructors
|
|
21
|
+
*/
|
|
22
|
+
export const make: <I, R, E, O>(
|
|
23
|
+
process: (request: I) => Stream.Stream<R, E, O>,
|
|
24
|
+
options?: Runner.Runner.Options<O> | undefined
|
|
25
|
+
) => Effect.Effect<R | Scope.Scope, WorkerError, void> = internal.make
|
package/src/index.ts
CHANGED
|
@@ -36,3 +36,17 @@ export * as Path from "@effect/platform-browser/Path"
|
|
|
36
36
|
* @since 1.0.0
|
|
37
37
|
*/
|
|
38
38
|
export * as Runtime from "@effect/platform-browser/Runtime"
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @since 1.0.0
|
|
42
|
+
*
|
|
43
|
+
* Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
|
|
44
|
+
*/
|
|
45
|
+
export * as Worker from "@effect/platform-browser/Worker"
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @since 1.0.0
|
|
49
|
+
*
|
|
50
|
+
* Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
|
|
51
|
+
*/
|
|
52
|
+
export * as WorkerRunner from "@effect/platform-browser/WorkerRunner"
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as Worker from "@effect/platform/Worker"
|
|
2
|
+
import { WorkerError } from "@effect/platform/WorkerError"
|
|
3
|
+
import { Fiber } from "effect"
|
|
4
|
+
import * as Effect from "effect/Effect"
|
|
5
|
+
import * as Layer from "effect/Layer"
|
|
6
|
+
import * as Queue from "effect/Queue"
|
|
7
|
+
|
|
8
|
+
const platformWorkerImpl = Worker.PlatformWorker.of({
|
|
9
|
+
[Worker.PlatformWorkerTypeId]: Worker.PlatformWorkerTypeId,
|
|
10
|
+
spawn<I, O>(worker_: unknown) {
|
|
11
|
+
return Effect.gen(function*(_) {
|
|
12
|
+
const worker = worker_ as globalThis.SharedWorker | globalThis.Worker
|
|
13
|
+
let port: globalThis.Worker | MessagePort
|
|
14
|
+
if ("port" in worker) {
|
|
15
|
+
port = worker.port
|
|
16
|
+
port.start()
|
|
17
|
+
} else {
|
|
18
|
+
port = worker
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
yield* _(Effect.addFinalizer(() => Effect.sync(() => port.postMessage([1]))))
|
|
22
|
+
|
|
23
|
+
const fiberId = yield* _(Effect.fiberId)
|
|
24
|
+
const queue = yield* _(Queue.unbounded<Worker.BackingWorker.Message<O>>())
|
|
25
|
+
|
|
26
|
+
const fiber = yield* _(
|
|
27
|
+
Effect.async<never, WorkerError, never>((resume, signal) => {
|
|
28
|
+
port.addEventListener("message", function(event) {
|
|
29
|
+
queue.unsafeOffer((event as MessageEvent).data)
|
|
30
|
+
}, { signal })
|
|
31
|
+
port.addEventListener("error", function(event) {
|
|
32
|
+
resume(Effect.fail(WorkerError("unknown", (event as ErrorEvent).message)))
|
|
33
|
+
}, { signal })
|
|
34
|
+
}),
|
|
35
|
+
Effect.forkDaemon
|
|
36
|
+
)
|
|
37
|
+
yield* _(Effect.addFinalizer(() => fiber.interruptAsFork(fiberId)))
|
|
38
|
+
const join = Fiber.join(fiber)
|
|
39
|
+
|
|
40
|
+
const send = (message: I, transfers?: ReadonlyArray<unknown>) =>
|
|
41
|
+
Effect.sync(() => port.postMessage([0, message], transfers as any))
|
|
42
|
+
|
|
43
|
+
return { join, queue, send }
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
/** @internal */
|
|
49
|
+
export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerImpl)
|
|
50
|
+
|
|
51
|
+
/** @internal */
|
|
52
|
+
export const layerManager = Layer.provide(layerWorker, Worker.layerManager)
|
|
53
|
+
|
|
54
|
+
/** @internal */
|
|
55
|
+
export const makePool = Worker.makePool<globalThis.Worker | globalThis.SharedWorker>()
|
|
56
|
+
|
|
57
|
+
/** @internal */
|
|
58
|
+
export const makePoolLayer = Worker.makePoolLayer<globalThis.Worker | globalThis.SharedWorker>(layerManager)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { WorkerError } from "@effect/platform/WorkerError"
|
|
2
|
+
import * as Runner from "@effect/platform/WorkerRunner"
|
|
3
|
+
import * as Effect from "effect/Effect"
|
|
4
|
+
import * as Layer from "effect/Layer"
|
|
5
|
+
import * as Queue from "effect/Queue"
|
|
6
|
+
import type * as Scope from "effect/Scope"
|
|
7
|
+
import type * as Stream from "effect/Stream"
|
|
8
|
+
|
|
9
|
+
const platformRunnerImpl = Runner.PlatformRunner.of({
|
|
10
|
+
[Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
|
|
11
|
+
start<I, O>() {
|
|
12
|
+
return Effect.gen(function*(_) {
|
|
13
|
+
const port = "postMessage" in self ?
|
|
14
|
+
self :
|
|
15
|
+
(yield* _(Effect.async<never, never, MessagePort>((resume, signal) => {
|
|
16
|
+
self.addEventListener("connect", function(event) {
|
|
17
|
+
const port = (event as MessageEvent).ports[0]
|
|
18
|
+
port.start()
|
|
19
|
+
resume(Effect.succeed(port))
|
|
20
|
+
}, { once: true, signal })
|
|
21
|
+
})))
|
|
22
|
+
const queue = yield* _(Queue.unbounded<I>())
|
|
23
|
+
const fiber = yield* _(
|
|
24
|
+
Effect.async<never, WorkerError, never>((resume, signal) => {
|
|
25
|
+
port.addEventListener("message", function(event) {
|
|
26
|
+
const message = (event as MessageEvent).data as Runner.BackingRunner.Message<I>
|
|
27
|
+
if (message[0] === 0) {
|
|
28
|
+
queue.unsafeOffer(message[1])
|
|
29
|
+
} else {
|
|
30
|
+
Effect.runFork(Queue.shutdown(queue))
|
|
31
|
+
}
|
|
32
|
+
}, { signal })
|
|
33
|
+
port.addEventListener("messageerror", function(error) {
|
|
34
|
+
resume(Effect.fail(WorkerError("decode", (error as ErrorEvent).message)))
|
|
35
|
+
}, { signal })
|
|
36
|
+
port.addEventListener("error", function(error) {
|
|
37
|
+
resume(Effect.fail(WorkerError("unknown", (error as ErrorEvent).message)))
|
|
38
|
+
}, { signal })
|
|
39
|
+
}),
|
|
40
|
+
Effect.forkScoped
|
|
41
|
+
)
|
|
42
|
+
const send = (message: O, transfer?: ReadonlyArray<unknown>) =>
|
|
43
|
+
Effect.sync(() =>
|
|
44
|
+
port.postMessage([1, message], {
|
|
45
|
+
transfer: transfer as any
|
|
46
|
+
})
|
|
47
|
+
)
|
|
48
|
+
// ready
|
|
49
|
+
port.postMessage([0])
|
|
50
|
+
return { fiber, queue, send }
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
/** @internal */
|
|
56
|
+
export const layer = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl)
|
|
57
|
+
|
|
58
|
+
/** @internal */
|
|
59
|
+
export const make = <I, R, E, O>(
|
|
60
|
+
process: (request: I) => Stream.Stream<R, E, O>,
|
|
61
|
+
options?: Runner.Runner.Options<O>
|
|
62
|
+
): Effect.Effect<Scope.Scope | R, WorkerError, void> => Effect.provide(Runner.make(process, options), layer)
|