@effect/platform-bun 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/Worker/dist/effect-platform-bun-Worker.cjs.d.mts +2 -0
  2. package/Worker/dist/effect-platform-bun-Worker.cjs.d.mts.map +1 -0
  3. package/Worker/dist/effect-platform-bun-Worker.cjs.d.ts +2 -0
  4. package/Worker/dist/effect-platform-bun-Worker.cjs.d.ts.map +1 -0
  5. package/Worker/dist/effect-platform-bun-Worker.cjs.dev.js +123 -0
  6. package/Worker/dist/effect-platform-bun-Worker.cjs.js +7 -0
  7. package/Worker/dist/effect-platform-bun-Worker.cjs.mjs +1 -0
  8. package/Worker/dist/effect-platform-bun-Worker.cjs.prod.js +123 -0
  9. package/Worker/dist/effect-platform-bun-Worker.esm.js +88 -0
  10. package/Worker/package.json +4 -0
  11. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.d.mts +2 -0
  12. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.d.mts.map +1 -0
  13. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.d.ts +2 -0
  14. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.d.ts.map +1 -0
  15. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.dev.js +98 -0
  16. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.js +7 -0
  17. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.mjs +1 -0
  18. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.prod.js +98 -0
  19. package/WorkerRunner/dist/effect-platform-bun-WorkerRunner.esm.js +66 -0
  20. package/WorkerRunner/package.json +4 -0
  21. package/dist/declarations/src/Worker.d.ts +35 -0
  22. package/dist/declarations/src/Worker.d.ts.map +1 -0
  23. package/dist/declarations/src/WorkerRunner.d.ts +20 -0
  24. package/dist/declarations/src/WorkerRunner.d.ts.map +1 -0
  25. package/dist/declarations/src/index.d.ts +12 -0
  26. package/dist/declarations/src/index.d.ts.map +1 -1
  27. package/dist/effect-platform-bun.cjs.dev.js +6 -0
  28. package/dist/effect-platform-bun.cjs.mjs +3 -1
  29. package/dist/effect-platform-bun.cjs.prod.js +6 -0
  30. package/dist/effect-platform-bun.esm.js +4 -0
  31. package/package.json +22 -8
  32. package/src/Worker.ts +45 -0
  33. package/src/WorkerRunner.ts +25 -0
  34. package/src/index.ts +14 -0
  35. package/src/internal/worker.ts +56 -0
  36. package/src/internal/workerRunner.ts +56 -0
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/Worker.js";
2
+ //# sourceMappingURL=effect-platform-bun-Worker.cjs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-bun-Worker.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/Worker.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/Worker";
2
+ //# sourceMappingURL=effect-platform-bun-Worker.cjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-bun-Worker.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/Worker.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,123 @@
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 port = worker_;
40
+ yield* _(Effect__namespace.addFinalizer(() => Effect__namespace.async(resume => {
41
+ port.addEventListener("close", () => resume(Effect__namespace.unit), {
42
+ once: true
43
+ });
44
+ port.postMessage([1]);
45
+ })));
46
+ const fiberId = yield* _(Effect__namespace.fiberId);
47
+ const queue = yield* _(Queue__namespace.unbounded());
48
+ const fiber = yield* _(Effect__namespace.async((resume, signal) => {
49
+ port.addEventListener("message", function (event) {
50
+ queue.unsafeOffer(event.data);
51
+ }, {
52
+ signal
53
+ });
54
+ port.addEventListener("error", function (event) {
55
+ resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", event.message)));
56
+ }, {
57
+ signal
58
+ });
59
+ }), Effect__namespace.forkDaemon);
60
+ yield* _(Effect__namespace.addFinalizer(() => fiber.interruptAsFork(fiberId)));
61
+ const join = effect.Fiber.join(fiber);
62
+ const send = (message, transfers) => Effect__namespace.sync(() => port.postMessage([0, message], transfers));
63
+ return {
64
+ join,
65
+ queue,
66
+ send
67
+ };
68
+ });
69
+ }
70
+ });
71
+
72
+ /** @internal */
73
+ const layerWorker$1 = /*#__PURE__*/Layer__namespace.succeed(Worker__namespace.PlatformWorker, platformWorkerImpl);
74
+
75
+ /** @internal */
76
+ const layerManager$1 = /*#__PURE__*/Layer__namespace.provide(layerWorker$1, Worker__namespace.layerManager);
77
+
78
+ /** @internal */
79
+ const makePool$1 = /*#__PURE__*/Worker__namespace.makePool();
80
+
81
+ /** @internal */
82
+ const makePoolLayer$1 = /*#__PURE__*/Worker__namespace.makePoolLayer(layerManager$1);
83
+
84
+ /**
85
+ * @since 1.0.0
86
+ *
87
+ * Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
88
+ */
89
+
90
+ /**
91
+ * @since 1.0.0
92
+ * @category constructors
93
+ */
94
+ const makePool = makePool$1;
95
+
96
+ /**
97
+ * @since 1.0.0
98
+ * @category constructors
99
+ */
100
+ const makePoolLayer = makePoolLayer$1;
101
+
102
+ /**
103
+ * @since 1.0.0
104
+ * @category layers
105
+ */
106
+ const layerManager = layerManager$1;
107
+
108
+ /**
109
+ * @since 1.0.0
110
+ * @category layers
111
+ */
112
+ const layerWorker = layerWorker$1;
113
+
114
+ exports.layerManager = layerManager;
115
+ exports.layerWorker = layerWorker;
116
+ exports.makePool = makePool;
117
+ exports.makePoolLayer = makePoolLayer;
118
+ Object.keys(Worker).forEach(function (k) {
119
+ if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
120
+ enumerable: true,
121
+ get: function () { return Worker[k]; }
122
+ });
123
+ });
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === "production") {
4
+ module.exports = require("./effect-platform-bun-Worker.cjs.prod.js");
5
+ } else {
6
+ module.exports = require("./effect-platform-bun-Worker.cjs.dev.js");
7
+ }
@@ -0,0 +1 @@
1
+ export * from "./effect-platform-bun-Worker.cjs.js";
@@ -0,0 +1,123 @@
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 port = worker_;
40
+ yield* _(Effect__namespace.addFinalizer(() => Effect__namespace.async(resume => {
41
+ port.addEventListener("close", () => resume(Effect__namespace.unit), {
42
+ once: true
43
+ });
44
+ port.postMessage([1]);
45
+ })));
46
+ const fiberId = yield* _(Effect__namespace.fiberId);
47
+ const queue = yield* _(Queue__namespace.unbounded());
48
+ const fiber = yield* _(Effect__namespace.async((resume, signal) => {
49
+ port.addEventListener("message", function (event) {
50
+ queue.unsafeOffer(event.data);
51
+ }, {
52
+ signal
53
+ });
54
+ port.addEventListener("error", function (event) {
55
+ resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", event.message)));
56
+ }, {
57
+ signal
58
+ });
59
+ }), Effect__namespace.forkDaemon);
60
+ yield* _(Effect__namespace.addFinalizer(() => fiber.interruptAsFork(fiberId)));
61
+ const join = effect.Fiber.join(fiber);
62
+ const send = (message, transfers) => Effect__namespace.sync(() => port.postMessage([0, message], transfers));
63
+ return {
64
+ join,
65
+ queue,
66
+ send
67
+ };
68
+ });
69
+ }
70
+ });
71
+
72
+ /** @internal */
73
+ const layerWorker$1 = /*#__PURE__*/Layer__namespace.succeed(Worker__namespace.PlatformWorker, platformWorkerImpl);
74
+
75
+ /** @internal */
76
+ const layerManager$1 = /*#__PURE__*/Layer__namespace.provide(layerWorker$1, Worker__namespace.layerManager);
77
+
78
+ /** @internal */
79
+ const makePool$1 = /*#__PURE__*/Worker__namespace.makePool();
80
+
81
+ /** @internal */
82
+ const makePoolLayer$1 = /*#__PURE__*/Worker__namespace.makePoolLayer(layerManager$1);
83
+
84
+ /**
85
+ * @since 1.0.0
86
+ *
87
+ * Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
88
+ */
89
+
90
+ /**
91
+ * @since 1.0.0
92
+ * @category constructors
93
+ */
94
+ const makePool = makePool$1;
95
+
96
+ /**
97
+ * @since 1.0.0
98
+ * @category constructors
99
+ */
100
+ const makePoolLayer = makePoolLayer$1;
101
+
102
+ /**
103
+ * @since 1.0.0
104
+ * @category layers
105
+ */
106
+ const layerManager = layerManager$1;
107
+
108
+ /**
109
+ * @since 1.0.0
110
+ * @category layers
111
+ */
112
+ const layerWorker = layerWorker$1;
113
+
114
+ exports.layerManager = layerManager;
115
+ exports.layerWorker = layerWorker;
116
+ exports.makePool = makePool;
117
+ exports.makePoolLayer = makePoolLayer;
118
+ Object.keys(Worker).forEach(function (k) {
119
+ if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
120
+ enumerable: true,
121
+ get: function () { return Worker[k]; }
122
+ });
123
+ });
@@ -0,0 +1,88 @@
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 port = worker_;
14
+ yield* _(Effect.addFinalizer(() => Effect.async(resume => {
15
+ port.addEventListener("close", () => resume(Effect.unit), {
16
+ once: true
17
+ });
18
+ port.postMessage([1]);
19
+ })));
20
+ const fiberId = yield* _(Effect.fiberId);
21
+ const queue = yield* _(Queue.unbounded());
22
+ const fiber = yield* _(Effect.async((resume, signal) => {
23
+ port.addEventListener("message", function (event) {
24
+ queue.unsafeOffer(event.data);
25
+ }, {
26
+ signal
27
+ });
28
+ port.addEventListener("error", function (event) {
29
+ resume(Effect.fail(WorkerError("unknown", event.message)));
30
+ }, {
31
+ signal
32
+ });
33
+ }), Effect.forkDaemon);
34
+ yield* _(Effect.addFinalizer(() => fiber.interruptAsFork(fiberId)));
35
+ const join = Fiber.join(fiber);
36
+ const send = (message, transfers) => Effect.sync(() => port.postMessage([0, message], transfers));
37
+ return {
38
+ join,
39
+ queue,
40
+ send
41
+ };
42
+ });
43
+ }
44
+ });
45
+
46
+ /** @internal */
47
+ const layerWorker$1 = /*#__PURE__*/Layer.succeed(Worker.PlatformWorker, platformWorkerImpl);
48
+
49
+ /** @internal */
50
+ const layerManager$1 = /*#__PURE__*/Layer.provide(layerWorker$1, Worker.layerManager);
51
+
52
+ /** @internal */
53
+ const makePool$1 = /*#__PURE__*/Worker.makePool();
54
+
55
+ /** @internal */
56
+ const makePoolLayer$1 = /*#__PURE__*/Worker.makePoolLayer(layerManager$1);
57
+
58
+ /**
59
+ * @since 1.0.0
60
+ *
61
+ * Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
62
+ */
63
+
64
+ /**
65
+ * @since 1.0.0
66
+ * @category constructors
67
+ */
68
+ const makePool = makePool$1;
69
+
70
+ /**
71
+ * @since 1.0.0
72
+ * @category constructors
73
+ */
74
+ const makePoolLayer = makePoolLayer$1;
75
+
76
+ /**
77
+ * @since 1.0.0
78
+ * @category layers
79
+ */
80
+ const layerManager = layerManager$1;
81
+
82
+ /**
83
+ * @since 1.0.0
84
+ * @category layers
85
+ */
86
+ const layerWorker = layerWorker$1;
87
+
88
+ export { layerManager, layerWorker, makePool, makePoolLayer };
@@ -0,0 +1,4 @@
1
+ {
2
+ "main": "dist/effect-platform-bun-Worker.cjs.js",
3
+ "module": "dist/effect-platform-bun-Worker.esm.js"
4
+ }
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/WorkerRunner.js";
2
+ //# sourceMappingURL=effect-platform-bun-WorkerRunner.cjs.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-bun-WorkerRunner.cjs.d.mts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerRunner.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,2 @@
1
+ export * from "../../dist/declarations/src/WorkerRunner";
2
+ //# sourceMappingURL=effect-platform-bun-WorkerRunner.cjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-platform-bun-WorkerRunner.cjs.d.ts","sourceRoot":"","sources":["../../dist/declarations/src/WorkerRunner.d.ts"],"names":[],"mappings":"AAAA"}
@@ -0,0 +1,98 @@
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
+ if (!("postMessage" in self)) {
39
+ return yield* _(Effect__namespace.die("not in a worker"));
40
+ }
41
+ const port = self;
42
+ const queue = yield* _(Queue__namespace.unbounded());
43
+ const fiber = yield* _(Effect__namespace.async((resume, signal) => {
44
+ port.addEventListener("message", function (event) {
45
+ const message = event.data;
46
+ if (message[0] === 0) {
47
+ queue.unsafeOffer(message[1]);
48
+ } else {
49
+ Effect__namespace.runFork(Queue__namespace.shutdown(queue));
50
+ }
51
+ }, {
52
+ signal
53
+ });
54
+ port.addEventListener("error", function (error) {
55
+ resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", error.message)));
56
+ }, {
57
+ signal
58
+ });
59
+ }), Effect__namespace.forkScoped);
60
+ const send = (message, transfer) => Effect__namespace.sync(() => port.postMessage([1, message], {
61
+ transfer: transfer
62
+ }));
63
+ // ready
64
+ port.postMessage([0]);
65
+ return {
66
+ fiber,
67
+ queue,
68
+ send
69
+ };
70
+ });
71
+ }
72
+ });
73
+
74
+ /** @internal */
75
+ const layer = /*#__PURE__*/Layer__namespace.succeed(Runner__namespace.PlatformRunner, platformRunnerImpl);
76
+
77
+ /** @internal */
78
+ const make$1 = (process, options) => Effect__namespace.provide(Runner__namespace.make(process, options), layer);
79
+
80
+ /**
81
+ * @since 1.0.0
82
+ *
83
+ * Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
84
+ */
85
+
86
+ /**
87
+ * @since 1.0.0
88
+ * @category constructors
89
+ */
90
+ const make = make$1;
91
+
92
+ exports.make = make;
93
+ Object.keys(Runner).forEach(function (k) {
94
+ if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
95
+ enumerable: true,
96
+ get: function () { return Runner[k]; }
97
+ });
98
+ });
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ if (process.env.NODE_ENV === "production") {
4
+ module.exports = require("./effect-platform-bun-WorkerRunner.cjs.prod.js");
5
+ } else {
6
+ module.exports = require("./effect-platform-bun-WorkerRunner.cjs.dev.js");
7
+ }
@@ -0,0 +1 @@
1
+ export * from "./effect-platform-bun-WorkerRunner.cjs.js";
@@ -0,0 +1,98 @@
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
+ if (!("postMessage" in self)) {
39
+ return yield* _(Effect__namespace.die("not in a worker"));
40
+ }
41
+ const port = self;
42
+ const queue = yield* _(Queue__namespace.unbounded());
43
+ const fiber = yield* _(Effect__namespace.async((resume, signal) => {
44
+ port.addEventListener("message", function (event) {
45
+ const message = event.data;
46
+ if (message[0] === 0) {
47
+ queue.unsafeOffer(message[1]);
48
+ } else {
49
+ Effect__namespace.runFork(Queue__namespace.shutdown(queue));
50
+ }
51
+ }, {
52
+ signal
53
+ });
54
+ port.addEventListener("error", function (error) {
55
+ resume(Effect__namespace.fail(WorkerError.WorkerError("unknown", error.message)));
56
+ }, {
57
+ signal
58
+ });
59
+ }), Effect__namespace.forkScoped);
60
+ const send = (message, transfer) => Effect__namespace.sync(() => port.postMessage([1, message], {
61
+ transfer: transfer
62
+ }));
63
+ // ready
64
+ port.postMessage([0]);
65
+ return {
66
+ fiber,
67
+ queue,
68
+ send
69
+ };
70
+ });
71
+ }
72
+ });
73
+
74
+ /** @internal */
75
+ const layer = /*#__PURE__*/Layer__namespace.succeed(Runner__namespace.PlatformRunner, platformRunnerImpl);
76
+
77
+ /** @internal */
78
+ const make$1 = (process, options) => Effect__namespace.provide(Runner__namespace.make(process, options), layer);
79
+
80
+ /**
81
+ * @since 1.0.0
82
+ *
83
+ * Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
84
+ */
85
+
86
+ /**
87
+ * @since 1.0.0
88
+ * @category constructors
89
+ */
90
+ const make = make$1;
91
+
92
+ exports.make = make;
93
+ Object.keys(Runner).forEach(function (k) {
94
+ if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
95
+ enumerable: true,
96
+ get: function () { return Runner[k]; }
97
+ });
98
+ });
@@ -0,0 +1,66 @@
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
+ if (!("postMessage" in self)) {
13
+ return yield* _(Effect.die("not in a worker"));
14
+ }
15
+ const port = self;
16
+ const queue = yield* _(Queue.unbounded());
17
+ const fiber = yield* _(Effect.async((resume, signal) => {
18
+ port.addEventListener("message", function (event) {
19
+ const message = event.data;
20
+ if (message[0] === 0) {
21
+ queue.unsafeOffer(message[1]);
22
+ } else {
23
+ Effect.runFork(Queue.shutdown(queue));
24
+ }
25
+ }, {
26
+ signal
27
+ });
28
+ port.addEventListener("error", function (error) {
29
+ resume(Effect.fail(WorkerError("unknown", error.message)));
30
+ }, {
31
+ signal
32
+ });
33
+ }), Effect.forkScoped);
34
+ const send = (message, transfer) => Effect.sync(() => port.postMessage([1, message], {
35
+ transfer: transfer
36
+ }));
37
+ // ready
38
+ port.postMessage([0]);
39
+ return {
40
+ fiber,
41
+ queue,
42
+ send
43
+ };
44
+ });
45
+ }
46
+ });
47
+
48
+ /** @internal */
49
+ const layer = /*#__PURE__*/Layer.succeed(Runner.PlatformRunner, platformRunnerImpl);
50
+
51
+ /** @internal */
52
+ const make$1 = (process, options) => Effect.provide(Runner.make(process, options), layer);
53
+
54
+ /**
55
+ * @since 1.0.0
56
+ *
57
+ * Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
58
+ */
59
+
60
+ /**
61
+ * @since 1.0.0
62
+ * @category constructors
63
+ */
64
+ const make = make$1;
65
+
66
+ export { make };
@@ -0,0 +1,4 @@
1
+ {
2
+ "main": "dist/effect-platform-bun-WorkerRunner.cjs.js",
3
+ "module": "dist/effect-platform-bun-WorkerRunner.esm.js"
4
+ }
@@ -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>) => 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>) => 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,CAAC,KAC1C,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,CAAC,KAC1C,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"}
@@ -52,4 +52,16 @@ export * as Sink from "./Sink.js";
52
52
  * @since 1.0.0
