//#region src/typeUtils.d.ts type PartialRecord = { [P in K$1]?: T }; type NonPartial = { [K in keyof Required]: T[K] }; /** * @deprecated Use `ObjKeysWithValuesOfType` from `@ls-stack/utils/typeUtils` * instead */ type ObjKeysWithValuesOfType, ValueType> = { [K in keyof Obj]: Obj[K] extends ValueType ? K : never }[keyof Obj]; type IsAny = unknown extends T ? [keyof T] extends [never] ? false : true : false; type Prettify> = { [P in keyof T]: T[P] } & {}; type DeepPrettify = { [K in keyof T]: T[K] extends Record ? DeepPrettify : T[K] } & {}; type DefaultSkipTransverseDeepReplace = Date | RegExp | ((...args: any[]) => any) | Error | Set | Map | WeakSet | WeakMap; type PathMatches = true extends (SkipPaths extends any ? CurrentPath extends SkipPaths ? true : SkipPaths extends `${infer Prefix}[*]${infer Suffix}` ? CurrentPath extends `${Prefix}[${string}]${Suffix}` ? true : false : false : false) ? true : false; type BuildPath = BasePath extends '$' ? Key extends string | number ? `${Key}` : never : Key extends string | number ? `${BasePath}.${Key}` : never; type BuildArrayPath = BasePath extends '$' ? '[*]' : `${BasePath}[*]`; type DeepReplaceValueImpl = SkipPaths extends string ? PathMatches extends true ? T : T extends ReplaceType ? T extends SkipType ? T : NewType : T extends readonly (infer U)[] ? Array>> : T extends SkipType ? T : T extends Record ? { [K in keyof T]: DeepReplaceValueImpl> } : T : T extends ReplaceType ? T extends SkipType ? T : NewType : T extends readonly (infer U)[] ? Array>> : T extends SkipType ? T : T extends Record ? { [K in keyof T]: DeepReplaceValueImpl> } : T; /** * Replaces all values that extends `ReplaceType` with `NewType` in a deeply * nested object or array. * * @template T - The object or array to replace values in. * @template ReplaceType - The type to replace. * @template NewType - The new type to replace with. * @template SkipPaths - The paths to skip in transverse. e.g. 'a.b.c' | * 'array[*].b' * @template SkipTypes - The types to skip in transverse and replace. */ type DeepReplaceValue = DeepReplaceValueImpl; type KeysWithUndefinedValues> = { [K in keyof T]: undefined extends T[K] ? K : never }[keyof T]; /** * Marks all possible undefined values as partial at the root level of the * object. */ type PartialPossiblyUndefinedValues> = Prettify>> & Omit>>; type PickUndefinedKeys = { [K in keyof T]: undefined extends T[K] ? K : never }[keyof T]; type PickRequiredKeys = { [K in keyof T]: undefined extends T[K] ? never : K }[keyof T]; type MakeUndefinedKeysOptional = Prettify>> & Pick>>; type StringWithAutoComplete = T | (string & {}); //#endregion export { DeepPrettify, DeepReplaceValue, DefaultSkipTransverseDeepReplace, IsAny, MakeUndefinedKeysOptional, NonPartial, ObjKeysWithValuesOfType, PartialPossiblyUndefinedValues, PartialRecord, Prettify, StringWithAutoComplete };