mirror of https://github.com/renovatebot/renovate
23 lines
519 B
TypeScript
23 lines
519 B
TypeScript
import { klona } from 'klona/json';
|
|
import { logger } from '../logger';
|
|
import { quickStringify } from './stringify';
|
|
|
|
/**
|
|
* Creates a deep clone of an object.
|
|
* @param input The object to clone.
|
|
*/
|
|
export function clone<T = unknown>(input: T): T {
|
|
try {
|
|
return klona(input);
|
|
} catch (err) {
|
|
logger.warn({ err }, 'error cloning object');
|
|
const str = quickStringify(input);
|
|
if (str) {
|
|
return JSON.parse(str) as T;
|
|
}
|
|
|
|
// istanbul ignore next: not easily testable
|
|
throw err;
|
|
}
|
|
}
|