53
53
  */
54
54
  export * as Stream from "./Stream.js";
55
+ /**
56
+ * @since 1.0.0
57
+ *
58
+ * Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
59
+ */
60
+ export * as Worker from "./Worker.js";
61
+ /**
62
+ * @since 1.0.0
63
+ *
64
+ * Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
65
+ */
66
+ export * as WorkerRunner from "./WorkerRunner.js";
55
67
  //# 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,UAAU,wBAAuC;AAE7D;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAoC;AAEvD;;GAEG;AACH,OAAO,KAAK,eAAe,6BAA4C;AAEvE;;GAEG;AACH,OAAO,KAAK,SAAS,uBAAsC;AAE3D;;GAEG;AACH,OAAO,KAAK,KAAK,mBAAkC;AAEnD;;GAEG;AACH,OAAO,KAAK,UAAU,wBAAuC;AAE7D;;GAEG;AACH,OAAO,KAAK,UAAU,wBAAuC;AAE7D;;GAEG;AACH,OAAO,KAAK,UAAU,wBAAuC;AAE7D;;;;GAIG;AACH,OAAO,KAAK,aAAa,2BAA0C;AAEnE;;GAEG;AACH,OAAO,KAAK,IAAI,kBAAiC;AAEjD;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAoC;AAEvD;;GAEG;AACH,OAAO,KAAK,IAAI,kBAAiC;AAEjD;;GAEG;AACH,OAAO,KAAK,MAAM,oBAAmC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"../../../src","sources":["index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,UAAU,wBAAuC;AAE7D;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAoC;AAEvD;;GAEG;AACH,OAAO,KAAK,eAAe,6BAA4C;AAEvE;;GAEG;AACH,OAAO,KAAK,SAAS,uBAAsC;AAE3D;;GAEG;AACH,OAAO,KAAK,KAAK,mBAAkC;AAEnD;;GAEG;AACH,OAAO,KAAK,UAAU,wBAAuC;AAE7D;;GAEG;AACH,OAAO,KAAK,UAAU,wBAAuC;AAE7D;;GAEG;AACH,OAAO,KAAK,UAAU,wBAAuC;AAE7D;;;;GAIG;AACH,OAAO,KAAK,aAAa,2BAA0C;AAEnE;;GAEG;AACH,OAAO,KAAK,IAAI,kBAAiC;AAEjD;;GAEG;AACH,OAAO,KAAK,OAAO,qBAAoC;AAEvD;;GAEG;AACH,OAAO,KAAK,IAAI,kBAAiC;AAEjD;;GAEG;AACH,OAAO,KAAK,MAAM,oBAAmC;AAErD;;;;GAIG;AACH,OAAO,KAAK,MAAM,oBAAmC;AAErD;;;;GAIG;AACH,OAAO,KAAK,YAAY,0BAAyC"}
