@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.
Files changed (116) hide show
  1. package/dist/browser/common-Cuiya5FG.d.ts +21 -0
  2. package/dist/browser/index-browser-B8TCfn7g.d.ts +20 -0
  3. package/dist/browser/index-browser.d.ts +8 -0
  4. package/dist/browser/index-browser.mjs +209 -119
  5. package/dist/browser/index-browser.mjs.map +1 -1
  6. package/dist/browser/master/implementation.browser.d.ts +9 -0
  7. package/dist/browser/master/implementation.browser.mjs +36 -11
  8. package/dist/browser/master/implementation.browser.mjs.map +1 -1
  9. package/dist/browser/master/index-browser.d.ts +7 -0
  10. package/dist/browser/master/index-browser.mjs +201 -117
  11. package/dist/browser/master/index-browser.mjs.map +1 -1
  12. package/dist/browser/master/pool-browser.d.ts +104 -0
  13. package/dist/browser/master/pool-browser.mjs +65 -53
  14. package/dist/browser/master/pool-browser.mjs.map +1 -1
  15. package/dist/browser/master-D4MAqspp.d.ts +109 -0
  16. package/dist/browser/transferable-Cv9t618f.d.ts +15 -0
  17. package/dist/{types → browser}/worker/worker.browser.d.ts +8 -8
  18. package/dist/browser/worker/worker.browser.mjs +79 -43
  19. package/dist/browser/worker/worker.browser.mjs.map +1 -1
  20. package/dist/{types/types/worker.d.ts → browser/worker-04t9iwDh.d.ts} +5 -5
  21. package/dist/neutral/master/register.d.ts +2 -0
  22. package/dist/neutral/master/register.mjs +223 -33
  23. package/dist/neutral/master/register.mjs.map +1 -1
  24. package/dist/neutral/master/spawn.d.ts +19 -0
  25. package/dist/neutral/master/spawn.mjs +106 -53
  26. package/dist/neutral/master/spawn.mjs.map +1 -1
  27. package/dist/neutral/master/thread.d.ts +12 -0
  28. package/dist/neutral/master/thread.mjs +4 -0
  29. package/dist/neutral/master/thread.mjs.map +1 -1
  30. package/dist/neutral/master-DDdg1BKb.d.ts +74 -0
  31. package/dist/{types → neutral}/observable-promise.d.ts +5 -18
  32. package/dist/neutral/observable-promise.mjs +27 -20
  33. package/dist/neutral/observable-promise.mjs.map +1 -1
  34. package/dist/neutral/observable.d.ts +13 -0
  35. package/dist/neutral/observable.mjs +12 -3
  36. package/dist/neutral/observable.mjs.map +1 -1
  37. package/dist/{types → neutral}/types/messages.d.ts +12 -11
  38. package/dist/neutral/types/messages.mjs +19 -0
  39. package/dist/neutral/types/messages.mjs.map +1 -0
  40. package/dist/node/common-Cuiya5FG.d.ts +21 -0
  41. package/dist/node/index-node-DB1sNl0d.d.ts +66 -0
  42. package/dist/node/index-node.d.ts +8 -0
  43. package/dist/node/index-node.mjs +396 -141
  44. package/dist/node/index-node.mjs.map +1 -1
  45. package/dist/node/master/implementation.node.d.ts +9 -0
  46. package/dist/node/master/implementation.node.mjs +223 -33
  47. package/dist/node/master/implementation.node.mjs.map +1 -1
  48. package/dist/node/master/index-node.d.ts +7 -0
  49. package/dist/node/master/index-node.mjs +388 -139
  50. package/dist/node/master/index-node.mjs.map +1 -1
  51. package/dist/node/master/pool-node.d.ts +51 -0
  52. package/dist/node/master/pool-node.mjs +285 -86
  53. package/dist/node/master/pool-node.mjs.map +1 -1
  54. package/dist/node/master-BjjSaJAj.d.ts +109 -0
  55. package/dist/{types/master/pool-types.d.ts → node/pool-types-Bzei07Nj.d.ts} +16 -24
  56. package/dist/node/transferable-Cv9t618f.d.ts +15 -0
  57. package/dist/{types → node}/worker/worker.node.d.ts +11 -10
  58. package/dist/node/worker/worker.node.mjs +80 -43
  59. package/dist/node/worker/worker.node.mjs.map +1 -1
  60. package/dist/node/worker-04t9iwDh.d.ts +12 -0
  61. package/package.json +29 -22
  62. package/src/master/invocation-proxy.ts +2 -0
  63. package/src/transferable.ts +2 -0
  64. package/src/types/worker.ts +1 -0
  65. package/src/worker/WorkerGlobalScope.ts +1 -0
  66. package/src/worker/worker.browser.ts +1 -1
  67. package/dist/types/common.d.ts +0 -8
  68. package/dist/types/common.d.ts.map +0 -1
  69. package/dist/types/index-browser.d.ts +0 -9
  70. package/dist/types/index-browser.d.ts.map +0 -1
  71. package/dist/types/index-node.d.ts +0 -9
  72. package/dist/types/index-node.d.ts.map +0 -1
  73. package/dist/types/master/get-bundle-url.browser.d.ts +0 -3
  74. package/dist/types/master/get-bundle-url.browser.d.ts.map +0 -1
  75. package/dist/types/master/implementation.browser.d.ts +0 -5
  76. package/dist/types/master/implementation.browser.d.ts.map +0 -1
  77. package/dist/types/master/implementation.node.d.ts +0 -5
  78. package/dist/types/master/implementation.node.d.ts.map +0 -1
  79. package/dist/types/master/index-browser.d.ts +0 -13
  80. package/dist/types/master/index-browser.d.ts.map +0 -1
  81. package/dist/types/master/index-node.d.ts +0 -13
  82. package/dist/types/master/index-node.d.ts.map +0 -1
  83. package/dist/types/master/invocation-proxy.d.ts +0 -4
  84. package/dist/types/master/invocation-proxy.d.ts.map +0 -1
  85. package/dist/types/master/pool-browser.d.ts +0 -93
  86. package/dist/types/master/pool-browser.d.ts.map +0 -1
  87. package/dist/types/master/pool-node.d.ts +0 -93
  88. package/dist/types/master/pool-node.d.ts.map +0 -1
  89. package/dist/types/master/pool-types.d.ts.map +0 -1
  90. package/dist/types/master/register.d.ts +0 -2
  91. package/dist/types/master/register.d.ts.map +0 -1
  92. package/dist/types/master/spawn.d.ts +0 -21
  93. package/dist/types/master/spawn.d.ts.map +0 -1
  94. package/dist/types/master/thread.d.ts +0 -13
  95. package/dist/types/master/thread.d.ts.map +0 -1
  96. package/dist/types/observable-promise.d.ts.map +0 -1
  97. package/dist/types/observable.d.ts +0 -21
  98. package/dist/types/observable.d.ts.map +0 -1
  99. package/dist/types/promise.d.ts +0 -6
  100. package/dist/types/promise.d.ts.map +0 -1
  101. package/dist/types/serializers.d.ts +0 -17
  102. package/dist/types/serializers.d.ts.map +0 -1
  103. package/dist/types/symbols.d.ts +0 -6
  104. package/dist/types/symbols.d.ts.map +0 -1
  105. package/dist/types/transferable.d.ts +0 -43
  106. package/dist/types/transferable.d.ts.map +0 -1
  107. package/dist/types/types/master.d.ts +0 -99
  108. package/dist/types/types/master.d.ts.map +0 -1
  109. package/dist/types/types/messages.d.ts.map +0 -1
  110. package/dist/types/types/worker.d.ts.map +0 -1
  111. package/dist/types/worker/WorkerGlobalScope.d.ts +0 -6
  112. package/dist/types/worker/WorkerGlobalScope.d.ts.map +0 -1
  113. package/dist/types/worker/expose.d.ts +0 -4
  114. package/dist/types/worker/expose.d.ts.map +0 -1
  115. package/dist/types/worker/worker.browser.d.ts.map +0 -1
  116. 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 type { ObservableLike, SubscriptionObserver } from 'observable-fns';
