UNPKG

@loaders.gl/core

Version:

Framework-independent loaders for 3D graphics formats

224 lines (187 loc) 6.07 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.selectLoader = selectLoader; var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _registerLoaders = require("./register-loaders"); var _normalizeLoader = require("./loader-utils/normalize-loader"); var EXT_PATTERN = /[^.]+$/; function selectLoader(loaders) { var url = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var _ref = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, _ref$nothrow = _ref.nothrow, nothrow = _ref$nothrow === void 0 ? false : _ref$nothrow; url = url || ''; if (loaders && !Array.isArray(loaders)) { var _loader = loaders; (0, _normalizeLoader.normalizeLoader)(_loader); return _loader; } loaders = loaders || (0, _registerLoaders.getRegisteredLoaders)(); normalizeLoaders(loaders); url = url.replace(/\?.*/, ''); var loader = null; loader = loader || findLoaderByUrl(loaders, url); loader = loader || findLoaderByExamingInitialData(loaders, data); if (!loader) { if (nothrow) { return null; } throw new Error("No valid loader found for ".concat(url)); } return loader; } function normalizeLoaders(loaders) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = loaders[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var loader = _step.value; (0, _normalizeLoader.normalizeLoader)(loader); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator["return"] != null) { _iterator["return"](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } function findLoaderByUrl(loaders, url) { var match = url.match(EXT_PATTERN); var extension = match && match[0]; var loader = extension && findLoaderByExtension(loaders, extension); return loader; } function findLoaderByExtension(loaders, extension) { extension = extension.toLowerCase(); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = loaders[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var loader = _step2.value; var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = loader.extensions[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var loaderExtension = _step3.value; if (loaderExtension.toLowerCase() === extension) { return loader; } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) { _iterator3["return"](); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) { _iterator2["return"](); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return null; } function findLoaderByExamingInitialData(loaders, data) { if (!data) { return null; } var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = loaders[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var loader = _step4.value; if (typeof data === 'string') { if (testText(data, loader)) { return loader; } } else if (ArrayBuffer.isView(data)) { if (testBinary(data.buffer, data.byteOffset, loader)) { return loader; } } else if (data instanceof ArrayBuffer) { var byteOffset = 0; if (testBinary(data, byteOffset, loader)) { return loader; } } } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4["return"] != null) { _iterator4["return"](); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } return null; } function testText(data, loader) { return loader.testText && loader.testText(data); } function testBinary(data, byteOffset, loader) { var type = Array.isArray(loader.test) ? 'array' : (0, _typeof2["default"])(loader.test); switch (type) { case 'function': return loader.test(data, loader); case 'string': case 'array': var tests = Array.isArray(loader.test) ? loader.test : [loader.test]; return tests.some(function (test) { var magic = getMagicString(data, byteOffset, test.length); return test === magic; }); default: return false; } } function getMagicString(arrayBuffer, byteOffset, length) { if (arrayBuffer.byteLength <= byteOffset + length) { return ''; } var dataView = new DataView(arrayBuffer); var magic = ''; for (var i = 0; i < length; i++) { magic += String.fromCharCode(dataView.getUint8(byteOffset + i)); } return magic; } //# sourceMappingURL=select-loader.js.map