@xylabs/threads 4.6.3 → 4.7.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/dist/browser/master/implementation.browser.mjs +89 -0
  2. package/dist/browser/master/implementation.browser.mjs.map +1 -0
  3. package/dist/browser/worker/worker.browser.mjs +291 -0
  4. package/dist/browser/worker/worker.browser.mjs.map +1 -0
  5. package/dist/neutral/index.mjs +1022 -0
  6. package/dist/neutral/index.mjs.map +1 -0
  7. package/dist/neutral/master/implementation.mjs +264 -0
  8. package/dist/neutral/master/implementation.mjs.map +1 -0
  9. package/dist/neutral/master/index.mjs +988 -0
  10. package/dist/neutral/master/index.mjs.map +1 -0
  11. package/dist/neutral/master/pool.mjs +579 -0
  12. package/dist/neutral/master/pool.mjs.map +1 -0
  13. package/dist/neutral/master/register.mjs +272 -0
  14. package/dist/neutral/master/register.mjs.map +1 -0
  15. package/dist/neutral/master/spawn.mjs +412 -0
  16. package/dist/neutral/master/spawn.mjs.map +1 -0
  17. package/dist/neutral/master/thread.mjs +29 -0
  18. package/dist/neutral/master/thread.mjs.map +1 -0
  19. package/dist/neutral/observable-promise.mjs +132 -0
  20. package/dist/neutral/observable-promise.mjs.map +1 -0
  21. package/dist/neutral/observable.mjs +31 -0
  22. package/dist/neutral/observable.mjs.map +1 -0
  23. package/dist/node/master/implementation.node.mjs +154 -0
  24. package/dist/node/master/implementation.node.mjs.map +1 -0
  25. package/dist/node/worker/worker.node.mjs +304 -0
  26. package/dist/node/worker/worker.node.mjs.map +1 -0
  27. package/dist/{common.d.ts → types/common.d.ts} +5 -1
  28. package/dist/types/common.d.ts.map +1 -0
  29. package/dist/types/index.d.ts +9 -0
  30. package/dist/types/index.d.ts.map +1 -0
  31. package/dist/{master → types/master}/get-bundle-url.browser.d.ts +1 -0
  32. package/dist/types/master/get-bundle-url.browser.d.ts.map +1 -0
  33. package/dist/{master → types/master}/implementation.browser.d.ts +2 -1
  34. package/dist/types/master/implementation.browser.d.ts.map +1 -0
  35. package/dist/{master → types/master}/implementation.d.ts +4 -1
  36. package/dist/types/master/implementation.d.ts.map +1 -0
  37. package/dist/{master → types/master}/implementation.node.d.ts +2 -1
  38. package/dist/types/master/implementation.node.d.ts.map +1 -0
  39. package/dist/types/master/index.d.ts +13 -0
  40. package/dist/types/master/index.d.ts.map +1 -0
  41. package/dist/{master → types/master}/invocation-proxy.d.ts +2 -1
  42. package/dist/types/master/invocation-proxy.d.ts.map +1 -0
  43. package/dist/{master → types/master}/pool-types.d.ts +16 -1
  44. package/dist/types/master/pool-types.d.ts.map +1 -0
  45. package/dist/types/master/pool.d.ts +93 -0
  46. package/dist/types/master/pool.d.ts.map +1 -0
  47. package/dist/types/master/register.d.ts +2 -0
  48. package/dist/types/master/register.d.ts.map +1 -0
  49. package/dist/{master → types/master}/spawn.d.ts +12 -2
  50. package/dist/types/master/spawn.d.ts.map +1 -0
  51. package/dist/types/master/thread.d.ts +13 -0
  52. package/dist/types/master/thread.d.ts.map +1 -0
  53. package/dist/{observable-promise.d.ts → types/observable-promise.d.ts} +14 -0
  54. package/dist/types/observable-promise.d.ts.map +1 -0
  55. package/dist/types/observable.d.ts +21 -0
  56. package/dist/types/observable.d.ts.map +1 -0
  57. package/dist/{ponyfills.d.ts → types/ponyfills.d.ts} +1 -0
  58. package/dist/types/ponyfills.d.ts.map +1 -0
  59. package/dist/types/promise.d.ts +6 -0
  60. package/dist/types/promise.d.ts.map +1 -0
  61. package/dist/{serializers.d.ts → types/serializers.d.ts} +1 -0
  62. package/dist/types/serializers.d.ts.map +1 -0
  63. package/dist/{symbols.d.ts → types/symbols.d.ts} +1 -0
  64. package/dist/types/symbols.d.ts.map +1 -0
  65. package/{src/transferable.ts → dist/types/transferable.d.ts} +8 -33
  66. package/dist/types/transferable.d.ts.map +1 -0
  67. package/dist/types/{master.d.ts → types/master.d.ts} +17 -3
  68. package/dist/types/types/master.d.ts.map +1 -0
  69. package/dist/types/{messages.d.ts → types/messages.d.ts} +1 -0
  70. package/dist/types/types/messages.d.ts.map +1 -0
  71. package/dist/types/{worker.d.ts → types/worker.d.ts} +1 -0
  72. package/dist/types/types/worker.d.ts.map +1 -0
  73. package/dist/types/worker/WorkerGlobalScope.d.ts +6 -0
  74. package/dist/types/worker/WorkerGlobalScope.d.ts.map +1 -0
  75. package/dist/types/worker/expose.d.ts +4 -0
  76. package/dist/types/worker/expose.d.ts.map +1 -0
  77. package/dist/types/worker/worker.browser.d.ts +14 -0
  78. package/dist/types/worker/worker.browser.d.ts.map +1 -0
  79. package/dist/types/worker/worker.node.d.ts +25 -0
  80. package/dist/types/worker/worker.node.d.ts.map +1 -0
  81. package/package.json +53 -93
  82. package/dist/common.js +0 -16
  83. package/dist/esm/common.js +0 -16
  84. package/dist/esm/index.js +0 -26
  85. package/dist/esm/master/get-bundle-url.browser.js +0 -25
  86. package/dist/esm/master/implementation.browser.js +0 -65
  87. package/dist/esm/master/implementation.js +0 -43
  88. package/dist/esm/master/implementation.node.js +0 -205
  89. package/dist/esm/master/index.js +0 -14
  90. package/dist/esm/master/invocation-proxy.js +0 -121
  91. package/dist/esm/master/pool-types.js +0 -14
  92. package/dist/esm/master/pool.js +0 -262
  93. package/dist/esm/master/register.js +0 -11
  94. package/dist/esm/master/spawn.js +0 -114
  95. package/dist/esm/master/thread.js +0 -18
  96. package/dist/esm/observable-promise.js +0 -132
  97. package/dist/esm/observable.js +0 -33
  98. package/dist/esm/ponyfills.js +0 -20
  99. package/dist/esm/promise.js +0 -23
  100. package/dist/esm/serializers.js +0 -41
  101. package/dist/esm/symbols.js +0 -8
  102. package/dist/esm/transferable.js +0 -25
  103. package/dist/esm/types/master.js +0 -9
  104. package/dist/esm/types/messages.js +0 -16
  105. package/dist/esm/types/worker.js +0 -2
  106. package/dist/esm/worker/bundle-entry.js +0 -26
  107. package/dist/esm/worker/implementation.browser.js +0 -24
  108. package/dist/esm/worker/implementation.js +0 -19
  109. package/dist/esm/worker/implementation.tiny-worker.js +0 -37
  110. package/dist/esm/worker/implementation.worker_threads.js +0 -41
  111. package/dist/esm/worker/index.js +0 -174
  112. package/dist/esm/worker_threads.js +0 -13
  113. package/dist/index.d.ts +0 -7
  114. package/dist/index.js +0 -26
  115. package/dist/master/get-bundle-url.browser.js +0 -25
  116. package/dist/master/implementation.browser.js +0 -65
  117. package/dist/master/implementation.js +0 -43
  118. package/dist/master/implementation.node.js +0 -205
  119. package/dist/master/index.d.ts +0 -10
  120. package/dist/master/index.js +0 -14
  121. package/dist/master/invocation-proxy.js +0 -121
  122. package/dist/master/pool-types.js +0 -14
  123. package/dist/master/pool.d.ts +0 -50
  124. package/dist/master/pool.js +0 -262
  125. package/dist/master/register.d.ts +0 -1
  126. package/dist/master/register.js +0 -11
  127. package/dist/master/spawn.js +0 -114
  128. package/dist/master/thread.d.ts +0 -8
  129. package/dist/master/thread.js +0 -18
  130. package/dist/observable-promise.js +0 -132
  131. package/dist/observable.d.ts +0 -11
  132. package/dist/observable.js +0 -33
  133. package/dist/ponyfills.js +0 -20
  134. package/dist/promise.d.ts +0 -1
  135. package/dist/promise.js +0 -23
  136. package/dist/serializers.js +0 -41
  137. package/dist/symbols.js +0 -8
  138. package/dist/transferable.d.ts +0 -9
  139. package/dist/transferable.js +0 -25
  140. package/dist/types/master.js +0 -9
  141. package/dist/types/messages.js +0 -16
  142. package/dist/types/worker.js +0 -2
  143. package/dist/worker/bundle-entry.d.ts +0 -1
  144. package/dist/worker/bundle-entry.js +0 -26
  145. package/dist/worker/implementation.browser.d.ts +0 -6
  146. package/dist/worker/implementation.browser.js +0 -24
  147. package/dist/worker/implementation.d.ts +0 -3
  148. package/dist/worker/implementation.js +0 -19
  149. package/dist/worker/implementation.tiny-worker.d.ts +0 -6
  150. package/dist/worker/implementation.tiny-worker.js +0 -37
  151. package/dist/worker/implementation.worker_threads.d.ts +0 -8
  152. package/dist/worker/implementation.worker_threads.js +0 -41
  153. package/dist/worker/index.d.ts +0 -5
  154. package/dist/worker/index.js +0 -174
  155. package/dist/worker_threads.d.ts +0 -8
  156. package/dist/worker_threads.js +0 -13
  157. package/eslint.config.mjs +0 -35
  158. package/index.mjs +0 -10
  159. package/observable.d.ts +0 -2
  160. package/observable.js +0 -2
  161. package/observable.mjs +0 -4
  162. package/register.d.ts +0 -2
  163. package/register.js +0 -2
  164. package/register.mjs +0 -1
  165. package/rollup.config.js +0 -16
  166. package/src/common.ts +0 -19
  167. package/src/index.ts +0 -10
  168. package/src/master/get-bundle-url.browser.ts +0 -31
  169. package/src/master/implementation.browser.ts +0 -82
  170. package/src/master/implementation.node.ts +0 -285
  171. package/src/master/implementation.ts +0 -21
  172. package/src/master/index.ts +0 -19
  173. package/src/master/invocation-proxy.ts +0 -151
  174. package/src/master/pool-types.ts +0 -83
  175. package/src/master/pool.ts +0 -399
  176. package/src/master/register.ts +0 -10
  177. package/src/master/spawn.ts +0 -172
  178. package/src/master/thread.ts +0 -29
  179. package/src/observable-promise.ts +0 -183
  180. package/src/observable.ts +0 -44
  181. package/src/ponyfills.ts +0 -31
  182. package/src/promise.ts +0 -26
  183. package/src/serializers.ts +0 -68
  184. package/src/symbols.ts +0 -5
  185. package/src/types/master.ts +0 -132
  186. package/src/types/messages.ts +0 -72
  187. package/src/types/worker.ts +0 -14
  188. package/src/worker/bundle-entry.ts +0 -10
  189. package/src/worker/implementation.browser.ts +0 -40
  190. package/src/worker/implementation.tiny-worker.ts +0 -55
  191. package/src/worker/implementation.ts +0 -23
  192. package/src/worker/implementation.worker_threads.ts +0 -50
  193. package/src/worker/index.ts +0 -230
  194. package/src/worker_threads.ts +0 -27
  195. package/test/lib/index.ts +0 -1
  196. package/test/lib/serialization.ts +0 -38
  197. package/test/observable-promise.test.ts +0 -205
  198. package/test/observable.test.ts +0 -87
  199. package/test/pool.test.ts +0 -183
  200. package/test/serialization.test.ts +0 -23
  201. package/test/spawn.chromium.mocha.ts +0 -53
  202. package/test/spawn.test.ts +0 -87
  203. package/test/streaming.test.ts +0 -29
  204. package/test/transferables.test.ts +0 -71
  205. package/test/workers/arraybuffer-xor.ts +0 -10
  206. package/test/workers/count-to-five.ts +0 -12
  207. package/test/workers/counter.ts +0 -19
  208. package/test/workers/faulty-function.ts +0 -5
  209. package/test/workers/hello-world.ts +0 -5
  210. package/test/workers/increment.ts +0 -8
  211. package/test/workers/minmax.ts +0 -25
  212. package/test/workers/serialization.ts +0 -13
  213. package/test/workers/top-level-throw.ts +0 -1
  214. package/test-tooling/rollup/app.js +0 -21
  215. package/test-tooling/rollup/rollup.config.ts +0 -14
  216. package/test-tooling/rollup/worker.js +0 -7
  217. package/test-tooling/tsconfig/minimal.ts +0 -12
  218. package/test-tooling/webpack/addition-worker.ts +0 -9
  219. package/test-tooling/webpack/app-with-inlined-worker.ts +0 -28
  220. package/test-tooling/webpack/app.ts +0 -61
  221. package/test-tooling/webpack/pool-worker.ts +0 -5
  222. package/test-tooling/webpack/raw-loader.d.ts +0 -4
  223. package/test-tooling/webpack/webpack.chromium.mocha.ts +0 -21
  224. package/test-tooling/webpack/webpack.node.config.js +0 -29
  225. package/test-tooling/webpack/webpack.web.config.js +0 -28
  226. package/types/is-observable.d.ts +0 -7
  227. package/types/tiny-worker.d.ts +0 -4
  228. package/types/webworker.d.ts +0 -9
  229. package/worker.d.ts +0 -2
  230. package/worker.js +0 -2
  231. package/worker.mjs +0 -6
