@loaders.gl/core 3.3.0-alpha.5 → 3.3.0-alpha.6
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 +210 -821
- package/dist/es5/bundle.js +0 -1
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/core-addons/write-file-browser.js +2 -0
- package/dist/es5/core-addons/write-file-browser.js.map +1 -1
- package/dist/es5/index.js +108 -130
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/iterators/batch-iterators/timed-batch-iterator.js +34 -69
- package/dist/es5/iterators/batch-iterators/timed-batch-iterator.js.map +1 -1
- package/dist/es5/iterators/make-iterator/make-array-buffer-iterator.js +9 -17
- package/dist/es5/iterators/make-iterator/make-array-buffer-iterator.js.map +1 -1
- package/dist/es5/iterators/make-iterator/make-blob-iterator.js +0 -11
- package/dist/es5/iterators/make-iterator/make-blob-iterator.js.map +1 -1
- package/dist/es5/iterators/make-iterator/make-iterator.js +0 -11
- package/dist/es5/iterators/make-iterator/make-iterator.js.map +1 -1
- package/dist/es5/iterators/make-iterator/make-stream-iterator.js +29 -75
- package/dist/es5/iterators/make-iterator/make-stream-iterator.js.map +1 -1
- package/dist/es5/iterators/make-iterator/make-string-iterator.js +1 -8
- package/dist/es5/iterators/make-iterator/make-string-iterator.js.map +1 -1
- package/dist/es5/iterators/make-stream/make-dom-stream.js +2 -17
- package/dist/es5/iterators/make-stream/make-dom-stream.js.map +1 -1
- package/dist/es5/iterators/make-stream/make-node-stream.js +0 -50
- package/dist/es5/iterators/make-stream/make-node-stream.js.map +1 -1
- package/dist/es5/javascript-utils/is-type.js +1 -34
- package/dist/es5/javascript-utils/is-type.js.map +1 -1
- package/dist/es5/lib/api/encode.js +42 -118
- package/dist/es5/lib/api/encode.js.map +1 -1
- package/dist/es5/lib/api/load-in-batches.js +1 -15
- package/dist/es5/lib/api/load-in-batches.js.map +1 -1
- package/dist/es5/lib/api/load.js +0 -18
- package/dist/es5/lib/api/load.js.map +1 -1
- package/dist/es5/lib/api/loader-options.js +4 -5
- package/dist/es5/lib/api/loader-options.js.map +1 -1
- package/dist/es5/lib/api/parse-in-batches.js +122 -196
- package/dist/es5/lib/api/parse-in-batches.js.map +1 -1
- package/dist/es5/lib/api/parse-sync.js +2 -16
- package/dist/es5/lib/api/parse-sync.js.map +1 -1
- package/dist/es5/lib/api/parse.js +3 -42
- package/dist/es5/lib/api/parse.js.map +1 -1
- package/dist/es5/lib/api/register-loaders.js +3 -14
- package/dist/es5/lib/api/register-loaders.js.map +1 -1
- package/dist/es5/lib/api/save.js +0 -11
- package/dist/es5/lib/api/save.js.map +1 -1
- package/dist/es5/lib/api/select-loader.js +18 -91
- package/dist/es5/lib/api/select-loader.js.map +1 -1
- package/dist/es5/lib/common.js.map +1 -1
- package/dist/es5/lib/fetch/fetch-error-message.js +1 -15
- package/dist/es5/lib/fetch/fetch-error-message.js.map +1 -1
- package/dist/es5/lib/fetch/fetch-file.js +0 -14
- package/dist/es5/lib/fetch/fetch-file.js.map +1 -1
- package/dist/es5/lib/fetch/read-array-buffer.js +0 -20
- package/dist/es5/lib/fetch/read-array-buffer.js.map +1 -1
- package/dist/es5/lib/fetch/read-file.js +0 -3
- package/dist/es5/lib/fetch/read-file.js.map +1 -1
- package/dist/es5/lib/fetch/write-file.js +0 -13
- package/dist/es5/lib/fetch/write-file.js.map +1 -1
- package/dist/es5/lib/filesystems/browser-filesystem.js +9 -55
- package/dist/es5/lib/filesystems/browser-filesystem.js.map +1 -1
- package/dist/es5/lib/filesystems/filesystem.js.map +1 -1
- package/dist/es5/lib/filesystems/read-array-buffer.js +0 -10
- package/dist/es5/lib/filesystems/read-array-buffer.js.map +1 -1
- package/dist/es5/lib/init.js +1 -4
- package/dist/es5/lib/init.js.map +1 -1
- package/dist/es5/lib/loader-utils/check-errors.js +0 -14
- package/dist/es5/lib/loader-utils/check-errors.js.map +1 -1
- package/dist/es5/lib/loader-utils/get-data.js +2 -64
- package/dist/es5/lib/loader-utils/get-data.js.map +1 -1
- package/dist/es5/lib/loader-utils/loader-context.js +2 -15
- package/dist/es5/lib/loader-utils/loader-context.js.map +1 -1
- package/dist/es5/lib/loader-utils/loggers.js +2 -20
- package/dist/es5/lib/loader-utils/loggers.js.map +1 -1
- package/dist/es5/lib/loader-utils/normalize-loader.js +4 -16
- package/dist/es5/lib/loader-utils/normalize-loader.js.map +1 -1
- package/dist/es5/lib/loader-utils/option-defaults.js +2 -3
- package/dist/es5/lib/loader-utils/option-defaults.js.map +1 -1
- package/dist/es5/lib/loader-utils/option-utils.js +10 -38
- package/dist/es5/lib/loader-utils/option-utils.js.map +1 -1
- package/dist/es5/lib/progress/fetch-progress.js +6 -35
- package/dist/es5/lib/progress/fetch-progress.js.map +1 -1
- package/dist/es5/lib/utils/log.js +0 -1
- package/dist/es5/lib/utils/log.js.map +1 -1
- package/dist/es5/lib/utils/mime-type-utils.js +1 -4
- package/dist/es5/lib/utils/mime-type-utils.js.map +1 -1
- package/dist/es5/lib/utils/resource-utils.js +1 -11
- package/dist/es5/lib/utils/resource-utils.js.map +1 -1
- package/dist/es5/lib/utils/response-utils.js +1 -47
- package/dist/es5/lib/utils/response-utils.js.map +1 -1
- package/dist/es5/null-loader.js +32 -67
- package/dist/es5/null-loader.js.map +1 -1
- package/dist/es5/workers/null-worker.js +0 -2
- package/dist/es5/workers/null-worker.js.map +1 -1
- package/dist/esm/bundle.js +1 -1
- package/dist/esm/bundle.js.map +1 -1
- package/dist/esm/core-addons/write-file-browser.js.map +1 -1
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/iterators/batch-iterators/timed-batch-iterator.js +1 -3
- package/dist/esm/iterators/batch-iterators/timed-batch-iterator.js.map +1 -1
- package/dist/esm/iterators/make-iterator/make-array-buffer-iterator.js +5 -2
- package/dist/esm/iterators/make-iterator/make-array-buffer-iterator.js.map +1 -1
- package/dist/esm/iterators/make-iterator/make-blob-iterator.js +1 -1
- package/dist/esm/iterators/make-iterator/make-blob-iterator.js.map +1 -1
- package/dist/esm/iterators/make-iterator/make-iterator.js +1 -5
- package/dist/esm/iterators/make-iterator/make-iterator.js.map +1 -1
- package/dist/esm/iterators/make-iterator/make-stream-iterator.js +1 -5
- package/dist/esm/iterators/make-iterator/make-stream-iterator.js.map +1 -1
- package/dist/esm/iterators/make-iterator/make-string-iterator.js +2 -1
- package/dist/esm/iterators/make-iterator/make-string-iterator.js.map +1 -1
- package/dist/esm/iterators/make-stream/make-dom-stream.js +3 -6
- package/dist/esm/iterators/make-stream/make-dom-stream.js.map +1 -1
- package/dist/esm/iterators/make-stream/make-node-stream.js +0 -18
- package/dist/esm/iterators/make-stream/make-node-stream.js.map +1 -1
- package/dist/esm/javascript-utils/is-type.js +4 -2
- package/dist/esm/javascript-utils/is-type.js.map +1 -1
- package/dist/esm/lib/api/encode.js +8 -15
- package/dist/esm/lib/api/encode.js.map +1 -1
- package/dist/esm/lib/api/load-in-batches.js +1 -2
- package/dist/esm/lib/api/load-in-batches.js.map +1 -1
- package/dist/esm/lib/api/load.js +2 -1
- package/dist/esm/lib/api/load.js.map +1 -1
- package/dist/esm/lib/api/loader-options.js.map +1 -1
- package/dist/esm/lib/api/parse-in-batches.js +12 -12
- package/dist/esm/lib/api/parse-in-batches.js.map +1 -1
- package/dist/esm/lib/api/parse-sync.js +3 -5
- package/dist/esm/lib/api/parse-sync.js.map +1 -1
- package/dist/esm/lib/api/parse.js +5 -5
- package/dist/esm/lib/api/parse.js.map +1 -1
- package/dist/esm/lib/api/register-loaders.js +1 -2
- package/dist/esm/lib/api/register-loaders.js.map +1 -1
- package/dist/esm/lib/api/save.js.map +1 -1
- package/dist/esm/lib/api/select-loader.js +17 -35
- package/dist/esm/lib/api/select-loader.js.map +1 -1
- package/dist/esm/lib/common.js.map +1 -1
- package/dist/esm/lib/fetch/fetch-error-message.js +0 -3
- package/dist/esm/lib/fetch/fetch-error-message.js.map +1 -1
- package/dist/esm/lib/fetch/fetch-file.js +1 -3
- package/dist/esm/lib/fetch/fetch-file.js.map +1 -1
- package/dist/esm/lib/fetch/read-array-buffer.js +3 -6
- package/dist/esm/lib/fetch/read-array-buffer.js.map +1 -1
- package/dist/esm/lib/fetch/read-file.js +4 -2
- package/dist/esm/lib/fetch/read-file.js.map +1 -1
- package/dist/esm/lib/fetch/write-file.js +1 -4
- package/dist/esm/lib/fetch/write-file.js.map +1 -1
- package/dist/esm/lib/filesystems/browser-filesystem.js +6 -19
- package/dist/esm/lib/filesystems/browser-filesystem.js.map +1 -1
- package/dist/esm/lib/filesystems/filesystem.js.map +1 -1
- package/dist/esm/lib/filesystems/read-array-buffer.js +2 -1
- package/dist/esm/lib/filesystems/read-array-buffer.js.map +1 -1
- package/dist/esm/lib/init.js +3 -2
- package/dist/esm/lib/init.js.map +1 -1
- package/dist/esm/lib/loader-utils/check-errors.js +2 -5
- package/dist/esm/lib/loader-utils/check-errors.js.map +1 -1
- package/dist/esm/lib/loader-utils/get-data.js +3 -23
- package/dist/esm/lib/loader-utils/get-data.js.map +1 -1
- package/dist/esm/lib/loader-utils/loader-context.js +4 -6
- package/dist/esm/lib/loader-utils/loader-context.js.map +1 -1
- package/dist/esm/lib/loader-utils/loggers.js +18 -13
- package/dist/esm/lib/loader-utils/loggers.js.map +1 -1
- package/dist/esm/lib/loader-utils/normalize-loader.js +6 -9
- package/dist/esm/lib/loader-utils/normalize-loader.js.map +1 -1
- package/dist/esm/lib/loader-utils/option-defaults.js +2 -0
- package/dist/esm/lib/loader-utils/option-defaults.js.map +1 -1
- package/dist/esm/lib/loader-utils/option-utils.js +14 -14
- package/dist/esm/lib/loader-utils/option-utils.js.map +1 -1
- package/dist/esm/lib/progress/fetch-progress.js +5 -10
- package/dist/esm/lib/progress/fetch-progress.js.map +1 -1
- package/dist/esm/lib/utils/log.js +1 -0
- package/dist/esm/lib/utils/log.js.map +1 -1
- package/dist/esm/lib/utils/mime-type-utils.js +4 -4
- package/dist/esm/lib/utils/mime-type-utils.js.map +1 -1
- package/dist/esm/lib/utils/resource-utils.js +2 -7
- package/dist/esm/lib/utils/resource-utils.js.map +1 -1
- package/dist/esm/lib/utils/response-utils.js +5 -18
- package/dist/esm/lib/utils/response-utils.js.map +1 -1
- package/dist/esm/null-loader.js +2 -1
- package/dist/esm/null-loader.js.map +1 -1
- package/dist/esm/workers/null-worker.js.map +1 -1
- package/dist/iterators/make-stream/make-dom-stream.d.ts.map +1 -1
- package/dist/iterators/make-stream/make-dom-stream.js +1 -0
- package/dist/lib/loader-utils/loggers.d.ts +2 -1
- package/dist/lib/loader-utils/loggers.d.ts.map +1 -1
- package/dist/null-worker.js +1 -1
- package/package.json +4 -4
- package/src/iterators/make-stream/make-dom-stream.ts +1 -0
|
@@ -5,7 +5,9 @@ import { getLoaderContext } from '../loader-utils/loader-context';
|
|
|
5
5
|
import { getAsyncIterableFromData } from '../loader-utils/get-data';
|
|
6
6
|
import { getResourceUrlAndType } from '../utils/resource-utils';
|
|
7
7
|
import { selectLoader } from './select-loader';
|
|
8
|
+
|
|
8
9
|
import { parse } from './parse';
|
|
10
|
+
|
|
9
11
|
export async function parseInBatches(data, loaders, options, context) {
|
|
10
12
|
assert(!context || typeof context === 'object');
|
|
11
13
|
|
|
@@ -14,20 +16,21 @@ export async function parseInBatches(data, loaders, options, context) {
|
|
|
14
16
|
options = loaders;
|
|
15
17
|
loaders = undefined;
|
|
16
18
|
}
|
|
17
|
-
|
|
18
19
|
data = await data;
|
|
19
20
|
options = options || {};
|
|
21
|
+
|
|
20
22
|
const {
|
|
21
23
|
url
|
|
22
24
|
} = getResourceUrlAndType(data);
|
|
23
|
-
const loader = await selectLoader(data, loaders, options);
|
|
24
25
|
|
|
26
|
+
const loader = await selectLoader(data, loaders, options);
|
|
25
27
|
if (!loader) {
|
|
26
28
|
return null;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
options = normalizeOptions(options, loader, loaders, url);
|
|
30
|
-
context = getLoaderContext(
|
|
32
|
+
context = getLoaderContext(
|
|
33
|
+
{
|
|
31
34
|
url,
|
|
32
35
|
parseInBatches,
|
|
33
36
|
parse,
|
|
@@ -42,7 +45,6 @@ async function parseWithLoaderInBatches(loader, data, options, context) {
|
|
|
42
45
|
if (!options.metadata) {
|
|
43
46
|
return outputIterator;
|
|
44
47
|
}
|
|
45
|
-
|
|
46
48
|
const metadataBatch = {
|
|
47
49
|
batchType: 'metadata',
|
|
48
50
|
metadata: {
|
|
@@ -52,17 +54,16 @@ async function parseWithLoaderInBatches(loader, data, options, context) {
|
|
|
52
54
|
data: [],
|
|
53
55
|
bytesUsed: 0
|
|
54
56
|
};
|
|
55
|
-
|
|
56
57
|
async function* makeMetadataBatchIterator(iterator) {
|
|
57
58
|
yield metadataBatch;
|
|
58
59
|
yield* iterator;
|
|
59
60
|
}
|
|
60
|
-
|
|
61
61
|
return makeMetadataBatchIterator(outputIterator);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
async function parseToOutputIterator(loader, data, options, context) {
|
|
65
65
|
const inputIterator = await getAsyncIterableFromData(data, options);
|
|
66
|
+
|
|
66
67
|
const transformedIterator = await applyInputTransforms(inputIterator, (options === null || options === void 0 ? void 0 : options.transforms) || []);
|
|
67
68
|
|
|
68
69
|
if (loader.parseInBatches) {
|
|
@@ -71,7 +72,9 @@ async function parseToOutputIterator(loader, data, options, context) {
|
|
|
71
72
|
|
|
72
73
|
async function* parseChunkInBatches() {
|
|
73
74
|
const arrayBuffer = await concatenateArrayBuffersAsync(transformedIterator);
|
|
74
|
-
const parsedData = await parse(arrayBuffer, loader,
|
|
75
|
+
const parsedData = await parse(arrayBuffer, loader,
|
|
76
|
+
{
|
|
77
|
+
...options,
|
|
75
78
|
mimeType: loader.mimeTypes[0]
|
|
76
79
|
}, context);
|
|
77
80
|
const batch = {
|
|
@@ -83,17 +86,14 @@ async function parseToOutputIterator(loader, data, options, context) {
|
|
|
83
86
|
};
|
|
84
87
|
yield batch;
|
|
85
88
|
}
|
|
86
|
-
|
|
87
89
|
return parseChunkInBatches();
|
|
88
90
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
+
async function applyInputTransforms(inputIterator) {
|
|
92
|
+
let transforms = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
91
93
|
let iteratorChain = inputIterator;
|
|
92
|
-
|
|
93
94
|
for await (const transformBatches of transforms) {
|
|
94
95
|
iteratorChain = transformBatches(iteratorChain);
|
|
95
96
|
}
|
|
96
|
-
|
|
97
97
|
return iteratorChain;
|
|
98
98
|
}
|
|
99
99
|
//# sourceMappingURL=parse-in-batches.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"parse-in-batches.js","names":["assert","concatenateArrayBuffersAsync","isLoaderObject","normalizeOptions","getLoaderContext","getAsyncIterableFromData","getResourceUrlAndType","selectLoader","parse","parseInBatches","data","loaders","options","context","Array","isArray","undefined","url","loader","parseWithLoaderInBatches","outputIterator","parseToOutputIterator","metadata","metadataBatch","batchType","_loader","_context","bytesUsed","makeMetadataBatchIterator","iterator","inputIterator","transformedIterator","applyInputTransforms","transforms","parseChunkInBatches","arrayBuffer","parsedData","mimeType","mimeTypes","batch","shape","length","iteratorChain","transformBatches"],"sources":["../../../../src/lib/api/parse-in-batches.ts"],"sourcesContent":["import type {Batch} from '@loaders.gl/schema';\nimport type {\n BatchableDataType,\n Loader,\n LoaderWithParser,\n LoaderContext,\n LoaderOptions\n} from '@loaders.gl/loader-utils';\nimport {assert, concatenateArrayBuffersAsync} from '@loaders.gl/loader-utils';\nimport {isLoaderObject} from '../loader-utils/normalize-loader';\nimport {normalizeOptions} from '../loader-utils/option-utils';\nimport {getLoaderContext} from '../loader-utils/loader-context';\nimport {getAsyncIterableFromData} from '../loader-utils/get-data';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {selectLoader} from './select-loader';\n\n// Ensure `parse` is available in context if loader falls back to `parse`\nimport {parse} from './parse';\n\n/**\n * Parses `data` using a specified loader\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\nexport async function parseInBatches(\n data: BatchableDataType,\n loaders?: Loader | Loader[] | LoaderOptions,\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise<AsyncIterable<any>> {\n assert(!context || typeof context === 'object'); // parseInBatches no longer accepts final url\n\n // Signature: parseInBatches(data, options, url) - Uses registered loaders\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined; // context not supported in short signature\n options = loaders as LoaderOptions;\n loaders = undefined;\n }\n\n data = await data; // Resolve any promise\n options = options || {};\n\n // Extract a url for auto detection\n const {url} = getResourceUrlAndType(data);\n\n // Chooses a loader and normalizes it\n // Note - only uses URL and contentType for streams and iterator inputs\n const loader = await selectLoader(data as ArrayBuffer, loaders as Loader[], options);\n // Note: if options.nothrow was set, it is possible that no loader was found, if so just return null\n if (!loader) {\n // @ts-ignore\n return null;\n }\n\n // Normalize options\n // @ts-ignore\n options = normalizeOptions(options, loader, loaders, url);\n // @ts-ignore\n context = getLoaderContext(\n // @ts-ignore\n {url, parseInBatches, parse, loaders: loaders as Loader[]},\n options,\n context\n );\n\n return await parseWithLoaderInBatches(loader as LoaderWithParser, data, options, context);\n}\n\n/**\n * Loader has been selected and context has been prepared, see if we need to emit a metadata batch\n */\nasync function parseWithLoaderInBatches(\n loader: LoaderWithParser,\n data: BatchableDataType,\n options: LoaderOptions,\n context: LoaderContext\n): Promise<AsyncIterable<any>> {\n const outputIterator = await parseToOutputIterator(loader, data, options, context);\n\n // Generate metadata batch if requested\n if (!options.metadata) {\n return outputIterator;\n }\n\n const metadataBatch = {\n batchType: 'metadata',\n metadata: {\n _loader: loader,\n _context: context\n },\n // Populate with some default fields to avoid crashing\n data: [],\n bytesUsed: 0\n };\n\n async function* makeMetadataBatchIterator(iterator) {\n yield metadataBatch;\n yield* iterator;\n }\n\n return makeMetadataBatchIterator(outputIterator);\n}\n\n/**\n * Prep work is done, now it is time to start parsing into an output operator\n * The approach depends on which parse function the loader exposes\n * `parseInBatches` (preferred), `parse` (fallback)\n */\nasync function parseToOutputIterator(\n loader: LoaderWithParser,\n data: BatchableDataType,\n options: LoaderOptions,\n context: LoaderContext\n): Promise<AsyncIterable<any>> {\n // Get an iterator from the input\n const inputIterator = await getAsyncIterableFromData(data, options);\n\n // Apply any iterator transforms (options.transforms)\n const transformedIterator = await applyInputTransforms(inputIterator, options?.transforms || []);\n\n // If loader supports parseInBatches, we are done\n if (loader.parseInBatches) {\n return loader.parseInBatches(transformedIterator, options, context);\n }\n\n // Fallback: load atomically using `parse` concatenating input iterator into single chunk\n async function* parseChunkInBatches() {\n const arrayBuffer = await concatenateArrayBuffersAsync(transformedIterator);\n // Call `parse` instead of `loader.parse` to ensure we can call workers etc.\n const parsedData = await parse(\n arrayBuffer,\n loader,\n // TODO - Hack: supply loaders MIME type to ensure we match it\n {...options, mimeType: loader.mimeTypes[0]},\n context\n );\n // yield a single batch, the output from loader.parse()\n // TODO - run through batch builder to apply options etc...\n const batch: Batch = {\n mimeType: loader.mimeTypes[0],\n shape: Array.isArray(parsedData) ? 'row-table' : 'unknown',\n batchType: 'data',\n data: parsedData,\n length: Array.isArray(parsedData) ? parsedData.length : 1\n };\n yield batch;\n }\n\n return parseChunkInBatches();\n}\n\ntype TransformBatches = (\n asyncIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>\n) => AsyncIterable<ArrayBuffer>;\n\n/**\n * Create an iterator chain with any transform iterators (crypto, decompression)\n * @param inputIterator\n * @param options\n */\nasync function applyInputTransforms(\n inputIterator: AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>,\n transforms: TransformBatches[] = []\n): Promise<AsyncIterable<ArrayBuffer> | Iterable<ArrayBuffer>> {\n let iteratorChain = inputIterator;\n for await (const transformBatches of transforms) {\n iteratorChain = transformBatches(iteratorChain);\n }\n return iteratorChain;\n}\n"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { normalizeOptions } from '../loader-utils/option-utils';
|
|
|
5
5
|
import { getArrayBufferOrStringFromDataSync } from '../loader-utils/get-data';
|
|
6
6
|
import { getLoaderContext, getLoadersFromContext } from '../loader-utils/loader-context';
|
|
7
7
|
import { getResourceUrlAndType } from '../utils/resource-utils';
|
|
8
|
+
|
|
8
9
|
export function parseSync(data, loaders, options, context) {
|
|
9
10
|
assert(!context || typeof context === 'object');
|
|
10
11
|
|
|
@@ -13,25 +14,23 @@ export function parseSync(data, loaders, options, context) {
|
|
|
13
14
|
options = loaders;
|
|
14
15
|
loaders = undefined;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
17
|
options = options || {};
|
|
18
|
+
|
|
18
19
|
const typedLoaders = loaders;
|
|
19
20
|
const candidateLoaders = getLoadersFromContext(typedLoaders, context);
|
|
20
21
|
const loader = selectLoaderSync(data, candidateLoaders, options);
|
|
21
|
-
|
|
22
22
|
if (!loader) {
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
options = normalizeOptions(options, loader, candidateLoaders);
|
|
27
|
+
|
|
27
28
|
const {
|
|
28
29
|
url
|
|
29
30
|
} = getResourceUrlAndType(data);
|
|
30
|
-
|
|
31
31
|
const parse = () => {
|
|
32
32
|
throw new Error('parseSync called parse');
|
|
33
33
|
};
|
|
34
|
-
|
|
35
34
|
context = getLoaderContext({
|
|
36
35
|
url,
|
|
37
36
|
parseSync,
|
|
@@ -43,7 +42,6 @@ export function parseSync(data, loaders, options, context) {
|
|
|
43
42
|
|
|
44
43
|
function parseWithLoaderSync(loader, data, options, context) {
|
|
45
44
|
data = getArrayBufferOrStringFromDataSync(data, loader, options);
|
|
46
|
-
|
|
47
45
|
if (loader.parseTextSync && typeof data === 'string') {
|
|
48
46
|
return loader.parseTextSync(data, options);
|
|
49
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"parse-sync.js","names":["assert","selectLoaderSync","isLoaderObject","normalizeOptions","getArrayBufferOrStringFromDataSync","getLoaderContext","getLoadersFromContext","getResourceUrlAndType","parseSync","data","loaders","options","context","Array","isArray","undefined","typedLoaders","candidateLoaders","loader","url","parse","Error","parseWithLoaderSync","parseTextSync","ArrayBuffer","name"],"sources":["../../../../src/lib/api/parse-sync.ts"],"sourcesContent":["import type {\n SyncDataType,\n Loader,\n LoaderWithParser,\n LoaderContext,\n LoaderOptions\n} from '@loaders.gl/loader-utils';\nimport {assert} from '@loaders.gl/loader-utils';\nimport {selectLoaderSync} from './select-loader';\nimport {isLoaderObject} from '../loader-utils/normalize-loader';\nimport {normalizeOptions} from '../loader-utils/option-utils';\nimport {getArrayBufferOrStringFromDataSync} from '../loader-utils/get-data';\nimport {getLoaderContext, getLoadersFromContext} from '../loader-utils/loader-context';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\n\n/**\n * Parses `data` synchronously using a specified loader\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\nexport function parseSync(\n data: SyncDataType,\n loaders?: Loader | Loader[] | LoaderOptions,\n options?: LoaderOptions,\n context?: LoaderContext\n): any {\n assert(!context || typeof context === 'object'); // parseSync no longer accepts final url\n\n // Signature: parseSync(data, options)\n // Uses registered loaders\n if (!Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined; // context not supported in short signature\n options = loaders as LoaderOptions;\n loaders = undefined;\n }\n\n options = options || {};\n\n // Chooses a loader (and normalizes it)\n // Also use any loaders in the context, new loaders take priority\n const typedLoaders = loaders as Loader | Loader[] | undefined;\n const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n const loader = selectLoaderSync(data, candidateLoaders, options);\n // Note: if nothrow option was set, it is possible that no loader was found, if so just return null\n if (!loader) {\n return null;\n }\n\n // Normalize options\n options = normalizeOptions(options, loader, candidateLoaders);\n\n // Extract a url for auto detection\n const {url} = getResourceUrlAndType(data);\n\n const parse = () => {\n throw new Error('parseSync called parse');\n };\n context = getLoaderContext({url, parseSync, parse, loaders: loaders as Loader[]}, options);\n\n return parseWithLoaderSync(loader as LoaderWithParser, data, options, context);\n}\n\n// TODO - should accept loader.parseSync/parse and generate 1 chunk asyncIterator\nfunction parseWithLoaderSync(\n loader: LoaderWithParser,\n data: SyncDataType,\n options: LoaderOptions,\n context: LoaderContext\n) {\n data = getArrayBufferOrStringFromDataSync(data, loader, options);\n\n if (loader.parseTextSync && typeof data === 'string') {\n return loader.parseTextSync(data, options); // , context, loader);\n }\n\n if (loader.parseSync && data instanceof ArrayBuffer) {\n return loader.parseSync(data, options, context); // , loader);\n }\n\n // TBD - If synchronous parser not available, return null\n throw new Error(\n `${loader.name} loader: 'parseSync' not supported by this loader, use 'parse' instead. ${\n context.url || ''\n }`\n );\n}\n"],"mappings":"AAOA,SAAQA,MAAM,QAAO,0BAA0B;AAC/C,SAAQC,gBAAgB,QAAO,iBAAiB;AAChD,SAAQC,cAAc,QAAO,kCAAkC;AAC/D,SAAQC,gBAAgB,QAAO,8BAA8B;AAC7D,SAAQC,kCAAkC,QAAO,0BAA0B;AAC3E,SAAQC,gBAAgB,EAAEC,qBAAqB,QAAO,gCAAgC;AACtF,SAAQC,qBAAqB,QAAO,yBAAyB;;AAS7D,OAAO,SAASC,SAAS,CACvBC,IAAkB,EAClBC,OAA2C,EAC3CC,OAAuB,EACvBC,OAAuB,EAClB;EACLZ,MAAM,CAAC,CAACY,OAAO,IAAI,OAAOA,OAAO,KAAK,QAAQ,CAAC;;EAI/C,IAAI,CAACC,KAAK,CAACC,OAAO,CAACJ,OAAO,CAAC,IAAI,CAACR,cAAc,CAACQ,OAAO,CAAC,EAAE;IACvDE,OAAO,GAAGG,SAAS;IACnBJ,OAAO,GAAGD,OAAwB;IAClCA,OAAO,GAAGK,SAAS;EACrB;EAEAJ,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;;EAIvB,MAAMK,YAAY,GAAGN,OAAwC;EAC7D,MAAMO,gBAAgB,GAAGX,qBAAqB,CAACU,YAAY,EAAEJ,OAAO,CAAC;EACrE,MAAMM,MAAM,GAAGjB,gBAAgB,CAACQ,IAAI,EAAEQ,gBAAgB,EAAEN,OAAO,CAAC;EAEhE,IAAI,CAACO,MAAM,EAAE;IACX,OAAO,IAAI;EACb;;EAGAP,OAAO,GAAGR,gBAAgB,CAACQ,OAAO,EAAEO,MAAM,EAAED,gBAAgB,CAAC;;EAG7D,MAAM;IAACE;EAAG,CAAC,GAAGZ,qBAAqB,CAACE,IAAI,CAAC;EAEzC,MAAMW,KAAK,GAAG,MAAM;IAClB,MAAM,IAAIC,KAAK,CAAC,wBAAwB,CAAC;EAC3C,CAAC;EACDT,OAAO,GAAGP,gBAAgB,CAAC;IAACc,GAAG;IAAEX,SAAS;IAAEY,KAAK;IAAEV,OAAO,EAAEA;EAAmB,CAAC,EAAEC,OAAO,CAAC;EAE1F,OAAOW,mBAAmB,CAACJ,MAAM,EAAsBT,IAAI,EAAEE,OAAO,EAAEC,OAAO,CAAC;AAChF;;AAGA,SAASU,mBAAmB,CAC1BJ,MAAwB,EACxBT,IAAkB,EAClBE,OAAsB,EACtBC,OAAsB,EACtB;EACAH,IAAI,GAAGL,kCAAkC,CAACK,IAAI,EAAES,MAAM,EAAEP,OAAO,CAAC;EAEhE,IAAIO,MAAM,CAACK,aAAa,IAAI,OAAOd,IAAI,KAAK,QAAQ,EAAE;IACpD,OAAOS,MAAM,CAACK,aAAa,CAACd,IAAI,EAAEE,OAAO,CAAC;EAC5C;;EAEA,IAAIO,MAAM,CAACV,SAAS,IAAIC,IAAI,YAAYe,WAAW,EAAE;IACnD,OAAON,MAAM,CAACV,SAAS,CAACC,IAAI,EAAEE,OAAO,EAAEC,OAAO,CAAC;EACjD;;EAGA,MAAM,IAAIS,KAAK,WACVH,MAAM,CAACO,IAAI,qFACZb,OAAO,CAACO,GAAG,IAAI,EAAE,EAEpB;AACH"}
|
|
@@ -7,6 +7,7 @@ import { getArrayBufferOrStringFromData } from '../loader-utils/get-data';
|
|
|
7
7
|
import { getLoaderContext, getLoadersFromContext } from '../loader-utils/loader-context';
|
|
8
8
|
import { getResourceUrlAndType } from '../utils/resource-utils';
|
|
9
9
|
import { selectLoader } from './select-loader';
|
|
10
|
+
|
|
10
11
|
export async function parse(data, loaders, options, context) {
|
|
11
12
|
assert(!context || typeof context === 'object');
|
|
12
13
|
|
|
@@ -15,21 +16,22 @@ export async function parse(data, loaders, options, context) {
|
|
|
15
16
|
options = loaders;
|
|
16
17
|
loaders = undefined;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
19
|
data = await data;
|
|
20
20
|
options = options || {};
|
|
21
|
+
|
|
21
22
|
const {
|
|
22
23
|
url
|
|
23
24
|
} = getResourceUrlAndType(data);
|
|
25
|
+
|
|
24
26
|
const typedLoaders = loaders;
|
|
25
27
|
const candidateLoaders = getLoadersFromContext(typedLoaders, context);
|
|
26
28
|
const loader = await selectLoader(data, candidateLoaders, options);
|
|
27
|
-
|
|
28
29
|
if (!loader) {
|
|
29
30
|
return null;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
options = normalizeOptions(options, loader, candidateLoaders, url);
|
|
34
|
+
|
|
33
35
|
context = getLoaderContext({
|
|
34
36
|
url,
|
|
35
37
|
parse,
|
|
@@ -40,7 +42,6 @@ export async function parse(data, loaders, options, context) {
|
|
|
40
42
|
|
|
41
43
|
async function parseWithLoader(loader, data, options, context) {
|
|
42
44
|
validateWorkerVersion(loader);
|
|
43
|
-
|
|
44
45
|
if (isResponse(data)) {
|
|
45
46
|
const response = data;
|
|
46
47
|
const {
|
|
@@ -62,7 +63,6 @@ async function parseWithLoader(loader, data, options, context) {
|
|
|
62
63
|
url
|
|
63
64
|
};
|
|
64
65
|
}
|
|
65
|
-
|
|
66
66
|
data = await getArrayBufferOrStringFromData(data, loader, options);
|
|
67
67
|
|
|
68
68
|
if (loader.parseTextSync && typeof data === 'string') {
|
|
@@ -77,12 +77,12 @@ async function parseWithLoader(loader, data, options, context) {
|
|
|
77
77
|
if (loader.parseText && typeof data === 'string') {
|
|
78
78
|
return await loader.parseText(data, options, context, loader);
|
|
79
79
|
}
|
|
80
|
-
|
|
81
80
|
if (loader.parse) {
|
|
82
81
|
return await loader.parse(data, options, context, loader);
|
|
83
82
|
}
|
|
84
83
|
|
|
85
84
|
assert(!loader.parseSync);
|
|
85
|
+
|
|
86
86
|
throw new Error("".concat(loader.id, " loader - no parser found and worker is disabled"));
|
|
87
87
|
}
|
|
88
88
|
//# sourceMappingURL=parse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"parse.js","names":["assert","validateWorkerVersion","parseWithWorker","canParseWithWorker","isLoaderObject","isResponse","normalizeOptions","getArrayBufferOrStringFromData","getLoaderContext","getLoadersFromContext","getResourceUrlAndType","selectLoader","parse","data","loaders","options","context","Array","isArray","undefined","url","typedLoaders","candidateLoaders","loader","parseWithLoader","response","ok","redirected","status","statusText","type","headers","Object","fromEntries","entries","parseTextSync","dataType","parseText","parseSync","Error","id"],"sources":["../../../../src/lib/api/parse.ts"],"sourcesContent":["import type {DataType, Loader, LoaderContext, LoaderOptions} from '@loaders.gl/loader-utils';\nimport {assert, validateWorkerVersion} from '@loaders.gl/worker-utils';\nimport {parseWithWorker, canParseWithWorker} from '@loaders.gl/loader-utils';\nimport {isLoaderObject} from '../loader-utils/normalize-loader';\nimport {isResponse} from '../../javascript-utils/is-type';\nimport {normalizeOptions} from '../loader-utils/option-utils';\nimport {getArrayBufferOrStringFromData} from '../loader-utils/get-data';\nimport {getLoaderContext, getLoadersFromContext} from '../loader-utils/loader-context';\nimport {getResourceUrlAndType} from '../utils/resource-utils';\nimport {selectLoader} from './select-loader';\n\n/**\n * Parses `data` using a specified loader\n * @param data\n * @param loaders\n * @param options\n * @param context\n */\nexport async function parse(\n data: DataType | Promise<DataType>,\n loaders?: Loader | Loader[] | LoaderOptions,\n options?: LoaderOptions,\n context?: LoaderContext\n): Promise<any> {\n assert(!context || typeof context === 'object'); // parse no longer accepts final url\n\n // Signature: parse(data, options, context | url)\n // Uses registered loaders\n if (loaders && !Array.isArray(loaders) && !isLoaderObject(loaders)) {\n context = undefined; // context not supported in short signature\n options = loaders as LoaderOptions;\n loaders = undefined;\n }\n\n data = await data; // Resolve any promise\n options = options || {};\n\n // Extract a url for auto detection\n const {url} = getResourceUrlAndType(data);\n\n // Chooses a loader (and normalizes it)\n // Also use any loaders in the context, new loaders take priority\n const typedLoaders = loaders as Loader | Loader[] | undefined;\n const candidateLoaders = getLoadersFromContext(typedLoaders, context);\n // todo hacky type cast\n const loader = await selectLoader(data as ArrayBuffer, candidateLoaders, options);\n // Note: if no loader was found, if so just return null\n if (!loader) {\n return null;\n }\n\n // Normalize options\n options = normalizeOptions(options, loader, candidateLoaders, url);\n\n // Get a context (if already present, will be unchanged)\n context = getLoaderContext({url, parse, loaders: candidateLoaders}, options, context);\n\n return await parseWithLoader(loader, data, options, context);\n}\n\n// TODO: support progress and abort\n// TODO - should accept loader.parseAsyncIterator and concatenate.\nasync function parseWithLoader(loader, data, options, context) {\n validateWorkerVersion(loader);\n\n if (isResponse(data)) {\n // Serialize to support passing the response to web worker\n const response = data as Response;\n const {ok, redirected, status, statusText, type, url} = response;\n const headers = Object.fromEntries(response.headers.entries());\n context.response = {headers, ok, redirected, status, statusText, type, url};\n }\n\n data = await getArrayBufferOrStringFromData(data, loader, options);\n\n // First check for synchronous text parser, wrap results in promises\n if (loader.parseTextSync && typeof data === 'string') {\n options.dataType = 'text';\n return loader.parseTextSync(data, options, context, loader);\n }\n\n // If we have a workerUrl and the loader can parse the given options efficiently in a worker\n if (canParseWithWorker(loader, options)) {\n return await parseWithWorker(loader, data, options, context, parse);\n }\n\n // Check for asynchronous parser\n if (loader.parseText && typeof data === 'string') {\n return await loader.parseText(data, options, context, loader);\n }\n\n if (loader.parse) {\n return await loader.parse(data, options, context, loader);\n }\n\n // This should not happen, all sync loaders should also offer `parse` function\n assert(!loader.parseSync);\n\n // TBD - If asynchronous parser not available, return null\n throw new Error(`${loader.id} loader - no parser found and worker is disabled`);\n}\n"],"mappings":"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"}
|
|
@@ -10,10 +10,8 @@ const getGlobalLoaderRegistry = () => {
|
|
|
10
10
|
export function registerLoaders(loaders) {
|
|
11
11
|
const loaderRegistry = getGlobalLoaderRegistry();
|
|
12
12
|
loaders = Array.isArray(loaders) ? loaders : [loaders];
|
|
13
|
-
|
|
14
13
|
for (const loader of loaders) {
|
|
15
14
|
const normalizedLoader = normalizeLoader(loader);
|
|
16
|
-
|
|
17
15
|
if (!loaderRegistry.find(registeredLoader => normalizedLoader === registeredLoader)) {
|
|
18
16
|
loaderRegistry.unshift(normalizedLoader);
|
|
19
17
|
}
|
|
@@ -22,6 +20,7 @@ export function registerLoaders(loaders) {
|
|
|
22
20
|
export function getRegisteredLoaders() {
|
|
23
21
|
return getGlobalLoaderRegistry();
|
|
24
22
|
}
|
|
23
|
+
|
|
25
24
|
export function _unregisterLoaders() {
|
|
26
25
|
const state = getGlobalLoaderState();
|
|
27
26
|
state.loaderRegistry = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"register-loaders.js","names":["normalizeLoader","getGlobalLoaderState","getGlobalLoaderRegistry","state","loaderRegistry","registerLoaders","loaders","Array","isArray","loader","normalizedLoader","find","registeredLoader","unshift","getRegisteredLoaders","_unregisterLoaders"],"sources":["../../../../src/lib/api/register-loaders.ts"],"sourcesContent":["import {Loader} from '@loaders.gl/loader-utils';\nimport {normalizeLoader} from '../loader-utils/normalize-loader';\nimport {getGlobalLoaderState} from '../loader-utils/option-utils';\n\n// Store global registered loaders on the global object to increase chances of cross loaders-version interoperability\n// This use case is not reliable but can help when testing new versions of loaders.gl with existing frameworks\nconst getGlobalLoaderRegistry = () => {\n const state = getGlobalLoaderState();\n state.loaderRegistry = state.loaderRegistry || [];\n return state.loaderRegistry;\n};\n\n/** Register a list of global loaders */\nexport function registerLoaders(loaders: Loader[]) {\n const loaderRegistry = getGlobalLoaderRegistry();\n\n loaders = Array.isArray(loaders) ? loaders : [loaders];\n\n for (const loader of loaders) {\n const normalizedLoader = normalizeLoader(loader);\n if (!loaderRegistry.find((registeredLoader) => normalizedLoader === registeredLoader)) {\n // add to the beginning of the loaderRegistry, so the last registeredLoader get picked\n loaderRegistry.unshift(normalizedLoader);\n }\n }\n}\n\nexport function getRegisteredLoaders(): Loader[] {\n return getGlobalLoaderRegistry();\n}\n\n/** @deprecated For testing only */\nexport function _unregisterLoaders() {\n const state = getGlobalLoaderState();\n state.loaderRegistry = [];\n}\n"],"mappings":"AACA,SAAQA,eAAe,QAAO,kCAAkC;AAChE,SAAQC,oBAAoB,QAAO,8BAA8B;;AAIjE,MAAMC,uBAAuB,GAAG,MAAM;EACpC,MAAMC,KAAK,GAAGF,oBAAoB,EAAE;EACpCE,KAAK,CAACC,cAAc,GAAGD,KAAK,CAACC,cAAc,IAAI,EAAE;EACjD,OAAOD,KAAK,CAACC,cAAc;AAC7B,CAAC;;AAGD,OAAO,SAASC,eAAe,CAACC,OAAiB,EAAE;EACjD,MAAMF,cAAc,GAAGF,uBAAuB,EAAE;EAEhDI,OAAO,GAAGC,KAAK,CAACC,OAAO,CAACF,OAAO,CAAC,GAAGA,OAAO,GAAG,CAACA,OAAO,CAAC;EAEtD,KAAK,MAAMG,MAAM,IAAIH,OAAO,EAAE;IAC5B,MAAMI,gBAAgB,GAAGV,eAAe,CAACS,MAAM,CAAC;IAChD,IAAI,CAACL,cAAc,CAACO,IAAI,CAAEC,gBAAgB,IAAKF,gBAAgB,KAAKE,gBAAgB,CAAC,EAAE;MAErFR,cAAc,CAACS,OAAO,CAACH,gBAAgB,CAAC;IAC1C;EACF;AACF;AAEA,OAAO,SAASI,oBAAoB,GAAa;EAC/C,OAAOZ,uBAAuB,EAAE;AAClC;;AAGA,OAAO,SAASa,kBAAkB,GAAG;EACnC,MAAMZ,KAAK,GAAGF,oBAAoB,EAAE;EACpCE,KAAK,CAACC,cAAc,GAAG,EAAE;AAC3B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"save.js","names":["encode","encodeSync","writeFile","writeFileSync","save","data","url","writer","options","encodedData","saveSync"],"sources":["../../../../src/lib/api/save.ts"],"sourcesContent":["import type {Writer, WriterOptions} from '@loaders.gl/loader-utils';\nimport {encode, encodeSync} from './encode';\nimport {writeFile, writeFileSync} from '../fetch/write-file';\n\nexport async function save(data, url, writer: Writer, options: WriterOptions) {\n const encodedData = await encode(data, writer, options);\n return await writeFile(url, encodedData);\n}\n\nexport function saveSync(data, url, writer, options) {\n const encodedData = encodeSync(data, writer, options);\n return writeFileSync(url, encodedData);\n}\n"],"mappings":"AACA,SAAQA,MAAM,EAAEC,UAAU,QAAO,UAAU;AAC3C,SAAQC,SAAS,EAAEC,aAAa,QAAO,qBAAqB;AAE5D,OAAO,eAAeC,IAAI,CAACC,IAAI,EAAEC,GAAG,EAAEC,MAAc,EAAEC,OAAsB,EAAE;EAC5E,MAAMC,WAAW,GAAG,MAAMT,MAAM,CAACK,IAAI,EAAEE,MAAM,EAAEC,OAAO,CAAC;EACvD,OAAO,MAAMN,SAAS,CAACI,GAAG,EAAEG,WAAW,CAAC;AAC1C;AAEA,OAAO,SAASC,QAAQ,CAACL,IAAI,EAAEC,GAAG,EAAEC,MAAM,EAAEC,OAAO,EAAE;EACnD,MAAMC,WAAW,GAAGR,UAAU,CAACI,IAAI,EAAEE,MAAM,EAAEC,OAAO,CAAC;EACrD,OAAOL,aAAa,CAACG,GAAG,EAAEG,WAAW,CAAC;AACxC"}
|
|
@@ -5,15 +5,19 @@ import { getResourceUrlAndType } from '../utils/resource-utils';
|
|
|
5
5
|
import { getRegisteredLoaders } from './register-loaders';
|
|
6
6
|
import { isBlob } from '../../javascript-utils/is-type';
|
|
7
7
|
const EXT_PATTERN = /\.([^.]+)$/;
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
export async function selectLoader(data) {
|
|
10
|
+
let loaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
11
|
+
let options = arguments.length > 2 ? arguments[2] : undefined;
|
|
12
|
+
let context = arguments.length > 3 ? arguments[3] : undefined;
|
|
9
13
|
if (!validHTTPResponse(data)) {
|
|
10
14
|
return null;
|
|
11
15
|
}
|
|
12
16
|
|
|
13
|
-
let loader = selectLoaderSync(data, loaders, {
|
|
17
|
+
let loader = selectLoaderSync(data, loaders, {
|
|
18
|
+
...options,
|
|
14
19
|
nothrow: true
|
|
15
20
|
}, context);
|
|
16
|
-
|
|
17
21
|
if (loader) {
|
|
18
22
|
return loader;
|
|
19
23
|
}
|
|
@@ -26,10 +30,13 @@ export async function selectLoader(data, loaders = [], options, context) {
|
|
|
26
30
|
if (!loader && !(options !== null && options !== void 0 && options.nothrow)) {
|
|
27
31
|
throw new Error(getNoValidLoaderMessage(data));
|
|
28
32
|
}
|
|
29
|
-
|
|
30
33
|
return loader;
|
|
31
34
|
}
|
|
32
|
-
|
|
35
|
+
|
|
36
|
+
export function selectLoaderSync(data) {
|
|
37
|
+
let loaders = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
38
|
+
let options = arguments.length > 2 ? arguments[2] : undefined;
|
|
39
|
+
let context = arguments.length > 3 ? arguments[3] : undefined;
|
|
33
40
|
if (!validHTTPResponse(data)) {
|
|
34
41
|
return null;
|
|
35
42
|
}
|
|
@@ -39,11 +46,9 @@ export function selectLoaderSync(data, loaders = [], options, context) {
|
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
let candidateLoaders = [];
|
|
42
|
-
|
|
43
49
|
if (loaders) {
|
|
44
50
|
candidateLoaders = candidateLoaders.concat(loaders);
|
|
45
51
|
}
|
|
46
|
-
|
|
47
52
|
if (!(options !== null && options !== void 0 && options.ignoreRegisteredLoaders)) {
|
|
48
53
|
candidateLoaders.push(...getRegisteredLoaders());
|
|
49
54
|
}
|
|
@@ -54,7 +59,6 @@ export function selectLoaderSync(data, loaders = [], options, context) {
|
|
|
54
59
|
if (!loader && !(options !== null && options !== void 0 && options.nothrow)) {
|
|
55
60
|
throw new Error(getNoValidLoaderMessage(data));
|
|
56
61
|
}
|
|
57
|
-
|
|
58
62
|
return loader;
|
|
59
63
|
}
|
|
60
64
|
|
|
@@ -74,19 +78,19 @@ function selectLoaderInternal(data, loaders, options, context) {
|
|
|
74
78
|
|
|
75
79
|
loader = loader || findLoaderByUrl(loaders, testUrl);
|
|
76
80
|
reason = reason || (loader ? "matched url ".concat(testUrl) : '');
|
|
81
|
+
|
|
77
82
|
loader = loader || findLoaderByMIMEType(loaders, type);
|
|
78
83
|
reason = reason || (loader ? "matched MIME type ".concat(type) : '');
|
|
84
|
+
|
|
79
85
|
loader = loader || findLoaderByInitialBytes(loaders, data);
|
|
80
86
|
reason = reason || (loader ? "matched initial data ".concat(getFirstCharacters(data)) : '');
|
|
87
|
+
|
|
81
88
|
loader = loader || findLoaderByMIMEType(loaders, options === null || options === void 0 ? void 0 : options.fallbackMimeType);
|
|
82
89
|
reason = reason || (loader ? "matched fallback MIME type ".concat(type) : '');
|
|
83
|
-
|
|
84
90
|
if (reason) {
|
|
85
91
|
var _loader;
|
|
86
|
-
|
|
87
92
|
log.log(1, "selectLoader selected ".concat((_loader = loader) === null || _loader === void 0 ? void 0 : _loader.name, ": ").concat(reason, "."));
|
|
88
93
|
}
|
|
89
|
-
|
|
90
94
|
return loader;
|
|
91
95
|
}
|
|
92
96
|
|
|
@@ -96,7 +100,6 @@ function validHTTPResponse(data) {
|
|
|
96
100
|
return false;
|
|
97
101
|
}
|
|
98
102
|
}
|
|
99
|
-
|
|
100
103
|
return true;
|
|
101
104
|
}
|
|
102
105
|
|
|
@@ -113,7 +116,6 @@ function getNoValidLoaderMessage(data) {
|
|
|
113
116
|
message += ')';
|
|
114
117
|
return message;
|
|
115
118
|
}
|
|
116
|
-
|
|
117
119
|
function normalizeLoaders(loaders) {
|
|
118
120
|
for (const loader of loaders) {
|
|
119
121
|
normalizeLoader(loader);
|
|
@@ -125,10 +127,8 @@ function findLoaderByUrl(loaders, url) {
|
|
|
125
127
|
const extension = match && match[1];
|
|
126
128
|
return extension ? findLoaderByExtension(loaders, extension) : null;
|
|
127
129
|
}
|
|
128
|
-
|
|
129
130
|
function findLoaderByExtension(loaders, extension) {
|
|
130
131
|
extension = extension.toLowerCase();
|
|
131
|
-
|
|
132
132
|
for (const loader of loaders) {
|
|
133
133
|
for (const loaderExtension of loader.extensions) {
|
|
134
134
|
if (loaderExtension.toLowerCase() === extension) {
|
|
@@ -136,10 +136,8 @@ function findLoaderByExtension(loaders, extension) {
|
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
-
|
|
140
139
|
return null;
|
|
141
140
|
}
|
|
142
|
-
|
|
143
141
|
function findLoaderByMIMEType(loaders, mimeType) {
|
|
144
142
|
for (const loader of loaders) {
|
|
145
143
|
if (loader.mimeTypes && loader.mimeTypes.includes(mimeType)) {
|
|
@@ -150,15 +148,12 @@ function findLoaderByMIMEType(loaders, mimeType) {
|
|
|
150
148
|
return loader;
|
|
151
149
|
}
|
|
152
150
|
}
|
|
153
|
-
|
|
154
151
|
return null;
|
|
155
152
|
}
|
|
156
|
-
|
|
157
153
|
function findLoaderByInitialBytes(loaders, data) {
|
|
158
154
|
if (!data) {
|
|
159
155
|
return null;
|
|
160
156
|
}
|
|
161
|
-
|
|
162
157
|
for (const loader of loaders) {
|
|
163
158
|
if (typeof data === 'string') {
|
|
164
159
|
if (testDataAgainstText(data, loader)) {
|
|
@@ -170,7 +165,6 @@ function findLoaderByInitialBytes(loaders, data) {
|
|
|
170
165
|
}
|
|
171
166
|
} else if (data instanceof ArrayBuffer) {
|
|
172
167
|
const byteOffset = 0;
|
|
173
|
-
|
|
174
168
|
if (testDataAgainstBinary(data, byteOffset, loader)) {
|
|
175
169
|
return loader;
|
|
176
170
|
}
|
|
@@ -179,40 +173,33 @@ function findLoaderByInitialBytes(loaders, data) {
|
|
|
179
173
|
|
|
180
174
|
return null;
|
|
181
175
|
}
|
|
182
|
-
|
|
183
176
|
function testDataAgainstText(data, loader) {
|
|
184
177
|
if (loader.testText) {
|
|
185
178
|
return loader.testText(data);
|
|
186
179
|
}
|
|
187
|
-
|
|
188
180
|
const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];
|
|
189
181
|
return tests.some(test => data.startsWith(test));
|
|
190
182
|
}
|
|
191
|
-
|
|
192
183
|
function testDataAgainstBinary(data, byteOffset, loader) {
|
|
193
184
|
const tests = Array.isArray(loader.tests) ? loader.tests : [loader.tests];
|
|
194
185
|
return tests.some(test => testBinary(data, byteOffset, loader, test));
|
|
195
186
|
}
|
|
196
|
-
|
|
197
187
|
function testBinary(data, byteOffset, loader, test) {
|
|
198
188
|
if (test instanceof ArrayBuffer) {
|
|
199
189
|
return compareArrayBuffers(test, data, test.byteLength);
|
|
200
190
|
}
|
|
201
|
-
|
|
202
191
|
switch (typeof test) {
|
|
203
192
|
case 'function':
|
|
204
193
|
return test(data, loader);
|
|
205
|
-
|
|
206
194
|
case 'string':
|
|
207
195
|
const magic = getMagicString(data, byteOffset, test.length);
|
|
208
196
|
return test === magic;
|
|
209
|
-
|
|
210
197
|
default:
|
|
211
198
|
return false;
|
|
212
199
|
}
|
|
213
200
|
}
|
|
214
|
-
|
|
215
|
-
|
|
201
|
+
function getFirstCharacters(data) {
|
|
202
|
+
let length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;
|
|
216
203
|
if (typeof data === 'string') {
|
|
217
204
|
return data.slice(0, length);
|
|
218
205
|
} else if (ArrayBuffer.isView(data)) {
|
|
@@ -221,22 +208,17 @@ function getFirstCharacters(data, length = 5) {
|
|
|
221
208
|
const byteOffset = 0;
|
|
222
209
|
return getMagicString(data, byteOffset, length);
|
|
223
210
|
}
|
|
224
|
-
|
|
225
211
|
return '';
|
|
226
212
|
}
|
|
227
|
-
|
|
228
213
|
function getMagicString(arrayBuffer, byteOffset, length) {
|
|
229
214
|
if (arrayBuffer.byteLength < byteOffset + length) {
|
|
230
215
|
return '';
|
|
231
216
|
}
|
|
232
|
-
|
|
233
217
|
const dataView = new DataView(arrayBuffer);
|
|
234
218
|
let magic = '';
|
|
235
|
-
|
|
236
219
|
for (let i = 0; i < length; i++) {
|
|
237
220
|
magic += String.fromCharCode(dataView.getUint8(byteOffset + i));
|
|
238
221
|
}
|
|
239
|
-
|
|
240
222
|
return magic;
|
|
241
223
|
}
|
|
242
224
|
//# sourceMappingURL=select-loader.js.map
|