/**
 * Copyright 2025 IBM Corp.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
type Override<T, T2 extends Partial<T>> = {
    [K in keyof T2]: K extends keyof T ? T2[K] : never;
};
declare function assignFactory<T extends NonNullable<unknown>, T2 extends Partial<T>>(target: T): (source: NonNullable<Override<T, T2>>) => void;
declare const assign: <T extends NonNullable<unknown>, T2 extends Partial<T>>(a: T, b: NonNullable<Override<T, T2>>) => void;
declare const omitEmptyValues: (data: object) => object;
declare const omitUndefined: (data: object) => object;
declare function hasProp<T>(target: T | undefined, key: keyof T): key is keyof T;
declare function hasProps<T>(keys: (keyof T)[]): (target: T | undefined) => boolean;
declare function setProp(target: unknown, paths: readonly (keyof any)[], value: unknown): void;
declare function getPropStrict(target: NonNullable<unknown>, path: string): any;
declare function getProp(target: unknown, paths: readonly (keyof any)[], defaultValue?: any): any;
declare function deleteProps<T, K extends keyof T>(target: T, keys: readonly K[]): void;
declare function updateObject<T extends object, L extends object>(old: T, update: L): asserts old is T & L;
declare function customMerge<T extends NonNullable<unknown>>(results: T[], processors: {
    [K in keyof T]: (value: T[K], oldValue: T[K]) => T[K];
}): T;
declare function mapObj<T extends object>(obj: T): <K extends keyof T>(fn: (key: K, value: T[K]) => T[K]) => T;

export { type Override, assign, assignFactory, customMerge, deleteProps, getProp, getPropStrict, hasProp, hasProps, mapObj, omitEmptyValues, omitUndefined, setProp, updateObject };
