summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Util/Objects/DeepFreeze.js
blob: 88e2847aa852e2f1ba5599c6bb4b0611ac87ab19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { isPlainObject } from "@11ty/eleventy-utils";

// via https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

function DeepFreeze(obj, topLevelExceptions) {
	for (let name of Reflect.ownKeys(obj)) {
		if ((topLevelExceptions || []).find((key) => key === name)) {
			continue;
		}

		const value = obj[name];
		if (isPlainObject(value)) {
			DeepFreeze(value);
		}
	}

	return Object.freeze(obj);
}

export { DeepFreeze };