@xylabs/threads 4.12.44 → 4.13.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.
- package/dist/browser/common-Cuiya5FG.d.ts +21 -0
- package/dist/browser/index-browser-B8TCfn7g.d.ts +20 -0
- package/dist/browser/index-browser.d.ts +8 -0
- package/dist/browser/index-browser.mjs +209 -119
- package/dist/browser/index-browser.mjs.map +1 -1
- package/dist/browser/master/implementation.browser.d.ts +9 -0
- package/dist/browser/master/implementation.browser.mjs +36 -11
- package/dist/browser/master/implementation.browser.mjs.map +1 -1
- package/dist/browser/master/index-browser.d.ts +7 -0
- package/dist/browser/master/index-browser.mjs +201 -117
- package/dist/browser/master/index-browser.mjs.map +1 -1
- package/dist/browser/master/pool-browser.d.ts +104 -0
- package/dist/browser/master/pool-browser.mjs +65 -53
- package/dist/browser/master/pool-browser.mjs.map +1 -1
- package/dist/browser/master-D4MAqspp.d.ts +109 -0
- package/dist/browser/transferable-Cv9t618f.d.ts +15 -0
- package/dist/{types → browser}/worker/worker.browser.d.ts +8 -8
- package/dist/browser/worker/worker.browser.mjs +79 -43
- package/dist/browser/worker/worker.browser.mjs.map +1 -1
- package/dist/{types/types/worker.d.ts → browser/worker-04t9iwDh.d.ts} +5 -5
- package/dist/neutral/master/register.d.ts +2 -0
- package/dist/neutral/master/register.mjs +223 -33
- package/dist/neutral/master/register.mjs.map +1 -1
- package/dist/neutral/master/spawn.d.ts +19 -0
- package/dist/neutral/master/spawn.mjs +106 -53
- package/dist/neutral/master/spawn.mjs.map +1 -1
- package/dist/neutral/master/thread.d.ts +12 -0
- package/dist/neutral/master/thread.mjs +4 -0
- package/dist/neutral/master/thread.mjs.map +1 -1
- package/dist/neutral/master-DDdg1BKb.d.ts +74 -0
- package/dist/{types → neutral}/observable-promise.d.ts +5 -18
- package/dist/neutral/observable-promise.mjs +27 -20
- package/dist/neutral/observable-promise.mjs.map +1 -1
- package/dist/neutral/observable.d.ts +13 -0
- package/dist/neutral/observable.mjs +12 -3
- package/dist/neutral/observable.mjs.map +1 -1
- package/dist/{types → neutral}/types/messages.d.ts +12 -11
- package/dist/neutral/types/messages.mjs +19 -0
- package/dist/neutral/types/messages.mjs.map +1 -0
- package/dist/node/common-Cuiya5FG.d.ts +21 -0
- package/dist/node/index-node-DB1sNl0d.d.ts +66 -0
- package/dist/node/index-node.d.ts +8 -0
- package/dist/node/index-node.mjs +396 -141
- package/dist/node/index-node.mjs.map +1 -1
- package/dist/node/master/implementation.node.d.ts +9 -0
- package/dist/node/master/implementation.node.mjs +223 -33
- package/dist/node/master/implementation.node.mjs.map +1 -1
- package/dist/node/master/index-node.d.ts +7 -0
- package/dist/node/master/index-node.mjs +388 -139
- package/dist/node/master/index-node.mjs.map +1 -1
- package/dist/node/master/pool-node.d.ts +51 -0
- package/dist/node/master/pool-node.mjs +285 -86
- package/dist/node/master/pool-node.mjs.map +1 -1
- package/dist/node/master-BjjSaJAj.d.ts +109 -0
- package/dist/{types/master/pool-types.d.ts → node/pool-types-Bzei07Nj.d.ts} +16 -24
- package/dist/node/transferable-Cv9t618f.d.ts +15 -0
- package/dist/{types → node}/worker/worker.node.d.ts +11 -10
- package/dist/node/worker/worker.node.mjs +80 -43
- package/dist/node/worker/worker.node.mjs.map +1 -1
- package/dist/node/worker-04t9iwDh.d.ts +12 -0
- package/package.json +29 -22
- package/src/master/invocation-proxy.ts +2 -0
- package/src/transferable.ts +2 -0
- package/src/types/worker.ts +1 -0
- package/src/worker/WorkerGlobalScope.ts +1 -0
- package/src/worker/worker.browser.ts +1 -1
- package/dist/types/common.d.ts +0 -8
- package/dist/types/common.d.ts.map +0 -1
- package/dist/types/index-browser.d.ts +0 -9
- package/dist/types/index-browser.d.ts.map +0 -1
- package/dist/types/index-node.d.ts +0 -9
- package/dist/types/index-node.d.ts.map +0 -1
- package/dist/types/master/get-bundle-url.browser.d.ts +0 -3
- package/dist/types/master/get-bundle-url.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.browser.d.ts +0 -5
- package/dist/types/master/implementation.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.node.d.ts +0 -5
- package/dist/types/master/implementation.node.d.ts.map +0 -1
- package/dist/types/master/index-browser.d.ts +0 -13
- package/dist/types/master/index-browser.d.ts.map +0 -1
- package/dist/types/master/index-node.d.ts +0 -13
- package/dist/types/master/index-node.d.ts.map +0 -1
- package/dist/types/master/invocation-proxy.d.ts +0 -4
- package/dist/types/master/invocation-proxy.d.ts.map +0 -1
- package/dist/types/master/pool-browser.d.ts +0 -93
- package/dist/types/master/pool-browser.d.ts.map +0 -1
- package/dist/types/master/pool-node.d.ts +0 -93
- package/dist/types/master/pool-node.d.ts.map +0 -1
- package/dist/types/master/pool-types.d.ts.map +0 -1
- package/dist/types/master/register.d.ts +0 -2
- package/dist/types/master/register.d.ts.map +0 -1
- package/dist/types/master/spawn.d.ts +0 -21
- package/dist/types/master/spawn.d.ts.map +0 -1
- package/dist/types/master/thread.d.ts +0 -13
- package/dist/types/master/thread.d.ts.map +0 -1
- package/dist/types/observable-promise.d.ts.map +0 -1
- package/dist/types/observable.d.ts +0 -21
- package/dist/types/observable.d.ts.map +0 -1
- package/dist/types/promise.d.ts +0 -6
- package/dist/types/promise.d.ts.map +0 -1
- package/dist/types/serializers.d.ts +0 -17
- package/dist/types/serializers.d.ts.map +0 -1
- package/dist/types/symbols.d.ts +0 -6
- package/dist/types/symbols.d.ts.map +0 -1
- package/dist/types/transferable.d.ts +0 -43
- package/dist/types/transferable.d.ts.map +0 -1
- package/dist/types/types/master.d.ts +0 -99
- package/dist/types/types/master.d.ts.map +0 -1
- package/dist/types/types/messages.d.ts.map +0 -1
- package/dist/types/types/worker.d.ts.map +0 -1
- package/dist/types/worker/WorkerGlobalScope.d.ts +0 -6
- package/dist/types/worker/WorkerGlobalScope.d.ts.map +0 -1
- package/dist/types/worker/expose.d.ts +0 -4
- package/dist/types/worker/expose.d.ts.map +0 -1
- package/dist/types/worker/worker.browser.d.ts.map +0 -1
- package/dist/types/worker/worker.node.d.ts.map +0 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Observable } from 'observable-fns';
|
|
2
|
+
import { ObservablePromise } from './observable-promise.js';
|
|
3
|
+
|
|
4
|
+
declare const $errors: unique symbol;
|
|
5
|
+
declare const $events: unique symbol;
|
|
6
|
+
declare const $terminate: unique symbol;
|
|
7
|
+
declare const $transferable: unique symbol;
|
|
8
|
+
declare const $worker: unique symbol;
|
|
9
|
+
|
|
10
|
+
interface TransferDescriptor<T = any> {
|
|
11
|
+
[$transferable]: true;
|
|
12
|
+
send: T;
|
|
13
|
+
transferables: Transferable[];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface ObservableLikeSubscription {
|
|
17
|
+
unsubscribe(): any;
|
|
18
|
+
}
|
|
19
|
+
interface ObservableLike<T> {
|
|
20
|
+
subscribe(onNext: (value: T) => any, onError?: (error: any) => any, onComplete?: () => any): ObservableLikeSubscription;
|
|
21
|
+
subscribe(listeners: {
|
|
22
|
+
complete?(): any;
|
|
23
|
+
error?(error: any): any;
|
|
24
|
+
next?(value: T): any;
|
|
25
|
+
}): ObservableLikeSubscription;
|
|
26
|
+
}
|
|
27
|
+
type StripAsync<Type> = Type extends Promise<infer PromiseBaseType> ? PromiseBaseType : Type extends ObservableLike<infer ObservableBaseType> ? ObservableBaseType : Type;
|
|
28
|
+
type StripTransfer<Type> = Type extends TransferDescriptor<infer BaseType> ? BaseType : Type;
|
|
29
|
+
type ModuleMethods = {
|
|
30
|
+
[methodName: string]: (...args: any) => any;
|
|
31
|
+
};
|
|
32
|
+
type ProxyableArgs<Args extends any[]> = Args extends [arg0: infer Arg0, ...rest: infer RestArgs] ? [Arg0 extends Transferable ? Arg0 | TransferDescriptor<Arg0> : Arg0, ...RestArgs] : Args;
|
|
33
|
+
type ProxyableFunction<Args extends any[], ReturnType> = Args extends [] ? () => ObservablePromise<StripTransfer<StripAsync<ReturnType>>> : (...args: ProxyableArgs<Args>) => ObservablePromise<StripTransfer<StripAsync<ReturnType>>>;
|
|
34
|
+
type ModuleProxy<Methods extends ModuleMethods> = {
|
|
35
|
+
[method in keyof Methods]: ProxyableFunction<Parameters<Methods[method]>, ReturnType<Methods[method]>>;
|
|
36
|
+
};
|
|
37
|
+
interface PrivateThreadProps {
|
|
38
|
+
[$errors]: Observable<Error>;
|
|
39
|
+
[$events]: Observable<WorkerEvent>;
|
|
40
|
+
[$terminate]: () => Promise<void>;
|
|
41
|
+
[$worker]: Worker;
|
|
42
|
+
}
|
|
43
|
+
type FunctionThread<Args extends any[] = any[], ReturnType = any> = ProxyableFunction<Args, ReturnType> & PrivateThreadProps;
|
|
44
|
+
type ModuleThread<Methods extends ModuleMethods = any> = ModuleProxy<Methods> & PrivateThreadProps;
|
|
45
|
+
interface AnyFunctionThread extends PrivateThreadProps {
|
|
46
|
+
(...args: any[]): ObservablePromise<any>;
|
|
47
|
+
}
|
|
48
|
+
interface AnyModuleThread extends PrivateThreadProps {
|
|
49
|
+
}
|
|
50
|
+
type Thread = AnyFunctionThread | AnyModuleThread;
|
|
51
|
+
type TransferList = Transferable[];
|
|
52
|
+
interface Worker extends EventTarget {
|
|
53
|
+
postMessage(value: any, transferList?: TransferList): void;
|
|
54
|
+
terminate(callback?: (error?: Error, exitCode?: number) => void): void | Promise<number>;
|
|
55
|
+
}
|
|
56
|
+
declare enum WorkerEventType {
|
|
57
|
+
internalError = "internalError",
|
|
58
|
+
message = "message",
|
|
59
|
+
termination = "termination"
|
|
60
|
+
}
|
|
61
|
+
interface WorkerInternalErrorEvent {
|
|
62
|
+
error: Error;
|
|
63
|
+
type: WorkerEventType.internalError;
|
|
64
|
+
}
|
|
65
|
+
interface WorkerMessageEvent<Data> {
|
|
66
|
+
data: Data;
|
|
67
|
+
type: WorkerEventType.message;
|
|
68
|
+
}
|
|
69
|
+
interface WorkerTerminationEvent {
|
|
70
|
+
type: WorkerEventType.termination;
|
|
71
|
+
}
|
|
72
|
+
type WorkerEvent = WorkerInternalErrorEvent | WorkerMessageEvent<any> | WorkerTerminationEvent;
|
|
73
|
+
|
|
74
|
+
export type { FunctionThread as F, ModuleThread as M, StripAsync as S, Thread as T, WorkerEvent as W, Worker as a };
|
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { Observable, SubscriptionObserver, ObservableLike } from 'observable-fns';
|
|
2
|
+
|
|
3
3
|
type Initializer<T> = (observer: SubscriptionObserver<T>) => UnsubscribeFn | void;
|
|
4
4
|
type Thenable<T> = {
|
|
5
5
|
then: (onFulfilled?: (value: T) => any, onRejected?: (error: any) => any) => any;
|
|
6
6
|
};
|
|
7
7
|
type UnsubscribeFn = () => void;
|
|
8
|
-
|
|
9
|
-
* Creates a hybrid, combining the APIs of an Observable and a Promise.
|
|
10
|
-
*
|
|
11
|
-
* It is used to proxy async process states when we are initially not sure
|
|
12
|
-
* if that async process will yield values once (-> Promise) or multiple
|
|
13
|
-
* times (-> Observable).
|
|
14
|
-
*
|
|
15
|
-
* Note that the observable promise inherits some of the observable's characteristics:
|
|
16
|
-
* The `init` function will be called *once for every time anyone subscribes to it*.
|
|
17
|
-
*
|
|
18
|
-
* If this is undesired, derive a hot observable from it using `makeHot()` and
|
|
19
|
-
* subscribe to that.
|
|
20
|
-
*/
|
|
21
|
-
export declare class ObservablePromise<T> extends Observable<T> implements Promise<T> {
|
|
8
|
+
declare class ObservablePromise<T> extends Observable<T> implements Promise<T> {
|
|
22
9
|
readonly [Symbol.toStringTag] = "[object ObservablePromise]";
|
|
23
10
|
private initHasRun;
|
|
24
11
|
private fulfillmentCallbacks;
|
|
@@ -36,5 +23,5 @@ export declare class ObservablePromise<T> extends Observable<T> implements Promi
|
|
|
36
23
|
finally(onCompleted?: (() => void) | null | undefined): Promise<T>;
|
|
37
24
|
static from<T>(thing: Observable<T> | ObservableLike<T> | ArrayLike<T> | Thenable<T>): ObservablePromise<T>;
|
|
38
25
|
}
|
|
39
|
-
|
|
40
|
-
|
|
26
|
+
|
|
27
|
+
export { ObservablePromise };
|
|
@@ -1,16 +1,24 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/observable-promise.ts
|
|
2
5
|
import { Observable } from "observable-fns";
|
|
3
|
-
var doNothing = () => {
|
|
4
|
-
};
|
|
5
|
-
var returnInput = (input) => input;
|
|
6
|
-
var runDeferred = (fn) => Promise.resolve().then(fn);
|
|
6
|
+
var doNothing = /* @__PURE__ */ __name(() => {
|
|
7
|
+
}, "doNothing");
|
|
8
|
+
var returnInput = /* @__PURE__ */ __name((input) => input, "returnInput");
|
|
9
|
+
var runDeferred = /* @__PURE__ */ __name((fn) => Promise.resolve().then(fn), "runDeferred");
|
|
7
10
|
function fail(error) {
|
|
8
11
|
throw error;
|
|
9
12
|
}
|
|
13
|
+
__name(fail, "fail");
|
|
10
14
|
function isThenable(thing) {
|
|
11
15
|
return thing && typeof thing.then === "function";
|
|
12
16
|
}
|
|
17
|
+
__name(isThenable, "isThenable");
|
|
13
18
|
var ObservablePromise = class _ObservablePromise extends Observable {
|
|
19
|
+
static {
|
|
20
|
+
__name(this, "ObservablePromise");
|
|
21
|
+
}
|
|
14
22
|
[Symbol.toStringTag] = "[object ObservablePromise]";
|
|
15
23
|
initHasRun = false;
|
|
16
24
|
fulfillmentCallbacks = [];
|
|
@@ -69,7 +77,7 @@ var ObservablePromise = class _ObservablePromise extends Observable {
|
|
|
69
77
|
const onRejected = onRejectedRaw || fail;
|
|
70
78
|
let onRejectedCalled = false;
|
|
71
79
|
return new Promise((resolve, reject) => {
|
|
72
|
-
const rejectionCallback = (error) => {
|
|
80
|
+
const rejectionCallback = /* @__PURE__ */ __name((error) => {
|
|
73
81
|
if (onRejectedCalled) return;
|
|
74
82
|
onRejectedCalled = true;
|
|
75
83
|
try {
|
|
@@ -77,17 +85,19 @@ var ObservablePromise = class _ObservablePromise extends Observable {
|
|
|
77
85
|
} catch (anotherError) {
|
|
78
86
|
reject(anotherError);
|
|
79
87
|
}
|
|
80
|
-
};
|
|
81
|
-
const fulfillmentCallback = (value) => {
|
|
88
|
+
}, "rejectionCallback");
|
|
89
|
+
const fulfillmentCallback = /* @__PURE__ */ __name((value) => {
|
|
82
90
|
try {
|
|
83
91
|
resolve(onFulfilled(value));
|
|
84
92
|
} catch (ex) {
|
|
85
93
|
const error = ex;
|
|
86
94
|
rejectionCallback(error);
|
|
87
95
|
}
|
|
88
|
-
};
|
|
96
|
+
}, "fulfillmentCallback");
|
|
89
97
|
if (!this.initHasRun) {
|
|
90
|
-
this.subscribe({
|
|
98
|
+
this.subscribe({
|
|
99
|
+
error: rejectionCallback
|
|
100
|
+
});
|
|
91
101
|
}
|
|
92
102
|
if (this.state === "fulfilled") {
|
|
93
103
|
return resolve(onFulfilled(this.firstValue));
|
|
@@ -105,23 +115,20 @@ var ObservablePromise = class _ObservablePromise extends Observable {
|
|
|
105
115
|
}
|
|
106
116
|
finally(onCompleted) {
|
|
107
117
|
const handler = onCompleted || doNothing;
|
|
108
|
-
return this.then(
|
|
109
|
-
(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
},
|
|
113
|
-
() => handler()
|
|
114
|
-
);
|
|
118
|
+
return this.then((value) => {
|
|
119
|
+
handler();
|
|
120
|
+
return value;
|
|
121
|
+
}, () => handler());
|
|
115
122
|
}
|
|
116
123
|
static from(thing) {
|
|
117
124
|
return isThenable(thing) ? new _ObservablePromise((observer) => {
|
|
118
|
-
const onFulfilled = (value) => {
|
|
125
|
+
const onFulfilled = /* @__PURE__ */ __name((value) => {
|
|
119
126
|
observer.next(value);
|
|
120
127
|
observer.complete();
|
|
121
|
-
};
|
|
122
|
-
const onRejected = (error) => {
|
|
128
|
+
}, "onFulfilled");
|
|
129
|
+
const onRejected = /* @__PURE__ */ __name((error) => {
|
|
123
130
|
observer.error(error);
|
|
124
|
-
};
|
|
131
|
+
}, "onRejected");
|
|
125
132
|
thing.then(onFulfilled, onRejected);
|
|
126
133
|
}) : super.from(thing);
|
|
127
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/observable-promise.ts"],"sourcesContent":["/* eslint-disable unicorn/no-thenable */\n/* eslint-disable @typescript-eslint/member-ordering */\n/* eslint-disable @typescript-eslint/no-floating-promises */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable unicorn/no-this-assignment */\nimport type { ObservableLike, SubscriptionObserver } from 'observable-fns'\nimport { Observable } from 'observable-fns'\n\ntype OnFulfilled<T, Result = void> = (value: T) => Result\ntype OnRejected<Result = void> = (error: Error) => Result\n\ntype Initializer<T> = (observer: SubscriptionObserver<T>) => UnsubscribeFn | void\n\ntype Thenable<T> = { then: (onFulfilled?: (value: T) => any, onRejected?: (error: any) => any) => any }\n\ntype UnsubscribeFn = () => void\n\nconst doNothing = () => {}\nconst returnInput = <T>(input: T): T => input\nconst runDeferred = (fn: () => void) => Promise.resolve().then(fn)\n\nfunction fail(error: Error): never {\n throw error\n}\n\nfunction isThenable(thing: any): thing is Thenable<any> {\n return thing && typeof thing.then === 'function'\n}\n\n/**\n * Creates a hybrid, combining the APIs of an Observable and a Promise.\n *\n * It is used to proxy async process states when we are initially not sure\n * if that async process will yield values once (-> Promise) or multiple\n * times (-> Observable).\n *\n * Note that the observable promise inherits some of the observable's characteristics:\n * The `init` function will be called *once for every time anyone subscribes to it*.\n *\n * If this is undesired, derive a hot observable from it using `makeHot()` and\n * subscribe to that.\n */\nexport class ObservablePromise<T> extends Observable<T> implements Promise<T> {\n readonly [Symbol.toStringTag] = '[object ObservablePromise]'\n private initHasRun = false\n private fulfillmentCallbacks: Array<OnFulfilled<T>> = []\n private rejectionCallbacks: OnRejected[] = []\n\n private firstValue: T | undefined\n private firstValueSet = false\n private rejection: Error | undefined\n private state: 'fulfilled' | 'pending' | 'rejected' = 'pending'\n\n constructor(init: Initializer<T>) {\n super((originalObserver: SubscriptionObserver<T>) => {\n // tslint:disable-next-line no-this-assignment\n const self = this\n const observer: SubscriptionObserver<T> = {\n ...originalObserver,\n complete() {\n originalObserver.complete()\n self.onCompletion()\n },\n error(error: Error) {\n originalObserver.error(error)\n self.onError(error)\n },\n next(value: T) {\n originalObserver.next(value)\n self.onNext(value)\n },\n }\n\n try {\n this.initHasRun = true\n return init(observer)\n } catch (error) {\n observer.error(error)\n }\n })\n }\n\n private onNext(value: T) {\n if (!this.firstValueSet) {\n this.firstValue = value\n this.firstValueSet = true\n }\n }\n\n private onError(error: Error) {\n this.state = 'rejected'\n this.rejection = error\n\n for (const onRejected of this.rejectionCallbacks) {\n // Promisifying the call to turn errors into unhandled promise rejections\n // instead of them failing sync and cancelling the iteration\n runDeferred(() => onRejected(error))\n }\n }\n\n private onCompletion() {\n this.state = 'fulfilled'\n\n for (const onFulfilled of this.fulfillmentCallbacks) {\n // Promisifying the call to turn errors into unhandled promise rejections\n // instead of them failing sync and cancelling the iteration\n runDeferred(() => onFulfilled(this.firstValue as T))\n }\n }\n\n then<TResult1 = T, TResult2 = never>(\n onFulfilledRaw?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onRejectedRaw?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): Promise<TResult1 | TResult2> {\n const onFulfilled: OnFulfilled<T, TResult1> = onFulfilledRaw || (returnInput as any)\n const onRejected = onRejectedRaw || fail\n let onRejectedCalled = false\n\n return new Promise<TResult1 | TResult2>((resolve, reject) => {\n const rejectionCallback = (error: Error) => {\n if (onRejectedCalled) return\n onRejectedCalled = true\n\n try {\n resolve(onRejected(error))\n } catch (anotherError) {\n reject(anotherError)\n }\n }\n const fulfillmentCallback = (value: T) => {\n try {\n resolve(onFulfilled(value))\n } catch (ex) {\n const error = ex as Error\n rejectionCallback(error)\n }\n }\n if (!this.initHasRun) {\n this.subscribe({ error: rejectionCallback })\n }\n if (this.state === 'fulfilled') {\n return resolve(onFulfilled(this.firstValue as T))\n }\n if (this.state === 'rejected') {\n onRejectedCalled = true\n return resolve(onRejected(this.rejection as Error))\n }\n this.fulfillmentCallbacks.push(fulfillmentCallback)\n this.rejectionCallbacks.push(rejectionCallback)\n })\n }\n\n catch<Result = never>(onRejected: ((error: Error) => Promise<Result> | Result) | null | undefined) {\n return this.then(undefined, onRejected) as Promise<Result>\n }\n\n finally(onCompleted?: (() => void) | null | undefined) {\n const handler = onCompleted || doNothing\n return this.then(\n (value: T) => {\n handler()\n return value\n },\n () => handler(),\n ) as Promise<T>\n }\n\n static override from<T>(thing: Observable<T> | ObservableLike<T> | ArrayLike<T> | Thenable<T>): ObservablePromise<T> {\n return isThenable(thing)\n ? new ObservablePromise((observer) => {\n const onFulfilled = (value: T) => {\n observer.next(value)\n observer.complete()\n }\n const onRejected = (error: any) => {\n observer.error(error)\n }\n thing.then(onFulfilled, onRejected)\n })\n : (super.from(thing) as ObservablePromise<T>)\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/observable-promise.ts"],"sourcesContent":["/* eslint-disable unicorn/no-thenable */\n/* eslint-disable @typescript-eslint/member-ordering */\n/* eslint-disable @typescript-eslint/no-floating-promises */\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable unicorn/no-this-assignment */\nimport type { ObservableLike, SubscriptionObserver } from 'observable-fns'\nimport { Observable } from 'observable-fns'\n\ntype OnFulfilled<T, Result = void> = (value: T) => Result\ntype OnRejected<Result = void> = (error: Error) => Result\n\ntype Initializer<T> = (observer: SubscriptionObserver<T>) => UnsubscribeFn | void\n\ntype Thenable<T> = { then: (onFulfilled?: (value: T) => any, onRejected?: (error: any) => any) => any }\n\ntype UnsubscribeFn = () => void\n\nconst doNothing = () => {}\nconst returnInput = <T>(input: T): T => input\nconst runDeferred = (fn: () => void) => Promise.resolve().then(fn)\n\nfunction fail(error: Error): never {\n throw error\n}\n\nfunction isThenable(thing: any): thing is Thenable<any> {\n return thing && typeof thing.then === 'function'\n}\n\n/**\n * Creates a hybrid, combining the APIs of an Observable and a Promise.\n *\n * It is used to proxy async process states when we are initially not sure\n * if that async process will yield values once (-> Promise) or multiple\n * times (-> Observable).\n *\n * Note that the observable promise inherits some of the observable's characteristics:\n * The `init` function will be called *once for every time anyone subscribes to it*.\n *\n * If this is undesired, derive a hot observable from it using `makeHot()` and\n * subscribe to that.\n */\nexport class ObservablePromise<T> extends Observable<T> implements Promise<T> {\n readonly [Symbol.toStringTag] = '[object ObservablePromise]'\n private initHasRun = false\n private fulfillmentCallbacks: Array<OnFulfilled<T>> = []\n private rejectionCallbacks: OnRejected[] = []\n\n private firstValue: T | undefined\n private firstValueSet = false\n private rejection: Error | undefined\n private state: 'fulfilled' | 'pending' | 'rejected' = 'pending'\n\n constructor(init: Initializer<T>) {\n super((originalObserver: SubscriptionObserver<T>) => {\n // tslint:disable-next-line no-this-assignment\n const self = this\n const observer: SubscriptionObserver<T> = {\n ...originalObserver,\n complete() {\n originalObserver.complete()\n self.onCompletion()\n },\n error(error: Error) {\n originalObserver.error(error)\n self.onError(error)\n },\n next(value: T) {\n originalObserver.next(value)\n self.onNext(value)\n },\n }\n\n try {\n this.initHasRun = true\n return init(observer)\n } catch (error) {\n observer.error(error)\n }\n })\n }\n\n private onNext(value: T) {\n if (!this.firstValueSet) {\n this.firstValue = value\n this.firstValueSet = true\n }\n }\n\n private onError(error: Error) {\n this.state = 'rejected'\n this.rejection = error\n\n for (const onRejected of this.rejectionCallbacks) {\n // Promisifying the call to turn errors into unhandled promise rejections\n // instead of them failing sync and cancelling the iteration\n runDeferred(() => onRejected(error))\n }\n }\n\n private onCompletion() {\n this.state = 'fulfilled'\n\n for (const onFulfilled of this.fulfillmentCallbacks) {\n // Promisifying the call to turn errors into unhandled promise rejections\n // instead of them failing sync and cancelling the iteration\n runDeferred(() => onFulfilled(this.firstValue as T))\n }\n }\n\n then<TResult1 = T, TResult2 = never>(\n onFulfilledRaw?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onRejectedRaw?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): Promise<TResult1 | TResult2> {\n const onFulfilled: OnFulfilled<T, TResult1> = onFulfilledRaw || (returnInput as any)\n const onRejected = onRejectedRaw || fail\n let onRejectedCalled = false\n\n return new Promise<TResult1 | TResult2>((resolve, reject) => {\n const rejectionCallback = (error: Error) => {\n if (onRejectedCalled) return\n onRejectedCalled = true\n\n try {\n resolve(onRejected(error))\n } catch (anotherError) {\n reject(anotherError)\n }\n }\n const fulfillmentCallback = (value: T) => {\n try {\n resolve(onFulfilled(value))\n } catch (ex) {\n const error = ex as Error\n rejectionCallback(error)\n }\n }\n if (!this.initHasRun) {\n this.subscribe({ error: rejectionCallback })\n }\n if (this.state === 'fulfilled') {\n return resolve(onFulfilled(this.firstValue as T))\n }\n if (this.state === 'rejected') {\n onRejectedCalled = true\n return resolve(onRejected(this.rejection as Error))\n }\n this.fulfillmentCallbacks.push(fulfillmentCallback)\n this.rejectionCallbacks.push(rejectionCallback)\n })\n }\n\n catch<Result = never>(onRejected: ((error: Error) => Promise<Result> | Result) | null | undefined) {\n return this.then(undefined, onRejected) as Promise<Result>\n }\n\n finally(onCompleted?: (() => void) | null | undefined) {\n const handler = onCompleted || doNothing\n return this.then(\n (value: T) => {\n handler()\n return value\n },\n () => handler(),\n ) as Promise<T>\n }\n\n static override from<T>(thing: Observable<T> | ObservableLike<T> | ArrayLike<T> | Thenable<T>): ObservablePromise<T> {\n return isThenable(thing)\n ? new ObservablePromise((observer) => {\n const onFulfilled = (value: T) => {\n observer.next(value)\n observer.complete()\n }\n const onRejected = (error: any) => {\n observer.error(error)\n }\n thing.then(onFulfilled, onRejected)\n })\n : (super.from(thing) as ObservablePromise<T>)\n }\n}\n"],"mappings":"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","names":["Observable","doNothing","returnInput","input","runDeferred","fn","Promise","resolve","then","fail","error","isThenable","thing","ObservablePromise","Observable","Symbol","toStringTag","initHasRun","fulfillmentCallbacks","rejectionCallbacks","firstValue","firstValueSet","rejection","state","init","originalObserver","self","observer","complete","onCompletion","onError","next","value","onNext","onRejected","onFulfilled","onFulfilledRaw","onRejectedRaw","onRejectedCalled","reject","rejectionCallback","anotherError","fulfillmentCallback","ex","subscribe","push","catch","undefined","finally","onCompleted","handler","from"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Observable, ObservableLike } from 'observable-fns';
|
|
2
|
+
export { Observable } from 'observable-fns';
|
|
3
|
+
|
|
4
|
+
declare const $observers: unique symbol;
|
|
5
|
+
declare class Subject<T> extends Observable<T> implements ObservableLike<T> {
|
|
6
|
+
private [$observers];
|
|
7
|
+
constructor();
|
|
8
|
+
complete(): void;
|
|
9
|
+
error(error: any): void;
|
|
10
|
+
next(value: T): void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { Subject };
|
|
@@ -1,15 +1,24 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/observable.ts
|
|
2
5
|
import { Observable } from "observable-fns";
|
|
3
6
|
import { Observable as Observable2 } from "observable-fns";
|
|
4
7
|
var $observers = Symbol("observers");
|
|
5
8
|
var Subject = class extends Observable {
|
|
9
|
+
static {
|
|
10
|
+
__name(this, "Subject");
|
|
11
|
+
}
|
|
6
12
|
[$observers];
|
|
7
13
|
constructor() {
|
|
8
14
|
super((observer) => {
|
|
9
|
-
this[$observers] = [
|
|
10
|
-
|
|
15
|
+
this[$observers] = [
|
|
16
|
+
...this[$observers] || [],
|
|
17
|
+
observer
|
|
18
|
+
];
|
|
19
|
+
const unsubscribe = /* @__PURE__ */ __name(() => {
|
|
11
20
|
this[$observers] = this[$observers].filter((someObserver) => someObserver !== observer);
|
|
12
|
-
};
|
|
21
|
+
}, "unsubscribe");
|
|
13
22
|
return unsubscribe;
|
|
14
23
|
});
|
|
15
24
|
this[$observers] = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/observable.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ObservableLike, SubscriptionObserver } from 'observable-fns'\nimport { Observable } from 'observable-fns'\n\nconst $observers = Symbol('observers')\n\n/**\n * Observable subject. Implements the Observable interface, but also exposes\n * the `next()`, `error()`, `complete()` methods to initiate observable\n * updates \"from the outside\".\n *\n * Use `Observable.from(subject)` to derive an observable that proxies all\n * values, errors and the completion raised on this subject, but does not\n * expose the `next()`, `error()`, `complete()` methods.\n */\nexport class Subject<T> extends Observable<T> implements ObservableLike<T> {\n private [$observers]: Array<SubscriptionObserver<T>>\n\n constructor() {\n super((observer) => {\n this[$observers] = [...(this[$observers] || []), observer]\n const unsubscribe = () => {\n this[$observers] = this[$observers].filter(someObserver => someObserver !== observer)\n }\n return unsubscribe\n })\n\n this[$observers] = []\n }\n\n complete() {\n for (const observer of this[$observers]) observer.complete()\n }\n\n error(error: any) {\n for (const observer of this[$observers]) observer.error(error)\n }\n\n next(value: T) {\n for (const observer of this[$observers]) observer.next(value)\n }\n}\n\nexport { Observable } from 'observable-fns'\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/observable.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { ObservableLike, SubscriptionObserver } from 'observable-fns'\nimport { Observable } from 'observable-fns'\n\nconst $observers = Symbol('observers')\n\n/**\n * Observable subject. Implements the Observable interface, but also exposes\n * the `next()`, `error()`, `complete()` methods to initiate observable\n * updates \"from the outside\".\n *\n * Use `Observable.from(subject)` to derive an observable that proxies all\n * values, errors and the completion raised on this subject, but does not\n * expose the `next()`, `error()`, `complete()` methods.\n */\nexport class Subject<T> extends Observable<T> implements ObservableLike<T> {\n private [$observers]: Array<SubscriptionObserver<T>>\n\n constructor() {\n super((observer) => {\n this[$observers] = [...(this[$observers] || []), observer]\n const unsubscribe = () => {\n this[$observers] = this[$observers].filter(someObserver => someObserver !== observer)\n }\n return unsubscribe\n })\n\n this[$observers] = []\n }\n\n complete() {\n for (const observer of this[$observers]) observer.complete()\n }\n\n error(error: any) {\n for (const observer of this[$observers]) observer.error(error)\n }\n\n next(value: T) {\n for (const observer of this[$observers]) observer.next(value)\n }\n}\n\nexport { Observable } from 'observable-fns'\n"],"mappings":";;;;AAEA,SAASA,kBAAkB;AAyC3B,SAASA,cAAAA,mBAAkB;AAvC3B,IAAMC,aAAaC,OAAO,WAAA;AAWnB,IAAMC,UAAN,cAAyBC,WAAAA;EAfhC,OAegCA;;;EACtB,CAACH,UAAAA;EAET,cAAc;AACZ,UAAM,CAACI,aAAAA;AACL,WAAKJ,UAAAA,IAAc;WAAK,KAAKA,UAAAA,KAAe,CAAA;QAAKI;;AACjD,YAAMC,cAAc,6BAAA;AAClB,aAAKL,UAAAA,IAAc,KAAKA,UAAAA,EAAYM,OAAOC,CAAAA,iBAAgBA,iBAAiBH,QAAAA;MAC9E,GAFoB;AAGpB,aAAOC;IACT,CAAA;AAEA,SAAKL,UAAAA,IAAc,CAAA;EACrB;EAEAQ,WAAW;AACT,eAAWJ,YAAY,KAAKJ,UAAAA,EAAaI,UAASI,SAAQ;EAC5D;EAEAC,MAAMA,OAAY;AAChB,eAAWL,YAAY,KAAKJ,UAAAA,EAAaI,UAASK,MAAMA,KAAAA;EAC1D;EAEAC,KAAKC,OAAU;AACb,eAAWP,YAAY,KAAKJ,UAAAA,EAAaI,UAASM,KAAKC,KAAAA;EACzD;AACF;","names":["Observable","$observers","Symbol","Subject","Observable","observer","unsubscribe","filter","someObserver","complete","error","next","value"]}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
interface SerializedError {
|
|
2
2
|
__error_marker: '$$error';
|
|
3
3
|
message: string;
|
|
4
4
|
name: string;
|
|
5
5
|
stack?: string;
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
declare enum MasterMessageType {
|
|
8
8
|
cancel = "cancel",
|
|
9
9
|
run = "run"
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
type MasterJobCancelMessage = {
|
|
12
12
|
type: MasterMessageType.cancel;
|
|
13
13
|
uid: number;
|
|
14
14
|
};
|
|
15
|
-
|
|
15
|
+
type MasterJobRunMessage = {
|
|
16
16
|
type: MasterMessageType.run;
|
|
17
17
|
uid: number;
|
|
18
18
|
method?: string;
|
|
19
19
|
args: any[];
|
|
20
20
|
};
|
|
21
|
-
|
|
21
|
+
declare enum WorkerMessageType {
|
|
22
22
|
error = "error",
|
|
23
23
|
init = "init",
|
|
24
24
|
result = "result",
|
|
25
25
|
running = "running",
|
|
26
26
|
uncaughtError = "uncaughtError"
|
|
27
27
|
}
|
|
28
|
-
|
|
28
|
+
type WorkerUncaughtErrorMessage = {
|
|
29
29
|
type: WorkerMessageType.uncaughtError;
|
|
30
30
|
error: {
|
|
31
31
|
message: string;
|
|
@@ -33,7 +33,7 @@ export type WorkerUncaughtErrorMessage = {
|
|
|
33
33
|
stack?: string;
|
|
34
34
|
};
|
|
35
35
|
};
|
|
36
|
-
|
|
36
|
+
type WorkerInitMessage = {
|
|
37
37
|
type: WorkerMessageType.init;
|
|
38
38
|
exposed: {
|
|
39
39
|
type: 'function';
|
|
@@ -42,20 +42,21 @@ export type WorkerInitMessage = {
|
|
|
42
42
|
methods: string[];
|
|
43
43
|
};
|
|
44
44
|
};
|
|
45
|
-
|
|
45
|
+
type WorkerJobErrorMessage = {
|
|
46
46
|
type: WorkerMessageType.error;
|
|
47
47
|
uid: number;
|
|
48
48
|
error: SerializedError;
|
|
49
49
|
};
|
|
50
|
-
|
|
50
|
+
type WorkerJobResultMessage = {
|
|
51
51
|
type: WorkerMessageType.result;
|
|
52
52
|
uid: number;
|
|
53
53
|
complete?: true;
|
|
54
54
|
payload?: any;
|
|
55
55
|
};
|
|
56
|
-
|
|
56
|
+
type WorkerJobStartMessage = {
|
|
57
57
|
type: WorkerMessageType.running;
|
|
58
58
|
uid: number;
|
|
59
59
|
resultType: 'observable' | 'promise';
|
|
60
60
|
};
|
|
61
|
-
|
|
61
|
+
|
|
62
|
+
export { type MasterJobCancelMessage, type MasterJobRunMessage, MasterMessageType, type SerializedError, type WorkerInitMessage, type WorkerJobErrorMessage, type WorkerJobResultMessage, type WorkerJobStartMessage, WorkerMessageType, type WorkerUncaughtErrorMessage };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/types/messages.ts
|
|
2
|
+
var MasterMessageType = /* @__PURE__ */ function(MasterMessageType2) {
|
|
3
|
+
MasterMessageType2["cancel"] = "cancel";
|
|
4
|
+
MasterMessageType2["run"] = "run";
|
|
5
|
+
return MasterMessageType2;
|
|
6
|
+
}({});
|
|
7
|
+
var WorkerMessageType = /* @__PURE__ */ function(WorkerMessageType2) {
|
|
8
|
+
WorkerMessageType2["error"] = "error";
|
|
9
|
+
WorkerMessageType2["init"] = "init";
|
|
10
|
+
WorkerMessageType2["result"] = "result";
|
|
11
|
+
WorkerMessageType2["running"] = "running";
|
|
12
|
+
WorkerMessageType2["uncaughtError"] = "uncaughtError";
|
|
13
|
+
return WorkerMessageType2;
|
|
14
|
+
}({});
|
|
15
|
+
export {
|
|
16
|
+
MasterMessageType,
|
|
17
|
+
WorkerMessageType
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=messages.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/types/messages.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/member-ordering */\nexport interface SerializedError {\n __error_marker: '$$error'\n message: string\n name: string\n stack?: string\n}\n\n/////////////////////////////\n// Messages sent by master:\n\nexport enum MasterMessageType {\n cancel = 'cancel',\n run = 'run',\n}\n\nexport type MasterJobCancelMessage = {\n type: MasterMessageType.cancel\n uid: number\n}\n\nexport type MasterJobRunMessage = {\n type: MasterMessageType.run\n uid: number\n method?: string\n args: any[]\n}\n\n////////////////////////////\n// Messages sent by worker:\n\nexport enum WorkerMessageType {\n error = 'error',\n init = 'init',\n result = 'result',\n running = 'running',\n uncaughtError = 'uncaughtError',\n}\n\nexport type WorkerUncaughtErrorMessage = {\n type: WorkerMessageType.uncaughtError\n error: {\n message: string\n name: string\n stack?: string\n }\n}\n\nexport type WorkerInitMessage = {\n type: WorkerMessageType.init\n exposed: { type: 'function' } | { type: 'module'; methods: string[] }\n}\n\nexport type WorkerJobErrorMessage = {\n type: WorkerMessageType.error\n uid: number\n error: SerializedError\n}\n\nexport type WorkerJobResultMessage = {\n type: WorkerMessageType.result\n uid: number\n complete?: true\n payload?: any\n}\n\nexport type WorkerJobStartMessage = {\n type: WorkerMessageType.running\n uid: number\n resultType: 'observable' | 'promise'\n}\n"],"mappings":";AAYO,IAAKA,oBAAAA,yBAAAA,oBAAAA;;;SAAAA;;AAoBL,IAAKC,oBAAAA,yBAAAA,oBAAAA;;;;;;SAAAA;;","names":["MasterMessageType","WorkerMessageType"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface Serializer<Msg = JsonSerializable, Input = any> {
|
|
2
|
+
deserialize(message: Msg): Input;
|
|
3
|
+
serialize(input: Input): Msg;
|
|
4
|
+
}
|
|
5
|
+
interface SerializerImplementation<Msg = JsonSerializable, Input = any> {
|
|
6
|
+
deserialize(message: Msg, defaultDeserialize: (msg: Msg) => Input): Input;
|
|
7
|
+
serialize(input: Input, defaultSerialize: (inp: Input) => Msg): Msg;
|
|
8
|
+
}
|
|
9
|
+
type JsonSerializablePrimitive = string | number | boolean | null;
|
|
10
|
+
type JsonSerializableObject = {
|
|
11
|
+
[key: string]: JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[] | undefined;
|
|
12
|
+
};
|
|
13
|
+
type JsonSerializable = JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[];
|
|
14
|
+
declare const DefaultSerializer: Serializer<JsonSerializable>;
|
|
15
|
+
|
|
16
|
+
declare global {
|
|
17
|
+
var registeredSerializer: Serializer<JsonSerializable>;
|
|
18
|
+
}
|
|
19
|
+
declare function registerSerializer(serializer: SerializerImplementation<JsonSerializable>): void;
|
|
20
|
+
|
|
21
|
+
export { DefaultSerializer as D, type JsonSerializable as J, type Serializer as S, type SerializerImplementation as a, registerSerializer as r };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { F as FunctionThread, M as ModuleThread, S as StripAsync, a as Worker$1, B as BlobWorker$1, b as WorkerImplementation } from './master-BjjSaJAj.js';
|
|
2
|
+
import { Observable } from 'observable-fns';
|
|
3
|
+
import { T as Thread, P as PoolEvent, a as PoolEventType, b as TaskRunFunction, Q as QueuedTask } from './pool-types-Bzei07Nj.js';
|
|
4
|
+
import { W as WorkerFunction, a as WorkerModule } from './worker-04t9iwDh.js';
|
|
5
|
+
import './master/implementation.node.js';
|
|
6
|
+
|
|
7
|
+
interface PoolOptions {
|
|
8
|
+
concurrency?: number;
|
|
9
|
+
maxQueuedJobs?: number;
|
|
10
|
+
name?: string;
|
|
11
|
+
size?: number;
|
|
12
|
+
}
|
|
13
|
+
declare class WorkerPool<ThreadType extends Thread> implements Pool<ThreadType> {
|
|
14
|
+
static EventType: typeof PoolEventType;
|
|
15
|
+
private readonly debug;
|
|
16
|
+
private readonly eventObservable;
|
|
17
|
+
private readonly options;
|
|
18
|
+
private readonly workers;
|
|
19
|
+
private readonly eventSubject;
|
|
20
|
+
private initErrors;
|
|
21
|
+
private isClosing;
|
|
22
|
+
private nextTaskID;
|
|
23
|
+
private taskQueue;
|
|
24
|
+
constructor(spawnWorker: () => Promise<ThreadType>, optionsOrSize?: number | PoolOptions);
|
|
25
|
+
private findIdlingWorker;
|
|
26
|
+
private runPoolTask;
|
|
27
|
+
private run;
|
|
28
|
+
private scheduleWork;
|
|
29
|
+
private taskCompletion;
|
|
30
|
+
settled(allowResolvingImmediately?: boolean): Promise<Error[]>;
|
|
31
|
+
completed(allowResolvingImmediately?: boolean): Promise<void>;
|
|
32
|
+
events(): Observable<PoolEvent<ThreadType>>;
|
|
33
|
+
queue(taskFunction: TaskRunFunction<ThreadType, any>): QueuedTask<ThreadType, any>;
|
|
34
|
+
terminate(force?: boolean): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
declare function PoolConstructor<ThreadType extends Thread>(spawnWorker: () => Promise<ThreadType>, optionsOrSize?: number | PoolOptions): WorkerPool<ThreadType>;
|
|
37
|
+
declare namespace Pool {
|
|
38
|
+
type Event<ThreadType extends Thread = any> = PoolEvent<ThreadType>;
|
|
39
|
+
type EventType = PoolEventType;
|
|
40
|
+
}
|
|
41
|
+
interface Pool<ThreadType extends Thread> {
|
|
42
|
+
completed(allowResolvingImmediately?: boolean): Promise<any>;
|
|
43
|
+
settled(allowResolvingImmediately?: boolean): Promise<Error[]>;
|
|
44
|
+
events(): Observable<PoolEvent<ThreadType>>;
|
|
45
|
+
queue<Return>(task: TaskRunFunction<ThreadType, Return>): QueuedTask<ThreadType, Return>;
|
|
46
|
+
terminate(force?: boolean): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
declare const Pool: typeof PoolConstructor & {
|
|
49
|
+
EventType: typeof PoolEventType;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
type ArbitraryWorkerInterface = WorkerFunction & WorkerModule<string> & {
|
|
53
|
+
somekeythatisneverusedinproductioncode123: 'magicmarker123';
|
|
54
|
+
};
|
|
55
|
+
type ArbitraryThreadType = FunctionThread<any, any> & ModuleThread<any>;
|
|
56
|
+
type ExposedToThreadType<Exposed extends WorkerFunction | WorkerModule<any>> = Exposed extends ArbitraryWorkerInterface ? ArbitraryThreadType : Exposed extends WorkerFunction ? FunctionThread<Parameters<Exposed>, StripAsync<ReturnType<Exposed>>> : Exposed extends WorkerModule<any> ? ModuleThread<Exposed> : never;
|
|
57
|
+
declare function spawn<Exposed extends WorkerFunction | WorkerModule<any> = ArbitraryWorkerInterface>(worker: Worker$1, options?: {
|
|
58
|
+
timeout?: number;
|
|
59
|
+
}): Promise<ExposedToThreadType<Exposed>>;
|
|
60
|
+
|
|
61
|
+
type BlobWorker = typeof BlobWorker$1;
|
|
62
|
+
declare const BlobWorker: typeof BlobWorker$1;
|
|
63
|
+
type Worker = Worker$1;
|
|
64
|
+
declare const Worker: typeof WorkerImplementation;
|
|
65
|
+
|
|
66
|
+
export { BlobWorker as B, type ExposedToThreadType as E, Pool as P, Worker as W, spawn as s };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { D as DefaultSerializer, J as JsonSerializable, S as Serializer, a as SerializerImplementation, r as registerSerializer } from './common-Cuiya5FG.js';
|
|
2
|
+
export { B as BlobWorker, E as ExposedAs, P as Pool, W as Worker, s as spawn } from './index-node-DB1sNl0d.js';
|
|
3
|
+
export { Q as QueuedTask, T as Thread } from './pool-types-Bzei07Nj.js';
|
|
4
|
+
export { a as Transfer, T as TransferDescriptor } from './transferable-Cv9t618f.js';
|
|
5
|
+
export { F as FunctionThread, M as ModuleThread } from './master-BjjSaJAj.js';
|
|
6
|
+
export { isWorkerRuntime } from './master/implementation.node.js';
|
|
7
|
+
import 'observable-fns';
|
|
8
|
+
import './worker-04t9iwDh.js';
|