@loaders.gl/worker-utils 3.1.8 → 3.2.0-alpha.3
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/es5/lib/env-utils/version.js +3 -3
- package/dist/es5/lib/env-utils/version.js.map +1 -1
- package/dist/es5/lib/library-utils/library-utils.js +2 -2
- package/dist/es5/lib/library-utils/library-utils.js.map +1 -1
- package/dist/es5/lib/node/worker_threads-browser.js +35 -0
- package/dist/es5/lib/node/worker_threads-browser.js.map +1 -0
- package/dist/es5/lib/worker-api/create-worker.js +1 -1
- package/dist/es5/lib/worker-api/create-worker.js.map +1 -1
- package/dist/es5/lib/worker-api/get-worker-url.js +2 -2
- package/dist/es5/lib/worker-api/get-worker-url.js.map +1 -1
- package/dist/es5/lib/worker-api/process-on-worker.js +17 -10
- package/dist/es5/lib/worker-api/process-on-worker.js.map +1 -1
- package/dist/es5/lib/worker-farm/worker-body.js +67 -22
- package/dist/es5/lib/worker-farm/worker-body.js.map +1 -1
- package/dist/es5/lib/worker-farm/worker-farm.js +4 -2
- package/dist/es5/lib/worker-farm/worker-farm.js.map +1 -1
- package/dist/es5/lib/worker-farm/worker-job.js +3 -9
- package/dist/es5/lib/worker-farm/worker-job.js.map +1 -1
- package/dist/es5/lib/worker-farm/worker-pool.js +5 -0
- package/dist/es5/lib/worker-farm/worker-pool.js.map +1 -1
- package/dist/es5/lib/worker-farm/worker-thread.js +38 -2
- package/dist/es5/lib/worker-farm/worker-thread.js.map +1 -1
- package/dist/es5/lib/worker-utils/get-loadable-worker-url.js.map +1 -1
- package/dist/esm/lib/env-utils/version.js +3 -3
- package/dist/esm/lib/env-utils/version.js.map +1 -1
- package/dist/esm/lib/library-utils/library-utils.js +2 -2
- package/dist/esm/lib/library-utils/library-utils.js.map +1 -1
- package/dist/esm/lib/node/worker_threads-browser.js +10 -0
- package/dist/esm/lib/node/worker_threads-browser.js.map +1 -0
- package/dist/esm/lib/worker-api/create-worker.js +1 -1
- package/dist/esm/lib/worker-api/create-worker.js.map +1 -1
- package/dist/esm/lib/worker-api/get-worker-url.js +2 -2
- package/dist/esm/lib/worker-api/get-worker-url.js.map +1 -1
- package/dist/esm/lib/worker-api/process-on-worker.js +12 -4
- package/dist/esm/lib/worker-api/process-on-worker.js.map +1 -1
- package/dist/esm/lib/worker-farm/worker-body.js +57 -18
- package/dist/esm/lib/worker-farm/worker-body.js.map +1 -1
- package/dist/esm/lib/worker-farm/worker-farm.js +4 -2
- package/dist/esm/lib/worker-farm/worker-farm.js.map +1 -1
- package/dist/esm/lib/worker-farm/worker-job.js +3 -9
- package/dist/esm/lib/worker-farm/worker-job.js.map +1 -1
- package/dist/esm/lib/worker-farm/worker-pool.js +4 -0
- package/dist/esm/lib/worker-farm/worker-pool.js.map +1 -1
- package/dist/esm/lib/worker-farm/worker-thread.js +31 -2
- package/dist/esm/lib/worker-farm/worker-thread.js.map +1 -1
- package/dist/esm/lib/worker-utils/get-loadable-worker-url.js.map +1 -1
- package/dist/lib/env-utils/version.js +1 -1
- package/dist/lib/library-utils/library-utils.js +1 -1
- package/dist/lib/node/worker_threads-browser.d.ts +7 -0
- package/dist/lib/node/worker_threads-browser.d.ts.map +1 -0
- package/dist/lib/node/worker_threads-browser.js +14 -0
- package/dist/lib/worker-api/create-worker.d.ts.map +1 -1
- package/dist/lib/worker-api/create-worker.js +1 -2
- package/dist/lib/worker-api/get-worker-url.js +1 -1
- package/dist/lib/worker-api/process-on-worker.d.ts.map +1 -1
- package/dist/lib/worker-api/process-on-worker.js +6 -2
- package/dist/lib/worker-farm/worker-body.d.ts +2 -0
- package/dist/lib/worker-farm/worker-body.d.ts.map +1 -1
- package/dist/lib/worker-farm/worker-body.js +62 -18
- package/dist/lib/worker-farm/worker-farm.d.ts +6 -2
- package/dist/lib/worker-farm/worker-farm.d.ts.map +1 -1
- package/dist/lib/worker-farm/worker-farm.js +4 -3
- package/dist/lib/worker-farm/worker-job.d.ts.map +1 -1
- package/dist/lib/worker-farm/worker-job.js +2 -2
- package/dist/lib/worker-farm/worker-pool.d.ts +2 -0
- package/dist/lib/worker-farm/worker-pool.d.ts.map +1 -1
- package/dist/lib/worker-farm/worker-pool.js +4 -0
- package/dist/lib/worker-farm/worker-thread.d.ts +10 -2
- package/dist/lib/worker-farm/worker-thread.d.ts.map +1 -1
- package/dist/lib/worker-farm/worker-thread.js +39 -5
- package/dist/lib/worker-utils/get-loadable-worker-url.js +0 -2
- package/dist/null-worker.js +45 -14
- package/dist/null-worker.js.map +2 -2
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/src/lib/env-utils/version.ts +1 -1
- package/src/lib/library-utils/library-utils.ts +1 -1
- package/src/lib/node/worker_threads-browser.js +11 -0
- package/src/lib/worker-api/create-worker.ts +1 -2
- package/src/lib/worker-api/get-worker-url.ts +1 -1
- package/src/lib/worker-api/process-on-worker.ts +6 -2
- package/src/lib/worker-farm/worker-body.ts +61 -19
- package/src/lib/worker-farm/worker-farm.ts +10 -5
- package/src/lib/worker-farm/worker-job.ts +3 -6
- package/src/lib/worker-farm/worker-pool.ts +5 -0
- package/src/lib/worker-farm/worker-thread.ts +40 -7
- package/src/lib/worker-utils/get-loadable-worker-url.ts +0 -2
- package/src/types.ts +2 -1
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import {Worker as NodeWorker} from 'worker_threads';
|
|
2
|
+
import {isBrowser} from '../env-utils/globals';
|
|
1
3
|
import {assert} from '../env-utils/assert';
|
|
2
4
|
import {getLoadableWorkerURL} from '../worker-utils/get-loadable-worker-url';
|
|
3
5
|
import {getTransferList} from '../worker-utils/get-transfer-list';
|
|
@@ -18,14 +20,15 @@ export default class WorkerThread {
|
|
|
18
20
|
readonly source: string | undefined;
|
|
19
21
|
readonly url: string | undefined;
|
|
20
22
|
terminated: boolean = false;
|
|
21
|
-
worker: Worker;
|
|
23
|
+
worker: Worker | NodeWorker;
|
|
22
24
|
onMessage: (message: any) => void;
|
|
23
25
|
onError: (error: Error) => void;
|
|
24
26
|
|
|
25
27
|
private _loadableURL: string = '';
|
|
26
28
|
|
|
29
|
+
/** Checks if workers are supported on this platform */
|
|
27
30
|
static isSupported(): boolean {
|
|
28
|
-
return typeof Worker !== 'undefined';
|
|
31
|
+
return (typeof Worker !== 'undefined' && isBrowser) || typeof NodeWorker !== undefined;
|
|
29
32
|
}
|
|
30
33
|
|
|
31
34
|
constructor(props: WorkerThreadProps) {
|
|
@@ -37,7 +40,7 @@ export default class WorkerThread {
|
|
|
37
40
|
this.onMessage = NOOP;
|
|
38
41
|
this.onError = (error) => console.log(error); // eslint-disable-line
|
|
39
42
|
|
|
40
|
-
this.worker = this._createBrowserWorker();
|
|
43
|
+
this.worker = isBrowser ? this._createBrowserWorker() : this._createNodeWorker();
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
/**
|
|
@@ -47,8 +50,7 @@ export default class WorkerThread {
|
|
|
47
50
|
destroy(): void {
|
|
48
51
|
this.onMessage = NOOP;
|
|
49
52
|
this.onError = NOOP;
|
|
50
|
-
// @
|
|
51
|
-
this.worker.terminate();
|
|
53
|
+
this.worker.terminate(); // eslint-disable-line @typescript-eslint/no-floating-promises
|
|
52
54
|
this.terminated = true;
|
|
53
55
|
}
|
|
54
56
|
|
|
@@ -71,7 +73,7 @@ export default class WorkerThread {
|
|
|
71
73
|
|
|
72
74
|
/**
|
|
73
75
|
* Generate a standard Error from an ErrorEvent
|
|
74
|
-
* @param
|
|
76
|
+
* @param event
|
|
75
77
|
*/
|
|
76
78
|
_getErrorFromErrorEvent(event: ErrorEvent): Error {
|
|
77
79
|
// Note Error object does not have the expected fields if loading failed completely
|
|
@@ -93,7 +95,7 @@ export default class WorkerThread {
|
|
|
93
95
|
/**
|
|
94
96
|
* Creates a worker thread on the browser
|
|
95
97
|
*/
|
|
96
|
-
_createBrowserWorker() {
|
|
98
|
+
_createBrowserWorker(): Worker {
|
|
97
99
|
this._loadableURL = getLoadableWorkerURL({source: this.source, url: this.url});
|
|
98
100
|
const worker = new Worker(this._loadableURL, {name: this.name});
|
|
99
101
|
|
|
@@ -114,4 +116,35 @@ export default class WorkerThread {
|
|
|
114
116
|
|
|
115
117
|
return worker;
|
|
116
118
|
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Creates a worker thread in node.js
|
|
122
|
+
* @todo https://nodejs.org/api/async_hooks.html#async-resource-worker-pool
|
|
123
|
+
*/
|
|
124
|
+
_createNodeWorker(): NodeWorker {
|
|
125
|
+
let worker: NodeWorker;
|
|
126
|
+
if (this.url) {
|
|
127
|
+
// Make sure relative URLs start with './'
|
|
128
|
+
const absolute = this.url.includes(':/') || this.url.startsWith('/');
|
|
129
|
+
const url = absolute ? this.url : `./${this.url}`;
|
|
130
|
+
// console.log('Starting work from', url);
|
|
131
|
+
worker = new NodeWorker(url, {eval: false});
|
|
132
|
+
} else if (this.source) {
|
|
133
|
+
worker = new NodeWorker(this.source, {eval: true});
|
|
134
|
+
} else {
|
|
135
|
+
throw new Error('no worker');
|
|
136
|
+
}
|
|
137
|
+
worker.on('message', (data) => {
|
|
138
|
+
// console.error('message', data);
|
|
139
|
+
this.onMessage(data);
|
|
140
|
+
});
|
|
141
|
+
worker.on('error', (error) => {
|
|
142
|
+
// console.error('error', error);
|
|
143
|
+
this.onError(error);
|
|
144
|
+
});
|
|
145
|
+
worker.on('exit', (code) => {
|
|
146
|
+
// console.error('exit', code);
|
|
147
|
+
});
|
|
148
|
+
return worker;
|
|
149
|
+
}
|
|
117
150
|
}
|
|
@@ -54,8 +54,6 @@ function getLoadableWorkerURLFromURL(url: string): string {
|
|
|
54
54
|
* @returns loadable url
|
|
55
55
|
*/
|
|
56
56
|
function getLoadableWorkerURLFromSource(workerSource: string): string {
|
|
57
|
-
// NOTE: webworkify was previously used
|
|
58
|
-
// const blob = webworkify(workerSource, {bare: true});
|
|
59
57
|
const blob = new Blob([workerSource], {type: 'application/javascript'});
|
|
60
58
|
return URL.createObjectURL(blob);
|
|
61
59
|
}
|
package/src/types.ts
CHANGED
|
@@ -35,7 +35,7 @@ export type WorkerObject = {
|
|
|
35
35
|
module: string;
|
|
36
36
|
version: string;
|
|
37
37
|
worker?: string | boolean;
|
|
38
|
-
options:
|
|
38
|
+
options: {[key: string]: any};
|
|
39
39
|
deprecatedOptions?: object;
|
|
40
40
|
|
|
41
41
|
process?: Process;
|
|
@@ -71,6 +71,7 @@ export type WorkerMessageType =
|
|
|
71
71
|
export type WorkerMessagePayload = {
|
|
72
72
|
id?: number;
|
|
73
73
|
options?: {[key: string]: any};
|
|
74
|
+
context?: {[key: string]: any};
|
|
74
75
|
input?: any; // Transferable;
|
|
75
76
|
result?: any; // Transferable
|
|
76
77
|
error?: string;
|