@@ -1,41 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DefaultSerializer = void 0;
4
- exports.extendSerializer = extendSerializer;
5
- function extendSerializer(extend, implementation) {
6
- const fallbackDeserializer = extend.deserialize.bind(extend);
7
- const fallbackSerializer = extend.serialize.bind(extend);
8
- return {
9
- deserialize(message) {
10
- return implementation.deserialize(message, fallbackDeserializer);
11
- },
12
- serialize(input) {
13
- return implementation.serialize(input, fallbackSerializer);
14
- },
15
- };
16
- }
17
- const DefaultErrorSerializer = {
18
- deserialize(message) {
19
- return Object.assign(new Error(message.message), {
20
- name: message.name,
21
- stack: message.stack,
22
- });
23
- },
24
- serialize(error) {
25
- return {
26
- __error_marker: '$$error',
27
- message: error.message,
28
- name: error.name,
29
- stack: error.stack,
30
- };
31
- },
32
- };
33
- const isSerializedError = (thing) => thing && typeof thing === 'object' && '__error_marker' in thing && thing.__error_marker === '$$error';
34
- exports.DefaultSerializer = {
35
- deserialize(message) {
36
- return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message;
37
- },
38
- serialize(input) {
39
- return input instanceof Error ? DefaultErrorSerializer.serialize(input) : input;
40
- },
41
- };
package/dist/symbols.js DELETED
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.$worker = exports.$transferable = exports.$terminate = exports.$events = exports.$errors = void 0;
4
- exports.$errors = Symbol('thread.errors');
5
- exports.$events = Symbol('thread.events');
6
- exports.$terminate = Symbol('thread.terminate');
7
- exports.$transferable = Symbol('thread.transferable');
8
- exports.$worker = Symbol('thread.worker');
@@ -1,9 +0,0 @@
1
- import { $transferable } from './symbols';
2
- export interface TransferDescriptor<T = any> {
3
- [$transferable]: true;
4
- send: T;
5
- transferables: Transferable[];
6
- }
7
- export declare function isTransferDescriptor(thing: any): thing is TransferDescriptor;
8
- export declare function Transfer(transferable: Transferable): TransferDescriptor;
9
- export declare function Transfer<T>(payload: T, transferables: Transferable[]): TransferDescriptor;
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isTransferDescriptor = isTransferDescriptor;
4
- exports.Transfer = Transfer;
5
- const symbols_1 = require("./symbols");
6
- function isTransferable(thing) {
7
- if (!thing || typeof thing !== 'object')
8
- return false;
9
- return true;
10
- }
11
- function isTransferDescriptor(thing) {
12
- return thing && typeof thing === 'object' && thing[symbols_1.$transferable];
13
- }
14
- function Transfer(payload, transferables) {
15
- if (!transferables) {
16
- if (!isTransferable(payload))
17
- throw new Error('Not transferable');
18
- transferables = [payload];
19
- }
20
- return {
21
- [symbols_1.$transferable]: true,
22
- send: payload,
23
- transferables,
24
- };
25
- }
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WorkerEventType = void 0;
4
- var WorkerEventType;
5
- (function (WorkerEventType) {
6
- WorkerEventType["internalError"] = "internalError";
7
- WorkerEventType["message"] = "message";
8
- WorkerEventType["termination"] = "termination";
9
- })(WorkerEventType || (exports.WorkerEventType = WorkerEventType = {}));
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WorkerMessageType = exports.MasterMessageType = void 0;
4
- var MasterMessageType;
5
- (function (MasterMessageType) {
6
- MasterMessageType["cancel"] = "cancel";
7
- MasterMessageType["run"] = "run";
8
- })(MasterMessageType || (exports.MasterMessageType = MasterMessageType = {}));
9
- var WorkerMessageType;
10
- (function (WorkerMessageType) {
11
- WorkerMessageType["error"] = "error";
12
- WorkerMessageType["init"] = "init";
13
- WorkerMessageType["result"] = "result";
14
- WorkerMessageType["running"] = "running";
15
- WorkerMessageType["uncaughtError"] = "uncaughtError";
16
- })(WorkerMessageType || (exports.WorkerMessageType = WorkerMessageType = {}));
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1 +0,0 @@
1
- export * from './index';
@@ -1,26 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- const index_1 = require("./index");
18
- __exportStar(require("./index"), exports);
19
- if (typeof globalThis !== 'undefined') {
20
- ;
21
- globalThis.expose = index_1.expose;
22
- }
23
- if (typeof globalThis !== 'undefined') {
24
- ;
25
- globalThis.expose = index_1.expose;
26
- }
@@ -1,6 +0,0 @@
1
- declare const _default: {
2
- isWorkerRuntime: () => boolean;
3
- postMessageToMaster: (message: any, transferList?: Transferable[]) => void;
4
- subscribeToMasterMessages: (onMessage: (data: any) => void) => () => void;
5
- };
6
- export default _default;
@@ -1,24 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const isWorkerRuntime = function isWorkerRuntime() {
4
- const isWindowContext = self !== undefined && typeof Window !== 'undefined' && self instanceof Window;
5
- return self !== undefined && self['postMessage'] && !isWindowContext ? true : false;
6
- };
7
- const postMessageToMaster = function postMessageToMaster(data, transferList) {
8
- self.postMessage(data, transferList);
9
- };
10
- const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) {
11
- const messageHandler = (messageEvent) => {
12
- onMessage(messageEvent.data);
13
- };
14
- const unsubscribe = () => {
15
- self.removeEventListener('message', messageHandler);
16
- };
17
- self.addEventListener('message', messageHandler);
18
- return unsubscribe;
19
- };
20
- exports.default = {
21
- isWorkerRuntime,
22
- postMessageToMaster,
23
- subscribeToMasterMessages,
24
- };
@@ -1,3 +0,0 @@
1
- import type { AbstractedWorkerAPI } from '../types/worker';
2
- declare const _default: AbstractedWorkerAPI;
3
- export default _default;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const implementation_browser_1 = __importDefault(require("./implementation.browser"));
7
- const implementation_tiny_worker_1 = __importDefault(require("./implementation.tiny-worker"));
8
- const implementation_worker_threads_1 = __importDefault(require("./implementation.worker_threads"));
9
- const runningInNode = typeof process !== 'undefined' && process.arch !== 'browser' && 'pid' in process;
10
- function selectNodeImplementation() {
11
- try {
12
- implementation_worker_threads_1.default.testImplementation();
13
- return implementation_worker_threads_1.default;
14
- }
15
- catch {
16
- return implementation_tiny_worker_1.default;
17
- }
18
- }
19
- exports.default = runningInNode ? selectNodeImplementation() : implementation_browser_1.default;
@@ -1,6 +0,0 @@
1
- declare const _default: {
2
- isWorkerRuntime: () => boolean;
3
- postMessageToMaster: (message: any, transferList?: Transferable[]) => void;
4
- subscribeToMasterMessages: (onMessage: (data: any) => void) => () => void;
5
- };
6
- export default _default;
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- try {
4
- if (self === undefined) {
5
- ;
6
- globalThis.self = globalThis;
7
- }
8
- }
9
- catch {
10
- ;
11
- globalThis.self = globalThis;
12
- }
13
- const isWorkerRuntime = function isWorkerRuntime() {
14
- return self !== undefined && self['postMessage'] ? true : false;
15
- };
16
- const postMessageToMaster = function postMessageToMaster(data) {
17
- self.postMessage(data);
18
- };
19
- let muxingHandlerSetUp = false;
20
- const messageHandlers = new Set();
21
- const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) {
22
- if (!muxingHandlerSetUp) {
23
- self.addEventListener('message', ((event) => {
24
- for (const handler of messageHandlers)
25
- handler(event.data);
26
- }));
27
- muxingHandlerSetUp = true;
28
- }
29
- messageHandlers.add(onMessage);
30
- const unsubscribe = () => messageHandlers.delete(onMessage);
31
- return unsubscribe;
32
- };
33
- exports.default = {
34
- isWorkerRuntime,
35
- postMessageToMaster,
36
- subscribeToMasterMessages,
37
- };
@@ -1,8 +0,0 @@
1
- declare function testImplementation(): void;
2
- declare const _default: {
3
- isWorkerRuntime: () => boolean;
4
- postMessageToMaster: (message: any, transferList?: Transferable[]) => void;
5
- subscribeToMasterMessages: (onMessage: (data: any) => void) => () => void;
6
- testImplementation: typeof testImplementation;
7
- };
8
- export default _default;
@@ -1,41 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const worker_threads_1 = __importDefault(require("../worker_threads"));
7
- function assertMessagePort(port) {
8
- if (!port) {
9
- throw new Error('Invariant violation: MessagePort to parent is not available.');
10
- }
11
- return port;
12
- }
13
- const isWorkerRuntime = function isWorkerRuntime() {
14
- return !(0, worker_threads_1.default)().isMainThread;
15
- };
16
- const postMessageToMaster = function postMessageToMaster(data, transferList) {
17
- assertMessagePort((0, worker_threads_1.default)().parentPort).postMessage(data, transferList);
18
- };
19
- const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) {
20
- const parentPort = (0, worker_threads_1.default)().parentPort;
21
- if (!parentPort) {
22
- throw new Error('Invariant violation: MessagePort to parent is not available.');
23
- }
24
- const messageHandler = (message) => {
25
- onMessage(message);
26
- };
27
- const unsubscribe = () => {
28
- assertMessagePort(parentPort).off('message', messageHandler);
29
- };
30
- assertMessagePort(parentPort).on('message', messageHandler);
31
- return unsubscribe;
32
- };
33
- function testImplementation() {
34
- (0, worker_threads_1.default)();
35
- }
36
- exports.default = {
37
- isWorkerRuntime,
38
- postMessageToMaster,
39
- subscribeToMasterMessages,
40
- testImplementation,
41
- };
@@ -1,5 +0,0 @@
1
- import type { WorkerFunction, WorkerModule } from '../types/worker';
2
- export { registerSerializer } from '../common';
3
- export { Transfer } from '../transferable';
4
- export declare const isWorkerRuntime: () => boolean;
5
- export declare function expose(exposed: WorkerFunction | WorkerModule<any>): void;
@@ -1,174 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isWorkerRuntime = exports.Transfer = exports.registerSerializer = void 0;
7
- exports.expose = expose;
8
- const is_observable_2_1_0_1 = __importDefault(require("is-observable-2-1-0"));
9
- const common_1 = require("../common");
10
- const transferable_1 = require("../transferable");
11
- const messages_1 = require("../types/messages");
12
- const implementation_1 = __importDefault(require("./implementation"));
13
- var common_2 = require("../common");
14
- Object.defineProperty(exports, "registerSerializer", { enumerable: true, get: function () { return common_2.registerSerializer; } });
15
- var transferable_2 = require("../transferable");
16
- Object.defineProperty(exports, "Transfer", { enumerable: true, get: function () { return transferable_2.Transfer; } });
17
- exports.isWorkerRuntime = implementation_1.default.isWorkerRuntime;
18
- let exposeCalled = false;
19
- const activeSubscriptions = new Map();
20
- const isMasterJobCancelMessage = (thing) => thing && thing.type === messages_1.MasterMessageType.cancel;
21
- const isMasterJobRunMessage = (thing) => thing && thing.type === messages_1.MasterMessageType.run;
22
- const isObservable = (thing) => (0, is_observable_2_1_0_1.default)(thing) || isZenObservable(thing);
23
- function isZenObservable(thing) {
24
- return thing && typeof thing === 'object' && typeof thing.subscribe === 'function';
25
- }
26
- function deconstructTransfer(thing) {
27
- return (0, transferable_1.isTransferDescriptor)(thing) ? { payload: thing.send, transferables: thing.transferables } : { payload: thing, transferables: undefined };
28
- }
29
- function postFunctionInitMessage() {
30
- const initMessage = {
31
- exposed: { type: 'function' },
32
- type: messages_1.WorkerMessageType.init,
33
- };
34
- implementation_1.default.postMessageToMaster(initMessage);
35
- }
36
- function postModuleInitMessage(methodNames) {
37
- const initMessage = {
38
- exposed: {
39
- methods: methodNames,
40
- type: 'module',
41
- },
42
- type: messages_1.WorkerMessageType.init,
43
- };
44
- implementation_1.default.postMessageToMaster(initMessage);
45
- }
46
- function postJobErrorMessage(uid, rawError) {
47
- const { payload: error, transferables } = deconstructTransfer(rawError);
48
- const errorMessage = {
49
- error: (0, common_1.serialize)(error),
50
- type: messages_1.WorkerMessageType.error,
51
- uid,
52
- };
53
- implementation_1.default.postMessageToMaster(errorMessage, transferables);
54
- }
55
- function postJobResultMessage(uid, completed, resultValue) {
56
- const { payload, transferables } = deconstructTransfer(resultValue);
57
- const resultMessage = {
58
- complete: completed ? true : undefined,
59
- payload,
60
- type: messages_1.WorkerMessageType.result,
61
- uid,
62
- };
63
- implementation_1.default.postMessageToMaster(resultMessage, transferables);
64
- }
65
- function postJobStartMessage(uid, resultType) {
66
- const startMessage = {
67
- resultType,
68
- type: messages_1.WorkerMessageType.running,
69
- uid,
70
- };
71
- implementation_1.default.postMessageToMaster(startMessage);
72
- }
73
- function postUncaughtErrorMessage(error) {
74
- try {
75
- const errorMessage = {
76
- error: (0, common_1.serialize)(error),
77
- type: messages_1.WorkerMessageType.uncaughtError,
78
- };
79
- implementation_1.default.postMessageToMaster(errorMessage);
80
- }
81
- catch (subError) {
82
- console.error('Not reporting uncaught error back to master thread as it ' + 'occured while reporting an uncaught error already.' + '\nLatest error:', subError, '\nOriginal error:', error);
83
- }
84
- }
85
- async function runFunction(jobUID, fn, args) {
86
- let syncResult;
87
- try {
88
- syncResult = fn(...args);
89
- }
90
- catch (error) {
91
- return postJobErrorMessage(jobUID, error);
92
- }
93
- const resultType = isObservable(syncResult) ? 'observable' : 'promise';
94
- postJobStartMessage(jobUID, resultType);
95
- if (isObservable(syncResult)) {
96
- const subscription = syncResult.subscribe(value => postJobResultMessage(jobUID, false, (0, common_1.serialize)(value)), (error) => {
97
- postJobErrorMessage(jobUID, (0, common_1.serialize)(error));
98
- activeSubscriptions.delete(jobUID);
99
- }, () => {
100
- postJobResultMessage(jobUID, true);
101
- activeSubscriptions.delete(jobUID);
102
- });
103
- activeSubscriptions.set(jobUID, subscription);
104
- }
105
- else {
106
- try {
107
- const result = await syncResult;
108
- postJobResultMessage(jobUID, true, (0, common_1.serialize)(result));
109
- }
110
- catch (error) {
111
- postJobErrorMessage(jobUID, (0, common_1.serialize)(error));
112
- }
113
- }
114
- }
115
- function expose(exposed) {
116
- if (!implementation_1.default.isWorkerRuntime()) {
117
- throw new Error('expose() called in the master thread.');
118
- }
119
- if (exposeCalled) {
120
- throw new Error('expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions.');
121
- }
122
- exposeCalled = true;
123
- if (typeof exposed === 'function') {
124
- implementation_1.default.subscribeToMasterMessages((messageData) => {
125
- if (isMasterJobRunMessage(messageData) && !messageData.method) {
126
- runFunction(messageData.uid, exposed, messageData.args.map(common_1.deserialize));
127
- }
128
- });
129
- postFunctionInitMessage();
130
- }
131
- else if (typeof exposed === 'object' && exposed) {
132
- implementation_1.default.subscribeToMasterMessages((messageData) => {
133
- if (isMasterJobRunMessage(messageData) && messageData.method) {
134
- runFunction(messageData.uid, exposed[messageData.method], messageData.args.map(common_1.deserialize));
135
- }
136
- });
137
- const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function');
138
- postModuleInitMessage(methodNames);
139
- }
140
- else {
141
- throw new Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${exposed}`);
142
- }
143
- implementation_1.default.subscribeToMasterMessages((messageData) => {
144
- if (isMasterJobCancelMessage(messageData)) {
145
- const jobUID = messageData.uid;
146
- const subscription = activeSubscriptions.get(jobUID);
147
- if (subscription) {
148
- subscription.unsubscribe();
149
- activeSubscriptions.delete(jobUID);
150
- }
151
- }
152
- });
153
- }
154
- if (typeof globalThis !== 'undefined' && typeof self.addEventListener === 'function' && implementation_1.default.isWorkerRuntime()) {
155
- self.addEventListener('error', (event) => {
156
- setTimeout(() => postUncaughtErrorMessage(event.error || event), 250);
157
- });
158
- self.addEventListener('unhandledrejection', (event) => {
159
- const error = event.reason;
160
- if (error && typeof error.message === 'string') {
161
- setTimeout(() => postUncaughtErrorMessage(error), 250);
162
- }
163
- });
164
- }
165
- if (typeof process !== 'undefined' && typeof process.on === 'function' && implementation_1.default.isWorkerRuntime()) {
166
- process.on('uncaughtException', (error) => {
167
- setTimeout(() => postUncaughtErrorMessage(error), 250);
168
- });
169
- process.on('unhandledRejection', (error) => {
170
- if (error && typeof error.message === 'string') {
171
- setTimeout(() => postUncaughtErrorMessage(error), 250);
172
- }
173
- });
174
- }
@@ -1,8 +0,0 @@
1
- type MessagePort = any;
2
- interface WorkerThreadsModule {
3
- MessagePort: typeof MessagePort;
4
- isMainThread: boolean;
5
- parentPort: MessagePort;
6
- }
7
- export default function getImplementation(): WorkerThreadsModule;
8
- export {};
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = getImplementation;
4
- let implementation;
5
- function selectImplementation() {
6
- return typeof __non_webpack_require__ === 'function' ? __non_webpack_require__('worker_threads') : eval('require')('worker_threads');
7
- }
8
- function getImplementation() {
9
- if (!implementation) {
10
- implementation = selectImplementation();
11
- }
12
- return implementation;
13
- }
package/eslint.config.mjs DELETED
@@ -1,35 +0,0 @@
1
- import {
2
- typescriptConfig,
3
- unicornConfig,
4
- workspacesConfig,
5
- rulesConfig,
6
- importConfig,
7
- } from '@xylabs/eslint-config-flat'
8
-
9
- export default [
10
- { ignores: ['.yarn', 'dist', '**/dist/**',
11
- 'build', '**/build/**', 'node_modules/**', 'public', 'storybook-static', 'eslint.config.mjs',
12
- 'rollup.config.js', 'test-tooling', 'test', 'types', 'worker.*', '*.mjs', '*.d.ts', '*.js'] },
13
- unicornConfig,
14
- workspacesConfig,
15
- rulesConfig,
16
- typescriptConfig,
17
- importConfig,
18
- {
19
- rules: {
20
- 'no-restricted-syntax': ['off'],
21
- 'no-restricted-imports': [
22
- 'warn',
23
- {
24
- paths: [
25
- ...rulesConfig.rules['no-restricted-imports'][1].paths,
26
- '@xyo-network/*',
27
- 'lodash',
28
- 'lodash-es',
29
- '@xylabs/lodash',
30
- ],
31
- },
32
- ],
33
- },
34
- },
35
- ]
package/index.mjs DELETED
@@ -1,10 +0,0 @@
1
- import * as Threads from './dist/index.js'
2
-
3
- export const registerSerializer = Threads.registerSerializer
4
- export const spawn = Threads.spawn
5
- export const BlobWorker = Threads.BlobWorker
6
- export const DefaultSerializer = Threads.DefaultSerializer
7
- export const Pool = Threads.Pool
8
- export const Thread = Threads.Thread
9
- export const Transfer = Threads.Transfer
10
- export const Worker = Threads.Worker
package/observable.d.ts DELETED
@@ -1,2 +0,0 @@
1
- // eslint-disable-next-line import-x/no-internal-modules
2
- export * from './dist/observable'
package/observable.js DELETED
@@ -1,2 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-require-imports */
2
- module.exports = require('./dist/observable')
package/observable.mjs DELETED
@@ -1,4 +0,0 @@
1
- import * as Observables from './dist/observable.js'
2
-
3
- export const Observable = Observables.Observable
4
- export const Subject = Observables.Subject
package/register.d.ts DELETED
@@ -1,2 +0,0 @@
1
- // eslint-disable-next-line import-x/no-internal-modules
2
- export * from './dist/master/register'
package/register.js DELETED
@@ -1,2 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-require-imports */
2
- require('./dist/master/register')
package/register.mjs DELETED
@@ -1 +0,0 @@
1
- import './dist/master/register.js'
package/rollup.config.js DELETED
@@ -1,16 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-require-imports */
2
- const commonjs = require('@rollup/plugin-commonjs')
3
- /* eslint-disable @typescript-eslint/no-require-imports */
4
- const { nodeResolve } = require('@rollup/plugin-node-resolve')
5
-
6
- module.exports = {
7
- plugins: [
8
- nodeResolve({
9
- browser: true,
10
- mainFields: ['module', 'main'],
11
- preferBuiltins: true,
12
- }),
13
-
14
- commonjs(),
15
- ],
16
- }
package/src/common.ts DELETED
@@ -1,19 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import type {
3
- JsonSerializable, Serializer, SerializerImplementation,
4
- } from './serializers'
5
- import { DefaultSerializer, extendSerializer } from './serializers'
6
-
7
- let registeredSerializer: Serializer<JsonSerializable> = DefaultSerializer
8
-
9
- export function registerSerializer(serializer: SerializerImplementation<JsonSerializable>) {
10
- registeredSerializer = extendSerializer(registeredSerializer, serializer)
11
- }
12
-
13
- export function deserialize(message: JsonSerializable): any {
14
- return registeredSerializer.deserialize(message)
15
- }
16
-
17
- export function serialize(input: any): JsonSerializable {
18
- return registeredSerializer.serialize(input)
19
- }
package/src/index.ts DELETED
@@ -1,10 +0,0 @@
1
- /* eslint-disable import-x/no-internal-modules */
2
- export { registerSerializer } from './common'
3
- export * from './master/index'
4
- export { QueuedTask } from './master/pool'
5
- export { ExposedToThreadType as ExposedAs } from './master/spawn'
6
- export {
7
- DefaultSerializer, JsonSerializable, Serializer, SerializerImplementation,
8
- } from './serializers'
9
- export { Transfer, TransferDescriptor } from './transferable'
10
- export { expose } from './worker/index'