@directus/api
Version:
Directus is a real-time API and App dashboard for managing SQL database content
24 lines (22 loc) • 588 B
JavaScript
import { isPlainObject } from "lodash-es";
//#region src/utils/deep-freeze.ts
/**
* Recursively freezes arrays and plain objects so the entire structure is immutable.
*
* @example
* const frozen = deepFreeze({ a: { b: 1 } });
* frozen.a.b = 2; // throws in strict mode
*/
function deepFreeze(value) {
if (Array.isArray(value)) {
for (const item of value) deepFreeze(item);
return Object.freeze(value);
}
if (isPlainObject(value)) {
for (const item of Object.values(value)) deepFreeze(item);
return Object.freeze(value);
}
return value;
}
//#endregion
export { deepFreeze };