@loaders.gl/worker-utils 3.3.0-alpha.4 → 3.3.0-alpha.6

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 (103) hide show
  1. package/dist/es5/index.js +35 -52
  2. package/dist/es5/index.js.map +1 -1
  3. package/dist/es5/lib/async-queue/async-queue.js +15 -22
  4. package/dist/es5/lib/async-queue/async-queue.js.map +1 -1
  5. package/dist/es5/lib/env-utils/assert.js.map +1 -1
  6. package/dist/es5/lib/env-utils/globals.js +7 -4
  7. package/dist/es5/lib/env-utils/globals.js.map +1 -1
  8. package/dist/es5/lib/env-utils/version.js +3 -3
  9. package/dist/es5/lib/env-utils/version.js.map +1 -1
  10. package/dist/es5/lib/library-utils/library-utils.js +6 -45
  11. package/dist/es5/lib/library-utils/library-utils.js.map +1 -1
  12. package/dist/es5/lib/node/require-utils.node.js +0 -22
  13. package/dist/es5/lib/node/require-utils.node.js.map +1 -1
  14. package/dist/es5/lib/node/worker_threads-browser.js +3 -6
  15. package/dist/es5/lib/node/worker_threads-browser.js.map +1 -1
  16. package/dist/es5/lib/node/worker_threads.js +0 -2
  17. package/dist/es5/lib/node/worker_threads.js.map +1 -1
  18. package/dist/es5/lib/process-utils/child-process-proxy.js +6 -49
  19. package/dist/es5/lib/process-utils/child-process-proxy.js.map +1 -1
  20. package/dist/es5/lib/process-utils/process-utils.js +0 -7
  21. package/dist/es5/lib/process-utils/process-utils.js.map +1 -1
  22. package/dist/es5/lib/worker-api/create-worker.js +40 -96
  23. package/dist/es5/lib/worker-api/create-worker.js.map +1 -1
  24. package/dist/es5/lib/worker-api/get-worker-url.js +2 -7
  25. package/dist/es5/lib/worker-api/get-worker-url.js.map +1 -1
  26. package/dist/es5/lib/worker-api/process-on-worker.js +13 -39
  27. package/dist/es5/lib/worker-api/process-on-worker.js.map +1 -1
  28. package/dist/es5/lib/worker-api/validate-worker-version.js +0 -4
  29. package/dist/es5/lib/worker-api/validate-worker-version.js.map +1 -1
  30. package/dist/es5/lib/worker-farm/worker-body.js +13 -30
  31. package/dist/es5/lib/worker-farm/worker-body.js.map +1 -1
  32. package/dist/es5/lib/worker-farm/worker-farm.js +21 -32
  33. package/dist/es5/lib/worker-farm/worker-farm.js.map +1 -1
  34. package/dist/es5/lib/worker-farm/worker-job.js +9 -13
  35. package/dist/es5/lib/worker-farm/worker-job.js.map +1 -1
  36. package/dist/es5/lib/worker-farm/worker-pool.js +18 -51
  37. package/dist/es5/lib/worker-farm/worker-pool.js.map +1 -1
  38. package/dist/es5/lib/worker-farm/worker-thread.js +21 -33
  39. package/dist/es5/lib/worker-farm/worker-thread.js.map +1 -1
  40. package/dist/es5/lib/worker-utils/get-loadable-worker-url.js +1 -5
  41. package/dist/es5/lib/worker-utils/get-loadable-worker-url.js.map +1 -1
  42. package/dist/es5/lib/worker-utils/get-transfer-list.js +5 -12
  43. package/dist/es5/lib/worker-utils/get-transfer-list.js.map +1 -1
  44. package/dist/es5/lib/worker-utils/remove-nontransferable-options.js +0 -4
  45. package/dist/es5/lib/worker-utils/remove-nontransferable-options.js.map +1 -1
  46. package/dist/es5/types.js.map +1 -1
  47. package/dist/es5/workers/null-worker.js +0 -6
  48. package/dist/es5/workers/null-worker.js.map +1 -1
  49. package/dist/esm/index.js +8 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/lib/async-queue/async-queue.js +1 -14
  52. package/dist/esm/lib/async-queue/async-queue.js.map +1 -1
  53. package/dist/esm/lib/env-utils/assert.js +2 -0
  54. package/dist/esm/lib/env-utils/assert.js.map +1 -1
  55. package/dist/esm/lib/env-utils/globals.js +9 -1
  56. package/dist/esm/lib/env-utils/globals.js.map +1 -1
  57. package/dist/esm/lib/env-utils/version.js +4 -3
  58. package/dist/esm/lib/env-utils/version.js.map +1 -1
  59. package/dist/esm/lib/library-utils/library-utils.js +10 -12
  60. package/dist/esm/lib/library-utils/library-utils.js.map +1 -1
  61. package/dist/esm/lib/node/require-utils.node.js +7 -9
  62. package/dist/esm/lib/node/require-utils.node.js.map +1 -1
  63. package/dist/esm/lib/node/worker_threads-browser.js +1 -0
  64. package/dist/esm/lib/node/worker_threads-browser.js.map +1 -1
  65. package/dist/esm/lib/node/worker_threads.js.map +1 -1
  66. package/dist/esm/lib/process-utils/child-process-proxy.js +13 -25
  67. package/dist/esm/lib/process-utils/child-process-proxy.js.map +1 -1
  68. package/dist/esm/lib/process-utils/process-utils.js +3 -5
  69. package/dist/esm/lib/process-utils/process-utils.js.map +1 -1
  70. package/dist/esm/lib/worker-api/create-worker.js +4 -14
  71. package/dist/esm/lib/worker-api/create-worker.js.map +1 -1
  72. package/dist/esm/lib/worker-api/get-worker-url.js +6 -5
  73. package/dist/esm/lib/worker-api/get-worker-url.js.map +1 -1
  74. package/dist/esm/lib/worker-api/process-on-worker.js +7 -11
  75. package/dist/esm/lib/worker-api/process-on-worker.js.map +1 -1
  76. package/dist/esm/lib/worker-api/validate-worker-version.js +3 -2
  77. package/dist/esm/lib/worker-api/validate-worker-version.js.map +1 -1
  78. package/dist/esm/lib/worker-farm/worker-body.js +1 -13
  79. package/dist/esm/lib/worker-farm/worker-body.js.map +1 -1
  80. package/dist/esm/lib/worker-farm/worker-farm.js +9 -14
  81. package/dist/esm/lib/worker-farm/worker-farm.js.map +1 -1
  82. package/dist/esm/lib/worker-farm/worker-job.js +2 -9
  83. package/dist/esm/lib/worker-farm/worker-job.js.map +1 -1
  84. package/dist/esm/lib/worker-farm/worker-pool.js +8 -31
  85. package/dist/esm/lib/worker-farm/worker-pool.js.map +1 -1
  86. package/dist/esm/lib/worker-farm/worker-thread.js +2 -23
  87. package/dist/esm/lib/worker-farm/worker-thread.js.map +1 -1
  88. package/dist/esm/lib/worker-utils/get-loadable-worker-url.js +2 -3
  89. package/dist/esm/lib/worker-utils/get-loadable-worker-url.js.map +1 -1
  90. package/dist/esm/lib/worker-utils/get-transfer-list.js +10 -11
  91. package/dist/esm/lib/worker-utils/get-transfer-list.js.map +1 -1
  92. package/dist/esm/lib/worker-utils/remove-nontransferable-options.js +1 -1
  93. package/dist/esm/lib/worker-utils/remove-nontransferable-options.js.map +1 -1
  94. package/dist/esm/types.js.map +1 -1
  95. package/dist/esm/workers/null-worker.js.map +1 -1
  96. package/dist/lib/library-utils/library-utils.js +5 -1
  97. package/dist/lib/node/worker_threads.js +5 -1
  98. package/dist/lib/process-utils/child-process-proxy.js +5 -1
  99. package/dist/lib/worker-utils/get-transfer-list.d.ts.map +1 -1
  100. package/dist/lib/worker-utils/get-transfer-list.js +4 -2
  101. package/dist/null-worker.js.map +1 -1
  102. package/package.json +2 -2
  103. package/src/lib/worker-utils/get-transfer-list.ts +6 -2
