static freeze()

in lib/modeling/immutability.ts [8:21]


	static freeze<T>(obj:T, excluded?:Set<any>):Readonly<T> {
		if (excluded && excluded.has(obj))
			return obj;

		if (!Object.isFrozen(obj))
			Object.freeze(obj);

		if (Object(obj) === "object") {
			let childrenExcluded:Set<any> = excluded ? new Set(excluded) : new Set;
			Object.getOwnPropertyNames(obj).forEach(prop => Immutability.freeze(obj[<keyof T>prop], childrenExcluded));
		}

		return obj;
	}