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;
}