@loaders.gl/worker-utils 4.0.0-alpha.5 → 4.0.0-alpha.7

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 (198) hide show
  1. package/dist/es5/index.js +148 -0
  2. package/dist/es5/index.js.map +1 -0
  3. package/dist/es5/lib/async-queue/async-queue.js +100 -0
  4. package/dist/es5/lib/async-queue/async-queue.js.map +1 -0
  5. package/dist/es5/lib/env-utils/assert.js +12 -0
  6. package/dist/es5/lib/env-utils/assert.js.map +1 -0
  7. package/dist/es5/lib/env-utils/globals.js +32 -0
  8. package/dist/es5/lib/env-utils/globals.js.map +1 -0
  9. package/dist/es5/lib/env-utils/version.js +13 -0
  10. package/dist/es5/lib/env-utils/version.js.map +1 -0
  11. package/dist/es5/lib/library-utils/library-utils.js +154 -0
  12. package/dist/es5/lib/library-utils/library-utils.js.map +1 -0
  13. package/dist/es5/lib/node/require-utils.node.js +71 -0
  14. package/dist/es5/lib/node/require-utils.node.js.map +1 -0
  15. package/dist/es5/lib/node/worker_threads-browser.js +23 -0
  16. package/dist/es5/lib/node/worker_threads-browser.js.map +1 -0
  17. package/dist/es5/lib/node/worker_threads.js +27 -0
  18. package/dist/es5/lib/node/worker_threads.js.map +1 -0
  19. package/dist/es5/lib/process-utils/child-process-proxy.js +193 -0
  20. package/dist/es5/lib/process-utils/child-process-proxy.js.map +1 -0
  21. package/dist/es5/lib/process-utils/process-utils.js +33 -0
  22. package/dist/es5/lib/process-utils/process-utils.js.map +1 -0
  23. package/dist/es5/lib/worker-api/create-worker.js +166 -0
  24. package/dist/es5/lib/worker-api/create-worker.js.map +1 -0
  25. package/dist/es5/lib/worker-api/get-worker-url.js +39 -0
  26. package/dist/es5/lib/worker-api/get-worker-url.js.map +1 -0
  27. package/dist/es5/lib/worker-api/process-on-worker.js +137 -0
  28. package/dist/es5/lib/worker-api/process-on-worker.js.map +1 -0
  29. package/dist/es5/lib/worker-api/validate-worker-version.js +25 -0
  30. package/dist/es5/lib/worker-api/validate-worker-version.js.map +1 -0
  31. package/dist/es5/lib/worker-farm/worker-body.js +109 -0
  32. package/dist/es5/lib/worker-farm/worker-body.js.map +1 -0
  33. package/dist/es5/lib/worker-farm/worker-farm.js +113 -0
  34. package/dist/es5/lib/worker-farm/worker-farm.js.map +1 -0
  35. package/dist/es5/lib/worker-farm/worker-job.js +56 -0
  36. package/dist/es5/lib/worker-farm/worker-job.js.map +1 -0
  37. package/dist/es5/lib/worker-farm/worker-pool.js +211 -0
  38. package/dist/es5/lib/worker-farm/worker-pool.js.map +1 -0
  39. package/dist/es5/lib/worker-farm/worker-thread.js +136 -0
  40. package/dist/es5/lib/worker-farm/worker-thread.js.map +1 -0
  41. package/dist/es5/lib/worker-utils/get-loadable-worker-url.js +41 -0
  42. package/dist/es5/lib/worker-utils/get-loadable-worker-url.js.map +1 -0
  43. package/dist/es5/lib/worker-utils/get-transfer-list.js +59 -0
  44. package/dist/es5/lib/worker-utils/get-transfer-list.js.map +1 -0
  45. package/dist/es5/lib/worker-utils/remove-nontransferable-options.js +25 -0
  46. package/dist/es5/lib/worker-utils/remove-nontransferable-options.js.map +1 -0
  47. package/dist/es5/types.js +2 -0
  48. package/dist/es5/types.js.map +1 -0
  49. package/dist/es5/workers/null-worker.js +23 -0
  50. package/dist/es5/workers/null-worker.js.map +1 -0
  51. package/dist/esm/index.js +26 -0
  52. package/dist/esm/index.js.map +1 -0
  53. package/dist/esm/lib/async-queue/async-queue.js +76 -0
  54. package/dist/esm/lib/async-queue/async-queue.js.map +1 -0
  55. package/dist/esm/lib/env-utils/assert.js +6 -0
  56. package/dist/esm/lib/env-utils/assert.js.map +1 -0
  57. package/dist/esm/lib/env-utils/globals.js +17 -0
  58. package/dist/esm/lib/env-utils/globals.js.map +1 -0
  59. package/dist/esm/lib/env-utils/version.js +6 -0
  60. package/dist/esm/lib/env-utils/version.js.map +1 -0
  61. package/dist/esm/lib/library-utils/library-utils.js +74 -0
  62. package/dist/esm/lib/library-utils/library-utils.js.map +1 -0
  63. package/dist/esm/lib/node/require-utils.node.js +36 -0
  64. package/dist/esm/lib/node/require-utils.node.js.map +1 -0
  65. package/dist/esm/lib/node/worker_threads-browser.js +7 -0
  66. package/dist/esm/lib/node/worker_threads-browser.js.map +1 -0
  67. package/dist/esm/lib/node/worker_threads.js +4 -0
  68. package/dist/esm/lib/node/worker_threads.js.map +1 -0
  69. package/dist/esm/lib/process-utils/child-process-proxy.js +104 -0
  70. package/dist/esm/lib/process-utils/child-process-proxy.js.map +1 -0
  71. package/dist/esm/lib/process-utils/process-utils.js +26 -0
  72. package/dist/esm/lib/process-utils/process-utils.js.map +1 -0
  73. package/dist/esm/lib/worker-api/create-worker.js +84 -0
  74. package/dist/esm/lib/worker-api/create-worker.js.map +1 -0
  75. package/dist/esm/lib/worker-api/get-worker-url.js +32 -0
  76. package/dist/esm/lib/worker-api/get-worker-url.js.map +1 -0
  77. package/dist/esm/lib/worker-api/process-on-worker.js +75 -0
  78. package/dist/esm/lib/worker-api/process-on-worker.js.map +1 -0
  79. package/dist/esm/lib/worker-api/validate-worker-version.js +19 -0
  80. package/dist/esm/lib/worker-api/validate-worker-version.js.map +1 -0
  81. package/dist/esm/lib/worker-farm/worker-body.js +86 -0
  82. package/dist/esm/lib/worker-farm/worker-body.js.map +1 -0
  83. package/dist/esm/lib/worker-farm/worker-farm.js +72 -0
  84. package/dist/esm/lib/worker-farm/worker-farm.js.map +1 -0
  85. package/dist/esm/lib/worker-farm/worker-job.js +36 -0
  86. package/dist/esm/lib/worker-farm/worker-job.js.map +1 -0
  87. package/dist/esm/lib/worker-farm/worker-pool.js +124 -0
  88. package/dist/esm/lib/worker-farm/worker-pool.js.map +1 -0
  89. package/dist/esm/lib/worker-farm/worker-thread.js +105 -0
  90. package/dist/esm/lib/worker-farm/worker-thread.js.map +1 -0
  91. package/dist/esm/lib/worker-utils/get-loadable-worker-url.js +35 -0
  92. package/dist/esm/lib/worker-utils/get-loadable-worker-url.js.map +1 -0
  93. package/dist/esm/lib/worker-utils/get-transfer-list.js +50 -0
  94. package/dist/esm/lib/worker-utils/get-transfer-list.js.map +1 -0
  95. package/dist/esm/lib/worker-utils/remove-nontransferable-options.js +17 -0
  96. package/dist/esm/lib/worker-utils/remove-nontransferable-options.js.map +1 -0
  97. package/dist/esm/types.js +2 -0
  98. package/dist/esm/types.js.map +1 -0
  99. package/dist/esm/workers/null-worker.js +5 -0
  100. package/dist/esm/workers/null-worker.js.map +1 -0
  101. package/dist/index.d.ts +1 -1
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +58 -25
  104. package/dist/lib/async-queue/async-queue.js +81 -91
  105. package/dist/lib/env-utils/assert.js +12 -5
  106. package/dist/lib/env-utils/globals.js +25 -10
  107. package/dist/lib/env-utils/version.js +10 -5
  108. package/dist/lib/library-utils/library-utils.d.ts.map +1 -1
  109. package/dist/lib/library-utils/library-utils.js +161 -79
  110. package/dist/lib/node/require-utils.node.js +58 -41
  111. package/dist/lib/node/worker_threads-browser.d.ts +7 -0
  112. package/dist/lib/node/worker_threads-browser.d.ts.map +1 -0
  113. package/dist/lib/node/worker_threads-browser.js +15 -0
  114. package/dist/lib/node/worker_threads.d.ts +6 -0
  115. package/dist/lib/node/worker_threads.d.ts.map +1 -0
  116. package/dist/lib/node/worker_threads.js +33 -0
  117. package/dist/lib/process-utils/child-process-proxy.d.ts +1 -1
  118. package/dist/lib/process-utils/child-process-proxy.d.ts.map +1 -1
  119. package/dist/lib/process-utils/child-process-proxy.js +126 -113
  120. package/dist/lib/process-utils/process-utils.js +33 -27
  121. package/dist/lib/worker-api/create-worker.d.ts +1 -1
  122. package/dist/lib/worker-api/create-worker.d.ts.map +1 -1
  123. package/dist/lib/worker-api/create-worker.js +84 -92
  124. package/dist/lib/worker-api/get-worker-url.d.ts.map +1 -1
  125. package/dist/lib/worker-api/get-worker-url.js +56 -33
  126. package/dist/lib/worker-api/process-on-worker.d.ts +1 -1
  127. package/dist/lib/worker-api/process-on-worker.d.ts.map +1 -1
  128. package/dist/lib/worker-api/process-on-worker.js +79 -71
  129. package/dist/lib/worker-api/validate-worker-version.js +32 -18
  130. package/dist/lib/worker-farm/worker-body.d.ts +2 -0
  131. package/dist/lib/worker-farm/worker-body.d.ts.map +1 -1
  132. package/dist/lib/worker-farm/worker-body.js +104 -58
  133. package/dist/lib/worker-farm/worker-farm.d.ts +7 -3
  134. package/dist/lib/worker-farm/worker-farm.d.ts.map +1 -1
  135. package/dist/lib/worker-farm/worker-farm.js +83 -77
  136. package/dist/lib/worker-farm/worker-job.d.ts.map +1 -1
  137. package/dist/lib/worker-farm/worker-job.js +46 -53
  138. package/dist/lib/worker-farm/worker-pool.d.ts +6 -4
  139. package/dist/lib/worker-farm/worker-pool.d.ts.map +1 -1
  140. package/dist/lib/worker-farm/worker-pool.js +154 -147
  141. package/dist/lib/worker-farm/worker-thread.d.ts +10 -3
  142. package/dist/lib/worker-farm/worker-thread.d.ts.map +1 -1
  143. package/dist/lib/worker-farm/worker-thread.js +128 -102
  144. package/dist/lib/worker-utils/get-loadable-worker-url.js +63 -33
  145. package/dist/lib/worker-utils/get-transfer-list.d.ts +5 -0
  146. package/dist/lib/worker-utils/get-transfer-list.d.ts.map +1 -1
  147. package/dist/lib/worker-utils/get-transfer-list.js +83 -36
  148. package/dist/lib/worker-utils/remove-nontransferable-options.d.ts +3 -3
  149. package/dist/lib/worker-utils/remove-nontransferable-options.d.ts.map +1 -1
  150. package/dist/lib/worker-utils/remove-nontransferable-options.js +25 -21
  151. package/dist/null-worker-node.js +244 -0
  152. package/dist/null-worker-node.js.map +7 -0
  153. package/dist/null-worker.js +45 -14
  154. package/dist/null-worker.js.map +2 -2
  155. package/dist/types.d.ts +16 -11
  156. package/dist/types.d.ts.map +1 -1
  157. package/dist/types.js +2 -2
  158. package/dist/workers/null-worker.js +6 -4
  159. package/package.json +11 -6
  160. package/src/index.ts +1 -1
  161. package/src/lib/library-utils/library-utils.ts +4 -1
  162. package/src/lib/node/worker_threads-browser.ts +13 -0
  163. package/src/lib/node/worker_threads.ts +6 -0
  164. package/src/lib/worker-api/create-worker.ts +1 -2
  165. package/src/lib/worker-api/get-worker-url.ts +5 -2
  166. package/src/lib/worker-api/process-on-worker.ts +8 -4
  167. package/src/lib/worker-farm/worker-body.ts +61 -19
  168. package/src/lib/worker-farm/worker-farm.ts +10 -5
  169. package/src/lib/worker-farm/worker-job.ts +3 -6
  170. package/src/lib/worker-farm/worker-pool.ts +15 -2
  171. package/src/lib/worker-farm/worker-thread.ts +45 -7
  172. package/src/lib/worker-utils/get-loadable-worker-url.ts +0 -2
  173. package/src/lib/worker-utils/get-transfer-list.ts +28 -0
  174. package/src/lib/worker-utils/remove-nontransferable-options.ts +17 -25
  175. package/src/types.ts +3 -2
  176. package/dist/index.js.map +0 -1
  177. package/dist/lib/async-queue/async-queue.js.map +0 -1
  178. package/dist/lib/env-utils/assert.js.map +0 -1
  179. package/dist/lib/env-utils/globals.js.map +0 -1
  180. package/dist/lib/env-utils/version.js.map +0 -1
  181. package/dist/lib/library-utils/library-utils.js.map +0 -1
  182. package/dist/lib/node/require-utils.node.js.map +0 -1
  183. package/dist/lib/process-utils/child-process-proxy.js.map +0 -1
  184. package/dist/lib/process-utils/process-utils.js.map +0 -1
  185. package/dist/lib/worker-api/create-worker.js.map +0 -1
  186. package/dist/lib/worker-api/get-worker-url.js.map +0 -1
  187. package/dist/lib/worker-api/process-on-worker.js.map +0 -1
  188. package/dist/lib/worker-api/validate-worker-version.js.map +0 -1
  189. package/dist/lib/worker-farm/worker-body.js.map +0 -1
  190. package/dist/lib/worker-farm/worker-farm.js.map +0 -1
  191. package/dist/lib/worker-farm/worker-job.js.map +0 -1
  192. package/dist/lib/worker-farm/worker-pool.js.map +0 -1
  193. package/dist/lib/worker-farm/worker-thread.js.map +0 -1
  194. package/dist/lib/worker-utils/get-loadable-worker-url.js.map +0 -1
  195. package/dist/lib/worker-utils/get-transfer-list.js.map +0 -1
  196. package/dist/lib/worker-utils/remove-nontransferable-options.js.map +0 -1
  197. package/dist/types.js.map +0 -1
  198. package/dist/workers/null-worker.js.map +0 -1