@@ -1,56 +1,46 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
10
  var _getTransferList = require("../worker-utils/get-transfer-list");
15
-
16
11
  function getParentPort() {
17
12
  var parentPort;
18
-
19
13
  try {
20
14
  eval('globalThis.parentPort = require(\'worker_threads\').parentPort');
21
15
  parentPort = globalThis.parentPort;
22
16
  } catch (_unused) {}
23
-
24
17
  return parentPort;
25
18
  }
26
-
27
19
  var onMessageWrapperMap = new Map();
28
20
 
29
21
  var WorkerBody = function () {
30
22
  function WorkerBody() {
31
23
  (0, _classCallCheck2.default)(this, WorkerBody);
32
24
  }
33
-
34
25
  (0, _createClass2.default)(WorkerBody, null, [{
35
26
  key: "inWorkerThread",
36
- value: function inWorkerThread() {
27
+ value:
28
+ function inWorkerThread() {
37
29
  return typeof self !== 'undefined' || Boolean(getParentPort());
38
30
  }
31
+
39
32
  }, {
40
33
  key: "onmessage",
41
- set: function set(onMessage) {
34
+ set:
35
+ function set(onMessage) {
42
36
  function handleMessage(message) {
43
37
  var parentPort = getParentPort();
44
-
45
38
  var _ref = parentPort ? message : message.data,
46
- type = _ref.type,
47
- payload = _ref.payload;
48
-
39
+ type = _ref.type,
40
+ payload = _ref.payload;
49
41
  onMessage(type, payload);
50
42
  }
51
-
52
43
  var parentPort = getParentPort();
53
-
54
44
  if (parentPort) {
55
45
  parentPort.on('message', handleMessage);
56
46
  parentPort.on('exit', function () {
@@ -64,7 +54,6 @@ var WorkerBody = function () {
64
54
  key: "addEventListener",
65
55
  value: function addEventListener(onMessage) {
66
56
  var onMessageWrapper = onMessageWrapperMap.get(onMessage);
67
-
68
57
  if (!onMessageWrapper) {
69
58
  onMessageWrapper = function onMessageWrapper(message) {
70
59
  if (!isKnownMessage(message)) {
@@ -72,17 +61,13 @@ var WorkerBody = function () {
72
61
  }
73
62
 
74
63
  var parentPort = getParentPort();
75
-
76
64
  var _ref2 = parentPort ? message : message.data,
77
- type = _ref2.type,
78
- payload = _ref2.payload;
79
-
65
+ type = _ref2.type,
66
+ payload = _ref2.payload;
80
67
  onMessage(type, payload);
81
68
  };
82
69
  }
83
-
84
70
  var parentPort = getParentPort();
85
-
86
71
  if (parentPort) {
87
72
  console.error('not implemented');
88
73
  } else {
@@ -95,16 +80,17 @@ var WorkerBody = function () {
95
80
  var onMessageWrapper = onMessageWrapperMap.get(onMessage);
96
81
  onMessageWrapperMap.delete(onMessage);
97
82
  var parentPort = getParentPort();
98
-
99
83
  if (parentPort) {
100
84
  console.error('not implemented');
101
85
  } else {
102
86
  globalThis.removeEventListener('message', onMessageWrapper);
103
87
  }
104
88
  }
89
+
105
90
  }, {
106
91
  key: "postMessage",
107
- value: function postMessage(type, payload) {
92
+ value:
93
+ function postMessage(type, payload) {
108
94
  var data = {
109
95
  source: 'loaders.gl',
110
96
  type: type,
@@ -112,7 +98,6 @@ var WorkerBody = function () {
112
98
  };
113
99
  var transferList = (0, _getTransferList.getTransferList)(payload);
114
100
  var parentPort = getParentPort();
115
-
116
101
  if (parentPort) {
117
102
  parentPort.postMessage(data, transferList);
118
103
  } else {
@@ -122,12 +107,10 @@ var WorkerBody = function () {
122
107
  }]);
123
108
  return WorkerBody;
124
109
  }();
125
-
126
110
  exports.default = WorkerBody;
127
-
128
111
  function isKnownMessage(message) {
129
112
  var type = message.type,
130
- data = message.data;
113
+ data = message.data;
131
114
  return type === 'message' && data && typeof data.source === 'string' && data.source.startsWith('loaders.gl');
132
115
  }
133
116
  //# sourceMappingURL=worker-body.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/worker-farm/worker-body.ts"],"names":["getParentPort","parentPort","eval","globalThis","onMessageWrapperMap","Map","WorkerBody","self","Boolean","onMessage","handleMessage","message","data","type","payload","on","console","debug","onmessage","onMessageWrapper","get","isKnownMessage","error","addEventListener","delete","removeEventListener","source","transferList","postMessage","startsWith"],"mappings":"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","sourcesContent":["import type {WorkerMessageData, WorkerMessageType, WorkerMessagePayload} from '../../types';\nimport {getTransferList} from '../worker-utils/get-transfer-list';\n\n/** Vile hack to defeat over-zealous bundlers from stripping out the require */\nfunction getParentPort() {\n // const isNode = globalThis.process;\n let parentPort;\n try {\n // prettier-ignore\n eval('globalThis.parentPort = require(\\'worker_threads\\').parentPort'); // eslint-disable-line no-eval\n parentPort = globalThis.parentPort;\n // eslint-disable-next-line no-empty\n } catch {}\n return parentPort;\n}\n\nconst onMessageWrapperMap = new Map();\n\n/**\n * Type safe wrapper for worker code\n */\nexport default class WorkerBody {\n /** Check that we are actually in a worker thread */\n static inWorkerThread(): boolean {\n return typeof self !== 'undefined' || Boolean(getParentPort());\n }\n\n /*\n * (type: WorkerMessageType, payload: WorkerMessagePayload) => any\n */\n static set onmessage(onMessage: (type: WorkerMessageType, payload: WorkerMessagePayload) => any) {\n function handleMessage(message) {\n // Confusingly the message itself also has a 'type' field which is always set to 'message'\n const parentPort = getParentPort();\n const {type, payload} = parentPort ? message : message.data;\n // if (!isKnownMessage(message)) {\n // return;\n // }\n onMessage(type, payload);\n }\n\n const parentPort = getParentPort();\n if (parentPort) {\n parentPort.on('message', handleMessage);\n // if (message == 'exit') { parentPort.unref(); }\n // eslint-disable-next-line\n parentPort.on('exit', () => console.debug('Node worker closing'));\n } else {\n // eslint-disable-next-line no-restricted-globals\n globalThis.onmessage = handleMessage;\n }\n }\n\n static addEventListener(\n onMessage: (type: WorkerMessageType, payload: WorkerMessagePayload) => any\n ) {\n let onMessageWrapper = onMessageWrapperMap.get(onMessage);\n\n if (!onMessageWrapper) {\n onMessageWrapper = (message: MessageEvent<any>) => {\n if (!isKnownMessage(message)) {\n return;\n }\n\n // Confusingly in the browser, the message itself also has a 'type' field which is always set to 'message'\n const parentPort = getParentPort();\n const {type, payload} = parentPort ? message : message.data;\n onMessage(type, payload);\n };\n }\n\n const parentPort = getParentPort();\n if (parentPort) {\n console.error('not implemented'); // eslint-disable-line\n } else {\n globalThis.addEventListener('message', onMessageWrapper);\n }\n }\n\n static removeEventListener(\n onMessage: (type: WorkerMessageType, payload: WorkerMessagePayload) => any\n ) {\n const onMessageWrapper = onMessageWrapperMap.get(onMessage);\n onMessageWrapperMap.delete(onMessage);\n const parentPort = getParentPort();\n if (parentPort) {\n console.error('not implemented'); // eslint-disable-line\n } else {\n globalThis.removeEventListener('message', onMessageWrapper);\n }\n }\n\n /**\n * Send a message from a worker to creating thread (main thread)\n * @param type\n * @param payload\n */\n static postMessage(type: WorkerMessageType, payload: WorkerMessagePayload): void {\n const data: WorkerMessageData = {source: 'loaders.gl', type, payload};\n // console.log('posting message', data);\n const transferList = getTransferList(payload);\n\n const parentPort = getParentPort();\n if (parentPort) {\n parentPort.postMessage(data, transferList);\n // console.log('posted message', data);\n } else {\n // @ts-ignore\n globalThis.postMessage(data, transferList);\n }\n }\n}\n\n// Filter out noise messages sent to workers\nfunction isKnownMessage(message: MessageEvent<any>) {\n const {type, data} = message;\n return (\n type === 'message' &&\n data &&\n typeof data.source === 'string' &&\n data.source.startsWith('loaders.gl')\n );\n}\n"],"file":"worker-body.js"}
1
+ {"version":3,"file":"worker-body.js","names":["getParentPort","parentPort","eval","globalThis","onMessageWrapperMap","Map","WorkerBody","self","Boolean","onMessage","handleMessage","message","data","type","payload","on","console","debug","onmessage","onMessageWrapper","get","isKnownMessage","error","addEventListener","delete","removeEventListener","source","transferList","getTransferList","postMessage","startsWith"],"sources":["../../../../src/lib/worker-farm/worker-body.ts"],"sourcesContent":["import type {WorkerMessageData, WorkerMessageType, WorkerMessagePayload} from '../../types';\nimport {getTransferList} from '../worker-utils/get-transfer-list';\n\n/** Vile hack to defeat over-zealous bundlers from stripping out the require */\nfunction getParentPort() {\n // const isNode = globalThis.process;\n let parentPort;\n try {\n // prettier-ignore\n eval('globalThis.parentPort = require(\\'worker_threads\\').parentPort'); // eslint-disable-line no-eval\n parentPort = globalThis.parentPort;\n // eslint-disable-next-line no-empty\n } catch {}\n return parentPort;\n}\n\nconst onMessageWrapperMap = new Map();\n\n/**\n * Type safe wrapper for worker code\n */\nexport default class WorkerBody {\n /** Check that we are actually in a worker thread */\n static inWorkerThread(): boolean {\n return typeof self !== 'undefined' || Boolean(getParentPort());\n }\n\n /*\n * (type: WorkerMessageType, payload: WorkerMessagePayload) => any\n */\n static set onmessage(onMessage: (type: WorkerMessageType, payload: WorkerMessagePayload) => any) {\n function handleMessage(message) {\n // Confusingly the message itself also has a 'type' field which is always set to 'message'\n const parentPort = getParentPort();\n const {type, payload} = parentPort ? message : message.data;\n // if (!isKnownMessage(message)) {\n // return;\n // }\n onMessage(type, payload);\n }\n\n const parentPort = getParentPort();\n if (parentPort) {\n parentPort.on('message', handleMessage);\n // if (message == 'exit') { parentPort.unref(); }\n // eslint-disable-next-line\n parentPort.on('exit', () => console.debug('Node worker closing'));\n } else {\n // eslint-disable-next-line no-restricted-globals\n globalThis.onmessage = handleMessage;\n }\n }\n\n static addEventListener(\n onMessage: (type: WorkerMessageType, payload: WorkerMessagePayload) => any\n ) {\n let onMessageWrapper = onMessageWrapperMap.get(onMessage);\n\n if (!onMessageWrapper) {\n onMessageWrapper = (message: MessageEvent<any>) => {\n if (!isKnownMessage(message)) {\n return;\n }\n\n // Confusingly in the browser, the message itself also has a 'type' field which is always set to 'message'\n const parentPort = getParentPort();\n const {type, payload} = parentPort ? message : message.data;\n onMessage(type, payload);\n };\n }\n\n const parentPort = getParentPort();\n if (parentPort) {\n console.error('not implemented'); // eslint-disable-line\n } else {\n globalThis.addEventListener('message', onMessageWrapper);\n }\n }\n\n static removeEventListener(\n onMessage: (type: WorkerMessageType, payload: WorkerMessagePayload) => any\n ) {\n const onMessageWrapper = onMessageWrapperMap.get(onMessage);\n onMessageWrapperMap.delete(onMessage);\n const parentPort = getParentPort();\n if (parentPort) {\n console.error('not implemented'); // eslint-disable-line\n } else {\n globalThis.removeEventListener('message', onMessageWrapper);\n }\n }\n\n /**\n * Send a message from a worker to creating thread (main thread)\n * @param type\n * @param payload\n */\n static postMessage(type: WorkerMessageType, payload: WorkerMessagePayload): void {\n const data: WorkerMessageData = {source: 'loaders.gl', type, payload};\n // console.log('posting message', data);\n const transferList = getTransferList(payload);\n\n const parentPort = getParentPort();\n if (parentPort) {\n parentPort.postMessage(data, transferList);\n // console.log('posted message', data);\n } else {\n // @ts-ignore\n globalThis.postMessage(data, transferList);\n }\n }\n}\n\n// Filter out noise messages sent to workers\nfunction isKnownMessage(message: MessageEvent<any>) {\n const {type, data} = message;\n return (\n type === 'message' &&\n data &&\n typeof data.source === 'string' &&\n data.source.startsWith('loaders.gl')\n );\n}\n"],"mappings":"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"}
@@ -1,32 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
11
  var _workerPool = _interopRequireDefault(require("./worker-pool"));
17
-
18
12
  var _workerThread = _interopRequireDefault(require("./worker-thread"));
19
-
20
13
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
21
-
22
14
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
23
-
24
15
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
25
-
26
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
27
-
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
-
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
30
18
  var DEFAULT_PROPS = {
31
19
  maxConcurrency: 3,
32
20
  maxMobileConcurrency: 1,
@@ -46,10 +34,10 @@ var WorkerFarm = function () {
46
34
 
47
35
  (0, _createClass2.default)(WorkerFarm, [{
48
36
  key: "destroy",
49
- value: function destroy() {
37
+ value:
38
+ function destroy() {
50
39
  var _iterator = _createForOfIteratorHelper(this.workerPools.values()),
51
- _step;
52
-
40
+ _step;
53
41
  try {
54
42
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
55
43
  var workerPool = _step.value;
@@ -60,17 +48,16 @@ var WorkerFarm = function () {
60
48
  } finally {
61
49
  _iterator.f();
62
50
  }
63
-
64
51
  this.workerPools = new Map();
65
52
  }
53
+
66
54
  }, {
67
55
  key: "setProps",
68
- value: function setProps(props) {
56
+ value:
57
+ function setProps(props) {
69
58
  this.props = _objectSpread(_objectSpread({}, this.props), props);
70
-
71
59
  var _iterator2 = _createForOfIteratorHelper(this.workerPools.values()),
72
- _step2;
73
-
60
+ _step2;
74
61
  try {
75
62
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
76
63
  var workerPool = _step2.value;
@@ -82,14 +69,15 @@ var WorkerFarm = function () {
82
69
  _iterator2.f();
83
70
  }
84
71
  }
72
+
85
73
  }, {
86
74
  key: "getWorkerPool",
87
- value: function getWorkerPool(options) {
75
+ value:
76
+ function getWorkerPool(options) {
88
77
  var name = options.name,
89
- source = options.source,
90
- url = options.url;
78
+ source = options.source,
79
+ url = options.url;
91
80
  var workerPool = this.workerPools.get(name);
92
-
93
81
  if (!workerPool) {
94
82
  workerPool = new _workerPool.default({
95
83
  name: name,
@@ -99,7 +87,6 @@ var WorkerFarm = function () {
99
87
  workerPool.setProps(this._getWorkerPoolProps());
100
88
  this.workerPools.set(name, workerPool);
101
89
  }
102
-
103
90
  return workerPool;
104
91
  }
105
92
  }, {
@@ -114,23 +101,25 @@ var WorkerFarm = function () {
114
101
  }
115
102
  }], [{
116
103
  key: "isSupported",
117
- value: function isSupported() {
104
+ value:
105
+
106
+ function isSupported() {
118
107
  return _workerThread.default.isSupported();
119
108
  }
109
+
120
110
  }, {
121
111
  key: "getWorkerFarm",
122
- value: function getWorkerFarm() {
112
+ value:
113
+ function getWorkerFarm() {
123
114
  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
124
115
  WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});
125
-
126
116
  WorkerFarm._workerFarm.setProps(props);
127
-
128
117
  return WorkerFarm._workerFarm;
129
118
  }
119
+
130
120
  }]);
131
121
  return WorkerFarm;
132
122
  }();
133
-
134
123
  exports.default = WorkerFarm;
135
124
  (0, _defineProperty2.default)(WorkerFarm, "_workerFarm", void 0);
136
125
  //# sourceMappingURL=worker-farm.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/worker-farm/worker-farm.ts"],"names":["DEFAULT_PROPS","maxConcurrency","maxMobileConcurrency","reuseWorkers","onDebug","WorkerFarm","props","Map","setProps","workerPools","values","workerPool","destroy","_getWorkerPoolProps","options","name","source","url","get","WorkerPool","set","WorkerThread","isSupported","_workerFarm"],"mappings":";;;;;;;;;;;;;;;AAAA;;AACA;;;;;;;;;;;;AAgBA,IAAMA,aAAwC,GAAG;AAC/CC,EAAAA,cAAc,EAAE,CAD+B;AAE/CC,EAAAA,oBAAoB,EAAE,CAFyB;AAG/CC,EAAAA,YAAY,EAAE,IAHiC;AAI/CC,EAAAA,OAAO,EAAE,mBAAM,CAAE;AAJ8B,CAAjD;;IAUqBC,U;AAmBnB,sBAAoBC,KAApB,EAA4C;AAAA;AAAA;AAAA,uDAjBtB,IAAIC,GAAJ,EAiBsB;AAC1C,SAAKD,KAAL,qBAAiBN,aAAjB;AACA,SAAKQ,QAAL,CAAcF,KAAd;AAEA,SAAKG,WAAL,GAAmB,IAAIF,GAAJ,EAAnB;AACD;;;;WAMD,mBAAgB;AAAA,iDACW,KAAKE,WAAL,CAAiBC,MAAjB,EADX;AAAA;;AAAA;AACd,4DAAoD;AAAA,cAAzCC,UAAyC;AAClDA,UAAAA,UAAU,CAACC,OAAX;AACD;AAHa;AAAA;AAAA;AAAA;AAAA;;AAId,WAAKH,WAAL,GAAmB,IAAIF,GAAJ,EAAnB;AACD;;;WAMD,kBAASD,KAAT,EAAuC;AACrC,WAAKA,KAAL,mCAAiB,KAAKA,KAAtB,GAAgCA,KAAhC;;AADqC,kDAGZ,KAAKG,WAAL,CAAiBC,MAAjB,EAHY;AAAA;;AAAA;AAGrC,+DAAoD;AAAA,cAAzCC,UAAyC;AAClDA,UAAAA,UAAU,CAACH,QAAX,CAAoB,KAAKK,mBAAL,EAApB;AACD;AALoC;AAAA;AAAA;AAAA;AAAA;AAMtC;;;WAWD,uBAAcC,OAAd,EAAkF;AAChF,UAAOC,IAAP,GAA4BD,OAA5B,CAAOC,IAAP;AAAA,UAAaC,MAAb,GAA4BF,OAA5B,CAAaE,MAAb;AAAA,UAAqBC,GAArB,GAA4BH,OAA5B,CAAqBG,GAArB;AACA,UAAIN,UAAU,GAAG,KAAKF,WAAL,CAAiBS,GAAjB,CAAqBH,IAArB,CAAjB;;AACA,UAAI,CAACJ,UAAL,EAAiB;AACfA,QAAAA,UAAU,GAAG,IAAIQ,mBAAJ,CAAe;AAC1BJ,UAAAA,IAAI,EAAJA,IAD0B;AAE1BC,UAAAA,MAAM,EAANA,MAF0B;AAG1BC,UAAAA,GAAG,EAAHA;AAH0B,SAAf,CAAb;AAKAN,QAAAA,UAAU,CAACH,QAAX,CAAoB,KAAKK,mBAAL,EAApB;AACA,aAAKJ,WAAL,CAAiBW,GAAjB,CAAqBL,IAArB,EAA2BJ,UAA3B;AACD;;AACD,aAAOA,UAAP;AACD;;;WAED,+BAAsB;AACpB,aAAO;AACLV,QAAAA,cAAc,EAAE,KAAKK,KAAL,CAAWL,cADtB;AAELC,QAAAA,oBAAoB,EAAE,KAAKI,KAAL,CAAWJ,oBAF5B;AAGLC,QAAAA,YAAY,EAAE,KAAKG,KAAL,CAAWH,YAHpB;AAILC,QAAAA,OAAO,EAAE,KAAKE,KAAL,CAAWF;AAJf,OAAP;AAMD;;;WAzED,uBAA8B;AAC5B,aAAOiB,sBAAaC,WAAb,EAAP;AACD;;;WAGD,yBAA8D;AAAA,UAAzChB,KAAyC,uEAAhB,EAAgB;AAC5DD,MAAAA,UAAU,CAACkB,WAAX,GAAyBlB,UAAU,CAACkB,WAAX,IAA0B,IAAIlB,UAAJ,CAAe,EAAf,CAAnD;;AACAA,MAAAA,UAAU,CAACkB,WAAX,CAAuBf,QAAvB,CAAgCF,KAAhC;;AACA,aAAOD,UAAU,CAACkB,WAAlB;AACD;;;;;;8BAhBkBlB,U","sourcesContent":["import WorkerPool from './worker-pool';\nimport WorkerThread from './worker-thread';\n\n/**\n * @param maxConcurrency - max count of workers\n * @param maxMobileConcurrency - max count of workers on mobile\n * @param maxConcurrency - max count of workers\n * @param reuseWorkers - if false, destroys workers when task is completed\n * @param onDebug - callback intended to allow application to log worker pool activity\n */\nexport type WorkerFarmProps = {\n maxConcurrency?: number;\n maxMobileConcurrency?: number;\n reuseWorkers?: boolean;\n onDebug?: () => void;\n};\n\nconst DEFAULT_PROPS: Required<WorkerFarmProps> = {\n maxConcurrency: 3,\n maxMobileConcurrency: 1,\n reuseWorkers: true,\n onDebug: () => {}\n};\n\n/**\n * Process multiple jobs with a \"farm\" of different workers in worker pools.\n */\nexport default class WorkerFarm {\n private props: WorkerFarmProps;\n private workerPools = new Map<string, WorkerPool>();\n // singleton\n private static _workerFarm?: WorkerFarm;\n\n /** Checks if workers are supported on this platform */\n static isSupported(): boolean {\n return WorkerThread.isSupported();\n }\n\n /** Get the singleton instance of the global worker farm */\n static getWorkerFarm(props: WorkerFarmProps = {}): WorkerFarm {\n WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});\n WorkerFarm._workerFarm.setProps(props);\n return WorkerFarm._workerFarm;\n }\n\n /** get global instance with WorkerFarm.getWorkerFarm() */\n private constructor(props: WorkerFarmProps) {\n this.props = {...DEFAULT_PROPS};\n this.setProps(props);\n /** @type Map<string, WorkerPool>} */\n this.workerPools = new Map();\n }\n\n /**\n * Terminate all workers in the farm\n * @note Can free up significant memory\n */\n destroy(): void {\n for (const workerPool of this.workerPools.values()) {\n workerPool.destroy();\n }\n this.workerPools = new Map<string, WorkerPool>();\n }\n\n /**\n * Set props used when initializing worker pools\n * @param props\n */\n setProps(props: WorkerFarmProps): void {\n this.props = {...this.props, ...props};\n // Update worker pool props\n for (const workerPool of this.workerPools.values()) {\n workerPool.setProps(this._getWorkerPoolProps());\n }\n }\n\n /**\n * Returns a worker pool for the specified worker\n * @param options - only used first time for a specific worker name\n * @param options.name - the name of the worker - used to identify worker pool\n * @param options.url -\n * @param options.source -\n * @example\n * const job = WorkerFarm.getWorkerFarm().getWorkerPool({name, url}).startJob(...);\n */\n getWorkerPool(options: {name: string; source?: string; url?: string}): WorkerPool {\n const {name, source, url} = options;\n let workerPool = this.workerPools.get(name);\n if (!workerPool) {\n workerPool = new WorkerPool({\n name,\n source,\n url\n });\n workerPool.setProps(this._getWorkerPoolProps());\n this.workerPools.set(name, workerPool);\n }\n return workerPool;\n }\n\n _getWorkerPoolProps() {\n return {\n maxConcurrency: this.props.maxConcurrency,\n maxMobileConcurrency: this.props.maxMobileConcurrency,\n reuseWorkers: this.props.reuseWorkers,\n onDebug: this.props.onDebug\n };\n }\n}\n"],"file":"worker-farm.js"}
1
+ {"version":3,"file":"worker-farm.js","names":["DEFAULT_PROPS","maxConcurrency","maxMobileConcurrency","reuseWorkers","onDebug","WorkerFarm","props","Map","setProps","workerPools","values","workerPool","destroy","_getWorkerPoolProps","options","name","source","url","get","WorkerPool","set","WorkerThread","isSupported","_workerFarm"],"sources":["../../../../src/lib/worker-farm/worker-farm.ts"],"sourcesContent":["import WorkerPool from './worker-pool';\nimport WorkerThread from './worker-thread';\n\n/**\n * @param maxConcurrency - max count of workers\n * @param maxMobileConcurrency - max count of workers on mobile\n * @param maxConcurrency - max count of workers\n * @param reuseWorkers - if false, destroys workers when task is completed\n * @param onDebug - callback intended to allow application to log worker pool activity\n */\nexport type WorkerFarmProps = {\n maxConcurrency?: number;\n maxMobileConcurrency?: number;\n reuseWorkers?: boolean;\n onDebug?: () => void;\n};\n\nconst DEFAULT_PROPS: Required<WorkerFarmProps> = {\n maxConcurrency: 3,\n maxMobileConcurrency: 1,\n reuseWorkers: true,\n onDebug: () => {}\n};\n\n/**\n * Process multiple jobs with a \"farm\" of different workers in worker pools.\n */\nexport default class WorkerFarm {\n private props: WorkerFarmProps;\n private workerPools = new Map<string, WorkerPool>();\n // singleton\n private static _workerFarm?: WorkerFarm;\n\n /** Checks if workers are supported on this platform */\n static isSupported(): boolean {\n return WorkerThread.isSupported();\n }\n\n /** Get the singleton instance of the global worker farm */\n static getWorkerFarm(props: WorkerFarmProps = {}): WorkerFarm {\n WorkerFarm._workerFarm = WorkerFarm._workerFarm || new WorkerFarm({});\n WorkerFarm._workerFarm.setProps(props);\n return WorkerFarm._workerFarm;\n }\n\n /** get global instance with WorkerFarm.getWorkerFarm() */\n private constructor(props: WorkerFarmProps) {\n this.props = {...DEFAULT_PROPS};\n this.setProps(props);\n /** @type Map<string, WorkerPool>} */\n this.workerPools = new Map();\n }\n\n /**\n * Terminate all workers in the farm\n * @note Can free up significant memory\n */\n destroy(): void {\n for (const workerPool of this.workerPools.values()) {\n workerPool.destroy();\n }\n this.workerPools = new Map<string, WorkerPool>();\n }\n\n /**\n * Set props used when initializing worker pools\n * @param props\n */\n setProps(props: WorkerFarmProps): void {\n this.props = {...this.props, ...props};\n // Update worker pool props\n for (const workerPool of this.workerPools.values()) {\n workerPool.setProps(this._getWorkerPoolProps());\n }\n }\n\n /**\n * Returns a worker pool for the specified worker\n * @param options - only used first time for a specific worker name\n * @param options.name - the name of the worker - used to identify worker pool\n * @param options.url -\n * @param options.source -\n * @example\n * const job = WorkerFarm.getWorkerFarm().getWorkerPool({name, url}).startJob(...);\n */\n getWorkerPool(options: {name: string; source?: string; url?: string}): WorkerPool {\n const {name, source, url} = options;\n let workerPool = this.workerPools.get(name);\n if (!workerPool) {\n workerPool = new WorkerPool({\n name,\n source,\n url\n });\n workerPool.setProps(this._getWorkerPoolProps());\n this.workerPools.set(name, workerPool);\n }\n return workerPool;\n }\n\n _getWorkerPoolProps() {\n return {\n maxConcurrency: this.props.maxConcurrency,\n maxMobileConcurrency: this.props.maxMobileConcurrency,\n reuseWorkers: this.props.reuseWorkers,\n onDebug: this.props.onDebug\n };\n }\n}\n"],"mappings":";;;;;;;;;;AAAA;AACA;AAA2C;AAAA;AAAA;AAAA;AAAA;AAgB3C,IAAMA,aAAwC,GAAG;EAC/CC,cAAc,EAAE,CAAC;EACjBC,oBAAoB,EAAE,CAAC;EACvBC,YAAY,EAAE,IAAI;EAClBC,OAAO,EAAE,mBAAM,CAAC;AAClB,CAAC;;AAAC,IAKmBC,UAAU;EAmB7B,oBAAoBC,KAAsB,EAAE;IAAA;IAAA;IAAA,mDAjBtB,IAAIC,GAAG,EAAsB;IAkBjD,IAAI,CAACD,KAAK,qBAAON,aAAa,CAAC;IAC/B,IAAI,CAACQ,QAAQ,CAACF,KAAK,CAAC;IAEpB,IAAI,CAACG,WAAW,GAAG,IAAIF,GAAG,EAAE;EAC9B;;EAAC;IAAA;IAAA;IAMD,mBAAgB;MAAA,2CACW,IAAI,CAACE,WAAW,CAACC,MAAM,EAAE;QAAA;MAAA;QAAlD,oDAAoD;UAAA,IAAzCC,UAAU;UACnBA,UAAU,CAACC,OAAO,EAAE;QACtB;MAAC;QAAA;MAAA;QAAA;MAAA;MACD,IAAI,CAACH,WAAW,GAAG,IAAIF,GAAG,EAAsB;IAClD;;EAAC;IAAA;IAAA;IAMD,kBAASD,KAAsB,EAAQ;MACrC,IAAI,CAACA,KAAK,mCAAO,IAAI,CAACA,KAAK,GAAKA,KAAK,CAAC;MAAC,4CAEd,IAAI,CAACG,WAAW,CAACC,MAAM,EAAE;QAAA;MAAA;QAAlD,uDAAoD;UAAA,IAAzCC,UAAU;UACnBA,UAAU,CAACH,QAAQ,CAAC,IAAI,CAACK,mBAAmB,EAAE,CAAC;QACjD;MAAC;QAAA;MAAA;QAAA;MAAA;IACH;;EAAC;IAAA;IAAA;IAWD,uBAAcC,OAAsD,EAAc;MAChF,IAAOC,IAAI,GAAiBD,OAAO,CAA5BC,IAAI;QAAEC,MAAM,GAASF,OAAO,CAAtBE,MAAM;QAAEC,GAAG,GAAIH,OAAO,CAAdG,GAAG;MACxB,IAAIN,UAAU,GAAG,IAAI,CAACF,WAAW,CAACS,GAAG,CAACH,IAAI,CAAC;MAC3C,IAAI,CAACJ,UAAU,EAAE;QACfA,UAAU,GAAG,IAAIQ,mBAAU,CAAC;UAC1BJ,IAAI,EAAJA,IAAI;UACJC,MAAM,EAANA,MAAM;UACNC,GAAG,EAAHA;QACF,CAAC,CAAC;QACFN,UAAU,CAACH,QAAQ,CAAC,IAAI,CAACK,mBAAmB,EAAE,CAAC;QAC/C,IAAI,CAACJ,WAAW,CAACW,GAAG,CAACL,IAAI,EAAEJ,UAAU,CAAC;MACxC;MACA,OAAOA,UAAU;IACnB;EAAC;IAAA;IAAA,OAED,+BAAsB;MACpB,OAAO;QACLV,cAAc,EAAE,IAAI,CAACK,KAAK,CAACL,cAAc;QACzCC,oBAAoB,EAAE,IAAI,CAACI,KAAK,CAACJ,oBAAoB;QACrDC,YAAY,EAAE,IAAI,CAACG,KAAK,CAACH,YAAY;QACrCC,OAAO,EAAE,IAAI,CAACE,KAAK,CAACF;MACtB,CAAC;IACH;EAAC;IAAA;IAAA;;IAzED,uBAA8B;MAC5B,OAAOiB,qBAAY,CAACC,WAAW,EAAE;IACnC;;EAAC;IAAA;IAAA;IAGD,yBAA8D;MAAA,IAAzChB,KAAsB,uEAAG,CAAC,CAAC;MAC9CD,UAAU,CAACkB,WAAW,GAAGlB,UAAU,CAACkB,WAAW,IAAI,IAAIlB,UAAU,CAAC,CAAC,CAAC,CAAC;MACrEA,UAAU,CAACkB,WAAW,CAACf,QAAQ,CAACF,KAAK,CAAC;MACtC,OAAOD,UAAU,CAACkB,WAAW;IAC/B;;EAAC;EAAA;AAAA;AAAA;AAAA,8BAhBkBlB,UAAU"}
@@ -1,24 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
11
  var _assert = require("../env-utils/assert");
17
-
18
12
  var WorkerJob = function () {
13
+
19
14
  function WorkerJob(jobName, workerThread) {
20
15
  var _this = this;
21
-
22
16
  (0, _classCallCheck2.default)(this, WorkerJob);
23
17
  (0, _defineProperty2.default)(this, "name", void 0);
24
18
  (0, _defineProperty2.default)(this, "workerThread", void 0);
@@ -36,32 +30,34 @@ var WorkerJob = function () {
36
30
 
37
31
  (0, _createClass2.default)(WorkerJob, [{
38
32
  key: "postMessage",
39
- value: function postMessage(type, payload) {
33
+ value:
34
+ function postMessage(type, payload) {
40
35
  this.workerThread.postMessage({
41
36
  source: 'loaders.gl',
42
37
  type: type,
43
38
  payload: payload
44
39
  });
45
40
  }
41
+
46
42
  }, {
47
43
  key: "done",
48
- value: function done(value) {
44
+ value:
45
+ function done(value) {
49
46
  (0, _assert.assert)(this.isRunning);
50
47
  this.isRunning = false;
51
-
52
48
  this._resolve(value);
53
49
  }
50
+
54
51
  }, {
55
52
  key: "error",
56
- value: function error(_error) {
53
+ value:
54
+ function error(_error) {
57
55
  (0, _assert.assert)(this.isRunning);
58
56
  this.isRunning = false;
59
-
60
57
  this._reject(_error);
61
58
  }
62
59
  }]);
63
60
  return WorkerJob;
64
61
  }();
65
-
66
62
  exports.default = WorkerJob;
67
63
  //# sourceMappingURL=worker-job.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/worker-farm/worker-job.ts"],"names":["WorkerJob","jobName","workerThread","name","result","Promise","resolve","reject","_resolve","_reject","type","payload","postMessage","source","value","isRunning","error"],"mappings":";;;;;;;;;;;;;;;AAEA;;IAKqBA,S;AAUnB,qBAAYC,OAAZ,EAA6BC,YAA7B,EAAyD;AAAA;;AAAA;AAAA;AAAA;AAAA,qDAPpC,IAOoC;AAAA;AAAA,oDAHhB,YAAM,CAAE,CAGQ;AAAA,mDAFf,YAAM,CAAE,CAEO;AACvD,SAAKC,IAAL,GAAYF,OAAZ;AACA,SAAKC,YAAL,GAAoBA,YAApB;AACA,SAAKE,MAAL,GAAc,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AAC7C,MAAA,KAAI,CAACC,QAAL,GAAgBF,OAAhB;AACA,MAAA,KAAI,CAACG,OAAL,GAAeF,MAAf;AACD,KAHa,CAAd;AAID;;;;WAMD,qBAAYG,IAAZ,EAAqCC,OAArC,EAA0E;AACxE,WAAKT,YAAL,CAAkBU,WAAlB,CAA8B;AAC5BC,QAAAA,MAAM,EAAE,YADoB;AAE5BH,QAAAA,IAAI,EAAJA,IAF4B;AAG5BC,QAAAA,OAAO,EAAPA;AAH4B,OAA9B;AAKD;;;WAKD,cAAKG,KAAL,EAAuB;AACrB,0BAAO,KAAKC,SAAZ;AACA,WAAKA,SAAL,GAAiB,KAAjB;;AACA,WAAKP,QAAL,CAAcM,KAAd;AACD;;;WAKD,eAAME,MAAN,EAA0B;AACxB,0BAAO,KAAKD,SAAZ;AACA,WAAKA,SAAL,GAAiB,KAAjB;;AACA,WAAKN,OAAL,CAAaO,MAAb;AACD","sourcesContent":["import type {WorkerMessageType, WorkerMessagePayload} from '../../types';\nimport WorkerThread from './worker-thread';\nimport {assert} from '../env-utils/assert';\n\n/**\n * Represents one Job handled by a WorkerPool or WorkerFarm\n */\nexport default class WorkerJob {\n readonly name: string;\n readonly workerThread: WorkerThread;\n isRunning: boolean = true;\n /** Promise that resolves when Job is done */\n readonly result: Promise<any>;\n\n private _resolve: (value: any) => void = () => {};\n private _reject: (reason?: any) => void = () => {};\n\n constructor(jobName: string, workerThread: WorkerThread) {\n this.name = jobName;\n this.workerThread = workerThread;\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n /**\n * Send a message to the job's worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n */\n postMessage(type: WorkerMessageType, payload: WorkerMessagePayload): void {\n this.workerThread.postMessage({\n source: 'loaders.gl', // Lets worker ignore unrelated messages\n type,\n payload\n });\n }\n\n /**\n * Call to resolve the `result` Promise with the supplied value\n */\n done(value: any): void {\n assert(this.isRunning);\n this.isRunning = false;\n this._resolve(value);\n }\n\n /**\n * Call to reject the `result` Promise with the supplied error\n */\n error(error: Error): void {\n assert(this.isRunning);\n this.isRunning = false;\n this._reject(error);\n }\n}\n"],"file":"worker-job.js"}
1
+ {"version":3,"file":"worker-job.js","names":["WorkerJob","jobName","workerThread","name","result","Promise","resolve","reject","_resolve","_reject","type","payload","postMessage","source","value","assert","isRunning","error"],"sources":["../../../../src/lib/worker-farm/worker-job.ts"],"sourcesContent":["import type {WorkerMessageType, WorkerMessagePayload} from '../../types';\nimport WorkerThread from './worker-thread';\nimport {assert} from '../env-utils/assert';\n\n/**\n * Represents one Job handled by a WorkerPool or WorkerFarm\n */\nexport default class WorkerJob {\n readonly name: string;\n readonly workerThread: WorkerThread;\n isRunning: boolean = true;\n /** Promise that resolves when Job is done */\n readonly result: Promise<any>;\n\n private _resolve: (value: any) => void = () => {};\n private _reject: (reason?: any) => void = () => {};\n\n constructor(jobName: string, workerThread: WorkerThread) {\n this.name = jobName;\n this.workerThread = workerThread;\n this.result = new Promise((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n /**\n * Send a message to the job's worker thread\n * @param data any data structure, ideally consisting mostly of transferrable objects\n */\n postMessage(type: WorkerMessageType, payload: WorkerMessagePayload): void {\n this.workerThread.postMessage({\n source: 'loaders.gl', // Lets worker ignore unrelated messages\n type,\n payload\n });\n }\n\n /**\n * Call to resolve the `result` Promise with the supplied value\n */\n done(value: any): void {\n assert(this.isRunning);\n this.isRunning = false;\n this._resolve(value);\n }\n\n /**\n * Call to reject the `result` Promise with the supplied error\n */\n error(error: Error): void {\n assert(this.isRunning);\n this.isRunning = false;\n this._reject(error);\n }\n}\n"],"mappings":";;;;;;;;;;AAEA;AAA2C,IAKtBA,SAAS;;EAU5B,mBAAYC,OAAe,EAAEC,YAA0B,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA,iDAPpC,IAAI;IAAA;IAAA,gDAIgB,YAAM,CAAC,CAAC;IAAA,+CACP,YAAM,CAAC,CAAC;IAGhD,IAAI,CAACC,IAAI,GAAGF,OAAO;IACnB,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACE,MAAM,GAAG,IAAIC,OAAO,CAAC,UAACC,OAAO,EAAEC,MAAM,EAAK;MAC7C,KAAI,CAACC,QAAQ,GAAGF,OAAO;MACvB,KAAI,CAACG,OAAO,GAAGF,MAAM;IACvB,CAAC,CAAC;EACJ;;EAAC;IAAA;IAAA;IAMD,qBAAYG,IAAuB,EAAEC,OAA6B,EAAQ;MACxE,IAAI,CAACT,YAAY,CAACU,WAAW,CAAC;QAC5BC,MAAM,EAAE,YAAY;QACpBH,IAAI,EAAJA,IAAI;QACJC,OAAO,EAAPA;MACF,CAAC,CAAC;IACJ;;EAAC;IAAA;IAAA;IAKD,cAAKG,KAAU,EAAQ;MACrB,IAAAC,cAAM,EAAC,IAAI,CAACC,SAAS,CAAC;MACtB,IAAI,CAACA,SAAS,GAAG,KAAK;MACtB,IAAI,CAACR,QAAQ,CAACM,KAAK,CAAC;IACtB;;EAAC;IAAA;IAAA;IAKD,eAAMG,MAAY,EAAQ;MACxB,IAAAF,cAAM,EAAC,IAAI,CAACC,SAAS,CAAC;MACtB,IAAI,CAACA,SAAS,GAAG,KAAK;MACtB,IAAI,CAACP,OAAO,CAACQ,MAAK,CAAC;IACrB;EAAC;EAAA;AAAA;AAAA"}
@@ -1,32 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
-
12
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
-
14
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
-
20
13
  var _globals = require("../env-utils/globals");
21
-
22
14
  var _workerThread = _interopRequireDefault(require("./worker-thread"));
23
-
24
15
  var _workerJob = _interopRequireDefault(require("./worker-job"));
25
-
26
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
27
-
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
-
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
30
18
  var WorkerPool = function () {
31
19
  function WorkerPool(props) {
32
20
  (0, _classCallCheck2.default)(this, WorkerPool);
@@ -49,7 +37,8 @@ var WorkerPool = function () {
49
37
 
50
38
  (0, _createClass2.default)(WorkerPool, [{
51
39
  key: "destroy",
52
- value: function destroy() {
40
+ value:
41
+ function destroy() {
53
42
  this.idleQueue.forEach(function (worker) {
54
43
  return worker.destroy();
55
44
  });
@@ -59,23 +48,18 @@ var WorkerPool = function () {
59
48
  key: "setProps",
60
49
  value: function setProps(props) {
61
50
  this.props = _objectSpread(_objectSpread({}, this.props), props);
62
-
63
51
  if (props.name !== undefined) {
64
52
  this.name = props.name;
65
53
  }
66
-
67
54
  if (props.maxConcurrency !== undefined) {
68
55
  this.maxConcurrency = props.maxConcurrency;
69
56
  }
70
-
71
57
  if (props.maxMobileConcurrency !== undefined) {
72
58
  this.maxMobileConcurrency = props.maxMobileConcurrency;
73
59
  }
74
-
75
60
  if (props.reuseWorkers !== undefined) {
76
61
  this.reuseWorkers = props.reuseWorkers;
77
62
  }
78
-
79
63
  if (props.onDebug !== undefined) {
80
64
  this.onDebug = props.onDebug;
81
65
  }
@@ -85,11 +69,10 @@ var WorkerPool = function () {
85
69
  value: function () {
86
70
  var _startJob = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(name) {
87
71
  var _this = this;
88
-
89
72
  var onMessage,
90
- onError,
91
- startPromise,
92
- _args = arguments;
73
+ onError,
74
+ startPromise,
75
+ _args = arguments;
93
76
  return _regenerator.default.wrap(function _callee$(_context) {
94
77
  while (1) {
95
78
  switch (_context.prev = _context.next) {
@@ -107,18 +90,13 @@ var WorkerPool = function () {
107
90
  onError: onError,
108
91
  onStart: onStart
109
92
  });
110
-
111
93
  return _this;
112
94
  });
113
-
114
95
  this._startQueuedJob();
115
-
116
96
  _context.next = 6;
117
97
  return startPromise;
118
-
119
98
  case 6:
120
99
  return _context.abrupt("return", _context.sent);
121
-
122
100
  case 7:
123
101
  case "end":
124
102
  return _context.stop();
@@ -126,11 +104,9 @@ var WorkerPool = function () {
126
104
  }
127
105
  }, _callee, this);
128
106
  }));
129
-
130
107
  function startJob(_x) {
131
108
  return _startJob.apply(this, arguments);
132
109
  }
133
-
134
110
  return startJob;
135
111
  }()
136
112
  }, {
@@ -138,7 +114,6 @@ var WorkerPool = function () {
138
114
  value: function () {
139
115
  var _startQueuedJob2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2() {
140
116
  var workerThread, queuedJob, _job;
141
-
142
117
  return _regenerator.default.wrap(function _callee2$(_context2) {
143
118
  while (1) {
144
119
  switch (_context2.prev = _context2.next) {
@@ -147,53 +122,44 @@ var WorkerPool = function () {
147
122
  _context2.next = 2;
148
123
  break;
149
124
  }
150
-
151
125
  return _context2.abrupt("return");
152
-
153
126
  case 2:
154
127
  workerThread = this._getAvailableWorker();
155
-
156
128
  if (workerThread) {
157
129
  _context2.next = 5;
158
130
  break;
159
131
  }
160
-
161
132
  return _context2.abrupt("return");
162
-
163
133
  case 5:
164
134
  queuedJob = this.jobQueue.shift();
165
-
166
135
  if (!queuedJob) {
167
136
  _context2.next = 18;
168
137
  break;
169
138
  }
170
-
171
139
  this.onDebug({
172
140
  message: 'Starting job',
173
141
  name: queuedJob.name,
174
142
  workerThread: workerThread,
175
143
  backlog: this.jobQueue.length
176
144
  });
177
- _job = new _workerJob.default(queuedJob.name, workerThread);
178
145
 
146
+ _job = new _workerJob.default(queuedJob.name, workerThread);
179
147
  workerThread.onMessage = function (data) {
180
148
  return queuedJob.onMessage(_job, data.type, data.payload);
181
149
  };
182
-
183
150
  workerThread.onError = function (error) {
184
151
  return queuedJob.onError(_job, error);
185
152
  };
186
153
 
187
154
  queuedJob.onStart(_job);
155
+
188
156
  _context2.prev = 12;
189
157
  _context2.next = 15;
190
158
  return _job.result;
191
-
192
159
  case 15:
193
160
  _context2.prev = 15;
194
161
  this.returnWorkerToQueue(workerThread);
195
162
  return _context2.finish(15);
196
-
197
163
  case 18:
198
164
  case "end":
199
165
  return _context2.stop();
@@ -201,32 +167,31 @@ var WorkerPool = function () {
201
167
  }
202
168
  }, _callee2, this, [[12,, 15, 18]]);
203
169
  }));
204
-
205
170
  function _startQueuedJob() {
206
171
  return _startQueuedJob2.apply(this, arguments);
207
172
  }
208
-
209
173
  return _startQueuedJob;
210
174
  }()
211
175
  }, {
212
176
  key: "returnWorkerToQueue",
213
- value: function returnWorkerToQueue(worker) {
177
+ value:
178
+ function returnWorkerToQueue(worker) {
214
179
  var shouldDestroyWorker = this.isDestroyed || !this.reuseWorkers || this.count > this._getMaxConcurrency();
215
-
216
180
  if (shouldDestroyWorker) {
217
181
  worker.destroy();
218
182
  this.count--;
219
183
  } else {
220
184
  this.idleQueue.push(worker);
221
185
  }
222
-
223
186
  if (!this.isDestroyed) {
224
187
  this._startQueuedJob();
225
188
  }
226
189
  }
190
+
227
191
  }, {
228
192
  key: "_getAvailableWorker",
229
- value: function _getAvailableWorker() {
193
+ value:
194
+ function _getAvailableWorker() {
230
195
  if (this.idleQueue.length > 0) {
231
196
  return this.idleQueue.shift() || null;
232
197
  }
@@ -250,12 +215,14 @@ var WorkerPool = function () {
250
215
  }
251
216
  }], [{
252
217
  key: "isSupported",
253
- value: function isSupported() {
218
+ value:
219
+
220
+ function isSupported() {
254
221
  return _workerThread.default.isSupported();
255
222
  }
223
+
256
224
  }]);
257
225
  return WorkerPool;
258
226
  }();
259
-
260
227
  exports.default = WorkerPool;
261
228
  //# sourceMappingURL=worker-pool.js.map