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

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 (57) hide show
  1. package/dist/index.d.ts +20 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/lib/async-queue/async-queue.d.ts +32 -0
  4. package/dist/lib/async-queue/async-queue.d.ts.map +1 -0
  5. package/dist/lib/env-utils/assert.d.ts +3 -0
  6. package/dist/lib/env-utils/assert.d.ts.map +1 -0
  7. package/dist/lib/env-utils/globals.d.ts +22 -0
  8. package/dist/lib/env-utils/globals.d.ts.map +1 -0
  9. package/dist/lib/env-utils/version.d.ts +2 -0
  10. package/dist/lib/env-utils/version.d.ts.map +1 -0
  11. package/dist/lib/env-utils/version.js +2 -2
  12. package/dist/lib/library-utils/library-utils.d.ts +18 -0
  13. package/dist/lib/library-utils/library-utils.d.ts.map +1 -0
  14. package/dist/lib/library-utils/library-utils.js +6 -2
  15. package/dist/lib/library-utils/library-utils.js.map +1 -1
  16. package/dist/lib/node/require-utils.node.d.ts +6 -0
  17. package/dist/lib/node/require-utils.node.d.ts.map +1 -0
  18. package/dist/lib/process-utils/child-process-proxy.d.ts +43 -0
  19. package/dist/lib/process-utils/child-process-proxy.d.ts.map +1 -0
  20. package/dist/lib/process-utils/process-utils.d.ts +2 -0
  21. package/dist/lib/process-utils/process-utils.d.ts.map +1 -0
  22. package/dist/lib/worker-api/create-worker.d.ts +9 -0
  23. package/dist/lib/worker-api/create-worker.d.ts.map +1 -0
  24. package/dist/lib/worker-api/get-worker-url.d.ts +14 -0
  25. package/dist/lib/worker-api/get-worker-url.d.ts.map +1 -0
  26. package/dist/lib/worker-api/get-worker-url.js +5 -1
  27. package/dist/lib/worker-api/get-worker-url.js.map +1 -1
  28. package/dist/lib/worker-api/process-on-worker.d.ts +20 -0
  29. package/dist/lib/worker-api/process-on-worker.d.ts.map +1 -0
  30. package/dist/lib/worker-api/validate-worker-version.d.ts +9 -0
  31. package/dist/lib/worker-api/validate-worker-version.d.ts.map +1 -0
  32. package/dist/lib/worker-farm/worker-body.d.ts +16 -0
  33. package/dist/lib/worker-farm/worker-body.d.ts.map +1 -0
  34. package/dist/lib/worker-farm/worker-farm.d.ts +55 -0
  35. package/dist/lib/worker-farm/worker-farm.d.ts.map +1 -0
  36. package/dist/lib/worker-farm/worker-job.d.ts +29 -0
  37. package/dist/lib/worker-farm/worker-job.d.ts.map +1 -0
  38. package/dist/lib/worker-farm/worker-pool.d.ts +75 -0
  39. package/dist/lib/worker-farm/worker-pool.d.ts.map +1 -0
  40. package/dist/lib/worker-farm/worker-thread.d.ts +42 -0
  41. package/dist/lib/worker-farm/worker-thread.d.ts.map +1 -0
  42. package/dist/lib/worker-utils/get-loadable-worker-url.d.ts +14 -0
  43. package/dist/lib/worker-utils/get-loadable-worker-url.d.ts.map +1 -0
  44. package/dist/lib/worker-utils/get-transfer-list.d.ts +10 -0
  45. package/dist/lib/worker-utils/get-transfer-list.d.ts.map +1 -0
  46. package/dist/lib/worker-utils/remove-nontransferable-options.d.ts +6 -0
  47. package/dist/lib/worker-utils/remove-nontransferable-options.d.ts.map +1 -0
  48. package/dist/null-worker.js +189 -550
  49. package/dist/null-worker.js.map +7 -1
  50. package/dist/types.d.ts +57 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/workers/null-worker.d.ts +2 -0
  53. package/dist/workers/null-worker.d.ts.map +1 -0
  54. package/package.json +7 -5
  55. package/src/lib/library-utils/library-utils.ts +5 -1
  56. package/src/lib/worker-api/get-worker-url.ts +10 -0
  57. package/src/types.ts +1 -0
