@loaders.gl/core 3.1.4 → 3.1.8
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.
- package/dist/dist.min.js +646 -4
- package/dist/es5/lib/api/select-loader.js +15 -0
- package/dist/es5/lib/api/select-loader.js.map +1 -1
- package/dist/es5/lib/init.js +14 -4
- package/dist/es5/lib/init.js.map +1 -1
- package/dist/es5/lib/utils/log.js +14 -0
- package/dist/es5/lib/utils/log.js.map +1 -0
- package/dist/es5/null-loader.js +1 -1
- package/dist/esm/lib/api/select-loader.js +14 -0
- package/dist/esm/lib/api/select-loader.js.map +1 -1
- package/dist/esm/lib/init.js +11 -4
- package/dist/esm/lib/init.js.map +1 -1
- package/dist/esm/lib/utils/log.js +5 -0
- package/dist/esm/lib/utils/log.js.map +1 -0
- package/dist/esm/null-loader.js +1 -1
- package/dist/lib/api/select-loader.d.ts.map +1 -1
- package/dist/lib/api/select-loader.js +10 -0
- package/dist/lib/init.d.ts.map +1 -1
- package/dist/lib/init.js +9 -3
- package/dist/lib/utils/log.d.ts +3 -0
- package/dist/lib/utils/log.d.ts.map +1 -0
- package/dist/lib/utils/log.js +6 -0
- package/dist/null-worker.js +1 -1
- package/package.json +5 -4
- package/src/lib/api/select-loader.ts +15 -0
- package/src/lib/init.ts +10 -3
- package/src/lib/utils/log.ts +4 -0
package/dist/dist.min.js
CHANGED
|
@@ -2353,6 +2353,638 @@
|
|
|
2353
2353
|
}
|
|
2354
2354
|
});
|
|
2355
2355
|
|
|
2356
|
+
// ../../node_modules/@probe.gl/env/dist/esm/lib/is-electron.js
|
|
2357
|
+
function isElectron2(mockUserAgent) {
|
|
2358
|
+
if (typeof window !== "undefined" && typeof window.process === "object" && window.process.type === "renderer") {
|
|
2359
|
+
return true;
|
|
2360
|
+
}
|
|
2361
|
+
if (typeof process !== "undefined" && typeof process.versions === "object" && Boolean(process.versions.electron)) {
|
|
2362
|
+
return true;
|
|
2363
|
+
}
|
|
2364
|
+
const realUserAgent = typeof navigator === "object" && typeof navigator.userAgent === "string" && navigator.userAgent;
|
|
2365
|
+
const userAgent = mockUserAgent || realUserAgent;
|
|
2366
|
+
if (userAgent && userAgent.indexOf("Electron") >= 0) {
|
|
2367
|
+
return true;
|
|
2368
|
+
}
|
|
2369
|
+
return false;
|
|
2370
|
+
}
|
|
2371
|
+
var init_is_electron2 = __esm({
|
|
2372
|
+
"../../node_modules/@probe.gl/env/dist/esm/lib/is-electron.js"() {
|
|
2373
|
+
}
|
|
2374
|
+
});
|
|
2375
|
+
|
|
2376
|
+
// ../../node_modules/@probe.gl/env/dist/esm/lib/is-browser.js
|
|
2377
|
+
function isBrowser5() {
|
|
2378
|
+
const isNode = typeof process === "object" && String(process) === "[object process]" && !process.browser;
|
|
2379
|
+
return !isNode || isElectron2();
|
|
2380
|
+
}
|
|
2381
|
+
var init_is_browser2 = __esm({
|
|
2382
|
+
"../../node_modules/@probe.gl/env/dist/esm/lib/is-browser.js"() {
|
|
2383
|
+
init_is_electron2();
|
|
2384
|
+
}
|
|
2385
|
+
});
|
|
2386
|
+
|
|
2387
|
+
// ../../node_modules/@probe.gl/env/dist/esm/lib/globals.js
|
|
2388
|
+
var globals4, self_4, window_4, document_4, process_2;
|
|
2389
|
+
var init_globals5 = __esm({
|
|
2390
|
+
"../../node_modules/@probe.gl/env/dist/esm/lib/globals.js"() {
|
|
2391
|
+
globals4 = {
|
|
2392
|
+
self: typeof self !== "undefined" && self,
|
|
2393
|
+
window: typeof window !== "undefined" && window,
|
|
2394
|
+
global: typeof global !== "undefined" && global,
|
|
2395
|
+
document: typeof document !== "undefined" && document,
|
|
2396
|
+
process: typeof process === "object" && process
|
|
2397
|
+
};
|
|
2398
|
+
self_4 = globals4.self || globals4.window || globals4.global;
|
|
2399
|
+
window_4 = globals4.window || globals4.self || globals4.global;
|
|
2400
|
+
document_4 = globals4.document || {};
|
|
2401
|
+
process_2 = globals4.process || {};
|
|
2402
|
+
}
|
|
2403
|
+
});
|
|
2404
|
+
|
|
2405
|
+
// ../../node_modules/@probe.gl/env/dist/esm/utils/globals.js
|
|
2406
|
+
var VERSION4, isBrowser6;
|
|
2407
|
+
var init_globals6 = __esm({
|
|
2408
|
+
"../../node_modules/@probe.gl/env/dist/esm/utils/globals.js"() {
|
|
2409
|
+
init_is_browser2();
|
|
2410
|
+
VERSION4 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
|
|
2411
|
+
isBrowser6 = isBrowser5();
|
|
2412
|
+
}
|
|
2413
|
+
});
|
|
2414
|
+
|
|
2415
|
+
// ../../node_modules/@probe.gl/env/dist/esm/index.js
|
|
2416
|
+
var init_esm4 = __esm({
|
|
2417
|
+
"../../node_modules/@probe.gl/env/dist/esm/index.js"() {
|
|
2418
|
+
init_globals6();
|
|
2419
|
+
init_globals5();
|
|
2420
|
+
init_is_browser2();
|
|
2421
|
+
}
|
|
2422
|
+
});
|
|
2423
|
+
|
|
2424
|
+
// ../../node_modules/@probe.gl/log/dist/esm/utils/local-storage.js
|
|
2425
|
+
function getStorage2(type) {
|
|
2426
|
+
try {
|
|
2427
|
+
const storage = window[type];
|
|
2428
|
+
const x = "__storage_test__";
|
|
2429
|
+
storage.setItem(x, x);
|
|
2430
|
+
storage.removeItem(x);
|
|
2431
|
+
return storage;
|
|
2432
|
+
} catch (e) {
|
|
2433
|
+
return null;
|
|
2434
|
+
}
|
|
2435
|
+
}
|
|
2436
|
+
var LocalStorage2;
|
|
2437
|
+
var init_local_storage2 = __esm({
|
|
2438
|
+
"../../node_modules/@probe.gl/log/dist/esm/utils/local-storage.js"() {
|
|
2439
|
+
init_defineProperty();
|
|
2440
|
+
LocalStorage2 = class {
|
|
2441
|
+
constructor(id) {
|
|
2442
|
+
let defaultSettings = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
2443
|
+
let type = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "sessionStorage";
|
|
2444
|
+
_defineProperty(this, "storage", void 0);
|
|
2445
|
+
_defineProperty(this, "id", void 0);
|
|
2446
|
+
_defineProperty(this, "config", {});
|
|
2447
|
+
this.storage = getStorage2(type);
|
|
2448
|
+
this.id = id;
|
|
2449
|
+
this.config = {};
|
|
2450
|
+
Object.assign(this.config, defaultSettings);
|
|
2451
|
+
this._loadConfiguration();
|
|
2452
|
+
}
|
|
2453
|
+
getConfiguration() {
|
|
2454
|
+
return this.config;
|
|
2455
|
+
}
|
|
2456
|
+
setConfiguration(configuration) {
|
|
2457
|
+
this.config = {};
|
|
2458
|
+
return this.updateConfiguration(configuration);
|
|
2459
|
+
}
|
|
2460
|
+
updateConfiguration(configuration) {
|
|
2461
|
+
Object.assign(this.config, configuration);
|
|
2462
|
+
if (this.storage) {
|
|
2463
|
+
const serialized = JSON.stringify(this.config);
|
|
2464
|
+
this.storage.setItem(this.id, serialized);
|
|
2465
|
+
}
|
|
2466
|
+
return this;
|
|
2467
|
+
}
|
|
2468
|
+
_loadConfiguration() {
|
|
2469
|
+
let configuration = {};
|
|
2470
|
+
if (this.storage) {
|
|
2471
|
+
const serializedConfiguration = this.storage.getItem(this.id);
|
|
2472
|
+
configuration = serializedConfiguration ? JSON.parse(serializedConfiguration) : {};
|
|
2473
|
+
}
|
|
2474
|
+
Object.assign(this.config, configuration);
|
|
2475
|
+
return this;
|
|
2476
|
+
}
|
|
2477
|
+
};
|
|
2478
|
+
}
|
|
2479
|
+
});
|
|
2480
|
+
|
|
2481
|
+
// ../../node_modules/@probe.gl/log/dist/esm/utils/formatters.js
|
|
2482
|
+
function formatTime2(ms) {
|
|
2483
|
+
let formatted;
|
|
2484
|
+
if (ms < 10) {
|
|
2485
|
+
formatted = "".concat(ms.toFixed(2), "ms");
|
|
2486
|
+
} else if (ms < 100) {
|
|
2487
|
+
formatted = "".concat(ms.toFixed(1), "ms");
|
|
2488
|
+
} else if (ms < 1e3) {
|
|
2489
|
+
formatted = "".concat(ms.toFixed(0), "ms");
|
|
2490
|
+
} else {
|
|
2491
|
+
formatted = "".concat((ms / 1e3).toFixed(2), "s");
|
|
2492
|
+
}
|
|
2493
|
+
return formatted;
|
|
2494
|
+
}
|
|
2495
|
+
function leftPad2(string) {
|
|
2496
|
+
let length = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 8;
|
|
2497
|
+
const padLength = Math.max(length - string.length, 0);
|
|
2498
|
+
return "".concat(" ".repeat(padLength)).concat(string);
|
|
2499
|
+
}
|
|
2500
|
+
function formatImage2(image, message, scale) {
|
|
2501
|
+
let maxWidth = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 600;
|
|
2502
|
+
const imageUrl = image.src.replace(/\(/g, "%28").replace(/\)/g, "%29");
|
|
2503
|
+
if (image.width > maxWidth) {
|
|
2504
|
+
scale = Math.min(scale, maxWidth / image.width);
|
|
2505
|
+
}
|
|
2506
|
+
const width = image.width * scale;
|
|
2507
|
+
const height = image.height * scale;
|
|
2508
|
+
const style = ["font-size:1px;", "padding:".concat(Math.floor(height / 2), "px ").concat(Math.floor(width / 2), "px;"), "line-height:".concat(height, "px;"), "background:url(".concat(imageUrl, ");"), "background-size:".concat(width, "px ").concat(height, "px;"), "color:transparent;"].join("");
|
|
2509
|
+
return ["".concat(message, " %c+"), style];
|
|
2510
|
+
}
|
|
2511
|
+
var init_formatters2 = __esm({
|
|
2512
|
+
"../../node_modules/@probe.gl/log/dist/esm/utils/formatters.js"() {
|
|
2513
|
+
}
|
|
2514
|
+
});
|
|
2515
|
+
|
|
2516
|
+
// ../../node_modules/@probe.gl/log/dist/esm/utils/color.js
|
|
2517
|
+
function getColor2(color) {
|
|
2518
|
+
return typeof color === "string" ? COLOR2[color.toUpperCase()] || COLOR2.WHITE : color;
|
|
2519
|
+
}
|
|
2520
|
+
function addColor2(string, color, background) {
|
|
2521
|
+
if (!isBrowser5 && typeof string === "string") {
|
|
2522
|
+
if (color) {
|
|
2523
|
+
color = getColor2(color);
|
|
2524
|
+
string = "[".concat(color, "m").concat(string, "[39m");
|
|
2525
|
+
}
|
|
2526
|
+
if (background) {
|
|
2527
|
+
color = getColor2(background);
|
|
2528
|
+
string = "[".concat(background + 10, "m").concat(string, "[49m");
|
|
2529
|
+
}
|
|
2530
|
+
}
|
|
2531
|
+
return string;
|
|
2532
|
+
}
|
|
2533
|
+
var COLOR2;
|
|
2534
|
+
var init_color2 = __esm({
|
|
2535
|
+
"../../node_modules/@probe.gl/log/dist/esm/utils/color.js"() {
|
|
2536
|
+
init_esm4();
|
|
2537
|
+
(function(COLOR3) {
|
|
2538
|
+
COLOR3[COLOR3["BLACK"] = 30] = "BLACK";
|
|
2539
|
+
COLOR3[COLOR3["RED"] = 31] = "RED";
|
|
2540
|
+
COLOR3[COLOR3["GREEN"] = 32] = "GREEN";
|
|
2541
|
+
COLOR3[COLOR3["YELLOW"] = 33] = "YELLOW";
|
|
2542
|
+
COLOR3[COLOR3["BLUE"] = 34] = "BLUE";
|
|
2543
|
+
COLOR3[COLOR3["MAGENTA"] = 35] = "MAGENTA";
|
|
2544
|
+
COLOR3[COLOR3["CYAN"] = 36] = "CYAN";
|
|
2545
|
+
COLOR3[COLOR3["WHITE"] = 37] = "WHITE";
|
|
2546
|
+
COLOR3[COLOR3["BRIGHT_BLACK"] = 90] = "BRIGHT_BLACK";
|
|
2547
|
+
COLOR3[COLOR3["BRIGHT_RED"] = 91] = "BRIGHT_RED";
|
|
2548
|
+
COLOR3[COLOR3["BRIGHT_GREEN"] = 92] = "BRIGHT_GREEN";
|
|
2549
|
+
COLOR3[COLOR3["BRIGHT_YELLOW"] = 93] = "BRIGHT_YELLOW";
|
|
2550
|
+
COLOR3[COLOR3["BRIGHT_BLUE"] = 94] = "BRIGHT_BLUE";
|
|
2551
|
+
COLOR3[COLOR3["BRIGHT_MAGENTA"] = 95] = "BRIGHT_MAGENTA";
|
|
2552
|
+
COLOR3[COLOR3["BRIGHT_CYAN"] = 96] = "BRIGHT_CYAN";
|
|
2553
|
+
COLOR3[COLOR3["BRIGHT_WHITE"] = 97] = "BRIGHT_WHITE";
|
|
2554
|
+
})(COLOR2 || (COLOR2 = {}));
|
|
2555
|
+
}
|
|
2556
|
+
});
|
|
2557
|
+
|
|
2558
|
+
// ../../node_modules/@probe.gl/log/dist/esm/utils/autobind.js
|
|
2559
|
+
function autobind2(obj) {
|
|
2560
|
+
let predefined = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ["constructor"];
|
|
2561
|
+
const proto = Object.getPrototypeOf(obj);
|
|
2562
|
+
const propNames = Object.getOwnPropertyNames(proto);
|
|
2563
|
+
for (const key of propNames) {
|
|
2564
|
+
if (typeof obj[key] === "function") {
|
|
2565
|
+
if (!predefined.find((name) => key === name)) {
|
|
2566
|
+
obj[key] = obj[key].bind(obj);
|
|
2567
|
+
}
|
|
2568
|
+
}
|
|
2569
|
+
}
|
|
2570
|
+
}
|
|
2571
|
+
var init_autobind2 = __esm({
|
|
2572
|
+
"../../node_modules/@probe.gl/log/dist/esm/utils/autobind.js"() {
|
|
2573
|
+
}
|
|
2574
|
+
});
|
|
2575
|
+
|
|
2576
|
+
// ../../node_modules/@probe.gl/log/dist/esm/utils/assert.js
|
|
2577
|
+
function assert4(condition, message) {
|
|
2578
|
+
if (!condition) {
|
|
2579
|
+
throw new Error(message || "Assertion failed");
|
|
2580
|
+
}
|
|
2581
|
+
}
|
|
2582
|
+
var init_assert4 = __esm({
|
|
2583
|
+
"../../node_modules/@probe.gl/log/dist/esm/utils/assert.js"() {
|
|
2584
|
+
}
|
|
2585
|
+
});
|
|
2586
|
+
|
|
2587
|
+
// ../../node_modules/@probe.gl/log/dist/esm/utils/hi-res-timestamp.js
|
|
2588
|
+
function getHiResTimestamp4() {
|
|
2589
|
+
let timestamp;
|
|
2590
|
+
if (isBrowser5 && "performance" in window_4) {
|
|
2591
|
+
var _window$performance, _window$performance$n;
|
|
2592
|
+
timestamp = window_4 === null || window_4 === void 0 ? void 0 : (_window$performance = window_4.performance) === null || _window$performance === void 0 ? void 0 : (_window$performance$n = _window$performance.now) === null || _window$performance$n === void 0 ? void 0 : _window$performance$n.call(_window$performance);
|
|
2593
|
+
} else if ("hrtime" in process_2) {
|
|
2594
|
+
var _process$hrtime;
|
|
2595
|
+
const timeParts = process_2 === null || process_2 === void 0 ? void 0 : (_process$hrtime = process_2.hrtime) === null || _process$hrtime === void 0 ? void 0 : _process$hrtime.call(process_2);
|
|
2596
|
+
timestamp = timeParts[0] * 1e3 + timeParts[1] / 1e6;
|
|
2597
|
+
} else {
|
|
2598
|
+
timestamp = Date.now();
|
|
2599
|
+
}
|
|
2600
|
+
return timestamp;
|
|
2601
|
+
}
|
|
2602
|
+
var init_hi_res_timestamp4 = __esm({
|
|
2603
|
+
"../../node_modules/@probe.gl/log/dist/esm/utils/hi-res-timestamp.js"() {
|
|
2604
|
+
init_esm4();
|
|
2605
|
+
}
|
|
2606
|
+
});
|
|
2607
|
+
|
|
2608
|
+
// ../../node_modules/@probe.gl/log/dist/esm/log.js
|
|
2609
|
+
function noop2() {
|
|
2610
|
+
}
|
|
2611
|
+
function normalizeLogLevel2(logLevel) {
|
|
2612
|
+
if (!logLevel) {
|
|
2613
|
+
return 0;
|
|
2614
|
+
}
|
|
2615
|
+
let resolvedLevel;
|
|
2616
|
+
switch (typeof logLevel) {
|
|
2617
|
+
case "number":
|
|
2618
|
+
resolvedLevel = logLevel;
|
|
2619
|
+
break;
|
|
2620
|
+
case "object":
|
|
2621
|
+
resolvedLevel = logLevel.logLevel || logLevel.priority || 0;
|
|
2622
|
+
break;
|
|
2623
|
+
default:
|
|
2624
|
+
return 0;
|
|
2625
|
+
}
|
|
2626
|
+
assert4(Number.isFinite(resolvedLevel) && resolvedLevel >= 0);
|
|
2627
|
+
return resolvedLevel;
|
|
2628
|
+
}
|
|
2629
|
+
function normalizeArguments2(opts) {
|
|
2630
|
+
const {
|
|
2631
|
+
logLevel,
|
|
2632
|
+
message
|
|
2633
|
+
} = opts;
|
|
2634
|
+
opts.logLevel = normalizeLogLevel2(logLevel);
|
|
2635
|
+
const args = opts.args ? Array.from(opts.args) : [];
|
|
2636
|
+
while (args.length && args.shift() !== message) {
|
|
2637
|
+
}
|
|
2638
|
+
switch (typeof logLevel) {
|
|
2639
|
+
case "string":
|
|
2640
|
+
case "function":
|
|
2641
|
+
if (message !== void 0) {
|
|
2642
|
+
args.unshift(message);
|
|
2643
|
+
}
|
|
2644
|
+
opts.message = logLevel;
|
|
2645
|
+
break;
|
|
2646
|
+
case "object":
|
|
2647
|
+
Object.assign(opts, logLevel);
|
|
2648
|
+
break;
|
|
2649
|
+
default:
|
|
2650
|
+
}
|
|
2651
|
+
if (typeof opts.message === "function") {
|
|
2652
|
+
opts.message = opts.message();
|
|
2653
|
+
}
|
|
2654
|
+
const messageType = typeof opts.message;
|
|
2655
|
+
assert4(messageType === "string" || messageType === "object");
|
|
2656
|
+
return Object.assign(opts, {
|
|
2657
|
+
args
|
|
2658
|
+
}, opts.opts);
|
|
2659
|
+
}
|
|
2660
|
+
function decorateMessage2(id, message, opts) {
|
|
2661
|
+
if (typeof message === "string") {
|
|
2662
|
+
const time = opts.time ? leftPad2(formatTime2(opts.total)) : "";
|
|
2663
|
+
message = opts.time ? "".concat(id, ": ").concat(time, " ").concat(message) : "".concat(id, ": ").concat(message);
|
|
2664
|
+
message = addColor2(message, opts.color, opts.background);
|
|
2665
|
+
}
|
|
2666
|
+
return message;
|
|
2667
|
+
}
|
|
2668
|
+
function logImageInNode2(_ref2) {
|
|
2669
|
+
let {
|
|
2670
|
+
image,
|
|
2671
|
+
message = "",
|
|
2672
|
+
scale = 1
|
|
2673
|
+
} = _ref2;
|
|
2674
|
+
let asciify = null;
|
|
2675
|
+
try {
|
|
2676
|
+
asciify = module.require("asciify-image");
|
|
2677
|
+
} catch (error) {
|
|
2678
|
+
}
|
|
2679
|
+
if (asciify) {
|
|
2680
|
+
return () => asciify(image, {
|
|
2681
|
+
fit: "box",
|
|
2682
|
+
width: "".concat(Math.round(80 * scale), "%")
|
|
2683
|
+
}).then((data) => console.log(data));
|
|
2684
|
+
}
|
|
2685
|
+
return noop2;
|
|
2686
|
+
}
|
|
2687
|
+
function logImageInBrowser2(_ref3) {
|
|
2688
|
+
let {
|
|
2689
|
+
image,
|
|
2690
|
+
message = "",
|
|
2691
|
+
scale = 1
|
|
2692
|
+
} = _ref3;
|
|
2693
|
+
if (typeof image === "string") {
|
|
2694
|
+
const img = new Image();
|
|
2695
|
+
img.onload = () => {
|
|
2696
|
+
const args = formatImage2(img, message, scale);
|
|
2697
|
+
console.log(...args);
|
|
2698
|
+
};
|
|
2699
|
+
img.src = image;
|
|
2700
|
+
return noop2;
|
|
2701
|
+
}
|
|
2702
|
+
const element = image.nodeName || "";
|
|
2703
|
+
if (element.toLowerCase() === "img") {
|
|
2704
|
+
console.log(...formatImage2(image, message, scale));
|
|
2705
|
+
return noop2;
|
|
2706
|
+
}
|
|
2707
|
+
if (element.toLowerCase() === "canvas") {
|
|
2708
|
+
const img = new Image();
|
|
2709
|
+
img.onload = () => console.log(...formatImage2(img, message, scale));
|
|
2710
|
+
img.src = image.toDataURL();
|
|
2711
|
+
return noop2;
|
|
2712
|
+
}
|
|
2713
|
+
return noop2;
|
|
2714
|
+
}
|
|
2715
|
+
function getTableHeader2(table) {
|
|
2716
|
+
for (const key in table) {
|
|
2717
|
+
for (const title in table[key]) {
|
|
2718
|
+
return title || "untitled";
|
|
2719
|
+
}
|
|
2720
|
+
}
|
|
2721
|
+
return "empty";
|
|
2722
|
+
}
|
|
2723
|
+
var originalConsole2, DEFAULT_SETTINGS2, cache2, ONCE2, Log2;
|
|
2724
|
+
var init_log2 = __esm({
|
|
2725
|
+
"../../node_modules/@probe.gl/log/dist/esm/log.js"() {
|
|
2726
|
+
init_defineProperty();
|
|
2727
|
+
init_esm4();
|
|
2728
|
+
init_local_storage2();
|
|
2729
|
+
init_formatters2();
|
|
2730
|
+
init_color2();
|
|
2731
|
+
init_autobind2();
|
|
2732
|
+
init_assert4();
|
|
2733
|
+
init_hi_res_timestamp4();
|
|
2734
|
+
originalConsole2 = {
|
|
2735
|
+
debug: isBrowser5 ? console.debug || console.log : console.log,
|
|
2736
|
+
log: console.log,
|
|
2737
|
+
info: console.info,
|
|
2738
|
+
warn: console.warn,
|
|
2739
|
+
error: console.error
|
|
2740
|
+
};
|
|
2741
|
+
DEFAULT_SETTINGS2 = {
|
|
2742
|
+
enabled: true,
|
|
2743
|
+
level: 0
|
|
2744
|
+
};
|
|
2745
|
+
cache2 = {};
|
|
2746
|
+
ONCE2 = {
|
|
2747
|
+
once: true
|
|
2748
|
+
};
|
|
2749
|
+
Log2 = class {
|
|
2750
|
+
constructor() {
|
|
2751
|
+
let {
|
|
2752
|
+
id
|
|
2753
|
+
} = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {
|
|
2754
|
+
id: ""
|
|
2755
|
+
};
|
|
2756
|
+
_defineProperty(this, "id", void 0);
|
|
2757
|
+
_defineProperty(this, "VERSION", VERSION4);
|
|
2758
|
+
_defineProperty(this, "_startTs", getHiResTimestamp4());
|
|
2759
|
+
_defineProperty(this, "_deltaTs", getHiResTimestamp4());
|
|
2760
|
+
_defineProperty(this, "_storage", void 0);
|
|
2761
|
+
_defineProperty(this, "userData", {});
|
|
2762
|
+
_defineProperty(this, "LOG_THROTTLE_TIMEOUT", 0);
|
|
2763
|
+
this.id = id;
|
|
2764
|
+
this._storage = new LocalStorage2("__probe-".concat(this.id, "__"), DEFAULT_SETTINGS2);
|
|
2765
|
+
this.userData = {};
|
|
2766
|
+
this.timeStamp("".concat(this.id, " started"));
|
|
2767
|
+
autobind2(this);
|
|
2768
|
+
Object.seal(this);
|
|
2769
|
+
}
|
|
2770
|
+
set level(newLevel) {
|
|
2771
|
+
this.setLevel(newLevel);
|
|
2772
|
+
}
|
|
2773
|
+
get level() {
|
|
2774
|
+
return this.getLevel();
|
|
2775
|
+
}
|
|
2776
|
+
isEnabled() {
|
|
2777
|
+
return this._storage.config.enabled;
|
|
2778
|
+
}
|
|
2779
|
+
getLevel() {
|
|
2780
|
+
return this._storage.config.level;
|
|
2781
|
+
}
|
|
2782
|
+
getTotal() {
|
|
2783
|
+
return Number((getHiResTimestamp4() - this._startTs).toPrecision(10));
|
|
2784
|
+
}
|
|
2785
|
+
getDelta() {
|
|
2786
|
+
return Number((getHiResTimestamp4() - this._deltaTs).toPrecision(10));
|
|
2787
|
+
}
|
|
2788
|
+
set priority(newPriority) {
|
|
2789
|
+
this.level = newPriority;
|
|
2790
|
+
}
|
|
2791
|
+
get priority() {
|
|
2792
|
+
return this.level;
|
|
2793
|
+
}
|
|
2794
|
+
getPriority() {
|
|
2795
|
+
return this.level;
|
|
2796
|
+
}
|
|
2797
|
+
enable() {
|
|
2798
|
+
let enabled = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
2799
|
+
this._storage.updateConfiguration({
|
|
2800
|
+
enabled
|
|
2801
|
+
});
|
|
2802
|
+
return this;
|
|
2803
|
+
}
|
|
2804
|
+
setLevel(level) {
|
|
2805
|
+
this._storage.updateConfiguration({
|
|
2806
|
+
level
|
|
2807
|
+
});
|
|
2808
|
+
return this;
|
|
2809
|
+
}
|
|
2810
|
+
get(setting) {
|
|
2811
|
+
return this._storage.config[setting];
|
|
2812
|
+
}
|
|
2813
|
+
set(setting, value) {
|
|
2814
|
+
this._storage.updateConfiguration({
|
|
2815
|
+
[setting]: value
|
|
2816
|
+
});
|
|
2817
|
+
}
|
|
2818
|
+
settings() {
|
|
2819
|
+
if (console.table) {
|
|
2820
|
+
console.table(this._storage.config);
|
|
2821
|
+
} else {
|
|
2822
|
+
console.log(this._storage.config);
|
|
2823
|
+
}
|
|
2824
|
+
}
|
|
2825
|
+
assert(condition, message) {
|
|
2826
|
+
assert4(condition, message);
|
|
2827
|
+
}
|
|
2828
|
+
warn(message) {
|
|
2829
|
+
return this._getLogFunction(0, message, originalConsole2.warn, arguments, ONCE2);
|
|
2830
|
+
}
|
|
2831
|
+
error(message) {
|
|
2832
|
+
return this._getLogFunction(0, message, originalConsole2.error, arguments);
|
|
2833
|
+
}
|
|
2834
|
+
deprecated(oldUsage, newUsage) {
|
|
2835
|
+
return this.warn("`".concat(oldUsage, "` is deprecated and will be removed in a later version. Use `").concat(newUsage, "` instead"));
|
|
2836
|
+
}
|
|
2837
|
+
removed(oldUsage, newUsage) {
|
|
2838
|
+
return this.error("`".concat(oldUsage, "` has been removed. Use `").concat(newUsage, "` instead"));
|
|
2839
|
+
}
|
|
2840
|
+
probe(logLevel, message) {
|
|
2841
|
+
return this._getLogFunction(logLevel, message, originalConsole2.log, arguments, {
|
|
2842
|
+
time: true,
|
|
2843
|
+
once: true
|
|
2844
|
+
});
|
|
2845
|
+
}
|
|
2846
|
+
log(logLevel, message) {
|
|
2847
|
+
return this._getLogFunction(logLevel, message, originalConsole2.debug, arguments);
|
|
2848
|
+
}
|
|
2849
|
+
info(logLevel, message) {
|
|
2850
|
+
return this._getLogFunction(logLevel, message, console.info, arguments);
|
|
2851
|
+
}
|
|
2852
|
+
once(logLevel, message) {
|
|
2853
|
+
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
2854
|
+
args[_key - 2] = arguments[_key];
|
|
2855
|
+
}
|
|
2856
|
+
return this._getLogFunction(logLevel, message, originalConsole2.debug || originalConsole2.info, arguments, ONCE2);
|
|
2857
|
+
}
|
|
2858
|
+
table(logLevel, table, columns) {
|
|
2859
|
+
if (table) {
|
|
2860
|
+
return this._getLogFunction(logLevel, table, console.table || noop2, columns && [columns], {
|
|
2861
|
+
tag: getTableHeader2(table)
|
|
2862
|
+
});
|
|
2863
|
+
}
|
|
2864
|
+
return noop2;
|
|
2865
|
+
}
|
|
2866
|
+
image(_ref) {
|
|
2867
|
+
let {
|
|
2868
|
+
logLevel,
|
|
2869
|
+
priority,
|
|
2870
|
+
image,
|
|
2871
|
+
message = "",
|
|
2872
|
+
scale = 1
|
|
2873
|
+
} = _ref;
|
|
2874
|
+
if (!this._shouldLog(logLevel || priority)) {
|
|
2875
|
+
return noop2;
|
|
2876
|
+
}
|
|
2877
|
+
return isBrowser5 ? logImageInBrowser2({
|
|
2878
|
+
image,
|
|
2879
|
+
message,
|
|
2880
|
+
scale
|
|
2881
|
+
}) : logImageInNode2({
|
|
2882
|
+
image,
|
|
2883
|
+
message,
|
|
2884
|
+
scale
|
|
2885
|
+
});
|
|
2886
|
+
}
|
|
2887
|
+
time(logLevel, message) {
|
|
2888
|
+
return this._getLogFunction(logLevel, message, console.time ? console.time : console.info);
|
|
2889
|
+
}
|
|
2890
|
+
timeEnd(logLevel, message) {
|
|
2891
|
+
return this._getLogFunction(logLevel, message, console.timeEnd ? console.timeEnd : console.info);
|
|
2892
|
+
}
|
|
2893
|
+
timeStamp(logLevel, message) {
|
|
2894
|
+
return this._getLogFunction(logLevel, message, console.timeStamp || noop2);
|
|
2895
|
+
}
|
|
2896
|
+
group(logLevel, message) {
|
|
2897
|
+
let opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {
|
|
2898
|
+
collapsed: false
|
|
2899
|
+
};
|
|
2900
|
+
const options = normalizeArguments2({
|
|
2901
|
+
logLevel,
|
|
2902
|
+
message,
|
|
2903
|
+
opts
|
|
2904
|
+
});
|
|
2905
|
+
const {
|
|
2906
|
+
collapsed
|
|
2907
|
+
} = opts;
|
|
2908
|
+
options.method = (collapsed ? console.groupCollapsed : console.group) || console.info;
|
|
2909
|
+
return this._getLogFunction(options);
|
|
2910
|
+
}
|
|
2911
|
+
groupCollapsed(logLevel, message) {
|
|
2912
|
+
let opts = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
|
|
2913
|
+
return this.group(logLevel, message, Object.assign({}, opts, {
|
|
2914
|
+
collapsed: true
|
|
2915
|
+
}));
|
|
2916
|
+
}
|
|
2917
|
+
groupEnd(logLevel) {
|
|
2918
|
+
return this._getLogFunction(logLevel, "", console.groupEnd || noop2);
|
|
2919
|
+
}
|
|
2920
|
+
withGroup(logLevel, message, func) {
|
|
2921
|
+
this.group(logLevel, message)();
|
|
2922
|
+
try {
|
|
2923
|
+
func();
|
|
2924
|
+
} finally {
|
|
2925
|
+
this.groupEnd(logLevel)();
|
|
2926
|
+
}
|
|
2927
|
+
}
|
|
2928
|
+
trace() {
|
|
2929
|
+
if (console.trace) {
|
|
2930
|
+
console.trace();
|
|
2931
|
+
}
|
|
2932
|
+
}
|
|
2933
|
+
_shouldLog(logLevel) {
|
|
2934
|
+
return this.isEnabled() && this.getLevel() >= normalizeLogLevel2(logLevel);
|
|
2935
|
+
}
|
|
2936
|
+
_getLogFunction(logLevel, message, method, args, opts) {
|
|
2937
|
+
if (this._shouldLog(logLevel)) {
|
|
2938
|
+
opts = normalizeArguments2({
|
|
2939
|
+
logLevel,
|
|
2940
|
+
message,
|
|
2941
|
+
args,
|
|
2942
|
+
opts
|
|
2943
|
+
});
|
|
2944
|
+
method = method || opts.method;
|
|
2945
|
+
assert4(method);
|
|
2946
|
+
opts.total = this.getTotal();
|
|
2947
|
+
opts.delta = this.getDelta();
|
|
2948
|
+
this._deltaTs = getHiResTimestamp4();
|
|
2949
|
+
const tag = opts.tag || opts.message;
|
|
2950
|
+
if (opts.once) {
|
|
2951
|
+
if (!cache2[tag]) {
|
|
2952
|
+
cache2[tag] = getHiResTimestamp4();
|
|
2953
|
+
} else {
|
|
2954
|
+
return noop2;
|
|
2955
|
+
}
|
|
2956
|
+
}
|
|
2957
|
+
message = decorateMessage2(this.id, opts.message, opts);
|
|
2958
|
+
return method.bind(console, message, ...opts.args);
|
|
2959
|
+
}
|
|
2960
|
+
return noop2;
|
|
2961
|
+
}
|
|
2962
|
+
};
|
|
2963
|
+
_defineProperty(Log2, "VERSION", VERSION4);
|
|
2964
|
+
}
|
|
2965
|
+
});
|
|
2966
|
+
|
|
2967
|
+
// ../../node_modules/@probe.gl/log/dist/esm/index.js
|
|
2968
|
+
var esm_default2;
|
|
2969
|
+
var init_esm5 = __esm({
|
|
2970
|
+
"../../node_modules/@probe.gl/log/dist/esm/index.js"() {
|
|
2971
|
+
init_log2();
|
|
2972
|
+
init_log2();
|
|
2973
|
+
esm_default2 = new Log2({
|
|
2974
|
+
id: "@probe.gl/log"
|
|
2975
|
+
});
|
|
2976
|
+
}
|
|
2977
|
+
});
|
|
2978
|
+
|
|
2979
|
+
// src/lib/utils/log.ts
|
|
2980
|
+
var log;
|
|
2981
|
+
var init_log3 = __esm({
|
|
2982
|
+
"src/lib/utils/log.ts"() {
|
|
2983
|
+
init_esm5();
|
|
2984
|
+
log = new Log2({ id: "loaders.gl" });
|
|
2985
|
+
}
|
|
2986
|
+
});
|
|
2987
|
+
|
|
2356
2988
|
// src/lib/api/select-loader.ts
|
|
2357
2989
|
async function selectLoader(data, loaders = [], options, context) {
|
|
2358
2990
|
if (!validHTTPResponse(data)) {
|
|
@@ -2396,13 +3028,22 @@
|
|
|
2396
3028
|
const { url, type } = getResourceUrlAndType(data);
|
|
2397
3029
|
const testUrl = url || context?.url;
|
|
2398
3030
|
let loader = null;
|
|
3031
|
+
let reason = "";
|
|
2399
3032
|
if (options?.mimeType) {
|
|
2400
3033
|
loader = findLoaderByMIMEType(loaders, options?.mimeType);
|
|
3034
|
+
reason = `match forced by supplied MIME type ${options?.mimeType}`;
|
|
2401
3035
|
}
|
|
2402
3036
|
loader = loader || findLoaderByUrl(loaders, testUrl);
|
|
3037
|
+
reason = reason || (loader ? `matched url ${testUrl}` : "");
|
|
2403
3038
|
loader = loader || findLoaderByMIMEType(loaders, type);
|
|
3039
|
+
reason = reason || (loader ? `matched MIME type ${type}` : "");
|
|
2404
3040
|
loader = loader || findLoaderByInitialBytes(loaders, data);
|
|
3041
|
+
reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : "");
|
|
2405
3042
|
loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);
|
|
3043
|
+
reason = reason || (loader ? `matched fallback MIME type ${type}` : "");
|
|
3044
|
+
if (reason) {
|
|
3045
|
+
log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);
|
|
3046
|
+
}
|
|
2406
3047
|
return loader;
|
|
2407
3048
|
}
|
|
2408
3049
|
function validHTTPResponse(data) {
|
|
@@ -2529,6 +3170,7 @@
|
|
|
2529
3170
|
"src/lib/api/select-loader.ts"() {
|
|
2530
3171
|
init_src2();
|
|
2531
3172
|
init_normalize_loader();
|
|
3173
|
+
init_log3();
|
|
2532
3174
|
init_resource_utils();
|
|
2533
3175
|
init_register_loaders();
|
|
2534
3176
|
init_is_type();
|
|
@@ -3148,15 +3790,15 @@
|
|
|
3148
3790
|
});
|
|
3149
3791
|
|
|
3150
3792
|
// src/null-loader.ts
|
|
3151
|
-
var
|
|
3793
|
+
var VERSION5, NullWorkerLoader, NullLoader;
|
|
3152
3794
|
var init_null_loader = __esm({
|
|
3153
3795
|
"src/null-loader.ts"() {
|
|
3154
|
-
|
|
3796
|
+
VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
|
|
3155
3797
|
NullWorkerLoader = {
|
|
3156
3798
|
name: "Null loader",
|
|
3157
3799
|
id: "null",
|
|
3158
3800
|
module: "core",
|
|
3159
|
-
version:
|
|
3801
|
+
version: VERSION5,
|
|
3160
3802
|
worker: true,
|
|
3161
3803
|
mimeTypes: ["application/x.empty"],
|
|
3162
3804
|
extensions: ["null"],
|
|
@@ -3169,7 +3811,7 @@
|
|
|
3169
3811
|
name: "Null loader",
|
|
3170
3812
|
id: "null",
|
|
3171
3813
|
module: "core",
|
|
3172
|
-
version:
|
|
3814
|
+
version: VERSION5,
|
|
3173
3815
|
mimeTypes: ["application/x.empty"],
|
|
3174
3816
|
extensions: ["null"],
|
|
3175
3817
|
parse: async (arrayBuffer) => arrayBuffer,
|
|
@@ -22,6 +22,8 @@ var _loaderUtils = require("@loaders.gl/loader-utils");
|
|
|
22
22
|
|
|
23
23
|
var _normalizeLoader = require("../loader-utils/normalize-loader");
|
|
24
24
|
|
|
25
|
+
var _log = require("../utils/log");
|
|
26
|
+
|
|
25
27
|
var _resourceUtils = require("../utils/resource-utils");
|
|
26
28
|
|
|
27
29
|
var _registerLoaders = require("./register-loaders");
|
|
@@ -154,15 +156,28 @@ function selectLoaderInternal(data, loaders, options, context) {
|
|
|
154
156
|
|
|
155
157
|
var testUrl = url || (context === null || context === void 0 ? void 0 : context.url);
|
|
156
158
|
var loader = null;
|
|
159
|
+
var reason = '';
|
|
157
160
|
|
|
158
161
|
if (options !== null && options !== void 0 && options.mimeType) {
|
|
159
162
|
loader = findLoaderByMIMEType(loaders, options === null || options === void 0 ? void 0 : options.mimeType);
|
|
163
|
+
reason = "match forced by supplied MIME type ".concat(options === null || options === void 0 ? void 0 : options.mimeType);
|
|
160
164
|
}
|
|
161
165
|
|
|
162
166
|
loader = loader || findLoaderByUrl(loaders, testUrl);
|
|
167
|
+
reason = reason || (loader ? "matched url ".concat(testUrl) : '');
|
|
163
168
|
loader = loader || findLoaderByMIMEType(loaders, type);
|
|
169
|
+
reason = reason || (loader ? "matched MIME type ".concat(type) : '');
|
|
164
170
|
loader = loader || findLoaderByInitialBytes(loaders, data);
|
|
171
|
+
reason = reason || (loader ? "matched initial data ".concat(getFirstCharacters(data)) : '');
|
|
165
172
|
loader = loader || findLoaderByMIMEType(loaders, options === null || options === void 0 ? void 0 : options.fallbackMimeType);
|
|
173
|
+
reason = reason || (loader ? "matched fallback MIME type ".concat(type) : '');
|
|
174
|
+
|
|
175
|
+
if (reason) {
|
|
176
|
+
var _loader;
|
|
177
|
+
|
|
178
|
+
_log.log.log(1, "selectLoader selected ".concat((_loader = loader) === null || _loader === void 0 ? void 0 : _loader.name, ": ").concat(reason, "."));
|
|
179
|
+
}
|
|
180
|
+
|
|
166
181
|
return loader;
|
|
167
182
|
}
|
|
168
183
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api/select-loader.ts"],"names":["EXT_PATTERN","selectLoader","data","loaders","options","context","validHTTPResponse","loader","selectLoaderSync","nothrow","slice","arrayBuffer","Error","getNoValidLoaderMessage","Array","isArray","candidateLoaders","concat","ignoreRegisteredLoaders","push","normalizeLoaders","selectLoaderInternal","url","type","testUrl","mimeType","findLoaderByMIMEType","findLoaderByUrl","findLoaderByInitialBytes","fallbackMimeType","Response","status","message","path","filename","firstCharacters","getFirstCharacters","match","exec","extension","findLoaderByExtension","toLowerCase","extensions","loaderExtension","mimeTypes","includes","id","testDataAgainstText","ArrayBuffer","isView","testDataAgainstBinary","buffer","byteOffset","testText","tests","some","test","startsWith","testBinary","byteLength","magic","getMagicString","length","dataView","DataView","i","String","fromCharCode","getUint8"],"mappings":";;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;AAEA,IAAMA,WAAW,GAAG,YAApB;;SAesBC,Y;;;;;4EAAf,iBACLC,IADK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAELC,YAAAA,OAFK,2DAEwB,EAFxB;AAGLC,YAAAA,OAHK;AAILC,YAAAA,OAJK;;AAAA,gBAMAC,iBAAiB,CAACJ,IAAD,CANjB;AAAA;AAAA;AAAA;;AAAA,6CAOI,IAPJ;;AAAA;AAWDK,YAAAA,MAXC,GAWQC,gBAAgB,CAACN,IAAD,EAAOC,OAAP,kCAAoBC,OAApB;AAA6BK,cAAAA,OAAO,EAAE;AAAtC,gBAA6CJ,OAA7C,CAXxB;;AAAA,iBAYDE,MAZC;AAAA;AAAA;AAAA;;AAAA,6CAaIA,MAbJ;;AAAA;AAAA,iBAkBD,oBAAOL,IAAP,CAlBC;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAmBWA,IAAD,CAAeQ,KAAf,CAAqB,CAArB,EAAwB,EAAxB,EAA4BC,WAA5B,EAnBV;;AAAA;AAmBHT,YAAAA,IAnBG;AAoBHK,YAAAA,MAAM,GAAGC,gBAAgB,CAACN,IAAD,EAAOC,OAAP,EAAgBC,OAAhB,EAAyBC,OAAzB,CAAzB;;AApBG;AAAA,kBAwBD,CAACE,MAAD,IAAW,EAACH,OAAD,aAACA,OAAD,eAACA,OAAO,CAAEK,OAAV,CAxBV;AAAA;AAAA;AAAA;;AAAA,kBAyBG,IAAIG,KAAJ,CAAUC,uBAAuB,CAACX,IAAD,CAAjC,CAzBH;;AAAA;AAAA,6CA4BEK,MA5BF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;;;;AAwCA,SAASC,gBAAT,CACLN,IADK,EAKU;AAAA,MAHfC,OAGe,uEAHc,EAGd;AAAA,MAFfC,OAEe;AAAA,MADfC,OACe;;AACf,MAAI,CAACC,iBAAiB,CAACJ,IAAD,CAAtB,EAA8B;AAC5B,WAAO,IAAP;AACD;;AAKD,MAAIC,OAAO,IAAI,CAACW,KAAK,CAACC,OAAN,CAAcZ,OAAd,CAAhB,EAAwC;AAEtC,WAAO,sCAAgBA,OAAhB,CAAP;AACD;;AAGD,MAAIa,gBAA0B,GAAG,EAAjC;;AAEA,MAAIb,OAAJ,EAAa;AACXa,IAAAA,gBAAgB,GAAGA,gBAAgB,CAACC,MAAjB,CAAwBd,OAAxB,CAAnB;AACD;;AAED,MAAI,EAACC,OAAD,aAACA,OAAD,eAACA,OAAO,CAAEc,uBAAV,CAAJ,EAAuC;AAAA;;AACrC,yBAAAF,gBAAgB,EAACG,IAAjB,2DAAyB,4CAAzB;AACD;;AAGDC,EAAAA,gBAAgB,CAACJ,gBAAD,CAAhB;AAEA,MAAMT,MAAM,GAAGc,oBAAoB,CAACnB,IAAD,EAAOc,gBAAP,EAAyBZ,OAAzB,EAAkCC,OAAlC,CAAnC;;AAGA,MAAI,CAACE,MAAD,IAAW,EAACH,OAAD,aAACA,OAAD,eAACA,OAAO,CAAEK,OAAV,CAAf,EAAkC;AAChC,UAAM,IAAIG,KAAJ,CAAUC,uBAAuB,CAACX,IAAD,CAAjC,CAAN;AACD;;AAED,SAAOK,MAAP;AACD;;AAGD,SAASc,oBAAT,CACEnB,IADF,EAEEC,OAFF,EAGEC,OAHF,EAIEC,OAJF,EAKE;AACA,8BAAoB,0CAAsBH,IAAtB,CAApB;AAAA,MAAOoB,GAAP,yBAAOA,GAAP;AAAA,MAAYC,IAAZ,yBAAYA,IAAZ;;AAEA,MAAMC,OAAO,GAAGF,GAAG,KAAIjB,OAAJ,aAAIA,OAAJ,uBAAIA,OAAO,CAAEiB,GAAb,CAAnB;AAEA,MAAIf,MAAqB,GAAG,IAA5B;;AAGA,MAAIH,OAAJ,aAAIA,OAAJ,eAAIA,OAAO,CAAEqB,QAAb,EAAuB;AACrBlB,IAAAA,MAAM,GAAGmB,oBAAoB,CAACvB,OAAD,EAAUC,OAAV,aAAUA,OAAV,uBAAUA,OAAO,CAAEqB,QAAnB,CAA7B;AACD;;AAEDlB,EAAAA,MAAM,GAAGA,MAAM,IAAIoB,eAAe,CAACxB,OAAD,EAAUqB,OAAV,CAAlC;AAEAjB,EAAAA,MAAM,GAAGA,MAAM,IAAImB,oBAAoB,CAACvB,OAAD,EAAUoB,IAAV,CAAvC;AAEAhB,EAAAA,MAAM,GAAGA,MAAM,IAAIqB,wBAAwB,CAACzB,OAAD,EAAUD,IAAV,CAA3C;AAEAK,EAAAA,MAAM,GAAGA,MAAM,IAAImB,oBAAoB,CAACvB,OAAD,EAAUC,OAAV,aAAUA,OAAV,uBAAUA,OAAO,CAAEyB,gBAAnB,CAAvC;AAEA,SAAOtB,MAAP;AACD;;AAGD,SAASD,iBAAT,CAA2BJ,IAA3B,EAA+C;AAE7C,MAAIA,IAAI,YAAY4B,QAApB,EAA8B;AAE5B,QAAI5B,IAAI,CAAC6B,MAAL,KAAgB,GAApB,EAAyB;AACvB,aAAO,KAAP;AACD;AACF;;AACD,SAAO,IAAP;AACD;;AAGD,SAASlB,uBAAT,CAAiCX,IAAjC,EAA+C;AAC7C,+BAAoB,0CAAsBA,IAAtB,CAApB;AAAA,MAAOoB,GAAP,0BAAOA,GAAP;AAAA,MAAYC,IAAZ,0BAAYA,IAAZ;;AAEA,MAAIS,OAAO,GAAG,yBAAd;AACAA,EAAAA,OAAO,IAAIV,GAAG,aAAMW,kBAAKC,QAAL,CAAcZ,GAAd,CAAN,UAA+B,mBAA7C;AACAU,EAAAA,OAAO,yBAAkBT,IAAI,eAAOA,IAAP,UAAiB,cAAvC,OAAP;AAEA,MAAMY,eAAuB,GAAGjC,IAAI,GAAGkC,kBAAkB,CAAClC,IAAD,CAArB,GAA8B,EAAlE;AACA8B,EAAAA,OAAO,IAAIG,eAAe,6BAAqBA,eAArB,UAA0C,4BAApE;AACAH,EAAAA,OAAO,IAAI,GAAX;AACA,SAAOA,OAAP;AACD;;AAED,SAASZ,gBAAT,CAA0BjB,OAA1B,EAAmD;AAAA,6CAC5BA,OAD4B;AAAA;;AAAA;AACjD,wDAA8B;AAAA,UAAnBI,MAAmB;AAC5B,4CAAgBA,MAAhB;AACD;AAHgD;AAAA;AAAA;AAAA;AAAA;AAIlD;;AAID,SAASoB,eAAT,CAAyBxB,OAAzB,EAA4CmB,GAA5C,EAAyE;AAEvE,MAAMe,KAAK,GAAGf,GAAG,IAAItB,WAAW,CAACsC,IAAZ,CAAiBhB,GAAjB,CAArB;AACA,MAAMiB,SAAS,GAAGF,KAAK,IAAIA,KAAK,CAAC,CAAD,CAAhC;AACA,SAAOE,SAAS,GAAGC,qBAAqB,CAACrC,OAAD,EAAUoC,SAAV,CAAxB,GAA+C,IAA/D;AACD;;AAED,SAASC,qBAAT,CAA+BrC,OAA/B,EAAkDoC,SAAlD,EAAoF;AAClFA,EAAAA,SAAS,GAAGA,SAAS,CAACE,WAAV,EAAZ;;AADkF,8CAG7DtC,OAH6D;AAAA;;AAAA;AAGlF,2DAA8B;AAAA,UAAnBI,MAAmB;;AAAA,kDACEA,MAAM,CAACmC,UADT;AAAA;;AAAA;AAC5B,+DAAiD;AAAA,cAAtCC,eAAsC;;AAC/C,cAAIA,eAAe,CAACF,WAAhB,OAAkCF,SAAtC,EAAiD;AAC/C,mBAAOhC,MAAP;AACD;AACF;AAL2B;AAAA;AAAA;AAAA;AAAA;AAM7B;AATiF;AAAA;AAAA;AAAA;AAAA;;AAUlF,SAAO,IAAP;AACD;;AAED,SAASmB,oBAAT,CAA8BvB,OAA9B,EAAuCsB,QAAvC,EAAiD;AAAA,8CAC1BtB,OAD0B;AAAA;;AAAA;AAC/C,2DAA8B;AAAA,UAAnBI,MAAmB;;AAC5B,UAAIA,MAAM,CAACqC,SAAP,IAAoBrC,MAAM,CAACqC,SAAP,CAAiBC,QAAjB,CAA0BpB,QAA1B,CAAxB,EAA6D;AAC3D,eAAOlB,MAAP;AACD;;AAID,UAAIkB,QAAQ,6BAAsBlB,MAAM,CAACuC,EAA7B,CAAZ,EAA+C;AAC7C,eAAOvC,MAAP;AACD;AACF;AAX8C;AAAA;AAAA;AAAA;AAAA;;AAY/C,SAAO,IAAP;AACD;;AAED,SAASqB,wBAAT,CAAkCzB,OAAlC,EAA2CD,IAA3C,EAAiD;AAC/C,MAAI,CAACA,IAAL,EAAW;AACT,WAAO,IAAP;AACD;;AAH8C,8CAK1BC,OAL0B;AAAA;;AAAA;AAK/C,2DAA8B;AAAA,UAAnBI,MAAmB;;AAC5B,UAAI,OAAOL,IAAP,KAAgB,QAApB,EAA8B;AAC5B,YAAI6C,mBAAmB,CAAC7C,IAAD,EAAOK,MAAP,CAAvB,EAAuC;AACrC,iBAAOA,MAAP;AACD;AACF,OAJD,MAIO,IAAIyC,WAAW,CAACC,MAAZ,CAAmB/C,IAAnB,CAAJ,EAA8B;AAEnC,YAAIgD,qBAAqB,CAAChD,IAAI,CAACiD,MAAN,EAAcjD,IAAI,CAACkD,UAAnB,EAA+B7C,MAA/B,CAAzB,EAAiE;AAC/D,iBAAOA,MAAP;AACD;AACF,OALM,MAKA,IAAIL,IAAI,YAAY8C,WAApB,EAAiC;AACtC,YAAMI,UAAU,GAAG,CAAnB;;AACA,YAAIF,qBAAqB,CAAChD,IAAD,EAAOkD,UAAP,EAAmB7C,MAAnB,CAAzB,EAAqD;AACnD,iBAAOA,MAAP;AACD;AACF;AAEF;AAtB8C;AAAA;AAAA;AAAA;AAAA;;AAuB/C,SAAO,IAAP;AACD;;AAED,SAASwC,mBAAT,CAA6B7C,IAA7B,EAAmCK,MAAnC,EAA2C;AACzC,MAAIA,MAAM,CAAC8C,QAAX,EAAqB;AACnB,WAAO9C,MAAM,CAAC8C,QAAP,CAAgBnD,IAAhB,CAAP;AACD;;AAED,MAAMoD,KAAK,GAAGxC,KAAK,CAACC,OAAN,CAAcR,MAAM,CAAC+C,KAArB,IAA8B/C,MAAM,CAAC+C,KAArC,GAA6C,CAAC/C,MAAM,CAAC+C,KAAR,CAA3D;AACA,SAAOA,KAAK,CAACC,IAAN,CAAW,UAACC,IAAD;AAAA,WAAUtD,IAAI,CAACuD,UAAL,CAAgBD,IAAhB,CAAV;AAAA,GAAX,CAAP;AACD;;AAED,SAASN,qBAAT,CAA+BhD,IAA/B,EAAqCkD,UAArC,EAAiD7C,MAAjD,EAAyD;AACvD,MAAM+C,KAAK,GAAGxC,KAAK,CAACC,OAAN,CAAcR,MAAM,CAAC+C,KAArB,IAA8B/C,MAAM,CAAC+C,KAArC,GAA6C,CAAC/C,MAAM,CAAC+C,KAAR,CAA3D;AACA,SAAOA,KAAK,CAACC,IAAN,CAAW,UAACC,IAAD;AAAA,WAAUE,UAAU,CAACxD,IAAD,EAAOkD,UAAP,EAAmB7C,MAAnB,EAA2BiD,IAA3B,CAApB;AAAA,GAAX,CAAP;AACD;;AAED,SAASE,UAAT,CAAoBxD,IAApB,EAA0BkD,UAA1B,EAAsC7C,MAAtC,EAA8CiD,IAA9C,EAAoD;AAClD,MAAIA,IAAI,YAAYR,WAApB,EAAiC;AAC/B,WAAO,sCAAoBQ,IAApB,EAA0BtD,IAA1B,EAAgCsD,IAAI,CAACG,UAArC,CAAP;AACD;;AACD,gCAAeH,IAAf;AACE,SAAK,UAAL;AACE,aAAOA,IAAI,CAACtD,IAAD,EAAOK,MAAP,CAAX;;AAEF,SAAK,QAAL;AAEE,UAAMqD,KAAK,GAAGC,cAAc,CAAC3D,IAAD,EAAOkD,UAAP,EAAmBI,IAAI,CAACM,MAAxB,CAA5B;AACA,aAAON,IAAI,KAAKI,KAAhB;;AAEF;AACE,aAAO,KAAP;AAVJ;AAYD;;AAED,SAASxB,kBAAT,CAA4BlC,IAA5B,EAAsD;AAAA,MAApB4D,MAAoB,uEAAH,CAAG;;AACpD,MAAI,OAAO5D,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAI,CAACQ,KAAL,CAAW,CAAX,EAAcoD,MAAd,CAAP;AACD,GAFD,MAEO,IAAId,WAAW,CAACC,MAAZ,CAAmB/C,IAAnB,CAAJ,EAA8B;AAEnC,WAAO2D,cAAc,CAAC3D,IAAI,CAACiD,MAAN,EAAcjD,IAAI,CAACkD,UAAnB,EAA+BU,MAA/B,CAArB;AACD,GAHM,MAGA,IAAI5D,IAAI,YAAY8C,WAApB,EAAiC;AACtC,QAAMI,UAAU,GAAG,CAAnB;AACA,WAAOS,cAAc,CAAC3D,IAAD,EAAOkD,UAAP,EAAmBU,MAAnB,CAArB;AACD;;AACD,SAAO,EAAP;AACD;;AAED,SAASD,cAAT,CAAwBlD,WAAxB,EAAqCyC,UAArC,EAAiDU,MAAjD,EAAyD;AACvD,MAAInD,WAAW,CAACgD,UAAZ,GAAyBP,UAAU,GAAGU,MAA1C,EAAkD;AAChD,WAAO,EAAP;AACD;;AACD,MAAMC,QAAQ,GAAG,IAAIC,QAAJ,CAAarD,WAAb,CAAjB;AACA,MAAIiD,KAAK,GAAG,EAAZ;;AACA,OAAK,IAAIK,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,MAApB,EAA4BG,CAAC,EAA7B,EAAiC;AAC/BL,IAAAA,KAAK,IAAIM,MAAM,CAACC,YAAP,CAAoBJ,QAAQ,CAACK,QAAT,CAAkBhB,UAAU,GAAGa,CAA/B,CAApB,CAAT;AACD;;AACD,SAAOL,KAAP;AACD","sourcesContent":["import type {LoaderContext, LoaderOptions, Loader} from '@loaders.gl/loader-utils';\nimport {compareArrayBuffers, path} from '@loaders.gl/loader-utils';\nimport {normalizeLoader} from '../loader-utils/normalize-loader';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {getRegisteredLoaders} from './register-loaders';\nimport {isBlob} from '../../javascript-utils/is-type';\n\nconst EXT_PATTERN = /\\.([^.]+)$/;\n\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise<Loader | null> {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // First make a sync attempt, disabling exceptions\n let loader = selectLoaderSync(data, loaders, {...options, nothrow: true}, context);\n if (loader) {\n return loader;\n }\n\n // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n // to see if we can detect by initial content\n if (isBlob(data)) {\n data = await (data as Blob).slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Loader | null {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // eslint-disable-next-line complexity\n // if only a single loader was provided (not as array), force its use\n // TODO - Should this behavior be kept and documented?\n if (loaders && !Array.isArray(loaders)) {\n // TODO - remove support for legacy loaders\n return normalizeLoader(loaders);\n }\n\n // Build list of candidate loaders that will be searched in order for a match\n let candidateLoaders: Loader[] = [];\n // First search supplied loaders\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n // Then fall back to registered loaders\n if (!options?.ignoreRegisteredLoaders) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n\n // TODO - remove support for legacy loaders\n normalizeLoaders(candidateLoaders);\n\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/** Implements loaders selection logic */\nfunction selectLoaderInternal(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[],\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n const {url, type} = getResourceUrlAndType(data);\n\n const testUrl = url || context?.url;\n\n let loader: Loader | null = null;\n\n // if options.mimeType is supplied, it takes precedence\n if (options?.mimeType) {\n loader = findLoaderByMIMEType(loaders, options?.mimeType);\n }\n // Look up loader by url\n loader = loader || findLoaderByUrl(loaders, testUrl);\n // Look up loader by mime type\n loader = loader || findLoaderByMIMEType(loaders, type);\n // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n loader = loader || findLoaderByInitialBytes(loaders, data);\n // Look up loader by fallback mime type\n loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);\n\n return loader;\n}\n\n/** Check HTTP Response */\nfunction validHTTPResponse(data: any): boolean {\n // HANDLE HTTP status\n if (data instanceof Response) {\n // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n if (data.status === 204) {\n return false;\n }\n }\n return true;\n}\n\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data): string {\n const {url, type} = getResourceUrlAndType(data);\n\n let message = 'No valid loader found (';\n message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n // First characters are only accessible when called on data (string or arrayBuffer).\n const firstCharacters: string = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n message += ')';\n return message;\n}\n\nfunction normalizeLoaders(loaders: Loader[]): void {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders: Loader[], url?: string): Loader | null {\n // Get extension\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\n\nfunction findLoaderByExtension(loaders: Loader[], extension: string): Loader | null {\n extension = extension.toLowerCase();\n\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n return null;\n}\n\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes && loader.mimeTypes.includes(mimeType)) {\n return loader;\n }\n\n // Support referring to loaders using the \"unregistered tree\"\n // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n if (mimeType === `application/x.${loader.id}`) {\n return loader;\n }\n }\n return null;\n}\n\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n // TODO Handle streaming case (requires creating a new AsyncIterator)\n }\n return null;\n}\n\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => data.startsWith(test));\n}\n\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\n\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n switch (typeof test) {\n case 'function':\n return test(data, loader);\n\n case 'string':\n // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n\n default:\n return false;\n }\n}\n\nfunction getFirstCharacters(data, length: number = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\n\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n"],"file":"select-loader.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api/select-loader.ts"],"names":["EXT_PATTERN","selectLoader","data","loaders","options","context","validHTTPResponse","loader","selectLoaderSync","nothrow","slice","arrayBuffer","Error","getNoValidLoaderMessage","Array","isArray","candidateLoaders","concat","ignoreRegisteredLoaders","push","normalizeLoaders","selectLoaderInternal","url","type","testUrl","reason","mimeType","findLoaderByMIMEType","findLoaderByUrl","findLoaderByInitialBytes","getFirstCharacters","fallbackMimeType","log","name","Response","status","message","path","filename","firstCharacters","match","exec","extension","findLoaderByExtension","toLowerCase","extensions","loaderExtension","mimeTypes","includes","id","testDataAgainstText","ArrayBuffer","isView","testDataAgainstBinary","buffer","byteOffset","testText","tests","some","test","startsWith","testBinary","byteLength","magic","getMagicString","length","dataView","DataView","i","String","fromCharCode","getUint8"],"mappings":"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","sourcesContent":["import type {LoaderContext, LoaderOptions, Loader} from '@loaders.gl/loader-utils';\nimport {compareArrayBuffers, path} from '@loaders.gl/loader-utils';\nimport {normalizeLoader} from '../loader-utils/normalize-loader';\nimport {log} from '../utils/log';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {getRegisteredLoaders} from './register-loaders';\nimport {isBlob} from '../../javascript-utils/is-type';\n\nconst EXT_PATTERN = /\\.([^.]+)$/;\n\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise<Loader | null> {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // First make a sync attempt, disabling exceptions\n let loader = selectLoaderSync(data, loaders, {...options, nothrow: true}, context);\n if (loader) {\n return loader;\n }\n\n // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n // to see if we can detect by initial content\n if (isBlob(data)) {\n data = await (data as Blob).slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Loader | null {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // eslint-disable-next-line complexity\n // if only a single loader was provided (not as array), force its use\n // TODO - Should this behavior be kept and documented?\n if (loaders && !Array.isArray(loaders)) {\n // TODO - remove support for legacy loaders\n return normalizeLoader(loaders);\n }\n\n // Build list of candidate loaders that will be searched in order for a match\n let candidateLoaders: Loader[] = [];\n // First search supplied loaders\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n // Then fall back to registered loaders\n if (!options?.ignoreRegisteredLoaders) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n\n // TODO - remove support for legacy loaders\n normalizeLoaders(candidateLoaders);\n\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/** Implements loaders selection logic */\nfunction selectLoaderInternal(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[],\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n const {url, type} = getResourceUrlAndType(data);\n\n const testUrl = url || context?.url;\n\n let loader: Loader | null = null;\n let reason: string = '';\n\n // if options.mimeType is supplied, it takes precedence\n if (options?.mimeType) {\n loader = findLoaderByMIMEType(loaders, options?.mimeType);\n reason = `match forced by supplied MIME type ${options?.mimeType}`;\n }\n\n // Look up loader by url\n loader = loader || findLoaderByUrl(loaders, testUrl);\n reason = reason || (loader ? `matched url ${testUrl}` : '');\n\n // Look up loader by mime type\n loader = loader || findLoaderByMIMEType(loaders, type);\n reason = reason || (loader ? `matched MIME type ${type}` : '');\n\n // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n loader = loader || findLoaderByInitialBytes(loaders, data);\n reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');\n\n // Look up loader by fallback mime type\n loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);\n reason = reason || (loader ? `matched fallback MIME type ${type}` : '');\n\n if (reason) {\n log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);\n }\n\n return loader;\n}\n\n/** Check HTTP Response */\nfunction validHTTPResponse(data: any): boolean {\n // HANDLE HTTP status\n if (data instanceof Response) {\n // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n if (data.status === 204) {\n return false;\n }\n }\n return true;\n}\n\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data): string {\n const {url, type} = getResourceUrlAndType(data);\n\n let message = 'No valid loader found (';\n message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n // First characters are only accessible when called on data (string or arrayBuffer).\n const firstCharacters: string = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n message += ')';\n return message;\n}\n\nfunction normalizeLoaders(loaders: Loader[]): void {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders: Loader[], url?: string): Loader | null {\n // Get extension\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\n\nfunction findLoaderByExtension(loaders: Loader[], extension: string): Loader | null {\n extension = extension.toLowerCase();\n\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n return null;\n}\n\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes && loader.mimeTypes.includes(mimeType)) {\n return loader;\n }\n\n // Support referring to loaders using the \"unregistered tree\"\n // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n if (mimeType === `application/x.${loader.id}`) {\n return loader;\n }\n }\n return null;\n}\n\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n // TODO Handle streaming case (requires creating a new AsyncIterator)\n }\n return null;\n}\n\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => data.startsWith(test));\n}\n\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\n\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n switch (typeof test) {\n case 'function':\n return test(data, loader);\n\n case 'string':\n // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n\n default:\n return false;\n }\n}\n\nfunction getFirstCharacters(data, length: number = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\n\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n"],"file":"select-loader.js"}
|
package/dist/es5/lib/init.js
CHANGED
|
@@ -4,10 +4,20 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
|
|
8
|
+
var _log = require("./utils/log");
|
|
9
|
+
|
|
10
|
+
var version = typeof "3.1.8" !== 'undefined' ? "3.1.8" : '';
|
|
11
|
+
|
|
12
|
+
if (!globalThis.loaders) {
|
|
13
|
+
_log.log.log(1, "loaders.gl ".concat(version))();
|
|
14
|
+
|
|
15
|
+
globalThis.loaders = Object.assign(globalThis.loaders || {}, {
|
|
16
|
+
VERSION: version,
|
|
17
|
+
log: _log.log
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
11
21
|
var _default = globalThis.loaders;
|
|
12
22
|
exports.default = _default;
|
|
13
23
|
//# sourceMappingURL=init.js.map
|
package/dist/es5/lib/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/init.ts"],"names":["version","globalThis","loaders","Object","assign","VERSION"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/init.ts"],"names":["version","globalThis","loaders","log","Object","assign","VERSION"],"mappings":";;;;;;;AACA;;AAGA,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,EAAnE;;AAGA,IAAI,CAACC,UAAU,CAACC,OAAhB,EAAyB;AACvBC,WAAIA,GAAJ,CAAQ,CAAR,uBAAyBH,OAAzB;;AAEAC,EAAAA,UAAU,CAACC,OAAX,GAAqBE,MAAM,CAACC,MAAP,CAAcJ,UAAU,CAACC,OAAX,IAAsB,EAApC,EAAwC;AAC3DI,IAAAA,OAAO,EAAEN,OADkD;AAE3DG,IAAAA,GAAG,EAAHA;AAF2D,GAAxC,CAArB;AAID;;eAEcF,UAAU,CAACC,O","sourcesContent":["// loaders.gl, MIT license\nimport {log} from './utils/log';\n\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst version = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '';\n\n// @ts-ignore\nif (!globalThis.loaders) {\n log.log(1, `loaders.gl ${version}`)();\n\n globalThis.loaders = Object.assign(globalThis.loaders || {}, {\n VERSION: version,\n log\n });\n}\n// @ts-ignore\nexport default globalThis.loaders;\n"],"file":"init.js"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.log = void 0;
|
|
7
|
+
|
|
8
|
+
var _log = require("@probe.gl/log");
|
|
9
|
+
|
|
10
|
+
var log = new _log.Log({
|
|
11
|
+
id: 'loaders.gl'
|
|
12
|
+
});
|
|
13
|
+
exports.log = log;
|
|
14
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/utils/log.ts"],"names":["log","Log","id"],"mappings":";;;;;;;AACA;;AAEO,IAAMA,GAAG,GAAG,IAAIC,QAAJ,CAAQ;AAACC,EAAAA,EAAE,EAAE;AAAL,CAAR,CAAZ","sourcesContent":["// loaders.gl, MIT license\nimport {Log} from '@probe.gl/log';\n\nexport const log = new Log({id: 'loaders.gl'});\n"],"file":"log.js"}
|
package/dist/es5/null-loader.js
CHANGED
|
@@ -17,7 +17,7 @@ var _wrapAsyncGenerator2 = _interopRequireDefault(require("@babel/runtime/helper
|
|
|
17
17
|
|
|
18
18
|
var _asyncIterator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncIterator"));
|
|
19
19
|
|
|
20
|
-
var VERSION = typeof "3.1.
|
|
20
|
+
var VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
|
|
21
21
|
var NullWorkerLoader = {
|
|
22
22
|
name: 'Null loader',
|
|
23
23
|
id: 'null',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { compareArrayBuffers, path } from '@loaders.gl/loader-utils';
|
|
2
2
|
import { normalizeLoader } from '../loader-utils/normalize-loader';
|
|
3
|
+
import { log } from '../utils/log';
|
|
3
4
|
import { getResourceUrlAndType } from '../utils/resource-utils';
|
|
4
5
|
import { getRegisteredLoaders } from './register-loaders';
|
|
5
6
|
import { isBlob } from '../../javascript-utils/is-type';
|
|
@@ -64,15 +65,28 @@ function selectLoaderInternal(data, loaders, options, context) {
|
|
|
64
65
|
} = getResourceUrlAndType(data);
|
|
65
66
|
const testUrl = url || (context === null || context === void 0 ? void 0 : context.url);
|
|
66
67
|
let loader = null;
|
|
68
|
+
let reason = '';
|
|
67
69
|
|
|
68
70
|
if (options !== null && options !== void 0 && options.mimeType) {
|
|
69
71
|
loader = findLoaderByMIMEType(loaders, options === null || options === void 0 ? void 0 : options.mimeType);
|
|
72
|
+
reason = "match forced by supplied MIME type ".concat(options === null || options === void 0 ? void 0 : options.mimeType);
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
loader = loader || findLoaderByUrl(loaders, testUrl);
|
|
76
|
+
reason = reason || (loader ? "matched url ".concat(testUrl) : '');
|
|
73
77
|
loader = loader || findLoaderByMIMEType(loaders, type);
|
|
78
|
+
reason = reason || (loader ? "matched MIME type ".concat(type) : '');
|
|
74
79
|
loader = loader || findLoaderByInitialBytes(loaders, data);
|
|
80
|
+
reason = reason || (loader ? "matched initial data ".concat(getFirstCharacters(data)) : '');
|
|
75
81
|
loader = loader || findLoaderByMIMEType(loaders, options === null || options === void 0 ? void 0 : options.fallbackMimeType);
|
|
82
|
+
reason = reason || (loader ? "matched fallback MIME type ".concat(type) : '');
|
|
83
|
+
|
|
84
|
+
if (reason) {
|
|
85
|
+
var _loader;
|
|
86
|
+
|
|
87
|
+
log.log(1, "selectLoader selected ".concat((_loader = loader) === null || _loader === void 0 ? void 0 : _loader.name, ": ").concat(reason, "."));
|
|
88
|
+
}
|
|
89
|
+
|
|
76
90
|
return loader;
|
|
77
91
|
}
|
|
78
92
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/api/select-loader.ts"],"names":["compareArrayBuffers","path","normalizeLoader","getResourceUrlAndType","getRegisteredLoaders","isBlob","EXT_PATTERN","selectLoader","data","loaders","options","context","validHTTPResponse","loader","selectLoaderSync","nothrow","slice","arrayBuffer","Error","getNoValidLoaderMessage","Array","isArray","candidateLoaders","concat","ignoreRegisteredLoaders","push","normalizeLoaders","selectLoaderInternal","url","type","testUrl","mimeType","findLoaderByMIMEType","findLoaderByUrl","findLoaderByInitialBytes","fallbackMimeType","Response","status","message","filename","firstCharacters","getFirstCharacters","match","exec","extension","findLoaderByExtension","toLowerCase","loaderExtension","extensions","mimeTypes","includes","id","testDataAgainstText","ArrayBuffer","isView","testDataAgainstBinary","buffer","byteOffset","testText","tests","some","test","startsWith","testBinary","byteLength","magic","getMagicString","length","dataView","DataView","i","String","fromCharCode","getUint8"],"mappings":"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","sourcesContent":["import type {LoaderContext, LoaderOptions, Loader} from '@loaders.gl/loader-utils';\nimport {compareArrayBuffers, path} from '@loaders.gl/loader-utils';\nimport {normalizeLoader} from '../loader-utils/normalize-loader';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {getRegisteredLoaders} from './register-loaders';\nimport {isBlob} from '../../javascript-utils/is-type';\n\nconst EXT_PATTERN = /\\.([^.]+)$/;\n\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise<Loader | null> {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // First make a sync attempt, disabling exceptions\n let loader = selectLoaderSync(data, loaders, {...options, nothrow: true}, context);\n if (loader) {\n return loader;\n }\n\n // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n // to see if we can detect by initial content\n if (isBlob(data)) {\n data = await (data as Blob).slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Loader | null {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // eslint-disable-next-line complexity\n // if only a single loader was provided (not as array), force its use\n // TODO - Should this behavior be kept and documented?\n if (loaders && !Array.isArray(loaders)) {\n // TODO - remove support for legacy loaders\n return normalizeLoader(loaders);\n }\n\n // Build list of candidate loaders that will be searched in order for a match\n let candidateLoaders: Loader[] = [];\n // First search supplied loaders\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n // Then fall back to registered loaders\n if (!options?.ignoreRegisteredLoaders) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n\n // TODO - remove support for legacy loaders\n normalizeLoaders(candidateLoaders);\n\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/** Implements loaders selection logic */\nfunction selectLoaderInternal(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[],\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n const {url, type} = getResourceUrlAndType(data);\n\n const testUrl = url || context?.url;\n\n let loader: Loader | null = null;\n\n // if options.mimeType is supplied, it takes precedence\n if (options?.mimeType) {\n loader = findLoaderByMIMEType(loaders, options?.mimeType);\n }\n // Look up loader by url\n loader = loader || findLoaderByUrl(loaders, testUrl);\n // Look up loader by mime type\n loader = loader || findLoaderByMIMEType(loaders, type);\n // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n loader = loader || findLoaderByInitialBytes(loaders, data);\n // Look up loader by fallback mime type\n loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);\n\n return loader;\n}\n\n/** Check HTTP Response */\nfunction validHTTPResponse(data: any): boolean {\n // HANDLE HTTP status\n if (data instanceof Response) {\n // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n if (data.status === 204) {\n return false;\n }\n }\n return true;\n}\n\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data): string {\n const {url, type} = getResourceUrlAndType(data);\n\n let message = 'No valid loader found (';\n message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n // First characters are only accessible when called on data (string or arrayBuffer).\n const firstCharacters: string = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n message += ')';\n return message;\n}\n\nfunction normalizeLoaders(loaders: Loader[]): void {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders: Loader[], url?: string): Loader | null {\n // Get extension\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\n\nfunction findLoaderByExtension(loaders: Loader[], extension: string): Loader | null {\n extension = extension.toLowerCase();\n\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n return null;\n}\n\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes && loader.mimeTypes.includes(mimeType)) {\n return loader;\n }\n\n // Support referring to loaders using the \"unregistered tree\"\n // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n if (mimeType === `application/x.${loader.id}`) {\n return loader;\n }\n }\n return null;\n}\n\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n // TODO Handle streaming case (requires creating a new AsyncIterator)\n }\n return null;\n}\n\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => data.startsWith(test));\n}\n\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\n\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n switch (typeof test) {\n case 'function':\n return test(data, loader);\n\n case 'string':\n // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n\n default:\n return false;\n }\n}\n\nfunction getFirstCharacters(data, length: number = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\n\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n"],"file":"select-loader.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/api/select-loader.ts"],"names":["compareArrayBuffers","path","normalizeLoader","log","getResourceUrlAndType","getRegisteredLoaders","isBlob","EXT_PATTERN","selectLoader","data","loaders","options","context","validHTTPResponse","loader","selectLoaderSync","nothrow","slice","arrayBuffer","Error","getNoValidLoaderMessage","Array","isArray","candidateLoaders","concat","ignoreRegisteredLoaders","push","normalizeLoaders","selectLoaderInternal","url","type","testUrl","reason","mimeType","findLoaderByMIMEType","findLoaderByUrl","findLoaderByInitialBytes","getFirstCharacters","fallbackMimeType","name","Response","status","message","filename","firstCharacters","match","exec","extension","findLoaderByExtension","toLowerCase","loaderExtension","extensions","mimeTypes","includes","id","testDataAgainstText","ArrayBuffer","isView","testDataAgainstBinary","buffer","byteOffset","testText","tests","some","test","startsWith","testBinary","byteLength","magic","getMagicString","length","dataView","DataView","i","String","fromCharCode","getUint8"],"mappings":"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","sourcesContent":["import type {LoaderContext, LoaderOptions, Loader} from '@loaders.gl/loader-utils';\nimport {compareArrayBuffers, path} from '@loaders.gl/loader-utils';\nimport {normalizeLoader} from '../loader-utils/normalize-loader';\nimport {log} from '../utils/log';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {getRegisteredLoaders} from './register-loaders';\nimport {isBlob} from '../../javascript-utils/is-type';\n\nconst EXT_PATTERN = /\\.([^.]+)$/;\n\n// TODO - Need a variant that peeks at streams for parseInBatches\n// TODO - Detect multiple matching loaders? Use heuristics to grade matches?\n// TODO - Allow apps to pass context to disambiguate between multiple matches (e.g. multiple .json formats)?\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport async function selectLoader(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise<Loader | null> {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // First make a sync attempt, disabling exceptions\n let loader = selectLoaderSync(data, loaders, {...options, nothrow: true}, context);\n if (loader) {\n return loader;\n }\n\n // For Blobs and Files, try to asynchronously read a small initial slice and test again with that\n // to see if we can detect by initial content\n if (isBlob(data)) {\n data = await (data as Blob).slice(0, 10).arrayBuffer();\n loader = selectLoaderSync(data, loaders, options, context);\n }\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/**\n * Find a loader that matches file extension and/or initial file content\n * Search the loaders array argument for a loader that matches url extension or initial data\n * Returns: a normalized loader\n * @param data data to assist\n * @param loaders\n * @param options\n * @param context used internally, applications should not provide this parameter\n */\nexport function selectLoaderSync(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[] | Loader = [],\n options?: LoaderOptions,\n context?: LoaderContext\n): Loader | null {\n if (!validHTTPResponse(data)) {\n return null;\n }\n\n // eslint-disable-next-line complexity\n // if only a single loader was provided (not as array), force its use\n // TODO - Should this behavior be kept and documented?\n if (loaders && !Array.isArray(loaders)) {\n // TODO - remove support for legacy loaders\n return normalizeLoader(loaders);\n }\n\n // Build list of candidate loaders that will be searched in order for a match\n let candidateLoaders: Loader[] = [];\n // First search supplied loaders\n if (loaders) {\n candidateLoaders = candidateLoaders.concat(loaders);\n }\n // Then fall back to registered loaders\n if (!options?.ignoreRegisteredLoaders) {\n candidateLoaders.push(...getRegisteredLoaders());\n }\n\n // TODO - remove support for legacy loaders\n normalizeLoaders(candidateLoaders);\n\n const loader = selectLoaderInternal(data, candidateLoaders, options, context);\n\n // no loader available\n if (!loader && !options?.nothrow) {\n throw new Error(getNoValidLoaderMessage(data));\n }\n\n return loader;\n}\n\n/** Implements loaders selection logic */\nfunction selectLoaderInternal(\n data: Response | Blob | ArrayBuffer | string,\n loaders: Loader[],\n options?: LoaderOptions,\n context?: LoaderContext\n) {\n const {url, type} = getResourceUrlAndType(data);\n\n const testUrl = url || context?.url;\n\n let loader: Loader | null = null;\n let reason: string = '';\n\n // if options.mimeType is supplied, it takes precedence\n if (options?.mimeType) {\n loader = findLoaderByMIMEType(loaders, options?.mimeType);\n reason = `match forced by supplied MIME type ${options?.mimeType}`;\n }\n\n // Look up loader by url\n loader = loader || findLoaderByUrl(loaders, testUrl);\n reason = reason || (loader ? `matched url ${testUrl}` : '');\n\n // Look up loader by mime type\n loader = loader || findLoaderByMIMEType(loaders, type);\n reason = reason || (loader ? `matched MIME type ${type}` : '');\n\n // Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)\n loader = loader || findLoaderByInitialBytes(loaders, data);\n reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');\n\n // Look up loader by fallback mime type\n loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);\n reason = reason || (loader ? `matched fallback MIME type ${type}` : '');\n\n if (reason) {\n log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);\n }\n\n return loader;\n}\n\n/** Check HTTP Response */\nfunction validHTTPResponse(data: any): boolean {\n // HANDLE HTTP status\n if (data instanceof Response) {\n // 204 - NO CONTENT. This handles cases where e.g. a tile server responds with 204 for a missing tile\n if (data.status === 204) {\n return false;\n }\n }\n return true;\n}\n\n/** Generate a helpful message to help explain why loader selection failed. */\nfunction getNoValidLoaderMessage(data): string {\n const {url, type} = getResourceUrlAndType(data);\n\n let message = 'No valid loader found (';\n message += url ? `${path.filename(url)}, ` : 'no url provided, ';\n message += `MIME type: ${type ? `\"${type}\"` : 'not provided'}, `;\n // First characters are only accessible when called on data (string or arrayBuffer).\n const firstCharacters: string = data ? getFirstCharacters(data) : '';\n message += firstCharacters ? ` first bytes: \"${firstCharacters}\"` : 'first bytes: not available';\n message += ')';\n return message;\n}\n\nfunction normalizeLoaders(loaders: Loader[]): void {\n for (const loader of loaders) {\n normalizeLoader(loader);\n }\n}\n\n// TODO - Would be nice to support http://example.com/file.glb?parameter=1\n// E.g: x = new URL('http://example.com/file.glb?load=1'; x.pathname\nfunction findLoaderByUrl(loaders: Loader[], url?: string): Loader | null {\n // Get extension\n const match = url && EXT_PATTERN.exec(url);\n const extension = match && match[1];\n return extension ? findLoaderByExtension(loaders, extension) : null;\n}\n\nfunction findLoaderByExtension(loaders: Loader[], extension: string): Loader | null {\n extension = extension.toLowerCase();\n\n for (const loader of loaders) {\n for (const loaderExtension of loader.extensions) {\n if (loaderExtension.toLowerCase() === extension) {\n return loader;\n }\n }\n }\n return null;\n}\n\nfunction findLoaderByMIMEType(loaders, mimeType) {\n for (const loader of loaders) {\n if (loader.mimeTypes && loader.mimeTypes.includes(mimeType)) {\n return loader;\n }\n\n // Support referring to loaders using the \"unregistered tree\"\n // https://en.wikipedia.org/wiki/Media_type#Unregistered_tree\n if (mimeType === `application/x.${loader.id}`) {\n return loader;\n }\n }\n return null;\n}\n\nfunction findLoaderByInitialBytes(loaders, data) {\n if (!data) {\n return null;\n }\n\n for (const loader of loaders) {\n if (typeof data === 'string') {\n if (testDataAgainstText(data, loader)) {\n return loader;\n }\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n if (testDataAgainstBinary(data.buffer, data.byteOffset, loader)) {\n return loader;\n }\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n if (testDataAgainstBinary(data, byteOffset, loader)) {\n return loader;\n }\n }\n // TODO Handle streaming case (requires creating a new AsyncIterator)\n }\n return null;\n}\n\nfunction testDataAgainstText(data, loader) {\n if (loader.testText) {\n return loader.testText(data);\n }\n\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => data.startsWith(test));\n}\n\nfunction testDataAgainstBinary(data, byteOffset, loader) {\n const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];\n return tests.some((test) => testBinary(data, byteOffset, loader, test));\n}\n\nfunction testBinary(data, byteOffset, loader, test) {\n if (test instanceof ArrayBuffer) {\n return compareArrayBuffers(test, data, test.byteLength);\n }\n switch (typeof test) {\n case 'function':\n return test(data, loader);\n\n case 'string':\n // Magic bytes check: If `test` is a string, check if binary data starts with that strings\n const magic = getMagicString(data, byteOffset, test.length);\n return test === magic;\n\n default:\n return false;\n }\n}\n\nfunction getFirstCharacters(data, length: number = 5) {\n if (typeof data === 'string') {\n return data.slice(0, length);\n } else if (ArrayBuffer.isView(data)) {\n // Typed Arrays can have offsets into underlying buffer\n return getMagicString(data.buffer, data.byteOffset, length);\n } else if (data instanceof ArrayBuffer) {\n const byteOffset = 0;\n return getMagicString(data, byteOffset, length);\n }\n return '';\n}\n\nfunction getMagicString(arrayBuffer, byteOffset, length) {\n if (arrayBuffer.byteLength < byteOffset + length) {\n return '';\n }\n const dataView = new DataView(arrayBuffer);\n let magic = '';\n for (let i = 0; i < length; i++) {\n magic += String.fromCharCode(dataView.getUint8(byteOffset + i));\n }\n return magic;\n}\n"],"file":"select-loader.js"}
|
package/dist/esm/lib/init.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { log } from './utils/log';
|
|
2
|
+
const version = typeof "3.1.8" !== 'undefined' ? "3.1.8" : '';
|
|
3
|
+
|
|
4
|
+
if (!globalThis.loaders) {
|
|
5
|
+
log.log(1, "loaders.gl ".concat(version))();
|
|
6
|
+
globalThis.loaders = Object.assign(globalThis.loaders || {}, {
|
|
7
|
+
VERSION: version,
|
|
8
|
+
log
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
|
|
5
12
|
export default globalThis.loaders;
|
|
6
13
|
//# sourceMappingURL=init.js.map
|
package/dist/esm/lib/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/init.ts"],"names":["version","globalThis","loaders","Object","assign","VERSION"],"mappings":"AACA,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/init.ts"],"names":["log","version","globalThis","loaders","Object","assign","VERSION"],"mappings":"AACA,SAAQA,GAAR,QAAkB,aAAlB;AAGA,MAAMC,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,EAAnE;;AAGA,IAAI,CAACC,UAAU,CAACC,OAAhB,EAAyB;AACvBH,EAAAA,GAAG,CAACA,GAAJ,CAAQ,CAAR,uBAAyBC,OAAzB;AAEAC,EAAAA,UAAU,CAACC,OAAX,GAAqBC,MAAM,CAACC,MAAP,CAAcH,UAAU,CAACC,OAAX,IAAsB,EAApC,EAAwC;AAC3DG,IAAAA,OAAO,EAAEL,OADkD;AAE3DD,IAAAA;AAF2D,GAAxC,CAArB;AAID;;AAED,eAAeE,UAAU,CAACC,OAA1B","sourcesContent":["// loaders.gl, MIT license\nimport {log} from './utils/log';\n\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst version = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '';\n\n// @ts-ignore\nif (!globalThis.loaders) {\n log.log(1, `loaders.gl ${version}`)();\n\n globalThis.loaders = Object.assign(globalThis.loaders || {}, {\n VERSION: version,\n log\n });\n}\n// @ts-ignore\nexport default globalThis.loaders;\n"],"file":"init.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/utils/log.ts"],"names":["Log","log","id"],"mappings":"AACA,SAAQA,GAAR,QAAkB,eAAlB;AAEA,OAAO,MAAMC,GAAG,GAAG,IAAID,GAAJ,CAAQ;AAACE,EAAAA,EAAE,EAAE;AAAL,CAAR,CAAZ","sourcesContent":["// loaders.gl, MIT license\nimport {Log} from '@probe.gl/log';\n\nexport const log = new Log({id: 'loaders.gl'});\n"],"file":"log.js"}
|
package/dist/esm/null-loader.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/api/select-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"select-loader.d.ts","sourceRoot":"","sources":["../../../src/lib/api/select-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAC,MAAM,0BAA0B,CAAC;AAcnF;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,MAAM,EAC5C,OAAO,GAAE,MAAM,EAAE,GAAG,MAAW,EAC/B,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,WAAW,GAAG,MAAM,EAC5C,OAAO,GAAE,MAAM,EAAE,GAAG,MAAW,EAC/B,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,GAAG,IAAI,CAmCf"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.selectLoaderSync = exports.selectLoader = void 0;
|
|
4
4
|
const loader_utils_1 = require("@loaders.gl/loader-utils");
|
|
5
5
|
const normalize_loader_1 = require("../loader-utils/normalize-loader");
|
|
6
|
+
const log_1 = require("../utils/log");
|
|
6
7
|
const resource_utils_1 = require("../utils/resource-utils");
|
|
7
8
|
const register_loaders_1 = require("./register-loaders");
|
|
8
9
|
const is_type_1 = require("../../javascript-utils/is-type");
|
|
@@ -86,18 +87,27 @@ function selectLoaderInternal(data, loaders, options, context) {
|
|
|
86
87
|
const { url, type } = (0, resource_utils_1.getResourceUrlAndType)(data);
|
|
87
88
|
const testUrl = url || context?.url;
|
|
88
89
|
let loader = null;
|
|
90
|
+
let reason = '';
|
|
89
91
|
// if options.mimeType is supplied, it takes precedence
|
|
90
92
|
if (options?.mimeType) {
|
|
91
93
|
loader = findLoaderByMIMEType(loaders, options?.mimeType);
|
|
94
|
+
reason = `match forced by supplied MIME type ${options?.mimeType}`;
|
|
92
95
|
}
|
|
93
96
|
// Look up loader by url
|
|
94
97
|
loader = loader || findLoaderByUrl(loaders, testUrl);
|
|
98
|
+
reason = reason || (loader ? `matched url ${testUrl}` : '');
|
|
95
99
|
// Look up loader by mime type
|
|
96
100
|
loader = loader || findLoaderByMIMEType(loaders, type);
|
|
101
|
+
reason = reason || (loader ? `matched MIME type ${type}` : '');
|
|
97
102
|
// Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)
|
|
98
103
|
loader = loader || findLoaderByInitialBytes(loaders, data);
|
|
104
|
+
reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');
|
|
99
105
|
// Look up loader by fallback mime type
|
|
100
106
|
loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);
|
|
107
|
+
reason = reason || (loader ? `matched fallback MIME type ${type}` : '');
|
|
108
|
+
if (reason) {
|
|
109
|
+
log_1.log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);
|
|
110
|
+
}
|
|
101
111
|
return loader;
|
|
102
112
|
}
|
|
103
113
|
/** Check HTTP Response */
|
package/dist/lib/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":";AAgBA,wBAAkC"}
|
package/dist/lib/init.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// loaders.gl, MIT license
|
|
4
|
+
const log_1 = require("./utils/log");
|
|
3
5
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
4
6
|
const version = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '';
|
|
5
7
|
// @ts-ignore
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
8
|
+
if (!globalThis.loaders) {
|
|
9
|
+
log_1.log.log(1, `loaders.gl ${version}`)();
|
|
10
|
+
globalThis.loaders = Object.assign(globalThis.loaders || {}, {
|
|
11
|
+
VERSION: version,
|
|
12
|
+
log: log_1.log
|
|
13
|
+
});
|
|
14
|
+
}
|
|
9
15
|
// @ts-ignore
|
|
10
16
|
exports.default = globalThis.loaders;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/log.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAC;AAElC,eAAO,MAAM,GAAG,KAA8B,CAAC"}
|
package/dist/null-worker.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loaders.gl/core",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.8",
|
|
4
4
|
"description": "Framework-independent loaders for 3D graphics formats",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -40,9 +40,10 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@babel/runtime": "^7.3.1",
|
|
43
|
-
"@loaders.gl/loader-utils": "3.1.
|
|
44
|
-
"@loaders.gl/worker-utils": "3.1.
|
|
43
|
+
"@loaders.gl/loader-utils": "3.1.8",
|
|
44
|
+
"@loaders.gl/worker-utils": "3.1.8",
|
|
45
|
+
"@probe.gl/log": "^3.5.0",
|
|
45
46
|
"probe.gl": "^3.4.0"
|
|
46
47
|
},
|
|
47
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "0ef07b4e9fc20f5a882224cf241c6fd1bad898d8"
|
|
48
49
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type {LoaderContext, LoaderOptions, Loader} from '@loaders.gl/loader-utils';
|
|
2
2
|
import {compareArrayBuffers, path} from '@loaders.gl/loader-utils';
|
|
3
3
|
import {normalizeLoader} from '../loader-utils/normalize-loader';
|
|
4
|
+
import {log} from '../utils/log';
|
|
4
5
|
import {getResourceUrlAndType} from '../utils/resource-utils';
|
|
5
6
|
import {getRegisteredLoaders} from './register-loaders';
|
|
6
7
|
import {isBlob} from '../../javascript-utils/is-type';
|
|
@@ -114,19 +115,33 @@ function selectLoaderInternal(
|
|
|
114
115
|
const testUrl = url || context?.url;
|
|
115
116
|
|
|
116
117
|
let loader: Loader | null = null;
|
|
118
|
+
let reason: string = '';
|
|
117
119
|
|
|
118
120
|
// if options.mimeType is supplied, it takes precedence
|
|
119
121
|
if (options?.mimeType) {
|
|
120
122
|
loader = findLoaderByMIMEType(loaders, options?.mimeType);
|
|
123
|
+
reason = `match forced by supplied MIME type ${options?.mimeType}`;
|
|
121
124
|
}
|
|
125
|
+
|
|
122
126
|
// Look up loader by url
|
|
123
127
|
loader = loader || findLoaderByUrl(loaders, testUrl);
|
|
128
|
+
reason = reason || (loader ? `matched url ${testUrl}` : '');
|
|
129
|
+
|
|
124
130
|
// Look up loader by mime type
|
|
125
131
|
loader = loader || findLoaderByMIMEType(loaders, type);
|
|
132
|
+
reason = reason || (loader ? `matched MIME type ${type}` : '');
|
|
133
|
+
|
|
126
134
|
// Look for loader via initial bytes (Note: not always accessible (e.g. Response, stream, async iterator)
|
|
127
135
|
loader = loader || findLoaderByInitialBytes(loaders, data);
|
|
136
|
+
reason = reason || (loader ? `matched initial data ${getFirstCharacters(data)}` : '');
|
|
137
|
+
|
|
128
138
|
// Look up loader by fallback mime type
|
|
129
139
|
loader = loader || findLoaderByMIMEType(loaders, options?.fallbackMimeType);
|
|
140
|
+
reason = reason || (loader ? `matched fallback MIME type ${type}` : '');
|
|
141
|
+
|
|
142
|
+
if (reason) {
|
|
143
|
+
log.log(1, `selectLoader selected ${loader?.name}: ${reason}.`);
|
|
144
|
+
}
|
|
130
145
|
|
|
131
146
|
return loader;
|
|
132
147
|
}
|
package/src/lib/init.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
// loaders.gl, MIT license
|
|
2
|
+
import {log} from './utils/log';
|
|
3
|
+
|
|
1
4
|
// @ts-ignore TS2304: Cannot find name '__VERSION__'.
|
|
2
5
|
const version = typeof __VERSION__ !== 'undefined' ? __VERSION__ : '';
|
|
3
6
|
|
|
4
7
|
// @ts-ignore
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
});
|
|
8
|
+
if (!globalThis.loaders) {
|
|
9
|
+
log.log(1, `loaders.gl ${version}`)();
|
|
8
10
|
|
|
11
|
+
globalThis.loaders = Object.assign(globalThis.loaders || {}, {
|
|
12
|
+
VERSION: version,
|
|
13
|
+
log
|
|
14
|
+
});
|
|
15
|
+
}
|
|
9
16
|
// @ts-ignore
|
|
10
17
|
export default globalThis.loaders;
|