@xylabs/threads 3.5.1 → 3.5.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/dist/common.js +3 -5
- package/{dist-esm → dist/esm}/common.js +0 -1
- package/{dist-esm → dist/esm}/index.js +0 -1
- package/{dist-esm → dist/esm}/master/get-bundle-url.browser.js +0 -2
- package/{dist-esm → dist/esm}/master/implementation.browser.js +1 -5
- package/{dist-esm → dist/esm}/master/implementation.js +0 -8
- package/{dist-esm → dist/esm}/master/implementation.node.js +0 -26
- package/{dist-esm → dist/esm}/master/index.js +0 -2
- package/{dist-esm → dist/esm}/master/invocation-proxy.js +0 -8
- package/{dist-esm → dist/esm}/master/pool-types.js +0 -1
- package/{dist-esm → dist/esm}/master/pool.js +2 -21
- package/{dist-esm → dist/esm}/master/register.js +0 -1
- package/{dist-esm → dist/esm}/master/spawn.js +0 -13
- package/{dist-esm → dist/esm}/master/thread.js +0 -4
- package/{dist-esm → dist/esm}/observable-promise.js +0 -24
- package/{dist-esm → dist/esm}/observable.js +0 -10
- package/{dist-esm → dist/esm}/ponyfills.js +0 -1
- package/{dist-esm → dist/esm}/promise.js +0 -5
- package/{dist-esm → dist/esm}/transferable.js +0 -2
- package/{dist-esm → dist/esm}/types/master.js +0 -4
- package/{dist-esm → dist/esm}/types/messages.js +0 -4
- package/{dist-esm → dist/esm}/worker/bundle-entry.js +0 -1
- package/{dist-esm → dist/esm}/worker/implementation.browser.js +0 -4
- package/{dist-esm → dist/esm}/worker/implementation.js +0 -5
- package/{dist-esm → dist/esm}/worker/implementation.tiny-worker.js +0 -7
- package/{dist-esm → dist/esm}/worker/implementation.worker_threads.js +0 -1
- package/{dist-esm → dist/esm}/worker/index.js +0 -19
- package/{dist-esm → dist/esm}/worker_threads.js +0 -4
- package/dist/index.js +0 -1
- package/dist/master/get-bundle-url.browser.js +2 -5
- package/dist/master/implementation.browser.js +4 -8
- package/dist/master/implementation.d.ts +0 -2
- package/dist/master/implementation.js +0 -8
- package/dist/master/implementation.node.d.ts +0 -1
- package/dist/master/implementation.node.js +3 -29
- package/dist/master/index.d.ts +0 -2
- package/dist/master/index.js +0 -2
- package/dist/master/invocation-proxy.js +2 -11
- package/dist/master/pool-types.d.ts +0 -14
- package/dist/master/pool-types.js +0 -1
- package/dist/master/pool.d.ts +0 -41
- package/dist/master/pool.js +2 -21
- package/dist/master/register.js +0 -1
- package/dist/master/spawn.d.ts +0 -9
- package/dist/master/spawn.js +1 -15
- package/dist/master/thread.d.ts +2 -6
- package/dist/master/thread.js +0 -4
- package/dist/observable-promise.d.ts +0 -13
- package/dist/observable-promise.js +0 -24
- package/dist/observable.d.ts +0 -9
- package/dist/observable.js +0 -10
- package/dist/ponyfills.js +1 -3
- package/dist/promise.d.ts +0 -4
- package/dist/promise.js +1 -7
- package/dist/serializers.js +2 -2
- package/dist/transferable.d.ts +0 -33
- package/dist/transferable.js +2 -5
- package/dist/types/master.d.ts +0 -14
- package/dist/types/master.js +0 -4
- package/dist/types/messages.js +0 -4
- package/dist/worker/bundle-entry.js +0 -1
- package/dist/worker/implementation.browser.d.ts +1 -2
- package/dist/worker/implementation.browser.js +0 -4
- package/dist/worker/implementation.js +0 -5
- package/dist/worker/implementation.tiny-worker.d.ts +1 -2
- package/dist/worker/implementation.tiny-worker.js +0 -7
- package/dist/worker/implementation.worker_threads.d.ts +1 -1
- package/dist/worker/implementation.worker_threads.js +0 -1
- package/dist/worker/index.d.ts +0 -8
- package/dist/worker/index.js +2 -21
- package/dist/worker_threads.js +1 -5
- package/index.mjs +0 -1
- package/observable.d.ts +0 -1
- package/observable.js +0 -2
- package/observable.mjs +0 -1
- package/package.json +16 -17
- package/register.d.ts +0 -2
- package/register.js +0 -2
- package/register.mjs +0 -1
- package/rollup.config.js +0 -1
- package/src/index.ts +0 -1
- package/src/master/pool.ts +2 -1
- package/src/master/spawn.ts +1 -2
- package/src/observable-promise.ts +1 -0
- package/src/worker/implementation.browser.ts +1 -1
- package/src/worker/implementation.tiny-worker.ts +1 -1
- package/src/worker/implementation.ts +1 -1
- package/src/worker/implementation.worker_threads.ts +1 -1
- package/src/worker/index.ts +1 -1
- package/src/worker_threads.ts +1 -1
- package/test/lib/serialization.ts +1 -1
- package/test/observable-promise.test.ts +0 -1
- package/test/observable.test.ts +1 -1
- package/test/pool.test.ts +3 -2
- package/test/serialization.test.ts +0 -1
- package/test/spawn.chromium.mocha.ts +0 -1
- package/test/spawn.test.ts +2 -3
- package/test/streaming.test.ts +0 -1
- package/test/transferables.test.ts +1 -1
- package/test/workers/arraybuffer-xor.ts +0 -1
- package/test/workers/count-to-five.ts +0 -1
- package/test/workers/counter.ts +0 -1
- package/test/workers/faulty-function.ts +0 -1
- package/test/workers/hello-world.ts +0 -1
- package/test/workers/increment.ts +0 -1
- package/test/workers/minmax.ts +0 -1
- package/test/workers/serialization.ts +1 -1
- package/test-tooling/rollup/app.js +0 -1
- package/test-tooling/rollup/rollup.config.ts +1 -1
- package/test-tooling/rollup/worker.js +2 -2
- package/test-tooling/tsconfig/minimal.ts +1 -1
- package/test-tooling/webpack/addition-worker.ts +0 -1
- package/test-tooling/webpack/app-with-inlined-worker.ts +3 -3
- package/test-tooling/webpack/app.ts +2 -2
- package/test-tooling/webpack/pool-worker.ts +0 -1
- package/test-tooling/webpack/webpack.node.config.js +0 -1
- package/test-tooling/webpack/webpack.web.config.js +0 -1
- package/worker.d.ts +0 -1
- package/worker.js +0 -2
- package/worker.mjs +0 -1
- /package/{dist-esm → dist/esm}/serializers.js +0 -0
- /package/{dist-esm → dist/esm}/symbols.js +0 -0
- /package/{dist-esm → dist/esm}/types/worker.js +0 -0
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ObservablePromise = void 0;
|
|
4
|
-
/* eslint-disable unicorn/no-thenable */
|
|
5
|
-
/* eslint-disable @typescript-eslint/member-ordering */
|
|
6
|
-
/* eslint-disable @typescript-eslint/no-floating-promises */
|
|
7
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
8
|
-
/* eslint-disable @typescript-eslint/no-this-alias */
|
|
9
|
-
/* eslint-disable unicorn/no-this-assignment */
|
|
10
4
|
const observable_fns_1 = require("observable-fns");
|
|
11
5
|
const doNothing = () => { };
|
|
12
6
|
const returnInput = (input) => input;
|
|
@@ -17,19 +11,6 @@ function fail(error) {
|
|
|
17
11
|
function isThenable(thing) {
|
|
18
12
|
return thing && typeof thing.then === 'function';
|
|
19
13
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Creates a hybrid, combining the APIs of an Observable and a Promise.
|
|
22
|
-
*
|
|
23
|
-
* It is used to proxy async process states when we are initially not sure
|
|
24
|
-
* if that async process will yield values once (-> Promise) or multiple
|
|
25
|
-
* times (-> Observable).
|
|
26
|
-
*
|
|
27
|
-
* Note that the observable promise inherits some of the observable's characteristics:
|
|
28
|
-
* The `init` function will be called *once for every time anyone subscribes to it*.
|
|
29
|
-
*
|
|
30
|
-
* If this is undesired, derive a hot observable from it using `makeHot()` and
|
|
31
|
-
* subscribe to that.
|
|
32
|
-
*/
|
|
33
14
|
class ObservablePromise extends observable_fns_1.Observable {
|
|
34
15
|
[Symbol.toStringTag] = '[object ObservablePromise]';
|
|
35
16
|
initHasRun = false;
|
|
@@ -41,7 +22,6 @@ class ObservablePromise extends observable_fns_1.Observable {
|
|
|
41
22
|
state = 'pending';
|
|
42
23
|
constructor(init) {
|
|
43
24
|
super((originalObserver) => {
|
|
44
|
-
// tslint:disable-next-line no-this-assignment
|
|
45
25
|
const self = this;
|
|
46
26
|
const observer = {
|
|
47
27
|
...originalObserver,
|
|
@@ -77,16 +57,12 @@ class ObservablePromise extends observable_fns_1.Observable {
|
|
|
77
57
|
this.state = 'rejected';
|
|
78
58
|
this.rejection = error;
|
|
79
59
|
for (const onRejected of this.rejectionCallbacks) {
|
|
80
|
-
// Promisifying the call to turn errors into unhandled promise rejections
|
|
81
|
-
// instead of them failing sync and cancelling the iteration
|
|
82
60
|
runDeferred(() => onRejected(error));
|
|
83
61
|
}
|
|
84
62
|
}
|
|
85
63
|
onCompletion() {
|
|
86
64
|
this.state = 'fulfilled';
|
|
87
65
|
for (const onFulfilled of this.fulfillmentCallbacks) {
|
|
88
|
-
// Promisifying the call to turn errors into unhandled promise rejections
|
|
89
|
-
// instead of them failing sync and cancelling the iteration
|
|
90
66
|
runDeferred(() => onFulfilled(this.firstValue));
|
|
91
67
|
}
|
|
92
68
|
}
|
package/dist/observable.d.ts
CHANGED
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
import { Observable, ObservableLike } from 'observable-fns';
|
|
2
2
|
declare const $observers: unique symbol;
|
|
3
|
-
/**
|
|
4
|
-
* Observable subject. Implements the Observable interface, but also exposes
|
|
5
|
-
* the `next()`, `error()`, `complete()` methods to initiate observable
|
|
6
|
-
* updates "from the outside".
|
|
7
|
-
*
|
|
8
|
-
* Use `Observable.from(subject)` to derive an observable that proxies all
|
|
9
|
-
* values, errors and the completion raised on this subject, but does not
|
|
10
|
-
* expose the `next()`, `error()`, `complete()` methods.
|
|
11
|
-
*/
|
|
12
3
|
export declare class Subject<T> extends Observable<T> implements ObservableLike<T> {
|
|
13
4
|
private [$observers];
|
|
14
5
|
constructor();
|
package/dist/observable.js
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Observable = exports.Subject = void 0;
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
4
|
const observable_fns_1 = require("observable-fns");
|
|
6
5
|
const $observers = Symbol('observers');
|
|
7
|
-
/**
|
|
8
|
-
* Observable subject. Implements the Observable interface, but also exposes
|
|
9
|
-
* the `next()`, `error()`, `complete()` methods to initiate observable
|
|
10
|
-
* updates "from the outside".
|
|
11
|
-
*
|
|
12
|
-
* Use `Observable.from(subject)` to derive an observable that proxies all
|
|
13
|
-
* values, errors and the completion raised on this subject, but does not
|
|
14
|
-
* expose the `next()`, `error()`, `complete()` methods.
|
|
15
|
-
*/
|
|
16
6
|
class Subject extends observable_fns_1.Observable {
|
|
17
7
|
[$observers];
|
|
18
8
|
constructor() {
|
package/dist/ponyfills.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.allSettled =
|
|
4
|
-
// Based on <https://github.com/es-shims/Promise.allSettled/blob/master/implementation.js>
|
|
3
|
+
exports.allSettled = allSettled;
|
|
5
4
|
function allSettled(values) {
|
|
6
5
|
return Promise.all(values.map((item) => {
|
|
7
6
|
const onFulfill = (value) => {
|
|
@@ -19,4 +18,3 @@ function allSettled(values) {
|
|
|
19
18
|
}
|
|
20
19
|
}));
|
|
21
20
|
}
|
|
22
|
-
exports.allSettled = allSettled;
|
package/dist/promise.d.ts
CHANGED
package/dist/promise.js
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createPromiseWithResolver =
|
|
4
|
-
// eslint-disable-next-line unicorn/no-useless-undefined
|
|
3
|
+
exports.createPromiseWithResolver = createPromiseWithResolver;
|
|
5
4
|
const doNothing = () => undefined;
|
|
6
|
-
/**
|
|
7
|
-
* Creates a new promise and exposes its resolver function.
|
|
8
|
-
* Use with care!
|
|
9
|
-
*/
|
|
10
5
|
function createPromiseWithResolver() {
|
|
11
6
|
let alreadyResolved = false;
|
|
12
7
|
let resolvedTo;
|
|
@@ -26,4 +21,3 @@ function createPromiseWithResolver() {
|
|
|
26
21
|
};
|
|
27
22
|
return [promise, exposedResolver];
|
|
28
23
|
}
|
|
29
|
-
exports.createPromiseWithResolver = createPromiseWithResolver;
|
package/dist/serializers.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DefaultSerializer =
|
|
3
|
+
exports.DefaultSerializer = void 0;
|
|
4
|
+
exports.extendSerializer = extendSerializer;
|
|
4
5
|
function extendSerializer(extend, implementation) {
|
|
5
6
|
const fallbackDeserializer = extend.deserialize.bind(extend);
|
|
6
7
|
const fallbackSerializer = extend.serialize.bind(extend);
|
|
@@ -13,7 +14,6 @@ function extendSerializer(extend, implementation) {
|
|
|
13
14
|
},
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
|
-
exports.extendSerializer = extendSerializer;
|
|
17
17
|
const DefaultErrorSerializer = {
|
|
18
18
|
deserialize(message) {
|
|
19
19
|
return Object.assign(new Error(message.message), {
|
package/dist/transferable.d.ts
CHANGED
|
@@ -5,38 +5,5 @@ export interface TransferDescriptor<T = any> {
|
|
|
5
5
|
transferables: Transferable[];
|
|
6
6
|
}
|
|
7
7
|
export declare function isTransferDescriptor(thing: any): thing is TransferDescriptor;
|
|
8
|
-
/**
|
|
9
|
-
* Mark a transferable object as such, so it will no be serialized and
|
|
10
|
-
* deserialized on messaging with the main thread, but to transfer
|
|
11
|
-
* ownership of it to the receiving thread.
|
|
12
|
-
*
|
|
13
|
-
* Only works with array buffers, message ports and few more special
|
|
14
|
-
* types of objects, but it's much faster than serializing and
|
|
15
|
-
* deserializing them.
|
|
16
|
-
*
|
|
17
|
-
* Note:
|
|
18
|
-
* The transferable object cannot be accessed by this thread again
|
|
19
|
-
* unless the receiving thread transfers it back again!
|
|
20
|
-
*
|
|
21
|
-
* @param transferable Array buffer, message port or similar.
|
|
22
|
-
* @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>
|
|
23
|
-
*/
|
|
24
8
|
export declare function Transfer(transferable: Transferable): TransferDescriptor;
|
|
25
|
-
/**
|
|
26
|
-
* Mark transferable objects within an arbitrary object or array as
|
|
27
|
-
* being a transferable object. They will then not be serialized
|
|
28
|
-
* and deserialized on messaging with the main thread, but ownership
|
|
29
|
-
* of them will be tranferred to the receiving thread.
|
|
30
|
-
*
|
|
31
|
-
* Only array buffers, message ports and few more special types of
|
|
32
|
-
* objects can be transferred, but it's much faster than serializing and
|
|
33
|
-
* deserializing them.
|
|
34
|
-
*
|
|
35
|
-
* Note:
|
|
36
|
-
* The transferable object cannot be accessed by this thread again
|
|
37
|
-
* unless the receiving thread transfers it back again!
|
|
38
|
-
*
|
|
39
|
-
* @param transferable Array buffer, message port or similar.
|
|
40
|
-
* @see <https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast>
|
|
41
|
-
*/
|
|
42
9
|
export declare function Transfer<T>(payload: T, transferables: Transferable[]): TransferDescriptor;
|
package/dist/transferable.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
3
|
+
exports.isTransferDescriptor = isTransferDescriptor;
|
|
4
|
+
exports.Transfer = Transfer;
|
|
5
5
|
const symbols_1 = require("./symbols");
|
|
6
6
|
function isTransferable(thing) {
|
|
7
7
|
if (!thing || typeof thing !== 'object')
|
|
8
8
|
return false;
|
|
9
|
-
// Don't check too thoroughly, since the list of transferable things in JS might grow over time
|
|
10
9
|
return true;
|
|
11
10
|
}
|
|
12
11
|
function isTransferDescriptor(thing) {
|
|
13
12
|
return thing && typeof thing === 'object' && thing[symbols_1.$transferable];
|
|
14
13
|
}
|
|
15
|
-
exports.isTransferDescriptor = isTransferDescriptor;
|
|
16
14
|
function Transfer(payload, transferables) {
|
|
17
15
|
if (!transferables) {
|
|
18
16
|
if (!isTransferable(payload))
|
|
@@ -25,4 +23,3 @@ function Transfer(payload, transferables) {
|
|
|
25
23
|
transferables,
|
|
26
24
|
};
|
|
27
25
|
}
|
|
28
|
-
exports.Transfer = Transfer;
|
package/dist/types/master.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference lib="dom" />
|
|
2
1
|
import { Observable } from 'observable-fns';
|
|
3
2
|
import { ObservablePromise } from '../observable-promise';
|
|
4
3
|
import { $errors, $events, $terminate, $worker } from '../symbols';
|
|
@@ -37,39 +36,27 @@ interface AnyFunctionThread extends PrivateThreadProps {
|
|
|
37
36
|
}
|
|
38
37
|
interface AnyModuleThread extends PrivateThreadProps {
|
|
39
38
|
}
|
|
40
|
-
/** Worker thread. Either a `FunctionThread` or a `ModuleThread`. */
|
|
41
39
|
export type Thread = AnyFunctionThread | AnyModuleThread;
|
|
42
40
|
export type TransferList = Transferable[];
|
|
43
|
-
/** Worker instance. Either a web worker or a node.js Worker provided by `worker_threads` or `tiny-worker`. */
|
|
44
41
|
export interface Worker extends EventTarget {
|
|
45
42
|
postMessage(value: any, transferList?: TransferList): void;
|
|
46
|
-
/** In nodejs 10+ return type is Promise while with tiny-worker and in browser return type is void */
|
|
47
43
|
terminate(callback?: (error?: Error, exitCode?: number) => void): void | Promise<number>;
|
|
48
44
|
}
|
|
49
45
|
export interface ThreadsWorkerOptions extends WorkerOptions {
|
|
50
|
-
/** Whether to apply CORS protection workaround. Defaults to true. */
|
|
51
46
|
CORSWorkaround?: boolean;
|
|
52
|
-
/** Prefix for the path passed to the Worker constructor. Web worker only. */
|
|
53
47
|
_baseURL?: string;
|
|
54
|
-
/** Resource limits passed on to Node worker_threads */
|
|
55
48
|
resourceLimits?: {
|
|
56
|
-
/** The size of a pre-allocated memory range used for generated code. */
|
|
57
49
|
codeRangeSizeMb?: number;
|
|
58
|
-
/** The maximum size of the main heap in MB. */
|
|
59
50
|
maxOldGenerationSizeMb?: number;
|
|
60
|
-
/** The maximum size of a heap space for recently created objects. */
|
|
61
51
|
maxYoungGenerationSizeMb?: number;
|
|
62
52
|
};
|
|
63
|
-
/** Data passed on to node.js worker_threads. */
|
|
64
53
|
workerData?: any;
|
|
65
54
|
}
|
|
66
|
-
/** Worker implementation. Either web worker or a node.js Worker class. */
|
|
67
55
|
export declare class WorkerImplementation extends EventTarget implements Worker {
|
|
68
56
|
constructor(path: string, options?: ThreadsWorkerOptions);
|
|
69
57
|
postMessage(value: any, transferList?: TransferList): void;
|
|
70
58
|
terminate(): void | Promise<number>;
|
|
71
59
|
}
|
|
72
|
-
/** Class to spawn workers from a blob or source string. */
|
|
73
60
|
export declare class BlobWorker extends WorkerImplementation {
|
|
74
61
|
constructor(blob: Blob, options?: ThreadsWorkerOptions);
|
|
75
62
|
static fromText(source: string, options?: ThreadsWorkerOptions): WorkerImplementation;
|
|
@@ -78,7 +65,6 @@ export interface ImplementationExport {
|
|
|
78
65
|
blob: typeof BlobWorker;
|
|
79
66
|
default: typeof WorkerImplementation;
|
|
80
67
|
}
|
|
81
|
-
/** Event as emitted by worker thread. Subscribe to using `Thread.events(thread)`. */
|
|
82
68
|
export declare enum WorkerEventType {
|
|
83
69
|
internalError = "internalError",
|
|
84
70
|
message = "message",
|
package/dist/types/master.js
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
/// <reference lib="dom" />
|
|
4
|
-
// tslint:disable max-classes-per-file
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.WorkerEventType = void 0;
|
|
7
4
|
const symbols_1 = require("../symbols");
|
|
8
|
-
/** Event as emitted by worker thread. Subscribe to using `Thread.events(thread)`. */
|
|
9
5
|
var WorkerEventType;
|
|
10
6
|
(function (WorkerEventType) {
|
|
11
7
|
WorkerEventType["internalError"] = "internalError";
|
package/dist/types/messages.js
CHANGED
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkerMessageType = exports.MasterMessageType = void 0;
|
|
4
|
-
/////////////////////////////
|
|
5
|
-
// Messages sent by master:
|
|
6
4
|
var MasterMessageType;
|
|
7
5
|
(function (MasterMessageType) {
|
|
8
6
|
MasterMessageType["cancel"] = "cancel";
|
|
9
7
|
MasterMessageType["run"] = "run";
|
|
10
8
|
})(MasterMessageType || (exports.MasterMessageType = MasterMessageType = {}));
|
|
11
|
-
////////////////////////////
|
|
12
|
-
// Messages sent by worker:
|
|
13
9
|
var WorkerMessageType;
|
|
14
10
|
(function (WorkerMessageType) {
|
|
15
11
|
WorkerMessageType["error"] = "error";
|
|
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
18
17
|
const index_1 = require("./index");
|
|
19
18
|
__exportStar(require("./index"), exports);
|
|
20
19
|
if (typeof global !== 'undefined') {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
/// <reference lib="dom" />
|
|
2
1
|
declare const _default: {
|
|
3
2
|
isWorkerRuntime: () => boolean;
|
|
4
|
-
postMessageToMaster: (message: any, transferList?: Transferable[]
|
|
3
|
+
postMessageToMaster: (message: any, transferList?: Transferable[]) => void;
|
|
5
4
|
subscribeToMasterMessages: (onMessage: (data: any) => void) => () => void;
|
|
6
5
|
};
|
|
7
6
|
export default _default;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* eslint-disable import/no-default-export */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
-
/// <reference lib="dom" />
|
|
5
|
-
// tslint:disable no-shadowed-variable
|
|
6
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
3
|
const isWorkerRuntime = function isWorkerRuntime() {
|
|
8
4
|
const isWindowContext = self !== undefined && typeof Window !== 'undefined' && self instanceof Window;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* eslint-disable import/no-default-export */
|
|
3
|
-
// tslint:disable no-var-requires
|
|
4
|
-
/*
|
|
5
|
-
* This file is only a stub to make './implementation' resolve to the right module.
|
|
6
|
-
*/
|
|
7
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
4
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
/// <reference lib="dom" />
|
|
2
1
|
declare const _default: {
|
|
3
2
|
isWorkerRuntime: () => boolean;
|
|
4
|
-
postMessageToMaster: (message: any, transferList?: Transferable[]
|
|
3
|
+
postMessageToMaster: (message: any, transferList?: Transferable[]) => void;
|
|
5
4
|
subscribeToMasterMessages: (onMessage: (data: any) => void) => () => void;
|
|
6
5
|
};
|
|
7
6
|
export default _default;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* eslint-disable import/no-default-export */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
-
/// <reference lib="dom" />
|
|
5
|
-
// tslint:disable no-shadowed-variable
|
|
6
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
3
|
try {
|
|
8
4
|
if (self === undefined) {
|
|
@@ -18,15 +14,12 @@ const isWorkerRuntime = function isWorkerRuntime() {
|
|
|
18
14
|
return self !== undefined && self['postMessage'] ? true : false;
|
|
19
15
|
};
|
|
20
16
|
const postMessageToMaster = function postMessageToMaster(data) {
|
|
21
|
-
// TODO: Warn that Transferables are not supported on first attempt to use feature
|
|
22
17
|
self.postMessage(data);
|
|
23
18
|
};
|
|
24
19
|
let muxingHandlerSetUp = false;
|
|
25
20
|
const messageHandlers = new Set();
|
|
26
21
|
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) {
|
|
27
22
|
if (!muxingHandlerSetUp) {
|
|
28
|
-
// We have one multiplexing message handler as tiny-worker's
|
|
29
|
-
// addEventListener() only allows you to set a single message handler
|
|
30
23
|
self.addEventListener('message', ((event) => {
|
|
31
24
|
for (const handler of messageHandlers)
|
|
32
25
|
handler(event.data);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
declare function testImplementation(): void;
|
|
2
2
|
declare const _default: {
|
|
3
3
|
isWorkerRuntime: () => boolean;
|
|
4
|
-
postMessageToMaster: (message: any, transferList?: Transferable[]
|
|
4
|
+
postMessageToMaster: (message: any, transferList?: Transferable[]) => void;
|
|
5
5
|
subscribeToMasterMessages: (onMessage: (data: any) => void) => () => void;
|
|
6
6
|
testImplementation: typeof testImplementation;
|
|
7
7
|
};
|
|
@@ -31,7 +31,6 @@ const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage)
|
|
|
31
31
|
return unsubscribe;
|
|
32
32
|
};
|
|
33
33
|
function testImplementation() {
|
|
34
|
-
// Will throw if `worker_threads` are not available
|
|
35
34
|
(0, worker_threads_1.default)();
|
|
36
35
|
}
|
|
37
36
|
exports.default = {
|
package/dist/worker/index.d.ts
CHANGED
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { WorkerFunction, WorkerModule } from '../types/worker';
|
|
2
2
|
export { registerSerializer } from '../common';
|
|
3
3
|
export { Transfer } from '../transferable';
|
|
4
|
-
/** Returns `true` if this code is currently running in a worker. */
|
|
5
4
|
export declare const isWorkerRuntime: () => boolean;
|
|
6
|
-
/**
|
|
7
|
-
* Expose a function or a module (an object whose values are functions)
|
|
8
|
-
* to the main thread. Must be called exactly once in every worker thread
|
|
9
|
-
* to signal its API to the main thread.
|
|
10
|
-
*
|
|
11
|
-
* @param exposed Function or object whose values are functions
|
|
12
|
-
*/
|
|
13
5
|
export declare function expose(exposed: WorkerFunction | WorkerModule<any>): void;
|
package/dist/worker/index.js
CHANGED
|
@@ -3,9 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
|
+
exports.isWorkerRuntime = exports.Transfer = exports.registerSerializer = void 0;
|
|
7
|
+
exports.expose = expose;
|
|
9
8
|
const is_observable_2_1_0_1 = __importDefault(require("is-observable-2-1-0"));
|
|
10
9
|
const common_1 = require("../common");
|
|
11
10
|
const transferable_1 = require("../transferable");
|
|
@@ -15,16 +14,11 @@ var common_2 = require("../common");
|
|
|
15
14
|
Object.defineProperty(exports, "registerSerializer", { enumerable: true, get: function () { return common_2.registerSerializer; } });
|
|
16
15
|
var transferable_2 = require("../transferable");
|
|
17
16
|
Object.defineProperty(exports, "Transfer", { enumerable: true, get: function () { return transferable_2.Transfer; } });
|
|
18
|
-
/** Returns `true` if this code is currently running in a worker. */
|
|
19
17
|
exports.isWorkerRuntime = implementation_1.default.isWorkerRuntime;
|
|
20
18
|
let exposeCalled = false;
|
|
21
19
|
const activeSubscriptions = new Map();
|
|
22
20
|
const isMasterJobCancelMessage = (thing) => thing && thing.type === messages_1.MasterMessageType.cancel;
|
|
23
21
|
const isMasterJobRunMessage = (thing) => thing && thing.type === messages_1.MasterMessageType.run;
|
|
24
|
-
/**
|
|
25
|
-
* There are issues with `is-observable` not recognizing zen-observable's instances.
|
|
26
|
-
* We are using `observable-fns`, but it's based on zen-observable, too.
|
|
27
|
-
*/
|
|
28
22
|
const isObservable = (thing) => (0, is_observable_2_1_0_1.default)(thing) || isZenObservable(thing);
|
|
29
23
|
function isZenObservable(thing) {
|
|
30
24
|
return thing && typeof thing === 'object' && typeof thing.subscribe === 'function';
|
|
@@ -87,7 +81,6 @@ function postUncaughtErrorMessage(error) {
|
|
|
87
81
|
implementation_1.default.postMessageToMaster(errorMessage);
|
|
88
82
|
}
|
|
89
83
|
catch (subError) {
|
|
90
|
-
// tslint:disable-next-line no-console
|
|
91
84
|
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);
|
|
92
85
|
}
|
|
93
86
|
}
|
|
@@ -121,13 +114,6 @@ async function runFunction(jobUID, fn, args) {
|
|
|
121
114
|
}
|
|
122
115
|
}
|
|
123
116
|
}
|
|
124
|
-
/**
|
|
125
|
-
* Expose a function or a module (an object whose values are functions)
|
|
126
|
-
* to the main thread. Must be called exactly once in every worker thread
|
|
127
|
-
* to signal its API to the main thread.
|
|
128
|
-
*
|
|
129
|
-
* @param exposed Function or object whose values are functions
|
|
130
|
-
*/
|
|
131
117
|
function expose(exposed) {
|
|
132
118
|
if (!implementation_1.default.isWorkerRuntime()) {
|
|
133
119
|
throw new Error('expose() called in the master thread.');
|
|
@@ -167,28 +153,23 @@ function expose(exposed) {
|
|
|
167
153
|
}
|
|
168
154
|
});
|
|
169
155
|
}
|
|
170
|
-
exports.expose = expose;
|
|
171
156
|
if (typeof self !== 'undefined' && typeof self.addEventListener === 'function' && implementation_1.default.isWorkerRuntime()) {
|
|
172
157
|
self.addEventListener('error', (event) => {
|
|
173
|
-
// Post with some delay, so the master had some time to subscribe to messages
|
|
174
158
|
setTimeout(() => postUncaughtErrorMessage(event.error || event), 250);
|
|
175
159
|
});
|
|
176
160
|
self.addEventListener('unhandledrejection', (event) => {
|
|
177
161
|
const error = event.reason;
|
|
178
162
|
if (error && typeof error.message === 'string') {
|
|
179
|
-
// Post with some delay, so the master had some time to subscribe to messages
|
|
180
163
|
setTimeout(() => postUncaughtErrorMessage(error), 250);
|
|
181
164
|
}
|
|
182
165
|
});
|
|
183
166
|
}
|
|
184
167
|
if (typeof process !== 'undefined' && typeof process.on === 'function' && implementation_1.default.isWorkerRuntime()) {
|
|
185
168
|
process.on('uncaughtException', (error) => {
|
|
186
|
-
// Post with some delay, so the master had some time to subscribe to messages
|
|
187
169
|
setTimeout(() => postUncaughtErrorMessage(error), 250);
|
|
188
170
|
});
|
|
189
171
|
process.on('unhandledRejection', (error) => {
|
|
190
172
|
if (error && typeof error.message === 'string') {
|
|
191
|
-
// Post with some delay, so the master had some time to subscribe to messages
|
|
192
173
|
setTimeout(() => postUncaughtErrorMessage(error), 250);
|
|
193
174
|
}
|
|
194
175
|
});
|
package/dist/worker_threads.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* eslint-disable import/no-default-export */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
-
// Webpack hack
|
|
5
|
-
// tslint:disable no-eval
|
|
6
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = getImplementation;
|
|
7
4
|
let implementation;
|
|
8
5
|
function selectImplementation() {
|
|
9
6
|
return typeof __non_webpack_require__ === 'function' ? __non_webpack_require__('worker_threads') : eval('require')('worker_threads');
|
|
@@ -14,4 +11,3 @@ function getImplementation() {
|
|
|
14
11
|
}
|
|
15
12
|
return implementation;
|
|
16
13
|
}
|
|
17
|
-
exports.default = getImplementation;
|
package/index.mjs
CHANGED
package/observable.d.ts
CHANGED
package/observable.js
CHANGED
package/observable.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xylabs/threads",
|
|
3
|
-
"version": "3.5.
|
|
3
|
+
"version": "3.5.2",
|
|
4
4
|
"description": "Web workers & worker threads as simple as a function call",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
|
-
"module": "dist
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"package-compile": "yarn build",
|
|
10
10
|
"clean": "rimraf dist/ dist-esm/",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"build:cjs": "tsc -p tsconfig.json",
|
|
14
14
|
"build:es": "tsc -p tsconfig-esm.json",
|
|
15
15
|
"postbuild": "npm run bundle",
|
|
16
|
-
"bundle": "rollup -c -f umd --file=bundle/worker.js --name=threads --silent -- dist
|
|
16
|
+
"bundle": "rollup -c -f umd --file=bundle/worker.js --name=threads --silent -- dist/esm/worker/bundle-entry.js",
|
|
17
17
|
"test": "npm run test:library && npm run test:tooling && npm run test:puppeteer:basic && npm run test:puppeteer:webpack",
|
|
18
18
|
"test:library": "cross-env TS_NODE_FILES=true ava ./test/**/*.test.ts",
|
|
19
19
|
"test:tooling": "cross-env TS_NODE_FILES=true ava ./test-tooling/**/*.test.ts",
|
|
@@ -66,25 +66,25 @@
|
|
|
66
66
|
"worker_threads"
|
|
67
67
|
],
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@babel/types": "^7.24.
|
|
69
|
+
"@babel/types": "^7.24.7",
|
|
70
70
|
"callsites-3-1-0": "npm:callsites@3.1.0",
|
|
71
|
-
"debug": "^4.3.
|
|
71
|
+
"debug": "^4.3.5",
|
|
72
72
|
"is-observable-2-1-0": "npm:is-observable@2.1.0",
|
|
73
73
|
"observable-fns": "^0.6.1"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
|
-
"@rollup/plugin-commonjs": "^
|
|
76
|
+
"@rollup/plugin-commonjs": "^26.0.1",
|
|
77
77
|
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
78
78
|
"@types/chai": "^4.3.16",
|
|
79
79
|
"@types/debug": "^4.1.12",
|
|
80
80
|
"@types/execa": "^2.0.0",
|
|
81
|
-
"@types/node": "^20.
|
|
81
|
+
"@types/node": "^20.14.8",
|
|
82
82
|
"@types/webpack": "^5.28.5",
|
|
83
83
|
"ava": "^6.1.3",
|
|
84
84
|
"chai": "^5.1.1",
|
|
85
85
|
"cross-env": "^7.0.3",
|
|
86
|
-
"execa": "^9.
|
|
87
|
-
"mocha": "^10.
|
|
86
|
+
"execa": "^9.3.0",
|
|
87
|
+
"mocha": "^10.5.1",
|
|
88
88
|
"puppet-run": "^0.11.4",
|
|
89
89
|
"puppet-run-plugin-mocha": "^0.1.1",
|
|
90
90
|
"raw-loader": "^4.0.2",
|
|
@@ -94,9 +94,9 @@
|
|
|
94
94
|
"tiny-worker": "^2.3.0",
|
|
95
95
|
"ts-loader": "^9.5.1",
|
|
96
96
|
"ts-node": "^10.9.2",
|
|
97
|
-
"typescript": "^5.
|
|
97
|
+
"typescript": "^5.5.2",
|
|
98
98
|
"wavy": "^1.0.4",
|
|
99
|
-
"webpack": "^5.
|
|
99
|
+
"webpack": "^5.92.1",
|
|
100
100
|
"worker-plugin": "^5.0.1"
|
|
101
101
|
},
|
|
102
102
|
"optionalDependencies": {
|
|
@@ -116,11 +116,11 @@
|
|
|
116
116
|
"serial": true
|
|
117
117
|
},
|
|
118
118
|
"browser": {
|
|
119
|
-
"./dist
|
|
120
|
-
"./dist
|
|
121
|
-
"./dist
|
|
122
|
-
"./dist
|
|
123
|
-
"./dist
|
|
119
|
+
"./dist/esm/master/implementation.js": "./dist/esm/master/implementation.browser.js",
|
|
120
|
+
"./dist/esm/master/implementation.node.js": false,
|
|
121
|
+
"./dist/esm/worker/implementation.js": "./dist/esm/worker/implementation.browser.js",
|
|
122
|
+
"./dist/esm/worker/implementation.tiny-worker.js": false,
|
|
123
|
+
"./dist/esm/worker/implementation.worker_threads.js": false,
|
|
124
124
|
"./dist/master/implementation.js": "./dist/master/implementation.browser.js",
|
|
125
125
|
"./dist/master/implementation.node.js": false,
|
|
126
126
|
"./dist/worker/implementation.js": "./dist/worker/implementation.browser.js",
|
|
@@ -137,7 +137,6 @@
|
|
|
137
137
|
},
|
|
138
138
|
"files": [
|
|
139
139
|
"dist/**",
|
|
140
|
-
"dist-esm/**",
|
|
141
140
|
"*.js",
|
|
142
141
|
"*.mjs",
|
|
143
142
|
"*.ts"
|
package/register.d.ts
CHANGED
package/register.js
CHANGED
package/register.mjs
CHANGED
package/rollup.config.js
CHANGED
package/src/index.ts
CHANGED