100 lines
3.1 KiB
TypeScript
100 lines
3.1 KiB
TypeScript
|
|
//#region src/constants.d.ts
|
||
|
|
declare enum PriorityName {
|
||
|
|
LEFT = "left",
|
||
|
|
RIGHT = "right"
|
||
|
|
}
|
||
|
|
//#endregion
|
||
|
|
//#region src/type.d.ts
|
||
|
|
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
|
||
|
|
type Options = {
|
||
|
|
/**
|
||
|
|
* Merge object array properties.
|
||
|
|
*
|
||
|
|
* default: true
|
||
|
|
*/
|
||
|
|
array: boolean;
|
||
|
|
/**
|
||
|
|
* Remove duplicates, when merging array elements.
|
||
|
|
*
|
||
|
|
* default: false
|
||
|
|
*/
|
||
|
|
arrayDistinct: boolean;
|
||
|
|
/**
|
||
|
|
* Merge sources from left-to-right or right-to-left.
|
||
|
|
* From v2 upwards default to left independent of the option priority.
|
||
|
|
*
|
||
|
|
* default: left (aka. options.priority)
|
||
|
|
*/
|
||
|
|
arrayPriority: `${PriorityName}`;
|
||
|
|
/**
|
||
|
|
* Strategy to merge different object keys.
|
||
|
|
*
|
||
|
|
* @param target
|
||
|
|
* @param key
|
||
|
|
* @param value
|
||
|
|
*/
|
||
|
|
strategy?: (target: Record<string, any>, key: string, value: unknown) => Record<string, any> | undefined;
|
||
|
|
/**
|
||
|
|
* Merge sources in place.
|
||
|
|
*
|
||
|
|
* default: false
|
||
|
|
*/
|
||
|
|
inPlace?: boolean;
|
||
|
|
/**
|
||
|
|
* Deep clone input sources.
|
||
|
|
*
|
||
|
|
* default: false
|
||
|
|
*/
|
||
|
|
clone?: boolean;
|
||
|
|
/**
|
||
|
|
* Merge sources from left-to-right or right-to-left.
|
||
|
|
* From v2 upwards default to right.
|
||
|
|
*
|
||
|
|
* default: left
|
||
|
|
*/
|
||
|
|
priority: `${PriorityName}`;
|
||
|
|
};
|
||
|
|
type OptionsInput = Partial<Options>;
|
||
|
|
type MergerSource = any[] | Record<string, any>;
|
||
|
|
type MergerSourceUnwrap<T extends MergerSource> = T extends Array<infer Return> ? Return : T;
|
||
|
|
type MergerResult<B extends MergerSource> = UnionToIntersection<MergerSourceUnwrap<B>>;
|
||
|
|
type MergerContext = {
|
||
|
|
options: Options;
|
||
|
|
map: WeakMap<any, any>;
|
||
|
|
};
|
||
|
|
type Merger = <B extends MergerSource[]>(...sources: B) => MergerResult<B>;
|
||
|
|
//#endregion
|
||
|
|
//#region src/module.d.ts
|
||
|
|
declare function createMerger(input?: OptionsInput): Merger;
|
||
|
|
declare const merge: Merger;
|
||
|
|
//#endregion
|
||
|
|
//#region src/utils/array.d.ts
|
||
|
|
declare function distinctArray<T = any>(arr: T[]): T[];
|
||
|
|
//#endregion
|
||
|
|
//#region src/utils/check.d.ts
|
||
|
|
declare function isObject(item: unknown): item is Record<string, any>;
|
||
|
|
declare function isSafeKey(key: string): boolean;
|
||
|
|
declare function isEqual(x: any, y: any): boolean;
|
||
|
|
//#endregion
|
||
|
|
//#region src/utils/clone.d.ts
|
||
|
|
declare function polyfillClone<T>(input: T): T;
|
||
|
|
declare function clone<T>(value: T): T;
|
||
|
|
//#endregion
|
||
|
|
//#region src/utils/object.d.ts
|
||
|
|
declare function hasOwnProperty<X extends {}, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown>;
|
||
|
|
//#endregion
|
||
|
|
//#region src/utils/options.d.ts
|
||
|
|
declare function buildOptions(options?: OptionsInput): Options;
|
||
|
|
declare function togglePriority(priority: `${PriorityName}`): "right" | "left";
|
||
|
|
//#endregion
|
||
|
|
//#region src/presets.d.ts
|
||
|
|
/**
|
||
|
|
* Assign source attributes to a target object.
|
||
|
|
*
|
||
|
|
* @param target
|
||
|
|
* @param sources
|
||
|
|
*/
|
||
|
|
declare function assign<A extends Record<string, any>, B extends Record<string, any>[]>(target: A, ...sources: B): A & MergerResult<B>;
|
||
|
|
//#endregion
|
||
|
|
export { Merger, MergerContext, MergerResult, MergerSource, MergerSourceUnwrap, Options, OptionsInput, PriorityName, assign, buildOptions, clone, createMerger, distinctArray, hasOwnProperty, isEqual, isObject, isSafeKey, merge, polyfillClone, togglePriority };
|
||
|
|
//# sourceMappingURL=index.d.mts.map
|