@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.
Files changed (89) hide show
  1. package/dist/es5/lib/env-utils/version.js +3 -3
  2. package/dist/es5/lib/env-utils/version.js.map +1 -1
  3. package/dist/es5/lib/library-utils/library-utils.js +2 -2
  4. package/dist/es5/lib/library-utils/library-utils.js.map +1 -1
  5. package/dist/es5/lib/node/worker_threads-browser.js +35 -0
  6. package/dist/es5/lib/node/worker_threads-browser.js.map +1 -0
  7. package/dist/es5/lib/worker-api/create-worker.js +1 -1
  8. package/dist/es5/lib/worker-api/create-worker.js.map +1 -1
  9. package/dist/es5/lib/worker-api/get-worker-url.js +2 -2
  10. package/dist/es5/lib/worker-api/get-worker-url.js.map +1 -1
  11. package/dist/es5/lib/worker-api/process-on-worker.js +17 -10
  12. package/dist/es5/lib/worker-api/process-on-worker.js.map +1 -1
  13. package/dist/es5/lib/worker-farm/worker-body.js +67 -22
  14. package/dist/es5/lib/worker-farm/worker-body.js.map +1 -1
  15. package/dist/es5/lib/worker-farm/worker-farm.js +4 -2
  16. package/dist/es5/lib/worker-farm/worker-farm.js.map +1 -1
  17. package/dist/es5/lib/worker-farm/worker-job.js +3 -9
  18. package/dist/es5/lib/worker-farm/worker-job.js.map +1 -1
  19. package/dist/es5/lib/worker-farm/worker-pool.js +5 -0
  20. package/dist/es5/lib/worker-farm/worker-pool.js.map +1 -1
  21. package/dist/es5/lib/worker-farm/worker-thread.js +38 -2
  22. package/dist/es5/lib/worker-farm/worker-thread.js.map +1 -1
  23. package/dist/es5/lib/worker-utils/get-loadable-worker-url.js.map +1 -1
  24. package/dist/esm/lib/env-utils/version.js +3 -3
  25. package/dist/esm/lib/env-utils/version.js.map +1 -1
  26. package/dist/esm/lib/library-utils/library-utils.js +2 -2
  27. package/dist/esm/lib/library-utils/library-utils.js.map +1 -1
  28. package/dist/esm/lib/node/worker_threads-browser.js +10 -0
  29. package/dist/esm/lib/node/worker_threads-browser.js.map +1 -0
  30. package/dist/esm/lib/worker-api/create-worker.js +1 -1
  31. package/dist/esm/lib/worker-api/create-worker.js.map +1 -1
  32. package/dist/esm/lib/worker-api/get-worker-url.js +2 -2
  33. package/dist/esm/lib/worker-api/get-worker-url.js.map +1 -1
  34. package/dist/esm/lib/worker-api/process-on-worker.js +12 -4
  35. package/dist/esm/lib/worker-api/process-on-worker.js.map +1 -1
  36. package/dist/esm/lib/worker-farm/worker-body.js +57 -18
  37. package/dist/esm/lib/worker-farm/worker-body.js.map +1 -1
  38. package/dist/esm/lib/worker-farm/worker-farm.js +4 -2
  39. package/dist/esm/lib/worker-farm/worker-farm.js.map +1 -1
  40. package/dist/esm/lib/worker-farm/worker-job.js +3 -9
  41. package/dist/esm/lib/worker-farm/worker-job.js.map +1 -1
  42. package/dist/esm/lib/worker-farm/worker-pool.js +4 -0
  43. package/dist/esm/lib/worker-farm/worker-pool.js.map +1 -1
  44. package/dist/esm/lib/worker-farm/worker-thread.js +31 -2
  45. package/dist/esm/lib/worker-farm/worker-thread.js.map +1 -1
  46. package/dist/esm/lib/worker-utils/get-loadable-worker-url.js.map +1 -1
  47. package/dist/lib/env-utils/version.js +1 -1
  48. package/dist/lib/library-utils/library-utils.js +1 -1
  49. package/dist/lib/node/worker_threads-browser.d.ts +7 -0
  50. package/dist/lib/node/worker_threads-browser.d.ts.map +1 -0
  51. package/dist/lib/node/worker_threads-browser.js +14 -0
  52. package/dist/lib/worker-api/create-worker.d.ts.map +1 -1
  53. package/dist/lib/worker-api/create-worker.js +1 -2
  54. package/dist/lib/worker-api/get-worker-url.js +1 -1
  55. package/dist/lib/worker-api/process-on-worker.d.ts.map +1 -1
  56. package/dist/lib/worker-api/process-on-worker.js +6 -2
  57. package/dist/lib/worker-farm/worker-body.d.ts +2 -0
  58. package/dist/lib/worker-farm/worker-body.d.ts.map +1 -1
  59. package/dist/lib/worker-farm/worker-body.js +62 -18
  60. package/dist/lib/worker-farm/worker-farm.d.ts +6 -2
  61. package/dist/lib/worker-farm/worker-farm.d.ts.map +1 -1
  62. package/dist/lib/worker-farm/worker-farm.js +4 -3
  63. package/dist/lib/worker-farm/worker-job.d.ts.map +1 -1
  64. package/dist/lib/worker-farm/worker-job.js +2 -2
  65. package/dist/lib/worker-farm/worker-pool.d.ts +2 -0
  66. package/dist/lib/worker-farm/worker-pool.d.ts.map +1 -1
  67. package/dist/lib/worker-farm/worker-pool.js +4 -0
  68. package/dist/lib/worker-farm/worker-thread.d.ts +10 -2
  69. package/dist/lib/worker-farm/worker-thread.d.ts.map +1 -1
  70. package/dist/lib/worker-farm/worker-thread.js +39 -5
  71. package/dist/lib/worker-utils/get-loadable-worker-url.js +0 -2
  72. package/dist/null-worker.js +45 -14
  73. package/dist/null-worker.js.map +2 -2
  74. package/dist/types.d.ts +6 -1
  75. package/dist/types.d.ts.map +1 -1
  76. package/package.json +3 -2
  77. package/src/lib/env-utils/version.ts +1 -1
  78. package/src/lib/library-utils/library-utils.ts +1 -1
  79. package/src/lib/node/worker_threads-browser.js +11 -0
  80. package/src/lib/worker-api/create-worker.ts +1 -2
  81. package/src/lib/worker-api/get-worker-url.ts +1 -1
  82. package/src/lib/worker-api/process-on-worker.ts +6 -2
  83. package/src/lib/worker-farm/worker-body.ts +61 -19
  84. package/src/lib/worker-farm/worker-farm.ts +10 -5
  85. package/src/lib/worker-farm/worker-job.ts +3 -6
  86. package/src/lib/worker-farm/worker-pool.ts +5 -0
  87. package/src/lib/worker-farm/worker-thread.ts +40 -7
  88. package/src/lib/worker-utils/get-loadable-worker-url.ts +0 -2
  89. 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
- // @ts-ignore
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 {ErrorEvent} event
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: object;
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;