@@ -1,54 +1,47 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { assert } from '../env-utils/assert';
3
- export default class WorkerJob {
4
- constructor(jobName, workerThread) {
5
- _defineProperty(this, "name", void 0);
6
-
7
- _defineProperty(this, "workerThread", void 0);
8
-
9
- _defineProperty(this, "isRunning", void 0);
10
-
11
- _defineProperty(this, "result", void 0);
12
-
13
- _defineProperty(this, "_resolve", void 0);
14
-
15
- _defineProperty(this, "_reject", void 0);
16
-
17
- this.name = jobName;
18
- this.workerThread = workerThread;
19
- this.isRunning = true;
20
-
21
- this._resolve = () => {};
22
-
23
- this._reject = () => {};
24
-
25
- this.result = new Promise((resolve, reject) => {
26
- this._resolve = resolve;
27
- this._reject = reject;
28
- });
29
- }
30
-
31
- postMessage(type, payload) {
32
- this.workerThread.postMessage({
33
- source: 'loaders.gl',
34
- type,
35
- payload
36
- });
37
- }
38
-
39
- done(value) {
40
- assert(this.isRunning);
41
- this.isRunning = false;
42
-
43
- this._resolve(value);
44
- }
45
-
46
- error(error) {
47
- assert(this.isRunning);
48
- this.isRunning = false;
49
-
50
- this._reject(error);
51
- }
52
-
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const assert_1 = require("../env-utils/assert");
4
+ /**
5
+ * Represents one Job handled by a WorkerPool or WorkerFarm
6
+ */
7
+ class WorkerJob {
8
+ constructor(jobName, workerThread) {
9
+ this.isRunning = true;
10
+ this._resolve = () => { };
11
+ this._reject = () => { };
12
+ this.name = jobName;
13
+ this.workerThread = workerThread;
14
+ this.result = new Promise((resolve, reject) => {
15
+ this._resolve = resolve;
16
+ this._reject = reject;
17
+ });
18
+ }
19
+ /**
20
+ * Send a message to the job's worker thread
21
+ * @param data any data structure, ideally consisting mostly of transferrable objects
22
+ */
23
+ postMessage(type, payload) {
24
+ this.workerThread.postMessage({
25
+ source: 'loaders.gl',
26
+ type,
27
+ payload
28
+ });
29
+ }
30
+ /**
31
+ * Call to resolve the `result` Promise with the supplied value
32
+ */
33
+ done(value) {
34
+ (0, assert_1.assert)(this.isRunning);
35
+ this.isRunning = false;
36
+ this._resolve(value);
37
+ }
38
+ /**
39
+ * Call to reject the `result` Promise with the supplied error
40
+ */
41
+ error(error) {
42
+ (0, assert_1.assert)(this.isRunning);
43
+ this.isRunning = false;
44
+ this._reject(error);
45
+ }
53
46
  }
54
- //# sourceMappingURL=worker-job.js.map
47
+ exports.default = WorkerJob;
@@ -2,7 +2,7 @@ import type { WorkerMessageType, WorkerMessagePayload } from '../../types';
2
2
  import WorkerThread from './worker-thread';
3
3
  import WorkerJob from './worker-job';
4
4
  /** WorkerPool onDebug Callback Parameters */
5
- declare type OnDebugParameters = {
5
+ type OnDebugParameters = {
6
6
  message: string;
7
7
  worker: string;
8
8
  name: string;
@@ -11,7 +11,7 @@ declare type OnDebugParameters = {
11
11
  workerThread: WorkerThread;
12
12
  };
13
13
  /** WorkerPool Properties */
14
- export declare type WorkerPoolProps = {
14
+ export type WorkerPoolProps = {
15
15
  name?: string;
16
16
  source?: string;
17
17
  url?: string;
@@ -21,8 +21,8 @@ export declare type WorkerPoolProps = {
21
21
  reuseWorkers?: boolean;
22
22
  };
23
23
  /** Private helper types */
24
- declare type OnMessage = (job: WorkerJob, type: WorkerMessageType, payload: WorkerMessagePayload) => void;
25
- declare type OnError = (job: WorkerJob, error: Error) => void;
24
+ type OnMessage = (job: WorkerJob, type: WorkerMessageType, payload: WorkerMessagePayload) => void;
25
+ type OnError = (job: WorkerJob, error: Error) => void;
26
26
  /**
27
27
  * Process multiple data messages with small pool of identical workers
28
28
  */
@@ -39,6 +39,8 @@ export default class WorkerPool {
39
39
  private idleQueue;
40
40
  private count;
41
41
  private isDestroyed;
42
+ /** Checks if workers are supported on this platform */
43
+ static isSupported(): boolean;
42
44
  /**
43
45
  * @param processor - worker function
44
46
  * @param maxConcurrency - max count of workers
@@ -1 +1 @@
1
- {"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../../src/lib/worker-farm/worker-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEzE,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,6CAA6C;AAC7C,aAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,4BAA4B;AAC5B,oBAAY,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,GAAG,CAAC;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,2BAA2B;AAC3B,aAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAClG,aAAK,OAAO,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAStD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,IAAI,EAAE,MAAM,CAAa;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAK;IAC3B,oBAAoB,EAAE,MAAM,CAAK;IACjC,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,GAAG,CAAY;IACxD,YAAY,EAAE,OAAO,CAAQ;IAE7B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;gBACS,KAAK,EAAE,eAAe;IAMlC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAMf,QAAQ,CAAC,KAAK,EAAE,eAAe;IAoBzB,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,SAA+C,EAC1D,OAAO,GAAE,OAA0C,GAClD,OAAO,CAAC,SAAS,CAAC;IAarB;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCtC;;;;;;;OAOG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY;IAgBxC;;OAEG;IACH,mBAAmB,IAAI,YAAY,GAAG,IAAI;IAiB1C,kBAAkB;CAGnB"}
1
+ {"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../../../src/lib/worker-farm/worker-pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAE,oBAAoB,EAAC,MAAM,aAAa,CAAC;AAEzE,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,6CAA6C;AAC7C,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;CAC5B,CAAC;AAEF,4BAA4B;AAC5B,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,GAAG,CAAC;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,2BAA2B;AAC3B,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAClG,KAAK,OAAO,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAStD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,IAAI,EAAE,MAAM,CAAa;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAK;IAC3B,oBAAoB,EAAE,MAAM,CAAK;IACjC,OAAO,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,GAAG,CAAY;IACxD,YAAY,EAAE,OAAO,CAAQ;IAE7B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,WAAW,CAAS;IAE5B,uDAAuD;IACvD,MAAM,CAAC,WAAW,IAAI,OAAO;IAI7B;;;OAGG;gBACS,KAAK,EAAE,eAAe;IAMlC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAMf,QAAQ,CAAC,KAAK,EAAE,eAAe;IAoBzB,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,SAAS,GAAE,SAA+C,EAC1D,OAAO,GAAE,OAA0C,GAClD,OAAO,CAAC,SAAS,CAAC;IAarB;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCtC;;;;;;;OAOG;IACH,mBAAmB,CAAC,MAAM,EAAE,YAAY;IAwBxC;;OAEG;IACH,mBAAmB,IAAI,YAAY,GAAG,IAAI;IAiB1C,kBAAkB;CAGnB"}
@@ -1,157 +1,164 @@
1
- import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
- import { isMobile } from '../env-utils/globals';
3
- import WorkerThread from './worker-thread';
4
- import WorkerJob from './worker-job';
5
- export default class WorkerPool {
6
- constructor(props) {
7
- _defineProperty(this, "name", 'unnamed');
8
-
9
- _defineProperty(this, "source", void 0);
10
-
11
- _defineProperty(this, "url", void 0);
12
-
13
- _defineProperty(this, "maxConcurrency", 1);
14
-
15
- _defineProperty(this, "maxMobileConcurrency", 1);
16
-
17
- _defineProperty(this, "onDebug", () => {});
18
-
19
- _defineProperty(this, "reuseWorkers", true);
20
-
21
- _defineProperty(this, "props", {});
22
-
23
- _defineProperty(this, "jobQueue", []);
24
-
25
- _defineProperty(this, "idleQueue", []);
26
-
27
- _defineProperty(this, "count", 0);
28
-
29
- _defineProperty(this, "isDestroyed", false);
30
-
31
- this.source = props.source;
32
- this.url = props.url;
33
- this.setProps(props);
34
- }
35
-
36
- destroy() {
37
- this.idleQueue.forEach(worker => worker.destroy());
38
- this.isDestroyed = true;
39
- }
40
-
41
- setProps(props) {
42
- this.props = { ...this.props,
43
- ...props
44
- };
45
-
46
- if (props.name !== undefined) {
47
- this.name = props.name;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const globals_1 = require("../env-utils/globals");
7
+ const worker_thread_1 = __importDefault(require("./worker-thread"));
8
+ const worker_job_1 = __importDefault(require("./worker-job"));
9
+ /**
10
+ * Process multiple data messages with small pool of identical workers
11
+ */
12
+ class WorkerPool {
13
+ /** Checks if workers are supported on this platform */
14
+ static isSupported() {
15
+ return worker_thread_1.default.isSupported();
48
16
  }
49
-
50
- if (props.maxConcurrency !== undefined) {
51
- this.maxConcurrency = props.maxConcurrency;
17
+ /**
18
+ * @param processor - worker function
19
+ * @param maxConcurrency - max count of workers
20
+ */
21
+ constructor(props) {
22
+ this.name = 'unnamed';
23
+ this.maxConcurrency = 1;
24
+ this.maxMobileConcurrency = 1;
25
+ this.onDebug = () => { };
26
+ this.reuseWorkers = true;
27
+ this.props = {};
28
+ this.jobQueue = [];
29
+ this.idleQueue = [];
30
+ this.count = 0;
31
+ this.isDestroyed = false;
32
+ this.source = props.source;
33
+ this.url = props.url;
34
+ this.setProps(props);
52
35
  }
53
-
54
- if (props.maxMobileConcurrency !== undefined) {
55
- this.maxMobileConcurrency = props.maxMobileConcurrency;
36
+ /**
37
+ * Terminates all workers in the pool
38
+ * @note Can free up significant memory
39
+ */
40
+ destroy() {
41
+ // Destroy idle workers, active Workers will be destroyed on completion
42
+ this.idleQueue.forEach((worker) => worker.destroy());
43
+ this.isDestroyed = true;
56
44
  }
57
-
58
- if (props.reuseWorkers !== undefined) {
59
- this.reuseWorkers = props.reuseWorkers;
45
+ setProps(props) {
46
+ this.props = { ...this.props, ...props };
47
+ if (props.name !== undefined) {
48
+ this.name = props.name;
49
+ }
50
+ if (props.maxConcurrency !== undefined) {
51
+ this.maxConcurrency = props.maxConcurrency;
52
+ }
53
+ if (props.maxMobileConcurrency !== undefined) {
54
+ this.maxMobileConcurrency = props.maxMobileConcurrency;
55
+ }
56
+ if (props.reuseWorkers !== undefined) {
57
+ this.reuseWorkers = props.reuseWorkers;
58
+ }
59
+ if (props.onDebug !== undefined) {
60
+ this.onDebug = props.onDebug;
61
+ }
60
62
  }
61
-
62
- if (props.onDebug !== undefined) {
63
- this.onDebug = props.onDebug;
63
+ async startJob(name, onMessage = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
64
+ // Promise resolves when thread starts working on this job
65
+ const startPromise = new Promise((onStart) => {
66
+ // Promise resolves when thread completes or fails working on this job
67
+ this.jobQueue.push({ name, onMessage, onError, onStart });
68
+ return this;
69
+ });
70
+ this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises
71
+ return await startPromise;
64
72
  }
65
- }
66
-
67
- async startJob(name, onMessage = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
68
- const startPromise = new Promise(onStart => {
69
- this.jobQueue.push({
70
- name,
71
- onMessage,
72
- onError,
73
- onStart
74
- });
75
- return this;
76
- });
77
-
78
- this._startQueuedJob();
79
-
80
- return await startPromise;
81
- }
82
-
83
- async _startQueuedJob() {
84
- if (!this.jobQueue.length) {
85
- return;
73
+ // PRIVATE
74
+ /**
75
+ * Starts first queued job if worker is available or can be created
76
+ * Called when job is started and whenever a worker returns to the idleQueue
77
+ */
78
+ async _startQueuedJob() {
79
+ if (!this.jobQueue.length) {
80
+ return;
81
+ }
82
+ const workerThread = this._getAvailableWorker();
83
+ if (!workerThread) {
84
+ return;
85
+ }
86
+ // We have a worker, dequeue and start the job
87
+ const queuedJob = this.jobQueue.shift();
88
+ if (queuedJob) {
89
+ // Emit a debug event
90
+ // @ts-ignore
91
+ this.onDebug({
92
+ message: 'Starting job',
93
+ name: queuedJob.name,
94
+ workerThread,
95
+ backlog: this.jobQueue.length
96
+ });
97
+ // Create a worker job to let the app access thread and manage job completion
98
+ const job = new worker_job_1.default(queuedJob.name, workerThread);
99
+ // Set the worker thread's message handlers
100
+ workerThread.onMessage = (data) => queuedJob.onMessage(job, data.type, data.payload);
101
+ workerThread.onError = (error) => queuedJob.onError(job, error);
102
+ // Resolve the start promise so that the app can start sending messages to worker
103
+ queuedJob.onStart(job);
104
+ // Wait for the app to signal that the job is complete, then return worker to queue
105
+ try {
106
+ await job.result;
107
+ }
108
+ finally {
109
+ this.returnWorkerToQueue(workerThread);
110
+ }
111
+ }
86
112
  }
87
-
88
- const workerThread = this._getAvailableWorker();
89
-
90
- if (!workerThread) {
91
- return;
113
+ /**
114
+ * Returns a worker to the idle queue
115
+ * Destroys the worker if
116
+ * - pool is destroyed
117
+ * - if this pool doesn't reuse workers
118
+ * - if maxConcurrency has been lowered
119
+ * @param worker
120
+ */
121
+ returnWorkerToQueue(worker) {
122
+ const shouldDestroyWorker =
123
+ // Workers on Node.js prevent the process from exiting.
124
+ // Until we figure out how to close them before exit, we always destroy them
125
+ !globals_1.isBrowser ||
126
+ // If the pool is destroyed, there is no reason to keep the worker around
127
+ this.isDestroyed ||
128
+ // If the app has disabled worker reuse, any completed workers should be destroyed
129
+ !this.reuseWorkers ||
130
+ // If concurrency has been lowered, this worker might be surplus to requirements
131
+ this.count > this._getMaxConcurrency();
132
+ if (shouldDestroyWorker) {
133
+ worker.destroy();
134
+ this.count--;
135
+ }
136
+ else {
137
+ this.idleQueue.push(worker);
138
+ }
139
+ if (!this.isDestroyed) {
140
+ this._startQueuedJob(); // eslint-disable-line @typescript-eslint/no-floating-promises
141
+ }
92
142
  }
93
-
94
- const queuedJob = this.jobQueue.shift();
95
-
96
- if (queuedJob) {
97
- this.onDebug({
98
- message: 'Starting job',
99
- name: queuedJob.name,
100
- workerThread,
101
- backlog: this.jobQueue.length
102
- });
103
- const job = new WorkerJob(queuedJob.name, workerThread);
104
-
105
- workerThread.onMessage = data => queuedJob.onMessage(job, data.type, data.payload);
106
-
107
- workerThread.onError = error => queuedJob.onError(job, error);
108
-
109
- queuedJob.onStart(job);
110
-
111
- try {
112
- await job.result;
113
- } finally {
114
- this.returnWorkerToQueue(workerThread);
115
- }
143
+ /**
144
+ * Returns idle worker or creates new worker if maxConcurrency has not been reached
145
+ */
146
+ _getAvailableWorker() {
147
+ // If a worker has completed and returned to the queue, it can be used
148
+ if (this.idleQueue.length > 0) {
149
+ return this.idleQueue.shift() || null;
150
+ }
151
+ // Create fresh worker if we haven't yet created the max amount of worker threads for this worker source
152
+ if (this.count < this._getMaxConcurrency()) {
153
+ this.count++;
154
+ const name = `${this.name.toLowerCase()} (#${this.count} of ${this.maxConcurrency})`;
155
+ return new worker_thread_1.default({ name, source: this.source, url: this.url });
156
+ }
157
+ // No worker available, have to wait
158
+ return null;
116
159
  }
117
- }
118
-
119
- returnWorkerToQueue(worker) {
120
- const shouldDestroyWorker = this.isDestroyed || !this.reuseWorkers || this.count > this._getMaxConcurrency();
121
-
122
- if (shouldDestroyWorker) {
123
- worker.destroy();
124
- this.count--;
125
- } else {
126
- this.idleQueue.push(worker);
160
+ _getMaxConcurrency() {
161
+ return globals_1.isMobile ? this.maxMobileConcurrency : this.maxConcurrency;
127
162
  }
128
-
129
- if (!this.isDestroyed) {
130
- this._startQueuedJob();
131
- }
132
- }
133
-
134
- _getAvailableWorker() {
135
- if (this.idleQueue.length > 0) {
136
- return this.idleQueue.shift() || null;
137
- }
138
-
139
- if (this.count < this._getMaxConcurrency()) {
140
- this.count++;
141
- const name = "".concat(this.name.toLowerCase(), " (#").concat(this.count, " of ").concat(this.maxConcurrency, ")");
142
- return new WorkerThread({
143
- name,
144
- source: this.source,
145
- url: this.url
146
- });
147
- }
148
-
149
- return null;
150
- }
151
-
152
- _getMaxConcurrency() {
153
- return isMobile ? this.maxMobileConcurrency : this.maxConcurrency;
154
- }
155
-
156
163
  }
157
- //# sourceMappingURL=worker-pool.js.map
164
+ exports.default = WorkerPool;
@@ -1,4 +1,5 @@
1
- export declare type WorkerThreadProps = {
1
+ import { NodeWorkerType } from '../node/worker_threads';
2
+ export type WorkerThreadProps = {
2
3
  name: string;
3
4
  source?: string;
4
5
  url?: string;
@@ -11,10 +12,11 @@ export default class WorkerThread {
11
12
  readonly source: string | undefined;
12
13
  readonly url: string | undefined;
13
14
  terminated: boolean;
14
- worker: Worker;
15
+ worker: Worker | NodeWorkerType;
15
16
  onMessage: (message: any) => void;
16
17
  onError: (error: Error) => void;
17
18
  private _loadableURL;
19
+ /** Checks if workers are supported on this platform */
18
20
  static isSupported(): boolean;
19
21
  constructor(props: WorkerThreadProps);
20
22
  /**
@@ -31,12 +33,17 @@ export default class WorkerThread {
31
33
  postMessage(data: any, transferList?: any[]): void;
32
34
  /**
33
35
  * Generate a standard Error from an ErrorEvent
34
- * @param {ErrorEvent} event
36
+ * @param event
35
37
  */
36
38
  _getErrorFromErrorEvent(event: ErrorEvent): Error;
37
39
  /**
38
40
  * Creates a worker thread on the browser
39
41
  */
40
42
  _createBrowserWorker(): Worker;
43
+ /**
44
+ * Creates a worker thread in node.js
45
+ * @todo https://nodejs.org/api/async_hooks.html#async-resource-worker-pool
46
+ */
47
+ _createNodeWorker(): NodeWorkerType;
41
48
  }
42
49
  //# sourceMappingURL=worker-thread.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../../src/lib/worker-farm/worker-thread.ts"],"names":[],"mappings":"AAMA,oBAAY,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,CAAS;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEhC,OAAO,CAAC,YAAY,CAAc;IAElC,MAAM,CAAC,WAAW,IAAI,OAAO;gBAIjB,KAAK,EAAE,iBAAiB;IAYpC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAQf,IAAI,SAAS,YAEZ;IAED;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI;IAQlD;;;OAGG;IACH,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK;IAiBjD;;OAEG;IACH,oBAAoB;CAqBrB"}
1
+ {"version":3,"file":"worker-thread.d.ts","sourceRoot":"","sources":["../../../src/lib/worker-farm/worker-thread.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,cAAc,EAAC,MAAM,wBAAwB,CAAC;AAQlE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,OAAO,CAAS;IAC5B,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC;IAChC,SAAS,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEhC,OAAO,CAAC,YAAY,CAAc;IAElC,uDAAuD;IACvD,MAAM,CAAC,WAAW,IAAI,OAAO;gBAOjB,KAAK,EAAE,iBAAiB;IAYpC;;;OAGG;IACH,OAAO,IAAI,IAAI;IAOf,IAAI,SAAS,YAEZ;IAED;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI;IAQlD;;;OAGG;IACH,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK;IAiBjD;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAsB9B;;;OAGG;IACH,iBAAiB,IAAI,cAAc;CA0BpC"}