2
- import { Observable } from 'observable-fns';
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
- export {};
40
- //# sourceMappingURL=observable-promise.d.ts.map
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({ error: rejectionCallback });
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
- (value) => {
110
- handler();
111
- return value;
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":"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","names":[]}
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] = [...this[$observers] || [], observer];
10
- const unsubscribe = () => {
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":";AAEA,SAAS,kBAAkB;AAyC3B,SAAS,cAAAA,mBAAkB;AAvC3B,IAAM,aAAa,OAAO,WAAW;AAW9B,IAAM,UAAN,cAAyB,WAA2C;AAAA,EACzE,CAAS,UAAU;AAAA,EAEnB,cAAc;AACZ,UAAM,CAAC,aAAa;AAClB,WAAK,UAAU,IAAI,CAAC,GAAI,KAAK,UAAU,KAAK,CAAC,GAAI,QAAQ;AACzD,YAAM,cAAc,MAAM;AACxB,aAAK,UAAU,IAAI,KAAK,UAAU,EAAE,OAAO,kBAAgB,iBAAiB,QAAQ;AAAA,MACtF;AACA,aAAO;AAAA,IACT,CAAC;AAED,SAAK,UAAU,IAAI,CAAC;AAAA,EACtB;AAAA,EAEA,WAAW;AACT,eAAW,YAAY,KAAK,UAAU,EAAG,UAAS,SAAS;AAAA,EAC7D;AAAA,EAEA,MAAM,OAAY;AAChB,eAAW,YAAY,KAAK,UAAU,EAAG,UAAS,MAAM,KAAK;AAAA,EAC/D;AAAA,EAEA,KAAK,OAAU;AACb,eAAW,YAAY,KAAK,UAAU,EAAG,UAAS,KAAK,KAAK;AAAA,EAC9D;AACF;","names":["Observable"]}
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
- export interface SerializedError {
1
+ interface SerializedError {
2
2
  __error_marker: '$$error';
3
3
  message: string;
4
4
  name: string;
5
5
  stack?: string;
6
6
  }
7
- export declare enum MasterMessageType {
7
+ declare enum MasterMessageType {
8
8
  cancel = "cancel",
9
9
  run = "run"
10
10
  }
11
- export type MasterJobCancelMessage = {
11
+ type MasterJobCancelMessage = {
12
12
  type: MasterMessageType.cancel;
13
13
  uid: number;
14
14
  };
15
- export type MasterJobRunMessage = {
15
+ type MasterJobRunMessage = {
16
16
  type: MasterMessageType.run;
17
17
  uid: number;
18
18
  method?: string;
19
19
  args: any[];
20
20
  };
21
- export declare enum WorkerMessageType {
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
- export type WorkerUncaughtErrorMessage = {
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
- export type WorkerInitMessage = {
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
- export type WorkerJobErrorMessage = {
45
+ type WorkerJobErrorMessage = {
46
46
  type: WorkerMessageType.error;
47
47
  uid: number;
48
48
  error: SerializedError;
49
49
  };
50
- export type WorkerJobResultMessage = {
50
+ type WorkerJobResultMessage = {
51
51
  type: WorkerMessageType.result;
52
52
  uid: number;
53
53
  complete?: true;
54
54
  payload?: any;
55
55
  };
56
- export type WorkerJobStartMessage = {
56
+ type WorkerJobStartMessage = {
57
57
  type: WorkerMessageType.running;
58
58
  uid: number;
59
59
  resultType: 'observable' | 'promise';
60
60
  };
61
- //# sourceMappingURL=messages.d.ts.map
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';