@loaders.gl/worker-utils
Advanced tools
Comparing version 3.0.0-beta.2 to 3.0.0-beta.3
@@ -38,44 +38,50 @@ "use strict"; | ||
}); | ||
Object.defineProperty(exports, "processOnWorker", { | ||
Object.defineProperty(exports, "WorkerFarm", { | ||
enumerable: true, | ||
get: function get() { | ||
return _processOnWorker.processOnWorker; | ||
return _workerFarm.default; | ||
} | ||
}); | ||
Object.defineProperty(exports, "createWorker", { | ||
Object.defineProperty(exports, "WorkerPool", { | ||
enumerable: true, | ||
get: function get() { | ||
return _createWorker.createWorker; | ||
return _workerPool.default; | ||
} | ||
}); | ||
Object.defineProperty(exports, "getWorkerObjectURL", { | ||
Object.defineProperty(exports, "WorkerBody", { | ||
enumerable: true, | ||
get: function get() { | ||
return _workerObjectUtils.getWorkerObjectURL; | ||
return _workerBody.default; | ||
} | ||
}); | ||
Object.defineProperty(exports, "validateWorkerVersion", { | ||
Object.defineProperty(exports, "processOnWorker", { | ||
enumerable: true, | ||
get: function get() { | ||
return _workerObjectUtils.validateWorkerVersion; | ||
return _processOnWorker.processOnWorker; | ||
} | ||
}); | ||
Object.defineProperty(exports, "WorkerFarm", { | ||
Object.defineProperty(exports, "createWorker", { | ||
enumerable: true, | ||
get: function get() { | ||
return _workerFarm.default; | ||
return _createWorker.createWorker; | ||
} | ||
}); | ||
Object.defineProperty(exports, "WorkerPool", { | ||
Object.defineProperty(exports, "getWorkerURL", { | ||
enumerable: true, | ||
get: function get() { | ||
return _workerPool.default; | ||
return _getWorkerUrl.getWorkerURL; | ||
} | ||
}); | ||
Object.defineProperty(exports, "WorkerBody", { | ||
Object.defineProperty(exports, "validateWorkerVersion", { | ||
enumerable: true, | ||
get: function get() { | ||
return _workerBody.default; | ||
return _validateWorkerVersion.validateWorkerVersion; | ||
} | ||
}); | ||
Object.defineProperty(exports, "getTransferList", { | ||
enumerable: true, | ||
get: function get() { | ||
return _getTransferList.getTransferList; | ||
} | ||
}); | ||
Object.defineProperty(exports, "getLibraryUrl", { | ||
@@ -107,2 +113,4 @@ enumerable: true, | ||
var _version = require("./lib/env-utils/version"); | ||
var _assert = require("./lib/env-utils/assert"); | ||
@@ -116,2 +124,8 @@ | ||
var _workerFarm = _interopRequireDefault(require("./lib/worker-farm/worker-farm")); | ||
var _workerPool = _interopRequireDefault(require("./lib/worker-farm/worker-pool")); | ||
var _workerBody = _interopRequireDefault(require("./lib/worker-farm/worker-body")); | ||
var _processOnWorker = require("./lib/worker-api/process-on-worker"); | ||
@@ -121,10 +135,8 @@ | ||
var _workerObjectUtils = require("./lib/worker-api/worker-object-utils"); | ||
var _getWorkerUrl = require("./lib/worker-api/get-worker-url"); | ||
var _workerFarm = _interopRequireDefault(require("./lib/worker-farm/worker-farm")); | ||
var _validateWorkerVersion = require("./lib/worker-api/validate-worker-version"); | ||
var _workerPool = _interopRequireDefault(require("./lib/worker-farm/worker-pool")); | ||
var _getTransferList = require("./lib/worker-utils/get-transfer-list"); | ||
var _workerBody = _interopRequireDefault(require("./lib/worker-farm/worker-body")); | ||
var _libraryUtils = require("./lib/library-utils/library-utils"); | ||
@@ -136,3 +148,2 @@ | ||
var VERSION = typeof "3.0.0-beta.2" !== 'undefined' ? "3.0.0-beta.2" : 'latest'; | ||
var NullWorker = { | ||
@@ -142,3 +153,3 @@ id: 'null', | ||
module: 'worker-utils', | ||
version: VERSION, | ||
version: _version.VERSION, | ||
options: { | ||
@@ -145,0 +156,0 @@ null: {} |
@@ -23,2 +23,4 @@ "use strict"; | ||
var _version = require("../env-utils/version"); | ||
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } | ||
@@ -29,3 +31,3 @@ | ||
var LATEST = 'beta'; | ||
var VERSION = typeof "3.0.0-beta.2" !== 'undefined' ? "3.0.0-beta.2" : LATEST; | ||
var VERSION = typeof "3.0.0-beta.3" !== 'undefined' ? "3.0.0-beta.3" : LATEST; | ||
var loadLibraryPromises = {}; | ||
@@ -32,0 +34,0 @@ |
@@ -30,3 +30,3 @@ "use strict"; | ||
var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(type, payload) { | ||
var result, resultIterator, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, batch; | ||
var result, resultIterator, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, batch, message; | ||
@@ -161,3 +161,3 @@ return _regenerator.default.wrap(function _callee$(_context) { | ||
case 55: | ||
_context.next = 60; | ||
_context.next = 61; | ||
break; | ||
@@ -168,8 +168,9 @@ | ||
_context.t2 = _context["catch"](0); | ||
message = _context.t2 instanceof Error ? _context.t2.message : ''; | ||
_workerBody.default.postMessage('error', { | ||
error: _context.t2.message | ||
error: message | ||
}); | ||
case 60: | ||
case 61: | ||
case "end": | ||
@@ -176,0 +177,0 @@ return _context.stop(); |
@@ -8,2 +8,3 @@ "use strict"; | ||
}); | ||
exports.canProcessWithWorker = canProcessWithWorker; | ||
exports.processOnWorker = processOnWorker; | ||
@@ -17,4 +18,14 @@ | ||
var _workerObjectUtils = require("./worker-object-utils"); | ||
var _removeNontransferableOptions = require("../worker-utils/remove-nontransferable-options"); | ||
var _getWorkerUrl = require("./get-worker-url"); | ||
function canProcessWithWorker(worker, options) { | ||
if (!_workerFarm.default.isSupported()) { | ||
return false; | ||
} | ||
return worker.worker && (options === null || options === void 0 ? void 0 : options.worker); | ||
} | ||
function processOnWorker(_x, _x2) { | ||
@@ -27,2 +38,3 @@ return _processOnWorker.apply(this, arguments); | ||
var options, | ||
processOnMainThread, | ||
name, | ||
@@ -41,4 +53,5 @@ url, | ||
options = _args.length > 2 && _args[2] !== undefined ? _args[2] : {}; | ||
name = (0, _workerObjectUtils.getWorkerObjectName)(worker); | ||
url = (0, _workerObjectUtils.getWorkerObjectURL)(worker, options); | ||
processOnMainThread = _args.length > 3 ? _args[3] : undefined; | ||
name = (0, _getWorkerUrl.getWorkerName)(worker); | ||
url = (0, _getWorkerUrl.getWorkerURL)(worker, options); | ||
workerFarm = _workerFarm.default.getWorkerFarm(options); | ||
@@ -49,22 +62,8 @@ workerPool = workerFarm.getWorkerPool({ | ||
}); | ||
_context.next = 7; | ||
return workerPool.startJob(worker.name, function (job_, type, payload) { | ||
switch (type) { | ||
case 'done': | ||
job.done(payload); | ||
break; | ||
_context.next = 8; | ||
return workerPool.startJob(worker.name, onMessage.bind(null, processOnMainThread)); | ||
case 'error': | ||
job.error(payload.error); | ||
break; | ||
default: | ||
job.error(type); | ||
break; | ||
} | ||
}); | ||
case 7: | ||
case 8: | ||
job = _context.sent; | ||
transferableOptions = (0, _workerObjectUtils.removeNontransferableOptions)(options); | ||
transferableOptions = (0, _removeNontransferableOptions.removeNontransferableOptions)(options); | ||
job.postMessage('process', { | ||
@@ -74,10 +73,10 @@ input: data, | ||
}); | ||
_context.next = 12; | ||
_context.next = 13; | ||
return job.result; | ||
case 12: | ||
case 13: | ||
result = _context.sent; | ||
return _context.abrupt("return", result.result); | ||
case 14: | ||
case 15: | ||
case "end": | ||
@@ -91,2 +90,38 @@ return _context.stop(); | ||
} | ||
function onMessage(_x3, _x4, _x5, _x6) { | ||
return _onMessage.apply(this, arguments); | ||
} | ||
function _onMessage() { | ||
_onMessage = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2(processOnMainThread, job, type, payload) { | ||
return _regenerator.default.wrap(function _callee2$(_context2) { | ||
while (1) { | ||
switch (_context2.prev = _context2.next) { | ||
case 0: | ||
_context2.t0 = type; | ||
_context2.next = _context2.t0 === 'done' ? 3 : _context2.t0 === 'error' ? 5 : 7; | ||
break; | ||
case 3: | ||
job.done(payload); | ||
return _context2.abrupt("break", 9); | ||
case 5: | ||
job.error(payload.error); | ||
return _context2.abrupt("break", 9); | ||
case 7: | ||
job.error(type); | ||
return _context2.abrupt("break", 9); | ||
case 9: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
} | ||
}, _callee2); | ||
})); | ||
return _onMessage.apply(this, arguments); | ||
} | ||
//# sourceMappingURL=process-on-worker.js.map |
@@ -14,3 +14,3 @@ "use strict"; | ||
var _getTransferList = require("../worker-farm/get-transfer-list"); | ||
var _getTransferList = require("../worker-utils/get-transfer-list"); | ||
@@ -17,0 +17,0 @@ var onMessageWrapperMap = new Map(); |
@@ -18,5 +18,5 @@ "use strict"; | ||
var _buildWorkerUrl = require("./build-worker-url"); | ||
var _getLoadableWorkerUrl = require("../worker-utils/get-loadable-worker-url"); | ||
var _getTransferList = require("./get-transfer-list"); | ||
var _getTransferList = require("../worker-utils/get-transfer-list"); | ||
@@ -92,3 +92,3 @@ var NOOP = function NOOP() {}; | ||
this._loadableURL = (0, _buildWorkerUrl.buildWorkerURL)({ | ||
this._loadableURL = (0, _getLoadableWorkerUrl.getLoadableWorkerURL)({ | ||
source: this.source, | ||
@@ -95,0 +95,0 @@ url: this.url |
@@ -0,1 +1,2 @@ | ||
import { VERSION } from './lib/env-utils/version'; | ||
export { assert } from './lib/env-utils/assert'; | ||
@@ -5,12 +6,13 @@ export { isBrowser, isWorker } from './lib/env-utils/globals'; | ||
export { default as WorkerThread } from './lib/worker-farm/worker-thread'; | ||
export { processOnWorker } from './lib/worker-api/process-on-worker'; | ||
export { createWorker } from './lib/worker-api/create-worker'; | ||
export { getWorkerObjectURL, validateWorkerVersion } from './lib/worker-api/worker-object-utils'; | ||
export { default as WorkerFarm } from './lib/worker-farm/worker-farm'; | ||
export { default as WorkerPool } from './lib/worker-farm/worker-pool'; | ||
export { default as WorkerBody } from './lib/worker-farm/worker-body'; | ||
export { processOnWorker } from './lib/worker-api/process-on-worker'; | ||
export { createWorker } from './lib/worker-api/create-worker'; | ||
export { getWorkerURL } from './lib/worker-api/get-worker-url'; | ||
export { validateWorkerVersion } from './lib/worker-api/validate-worker-version'; | ||
export { getTransferList } from './lib/worker-utils/get-transfer-list'; | ||
export { getLibraryUrl, loadLibrary } from './lib/library-utils/library-utils'; | ||
export { default as AsyncQueue } from './lib/async-queue/async-queue'; | ||
export { default as ChildProcessProxy } from './lib/process-utils/child-process-proxy'; | ||
const VERSION = typeof "3.0.0-beta.2" !== 'undefined' ? "3.0.0-beta.2" : 'latest'; | ||
export const NullWorker = { | ||
@@ -17,0 +19,0 @@ id: 'null', |
import { global, isBrowser, isWorker } from '../env-utils/globals'; | ||
import * as node from '../node/require-utils.node'; | ||
import { assert } from '../env-utils/assert'; | ||
import { VERSION as __VERSION__ } from '../env-utils/version'; | ||
const LATEST = 'beta'; | ||
const VERSION = typeof "3.0.0-beta.2" !== 'undefined' ? "3.0.0-beta.2" : LATEST; | ||
const VERSION = typeof "3.0.0-beta.3" !== 'undefined' ? "3.0.0-beta.3" : LATEST; | ||
const loadLibraryPromises = {}; | ||
@@ -7,0 +8,0 @@ export async function loadLibrary(libraryUrl, moduleName = null, options = {}) { |
@@ -53,4 +53,5 @@ import AsyncQueue from '../async-queue/async-queue'; | ||
} catch (error) { | ||
const message = error instanceof Error ? error.message : ''; | ||
WorkerBody.postMessage('error', { | ||
error: error.message | ||
error: message | ||
}); | ||
@@ -57,0 +58,0 @@ } |
import WorkerFarm from '../worker-farm/worker-farm'; | ||
import { getWorkerObjectURL, getWorkerObjectName, removeNontransferableOptions } from './worker-object-utils'; | ||
export async function processOnWorker(worker, data, options = {}) { | ||
const name = getWorkerObjectName(worker); | ||
const url = getWorkerObjectURL(worker, options); | ||
import { removeNontransferableOptions } from '../worker-utils/remove-nontransferable-options'; | ||
import { getWorkerURL, getWorkerName } from './get-worker-url'; | ||
export function canProcessWithWorker(worker, options) { | ||
if (!WorkerFarm.isSupported()) { | ||
return false; | ||
} | ||
return worker.worker && (options === null || options === void 0 ? void 0 : options.worker); | ||
} | ||
export async function processOnWorker(worker, data, options = {}, processOnMainThread) { | ||
const name = getWorkerName(worker); | ||
const url = getWorkerURL(worker, options); | ||
const workerFarm = WorkerFarm.getWorkerFarm(options); | ||
@@ -11,17 +19,3 @@ const workerPool = workerFarm.getWorkerPool({ | ||
}); | ||
const job = await workerPool.startJob(worker.name, (job_, type, payload) => { | ||
switch (type) { | ||
case 'done': | ||
job.done(payload); | ||
break; | ||
case 'error': | ||
job.error(payload.error); | ||
break; | ||
default: | ||
job.error(type); | ||
break; | ||
} | ||
}); | ||
const job = await workerPool.startJob(worker.name, onMessage.bind(null, processOnMainThread)); | ||
const transferableOptions = removeNontransferableOptions(options); | ||
@@ -35,2 +29,18 @@ job.postMessage('process', { | ||
} | ||
async function onMessage(processOnMainThread, job, type, payload) { | ||
switch (type) { | ||
case 'done': | ||
job.done(payload); | ||
break; | ||
case 'error': | ||
job.error(payload.error); | ||
break; | ||
default: | ||
job.error(type); | ||
break; | ||
} | ||
} | ||
//# sourceMappingURL=process-on-worker.js.map |
@@ -1,2 +0,2 @@ | ||
import { getTransferList } from '../worker-farm/get-transfer-list'; | ||
import { getTransferList } from '../worker-utils/get-transfer-list'; | ||
const onMessageWrapperMap = new Map(); | ||
@@ -3,0 +3,0 @@ export default class WorkerBody { |
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; | ||
import { assert } from '../env-utils/assert'; | ||
import { buildWorkerURL } from './build-worker-url'; | ||
import { getTransferList } from './get-transfer-list'; | ||
import { getLoadableWorkerURL } from '../worker-utils/get-loadable-worker-url'; | ||
import { getTransferList } from '../worker-utils/get-transfer-list'; | ||
@@ -78,3 +78,3 @@ const NOOP = () => {}; | ||
_createBrowserWorker() { | ||
this._loadableURL = buildWorkerURL({ | ||
this._loadableURL = getLoadableWorkerURL({ | ||
source: this.source, | ||
@@ -81,0 +81,0 @@ url: this.url |
@@ -285,4 +285,5 @@ /******/ (function(modules) { // webpackBootstrap | ||
return; | ||
} | ||
} // eslint-disable-next-line complexity | ||
_worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].onmessage = async (type, payload) => { | ||
@@ -331,4 +332,5 @@ try { | ||
} catch (error) { | ||
const message = error instanceof Error ? error.message : ''; | ||
_worker_farm_worker_body__WEBPACK_IMPORTED_MODULE_1__["default"].postMessage('error', { | ||
error: error.message | ||
error: message | ||
}); | ||
@@ -341,73 +343,2 @@ } | ||
/***/ "./src/lib/worker-farm/get-transfer-list.ts": | ||
/*!**************************************************!*\ | ||
!*** ./src/lib/worker-farm/get-transfer-list.ts ***! | ||
\**************************************************/ | ||
/*! exports provided: getTransferList */ | ||
/***/ (function(module, __webpack_exports__, __webpack_require__) { | ||
"use strict"; | ||
__webpack_require__.r(__webpack_exports__); | ||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTransferList", function() { return getTransferList; }); | ||
// NOTE - there is a copy of this function is both in core and loader-utils | ||
// core does not need all the utils in loader-utils, just this one. | ||
/** | ||
* Returns an array of Transferrable objects that can be used with postMessage | ||
* https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage | ||
* @param object data to be sent via postMessage | ||
* @param recursive - not for application use | ||
* @param transfers - not for application use | ||
* @returns a transfer list that can be passed to postMessage | ||
*/ | ||
function getTransferList(object, recursive = true, transfers) { | ||
// Make sure that items in the transfer list is unique | ||
const transfersSet = transfers || new Set(); | ||
if (!object) {// ignore | ||
} else if (isTransferable(object)) { | ||
transfersSet.add(object); | ||
} else if (isTransferable(object.buffer)) { | ||
// Typed array | ||
transfersSet.add(object.buffer); | ||
} else if (ArrayBuffer.isView(object)) {// object is a TypeArray viewing into a SharedArrayBuffer (not transferable) | ||
// Do not iterate through the content in this case | ||
} else if (recursive && typeof object === 'object') { | ||
for (const key in object) { | ||
// Avoid perf hit - only go one level deep | ||
getTransferList(object[key], recursive, transfersSet); | ||
} | ||
} // If transfers is defined, is internal recursive call | ||
// Otherwise it's called by the user | ||
return transfers === undefined ? Array.from(transfersSet) : []; | ||
} // https://developer.mozilla.org/en-US/docs/Web/API/Transferable | ||
function isTransferable(object) { | ||
if (!object) { | ||
return false; | ||
} | ||
if (object instanceof ArrayBuffer) { | ||
return true; | ||
} | ||
if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) { | ||
return true; | ||
} | ||
if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) { | ||
return true; | ||
} | ||
if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) { | ||
return true; | ||
} | ||
return false; | ||
} | ||
/***/ }), | ||
/***/ "./src/lib/worker-farm/worker-body.ts": | ||
@@ -423,4 +354,3 @@ /*!********************************************!*\ | ||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return WorkerBody; }); | ||
/* harmony import */ var _worker_farm_get_transfer_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../worker-farm/get-transfer-list */ "./src/lib/worker-farm/get-transfer-list.ts"); | ||
/* eslint-disable no-restricted-globals */ | ||
/* 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"); | ||
@@ -437,2 +367,3 @@ const onMessageWrapperMap = new Map(); | ||
static set onmessage(onMessage) { | ||
// eslint-disable-next-line no-restricted-globals | ||
self.onmessage = message => { | ||
@@ -468,4 +399,5 @@ if (!isKnownMessage(message)) { | ||
}; | ||
} | ||
} // eslint-disable-next-line no-restricted-globals | ||
self.addEventListener('message', onMessageWrapper); | ||
@@ -476,3 +408,4 @@ } | ||
const onMessageWrapper = onMessageWrapperMap.get(onMessage); | ||
onMessageWrapperMap.delete(onMessage); | ||
onMessageWrapperMap.delete(onMessage); // eslint-disable-next-line no-restricted-globals | ||
self.removeEventListener('message', onMessageWrapper); | ||
@@ -494,3 +427,4 @@ } | ||
}; | ||
const transferList = Object(_worker_farm_get_transfer_list__WEBPACK_IMPORTED_MODULE_0__["getTransferList"])(payload); // @ts-ignore self is WorkerGlobalScope | ||
const transferList = Object(_worker_utils_get_transfer_list__WEBPACK_IMPORTED_MODULE_0__["getTransferList"])(payload); // eslint-disable-next-line no-restricted-globals | ||
// @ts-ignore | ||
@@ -513,2 +447,73 @@ self.postMessage(data, transferList); | ||
/***/ "./src/lib/worker-utils/get-transfer-list.ts": | ||
/*!***************************************************!*\ | ||
!*** ./src/lib/worker-utils/get-transfer-list.ts ***! | ||
\***************************************************/ | ||
/*! exports provided: getTransferList */ | ||
/***/ (function(module, __webpack_exports__, __webpack_require__) { | ||
"use strict"; | ||
__webpack_require__.r(__webpack_exports__); | ||
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTransferList", function() { return getTransferList; }); | ||
// NOTE - there is a copy of this function is both in core and loader-utils | ||
// core does not need all the utils in loader-utils, just this one. | ||
/** | ||
* Returns an array of Transferrable objects that can be used with postMessage | ||
* https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage | ||
* @param object data to be sent via postMessage | ||
* @param recursive - not for application use | ||
* @param transfers - not for application use | ||
* @returns a transfer list that can be passed to postMessage | ||
*/ | ||
function getTransferList(object, recursive = true, transfers) { | ||
// Make sure that items in the transfer list is unique | ||
const transfersSet = transfers || new Set(); | ||
if (!object) {// ignore | ||
} else if (isTransferable(object)) { | ||
transfersSet.add(object); | ||
} else if (isTransferable(object.buffer)) { | ||
// Typed array | ||
transfersSet.add(object.buffer); | ||
} else if (ArrayBuffer.isView(object)) {// object is a TypeArray viewing into a SharedArrayBuffer (not transferable) | ||
// Do not iterate through the content in this case | ||
} else if (recursive && typeof object === 'object') { | ||
for (const key in object) { | ||
// Avoid perf hit - only go one level deep | ||
getTransferList(object[key], recursive, transfersSet); | ||
} | ||
} // If transfers is defined, is internal recursive call | ||
// Otherwise it's called by the user | ||
return transfers === undefined ? Array.from(transfersSet) : []; | ||
} // https://developer.mozilla.org/en-US/docs/Web/API/Transferable | ||
function isTransferable(object) { | ||
if (!object) { | ||
return false; | ||
} | ||
if (object instanceof ArrayBuffer) { | ||
return true; | ||
} | ||
if (typeof MessagePort !== 'undefined' && object instanceof MessagePort) { | ||
return true; | ||
} | ||
if (typeof ImageBitmap !== 'undefined' && object instanceof ImageBitmap) { | ||
return true; | ||
} | ||
if (typeof OffscreenCanvas !== 'undefined' && object instanceof OffscreenCanvas) { | ||
return true; | ||
} | ||
return false; | ||
} | ||
/***/ }), | ||
/***/ "./src/workers/null-worker.ts": | ||
@@ -515,0 +520,0 @@ /*!************************************!*\ |
{ | ||
"name": "@loaders.gl/worker-utils", | ||
"version": "3.0.0-beta.2", | ||
"version": "3.0.0-beta.3", | ||
"description": "Utilities for running tasks on worker threads", | ||
@@ -44,3 +44,3 @@ "license": "MIT", | ||
}, | ||
"gitHead": "c9417c6232ad2109a9c269ecf83afbf7ebc46cf8" | ||
"gitHead": "59a9b2843ffc095c818dcd2894ed64b6e8fd52ae" | ||
} |
import type {WorkerObject} from './types'; | ||
import {VERSION} from './lib/env-utils/version'; | ||
// TYPES | ||
export type {WorkerObject} from './types'; | ||
export type { | ||
WorkerObject, | ||
WorkerOptions, | ||
// Protocol | ||
WorkerMessage, | ||
WorkerMessageType, | ||
WorkerMessageData, | ||
WorkerMessagePayload | ||
} from './lib/worker-protocol/protocol'; | ||
} from './types'; | ||
@@ -19,7 +23,3 @@ // GENERAL UTILS | ||
// WORKER UTILS - EXPORTS | ||
export {processOnWorker} from './lib/worker-api/process-on-worker'; | ||
export {createWorker} from './lib/worker-api/create-worker'; | ||
export {getWorkerObjectURL, validateWorkerVersion} from './lib/worker-api/worker-object-utils'; | ||
// WORKER FARMS | ||
export {default as WorkerFarm} from './lib/worker-farm/worker-farm'; | ||
@@ -29,2 +29,10 @@ export {default as WorkerPool} from './lib/worker-farm/worker-pool'; | ||
export {processOnWorker} from './lib/worker-api/process-on-worker'; | ||
export {createWorker} from './lib/worker-api/create-worker'; | ||
// WORKER UTILS - EXPORTS | ||
export {getWorkerURL} from './lib/worker-api/get-worker-url'; | ||
export {validateWorkerVersion} from './lib/worker-api/validate-worker-version'; | ||
export {getTransferList} from './lib/worker-utils/get-transfer-list'; | ||
// LIBRARY UTILS | ||
@@ -41,6 +49,2 @@ export {getLibraryUrl, loadLibrary} from './lib/library-utils/library-utils'; | ||
// __VERSION__ is injected by babel-plugin-version-inline | ||
// @ts-ignore TS2304: Cannot find name '__VERSION__'. | ||
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest'; | ||
/** A null worker to test that worker processing is functional */ | ||
@@ -47,0 +51,0 @@ export const NullWorker: WorkerObject = { |
import {global, isBrowser, isWorker} from '../env-utils/globals'; | ||
import * as node from '../node/require-utils.node'; | ||
import {assert} from '../env-utils/assert'; | ||
import {VERSION as __VERSION__} from '../env-utils/version'; | ||
// TODO - unpkg.com doesn't seem to have a `latest` specifier for alpha releases... | ||
const LATEST = 'beta'; | ||
// __VERSION__ is injected by babel-plugin-version-inline | ||
// @ts-ignore TS2304: Cannot find name '__VERSION__'. | ||
const VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : LATEST; | ||
@@ -11,0 +9,0 @@ |
@@ -1,2 +0,2 @@ | ||
import type {WorkerMessageType, WorkerMessagePayload} from '../worker-protocol/protocol'; | ||
import type {WorkerMessageType, WorkerMessagePayload} from '../../types'; | ||
import AsyncQueue from '../async-queue/async-queue'; | ||
@@ -19,2 +19,3 @@ import WorkerBody from '../worker-farm/worker-body'; | ||
// eslint-disable-next-line complexity | ||
WorkerBody.onmessage = async (type: WorkerMessageType, payload: WorkerMessagePayload) => { | ||
@@ -55,5 +56,6 @@ try { | ||
} catch (error) { | ||
WorkerBody.postMessage('error', {error: error.message}); | ||
const message = error instanceof Error ? error.message : ''; | ||
WorkerBody.postMessage('error', {error: message}); | ||
} | ||
}; | ||
} |
@@ -1,9 +0,27 @@ | ||
import type {WorkerObject} from '../../types'; | ||
import type { | ||
WorkerObject, | ||
WorkerOptions, | ||
WorkerMessageType, | ||
WorkerMessagePayload | ||
} from '../../types'; | ||
import type WorkerJob from '../worker-farm/worker-job'; | ||
import WorkerFarm from '../worker-farm/worker-farm'; | ||
import { | ||
getWorkerObjectURL, | ||
getWorkerObjectName, | ||
removeNontransferableOptions | ||
} from './worker-object-utils'; | ||
import {removeNontransferableOptions} from '../worker-utils/remove-nontransferable-options'; | ||
import {getWorkerURL, getWorkerName} from './get-worker-url'; | ||
/** | ||
* Determines if we can parse with worker | ||
* @param loader | ||
* @param data | ||
* @param options | ||
*/ | ||
export function canProcessWithWorker(worker: WorkerObject, options?: WorkerOptions) { | ||
if (!WorkerFarm.isSupported()) { | ||
return false; | ||
} | ||
return worker.worker && options?.worker; | ||
} | ||
/** | ||
* This function expects that the worker thread sends certain messages, | ||
@@ -16,6 +34,7 @@ * Creating such a worker can be automated if the worker is wrapper by a call to | ||
data: any, | ||
options: object = {} | ||
options: WorkerOptions = {}, | ||
processOnMainThread?: Function | ||
): Promise<any> { | ||
const name = getWorkerObjectName(worker); | ||
const url = getWorkerObjectURL(worker, options); | ||
const name = getWorkerName(worker); | ||
const url = getWorkerURL(worker, options); | ||
@@ -25,23 +44,3 @@ const workerFarm = WorkerFarm.getWorkerFarm(options); | ||
const job = await workerPool.startJob( | ||
worker.name, | ||
/** | ||
* Job completes when we receive the result | ||
* @param {WorkerJob} job_ | ||
* @param {WorkerMessageData} message | ||
*/ | ||
(job_, type, payload) => { | ||
switch (type) { | ||
case 'done': | ||
job.done(payload); | ||
break; | ||
case 'error': | ||
job.error(payload.error); | ||
break; | ||
default: | ||
job.error(type); | ||
break; | ||
} | ||
} | ||
); | ||
const job = await workerPool.startJob(worker.name, onMessage.bind(null, processOnMainThread)); | ||
@@ -55,1 +54,25 @@ // Kick off the processing in the worker | ||
} | ||
/** | ||
* Job completes when we receive the result | ||
* @param job | ||
* @param message | ||
*/ | ||
async function onMessage( | ||
processOnMainThread, | ||
job: WorkerJob, | ||
type: WorkerMessageType, | ||
payload: WorkerMessagePayload | ||
) { | ||
switch (type) { | ||
case 'done': | ||
job.done(payload); | ||
break; | ||
case 'error': | ||
job.error(payload.error); | ||
break; | ||
default: | ||
job.error(type); | ||
break; | ||
} | ||
} |
@@ -1,8 +0,3 @@ | ||
/* eslint-disable no-restricted-globals */ | ||
import type { | ||
WorkerMessageData, | ||
WorkerMessageType, | ||
WorkerMessagePayload | ||
} from '../worker-protocol/protocol'; | ||
import {getTransferList} from '../worker-farm/get-transfer-list'; | ||
import type {WorkerMessageData, WorkerMessageType, WorkerMessagePayload} from '../../types'; | ||
import {getTransferList} from '../worker-utils/get-transfer-list'; | ||
@@ -19,2 +14,3 @@ const onMessageWrapperMap = new Map(); | ||
static set onmessage(onMessage: (type: WorkerMessageType, payload: WorkerMessagePayload) => any) { | ||
// eslint-disable-next-line no-restricted-globals | ||
self.onmessage = (message) => { | ||
@@ -48,2 +44,3 @@ if (!isKnownMessage(message)) { | ||
// eslint-disable-next-line no-restricted-globals | ||
self.addEventListener('message', onMessageWrapper); | ||
@@ -57,2 +54,3 @@ } | ||
onMessageWrapperMap.delete(onMessage); | ||
// eslint-disable-next-line no-restricted-globals | ||
self.removeEventListener('message', onMessageWrapper); | ||
@@ -70,3 +68,4 @@ } | ||
const transferList = getTransferList(payload); | ||
// @ts-ignore self is WorkerGlobalScope | ||
// eslint-disable-next-line no-restricted-globals | ||
// @ts-ignore | ||
self.postMessage(data, transferList); | ||
@@ -73,0 +72,0 @@ } |
@@ -1,2 +0,2 @@ | ||
import type {WorkerMessageType, WorkerMessagePayload} from '../worker-protocol/protocol'; | ||
import type {WorkerMessageType, WorkerMessagePayload} from '../../types'; | ||
import WorkerThread from './worker-thread'; | ||
@@ -3,0 +3,0 @@ import {assert} from '../env-utils/assert'; |
@@ -1,2 +0,2 @@ | ||
import type {WorkerMessageType, WorkerMessagePayload} from '../worker-protocol/protocol'; | ||
import type {WorkerMessageType, WorkerMessagePayload} from '../../types'; | ||
import {isMobile} from '../env-utils/globals'; | ||
@@ -3,0 +3,0 @@ import WorkerThread from './worker-thread'; |
import {assert} from '../env-utils/assert'; | ||
import {buildWorkerURL} from './build-worker-url'; | ||
import {getTransferList} from './get-transfer-list'; | ||
import {getLoadableWorkerURL} from '../worker-utils/get-loadable-worker-url'; | ||
import {getTransferList} from '../worker-utils/get-transfer-list'; | ||
@@ -97,3 +97,3 @@ const NOOP = () => {}; | ||
_createBrowserWorker() { | ||
this._loadableURL = buildWorkerURL({source: this.source, url: this.url}); | ||
this._loadableURL = getLoadableWorkerURL({source: this.source, url: this.url}); | ||
const worker = new Worker(this._loadableURL, {name: this.name}); | ||
@@ -100,0 +100,0 @@ |
/** | ||
* A worker description | ||
* Worker Options | ||
*/ | ||
export type WorkerOptions = { | ||
// Worker farm options | ||
CDN?: string; | ||
worker?: boolean; | ||
maxConcurrency?: number; | ||
maxMobileConcurrency?: number; | ||
reuseWorkers?: boolean; | ||
_workerType?: string; | ||
[key: string]: any; | ||
}; | ||
/** | ||
* A worker description object | ||
*/ | ||
export type WorkerObject = { | ||
id: string; | ||
name: string; | ||
id: string; | ||
module: string; | ||
version: string; | ||
worker?: string; | ||
worker?: string | boolean; | ||
options: object; | ||
@@ -19,1 +33,46 @@ deprecatedOptions?: object; | ||
}; | ||
/* | ||
PROTOCOL | ||
Main thread worker | ||
=> process-batches-start | ||
=> process-batches-input-batch | ||
<= process-batches-output-batch | ||
... // repeat | ||
=> process-batches-input-done | ||
<= process-batches-result | ||
// or | ||
<= process-batches-error | ||
*/ | ||
export type WorkerMessageType = | ||
| 'process' | ||
| 'done' | ||
| 'error' | ||
| 'process-in-batches' | ||
| 'input-batch' | ||
| 'input-done' | ||
| 'output-batch'; | ||
export type WorkerMessagePayload = { | ||
id?: number; | ||
options?: object; | ||
input?: any; // Transferable; | ||
result?: any; // Transferable | ||
error?: string; | ||
}; | ||
export type WorkerMessageData = { | ||
source: 'loaders.gl'; | ||
type: WorkerMessageType; | ||
payload: WorkerMessagePayload; | ||
}; | ||
export type WorkerMessage = { | ||
type: string; | ||
data: WorkerMessageData; | ||
}; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
358645
120
4525