@loaders.gl/core 3.1.8 → 3.2.0-alpha.1

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 CHANGED
@@ -65,7 +65,7 @@
65
65
  var DEFAULT_VERSION, VERSION;
66
66
  var init_version = __esm({
67
67
  "../worker-utils/src/lib/env-utils/version.ts"() {
68
- DEFAULT_VERSION = "latest";
68
+ DEFAULT_VERSION = "beta";
69
69
  VERSION = typeof __VERSION__ !== "undefined" ? __VERSION__ : DEFAULT_VERSION;
70
70
  if (typeof __VERSION__ === "undefined") {
71
71
  console.error("loaders.gl: The __VERSION__ variable is not injected using babel plugin. Latest unstable workers would be fetched from the CDN.");
@@ -112,13 +112,13 @@
112
112
  init_assert2();
113
113
  WorkerJob = class {
114
114
  constructor(jobName, workerThread) {
115
- this.name = jobName;
116
- this.workerThread = workerThread;
117
115
  this.isRunning = true;
118
116
  this._resolve = () => {
119
117
  };
120
118
  this._reject = () => {
121
119
  };
120
+ this.name = jobName;
121
+ this.workerThread = workerThread;
122
122
  this.result = new Promise((resolve, reject) => {
123
123
  this._resolve = resolve;
124
124
  this._reject = reject;
@@ -145,6 +145,21 @@
145
145
  }
146
146
  });
147
147
 
148
+ // ../worker-utils/src/lib/node/worker_threads-browser.js
149
+ var Worker2;
150
+ var init_worker_threads_browser = __esm({
151
+ "../worker-utils/src/lib/node/worker_threads-browser.js"() {
152
+ Worker2 = class {
153
+ on(message, cb) {
154
+ }
155
+ postMessage(...args) {
156
+ }
157
+ terminate() {
158
+ }
159
+ };
160
+ }
161
+ });
162
+
148
163
  // ../worker-utils/src/lib/worker-utils/get-loadable-worker-url.ts
149
164
  function getLoadableWorkerURL(props) {
150
165
  assert2(props.source && !props.url || !props.source && props.url);
@@ -232,6 +247,8 @@
232
247
  var NOOP, WorkerThread;
233
248
  var init_worker_thread = __esm({
234
249
  "../worker-utils/src/lib/worker-farm/worker-thread.ts"() {
250
+ init_worker_threads_browser();
251
+ init_globals2();
235
252
  init_assert2();
236
253
  init_get_loadable_worker_url();
237
254
  init_get_transfer_list();
@@ -248,10 +265,10 @@
248
265
  this.url = url;
249
266
  this.onMessage = NOOP;
250
267
  this.onError = (error) => console.log(error);
251
- this.worker = this._createBrowserWorker();
268
+ this.worker = isBrowser2 ? this._createBrowserWorker() : this._createNodeWorker();
252
269
  }
253
270
  static isSupported() {
254
- return typeof Worker !== "undefined";
271
+ return typeof Worker !== "undefined" && isBrowser2;
255
272
  }
256
273
  destroy() {
257
274
  this.onMessage = NOOP;
@@ -294,6 +311,27 @@
294
311
  worker.onmessageerror = (event) => console.error(event);
295
312
  return worker;
296
313
  }
314
+ _createNodeWorker() {
315
+ let worker;
316
+ if (this.url) {
317
+ const absolute = this.url.includes(":/") || this.url.startsWith("/");
318
+ const url = absolute ? this.url : `./${this.url}`;
319
+ worker = new Worker2(url, { eval: false });
320
+ } else if (this.source) {
321
+ worker = new Worker2(this.source, { eval: true });
322
+ } else {
323
+ throw new Error("no worker");
324
+ }
325
+ worker.on("message", (data) => {
326
+ this.onMessage(data);
327
+ });
328
+ worker.on("error", (error) => {
329
+ this.onError(error);
330
+ });
331
+ worker.on("exit", (code) => {
332
+ });
333
+ return worker;
334
+ }
297
335
  };
298
336
  }
299
337
  });
@@ -322,6 +360,9 @@
322
360
  this.url = props.url;
323
361
  this.setProps(props);
324
362
  }
363
+ static isSupported() {
364
+ return WorkerThread.isSupported();
365
+ }
325
366
  destroy() {
326
367
  this.idleQueue.forEach((worker) => worker.destroy());
327
368
  this.isDestroyed = true;
@@ -418,9 +459,9 @@
418
459
  DEFAULT_PROPS = {
419
460
  maxConcurrency: 3,
420
461
  maxMobileConcurrency: 1,
462
+ reuseWorkers: true,
421
463
  onDebug: () => {
422
- },
423
- reuseWorkers: true
464
+ }
424
465
  };
425
466
  WorkerFarm = class {
426
467
  constructor(props) {
@@ -441,6 +482,7 @@
441
482
  for (const workerPool of this.workerPools.values()) {
442
483
  workerPool.destroy();
443
484
  }
485
+ this.workerPools = new Map();
444
486
  }
445
487
  setProps(props) {
446
488
  this.props = { ...this.props, ...props };
@@ -500,7 +542,7 @@
500
542
  var init_get_worker_url = __esm({
501
543
  "../worker-utils/src/lib/worker-api/get-worker-url.ts"() {
502
544
  init_assert2();
503
- NPM_TAG = "latest";
545
+ NPM_TAG = "beta";
504
546
  }
505
547
  });
506
548
 
@@ -524,6 +566,7 @@
524
566
  var init_src = __esm({
525
567
  "../worker-utils/src/index.ts"() {
526
568
  init_assert2();
569
+ init_globals2();
527
570
  init_worker_farm();
528
571
  init_get_worker_url();
529
572
  init_validate_worker_version();
@@ -535,6 +578,9 @@
535
578
  if (!WorkerFarm.isSupported()) {
536
579
  return false;
537
580
  }
581
+ if (!isBrowser2 && !options?._nodeWorkers) {
582
+ return false;
583
+ }
538
584
  return loader.worker && options?.worker;
539
585
  }
540
586
  async function parseWithWorker(loader, data, options, context, parseOnMainThread) {
@@ -576,6 +622,7 @@
576
622
  var init_parse_with_worker = __esm({
577
623
  "../loader-utils/src/lib/worker-loader-utils/parse-with-worker.ts"() {
578
624
  init_src();
625
+ init_src();
579
626
  }
580
627
  });
581
628
 
@@ -746,7 +793,7 @@
746
793
  }
747
794
  });
748
795
 
749
- // ../loader-utils/node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js
796
+ // ../../node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js
750
797
  function getHiResTimestamp() {
751
798
  let timestamp;
752
799
  if (typeof window !== "undefined" && window.performance) {
@@ -760,14 +807,14 @@
760
807
  return timestamp;
761
808
  }
762
809
  var init_hi_res_timestamp = __esm({
763
- "../loader-utils/node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js"() {
810
+ "../../node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js"() {
764
811
  }
765
812
  });
766
813
 
767
- // ../loader-utils/node_modules/@probe.gl/stats/dist/esm/lib/stat.js
814
+ // ../../node_modules/@probe.gl/stats/dist/esm/lib/stat.js
768
815
  var Stat;
769
816
  var init_stat = __esm({
770
- "../loader-utils/node_modules/@probe.gl/stats/dist/esm/lib/stat.js"() {
817
+ "../../node_modules/@probe.gl/stats/dist/esm/lib/stat.js"() {
771
818
  init_defineProperty();
772
819
  init_hi_res_timestamp();
773
820
  Stat = class {
@@ -883,10 +930,10 @@
883
930
  }
884
931
  });
885
932
 
886
- // ../loader-utils/node_modules/@probe.gl/stats/dist/esm/lib/stats.js
933
+ // ../../node_modules/@probe.gl/stats/dist/esm/lib/stats.js
887
934
  var Stats;
888
935
  var init_stats = __esm({
889
- "../loader-utils/node_modules/@probe.gl/stats/dist/esm/lib/stats.js"() {
936
+ "../../node_modules/@probe.gl/stats/dist/esm/lib/stats.js"() {
890
937
  init_defineProperty();
891
938
  init_stat();
892
939
  Stats = class {
@@ -956,9 +1003,9 @@
956
1003
  }
957
1004
  });
958
1005
 
959
- // ../loader-utils/node_modules/@probe.gl/stats/dist/esm/index.js
1006
+ // ../../node_modules/@probe.gl/stats/dist/esm/index.js
960
1007
  var init_esm = __esm({
961
- "../loader-utils/node_modules/@probe.gl/stats/dist/esm/index.js"() {
1008
+ "../../node_modules/@probe.gl/stats/dist/esm/index.js"() {
962
1009
  init_stats();
963
1010
  init_stat();
964
1011
  init_hi_res_timestamp();
@@ -2025,29 +2072,29 @@
2025
2072
  }
2026
2073
  });
2027
2074
 
2028
- // ../../node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js
2075
+ // ../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js
2029
2076
  var init_hi_res_timestamp3 = __esm({
2030
- "../../node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js"() {
2077
+ "../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/utils/hi-res-timestamp.js"() {
2031
2078
  }
2032
2079
  });
2033
2080
 
2034
- // ../../node_modules/@probe.gl/stats/dist/esm/lib/stat.js
2081
+ // ../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/lib/stat.js
2035
2082
  var init_stat2 = __esm({
2036
- "../../node_modules/@probe.gl/stats/dist/esm/lib/stat.js"() {
2083
+ "../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/lib/stat.js"() {
2037
2084
  init_hi_res_timestamp3();
2038
2085
  }
2039
2086
  });
2040
2087
 
2041
- // ../../node_modules/@probe.gl/stats/dist/esm/lib/stats.js
2088
+ // ../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/lib/stats.js
2042
2089
  var init_stats2 = __esm({
2043
- "../../node_modules/@probe.gl/stats/dist/esm/lib/stats.js"() {
2090
+ "../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/lib/stats.js"() {
2044
2091
  init_stat2();
2045
2092
  }
2046
2093
  });
2047
2094
 
2048
- // ../../node_modules/@probe.gl/stats/dist/esm/index.js
2095
+ // ../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/index.js
2049
2096
  var init_esm2 = __esm({
2050
- "../../node_modules/@probe.gl/stats/dist/esm/index.js"() {
2097
+ "../../node_modules/probe.gl/node_modules/@probe.gl/stats/dist/esm/index.js"() {
2051
2098
  init_stats2();
2052
2099
  init_stat2();
2053
2100
  init_hi_res_timestamp3();
@@ -2115,6 +2162,7 @@
2115
2162
  var DEFAULT_LOADER_OPTIONS, REMOVED_LOADER_OPTIONS;
2116
2163
  var init_option_defaults = __esm({
2117
2164
  "src/lib/loader-utils/option-defaults.ts"() {
2165
+ init_src2();
2118
2166
  init_loggers();
2119
2167
  DEFAULT_LOADER_OPTIONS = {
2120
2168
  fetch: null,
@@ -2125,7 +2173,8 @@
2125
2173
  worker: true,
2126
2174
  maxConcurrency: 3,
2127
2175
  maxMobileConcurrency: 1,
2128
- reuseWorkers: true,
2176
+ reuseWorkers: isBrowser,
2177
+ _nodeWorkers: false,
2129
2178
  _workerType: "",
2130
2179
  limit: 0,
2131
2180
  _limitMB: 0,
@@ -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","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"}
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 */\n// eslint-disable-next-line complexity\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"}
@@ -7,7 +7,7 @@ exports.default = void 0;
7
7
 
8
8
  var _log = require("./utils/log");
9
9
 
10
- var version = typeof "3.1.8" !== 'undefined' ? "3.1.8" : '';
10
+ var version = typeof "3.2.0-alpha.1" !== 'undefined' ? "3.2.0-alpha.1" : '';
11
11
 
12
12
  if (!globalThis.loaders) {
13
13
  _log.log.log(1, "loaders.gl ".concat(version))();
@@ -1 +1 @@
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"}
1
+ {"version":3,"sources":["../../../src/lib/init.ts"],"names":["version","globalThis","loaders","log","Object","assign","VERSION"],"mappings":";;;;;;;AACA;;AAGA,IAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,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"}
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.REMOVED_LOADER_OPTIONS = exports.DEFAULT_LOADER_OPTIONS = void 0;
7
7
 
8
+ var _loaderUtils = require("@loaders.gl/loader-utils");
9
+
8
10
  var _loggers = require("./loggers");
9
11
 
10
12
  var DEFAULT_LOADER_OPTIONS = {
@@ -16,7 +18,8 @@ var DEFAULT_LOADER_OPTIONS = {
16
18
  worker: true,
17
19
  maxConcurrency: 3,
18
20
  maxMobileConcurrency: 1,
19
- reuseWorkers: true,
21
+ reuseWorkers: _loaderUtils.isBrowser,
22
+ _nodeWorkers: false,
20
23
  _workerType: '',
21
24
  limit: 0,
22
25
  _limitMB: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/loader-utils/option-defaults.ts"],"names":["DEFAULT_LOADER_OPTIONS","fetch","mimeType","undefined","nothrow","log","ConsoleLog","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","_workerType","limit","_limitMB","batchSize","batchDebounceMs","metadata","transforms","REMOVED_LOADER_OPTIONS","throws","dataType","uri","method","headers","body","mode","credentials","cache","redirect","referrer","referrerPolicy","integrity","keepalive","signal"],"mappings":";;;;;;;AACA;;AAEO,IAAMA,sBAAqC,GAAG;AAEnDC,EAAAA,KAAK,EAAE,IAF4C;AAGnDC,EAAAA,QAAQ,EAAEC,SAHyC;AAInDC,EAAAA,OAAO,EAAE,KAJ0C;AAKnDC,EAAAA,GAAG,EAAE,IAAIC,mBAAJ,EAL8C;AAOnDC,EAAAA,GAAG,EAAE,+BAP8C;AAQnDC,EAAAA,MAAM,EAAE,IAR2C;AASnDC,EAAAA,cAAc,EAAE,CATmC;AAUnDC,EAAAA,oBAAoB,EAAE,CAV6B;AAWnDC,EAAAA,YAAY,EAAE,IAXqC;AAYnDC,EAAAA,WAAW,EAAE,EAZsC;AAcnDC,EAAAA,KAAK,EAAE,CAd4C;AAenDC,EAAAA,QAAQ,EAAE,CAfyC;AAgBnDC,EAAAA,SAAS,EAAE,MAhBwC;AAiBnDC,EAAAA,eAAe,EAAE,CAjBkC;AAkBnDC,EAAAA,QAAQ,EAAE,KAlByC;AAmBnDC,EAAAA,UAAU,EAAE;AAnBuC,CAA9C;;AAsBA,IAAMC,sBAAsB,GAAG;AACpCC,EAAAA,MAAM,EAAE,SAD4B;AAEpCC,EAAAA,QAAQ,EAAE,kBAF0B;AAGpCC,EAAAA,GAAG,EAAE,SAH+B;AAKpCC,EAAAA,MAAM,EAAE,cAL4B;AAMpCC,EAAAA,OAAO,EAAE,eAN2B;AAOpCC,EAAAA,IAAI,EAAE,YAP8B;AAQpCC,EAAAA,IAAI,EAAE,YAR8B;AASpCC,EAAAA,WAAW,EAAE,mBATuB;AAUpCC,EAAAA,KAAK,EAAE,aAV6B;AAWpCC,EAAAA,QAAQ,EAAE,gBAX0B;AAYpCC,EAAAA,QAAQ,EAAE,gBAZ0B;AAapCC,EAAAA,cAAc,EAAE,sBAboB;AAcpCC,EAAAA,SAAS,EAAE,iBAdyB;AAepCC,EAAAA,SAAS,EAAE,iBAfyB;AAgBpCC,EAAAA,MAAM,EAAE;AAhB4B,CAA/B","sourcesContent":["import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {ConsoleLog} from './loggers';\n\nexport const DEFAULT_LOADER_OPTIONS: LoaderOptions = {\n // baseUri\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true, // By default, use worker if provided by loader.\n maxConcurrency: 3, // How many worker instances should be created for each loader.\n maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n reuseWorkers: true, // By default reuse workers,\n _workerType: '', // 'test' to use locally generated workers\n\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n transforms: []\n};\n\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n // Warn if fetch options are used on top-level\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n"],"file":"option-defaults.js"}
1
+ {"version":3,"sources":["../../../../src/lib/loader-utils/option-defaults.ts"],"names":["DEFAULT_LOADER_OPTIONS","fetch","mimeType","undefined","nothrow","log","ConsoleLog","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","isBrowser","_nodeWorkers","_workerType","limit","_limitMB","batchSize","batchDebounceMs","metadata","transforms","REMOVED_LOADER_OPTIONS","throws","dataType","uri","method","headers","body","mode","credentials","cache","redirect","referrer","referrerPolicy","integrity","keepalive","signal"],"mappings":";;;;;;;AACA;;AACA;;AAEO,IAAMA,sBAAqC,GAAG;AAEnDC,EAAAA,KAAK,EAAE,IAF4C;AAGnDC,EAAAA,QAAQ,EAAEC,SAHyC;AAInDC,EAAAA,OAAO,EAAE,KAJ0C;AAKnDC,EAAAA,GAAG,EAAE,IAAIC,mBAAJ,EAL8C;AAOnDC,EAAAA,GAAG,EAAE,+BAP8C;AAQnDC,EAAAA,MAAM,EAAE,IAR2C;AASnDC,EAAAA,cAAc,EAAE,CATmC;AAUnDC,EAAAA,oBAAoB,EAAE,CAV6B;AAWnDC,EAAAA,YAAY,EAAEC,sBAXqC;AAYnDC,EAAAA,YAAY,EAAE,KAZqC;AAanDC,EAAAA,WAAW,EAAE,EAbsC;AAenDC,EAAAA,KAAK,EAAE,CAf4C;AAgBnDC,EAAAA,QAAQ,EAAE,CAhByC;AAiBnDC,EAAAA,SAAS,EAAE,MAjBwC;AAkBnDC,EAAAA,eAAe,EAAE,CAlBkC;AAmBnDC,EAAAA,QAAQ,EAAE,KAnByC;AAoBnDC,EAAAA,UAAU,EAAE;AApBuC,CAA9C;;AAuBA,IAAMC,sBAAsB,GAAG;AACpCC,EAAAA,MAAM,EAAE,SAD4B;AAEpCC,EAAAA,QAAQ,EAAE,kBAF0B;AAGpCC,EAAAA,GAAG,EAAE,SAH+B;AAKpCC,EAAAA,MAAM,EAAE,cAL4B;AAMpCC,EAAAA,OAAO,EAAE,eAN2B;AAOpCC,EAAAA,IAAI,EAAE,YAP8B;AAQpCC,EAAAA,IAAI,EAAE,YAR8B;AASpCC,EAAAA,WAAW,EAAE,mBATuB;AAUpCC,EAAAA,KAAK,EAAE,aAV6B;AAWpCC,EAAAA,QAAQ,EAAE,gBAX0B;AAYpCC,EAAAA,QAAQ,EAAE,gBAZ0B;AAapCC,EAAAA,cAAc,EAAE,sBAboB;AAcpCC,EAAAA,SAAS,EAAE,iBAdyB;AAepCC,EAAAA,SAAS,EAAE,iBAfyB;AAgBpCC,EAAAA,MAAM,EAAE;AAhB4B,CAA/B","sourcesContent":["import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {isBrowser} from '@loaders.gl/loader-utils';\nimport {ConsoleLog} from './loggers';\n\nexport const DEFAULT_LOADER_OPTIONS: LoaderOptions = {\n // baseUri\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true, // By default, use worker if provided by loader.\n maxConcurrency: 3, // How many worker instances should be created for each loader.\n maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n reuseWorkers: isBrowser, // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)\n _nodeWorkers: false, // By default do not support node workers\n _workerType: '', // 'test' to use locally generated workers\n\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n transforms: []\n};\n\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n // Warn if fetch options are used on top-level\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n"],"file":"option-defaults.js"}
@@ -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.8" !== 'undefined' ? "3.1.8" : 'latest';
20
+ var VERSION = typeof "3.2.0-alpha.1" !== 'undefined' ? "3.2.0-alpha.1" : 'latest';
21
21
  var NullWorkerLoader = {
22
22
  name: 'Null loader',
23
23
  id: 'null',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/null-loader.ts"],"names":["VERSION","NullWorkerLoader","name","id","module","version","worker","mimeTypes","extensions","tests","options","null","NullLoader","parse","arrayBuffer","parseSync","parseInBatches","asyncIterator","batch","generator"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,IAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAOO,IAAMC,gBAAwB,GAAG;AACtCC,EAAAA,IAAI,EAAE,aADgC;AAEtCC,EAAAA,EAAE,EAAE,MAFkC;AAGtCC,EAAAA,MAAM,EAAE,MAH8B;AAItCC,EAAAA,OAAO,EAAEL,OAJ6B;AAKtCM,EAAAA,MAAM,EAAE,IAL8B;AAMtCC,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAN2B;AAOtCC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAP0B;AAQtCC,EAAAA,KAAK,EAAE,CAAC;AAAA,WAAM,KAAN;AAAA,GAAD,CAR+B;AAStCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAT6B,CAAjC;;AAiBA,IAAMC,UAA4B,GAAG;AAC1CV,EAAAA,IAAI,EAAE,aADoC;AAE1CC,EAAAA,EAAE,EAAE,MAFsC;AAG1CC,EAAAA,MAAM,EAAE,MAHkC;AAI1CC,EAAAA,OAAO,EAAEL,OAJiC;AAK1CO,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAL+B;AAM1CC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAN8B;AAO1CK,EAAAA,KAAK;AAAA,2EAAE,iBAAOC,WAAP;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAuBA,WAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA,KAPqC;AAQ1CC,EAAAA,SAAS,EAAE,mBAACD,WAAD;AAAA,WAAiBA,WAAjB;AAAA,GAR+B;AAS1CE,EAAAA,cAAc;AAAA,iFAAE,kBAA0BC,aAA1B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDACYA,aADZ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AACGC,cAAAA,KADH;AAAA;AAEZ,qBAAMA,KAAN;;AAFY;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA,aAAkBC,SAAlB;AAAA;AAAA;;AAAA,WAAkBA,SAAlB;AAAA,KAT4B;AAc1CV,EAAAA,KAAK,EAAE,CAAC;AAAA,WAAM,KAAN;AAAA,GAAD,CAdmC;AAe1CC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAfiC,CAArC","sourcesContent":["// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nimport {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullWorkerLoader: Loader = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n worker: true,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n tests: [() => false],\n options: {\n null: {}\n }\n};\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullLoader: LoaderWithParser = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n parse: async (arrayBuffer) => arrayBuffer,\n parseSync: (arrayBuffer) => arrayBuffer,\n parseInBatches: async function* generator(asyncIterator) {\n for await (const batch of asyncIterator) {\n yield batch;\n }\n },\n tests: [() => false],\n options: {\n null: {}\n }\n};\n"],"file":"null-loader.js"}
1
+ {"version":3,"sources":["../../src/null-loader.ts"],"names":["VERSION","NullWorkerLoader","name","id","module","version","worker","mimeTypes","extensions","tests","options","null","NullLoader","parse","arrayBuffer","parseSync","parseInBatches","asyncIterator","batch","generator"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA,IAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAOO,IAAMC,gBAAwB,GAAG;AACtCC,EAAAA,IAAI,EAAE,aADgC;AAEtCC,EAAAA,EAAE,EAAE,MAFkC;AAGtCC,EAAAA,MAAM,EAAE,MAH8B;AAItCC,EAAAA,OAAO,EAAEL,OAJ6B;AAKtCM,EAAAA,MAAM,EAAE,IAL8B;AAMtCC,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAN2B;AAOtCC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAP0B;AAQtCC,EAAAA,KAAK,EAAE,CAAC;AAAA,WAAM,KAAN;AAAA,GAAD,CAR+B;AAStCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAT6B,CAAjC;;AAiBA,IAAMC,UAA4B,GAAG;AAC1CV,EAAAA,IAAI,EAAE,aADoC;AAE1CC,EAAAA,EAAE,EAAE,MAFsC;AAG1CC,EAAAA,MAAM,EAAE,MAHkC;AAI1CC,EAAAA,OAAO,EAAEL,OAJiC;AAK1CO,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAL+B;AAM1CC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAN8B;AAO1CK,EAAAA,KAAK;AAAA,2EAAE,iBAAOC,WAAP;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAuBA,WAAvB;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA,KAPqC;AAQ1CC,EAAAA,SAAS,EAAE,mBAACD,WAAD;AAAA,WAAiBA,WAAjB;AAAA,GAR+B;AAS1CE,EAAAA,cAAc;AAAA,iFAAE,kBAA0BC,aAA1B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uDACYA,aADZ;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AACGC,cAAAA,KADH;AAAA;AAEZ,qBAAMA,KAAN;;AAFY;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA,aAAkBC,SAAlB;AAAA;AAAA;;AAAA,WAAkBA,SAAlB;AAAA,KAT4B;AAc1CV,EAAAA,KAAK,EAAE,CAAC;AAAA,WAAM,KAAN;AAAA,GAAD,CAdmC;AAe1CC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAfiC,CAArC","sourcesContent":["// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nimport {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullWorkerLoader: Loader = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n worker: true,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n tests: [() => false],\n options: {\n null: {}\n }\n};\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullLoader: LoaderWithParser = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n parse: async (arrayBuffer) => arrayBuffer,\n parseSync: (arrayBuffer) => arrayBuffer,\n parseInBatches: async function* generator(asyncIterator) {\n for await (const batch of asyncIterator) {\n yield batch;\n }\n },\n tests: [() => false],\n options: {\n null: {}\n }\n};\n"],"file":"null-loader.js"}
@@ -1 +1 @@
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"}
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 */\n// eslint-disable-next-line complexity\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"}
@@ -1,5 +1,5 @@
1
1
  import { log } from './utils/log';
2
- const version = typeof "3.1.8" !== 'undefined' ? "3.1.8" : '';
2
+ const version = typeof "3.2.0-alpha.1" !== 'undefined' ? "3.2.0-alpha.1" : '';
3
3
 
4
4
  if (!globalThis.loaders) {
5
5
  log.log(1, "loaders.gl ".concat(version))();
@@ -1 +1 @@
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"}
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,2BAAuB,WAAvB,qBAAmD,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"}
@@ -1,3 +1,4 @@
1
+ import { isBrowser } from '@loaders.gl/loader-utils';
1
2
  import { ConsoleLog } from './loggers';
2
3
  export const DEFAULT_LOADER_OPTIONS = {
3
4
  fetch: null,
@@ -8,7 +9,8 @@ export const DEFAULT_LOADER_OPTIONS = {
8
9
  worker: true,
9
10
  maxConcurrency: 3,
10
11
  maxMobileConcurrency: 1,
11
- reuseWorkers: true,
12
+ reuseWorkers: isBrowser,
13
+ _nodeWorkers: false,
12
14
  _workerType: '',
13
15
  limit: 0,
14
16
  _limitMB: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/loader-utils/option-defaults.ts"],"names":["ConsoleLog","DEFAULT_LOADER_OPTIONS","fetch","mimeType","undefined","nothrow","log","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","_workerType","limit","_limitMB","batchSize","batchDebounceMs","metadata","transforms","REMOVED_LOADER_OPTIONS","throws","dataType","uri","method","headers","body","mode","credentials","cache","redirect","referrer","referrerPolicy","integrity","keepalive","signal"],"mappings":"AACA,SAAQA,UAAR,QAAyB,WAAzB;AAEA,OAAO,MAAMC,sBAAqC,GAAG;AAEnDC,EAAAA,KAAK,EAAE,IAF4C;AAGnDC,EAAAA,QAAQ,EAAEC,SAHyC;AAInDC,EAAAA,OAAO,EAAE,KAJ0C;AAKnDC,EAAAA,GAAG,EAAE,IAAIN,UAAJ,EAL8C;AAOnDO,EAAAA,GAAG,EAAE,+BAP8C;AAQnDC,EAAAA,MAAM,EAAE,IAR2C;AASnDC,EAAAA,cAAc,EAAE,CATmC;AAUnDC,EAAAA,oBAAoB,EAAE,CAV6B;AAWnDC,EAAAA,YAAY,EAAE,IAXqC;AAYnDC,EAAAA,WAAW,EAAE,EAZsC;AAcnDC,EAAAA,KAAK,EAAE,CAd4C;AAenDC,EAAAA,QAAQ,EAAE,CAfyC;AAgBnDC,EAAAA,SAAS,EAAE,MAhBwC;AAiBnDC,EAAAA,eAAe,EAAE,CAjBkC;AAkBnDC,EAAAA,QAAQ,EAAE,KAlByC;AAmBnDC,EAAAA,UAAU,EAAE;AAnBuC,CAA9C;AAsBP,OAAO,MAAMC,sBAAsB,GAAG;AACpCC,EAAAA,MAAM,EAAE,SAD4B;AAEpCC,EAAAA,QAAQ,EAAE,kBAF0B;AAGpCC,EAAAA,GAAG,EAAE,SAH+B;AAKpCC,EAAAA,MAAM,EAAE,cAL4B;AAMpCC,EAAAA,OAAO,EAAE,eAN2B;AAOpCC,EAAAA,IAAI,EAAE,YAP8B;AAQpCC,EAAAA,IAAI,EAAE,YAR8B;AASpCC,EAAAA,WAAW,EAAE,mBATuB;AAUpCC,EAAAA,KAAK,EAAE,aAV6B;AAWpCC,EAAAA,QAAQ,EAAE,gBAX0B;AAYpCC,EAAAA,QAAQ,EAAE,gBAZ0B;AAapCC,EAAAA,cAAc,EAAE,sBAboB;AAcpCC,EAAAA,SAAS,EAAE,iBAdyB;AAepCC,EAAAA,SAAS,EAAE,iBAfyB;AAgBpCC,EAAAA,MAAM,EAAE;AAhB4B,CAA/B","sourcesContent":["import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {ConsoleLog} from './loggers';\n\nexport const DEFAULT_LOADER_OPTIONS: LoaderOptions = {\n // baseUri\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true, // By default, use worker if provided by loader.\n maxConcurrency: 3, // How many worker instances should be created for each loader.\n maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n reuseWorkers: true, // By default reuse workers,\n _workerType: '', // 'test' to use locally generated workers\n\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n transforms: []\n};\n\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n // Warn if fetch options are used on top-level\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n"],"file":"option-defaults.js"}
1
+ {"version":3,"sources":["../../../../src/lib/loader-utils/option-defaults.ts"],"names":["isBrowser","ConsoleLog","DEFAULT_LOADER_OPTIONS","fetch","mimeType","undefined","nothrow","log","CDN","worker","maxConcurrency","maxMobileConcurrency","reuseWorkers","_nodeWorkers","_workerType","limit","_limitMB","batchSize","batchDebounceMs","metadata","transforms","REMOVED_LOADER_OPTIONS","throws","dataType","uri","method","headers","body","mode","credentials","cache","redirect","referrer","referrerPolicy","integrity","keepalive","signal"],"mappings":"AACA,SAAQA,SAAR,QAAwB,0BAAxB;AACA,SAAQC,UAAR,QAAyB,WAAzB;AAEA,OAAO,MAAMC,sBAAqC,GAAG;AAEnDC,EAAAA,KAAK,EAAE,IAF4C;AAGnDC,EAAAA,QAAQ,EAAEC,SAHyC;AAInDC,EAAAA,OAAO,EAAE,KAJ0C;AAKnDC,EAAAA,GAAG,EAAE,IAAIN,UAAJ,EAL8C;AAOnDO,EAAAA,GAAG,EAAE,+BAP8C;AAQnDC,EAAAA,MAAM,EAAE,IAR2C;AASnDC,EAAAA,cAAc,EAAE,CATmC;AAUnDC,EAAAA,oBAAoB,EAAE,CAV6B;AAWnDC,EAAAA,YAAY,EAAEZ,SAXqC;AAYnDa,EAAAA,YAAY,EAAE,KAZqC;AAanDC,EAAAA,WAAW,EAAE,EAbsC;AAenDC,EAAAA,KAAK,EAAE,CAf4C;AAgBnDC,EAAAA,QAAQ,EAAE,CAhByC;AAiBnDC,EAAAA,SAAS,EAAE,MAjBwC;AAkBnDC,EAAAA,eAAe,EAAE,CAlBkC;AAmBnDC,EAAAA,QAAQ,EAAE,KAnByC;AAoBnDC,EAAAA,UAAU,EAAE;AApBuC,CAA9C;AAuBP,OAAO,MAAMC,sBAAsB,GAAG;AACpCC,EAAAA,MAAM,EAAE,SAD4B;AAEpCC,EAAAA,QAAQ,EAAE,kBAF0B;AAGpCC,EAAAA,GAAG,EAAE,SAH+B;AAKpCC,EAAAA,MAAM,EAAE,cAL4B;AAMpCC,EAAAA,OAAO,EAAE,eAN2B;AAOpCC,EAAAA,IAAI,EAAE,YAP8B;AAQpCC,EAAAA,IAAI,EAAE,YAR8B;AASpCC,EAAAA,WAAW,EAAE,mBATuB;AAUpCC,EAAAA,KAAK,EAAE,aAV6B;AAWpCC,EAAAA,QAAQ,EAAE,gBAX0B;AAYpCC,EAAAA,QAAQ,EAAE,gBAZ0B;AAapCC,EAAAA,cAAc,EAAE,sBAboB;AAcpCC,EAAAA,SAAS,EAAE,iBAdyB;AAepCC,EAAAA,SAAS,EAAE,iBAfyB;AAgBpCC,EAAAA,MAAM,EAAE;AAhB4B,CAA/B","sourcesContent":["import type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {isBrowser} from '@loaders.gl/loader-utils';\nimport {ConsoleLog} from './loggers';\n\nexport const DEFAULT_LOADER_OPTIONS: LoaderOptions = {\n // baseUri\n fetch: null,\n mimeType: undefined,\n nothrow: false,\n log: new ConsoleLog(), // A probe.gl compatible (`log.log()()` syntax) that just logs to console\n\n CDN: 'https://unpkg.com/@loaders.gl',\n worker: true, // By default, use worker if provided by loader.\n maxConcurrency: 3, // How many worker instances should be created for each loader.\n maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.\n reuseWorkers: isBrowser, // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)\n _nodeWorkers: false, // By default do not support node workers\n _workerType: '', // 'test' to use locally generated workers\n\n limit: 0,\n _limitMB: 0,\n batchSize: 'auto',\n batchDebounceMs: 0,\n metadata: false, // TODO - currently only implemented for parseInBatches, adds initial metadata batch,\n transforms: []\n};\n\nexport const REMOVED_LOADER_OPTIONS = {\n throws: 'nothrow',\n dataType: '(no longer used)',\n uri: 'baseUri',\n // Warn if fetch options are used on top-level\n method: 'fetch.method',\n headers: 'fetch.headers',\n body: 'fetch.body',\n mode: 'fetch.mode',\n credentials: 'fetch.credentials',\n cache: 'fetch.cache',\n redirect: 'fetch.redirect',\n referrer: 'fetch.referrer',\n referrerPolicy: 'fetch.referrerPolicy',\n integrity: 'fetch.integrity',\n keepalive: 'fetch.keepalive',\n signal: 'fetch.signal'\n};\n"],"file":"option-defaults.js"}
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "3.1.8" !== 'undefined' ? "3.1.8" : 'latest';
1
+ const VERSION = typeof "3.2.0-alpha.1" !== 'undefined' ? "3.2.0-alpha.1" : 'latest';
2
2
  export const NullWorkerLoader = {
3
3
  name: 'Null loader',
4
4
  id: 'null',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/null-loader.ts"],"names":["VERSION","NullWorkerLoader","name","id","module","version","worker","mimeTypes","extensions","tests","options","null","NullLoader","parse","arrayBuffer","parseSync","parseInBatches","generator","asyncIterator","batch"],"mappings":"AAEA,MAAMA,OAAO,GAAG,mBAAuB,WAAvB,aAAmD,QAAnE;AAOA,OAAO,MAAMC,gBAAwB,GAAG;AACtCC,EAAAA,IAAI,EAAE,aADgC;AAEtCC,EAAAA,EAAE,EAAE,MAFkC;AAGtCC,EAAAA,MAAM,EAAE,MAH8B;AAItCC,EAAAA,OAAO,EAAEL,OAJ6B;AAKtCM,EAAAA,MAAM,EAAE,IAL8B;AAMtCC,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAN2B;AAOtCC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAP0B;AAQtCC,EAAAA,KAAK,EAAE,CAAC,MAAM,KAAP,CAR+B;AAStCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAT6B,CAAjC;AAiBP,OAAO,MAAMC,UAA4B,GAAG;AAC1CV,EAAAA,IAAI,EAAE,aADoC;AAE1CC,EAAAA,EAAE,EAAE,MAFsC;AAG1CC,EAAAA,MAAM,EAAE,MAHkC;AAI1CC,EAAAA,OAAO,EAAEL,OAJiC;AAK1CO,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAL+B;AAM1CC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAN8B;AAO1CK,EAAAA,KAAK,EAAE,MAAOC,WAAP,IAAuBA,WAPY;AAQ1CC,EAAAA,SAAS,EAAGD,WAAD,IAAiBA,WARc;AAS1CE,EAAAA,cAAc,EAAE,gBAAgBC,SAAhB,CAA0BC,aAA1B,EAAyC;AACvD,eAAW,MAAMC,KAAjB,IAA0BD,aAA1B,EAAyC;AACvC,YAAMC,KAAN;AACD;AACF,GAbyC;AAc1CV,EAAAA,KAAK,EAAE,CAAC,MAAM,KAAP,CAdmC;AAe1CC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAfiC,CAArC","sourcesContent":["// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nimport {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullWorkerLoader: Loader = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n worker: true,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n tests: [() => false],\n options: {\n null: {}\n }\n};\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullLoader: LoaderWithParser = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n parse: async (arrayBuffer) => arrayBuffer,\n parseSync: (arrayBuffer) => arrayBuffer,\n parseInBatches: async function* generator(asyncIterator) {\n for await (const batch of asyncIterator) {\n yield batch;\n }\n },\n tests: [() => false],\n options: {\n null: {}\n }\n};\n"],"file":"null-loader.js"}
1
+ {"version":3,"sources":["../../src/null-loader.ts"],"names":["VERSION","NullWorkerLoader","name","id","module","version","worker","mimeTypes","extensions","tests","options","null","NullLoader","parse","arrayBuffer","parseSync","parseInBatches","generator","asyncIterator","batch"],"mappings":"AAEA,MAAMA,OAAO,GAAG,2BAAuB,WAAvB,qBAAmD,QAAnE;AAOA,OAAO,MAAMC,gBAAwB,GAAG;AACtCC,EAAAA,IAAI,EAAE,aADgC;AAEtCC,EAAAA,EAAE,EAAE,MAFkC;AAGtCC,EAAAA,MAAM,EAAE,MAH8B;AAItCC,EAAAA,OAAO,EAAEL,OAJ6B;AAKtCM,EAAAA,MAAM,EAAE,IAL8B;AAMtCC,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAN2B;AAOtCC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAP0B;AAQtCC,EAAAA,KAAK,EAAE,CAAC,MAAM,KAAP,CAR+B;AAStCC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAT6B,CAAjC;AAiBP,OAAO,MAAMC,UAA4B,GAAG;AAC1CV,EAAAA,IAAI,EAAE,aADoC;AAE1CC,EAAAA,EAAE,EAAE,MAFsC;AAG1CC,EAAAA,MAAM,EAAE,MAHkC;AAI1CC,EAAAA,OAAO,EAAEL,OAJiC;AAK1CO,EAAAA,SAAS,EAAE,CAAC,qBAAD,CAL+B;AAM1CC,EAAAA,UAAU,EAAE,CAAC,MAAD,CAN8B;AAO1CK,EAAAA,KAAK,EAAE,MAAOC,WAAP,IAAuBA,WAPY;AAQ1CC,EAAAA,SAAS,EAAGD,WAAD,IAAiBA,WARc;AAS1CE,EAAAA,cAAc,EAAE,gBAAgBC,SAAhB,CAA0BC,aAA1B,EAAyC;AACvD,eAAW,MAAMC,KAAjB,IAA0BD,aAA1B,EAAyC;AACvC,YAAMC,KAAN;AACD;AACF,GAbyC;AAc1CV,EAAAA,KAAK,EAAE,CAAC,MAAM,KAAP,CAdmC;AAe1CC,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE;AADC;AAfiC,CAArC","sourcesContent":["// __VERSION__ is injected by babel-plugin-version-inline\n// @ts-ignore TS2304: Cannot find name '__VERSION__'.\nconst VERSION = typeof __VERSION__ !== 'undefined' ? __VERSION__ : 'latest';\n\nimport {Loader, LoaderWithParser} from '@loaders.gl/loader-utils';\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullWorkerLoader: Loader = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n worker: true,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n tests: [() => false],\n options: {\n null: {}\n }\n};\n\n/**\n * Loads any data and returns null (or optionally passes through data unparsed)\n */\nexport const NullLoader: LoaderWithParser = {\n name: 'Null loader',\n id: 'null',\n module: 'core',\n version: VERSION,\n mimeTypes: ['application/x.empty'],\n extensions: ['null'],\n parse: async (arrayBuffer) => arrayBuffer,\n parseSync: (arrayBuffer) => arrayBuffer,\n parseInBatches: async function* generator(asyncIterator) {\n for await (const batch of asyncIterator) {\n yield batch;\n }\n },\n tests: [() => false],\n options: {\n null: {}\n }\n};\n"],"file":"null-loader.js"}
@@ -83,6 +83,7 @@ function selectLoaderSync(data, loaders = [], options, context) {
83
83
  }
84
84
  exports.selectLoaderSync = selectLoaderSync;
85
85
  /** Implements loaders selection logic */
86
+ // eslint-disable-next-line complexity
86
87
  function selectLoaderInternal(data, loaders, options, context) {
87
88
  const { url, type } = (0, resource_utils_1.getResourceUrlAndType)(data);
88
89
  const testUrl = url || context?.url;
@@ -1 +1 @@
1
- {"version":3,"file":"option-defaults.d.ts","sourceRoot":"","sources":["../../../src/lib/loader-utils/option-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAG5D,eAAO,MAAM,sBAAsB,EAAE,aAoBpC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CAiBlC,CAAC"}
1
+ {"version":3,"file":"option-defaults.d.ts","sourceRoot":"","sources":["../../../src/lib/loader-utils/option-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAI5D,eAAO,MAAM,sBAAsB,EAAE,aAqBpC,CAAC;AAEF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CAiBlC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.REMOVED_LOADER_OPTIONS = exports.DEFAULT_LOADER_OPTIONS = void 0;
4
+ const loader_utils_1 = require("@loaders.gl/loader-utils");
4
5
  const loggers_1 = require("./loggers");
5
6
  exports.DEFAULT_LOADER_OPTIONS = {
6
7
  // baseUri
@@ -12,7 +13,8 @@ exports.DEFAULT_LOADER_OPTIONS = {
12
13
  worker: true,
13
14
  maxConcurrency: 3,
14
15
  maxMobileConcurrency: 1,
15
- reuseWorkers: true,
16
+ reuseWorkers: loader_utils_1.isBrowser,
17
+ _nodeWorkers: false,
16
18
  _workerType: '',
17
19
  limit: 0,
18
20
  _limitMB: 0,
@@ -35,16 +35,33 @@
35
35
  }
36
36
 
37
37
  // ../worker-utils/src/lib/worker-farm/worker-body.ts
38
+ function getParentPort() {
39
+ let parentPort;
40
+ try {
41
+ eval("globalThis.parentPort = require('worker_threads').parentPort");
42
+ parentPort = globalThis.parentPort;
43
+ } catch {
44
+ }
45
+ return parentPort;
46
+ }
38
47
  var onMessageWrapperMap = new Map();
39
48
  var WorkerBody = class {
49
+ static inWorkerThread() {
50
+ return typeof self !== "undefined" || Boolean(getParentPort());
51
+ }
40
52
  static set onmessage(onMessage) {
41
- self.onmessage = (message) => {
42
- if (!isKnownMessage(message)) {
43
- return;
44
- }
45
- const { type, payload } = message.data;
53
+ function handleMessage(message) {
54
+ const parentPort3 = getParentPort();
55
+ const { type, payload } = parentPort3 ? message : message.data;
46
56
  onMessage(type, payload);
47
- };
57
+ }
58
+ const parentPort2 = getParentPort();
59
+ if (parentPort2) {
60
+ parentPort2.on("message", handleMessage);
61
+ parentPort2.on("exit", () => console.debug("Node worker closing"));
62
+ } else {
63
+ globalThis.onmessage = handleMessage;
64
+ }
48
65
  }
49
66
  static addEventListener(onMessage) {
50
67
  let onMessageWrapper = onMessageWrapperMap.get(onMessage);
@@ -53,22 +70,36 @@
53
70
  if (!isKnownMessage(message)) {
54
71
  return;
55
72
  }
56
- const { type, payload } = message.data;
73
+ const parentPort3 = getParentPort();
74
+ const { type, payload } = parentPort3 ? message : message.data;
57
75
  onMessage(type, payload);
58
76
  };
59
77
  }
60
- self.addEventListener("message", onMessageWrapper);
78
+ const parentPort2 = getParentPort();
79
+ if (parentPort2) {
80
+ console.error("not implemented");
81
+ } else {
82
+ globalThis.addEventListener("message", onMessageWrapper);
83
+ }
61
84
  }
62
85
  static removeEventListener(onMessage) {
63
86
  const onMessageWrapper = onMessageWrapperMap.get(onMessage);
64
87
  onMessageWrapperMap.delete(onMessage);
65
- self.removeEventListener("message", onMessageWrapper);
88
+ const parentPort2 = getParentPort();
89
+ if (parentPort2) {
90
+ console.error("not implemented");
91
+ } else {
92
+ globalThis.removeEventListener("message", onMessageWrapper);
93
+ }
66
94
  }
67
95
  static postMessage(type, payload) {
68
- if (self) {
69
- const data = { source: "loaders.gl", type, payload };
70
- const transferList = getTransferList(payload);
71
- self.postMessage(data, transferList);
96
+ const data = { source: "loaders.gl", type, payload };
97
+ const transferList = getTransferList(payload);
98
+ const parentPort2 = getParentPort();
99
+ if (parentPort2) {
100
+ parentPort2.postMessage(data, transferList);
101
+ } else {
102
+ globalThis.postMessage(data, transferList);
72
103
  }
73
104
  }
74
105
  };
@@ -80,7 +111,7 @@
80
111
  // ../loader-utils/src/lib/worker-loader-utils/create-loader-worker.ts
81
112
  var requestId = 0;
82
113
  function createLoaderWorker(loader) {
83
- if (typeof self === "undefined") {
114
+ if (!WorkerBody.inWorkerThread()) {
84
115
  return;
85
116
  }
86
117
  WorkerBody.onmessage = async (type, payload) => {
@@ -152,7 +183,7 @@
152
183
  }
153
184
 
154
185
  // src/null-loader.ts
155
- var VERSION = true ? "3.1.8" : "latest";
186
+ var VERSION = true ? "3.2.0-alpha.1" : "latest";
156
187
  var NullLoader = {
157
188
  name: "Null loader",
158
189
  id: "null",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/core",
3
- "version": "3.1.8",
3
+ "version": "3.2.0-alpha.1",
4
4
  "description": "Framework-independent loaders for 3D graphics formats",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -25,6 +25,8 @@
25
25
  "fs": false,
26
26
  "stream": false,
27
27
  "./src/iterators/make-stream/make-node-stream.ts": "./src/iterators/make-stream/make-dom-stream.ts",
28
+ "./src/iterators/make-stream/make-node-stream.js": "./src/iterators/make-stream/make-dom-stream.js",
29
+ "./dist/iterators/make-stream/make-node-stream.js": "./dist/iterators/make-stream/make-dom-stream.js",
28
30
  "./dist/es5/iterators/make-stream/make-node-stream.js": "./dist/es5/iterators/make-stream/make-dom-stream.js",
29
31
  "./dist/esm/iterators/make-stream/make-node-stream.js": "./dist/esm/iterators/make-stream/make-dom-stream.js"
30
32
  },
@@ -40,10 +42,10 @@
40
42
  },
41
43
  "dependencies": {
42
44
  "@babel/runtime": "^7.3.1",
43
- "@loaders.gl/loader-utils": "3.1.8",
44
- "@loaders.gl/worker-utils": "3.1.8",
45
+ "@loaders.gl/loader-utils": "3.2.0-alpha.1",
46
+ "@loaders.gl/worker-utils": "3.2.0-alpha.1",
45
47
  "@probe.gl/log": "^3.5.0",
46
48
  "probe.gl": "^3.4.0"
47
49
  },
48
- "gitHead": "0ef07b4e9fc20f5a882224cf241c6fd1bad898d8"
50
+ "gitHead": "423a2815092b08dcf93ad5b7dc2940b167305afe"
49
51
  }
@@ -104,6 +104,7 @@ export function selectLoaderSync(
104
104
  }
105
105
 
106
106
  /** Implements loaders selection logic */
107
+ // eslint-disable-next-line complexity
107
108
  function selectLoaderInternal(
108
109
  data: Response | Blob | ArrayBuffer | string,
109
110
  loaders: Loader[],
@@ -1,4 +1,5 @@
1
1
  import type {LoaderOptions} from '@loaders.gl/loader-utils';
2
+ import {isBrowser} from '@loaders.gl/loader-utils';
2
3
  import {ConsoleLog} from './loggers';
3
4
 
4
5
  export const DEFAULT_LOADER_OPTIONS: LoaderOptions = {
@@ -12,7 +13,8 @@ export const DEFAULT_LOADER_OPTIONS: LoaderOptions = {
12
13
  worker: true, // By default, use worker if provided by loader.
13
14
  maxConcurrency: 3, // How many worker instances should be created for each loader.
14
15
  maxMobileConcurrency: 1, // How many worker instances should be created for each loader on mobile devices.
15
- reuseWorkers: true, // By default reuse workers,
16
+ reuseWorkers: isBrowser, // By default reuse workers in browser (Node.js refuses to terminate if browsers are running)
17
+ _nodeWorkers: false, // By default do not support node workers
16
18
  _workerType: '', // 'test' to use locally generated workers
17
19
 
18
20
  limit: 0,