/** * Gattai Merge * High-performance deep merge utility with structural sharing. * Supports circular ref and complex built-in types. * * @version 3.4.9 * @author Yusuke Kamiyamane * @license MIT * @copyright Copyright (c) Yusuke Kamiyamane * @see {@link https://github.com/y14e/gattai-merge} */ interface GattaiMergeOptions { arrays: 'concat' | 'merge' | 'replace' | ArrayMergeFunction; nullish: 'loose' | 'strict' | 'throw'; preserveDescriptors: boolean; strictDescriptors: boolean; } type Refs = WeakMap; type MergedObject = [T, S] extends [ readonly unknown[], readonly unknown[] ] ? T | S : [T, S] extends [object, object] ? Omit & S : S; type DeepMergedObject = S extends readonly [infer F, ...infer R] ? MergedObject extends object ? DeepMergedObject, R> : MergedObject : T; type MergeContext = { options: Partial; ref: Refs; merge: (target: unknown, source: unknown) => unknown; clone: (node: unknown) => unknown; }; type ArrayMergeFunction = (target: readonly unknown[], source: readonly unknown[], context: MergeContext) => unknown[]; declare function gattaiMerge(target: T, ...args: S): DeepMergedObject; export { type GattaiMergeOptions, gattaiMerge };