UNPKG

@chainlink/mcp-server

Version:
56 lines 1.59 kB
"use strict"; /** * @fileoverview Immutability utilities * * Provides a typed deepFreeze helper to make configuration objects immutable * at runtime, alongside a DeepReadonly type for compile-time safety. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.deepFreeze = deepFreeze; /** * Recursively freezes an object, returning a deeply immutable view. * * Note: Only plain objects, arrays, maps, and sets are traversed. Functions * and primitives are returned as-is. * * @param value - The value to freeze * @returns Deeply frozen value */ function deepFreeze(value) { if (value === null || typeof value !== "object") { return value; } // Handle arrays if (Array.isArray(value)) { for (const item of value) { deepFreeze(item); } return Object.freeze(value); } // Handle Map if (value instanceof Map) { for (const [k, v] of value.entries()) { deepFreeze(k); deepFreeze(v); } return Object.freeze(value); } // Handle Set if (value instanceof Set) { for (const item of value.values()) { deepFreeze(item); } return Object.freeze(value); } // Handle plain objects const obj = value; const propNames = Object.getOwnPropertyNames(obj); for (const name of propNames) { const prop = obj[name]; if (prop && typeof prop === "object") { deepFreeze(prop); } } return Object.freeze(value); } //# sourceMappingURL=immutability.js.map