import { StringToPath } from "./string-to-path"; import { AnyArray, AnyObject, Sequence, IsNumericKey } from "./types"; import { SetTuple, GetArrayValue, IsTuple } from "./tuple"; export declare type Set = StringPath extends unknown ? Set_, Value> : never; declare type Set_ = { 0: Obj extends AnyArray ? IsNumericKey extends false ? Obj & Set_<{}, Path, Value, Index> : IsTuple extends false ? (GetArrayValue | Set_, Path[Sequence[Index]]>, Path, Value, Sequence[Index]>)[] : SetTuple, Path, Value, Sequence[Index]>> : { [K in keyof Obj | Path[Index]]: K extends Path[Index] ? Set_, Path, Value, Sequence[Index]> : Obj[K]; }; 1: Path["length"] extends 0 ? Obj : Value; }[Index extends Path["length"] ? 1 : 0]; declare type GetNextObject = [Value] extends [never] ? DefaultObject : Value extends AnyObject ? Value : DefaultObject; declare type DefaultObject = IsNumericKey extends true ? [] : {}; interface SetFunction { (object: Obj, path: Path, value: Value): Set; } export declare const set: SetFunction; export {};