@@ -1,576 +1,215 @@
1
- /******/ (function(modules) { // webpackBootstrap
2
- /******/ // The module cache
3
- /******/ var installedModules = {};
4
- /******/
5
- /******/ // The require function
6
- /******/ function __webpack_require__(moduleId) {
7
- /******/
8
- /******/ // Check if module is in cache
9
- /******/ if(installedModules[moduleId]) {
10
- /******/ return installedModules[moduleId].exports;
11
- /******/ }
12
- /******/ // Create a new module (and put it into the cache)
13
- /******/ var module = installedModules[moduleId] = {
14
- /******/ i: moduleId,
15
- /******/ l: false,
16
- /******/ exports: {}
17
- /******/ };
18
- /******/
19
- /******/ // Execute the module function
20
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21
- /******/
22
- /******/ // Flag the module as loaded
23
- /******/ module.l = true;
24
- /******/
25
- /******/ // Return the exports of the module
26
- /******/ return module.exports;
27
- /******/ }
28
- /******/
29
- /******/
30
- /******/ // expose the modules object (__webpack_modules__)
31
- /******/ __webpack_require__.m = modules;
32
- /******/
33
- /******/ // expose the module cache
34
- /******/ __webpack_require__.c = installedModules;
35
- /******/
36
- /******/ // define getter function for harmony exports
37
- /******/ __webpack_require__.d = function(exports, name, getter) {
38
- /******/ if(!__webpack_require__.o(exports, name)) {
39
- /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
40
- /******/ }
41
- /******/ };
42
- /******/
43
- /******/ // define __esModule on exports
44
- /******/ __webpack_require__.r = function(exports) {
45
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47
- /******/ }
48
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
49
- /******/ };
50
- /******/
51
- /******/ // create a fake namespace object
52
- /******/ // mode & 1: value is a module id, require it
53
- /******/ // mode & 2: merge all properties of value into the ns
54
- /******/ // mode & 4: return value when already ns object
55
- /******/ // mode & 8|1: behave like require
56
- /******/ __webpack_require__.t = function(value, mode) {
57
- /******/ if(mode & 1) value = __webpack_require__(value);
58
- /******/ if(mode & 8) return value;
59
- /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60
- /******/ var ns = Object.create(null);
61
- /******/ __webpack_require__.r(ns);
62
- /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63
- /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64
- /******/ return ns;
65
- /******/ };
66
- /******/
67
- /******/ // getDefaultExport function for compatibility with non-harmony modules
68
- /******/ __webpack_require__.n = function(module) {
69
- /******/ var getter = module && module.__esModule ?
70
- /******/ function getDefault() { return module['default']; } :
71
- /******/ function getModuleExports() { return module; };
72
- /******/ __webpack_require__.d(getter, 'a', getter);
73
- /******/ return getter;
74
- /******/ };
75
- /******/
76
- /******/ // Object.prototype.hasOwnProperty.call
77
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78
- /******/
79
- /******/ // __webpack_public_path__
80
- /******/ __webpack_require__.p = "";
81
- /******/
82
- /******/
83
- /******/ // Load entry module and return exports
84
- /******/ return __webpack_require__(__webpack_require__.s = "./src/workers/null-worker.ts");
85
- /******/ })
86
- /************************************************************************/
87
- /******/ ({
88
-
89
- /***/ "../../node_modules/@babel/runtime/helpers/defineProperty.js":
90
- /*!**************************************************************************************************!*\
91
- !*** /home/user/apps/loaders.gl_duplicate/node_modules/@babel/runtime/helpers/defineProperty.js ***!
92
- \**************************************************************************************************/
93
- /*! no static exports found */
94
- /***/ (function(module, exports) {
95
-
96
- function _defineProperty(obj, key, value) {
97
- if (key in obj) {
98
- Object.defineProperty(obj, key, {
99
- value: value,
100
- enumerable: true,
101
- configurable: true,
102
- writable: true
103
- });
104
- } else {
105
- obj[key] = value;
106
- }
107
-
108
- return obj;
109
- }
110
-
111
- module.exports = _defineProperty;
112
- module.exports["default"] = module.exports, module.exports.__esModule = true;
113
-
114
- /***/ }),
115
-
116
- /***/ "./src/lib/async-queue/async-queue.ts":
117
- /*!********************************************!*\
118
- !*** ./src/lib/async-queue/async-queue.ts ***!
119
- \********************************************/
120
- /*! exports provided: default */
121
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
122
-
123
- "use strict";
124
- __webpack_require__.r(__webpack_exports__);
125
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return AsyncQueue; });
126
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../node_modules/@babel/runtime/helpers/defineProperty.js");
127
- /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
128
-
129
-
130
- let _Symbol$asyncIterator;
131
-
132
- _Symbol$asyncIterator = Symbol.asyncIterator;
133
- // From https://github.com/rauschma/async-iter-demo/tree/master/src under MIT license
134
- // http://2ality.com/2016/10/asynchronous-iteration.html
135
-
136
- /**
137
- * Async Queue
138
- * - AsyncIterable: An async iterator can be
139
- * - Values can be pushed onto the queue
140
- * @example
141
- * const asyncQueue = new AsyncQueue();
142
- * setTimeout(() => asyncQueue.enqueue('tick'), 1000);
143
- * setTimeout(() => asyncQueue.enqueue(new Error('done')), 10000);
144
- * for await (const value of asyncQueue) {
145
- * console.log(value); // tick
146
- * }
147
- */
148
- class AsyncQueue {
149
- constructor() {
150
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_values", void 0);
151
-
152
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_settlers", void 0);
153
-
154
- _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(this, "_closed", void 0);
155
-
156
- this._values = []; // enqueues > dequeues
157
-
158
- this._settlers = []; // dequeues > enqueues
159
-
160
- this._closed = false;
161
- }
162
- /** Return an async iterator for this queue */
163
-
164
-
165
- [_Symbol$asyncIterator]() {
166
- return this;
167
- }
168
- /** Push a new value - the async iterator will yield a promise resolved to this value */
169
-
170
-
171
- push(value) {
172
- return this.enqueue(value);
173
- }
174
- /**
175
- * Push a new value - the async iterator will yield a promise resolved to this value
176
- * Add an error - the async iterator will yield a promise rejected with this value
177
- */
178
-
179
-
180
- enqueue(value) {
181
- if (this._closed) {
182
- throw new Error('Closed');
1
+ (() => {
2
+ // src/lib/async-queue/async-queue.ts
3
+ var AsyncQueue = class {
4
+ constructor() {
5
+ this._values = [];
6
+ this._settlers = [];
7
+ this._closed = false;
183
8
  }
184
-
185
- if (this._settlers.length > 0) {
186
- if (this._values.length > 0) {
187
- throw new Error('Illegal internal state');
9
+ [Symbol.asyncIterator]() {
10
+ return this;
11
+ }
12
+ push(value) {
13
+ return this.enqueue(value);
14
+ }
15
+ enqueue(value) {
16
+ if (this._closed) {
17
+ throw new Error("Closed");
188
18
  }
189
-
190
- const settler = this._settlers.shift();
191
-
192
- if (value instanceof Error) {
193
- settler.reject(value);
19
+ if (this._settlers.length > 0) {
20
+ if (this._values.length > 0) {
21
+ throw new Error("Illegal internal state");
22
+ }
23
+ const settler = this._settlers.shift();
24
+ if (value instanceof Error) {
25
+ settler.reject(value);
26
+ } else {
27
+ settler.resolve({ value });
28
+ }
194
29
  } else {
195
- settler.resolve({
196
- value
197
- });
30
+ this._values.push(value);
198
31
  }
199
- } else {
200
- this._values.push(value);
201
- }
202
- }
203
- /** Indicate that we not waiting for more values - The async iterator will be done */
204
-
205
-
206
- close() {
207
- while (this._settlers.length > 0) {
208
- const settler = this._settlers.shift();
209
-
210
- settler.resolve({
211
- done: true
212
- });
213
32
  }
214
-
215
- this._closed = true;
216
- } // ITERATOR IMPLEMENTATION
217
-
218
- /** @returns a Promise for an IteratorResult */
219
-
220
-
221
- next() {
222
- // If values in queue, yield the first value
223
- if (this._values.length > 0) {
224
- const value = this._values.shift();
225
-
226
- if (value instanceof Error) {
227
- return Promise.reject(value);
33
+ close() {
34
+ while (this._settlers.length > 0) {
35
+ const settler = this._settlers.shift();
36
+ settler.resolve({ done: true });
228
37
  }
229
-
230
- return Promise.resolve({
231
- done: false,
232
- value
233
- });
234
- } // If queue is closed, the iterator is done
235
-
236
-
237
- if (this._closed) {
238
- if (this._settlers.length > 0) {
239
- throw new Error('Illegal internal state');
38
+ this._closed = true;
39
+ }
40
+ next() {
41
+ if (this._values.length > 0) {
42
+ const value = this._values.shift();
43
+ if (value instanceof Error) {
44
+ return Promise.reject(value);
45
+ }
46
+ return Promise.resolve({ done: false, value });
240
47
  }
241
-
242
- return Promise.resolve({
243
- done: true,
244
- value: undefined
245
- });
246
- } // Yield a promise that waits for new values to be enqueued
247
-
248
-
249
- return new Promise((resolve, reject) => {
250
- this._settlers.push({
251
- resolve,
252
- reject
253
- });
254
- });
255
- }
256
-
257
- }
258
-
259
- /***/ }),
260
-
261
- /***/ "./src/lib/worker-api/create-worker.ts":
262
- /*!*********************************************!*\
263
- !*** ./src/lib/worker-api/create-worker.ts ***!
264
- \*********************************************/
265
- /*! exports provided: createWorker */
266
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
267
-
268
- "use strict";
269
- __webpack_require__.r(__webpack_exports__);
270
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createWorker", function() { return createWorker; });
271
- /* harmony import */ var _async_queue_async_queue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../async-queue/async-queue */ "./src/lib/async-queue/async-queue.ts");
272
- /* harmony import */ var _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../worker-farm/worker-body */ "./src/lib/worker-farm/worker-body.ts");
273
-
274
- // import {validateWorkerVersion} from './validate-worker-version';
275
-
276
- /** Counter for jobs */
277
-
278
- let requestId = 0;
279
- let inputBatches;
280
- let options;
281
-
282
- /**
283
- * Set up a WebWorkerGlobalScope to talk with the main thread
284
- */
285
- function createWorker(process, processInBatches) {
286
- // Check that we are actually in a worker thread
287
- if (typeof self === 'undefined') {
288
- return;
289
- }
290
-
291
- const context = {
292
- process: processOnMainThread
293
- }; // eslint-disable-next-line complexity
294
-
295
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].onmessage = async (type, payload) => {
296
- try {
297
- switch (type) {
298
- case 'process':
299
- if (!process) {
300
- throw new Error('Worker does not support atomic processing');
301
- }
302
-
303
- const result = await process(payload.input, payload.options || {}, context);
304
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].postMessage('done', {
305
- result
306
- });
307
- break;
308
-
309
- case 'process-in-batches':
310
- if (!processInBatches) {
311
- throw new Error('Worker does not support batched processing');
312
- }
313
-
314
- inputBatches = new _async_queue_async_queue__WEBPACK_IMPORTED_MODULE_0__["default"]();
315
- options = payload.options || {};
316
- const resultIterator = processInBatches(inputBatches, options, context);
317
-
318
- for await (const batch of resultIterator) {
319
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].postMessage('output-batch', {
320
- result: batch
321
- });
322
- }
323
-
324
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].postMessage('done', {});
325
- break;
326
-
327
- case 'input-batch':
328
- inputBatches.push(payload.input);
329
- break;
330
-
331
- case 'input-done':
332
- inputBatches.close();
333
- break;
334
-
335
- default:
48
+ if (this._closed) {
49
+ if (this._settlers.length > 0) {
50
+ throw new Error("Illegal internal state");
51
+ }
52
+ return Promise.resolve({ done: true, value: void 0 });
336
53
  }
337
- } catch (error) {
338
- const message = error instanceof Error ? error.message : '';
339
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].postMessage('error', {
340
- error: message
54
+ return new Promise((resolve, reject) => {
55
+ this._settlers.push({ resolve, reject });
341
56
  });
342
57
  }
343
58
  };
344
- }
345
-
346
- function processOnMainThread(arrayBuffer, options = {}) {
347
- return new Promise((resolve, reject) => {
348
- const id = requestId++;
349
- /**
350
- */
351
-
352
- const onMessage = (type, payload) => {
353
- if (payload.id !== id) {
354
- // not ours
355
- return;
356
- }
357
-
358
- switch (type) {
359
- case 'done':
360
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].removeEventListener(onMessage);
361
- resolve(payload.result);
362
- break;
363
-
364
- case 'error':
365
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].removeEventListener(onMessage);
366
- reject(payload.error);
367
- break;
368
-
369
- default: // ignore
370
59
 
60
+ // src/lib/worker-utils/get-transfer-list.ts
61
+ function getTransferList(object, recursive = true, transfers) {
62
+ const transfersSet = transfers || new Set();
63
+ if (!object) {
64
+ } else if (isTransferable(object)) {
65
+ transfersSet.add(object);
66
+ } else if (isTransferable(object.buffer)) {
67
+ transfersSet.add(object.buffer);
68
+ } else if (ArrayBuffer.isView(object)) {
69
+ } else if (recursive && typeof object === "object") {
70
+ for (const key in object) {
71
+ getTransferList(object[key], recursive, transfersSet);
371
72
  }
372
- };
373
-
374
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].addEventListener(onMessage); // Ask the main thread to decode data
375
-
376
- const payload = {
377
- id,
378
- input: arrayBuffer,
379
- options
380
- };
381
- _worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].postMessage('process', payload);
382
- });
383
- }
384
-
385
- /***/ }),
386
-
387
- /***/ "./src/lib/worker-farm/worker-body.ts":
388
- /*!********************************************!*\
389
- !*** ./src/lib/worker-farm/worker-body.ts ***!
390
- \********************************************/
391
- /*! exports provided: default */
392
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
393
-
394
- "use strict";
395
- __webpack_require__.r(__webpack_exports__);
396
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WorkerBody; });
397
- /* harmony import */ var _worker_utils_get_transfer_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../worker-utils/get-transfer-list */ "./src/lib/worker-utils/get-transfer-list.ts");
398
-
399
- const onMessageWrapperMap = new Map();
400
- /**
401
- * Type safe wrapper for worker code
402
- */
403
-
404
- class WorkerBody {
405
- /*
406
- * (type: WorkerMessageType, payload: WorkerMessagePayload) => any
407
- */
408
- static set onmessage(onMessage) {
409
- // eslint-disable-next-line no-restricted-globals
410
- self.onmessage = message => {
411
- if (!isKnownMessage(message)) {
412
- return;
413
- } // Confusingly the message itself also has a 'type' field which is always set to 'message'
414
-
415
-
416
- const {
417
- type,
418
- payload
419
- } = message.data;
420
- onMessage(type, payload);
421
- };
73
+ }
74
+ return transfers === void 0 ? Array.from(transfersSet) : [];
75
+ }
76
+ function isTransferable(object) {
77
+ if (!object) {
78
+ return false;
79
+ }
80
+ if (object instanceof ArrayBuffer) {
81
+ return true;
82
+ }
83
+ if (typeof MessagePort !== "undefined" && object instanceof MessagePort) {
84
+ return true;
85
+ }
86
+ if (typeof ImageBitmap !== "undefined" && object instanceof ImageBitmap) {
87
+ return true;
88
+ }
89
+ if (typeof OffscreenCanvas !== "undefined" && object instanceof OffscreenCanvas) {
90
+ return true;
91
+ }
92
+ return false;
422
93
  }
