import { ArrayOrPlainObject, NestedPartial, PlainObject, UnionToIntersection } from "../models.mjs"; //#region src/value/merge.d.ts /** * Options for assigning values */ type AssignOptions = Omit; /** * An assigner function for assigning values from one or more objects to the first one */ type Assigner = { /** * Assign values from one or more objects to the first one * * @param to Value to assign to * @param from Values to assign * @returns Assigned value */ (to: To, from: [...From]): To & UnionToIntersection; }; /** * Options for merging values */ type MergeOptions = { /** * Assign values to the first array or object instead of creating a new one? */ assignValues?: boolean; /** * Key _(or key epxressions)_ for values that should be replaced * * ```ts * merge([{items: [1, 2, 3]}, {items: [99]}]); // => {items: [99]} * ``` */ replaceableObjects?: string | RegExp | Array; /** * Skip nullable values when merging objects? * * ```ts * merge({a: 1, b: 2}, {b: null, c: 3}, {d: null}); // => {a: 1, b: 2, c: 3} * ``` */ skipNullableAny?: boolean; /** * Skip nullable values when merging arrays? * * ```ts * merge([1, 2, 3], [null, null, 99]); // => [1, 2, 99] * ``` */ skipNullableInArrays?: boolean; }; /** * A merger function for merging multiple arrays or objects into a single one */ type Merger = { /** * Merge multiple arrays or objects into a single one * * @param values Values to merge * @returns Merged value */ (values: NestedPartial[]): UnionToIntersection; }; /** * Assign values from one or more objects to the first one * * @param to Value to assign to * @param from Values to assign * @param options Assigning options * @returns Assigned value */ declare function assign(to: To, from: [...From], options?: AssignOptions): To & UnionToIntersection; declare namespace assign { var initialize: typeof initializeAssigner; } /** * Create an assigner with predefined options * * _Available as `initializeAssigner` and `assign.initialize`_ * * @param options Assigning options * @returns Assigner function */ declare function initializeAssigner(options?: AssignOptions): Assigner; /** * Create a merger with predefined options * * _Available as `initializeMerger` and `merge.initialize`_ * * @param options Merging options * @returns Merger function */ declare function initializeMerger(options?: MergeOptions): Merger; /** * Merge multiple arrays or objects into a single one * * @param values Values to merge * @param options Merging options * @returns Merged value */ declare function merge(values: [...Values], options?: MergeOptions): UnionToIntersection; declare namespace merge { var initialize: typeof initializeMerger; } //#endregion export { AssignOptions, Assigner, MergeOptions, Merger, assign, initializeAssigner, initializeMerger, merge };