UNPKG

@cesium/engine

Version:

CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.

79 lines (66 loc) 2.25 kB
import DeveloperError from "../Core/DeveloperError.js"; import defined from "../Core/defined.js"; import PrimitivePipeline from "../Scene/PrimitivePipeline.js"; import createTaskProcessorWorker from "./createTaskProcessorWorker.js"; /* global require */ const moduleCache = {}; async function getModule(moduleName, modulePath) { let module = moduleCache[modulePath] ?? moduleCache[moduleName]; if (defined(module)) { return module; } if (defined(modulePath)) { // ignore moduleName and use the path to import if (typeof exports === "object") { // Use CommonJS-style require. module = require(modulePath); } else { // Use ESM-style dynamic import const result = await import(modulePath); module = result.default; } moduleCache[modulePath] = module; return module; } if (typeof exports === "object") { // Use CommonJS-style require. module = require(`Workers/${moduleName}`); } else { // Use ESM-style dynamic import const result = defined(modulePath) ? await import(modulePath) : await import(`./${moduleName}.js`); module = result.default; } moduleCache[moduleName] = module; return module; } async function createGeometry(parameters, transferableObjects) { const subTasks = parameters.subTasks; const length = subTasks.length; const resultsOrPromises = new Array(length); for (let i = 0; i < length; i++) { const task = subTasks[i]; const geometry = task.geometry; const moduleName = task.moduleName; const modulePath = task.modulePath; if (defined(moduleName) && defined(modulePath)) { throw new DeveloperError("Must only set moduleName or modulePath"); } if (defined(moduleName) || defined(modulePath)) { resultsOrPromises[i] = getModule(moduleName, modulePath).then( (createFunction) => createFunction(geometry, task.offset), ); } else { // Already created geometry resultsOrPromises[i] = geometry; } } return Promise.all(resultsOrPromises).then(function (results) { return PrimitivePipeline.packCreateGeometryResults( results, transferableObjects, ); }); } export default createTaskProcessorWorker(createGeometry);