@xylabs/threads 4.6.4 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/master/implementation.browser.mjs +89 -0
- package/dist/browser/master/implementation.browser.mjs.map +1 -0
- package/dist/browser/worker/worker.browser.mjs +291 -0
- package/dist/browser/worker/worker.browser.mjs.map +1 -0
- package/dist/neutral/index.mjs +1022 -0
- package/dist/neutral/index.mjs.map +1 -0
- package/dist/neutral/master/implementation.mjs +264 -0
- package/dist/neutral/master/implementation.mjs.map +1 -0
- package/dist/neutral/master/index.mjs +988 -0
- package/dist/neutral/master/index.mjs.map +1 -0
- package/dist/neutral/master/pool.mjs +579 -0
- package/dist/neutral/master/pool.mjs.map +1 -0
- package/dist/neutral/master/register.mjs +272 -0
- package/dist/neutral/master/register.mjs.map +1 -0
- package/dist/neutral/master/spawn.mjs +412 -0
- package/dist/neutral/master/spawn.mjs.map +1 -0
- package/dist/neutral/master/thread.mjs +29 -0
- package/dist/neutral/master/thread.mjs.map +1 -0
- package/dist/neutral/observable-promise.mjs +132 -0
- package/dist/neutral/observable-promise.mjs.map +1 -0
- package/dist/neutral/observable.mjs +31 -0
- package/dist/neutral/observable.mjs.map +1 -0
- package/dist/node/master/implementation.node.mjs +154 -0
- package/dist/node/master/implementation.node.mjs.map +1 -0
- package/dist/node/worker/worker.node.mjs +304 -0
- package/dist/node/worker/worker.node.mjs.map +1 -0
- package/dist/{common.d.ts → types/common.d.ts} +5 -1
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/{master → types/master}/get-bundle-url.browser.d.ts +1 -0
- package/dist/types/master/get-bundle-url.browser.d.ts.map +1 -0
- package/dist/{master → types/master}/implementation.browser.d.ts +2 -1
- package/dist/types/master/implementation.browser.d.ts.map +1 -0
- package/dist/{master → types/master}/implementation.d.ts +4 -1
- package/dist/types/master/implementation.d.ts.map +1 -0
- package/dist/{master → types/master}/implementation.node.d.ts +2 -1
- package/dist/types/master/implementation.node.d.ts.map +1 -0
- package/dist/types/master/index.d.ts +13 -0
- package/dist/types/master/index.d.ts.map +1 -0
- package/dist/{master → types/master}/invocation-proxy.d.ts +2 -1
- package/dist/types/master/invocation-proxy.d.ts.map +1 -0
- package/dist/{master → types/master}/pool-types.d.ts +16 -1
- package/dist/types/master/pool-types.d.ts.map +1 -0
- package/dist/types/master/pool.d.ts +93 -0
- package/dist/types/master/pool.d.ts.map +1 -0
- package/dist/types/master/register.d.ts +2 -0
- package/dist/types/master/register.d.ts.map +1 -0
- package/dist/{master → types/master}/spawn.d.ts +12 -2
- package/dist/types/master/spawn.d.ts.map +1 -0
- package/dist/types/master/thread.d.ts +13 -0
- package/dist/types/master/thread.d.ts.map +1 -0
- package/dist/{observable-promise.d.ts → types/observable-promise.d.ts} +14 -0
- package/dist/types/observable-promise.d.ts.map +1 -0
- package/dist/types/observable.d.ts +21 -0
- package/dist/types/observable.d.ts.map +1 -0
- package/dist/{ponyfills.d.ts → types/ponyfills.d.ts} +1 -0
- package/dist/types/ponyfills.d.ts.map +1 -0
- package/dist/types/promise.d.ts +6 -0
- package/dist/types/promise.d.ts.map +1 -0
- package/dist/{serializers.d.ts → types/serializers.d.ts} +1 -0
- package/dist/types/serializers.d.ts.map +1 -0
- package/dist/{symbols.d.ts → types/symbols.d.ts} +1 -0
- package/dist/types/symbols.d.ts.map +1 -0
- package/dist/types/transferable.d.ts +43 -0
- package/dist/types/transferable.d.ts.map +1 -0
- package/dist/types/{master.d.ts → types/master.d.ts} +17 -3
- package/dist/types/types/master.d.ts.map +1 -0
- package/dist/types/{messages.d.ts → types/messages.d.ts} +1 -0
- package/dist/types/types/messages.d.ts.map +1 -0
- package/dist/types/{worker.d.ts → types/worker.d.ts} +1 -0
- package/dist/types/types/worker.d.ts.map +1 -0
- package/dist/types/worker/WorkerGlobalScope.d.ts +6 -0
- package/dist/types/worker/WorkerGlobalScope.d.ts.map +1 -0
- package/dist/types/worker/expose.d.ts +4 -0
- package/dist/types/worker/expose.d.ts.map +1 -0
- package/dist/types/worker/worker.browser.d.ts +14 -0
- package/dist/types/worker/worker.browser.d.ts.map +1 -0
- package/dist/types/worker/worker.node.d.ts +25 -0
- package/dist/types/worker/worker.node.d.ts.map +1 -0
- package/package.json +66 -77
- package/src/common.ts +10 -6
- package/src/index.ts +10 -9
- package/src/master/get-bundle-url.browser.ts +2 -1
- package/src/master/implementation.browser.ts +2 -2
- package/src/master/implementation.node.ts +19 -96
- package/src/master/implementation.ts +2 -2
- package/src/master/index.ts +7 -7
- package/src/master/invocation-proxy.ts +6 -6
- package/src/master/pool-types.ts +1 -1
- package/src/master/pool.ts +14 -13
- package/src/master/register.ts +2 -1
- package/src/master/spawn.ts +8 -8
- package/src/master/thread.ts +2 -2
- package/src/observable-promise.ts +3 -2
- package/src/serializers.ts +1 -1
- package/src/transferable.ts +2 -1
- package/src/types/master.ts +3 -3
- package/src/worker/WorkerGlobalScope.ts +5 -0
- package/src/worker/expose.ts +234 -0
- package/src/worker/is-observable.d.ts +7 -0
- package/src/worker/{implementation.browser.ts → worker.browser.ts} +26 -10
- package/src/worker/{implementation.worker_threads.ts → worker.node.ts} +30 -12
- package/types/is-observable.d.ts +1 -1
- package/xy.config.ts +24 -0
- package/dist/common.js +0 -16
- package/dist/esm/common.js +0 -16
- package/dist/esm/index.js +0 -26
- package/dist/esm/master/get-bundle-url.browser.js +0 -25
- package/dist/esm/master/implementation.browser.js +0 -65
- package/dist/esm/master/implementation.js +0 -43
- package/dist/esm/master/implementation.node.js +0 -205
- package/dist/esm/master/index.js +0 -14
- package/dist/esm/master/invocation-proxy.js +0 -121
- package/dist/esm/master/pool-types.js +0 -14
- package/dist/esm/master/pool.js +0 -262
- package/dist/esm/master/register.js +0 -11
- package/dist/esm/master/spawn.js +0 -114
- package/dist/esm/master/thread.js +0 -18
- package/dist/esm/observable-promise.js +0 -132
- package/dist/esm/observable.js +0 -33
- package/dist/esm/ponyfills.js +0 -20
- package/dist/esm/promise.js +0 -23
- package/dist/esm/serializers.js +0 -41
- package/dist/esm/symbols.js +0 -8
- package/dist/esm/transferable.js +0 -25
- package/dist/esm/types/master.js +0 -9
- package/dist/esm/types/messages.js +0 -16
- package/dist/esm/types/worker.js +0 -2
- package/dist/esm/worker/bundle-entry.js +0 -26
- package/dist/esm/worker/implementation.browser.js +0 -24
- package/dist/esm/worker/implementation.js +0 -19
- package/dist/esm/worker/implementation.tiny-worker.js +0 -37
- package/dist/esm/worker/implementation.worker_threads.js +0 -41
- package/dist/esm/worker/index.js +0 -174
- package/dist/esm/worker_threads.js +0 -13
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -26
- package/dist/master/get-bundle-url.browser.js +0 -25
- package/dist/master/implementation.browser.js +0 -65
- package/dist/master/implementation.js +0 -43
- package/dist/master/implementation.node.js +0 -205
- package/dist/master/index.d.ts +0 -10
- package/dist/master/index.js +0 -14
- package/dist/master/invocation-proxy.js +0 -121
- package/dist/master/pool-types.js +0 -14
- package/dist/master/pool.d.ts +0 -50
- package/dist/master/pool.js +0 -262
- package/dist/master/register.d.ts +0 -1
- package/dist/master/register.js +0 -11
- package/dist/master/spawn.js +0 -114
- package/dist/master/thread.d.ts +0 -8
- package/dist/master/thread.js +0 -18
- package/dist/observable-promise.js +0 -132
- package/dist/observable.d.ts +0 -11
- package/dist/observable.js +0 -33
- package/dist/ponyfills.js +0 -20
- package/dist/promise.d.ts +0 -1
- package/dist/promise.js +0 -23
- package/dist/serializers.js +0 -41
- package/dist/symbols.js +0 -8
- package/dist/transferable.d.ts +0 -9
- package/dist/transferable.js +0 -25
- package/dist/types/master.js +0 -9
- package/dist/types/messages.js +0 -16
- package/dist/types/worker.js +0 -2
- package/dist/worker/bundle-entry.d.ts +0 -1
- package/dist/worker/bundle-entry.js +0 -26
- package/dist/worker/implementation.browser.d.ts +0 -6
- package/dist/worker/implementation.browser.js +0 -24
- package/dist/worker/implementation.d.ts +0 -3
- package/dist/worker/implementation.js +0 -19
- package/dist/worker/implementation.tiny-worker.d.ts +0 -6
- package/dist/worker/implementation.tiny-worker.js +0 -37
- package/dist/worker/implementation.worker_threads.d.ts +0 -8
- package/dist/worker/implementation.worker_threads.js +0 -41
- package/dist/worker/index.d.ts +0 -5
- package/dist/worker/index.js +0 -174
- package/dist/worker_threads.d.ts +0 -8
- package/dist/worker_threads.js +0 -13
- package/observable.d.ts +0 -2
- package/observable.js +0 -2
- package/observable.mjs +0 -4
- package/register.d.ts +0 -2
- package/register.js +0 -2
- package/register.mjs +0 -1
- package/rollup.config.js +0 -16
- package/src/worker/bundle-entry.ts +0 -10
- package/src/worker/implementation.tiny-worker.ts +0 -55
- package/src/worker/implementation.ts +0 -23
- package/src/worker/index.ts +0 -230
- package/src/worker_threads.ts +0 -27
- package/test/lib/index.ts +0 -1
- package/test/lib/serialization.ts +0 -38
- package/test/observable-promise.test.ts +0 -205
- package/test/observable.test.ts +0 -87
- package/test/pool.test.ts +0 -183
- package/test/serialization.test.ts +0 -23
- package/test/spawn.chromium.mocha.ts +0 -53
- package/test/spawn.test.ts +0 -87
- package/test/streaming.test.ts +0 -29
- package/test/transferables.test.ts +0 -71
- package/test/workers/arraybuffer-xor.ts +0 -10
- package/test/workers/count-to-five.ts +0 -12
- package/test/workers/counter.ts +0 -19
- package/test/workers/faulty-function.ts +0 -5
- package/test/workers/hello-world.ts +0 -5
- package/test/workers/increment.ts +0 -8
- package/test/workers/minmax.ts +0 -25
- package/test/workers/serialization.ts +0 -13
- package/test/workers/top-level-throw.ts +0 -1
- package/test-tooling/rollup/app.js +0 -21
- package/test-tooling/rollup/rollup.config.ts +0 -14
- package/test-tooling/rollup/worker.js +0 -7
- package/test-tooling/tsconfig/minimal.ts +0 -12
- package/test-tooling/webpack/addition-worker.ts +0 -9
- package/test-tooling/webpack/app-with-inlined-worker.ts +0 -28
- package/test-tooling/webpack/app.ts +0 -61
- package/test-tooling/webpack/pool-worker.ts +0 -5
- package/test-tooling/webpack/raw-loader.d.ts +0 -4
- package/test-tooling/webpack/webpack.chromium.mocha.ts +0 -21
- package/test-tooling/webpack/webpack.node.config.js +0 -29
- package/test-tooling/webpack/webpack.web.config.js +0 -28
- package/types/webworker.d.ts +0 -9
- package/worker.d.ts +0 -2
- package/worker.js +0 -2
- package/worker.mjs +0 -6
|
@@ -132,7 +132,8 @@ export class ObservablePromise<T> extends Observable<T> implements Promise<T> {
|
|
|
132
132
|
const fulfillmentCallback = (value: T) => {
|
|
133
133
|
try {
|
|
134
134
|
resolve(onFulfilled(value))
|
|
135
|
-
} catch (
|
|
135
|
+
} catch (ex) {
|
|
136
|
+
const error = ex as Error
|
|
136
137
|
rejectionCallback(error)
|
|
137
138
|
}
|
|
138
139
|
}
|
|
@@ -166,7 +167,7 @@ export class ObservablePromise<T> extends Observable<T> implements Promise<T> {
|
|
|
166
167
|
) as Promise<T>
|
|
167
168
|
}
|
|
168
169
|
|
|
169
|
-
static from<T>(thing: Observable<T> | ObservableLike<T> | ArrayLike<T> | Thenable<T>): ObservablePromise<T> {
|
|
170
|
+
static override from<T>(thing: Observable<T> | ObservableLike<T> | ArrayLike<T> | Thenable<T>): ObservablePromise<T> {
|
|
170
171
|
return isThenable(thing)
|
|
171
172
|
? new ObservablePromise((observer) => {
|
|
172
173
|
const onFulfilled = (value: T) => {
|
package/src/serializers.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable import-x/no-internal-modules */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
import type { SerializedError } from './types/messages'
|
|
3
|
+
import type { SerializedError } from './types/messages.ts'
|
|
4
4
|
|
|
5
5
|
export interface Serializer<Msg = JsonSerializable, Input = any> {
|
|
6
6
|
deserialize(message: Msg): Input
|
package/src/transferable.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { $transferable } from './symbols'
|
|
2
|
+
import { $transferable } from './symbols.ts'
|
|
3
3
|
|
|
4
4
|
export interface TransferDescriptor<T = any> {
|
|
5
5
|
[$transferable]: true
|
|
@@ -55,6 +55,7 @@ export function Transfer(transferable: Transferable): TransferDescriptor
|
|
|
55
55
|
export function Transfer<T>(payload: T, transferables: Transferable[]): TransferDescriptor
|
|
56
56
|
|
|
57
57
|
export function Transfer<T>(payload: T, transferables?: Transferable[]): TransferDescriptor {
|
|
58
|
+
console.log('Transfer')
|
|
58
59
|
if (!transferables) {
|
|
59
60
|
if (!isTransferable(payload)) throw new Error('Not transferable')
|
|
60
61
|
transferables = [payload]
|
package/src/types/master.ts
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
// See <https://github.com/microsoft/TypeScript/issues/28009>
|
|
7
7
|
import type { Observable } from 'observable-fns'
|
|
8
8
|
|
|
9
|
-
import type { ObservablePromise } from '../observable-promise'
|
|
9
|
+
import type { ObservablePromise } from '../observable-promise.ts'
|
|
10
10
|
import type {
|
|
11
11
|
$errors, $events, $terminate, $worker,
|
|
12
|
-
} from '../symbols'
|
|
13
|
-
import type { TransferDescriptor } from '../transferable'
|
|
12
|
+
} from '../symbols.ts'
|
|
13
|
+
import type { TransferDescriptor } from '../transferable.ts'
|
|
14
14
|
|
|
15
15
|
interface ObservableLikeSubscription {
|
|
16
16
|
unsubscribe(): any
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export interface WorkerGlobalScope {
|
|
2
|
+
addEventListener(eventName: string, listener: (event: Event) => void): void
|
|
3
|
+
postMessage(message: unknown, transferList?: Readonly<Transferable[]>): void
|
|
4
|
+
removeEventListener(eventName: string, listener: (event: Event) => void): void
|
|
5
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/* eslint-disable import-x/no-internal-modules */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-floating-promises */
|
|
4
|
+
|
|
5
|
+
import isSomeObservable from 'is-observable-2-1-0'
|
|
6
|
+
import type { Observable, Subscription } from 'observable-fns'
|
|
7
|
+
|
|
8
|
+
import { deserialize, serialize } from '../common.ts'
|
|
9
|
+
import type { TransferDescriptor } from '../transferable.ts'
|
|
10
|
+
import { isTransferDescriptor } from '../transferable.ts'
|
|
11
|
+
import type {
|
|
12
|
+
MasterJobCancelMessage,
|
|
13
|
+
MasterJobRunMessage,
|
|
14
|
+
SerializedError,
|
|
15
|
+
WorkerInitMessage,
|
|
16
|
+
WorkerJobErrorMessage,
|
|
17
|
+
WorkerJobResultMessage,
|
|
18
|
+
WorkerJobStartMessage,
|
|
19
|
+
WorkerUncaughtErrorMessage,
|
|
20
|
+
} from '../types/messages.ts'
|
|
21
|
+
import {
|
|
22
|
+
MasterMessageType,
|
|
23
|
+
WorkerMessageType,
|
|
24
|
+
} from '../types/messages.ts'
|
|
25
|
+
import type {
|
|
26
|
+
AbstractedWorkerAPI, WorkerFunction, WorkerModule,
|
|
27
|
+
} from '../types/worker.ts'
|
|
28
|
+
import type { WorkerGlobalScope } from './WorkerGlobalScope.ts'
|
|
29
|
+
|
|
30
|
+
const isErrorEvent = (value: Event): value is ErrorEvent => value && (value as ErrorEvent).error
|
|
31
|
+
|
|
32
|
+
export function createExpose(implementation: AbstractedWorkerAPI, self: WorkerGlobalScope) {
|
|
33
|
+
let exposeCalled = false
|
|
34
|
+
|
|
35
|
+
const activeSubscriptions = new Map<number, Subscription<any>>()
|
|
36
|
+
|
|
37
|
+
const isMasterJobCancelMessage = (thing: any): thing is MasterJobCancelMessage => thing && thing.type === MasterMessageType.cancel
|
|
38
|
+
const isMasterJobRunMessage = (thing: any): thing is MasterJobRunMessage => thing && thing.type === MasterMessageType.run
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* There are issues with `is-observable` not recognizing zen-observable's instances.
|
|
42
|
+
* We are using `observable-fns`, but it's based on zen-observable, too.
|
|
43
|
+
*/
|
|
44
|
+
const isObservable = (thing: any): thing is Observable<any> => isSomeObservable(thing) || isZenObservable(thing)
|
|
45
|
+
|
|
46
|
+
function isZenObservable(thing: any): thing is Observable<any> {
|
|
47
|
+
return thing && typeof thing === 'object' && typeof thing.subscribe === 'function'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function deconstructTransfer(thing: any) {
|
|
51
|
+
return isTransferDescriptor(thing) ? { payload: thing.send, transferables: thing.transferables } : { payload: thing, transferables: undefined }
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function postFunctionInitMessage() {
|
|
55
|
+
const initMessage: WorkerInitMessage = {
|
|
56
|
+
exposed: { type: 'function' },
|
|
57
|
+
type: WorkerMessageType.init,
|
|
58
|
+
}
|
|
59
|
+
implementation.postMessageToMaster(initMessage)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function postModuleInitMessage(methodNames: string[]) {
|
|
63
|
+
const initMessage: WorkerInitMessage = {
|
|
64
|
+
exposed: {
|
|
65
|
+
methods: methodNames,
|
|
66
|
+
type: 'module',
|
|
67
|
+
},
|
|
68
|
+
type: WorkerMessageType.init,
|
|
69
|
+
}
|
|
70
|
+
implementation.postMessageToMaster(initMessage)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function postJobErrorMessage(uid: number, rawError: Error | TransferDescriptor<Error>) {
|
|
74
|
+
const { payload: error, transferables } = deconstructTransfer(rawError)
|
|
75
|
+
const errorMessage: WorkerJobErrorMessage = {
|
|
76
|
+
error: serialize(error) as any as SerializedError,
|
|
77
|
+
type: WorkerMessageType.error,
|
|
78
|
+
uid,
|
|
79
|
+
}
|
|
80
|
+
implementation.postMessageToMaster(errorMessage, transferables)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function postJobResultMessage(uid: number, completed: boolean, resultValue?: any) {
|
|
84
|
+
const { payload, transferables } = deconstructTransfer(resultValue)
|
|
85
|
+
const resultMessage: WorkerJobResultMessage = {
|
|
86
|
+
complete: completed ? true : undefined,
|
|
87
|
+
payload,
|
|
88
|
+
type: WorkerMessageType.result,
|
|
89
|
+
uid,
|
|
90
|
+
}
|
|
91
|
+
implementation.postMessageToMaster(resultMessage, transferables)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function postJobStartMessage(uid: number, resultType: WorkerJobStartMessage['resultType']) {
|
|
95
|
+
const startMessage: WorkerJobStartMessage = {
|
|
96
|
+
resultType,
|
|
97
|
+
type: WorkerMessageType.running,
|
|
98
|
+
uid,
|
|
99
|
+
}
|
|
100
|
+
implementation.postMessageToMaster(startMessage)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function postUncaughtErrorMessage(error: Error) {
|
|
104
|
+
try {
|
|
105
|
+
const errorMessage: WorkerUncaughtErrorMessage = {
|
|
106
|
+
error: serialize(error) as any as SerializedError,
|
|
107
|
+
type: WorkerMessageType.uncaughtError,
|
|
108
|
+
}
|
|
109
|
+
implementation.postMessageToMaster(errorMessage)
|
|
110
|
+
} catch (subError) {
|
|
111
|
+
// tslint:disable-next-line no-console
|
|
112
|
+
console.error(
|
|
113
|
+
'Not reporting uncaught error back to master thread as it ' + 'occured while reporting an uncaught error already.' + '\nLatest error:',
|
|
114
|
+
subError,
|
|
115
|
+
'\nOriginal error:',
|
|
116
|
+
error,
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
async function runFunction(jobUID: number, fn: WorkerFunction, args: any[]) {
|
|
122
|
+
let syncResult: any
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
syncResult = fn(...args)
|
|
126
|
+
} catch (ex) {
|
|
127
|
+
const error = ex as Error
|
|
128
|
+
return postJobErrorMessage(jobUID, error)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const resultType = isObservable(syncResult) ? 'observable' : 'promise'
|
|
132
|
+
postJobStartMessage(jobUID, resultType)
|
|
133
|
+
|
|
134
|
+
if (isObservable(syncResult)) {
|
|
135
|
+
const subscription = syncResult.subscribe(
|
|
136
|
+
value => postJobResultMessage(jobUID, false, serialize(value)),
|
|
137
|
+
(error) => {
|
|
138
|
+
postJobErrorMessage(jobUID, serialize(error) as any)
|
|
139
|
+
activeSubscriptions.delete(jobUID)
|
|
140
|
+
},
|
|
141
|
+
() => {
|
|
142
|
+
postJobResultMessage(jobUID, true)
|
|
143
|
+
activeSubscriptions.delete(jobUID)
|
|
144
|
+
},
|
|
145
|
+
)
|
|
146
|
+
activeSubscriptions.set(jobUID, subscription)
|
|
147
|
+
} else {
|
|
148
|
+
try {
|
|
149
|
+
const result = await syncResult
|
|
150
|
+
postJobResultMessage(jobUID, true, serialize(result))
|
|
151
|
+
} catch (error) {
|
|
152
|
+
postJobErrorMessage(jobUID, serialize(error) as any)
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Expose a function or a module (an object whose values are functions)
|
|
159
|
+
* to the main thread. Must be called exactly once in every worker thread
|
|
160
|
+
* to signal its API to the main thread.
|
|
161
|
+
*
|
|
162
|
+
* @param exposed Function or object whose values are functions
|
|
163
|
+
*/
|
|
164
|
+
const expose = (exposed: WorkerFunction | WorkerModule<any>) => {
|
|
165
|
+
if (!implementation.isWorkerRuntime()) {
|
|
166
|
+
throw new Error('expose() called in the master thread.')
|
|
167
|
+
}
|
|
168
|
+
if (exposeCalled) {
|
|
169
|
+
throw new Error('expose() called more than once. This is not possible. Pass an object to expose() if you want to expose multiple functions.')
|
|
170
|
+
}
|
|
171
|
+
exposeCalled = true
|
|
172
|
+
|
|
173
|
+
if (typeof exposed === 'function') {
|
|
174
|
+
implementation.subscribeToMasterMessages((messageData: unknown) => {
|
|
175
|
+
if (isMasterJobRunMessage(messageData) && !messageData.method) {
|
|
176
|
+
runFunction(messageData.uid, exposed, messageData.args.map(deserialize))
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
postFunctionInitMessage()
|
|
180
|
+
} else if (typeof exposed === 'object' && exposed) {
|
|
181
|
+
implementation.subscribeToMasterMessages((messageData: unknown) => {
|
|
182
|
+
if (isMasterJobRunMessage(messageData) && messageData.method) {
|
|
183
|
+
runFunction(messageData.uid, exposed[messageData.method], messageData.args.map(deserialize))
|
|
184
|
+
}
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function')
|
|
188
|
+
postModuleInitMessage(methodNames)
|
|
189
|
+
} else {
|
|
190
|
+
throw new Error(`Invalid argument passed to expose(). Expected a function or an object, got: ${exposed}`)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
implementation.subscribeToMasterMessages((messageData: unknown) => {
|
|
194
|
+
if (isMasterJobCancelMessage(messageData)) {
|
|
195
|
+
const jobUID = messageData.uid
|
|
196
|
+
const subscription = activeSubscriptions.get(jobUID)
|
|
197
|
+
|
|
198
|
+
if (subscription) {
|
|
199
|
+
subscription.unsubscribe()
|
|
200
|
+
activeSubscriptions.delete(jobUID)
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
})
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (typeof globalThis !== 'undefined' && typeof self.addEventListener === 'function' && implementation.isWorkerRuntime()) {
|
|
207
|
+
self.addEventListener('error', (event) => {
|
|
208
|
+
// Post with some delay, so the master had some time to subscribe to messages
|
|
209
|
+
setTimeout(() => postUncaughtErrorMessage(isErrorEvent(event) ? event.error : event), 250)
|
|
210
|
+
})
|
|
211
|
+
self.addEventListener('unhandledrejection', (event) => {
|
|
212
|
+
const error = (event as any).reason
|
|
213
|
+
if (error && typeof (error as any).message === 'string') {
|
|
214
|
+
// Post with some delay, so the master had some time to subscribe to messages
|
|
215
|
+
setTimeout(() => postUncaughtErrorMessage(error), 250)
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (typeof process !== 'undefined' && typeof process.on === 'function' && implementation.isWorkerRuntime()) {
|
|
221
|
+
process.on('uncaughtException', (error) => {
|
|
222
|
+
// Post with some delay, so the master had some time to subscribe to messages
|
|
223
|
+
setTimeout(() => postUncaughtErrorMessage(error), 250)
|
|
224
|
+
})
|
|
225
|
+
process.on('unhandledRejection', (error) => {
|
|
226
|
+
if (error && typeof (error as any).message === 'string') {
|
|
227
|
+
// Post with some delay, so the master had some time to subscribe to messages
|
|
228
|
+
setTimeout(() => postUncaughtErrorMessage(error as any), 250)
|
|
229
|
+
}
|
|
230
|
+
})
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return expose
|
|
234
|
+
}
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/* eslint-disable import-x/no-internal-modules */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
/// <reference lib="dom" />
|
|
4
|
-
// tslint:disable no-shadowed-variable
|
|
5
2
|
|
|
6
|
-
|
|
3
|
+
/// <reference lib="webworker" />
|
|
4
|
+
// tslint:disable no-shadowed-variable
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
removeEventListener(eventName: string, listener: (event: Event) => void): void
|
|
12
|
-
}
|
|
6
|
+
import type { AbstractedWorkerAPI } from '../types/worker.ts'
|
|
7
|
+
import { createExpose } from './expose.ts'
|
|
8
|
+
import type { WorkerGlobalScope } from './WorkerGlobalScope.ts'
|
|
13
9
|
|
|
14
10
|
declare const self: WorkerGlobalScope
|
|
15
11
|
|
|
@@ -33,8 +29,28 @@ const subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'
|
|
|
33
29
|
return unsubscribe
|
|
34
30
|
}
|
|
35
31
|
|
|
36
|
-
|
|
32
|
+
const addEventListener = self.addEventListener
|
|
33
|
+
const postMessage = self.postMessage
|
|
34
|
+
const removeEventListener = self.removeEventListener
|
|
35
|
+
|
|
36
|
+
export {
|
|
37
|
+
addEventListener,
|
|
38
|
+
postMessage,
|
|
39
|
+
removeEventListener,
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const expose = createExpose({
|
|
43
|
+
isWorkerRuntime, postMessageToMaster, subscribeToMasterMessages,
|
|
44
|
+
}, {
|
|
45
|
+
addEventListener, postMessage, removeEventListener,
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
export {
|
|
37
49
|
isWorkerRuntime,
|
|
38
50
|
postMessageToMaster,
|
|
39
51
|
subscribeToMasterMessages,
|
|
40
52
|
}
|
|
53
|
+
|
|
54
|
+
export { registerSerializer } from '../common.ts'
|
|
55
|
+
export { Transfer } from '../transferable.ts'
|
|
56
|
+
export { expose }
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
/* eslint-disable import-x/no-internal-modules */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
3
|
// tslint:disable no-shadowed-variable
|
|
4
|
-
import type { MessagePort } from 'node:worker_threads'
|
|
5
4
|
|
|
6
|
-
import type {
|
|
7
|
-
import
|
|
5
|
+
import type { MessagePort, TransferListItem } from 'node:worker_threads'
|
|
6
|
+
import { parentPort as optionalParentPort } from 'node:worker_threads'
|
|
7
|
+
|
|
8
|
+
import { assertEx } from '@xylabs/assert'
|
|
9
|
+
|
|
10
|
+
import type { AbstractedWorkerAPI } from '../types/worker.ts'
|
|
11
|
+
import { createExpose } from './expose.ts'
|
|
12
|
+
|
|
13
|
+
const parentPort = assertEx(optionalParentPort, () => 'Invariant violation: MessagePort to parent is not available.')
|
|
8
14
|
|
|
9
15
|
function assertMessagePort(port: MessagePort | null | undefined): MessagePort {
|
|
10
16
|
if (!port) {
|
|
@@ -14,16 +20,14 @@ function assertMessagePort(port: MessagePort | null | undefined): MessagePort {
|
|
|
14
20
|
}
|
|
15
21
|
|
|
16
22
|
const isWorkerRuntime: AbstractedWorkerAPI['isWorkerRuntime'] = function isWorkerRuntime() {
|
|
17
|
-
return
|
|
23
|
+
return true // isMainThread
|
|
18
24
|
}
|
|
19
25
|
|
|
20
26
|
const postMessageToMaster: AbstractedWorkerAPI['postMessageToMaster'] = function postMessageToMaster(data, transferList) {
|
|
21
|
-
assertMessagePort(
|
|
27
|
+
assertMessagePort(parentPort).postMessage(data, transferList as TransferListItem[])
|
|
22
28
|
}
|
|
23
29
|
|
|
24
30
|
const subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'] = function subscribeToMasterMessages(onMessage) {
|
|
25
|
-
const parentPort = WorkerThreads().parentPort
|
|
26
|
-
|
|
27
31
|
if (!parentPort) {
|
|
28
32
|
throw new Error('Invariant violation: MessagePort to parent is not available.')
|
|
29
33
|
}
|
|
@@ -37,14 +41,28 @@ const subscribeToMasterMessages: AbstractedWorkerAPI['subscribeToMasterMessages'
|
|
|
37
41
|
return unsubscribe
|
|
38
42
|
}
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
const addEventListener = parentPort?.on.bind(parentPort)
|
|
45
|
+
const postMessage = parentPort?.postMessage.bind(parentPort)
|
|
46
|
+
const removeEventListener = parentPort?.off.bind(parentPort)
|
|
47
|
+
|
|
48
|
+
export {
|
|
49
|
+
addEventListener,
|
|
50
|
+
postMessage,
|
|
51
|
+
removeEventListener,
|
|
43
52
|
}
|
|
44
53
|
|
|
45
|
-
|
|
54
|
+
const expose = createExpose({
|
|
55
|
+
isWorkerRuntime, postMessageToMaster, subscribeToMasterMessages,
|
|
56
|
+
}, {
|
|
57
|
+
addEventListener, postMessage, removeEventListener,
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
export {
|
|
46
61
|
isWorkerRuntime,
|
|
47
62
|
postMessageToMaster,
|
|
48
63
|
subscribeToMasterMessages,
|
|
49
|
-
testImplementation,
|
|
50
64
|
}
|
|
65
|
+
|
|
66
|
+
export { registerSerializer } from '../common.ts'
|
|
67
|
+
export { Transfer } from '../transferable.ts'
|
|
68
|
+
export { expose }
|
package/types/is-observable.d.ts
CHANGED
package/xy.config.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
|
|
2
|
+
const config: XyTsupConfig = {
|
|
3
|
+
compile: {
|
|
4
|
+
browser: { src: { entry: ['./src/master/implementation.browser.ts', './src/worker/worker.browser.ts'] } },
|
|
5
|
+
neutral: {
|
|
6
|
+
src: {
|
|
7
|
+
entry: [
|
|
8
|
+
'./src/index.ts',
|
|
9
|
+
'./src/master/index.ts',
|
|
10
|
+
'./src/master/pool.ts',
|
|
11
|
+
'./src/observable.ts',
|
|
12
|
+
'./src/observable-promise.ts',
|
|
13
|
+
'./src/master/implementation.ts',
|
|
14
|
+
'./src/master/register.ts',
|
|
15
|
+
'./src/master/spawn.ts',
|
|
16
|
+
'./src/master/thread.ts',
|
|
17
|
+
],
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
node: { src: { entry: ['./src/master/implementation.node.ts', './src/worker/worker.node.ts'] } },
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default config
|
package/dist/common.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerSerializer = registerSerializer;
|
|
4
|
-
exports.deserialize = deserialize;
|
|
5
|
-
exports.serialize = serialize;
|
|
6
|
-
const serializers_1 = require("./serializers");
|
|
7
|
-
let registeredSerializer = serializers_1.DefaultSerializer;
|
|
8
|
-
function registerSerializer(serializer) {
|
|
9
|
-
registeredSerializer = (0, serializers_1.extendSerializer)(registeredSerializer, serializer);
|
|
10
|
-
}
|
|
11
|
-
function deserialize(message) {
|
|
12
|
-
return registeredSerializer.deserialize(message);
|
|
13
|
-
}
|
|
14
|
-
function serialize(input) {
|
|
15
|
-
return registeredSerializer.serialize(input);
|
|
16
|
-
}
|
package/dist/esm/common.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerSerializer = registerSerializer;
|
|
4
|
-
exports.deserialize = deserialize;
|
|
5
|
-
exports.serialize = serialize;
|
|
6
|
-
const serializers_1 = require("./serializers");
|
|
7
|
-
let registeredSerializer = serializers_1.DefaultSerializer;
|
|
8
|
-
function registerSerializer(serializer) {
|
|
9
|
-
registeredSerializer = (0, serializers_1.extendSerializer)(registeredSerializer, serializer);
|
|
10
|
-
}
|
|
11
|
-
function deserialize(message) {
|
|
12
|
-
return registeredSerializer.deserialize(message);
|
|
13
|
-
}
|
|
14
|
-
function serialize(input) {
|
|
15
|
-
return registeredSerializer.serialize(input);
|
|
16
|
-
}
|
package/dist/esm/index.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.expose = exports.Transfer = exports.DefaultSerializer = exports.registerSerializer = void 0;
|
|
18
|
-
var common_1 = require("./common");
|
|
19
|
-
Object.defineProperty(exports, "registerSerializer", { enumerable: true, get: function () { return common_1.registerSerializer; } });
|
|
20
|
-
__exportStar(require("./master/index"), exports);
|
|
21
|
-
var serializers_1 = require("./serializers");
|
|
22
|
-
Object.defineProperty(exports, "DefaultSerializer", { enumerable: true, get: function () { return serializers_1.DefaultSerializer; } });
|
|
23
|
-
var transferable_1 = require("./transferable");
|
|
24
|
-
Object.defineProperty(exports, "Transfer", { enumerable: true, get: function () { return transferable_1.Transfer; } });
|
|
25
|
-
var index_1 = require("./worker/index");
|
|
26
|
-
Object.defineProperty(exports, "expose", { enumerable: true, get: function () { return index_1.expose; } });
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getBundleURL = getBundleURLCached;
|
|
4
|
-
let bundleURL;
|
|
5
|
-
function getBundleURLCached() {
|
|
6
|
-
if (!bundleURL) {
|
|
7
|
-
bundleURL = getBundleURL();
|
|
8
|
-
}
|
|
9
|
-
return bundleURL;
|
|
10
|
-
}
|
|
11
|
-
function getBundleURL() {
|
|
12
|
-
try {
|
|
13
|
-
throw new Error('getBundleURL failed');
|
|
14
|
-
}
|
|
15
|
-
catch (err) {
|
|
16
|
-
const matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^\n)]+/g);
|
|
17
|
-
if (matches) {
|
|
18
|
-
return getBaseURL(matches[0]);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return '/';
|
|
22
|
-
}
|
|
23
|
-
function getBaseURL(url) {
|
|
24
|
-
return ('' + url).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/, '$1') + '/';
|
|
25
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.defaultPoolSize = void 0;
|
|
4
|
-
exports.getWorkerImplementation = getWorkerImplementation;
|
|
5
|
-
exports.isWorkerRuntime = isWorkerRuntime;
|
|
6
|
-
const get_bundle_url_browser_1 = require("./get-bundle-url.browser");
|
|
7
|
-
exports.defaultPoolSize = typeof navigator !== 'undefined' && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4;
|
|
8
|
-
const isAbsoluteURL = (value) => /^[A-Za-z][\d+.A-Za-z\-]*:/.test(value);
|
|
9
|
-
function createSourceBlobURL(code) {
|
|
10
|
-
const blob = new Blob([code], { type: 'application/javascript' });
|
|
11
|
-
return URL.createObjectURL(blob);
|
|
12
|
-
}
|
|
13
|
-
function selectWorkerImplementation() {
|
|
14
|
-
if (typeof Worker === 'undefined') {
|
|
15
|
-
return class NoWebWorker {
|
|
16
|
-
constructor() {
|
|
17
|
-
throw new Error("No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers.");
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
class WebWorker extends Worker {
|
|
22
|
-
constructor(url, options) {
|
|
23
|
-
if (typeof url === 'string' && options && options._baseURL) {
|
|
24
|
-
url = new URL(url, options._baseURL);
|
|
25
|
-
}
|
|
26
|
-
else if (typeof url === 'string' && !isAbsoluteURL(url) && /^file:\/\//i.test((0, get_bundle_url_browser_1.getBundleURL)())) {
|
|
27
|
-
url = new URL(url, (0, get_bundle_url_browser_1.getBundleURL)().replace(/\/[^/]+$/, '/'));
|
|
28
|
-
if (options?.CORSWorkaround ?? true) {
|
|
29
|
-
url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (typeof url === 'string'
|
|
33
|
-
&& isAbsoluteURL(url)
|
|
34
|
-
&& (options?.CORSWorkaround ?? true)) {
|
|
35
|
-
url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`);
|
|
36
|
-
}
|
|
37
|
-
super(url, options);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
class BlobWorker extends WebWorker {
|
|
41
|
-
constructor(blob, options) {
|
|
42
|
-
const url = globalThis.URL.createObjectURL(blob);
|
|
43
|
-
super(url, options);
|
|
44
|
-
}
|
|
45
|
-
static fromText(source, options) {
|
|
46
|
-
const blob = new globalThis.Blob([source], { type: 'text/javascript' });
|
|
47
|
-
return new BlobWorker(blob, options);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
blob: BlobWorker,
|
|
52
|
-
default: WebWorker,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
let implementation;
|
|
56
|
-
function getWorkerImplementation() {
|
|
57
|
-
if (!implementation) {
|
|
58
|
-
implementation = selectWorkerImplementation();
|
|
59
|
-
}
|
|
60
|
-
return implementation;
|
|
61
|
-
}
|
|
62
|
-
function isWorkerRuntime() {
|
|
63
|
-
const isWindowContext = typeof globalThis !== 'undefined' && typeof Window !== 'undefined' && globalThis instanceof Window;
|
|
64
|
-
return typeof globalThis !== 'undefined' && self['postMessage'] && !isWindowContext ? true : false;
|
|
65
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.isWorkerRuntime = exports.getWorkerImplementation = exports.defaultPoolSize = void 0;
|
|
37
|
-
const BrowserImplementation = __importStar(require("./implementation.browser"));
|
|
38
|
-
const NodeImplementation = __importStar(require("./implementation.node"));
|
|
39
|
-
const runningInNode = typeof process !== 'undefined' && process.arch !== 'browser' && 'pid' in process;
|
|
40
|
-
const implementation = runningInNode ? NodeImplementation : BrowserImplementation;
|
|
41
|
-
exports.defaultPoolSize = implementation.defaultPoolSize;
|
|
42
|
-
exports.getWorkerImplementation = implementation.getWorkerImplementation;
|
|
43
|
-
exports.isWorkerRuntime = implementation.isWorkerRuntime;
|