@chainlink/mcp-server
Version:
Prototype MCP Server for CLL
56 lines • 1.59 kB
JavaScript
;
/**
* @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