423
94
 
424
- static addEventListener(onMessage) {
425
- let onMessageWrapper = onMessageWrapperMap.get(onMessage);
426
-
427
- if (!onMessageWrapper) {
428
- onMessageWrapper = message => {
95
+ // src/lib/worker-farm/worker-body.ts
96
+ var onMessageWrapperMap = new Map();
97
+ var WorkerBody = class {
98
+ static set onmessage(onMessage) {
99
+ self.onmessage = (message) => {
429
100
  if (!isKnownMessage(message)) {
430
101
  return;
431
- } // Confusingly the message itself also has a 'type' field which is always set to 'message'
432
-
433
-
434
- const {
435
- type,
436
- payload
437
- } = message.data;
102
+ }
103
+ const { type, payload } = message.data;
438
104
  onMessage(type, payload);
439
105
  };
440
- } // eslint-disable-next-line no-restricted-globals
441
-
442
-
443
- self.addEventListener('message', onMessageWrapper);
444
- }
445
-
446
- static removeEventListener(onMessage) {
447
- const onMessageWrapper = onMessageWrapperMap.get(onMessage);
448
- onMessageWrapperMap.delete(onMessage); // eslint-disable-next-line no-restricted-globals
449
-
450
- self.removeEventListener('message', onMessageWrapper);
451
- }
452
- /**
453
- * Send a message from a worker to creating thread (main thread)
454
- * @param type
455
- * @param payload
456
- */
457
-
458
-
459
- static postMessage(type, payload) {
460
- if (self) {
461
- const data = {
462
- source: 'loaders.gl',
463
- type,
464
- payload
465
- };
466
- const transferList = Object(_worker_utils_get_transfer_list__WEBPACK_IMPORTED_MODULE_0__["getTransferList"])(payload); // eslint-disable-next-line no-restricted-globals
467
- // @ts-ignore
468
-
469
- self.postMessage(data, transferList);
470
106
  }
471
- }
472
-
473
- } // Filter out noise messages sent to workers
474
-
475
- function isKnownMessage(message) {
476
- const {
477
- type,
478
- data
479
- } = message;
480
- return type === 'message' && data && typeof data.source === 'string' && data.source.startsWith('loaders.gl');
481
- }
482
-
483
- /***/ }),
484
-
485
- /***/ "./src/lib/worker-utils/get-transfer-list.ts":
486
- /*!***************************************************!*\
487
- !*** ./src/lib/worker-utils/get-transfer-list.ts ***!
488
- \***************************************************/
489
- /*! exports provided: getTransferList */
490
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
491
-
492
- "use strict";
493
- __webpack_require__.r(__webpack_exports__);
494
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTransferList", function() { return getTransferList; });
495
- // NOTE - there is a copy of this function is both in core and loader-utils
496
- // core does not need all the utils in loader-utils, just this one.
497
-
498
- /**
499
- * Returns an array of Transferrable objects that can be used with postMessage
500
- * https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage
501
- * @param object data to be sent via postMessage
502
- * @param recursive - not for application use
503
- * @param transfers - not for application use
504
- * @returns a transfer list that can be passed to postMessage
505
- */
506
- function getTransferList(object, recursive = true, transfers) {
507
- // Make sure that items in the transfer list is unique
508
- const transfersSet = transfers || new Set();
509
-
510
- if (!object) {// ignore
511
- } else if (isTransferable(object)) {
512
- transfersSet.add(object);
513
- } else if (isTransferable(object.buffer)) {
514
- // Typed array
515
- transfersSet.add(object.buffer);
516
- } else if (ArrayBuffer.isView(object)) {// object is a TypeArray viewing into a SharedArrayBuffer (not transferable)
517
- // Do not iterate through the content in this case
518
- } else if (recursive && typeof object === 'object') {
519
- for (const key in object) {
520
- // Avoid perf hit - only go one level deep
521
- getTransferList(object[key], recursive, transfersSet);
107
+ static addEventListener(onMessage) {
108
+ let onMessageWrapper = onMessageWrapperMap.get(onMessage);
109
+ if (!onMessageWrapper) {
110
+ onMessageWrapper = (message) => {
111
+ if (!isKnownMessage(message)) {
112
+ return;
113
+ }
114
+ const { type, payload } = message.data;
115
+ onMessage(type, payload);
116
+ };
117
+ }
118
+ self.addEventListener("message", onMessageWrapper);
522
119
  }
523
- } // If transfers is defined, is internal recursive call
524
- // Otherwise it's called by the user
525
-
526
-
527
- return transfers === undefined ? Array.from(transfersSet) : [];
528
- } // https://developer.mozilla.org/en-US/docs/Web/API/Transferable
529
-
530
- function isTransferable(object) {
531
- if (!object) {
532
- return false;
533
- }
534
-
535
- if (object instanceof ArrayBuffer) {
536
- return true;
120
+ static removeEventListener(onMessage) {
121
+ const onMessageWrapper = onMessageWrapperMap.get(onMessage);
122
+ onMessageWrapperMap.delete(onMessage);
123
+ self.removeEventListener("message", onMessageWrapper);
124
+ }
125
+ static postMessage(type, payload) {
126
+ if (self) {
127
+ const data = { source: "loaders.gl", type, payload };
128
+ const transferList = getTransferList(payload);
129
+ self.postMessage(data, transferList);
130
+ }
131
+ }
132
+ };
133
+ function isKnownMessage(message) {
134
+ const { type, data } = message;
135
+ return type === "message" && data && typeof data.source === "string" && data.source.startsWith("loaders.gl");
537
136
  }
538
137
 
539
- if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) {
540
- return true;
138
+ // src/lib/worker-api/create-worker.ts
139
+ var requestId = 0;
140
+ var inputBatches;
141
+ var options;
142
+ function createWorker(process, processInBatches) {
143
+ if (typeof self === "undefined") {
144
+ return;
145
+ }
146
+ const context = {
147
+ process: processOnMainThread
148
+ };
149
+ WorkerBody.onmessage = async (type, payload) => {
150
+ try {
151
+ switch (type) {
152
+ case "process":
153
+ if (!process) {
154
+ throw new Error("Worker does not support atomic processing");
155
+ }
156
+ const result = await process(payload.input, payload.options || {}, context);
157
+ WorkerBody.postMessage("done", { result });
158
+ break;
159
+ case "process-in-batches":
160
+ if (!processInBatches) {
161
+ throw new Error("Worker does not support batched processing");
162
+ }
163
+ inputBatches = new AsyncQueue();
164
+ options = payload.options || {};
165
+ const resultIterator = processInBatches(inputBatches, options, context);
166
+ for await (const batch of resultIterator) {
167
+ WorkerBody.postMessage("output-batch", { result: batch });
168
+ }
169
+ WorkerBody.postMessage("done", {});
170
+ break;
171
+ case "input-batch":
172
+ inputBatches.push(payload.input);
173
+ break;
174
+ case "input-done":
175
+ inputBatches.close();
176
+ break;
177
+ default:
178
+ }
179
+ } catch (error) {
180
+ const message = error instanceof Error ? error.message : "";
181
+ WorkerBody.postMessage("error", { error: message });
182
+ }
183
+ };
541
184
  }
542
-
543
- if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) {
544
- return true;
545
- } // @ts-ignore
546
-
547
-
548
- if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) {
549
- return true;
185
+ function processOnMainThread(arrayBuffer, options2 = {}) {
186
+ return new Promise((resolve, reject) => {
187
+ const id = requestId++;
188
+ const onMessage = (type, payload2) => {
189
+ if (payload2.id !== id) {
190
+ return;
191
+ }
192
+ switch (type) {
193
+ case "done":
194
+ WorkerBody.removeEventListener(onMessage);
195
+ resolve(payload2.result);
196
+ break;
197
+ case "error":
198
+ WorkerBody.removeEventListener(onMessage);
199
+ reject(payload2.error);
200
+ break;
201
+ default:
202
+ }
203
+ };
204
+ WorkerBody.addEventListener(onMessage);
205
+ const payload = { id, input: arrayBuffer, options: options2 };
206
+ WorkerBody.postMessage("process", payload);
207
+ });
550
208
  }
551
209
 
552
- return false;
553
- }
554
-
555
- /***/ }),
556
-
557
- /***/ "./src/workers/null-worker.ts":
558
- /*!************************************!*\
559
- !*** ./src/workers/null-worker.ts ***!
560
- \************************************/
561
- /*! no exports provided */
562
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
563
-
564
- "use strict";
565
- __webpack_require__.r(__webpack_exports__);
566
- /* harmony import */ var _lib_worker_api_create_worker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/worker-api/create-worker */ "./src/lib/worker-api/create-worker.ts");
567
-
568
- Object(_lib_worker_api_create_worker__WEBPACK_IMPORTED_MODULE_0__["createWorker"])(async data => {
569
- // @ts-ignore
570
- return data;
571
- });
572
-
573
- /***/ })
574
-
575
- /******/ });
576
- //# sourceMappingURL=null-worker.js.map
210
+ // src/workers/null-worker.ts
211
+ createWorker(async (data) => {
212
+ return data;
213
+ });
214
+ })();
215
+ //# sourceMappingURL=null-worker.js.map