UNPKG

@loaders.gl/core

Version:

Framework-independent loaders for 3D graphics formats

49 lines (42 loc) 1.67 kB
import assert from '../utils/assert'; import { isLoaderObject } from './loader-utils/normalize-loader'; import { mergeLoaderAndUserOptions } from './loader-utils/normalize-options'; import { getUrlFromData } from './loader-utils/get-data'; import { getArrayBufferOrStringFromData } from './loader-utils/get-data'; import { getLoaderContext } from './loader-utils/get-loader-context'; import parseWithWorker from './loader-utils/parse-with-worker'; import { selectLoader } from './select-loader'; export async function parse(data, loaders, options, url) { if (loaders && !Array.isArray(loaders) && !isLoaderObject(loaders)) { url = options; options = loaders; loaders = null; } options = options || {}; const autoUrl = getUrlFromData(data, url); const loader = selectLoader(loaders, autoUrl, data); options = mergeLoaderAndUserOptions(options, loader); const context = getLoaderContext({ url: autoUrl, parse }, options); return await parseWithLoader(loader, data, options, context); } async function parseWithLoader(loader, data, options, context) { data = await getArrayBufferOrStringFromData(data, loader); if (loader.parseTextSync && typeof data === 'string') { options.dataType = 'text'; return loader.parseTextSync(data, options, context, loader); } if (loader.parse) { return await loader.parse(data, options, context, loader); } if (loader.parseSync) { return loader.parseSync(data, options, context, loader); } if (loader.worker) { return await parseWithWorker(loader.worker, loader.name, data, options, context, loader); } return assert(false); } //# sourceMappingURL=parse.js.map