UNPKG

geotiff-tile-web-worker

Version:
217 lines (212 loc) 1.85 MB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else { var a = factory(); for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; } })(self, () => { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "./lib/index.dev.js": /*!**************************!*\ !*** ./lib/index.dev.js ***! \**************************/ /***/ ((module, exports, __webpack_require__) => { /* module decorator */ module = __webpack_require__.nmd(module); var __WEBPACK_AMD_DEFINE_RESULT__;var _regeneratorRuntime = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); var _defineProperty = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"); var _objectWithoutProperties = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js"); var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"); var _asyncToGenerator = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/asyncToGenerator.js"); var _excluded = ["url"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var wrap = (__webpack_require__(/*! microlink/esm/wrap.js */ "./node_modules/microlink/esm/wrap.js")["default"]); var FrameWorker = __webpack_require__(/*! frame-worker */ "./node_modules/frame-worker/frame-worker.js"); var _require = __webpack_require__(/*! xdim */ "./node_modules/xdim/src/xdim.js"), prepareData = _require.prepareData, prepareUpdate = _require.prepareUpdate; var _require2 = __webpack_require__(/*! ./worker-string.dev.js */ "./lib/worker-string.dev.js"), workerString = _require2.workerString; var DEFAULT_TILE_LAYOUT = "[band][row,column]"; var absolutify = function absolutify(url) { if (url.startsWith("/")) { return location.origin + url; } else if (url.startsWith("./")) { return location.href.split("/").slice(0, -1).join("/") + "/" + url.replace(/^\.\//, ""); } else { return url; } }; function createWorker(_x) { return _createWorker.apply(this, arguments); } function _createWorker() { _createWorker = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(options) { var debug_level, useFrameWorker, WebWorker, maxTiles, blob, blobURL, worker, wrapfn, obj; return _regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: debug_level = _typeof(options) === "object" && typeof options.debug_level === "number" ? options.debug_level : 0; useFrameWorker = _typeof(options) === "object" && options.iframe === true; if (debug_level >= 1) console.log("[geotiff-tile-web-worker:createWorker] useFrameWorker is " + useFrameWorker); WebWorker = useFrameWorker === false && typeof Worker === "function" ? Worker : FrameWorker; if (debug_level >= 1) console.log("[geotiff-tile-web-worker:createWorker] WebWorker:", WebWorker); maxTiles = _typeof(options) === "object" && typeof options.maxTiles === "number" ? options.maxTiles : Infinity; if (debug_level >= 1) console.log("[geotiff-tile-web-worker:createWorker] debug level is " + debug_level); blob = new Blob([workerString], { type: "text/javascript" }); if (debug_level >= 2) console.log("[geotiff-tile-web-worker/index.js:createWorker] created blob from worker string:", blob); blobURL = URL.createObjectURL(blob); worker = new WebWorker(blobURL); if (debug_level >= 2) console.log("[geotiff-tile-web-worker/index.js:createWorker] worker:", worker); wrapfn = wrap.default || wrap; if (debug_level >= 2) console.log("[geotiff-tile-web-worker/index.js:createWorker] wrapfn:", wrapfn); _context2.next = 16; return wrapfn(worker, { debug_level: debug_level - 1 }); case 16: obj = _context2.sent; if (debug_level >= 2) console.log("[geotiff-tile-web-worker/index.js:createWorker] obj:", obj); worker.clearCache = obj.clear_cache; worker.setMaxCacheSize = obj.set_max_cache_size; worker.createTile = /*#__PURE__*/function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref) { var url, rest, _debug_level, _rest$tile_layout, tile_layout, expr, tile_array_types, time_before_create_tile, _yield$obj$create_til, temp_tile, height, width, extra, time_after_create_time, time_expr_start, sizes, _prepareData, tile, update, num_bands, row, column, pixel, values, band, time_expr_end, result; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: url = _ref.url, rest = _objectWithoutProperties(_ref, _excluded); if (!(typeof rest.expr === "function")) { _context.next = 24; break; } _debug_level = rest.debug_level, _rest$tile_layout = rest.tile_layout, tile_layout = _rest$tile_layout === void 0 ? DEFAULT_TILE_LAYOUT : _rest$tile_layout, expr = rest.expr, tile_array_types = rest.tile_array_types; time_before_create_tile = performance.now(); _context.next = 6; return obj.create_tile(_objectSpread(_objectSpread({ url: absolutify(url) }, rest), {}, { expr: undefined, tile_layout: "[row][column][band]", tile_array_types: undefined })); case 6: _yield$obj$create_til = _context.sent; temp_tile = _yield$obj$create_til.tile; height = _yield$obj$create_til.height; width = _yield$obj$create_til.width; extra = _yield$obj$create_til.extra; time_after_create_time = performance.now(); if (_debug_level >= 2) { console.log("[geotiff-tile-web-worker] creating initial tile (before applying expr) took " + Math.round(time_after_create_time - time_before_create_tile) + " ms"); } time_expr_start = performance.now(); sizes = { band: extra.out_bands.length, row: height, column: width }; _prepareData = prepareData({ layout: tile_layout, sizes: sizes, arrayTypes: tile_array_types }), tile = _prepareData.data; update = prepareUpdate({ data: tile, layout: tile_layout, sizes: sizes }); num_bands = sizes.band; for (row = 0; row < height; row++) { for (column = 0; column < width; column++) { pixel = temp_tile[row][column]; values = expr({ pixel: pixel }); for (band = 0; band < num_bands; band++) { update({ point: { band: band, row: row, column: column }, value: values[band] }); } } } time_expr_end = performance.now(); if (_debug_level >= 2) console.log("[geotiff-tile-web-worker] applying expr took " + Math.round(time_expr_end - time_expr_start) + " ms"); return _context.abrupt("return", { tile: tile, height: height, layout: tile_layout, width: width }); case 24: result = obj.create_tile(_objectSpread({ url: absolutify(url) }, rest)); if (!(result === undefined)) { _context.next = 27; break; } throw new Error("[geotiff-tile-web-worker] create_tile returned undefined"); case 27: return _context.abrupt("return", result); case 28: case "end": return _context.stop(); } }, _callee); })); return function (_x2) { return _ref2.apply(this, arguments); }; }(); if (debug_level >= 2) console.log("[geotiff-tile-web-worker/index.js:createWorker] wrapped worker:", worker); return _context2.abrupt("return", worker); case 23: case "end": return _context2.stop(); } }, _callee2); })); return _createWorker.apply(this, arguments); } if (true) { !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () { return { createWorker: createWorker }; }).call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } if (( false ? 0 : _typeof(module)) === "object") { module.exports = { createWorker: createWorker }; } if ((typeof self === "undefined" ? "undefined" : _typeof(self)) === "object") { self.geotiff_tile_web_worker = { createWorker: createWorker }; } if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === "object") { window.geotiff_tile_web_worker = { createWorker: createWorker }; } /***/ }), /***/ "./lib/worker-string.dev.js": /*!**********************************!*\ !*** ./lib/worker-string.dev.js ***! \**********************************/ /***/ ((module) => { module.exports={workerString:"(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/microlink/esm/batch.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/microlink/esm/batch.js ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ batch)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction batch(action, _ref) {\n var _ref$size = _ref.size,\n size = _ref$size === void 0 ? 1 : _ref$size,\n _ref$wait = _ref.wait,\n wait = _ref$wait === void 0 ? Infinity : _ref$wait;\n var timeout = null;\n var current = [];\n return function (params) {\n var batch = current;\n var send = /*#__PURE__*/function () {\n var _ref2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default().mark(function _callee() {\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n Promise.resolve(action(batch.map(function (it) {\n return it.params;\n }))).then(function (results) {\n results.forEach(function (result, i) {\n batch[i].resolve(result);\n });\n });\n case 1:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return function send() {\n return _ref2.apply(this, arguments);\n };\n }();\n return new Promise(function (resolve, reject) {\n batch.push({\n resolve: resolve,\n params: params,\n reject: reject\n });\n if (batch.length === size) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n send();\n current = [];\n } else if (!timeout && wait !== Infinity) {\n timeout = setTimeout(function () {\n // check if batch already sent\n if (current === batch) {\n current = [];\n clearTimeout(timeout);\n timeout = null;\n send();\n }\n }, wait);\n }\n });\n };\n}\n\n/***/ }),\n\n/***/ \"./node_modules/microlink/esm/batchcall.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/microlink/esm/batchcall.js ***!\n \\*************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ batchcall)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _serialize_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./serialize.js */ \"./node_modules/microlink/esm/serialize.js\");\n\n\n\n\n\n\n\n/**\n *\n * @param {*} it\n * @param {{ params, method }[]} batch\n * @param {*} param2\n * @returns\n */\nfunction batchcall(it, batch) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$debug_level = _ref.debug_level,\n debug_level = _ref$debug_level === void 0 ? 0 : _ref$debug_level;\n var all_params_functions = {};\n\n // pre-process and serialize requests\n var requests = batch.map(function (_ref2) {\n var id = _ref2.id,\n method = _ref2.method,\n params = _ref2.params;\n if (typeof id !== \"number\") id = Math.random();\n var _serialize = (0,_serialize_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(params || [], \"microlink.call:\"),\n _serialize2 = (0,_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_serialize, 2),\n params_serialized = _serialize2[0],\n params_functions = _serialize2[1];\n Object.assign(all_params_functions, params_functions);\n return {\n jsonrpc: \"2.0\",\n id: id,\n method: method,\n params: params_serialized\n };\n });\n if (debug_level >= 2) console.log(\"[microlink.batchcall] requests serialized to \", requests);\n var ids = requests.map(function (req) {\n return req.id;\n });\n return new Promise(function (resolve) {\n var listener = /*#__PURE__*/function () {\n var _listener = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_2__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(evt) {\n var data, _all_params_functions, result, msg, results;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (debug_level >= 2) {\n console.log(\"[microlink.batchcall] response listener received message event with data\", evt.data);\n }\n data = evt.data;\n if (!((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(data) !== \"object\" || data === null)) {\n _context.next = 4;\n break;\n }\n return _context.abrupt(\"return\");\n case 4:\n if (!(data.jsonrpc === \"2.0\" && data.method && data.method in all_params_functions)) {\n _context.next = 13;\n break;\n }\n if (Array.isArray(data.params)) {\n _context.next = 7;\n break;\n }\n throw Error(\"[microlink.batchcall] params should be an array\");\n case 7:\n _context.next = 9;\n return (_all_params_functions = all_params_functions)[data.method].apply(_all_params_functions, (0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(data.params));\n case 9:\n result = _context.sent;\n msg = {\n jsonrpc: \"2.0\",\n result: result,\n id: data.id\n };\n if (debug_level >= 2) console.log(\"[microlink.batchcall] posting message down to worker:\", msg);\n return _context.abrupt(\"return\", it.postMessage(msg));\n case 13:\n if (Array.isArray(data) && data.every(function (it) {\n return (0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(it) === \"object\" && ids.includes(it.id);\n })) {\n if (debug_level >= 2) console.log(\"[microlink.batchcall] removing exhausted listener\");\n it.removeEventListener(\"message\", listener);\n\n // enable garbage collection of params\n // even if promise is used later\n all_params_functions = null;\n\n // sort output results by input order\n data.sort(function (a, b) {\n return Math.sign(ids.indexOf(a.id) - ids.indexOf(b.id));\n });\n results = data.map(function (res) {\n return res.result;\n });\n if (debug_level >= 2) console.log(\"[microlink.batchcall] resolving batch call:\", results);\n resolve(results);\n }\n case 14:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n function listener(_x) {\n return _listener.apply(this, arguments);\n }\n return listener;\n }();\n it.addEventListener(\"message\", listener);\n if (debug_level >= 2) console.log(\"[microlink.batchcall] posting message down to worker:\", requests);\n return it.postMessage(requests);\n });\n}\n\n/***/ }),\n\n/***/ \"./node_modules/microlink/esm/deserialize.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/microlink/esm/deserialize.js ***!\n \\***************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ deserialize)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _batch_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./batch.js */ \"./node_modules/microlink/esm/batch.js\");\n/* harmony import */ var _batchcall_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./batchcall.js */ \"./node_modules/microlink/esm/batchcall.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./enums.js */ \"./node_modules/microlink/esm/enums.js\");\n\n\n\n\n\n// const cache = {};\n\nfunction deserialize(it, inpt) {\n var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {},\n _ref$batch_size = _ref.batch_size,\n batch_size = _ref$batch_size === void 0 ? 1 : _ref$batch_size,\n _ref$batch_wait = _ref.batch_wait,\n batch_wait = _ref$batch_wait === void 0 ? 10 : _ref$batch_wait,\n _ref$debug_level = _ref.debug_level,\n debug_level = _ref$debug_level === void 0 ? 0 : _ref$debug_level;\n if (Array.isArray(inpt)) {\n if (depth >= 0) {\n return inpt.map(function (param) {\n return deserialize(it, param, depth - 1, {\n batch_size: batch_size,\n batch_wait: batch_wait\n });\n });\n } else {\n return inpt;\n }\n } else if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(inpt) === \"object\" && inpt !== null && inpt.constructor.name.indexOf(\"Array\") === -1) {\n var obj = {};\n for (var key in inpt) {\n obj[key] = deserialize(it, inpt[key], depth - 1, {\n batch_size: batch_size,\n batch_wait: batch_wait\n });\n }\n return obj;\n } else if (typeof inpt === \"string\" && inpt.startsWith(_enums_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FUNCTION_PREFIX)) {\n var method = inpt.replace(_enums_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_FUNCTION_PREFIX, \"\");\n var runInBatch = (0,_batch_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(function (params) {\n return (0,_batchcall_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(it, params, {\n debug_level: debug_level\n });\n }, {\n size: batch_size,\n wait: batch_wait\n });\n return function () {\n var params = Array.from(arguments);\n return runInBatch({\n method: method,\n params: params\n });\n };\n // return async function () {\n // const params = Array.from(arguments);\n // // const str = JSON.stringify(params); // adding overhead??\n // // if (!(str in cache)) {\n // // cache[str] = runInBatch({ method, params });\n // // }\n // // return cache[str];\n // return runInBatch({ method, params });\n // };\n } else if (typeof inpt === \"string\" && inpt.startsWith(_enums_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_PROMISE_PREFIX)) {\n var _method = inpt.replace(_enums_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_PROMISE_PREFIX, \"\");\n var _runInBatch = (0,_batch_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(function (params) {\n return (0,_batchcall_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(it, params, {\n debug_level: debug_level\n });\n }, {\n size: batch_size,\n wait: batch_wait\n });\n return _runInBatch({\n method: _method,\n params: []\n });\n } else {\n return inpt;\n }\n}\n\n/***/ }),\n\n/***/ \"./node_modules/microlink/esm/enums.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/microlink/esm/enums.js ***!\n \\*********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DEFAULT_FUNCTION_PREFIX: () => (/* binding */ DEFAULT_FUNCTION_PREFIX),\n/* harmony export */ DEFAULT_PROMISE_PREFIX: () => (/* binding */ DEFAULT_PROMISE_PREFIX)\n/* harmony export */ });\nvar DEFAULT_FUNCTION_PREFIX = \"microlink.function:\";\nvar DEFAULT_PROMISE_PREFIX = \"microlink.promise:\";\n\n/***/ }),\n\n/***/ \"./node_modules/microlink/esm/errors.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/microlink/esm/errors.js ***!\n \\**********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ InternalError: () => (/* binding */ InternalError),\n/* harmony export */ MethodNotFound: () => (/* binding */ MethodNotFound)\n/* harmony export */ });\nfunction InternalError(_ref) {\n var error = _ref.error,\n id = _ref.id;\n return {\n jsonrpc: \"2.0\",\n error: {\n code: -32603,\n message: \"Internal error\",\n data: {\n error: error.message\n }\n },\n id: id\n };\n}\nfunction MethodNotFound(_ref2) {\n var id = _ref2.id,\n method = _ref2.method;\n return {\n jsonrpc: \"2.0\",\n error: {\n code: -32601,\n message: \"Method not found\",\n data: {\n method: method\n }\n },\n id: id\n };\n}\n\n/***/ }),\n\n/***/ \"./node_modules/microlink/esm/expose.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/microlink/esm/expose.js ***!\n \\**********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ expose)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ \"./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js\");\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \"./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/regenerator */ \"./node_modules/@babel/runtime/regenerator/index.js\");\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _deserialize_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./deserialize.js */ \"./node_modules/microlink/esm/deserialize.js\");\n/* harmony import */ var _serialize_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./serialize.js */ \"./node_modules/microlink/esm/serialize.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./enums.js */ \"./node_modules/microlink/esm/enums.js\");\n/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./errors.js */ \"./node_modules/microlink/esm/errors.js\");\n\n\n\n\n\n\n\n\n\nfunction expose(obj, options) {\n var batch_size = options && typeof options.batch_size === \"number\" ? options.batch_size : 1;\n var batch_wait = options && typeof options.batch_wait === \"number\" ? options.batch_wait : Infinity; // 10ms\n var debug_level = options && options.debug_level;\n var all_funcs = {};\n var onmessage = /*#__PURE__*/function () {\n var _ref = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee2(evt) {\n var data, results, _evt$data, id, method, params, deserialized_params, result, _serialize, _serialize2, serialized_result, funcs;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n data = evt.data;\n if (debug_level >= 2) console.log(\"[microlink.expose] received message data\", data);\n if (!(Array.isArray(data) && data.length >= 1 && data[0].jsonrpc === \"2.0\" && data[0].method)) {\n _context2.next = 11;\n break;\n }\n if (debug_level >= 2) console.log(\"[microlink.call] top thread received batch request\");\n if (all_funcs) {\n _context2.next = 6;\n break;\n }\n throw new Error(\"[microlink.call] no callable functions\");\n case 6:\n _context2.next = 8;\n return Promise.all(data.map( /*#__PURE__*/function () {\n var _ref2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__[\"default\"])( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().mark(function _callee(req) {\n var result;\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_4___default().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(typeof all_funcs[req.method] !== \"function\")) {\n _context.next = 2;\n break;\n }\n return _context.abrupt(\"return\", (0,_errors_js__WEBPACK_IMPORTED_MODULE_8__.MethodNotFound)({\n id: req.id,\n method: req.method\n }));\n case 2:\n _context.prev = 2;\n _context.next = 5;\n return all_funcs[req.method].apply(all_funcs, (0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(req.params));\n case 5:\n result = _context.sent;\n return _context.abrupt(\"return\", {\n jsonrpc: \"2.0\",\n result: result,\n id: req.id\n });\n case 9:\n _context.prev = 9;\n _context.t0 = _context[\"catch\"](2);\n return _context.abrupt(\"return\", (0,_errors_js__WEBPACK_IMPORTED_MODULE_8__.InternalError)({\n id: id,\n error: _context.t0\n }));\n case 12:\n case \"end\":\n return _context.stop();\n }\n }, _callee, null, [[2, 9]]);\n }));\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }()));\n case 8:\n results = _context2.sent;\n if (debug_level >= 2) console.log(\"[microlink.call] exposed thread posting results to main thread:\", results);\n return _context2.abrupt(\"return\", postMessage(results));\n case 11:\n if (!((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(data) !== \"object\")) {\n _context2.next = 13;\n break;\n }\n return _context2.abrupt(\"return\");\n case 13:\n if (!(data.jsonrpc !== \"2.0\")) {\n _context2.next = 15;\n break;\n }\n return _context2.abrupt(\"return\");\n case 15:\n if (data.method) {\n _context2.next = 17;\n break;\n }\n return _context2.abrupt(\"return\");\n case 17:\n _evt$data = evt.data, id = _evt$data.id, method = _evt$data.method, params = _evt$data.params;\n if (!(method === \"microlink.list\")) {\n _context2.next = 21;\n break;\n }\n if (debug_level >= 2) console.log(\"[microlink.expose] posting method names\", data);\n return _context2.abrupt(\"return\", postMessage({\n jsonrpc: \"2.0\",\n result: Object.keys(obj),\n id: id\n }));\n case 21:\n if (!(typeof obj[method] !== \"function\")) {\n _context2.next = 24;\n break;\n }\n if (debug_level >= 2) console.error(\"[microlink.expose] method not found: \" + method);\n return _context2.abrupt(\"return\", postMessage((0,_errors_js__WEBPACK_IMPORTED_MODULE_8__.MethodNotFound)({\n id: id,\n method: method\n })));\n case 24:\n _context2.prev = 24;\n // batching applies to messsages posted up\n deserialized_params = (0,_deserialize_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(self, params, 2, {\n batch_size: batch_size,\n batch_wait: batch_wait\n });\n _context2.next = 28;\n return obj[method].apply(obj, (0,_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(deserialized_params));\n case 28:\n result = _context2.sent;\n _serialize = (0,_serialize_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(result, {\n function_prefix: _enums_js__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_FUNCTION_PREFIX,\n promise_prefix: _enums_js__WEBPACK_IMPORTED_MODULE_7__.DEFAULT_PROMISE_PREFIX\n }), _serialize2 = (0,_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_serialize, 2), serialized_result = _serialize2[0], funcs = _serialize2[1];\n if (debug_level >= 2) console.log(\"[microlink.expose]\", method, \"result\", result, \"serialized to\", [serialized_result, funcs]);\n Object.assign(all_funcs, funcs);\n\n // encode result in case it returns a function or promise\n\n if (debug_level >= 2) console.log(\"[microlink.expose] posting serialized result for \" + method + \": \" + JSON.stringify(serialized_result));\n return _context2.abrupt(\"return\", postMessage({\n jsonrpc: \"2.0\",\n result: serialized_result,\n id: id\n }));\n case 36:\n _context2.prev = 36;\n _context2.t0 = _context2[\"catch\"](24);\n console.error(\"[microlink.expose] error:\", _context2.t0);\n return _context2.abrupt(\"return\", postMessage((0,_errors_js__WEBPACK_IMPORTED_MODULE_8__.InternalError)({\n error: _context2.t0,\n id: id\n })));\n case 40:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2, null, [[24, 36]]);\n }));\n return function onmessage(_x) {\n return _ref.apply(this, arguments);\n };\n }();\n\n // unblock main thread of worker\n addEventListener(\"message\", function (evt) {\n setTimeout(function () {\n return onmessage(evt);\n }, 0);\n });\n}\n\n/***/ }),\n\n/***/ \"./node_modules/microlink/esm/serialize.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/microlink/esm/serialize.js ***!\n \\*************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ serialize)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ \"./node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ \"./node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./enums.js */ \"./node_modules/microlink/esm/enums.js\");\n\n\n\n\n/**\n * @name serialize\n * @description convert functions and promises at any level of nesting to strings\n * @param {any} it\n * @param {String} prefix - add to beginning of function ids\n * @returns [it, funcs]\n */\nfunction serialize(things) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$function_prefix = _ref.function_prefix,\n function_prefix = _ref$function_prefix === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_FUNCTION_PREFIX : _ref$function_prefix,\n _ref$promise_prefix = _ref.promise_prefix,\n promise_prefix = _ref$promise_prefix === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.DEFAULT_PROMISE_PREFIX : _ref$promise_prefix;\n var generate_id = arguments.length > 2 ? arguments[2] : undefined;\n var funcs = {};\n var proms = {};\n if (!generate_id) generate_id = function generate_id() {\n return Math.random();\n };\n function stringify(it) {\n if (Array.isArray(it)) {\n return it.map(function (i) {\n return stringify(i);\n });\n } else if (typeof it === \"function\") {\n var fid = generate_id(it);\n funcs[fid] = it;\n return function_prefix + fid;\n } else if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(it) === \"object\" && it !== null && typeof it.then === \"function\") {\n var pid = generate_id(it);\n proms[pid] = it;\n funcs[pid] = function () {\n return it;\n }; // create function that returns the promise\n return promise_prefix + pid;\n } else if ((0,_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(it) === \"object\" && it !== null && it.constructor.name.indexOf(\"Array\") === -1) {\n // object that is not null nor a typed array\n return Object.fromEntries(Object.entries(it).map(function (_ref2) {\n var _ref3 = (0,_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(_ref2, 2),\n k = _ref3[0],\n v = _ref3[1];\n return [k, stringify(v)];\n }));\n } else {\n return it;\n }\n }\n things = stringify(things);\n return [things, funcs, proms];\n}\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/bbox-area.js\":\n/*!********************************************!*\\\n !*** ./node_modules/bbox-fns/bbox-area.js ***!\n \\********************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * @name bboxArea\n * @param {Array} bbox - bounding box in form [xmin, ymin, xmax, ymax]\n * @return {Number} area of the bounding box\n */\nfunction bboxArea([xmin, ymin, xmax, ymax]) {\n return (xmax - xmin) * (ymax - ymin);\n}\n\nmodule.exports = bboxArea;\nmodule.exports[\"default\"] = bboxArea;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/bbox-array.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/bbox-fns/bbox-array.js ***!\n \\*********************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * @name bboxArray\n * @param {Array} points - an array (aka ring) of points\n * @return {bbox} bbox in form [xmin, ymin, xmax, ymax]\n */\nfunction bboxArray(points, { nan_strategy = \"throw\" } = { nan_strategy: \"throw\" }) {\n const count = points.length;\n let xmin = null;\n let xmax = null;\n\n let ymin = null;\n let ymax = null;\n for (let i = 0; i < count; i++) {\n const [x, y] = points[i];\n if (isNaN(x)) {\n if (nan_strategy === \"throw\") {\n throw new Error(\"[bbox-fns/bbox-array] encountered point with a NaN value: [\" + x + \", \" + y + \"]\");\n }\n } else if (xmin === null) {\n xmin = x;\n xmax = x;\n } else {\n if (x < xmin) xmin = x;\n else if (x > xmax) xmax = x;\n }\n if (isNaN(y)) {\n if (nan_strategy === \"throw\") {\n throw new Error(\"[bbox-fns/bbox-array] encountered point with a NaN value: [\" + x + \", \" + y + \"]\");\n }\n } else if (ymin === null) {\n ymin = y;\n ymax = y;\n } else {\n if (y < ymin) ymin = y;\n else if (y > ymax) ymax = y;\n }\n }\n return [xmin, ymin, xmax, ymax];\n}\n\nmodule.exports = bboxArray;\nmodule.exports[\"default\"] = bboxArray;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/bbox-point.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/bbox-fns/bbox-point.js ***!\n \\*********************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * @name bboxPoint\n * @param {Array} point - a point in form [x, y] or [longitude, latitude]\n * @return {bbox} a bbox of zero width and height in form [xmin, ymin, xmax, ymax]\n */\nfunction bboxPoint([x, y]) {\n return [x, y, x, y];\n}\n\nmodule.exports = bboxPoint;\nmodule.exports[\"default\"] = bboxPoint;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/bbox-size.js\":\n/*!********************************************!*\\\n !*** ./node_modules/bbox-fns/bbox-size.js ***!\n \\********************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * @name bboxSize\n * @param {Array} bbox - bounding box in form [xmin, ymin, xmax, ymax]\n * @return {bbox} size of the bounding box in form [width, height]\n */\nfunction bboxSize([xmin, ymin, xmax, ymax]) {\n return [xmax - xmin, ymax - ymin];\n}\n\nmodule.exports = bboxSize;\nmodule.exports[\"default\"] = bboxSize;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/boolean-contains-point.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/bbox-fns/boolean-contains-point.js ***!\n \\*********************************************************/\n/***/ ((module) => {\n\n\"use_strict\";\n\n// check if a bounding box contains a point\nfunction booleanContainsPoint([xmin, ymin, xmax, ymax], [x, y], { exclusive = false } = { exclusive: false }) {\n if (exclusive) {\n // exclude points on an exact edge of the bounding box\n return y < ymax && y > ymin && x < xmax && x > xmin;\n } else {\n return y >= ymin && y <= ymax && x >= xmin && x <= xmax;\n }\n}\n\nmodule.exports = booleanContainsPoint;\nmodule.exports[\"default\"] = booleanContainsPoint;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/boolean-contains.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/bbox-fns/boolean-contains.js ***!\n \\***************************************************/\n/***/ ((module) => {\n\n\"use_strict\";\n\n// check if the first bbox completely contains the second\nfunction booleanContains([axmin, aymin, axmax, aymax], [bxmin, bymin, bxmax, bymax], { exclusive = false } = { exclusive: false }) {\n if (exclusive) {\n const xContained = bxmin > axmin && bxmax < axmax;\n const yContained = bymin > aymin && bymax < aymax;\n return xContained && yContained;\n } else {\n const xContained = bxmin >= axmin && bxmax <= axmax;\n const yContained = bymin >= aymin && bymax <= aymax;\n return xContained && yContained;\n }\n}\n\nmodule.exports = booleanContains;\nmodule.exports[\"default\"] = booleanContains;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/boolean-intersects.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/bbox-fns/boolean-intersects.js ***!\n \\*****************************************************/\n/***/ ((module) => {\n\n\"use_strict\";\n\n// check if two bounding boxes overlap at all\nfunction booleanIntersects([axmin, aymin, axmax, aymax], [bxmin, bymin, bxmax, bymax]) {\n const yOverlaps = bymin <= aymax && bymax >= aymin;\n const xOverlaps = bxmin <= axmax && bxmax >= axmin;\n return xOverlaps && yOverlaps;\n}\n\nmodule.exports = booleanIntersects;\nmodule.exports[\"default\"] = booleanIntersects;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/boolean-rectangle.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/bbox-fns/boolean-rectangle.js ***!\n \\****************************************************/\n/***/ ((module) => {\n\nconst VALID_ORDERING = [\n // clockwise\n \"right -> down -> left -> up\",\n \"down -> left -> up -> right\",\n \"left -> up -> right -> down\",\n \"up -> right -> down -> left\",\n\n // counter-clockwise\n \"down -> right -> up -> left\",\n \"right -> up -> left -> down\",\n \"up -> left -> down -> right\",\n \"left -> down -> right -> up\"\n];\n\nfunction booleanRectangle(coords, { debug = 0 } = { debug: 0 }) {\n if (!Array.isArray(coords)) {\n if (debug) {\n console.log(\"[bbox-fns/booleanRectangle] coords is not an array\");\n }\n return false;\n }\n\n // unwrap ring from polygon\n if (coords.length === 1) coords = coords[0];\n\n // if multi-polygon, may need to unwrap twice\n if (coords.length === 1) coords = coords[0];\n\n if (!coords.every(pt => Array.isArray(pt) && pt.every(n => typeof n === \"number\"))) {\n if (debug) console.log(\"[bbox-fns/booleanRectangle] invalid points\");\n return false;\n }\n\n // first and last coordinate should be the same\n if (JSON.stringify(coords[0]) !== JSON.stringify(coords[coords.length - 1])) {\n if (debug) console.log(\"[bbox-fns/booleanRectangle] first and last coordinates not equal\");\n return false;\n }\n\n let order = [];\n for (let i = 1; i < coords.length; i++) {\n const [x0, y0] = coords[i - 1];\n const [x1, y1] = coords[i];\n const vertical = x0 === x1;\n const horizontal = y0 === y1;\n\n // if both true or both false\n if (vertical === horizontal) {\n if (debug) console.log(\"[bbox-fns/booleanRectangle] invalid angle\");\n return false;\n }\n\n let direction;\n if (vertical) {\n direction = y1 > y0 ? \"up\" : \"down\";\n } else if (horizontal) {\n direction = x1 > x0 ? \"right\" : \"left\";\n }\n\n if (direction !== order[order.length - 1]) {\n if (order.length === 4) {\n if (debug) console.log(\"[bbox-fns/booleanRectangle] more than 4 turns\");\n return false;\n }\n order.push(direction);\n }\n }\n\n order = order.join(\" -> \");\n if (debug) console.log(\"[bbox-fns/booleanRectangle] order: \" + order);\n\n if (VALID_ORDERING.indexOf(order) === -1) {\n if (debug) console.log(\"[bbox-fns/booleanRectangle] invalid order\");\n return false;\n }\n\n return true;\n}\n\nmodule.exports = booleanRectangle;\nmodule.exports[\"default\"] = booleanRectangle;\n\n\n/***/ }),\n\n/***/ \"./node_modules/bbox-fns/calc-all.js\":\n/*!*******************************************!*\\\n !*** ./node