UNPKG

@loaders.gl/loader-utils

Version:

Framework-independent loaders for 3D graphics formats

45 lines (40 loc) 1.33 kB
// loaders.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import {LoaderOptions} from '../../loader-types'; /** * * @param baseOptions Can be undefined, in which case a fresh options object will be minted * @param newOptions * @returns */ export function mergeLoaderOptions<Options extends LoaderOptions>( baseOptions: Options | undefined, newOptions: Options ): Options { return mergeOptionsRecursively(baseOptions || {}, newOptions) as Options; } function mergeOptionsRecursively( baseOptions: Record<string, unknown>, newOptions: Record<string, unknown>, level = 0 ): Record<string, unknown> { // Sanity check (jest test runner overwrites the console object which can lead to infinite recursion) if (level > 3) { return newOptions; } const options = {...baseOptions}; for (const [key, newValue] of Object.entries(newOptions)) { if (newValue && typeof newValue === 'object' && !Array.isArray(newValue)) { options[key] = mergeOptionsRecursively( (options[key] as Record<string, unknown>) || {}, newOptions[key] as Record<string, unknown>, level + 1 ); // Object.assign(options[key] as object, newOptions[key]); } else { options[key] = newOptions[key]; } } return options as Record<string, unknown>; }