Skip to content

utils/path_setter#

setAtPath()#

function setAtPath<T, P>(
   state, 
   path, 
   value): T;

Type Parameters#

Type Parameter
T
P extends string

Parameters#

Parameter Type
state T
path P
value P extends keyof T ? NonNullable<T[P]> : P extends `${Head}.${Rest}` ? Head extends keyof T ? Rest extends keyof NonNullable<T[Head]> ? NonNullable<NonNullable<T[Head]>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof NonNullable<T[Head]> ? Rest extends keyof NonNullable<NonNullable<...>[Head]> ? NonNullable<NonNullable<...[...]>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof NonNullable<...> ? Rest extends keyof ... ? NonNullable<...> : ... extends ... ? ... : ... : NonNullable<...> extends readonly ...[] ? ... extends ... ? ... : ... : never : Rest extends `${number}` ? NonNullable<...> extends readonly ...[] ? U : never : never : NonNullable<T[Head]> extends readonly U[] ? Head extends `${number}` ? Rest extends keyof U ? NonNullable<...[...]> : Rest extends `${(...)}.${(...)}` ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : never : Rest extends `${number}` ? NonNullable<T[Head]> extends readonly U[] ? U : never : never : T extends readonly U[] ? Head extends `${number}` ? Rest extends keyof U ? NonNullable<U[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof U ? Rest extends keyof NonNullable<...> ? NonNullable<...[...]> : Rest extends `${(...)}.${(...)}` ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : U extends readonly U[] ? Head extends `${(...)}` ? ... extends ... ? ... : ... : never : never : Rest extends `${number}` ? U extends readonly U[] ? U : never : never : never : never : P extends `${number}` ? T extends readonly U[] ? U : never : never

Returns#

T


updateAtPath()#

function updateAtPath<T, P>(
   state, 
   path, 
   updater): T;

Type Parameters#

Type Parameter
T
P extends string

Parameters#

Parameter Type
state T
path P
updater (current) => P extends keyof T ? NonNullable<T[P]> : P extends `${Head}.${Rest}` ? Head extends keyof T ? Rest extends keyof NonNullable<T[Head]> ? NonNullable<NonNullable<T[Head]>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof NonNullable<T[Head]> ? Rest extends keyof NonNullable<...[...]> ? NonNullable<NonNullable<...>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof ... ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Rest extends `${(...)}` ? ... extends ... ? ... : ... : never : NonNullable<T[Head]> extends readonly U[] ? Head extends `${number}` ? Rest extends keyof ... ? NonNullable<...> : ... extends ... ? ... : ... : never : never : Rest extends `${number}` ? NonNullable<T[Head]> extends readonly U[] ? U : never : never : T extends readonly U[] ? Head extends `${number}` ? Rest extends keyof U ? NonNullable<U[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof U ? Rest extends keyof ... ? NonNullable<...> : ... extends ... ? ... : ... : U extends readonly ...[] ? ... extends ... ? ... : ... : never : Rest extends `${number}` ? U extends readonly ...[] ? U : never : never : never : never : P extends `${number}` ? T extends readonly U[] ? U : never : never

Returns#

T


Path#

type Path<T, Depth> = 
  | Depth["length"] extends 5 ? never : T extends readonly infer U[] ? `${number}` | `${number}.${Path<U, [...Depth, unknown]>}` : T extends object ? { [K in Extract<keyof T, string>]: NonNullable<T[K]> extends readonly (...)[] ? K | `${K}.${number}` | `${K}.${number}.${Path<(...), (...)>}` : NonNullable<(...)[(...)]> extends Record<string, any> ? K | `${(...)}.${(...)}` : K }[Extract<keyof T, string>] : never
  | `plugins.${string}`;

Type Parameters#

Type Parameter Default type
T -
Depth extends readonly unknown[] []

PathValue#

type PathValue<T, P, Depth> = Depth["length"] extends 10 ? any : P extends keyof T ? NonNullable<T[P]> : P extends `${infer Head}.${infer Rest}` ? Head extends keyof T ? PathValue<NonNullable<T[Head]>, Rest, [...Depth, unknown]> : T extends readonly infer U[] ? Head extends `${number}` ? PathValue<U, Rest, [...Depth, unknown]> : never : never : P extends `${number}` ? T extends readonly infer U[] ? U : never : never;

Type Parameters#

Type Parameter Default type
T -
P extends string -
Depth extends readonly unknown[] []