@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
84 lines • 2.59 kB
TypeScript
/**
* Deep merge utility for objects
*
* Provides a pure, reusable deep merge function with optional security filtering.
*
* @module utils/deepMerge
*/
/**
* Options for deep merge behavior
*/
export interface DeepMergeOptions {
/**
* Properties to skip during merge (e.g., dangerous properties like __proto__)
*/
skipProperties?: string[];
/**
* Read-only fields that should be skipped during merge
*/
readOnlyFields?: Set<string>;
}
/**
* Deep merge two objects
*
* Merge semantics:
* - Plain objects are merged recursively
* - Arrays replace entirely (not merged element-by-element)
* - Primitives replace
* - Dangerous/read-only properties are optionally skipped
*
* @param target - The target object to merge into
* @param source - The source object to merge from
* @param options - Optional merge behavior configuration
* @returns New merged object (does not mutate inputs)
*
* @example
* ```typescript
* // Basic merge
* const result = deepMerge({ a: 1 }, { b: 2 });
* // => { a: 1, b: 2 }
*
* // Nested merge
* const result = deepMerge(
* { settings: { theme: 'light', size: 10 } },
* { settings: { theme: 'dark' } }
* );
* // => { settings: { theme: 'dark', size: 10 } }
*
* // With security filtering
* const result = deepMerge(target, source, {
* skipProperties: ['__proto__', 'constructor'],
* readOnlyFields: new Set(['id', 'type'])
* });
*
* // With type preservation
* interface Config { theme: string; size: number; }
* const result = deepMerge<Config>(defaultConfig, userConfig);
* ```
*/
export declare function deepMerge<T extends object = Record<string, unknown>>(target: T, source: Partial<T> | Record<string, unknown>, options?: DeepMergeOptions): T;
/**
* Default dangerous properties that should never be merged
* These can be used to prevent prototype pollution attacks
*/
export declare const DANGEROUS_PROPERTIES: string[];
/**
* Create a deep merge function with preset options
*
* Useful for creating a configured merger that can be reused
*
* @param options - Preset options for all merges
* @returns A configured deep merge function
*
* @example
* ```typescript
* const secureMerge = createDeepMerge({
* skipProperties: DANGEROUS_PROPERTIES,
* readOnlyFields: new Set(['id', 'type'])
* });
*
* const result = secureMerge(target, source);
* ```
*/
export declare function createDeepMerge(options: DeepMergeOptions): (target: Record<string, unknown>, source: Record<string, unknown>) => Record<string, unknown>;
//# sourceMappingURL=deepMerge.d.ts.map