@@ -15,6 +15,8 @@ var Path = require('@effect/platform-bun/Path');
15
15
  var Runtime = require('@effect/platform-bun/Runtime');
16
16
  var Sink = require('@effect/platform-bun/Sink');
17
17
  var Stream = require('@effect/platform-bun/Stream');
18
+ var Worker = require('@effect/platform-bun/Worker');
19
+ var WorkerRunner = require('@effect/platform-bun/WorkerRunner');
18
20
 
19
21
  function _interopNamespace(e) {
20
22
  if (e && e.__esModule) return e;
@@ -47,6 +49,8 @@ var Path__namespace = /*#__PURE__*/_interopNamespace(Path);
47
49
  var Runtime__namespace = /*#__PURE__*/_interopNamespace(Runtime);
48
50
  var Sink__namespace = /*#__PURE__*/_interopNamespace(Sink);
49
51
  var Stream__namespace = /*#__PURE__*/_interopNamespace(Stream);
52
+ var Worker__namespace = /*#__PURE__*/_interopNamespace(Worker);
53
+ var WorkerRunner__namespace = /*#__PURE__*/_interopNamespace(WorkerRunner);
50
54
 
51
55
 
52
56
 
@@ -63,3 +67,5 @@ exports.Path = Path__namespace;
63
67
  exports.Runtime = Runtime__namespace;
64
68
  exports.Sink = Sink__namespace;
65
69
  exports.Stream = Stream__namespace;
70
+ exports.Worker = Worker__namespace;
71
+ exports.WorkerRunner = WorkerRunner__namespace;
@@ -11,5 +11,7 @@ export {
11
11
  Path,
12
12
  Runtime,
13
13
  Sink,
14
- Stream
14
+ Stream,
15
+ Worker,
16
+ WorkerRunner
15
17
  } from "./effect-platform-bun.cjs.js";
@@ -15,6 +15,8 @@ var Path = require('@effect/platform-bun/Path');
15
15
  var Runtime = require('@effect/platform-bun/Runtime');
16
16
  var Sink = require('@effect/platform-bun/Sink');
17
17
  var Stream = require('@effect/platform-bun/Stream');
18
+ var Worker = require('@effect/platform-bun/Worker');
19
+ var WorkerRunner = require('@effect/platform-bun/WorkerRunner');
18
20
 
19
21
  function _interopNamespace(e) {
20
22
  if (e && e.__esModule) return e;
@@ -47,6 +49,8 @@ var Path__namespace = /*#__PURE__*/_interopNamespace(Path);
47
49
  var Runtime__namespace = /*#__PURE__*/_interopNamespace(Runtime);
48
50
  var Sink__namespace = /*#__PURE__*/_interopNamespace(Sink);
49
51
  var Stream__namespace = /*#__PURE__*/_interopNamespace(Stream);
52
+ var Worker__namespace = /*#__PURE__*/_interopNamespace(Worker);
53
+ var WorkerRunner__namespace = /*#__PURE__*/_interopNamespace(WorkerRunner);
50
54
 
51
55
 
52
56
 
@@ -63,3 +67,5 @@ exports.Path = Path__namespace;
63
67
  exports.Runtime = Runtime__namespace;
64
68
  exports.Sink = Sink__namespace;
65
69
  exports.Stream = Stream__namespace;
70
+ exports.Worker = Worker__namespace;
71
+ exports.WorkerRunner = WorkerRunner__namespace;
@@ -24,3 +24,7 @@ import * as Sink from '@effect/platform-bun/Sink';
24
24
  export { Sink };
25
25
  import * as Stream from '@effect/platform-bun/Stream';
26
26
  export { Stream };
27
+ import * as Worker from '@effect/platform-bun/Worker';
28
+ export { Worker };
29
+ import * as WorkerRunner from '@effect/platform-bun/WorkerRunner';
30
+ export { WorkerRunner };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform-bun",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "main": "dist/effect-platform-bun.cjs.js",
6
6
  "module": "dist/effect-platform-bun.esm.js",
@@ -30,16 +30,16 @@
30
30
  "license": "MIT",
31
31
  "sideEffects": false,
32
32
  "dependencies": {
33
- "@effect/platform": "^0.22.0",
34
- "@effect/platform-node": "^0.23.1"
33
+ "@effect/platform": "^0.23.0",
34
+ "@effect/platform-node": "^0.24.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@effect/schema": "^0.43.0",
38
- "bun-types": "1.0.5-canary.20231009T140142",
39
- "effect": "2.0.0-next.48"
37
+ "@effect/schema": "^0.44.0",
38
+ "bun-types": "1.0.6",
39
+ "effect": "2.0.0-next.49"
40
40
  },
41
41
  "peerDependencies": {
42
- "effect": "2.0.0-next.48"
42
+ "effect": "2.0.0-next.49"
43
43
  },
44
44
  "files": [
45
45
  "src",
@@ -57,7 +57,9 @@
57
57
  "Path",
58
58
  "Runtime",
59
59
  "Sink",
60
- "Stream"
60
+ "Stream",
61
+ "Worker",
62
+ "WorkerRunner"
61
63
  ],
62
64
  "exports": {
63
65
  ".": {
@@ -156,6 +158,18 @@
156
158
  "module": "./Stream/dist/effect-platform-bun-Stream.esm.js",
157
159
  "import": "./Stream/dist/effect-platform-bun-Stream.cjs.mjs",
158
160
  "default": "./Stream/dist/effect-platform-bun-Stream.cjs.js"
161
+ },
162
+ "./Worker": {
163
+ "types": "./dist/declarations/src/Worker.d.ts",
164
+ "module": "./Worker/dist/effect-platform-bun-Worker.esm.js",
165
+ "import": "./Worker/dist/effect-platform-bun-Worker.cjs.mjs",
166
+ "default": "./Worker/dist/effect-platform-bun-Worker.cjs.js"
167
+ },
168
+ "./WorkerRunner": {
169
+ "types": "./dist/declarations/src/WorkerRunner.d.ts",
170
+ "module": "./WorkerRunner/dist/effect-platform-bun-WorkerRunner.esm.js",
171
+ "import": "./WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.mjs",
172
+ "default": "./WorkerRunner/dist/effect-platform-bun-WorkerRunner.cjs.js"
159
173
  }
160
174
  },
161
175
  "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>
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>
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
@@ -64,3 +64,17 @@ export * as Sink from "@effect/platform-bun/Sink"
64
64
  * @since 1.0.0
65
65
  */
66
66
  export * as Stream from "@effect/platform-bun/Stream"
67
+
68
+ /**
69
+ * @since 1.0.0
70
+ *
71
+ * Also includes exports from [`@effect/platform/Worker`](https://effect-ts.github.io/platform/platform/Worker.ts.html).
72
+ */
73
+ export * as Worker from "@effect/platform-bun/Worker"
74
+
75
+ /**
76
+ * @since 1.0.0
77
+ *
78
+ * Also includes exports from [`@effect/platform/WorkerRunner`](https://effect-ts.github.io/platform/platform/WorkerRunner.ts.html).
79
+ */
80
+ export * as WorkerRunner from "@effect/platform-bun/WorkerRunner"
@@ -0,0 +1,56 @@
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 port = worker_ as globalThis.Worker
13
+
14
+ yield* _(Effect.addFinalizer(() =>
15
+ Effect.async<never, never, void>((resume) => {
16
+ port.addEventListener("close", () => resume(Effect.unit), { once: true })
17
+ port.postMessage([1])
18
+ })
19
+ ))
20
+
21
+ const fiberId = yield* _(Effect.fiberId)
22
+ const queue = yield* _(Queue.unbounded<Worker.BackingWorker.Message<O>>())
23
+
24
+ const fiber = yield* _(
25
+ Effect.async<never, WorkerError, never>((resume, signal) => {
26
+ port.addEventListener("message", function(event) {
27
+ queue.unsafeOffer(event.data)
28
+ }, { signal })
29
+ port.addEventListener("error", function(event) {
30
+ resume(Effect.fail(WorkerError("unknown", event.message)))
31
+ }, { signal })
32
+ }),
33
+ Effect.forkDaemon
34
+ )
35
+ yield* _(Effect.addFinalizer(() => fiber.interruptAsFork(fiberId)))
36
+ const join = Fiber.join(fiber)
37
+
38
+ const send = (message: I, transfers?: ReadonlyArray<unknown>) =>
39
+ Effect.sync(() => port.postMessage([0, message], transfers as any))
40
+
41
+ return { join, queue, send }
42
+ })
43
+ }
44
+ })
45
+
46
+ /** @internal */
47
+ export const layerWorker = Layer.succeed(Worker.PlatformWorker, platformWorkerImpl)
48
+
49
+ /** @internal */
50
+ export const layerManager = Layer.provide(layerWorker, Worker.layerManager)
51
+
52
+ /** @internal */
53
+ export const makePool = Worker.makePool<globalThis.Worker>()
54
+
55
+ /** @internal */
56
+ export const makePoolLayer = Worker.makePoolLayer<globalThis.Worker>(layerManager)
@@ -0,0 +1,56 @@
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
+ declare const self: Worker
10
+
11
+ const platformRunnerImpl = Runner.PlatformRunner.of({
12
+ [Runner.PlatformRunnerTypeId]: Runner.PlatformRunnerTypeId,
13
+ start<I, O>() {
14
+ return Effect.gen(function*(_) {
15
+ if (!("postMessage" in self)) {
16
+ return yield* _(Effect.die("not in a worker"))
17
+ }
18
+ const port = self
19
+ const queue = yield* _(Queue.unbounded<I>())
20
+ const fiber = yield* _(
21
+ Effect.async<never, WorkerError, never>((resume, signal) => {
22
+ port.addEventListener("message", function(event) {
23
+ const message = (event as MessageEvent).data as Runner.BackingRunner.Message<I>
24
+ if (message[0] === 0) {
25
+ queue.unsafeOffer(message[1])
26
+ } else {
27
+ Effect.runFork(Queue.shutdown(queue))
28
+ }
29
+ }, { signal })
30
+ port.addEventListener("error", function(error) {
31
+ resume(Effect.fail(WorkerError("unknown", error.message)))
32
+ }, { signal })
33
+ }),
34
+ Effect.forkScoped
35
+ )
36
+ const send = (message: O, transfer?: ReadonlyArray<unknown>) =>
37
+ Effect.sync(() =>
38
+ port.postMessage([1, message], {
39
+ transfer: transfer as any
40
+ })
41
+ )
42
+ // ready
43
+ port.postMessage([0])
44
+ return { fiber, queue, send }
45
+ })
46
+ }
47
+ })
48
+
49
+ /** @internal */
50
+ export const layer = Layer.succeed(Runner.PlatformRunner, platformRunnerImpl)
51
+
52
+ /** @internal */
53
+ export const make = <I, R, E, O>(
54
+ process: (request: I) => Stream.Stream<R, E, O>,
55
+ options?: Runner.Runner.Options<O>
56
+ ): Effect.Effect<Scope.Scope | R, WorkerError, void> => Effect.provide(Runner.make(process, options), layer)