{"version":3,"file":"path-Il5r4PV4.cjs","names":[],"sources":["../src/lib/path.ts"],"sourcesContent":["import type {\n  ArrayToStringPath,\n  Array_,\n  IsAny,\n  IsNever,\n  Object_,\n  OptionalPropertyOf,\n  StringToArrayPath,\n  StringToNumber,\n} from './typeHelpers';\n\nexport type KeyType = string | number | symbol;\n\nexport type AnyPath = string | readonly KeyType[];\n\nexport type GetKeys<T extends Object_ | Array_> = T extends Array_\n  ? T extends readonly [] // special case empty tuple => no keys\n    ? never\n    : '0' extends keyof T // any tuple with at least one element\n      ? StringToNumber<keyof T>\n      : number // other array\n  : keyof T;\n\nexport type _PathAsArray<T, Optional, MaxDepth, Depth extends 1[]> =\n  | (Optional extends false ? readonly [] : never)\n  | (true extends IsAny<T>\n      ? readonly KeyType[]\n      : T extends never\n        ? never\n        : T extends Object_\n          ? Depth['length'] extends MaxDepth\n            ? readonly string[]\n            : T extends Map<infer K extends KeyType, infer V>\n              ? readonly [K] | readonly [K, ..._PathAsArray<V, Optional, MaxDepth, [...Depth, 1]>]\n              : T extends Set<any>\n                ? readonly [number]\n                : {\n                    [K in GetKeys<T>]:\n                      | (Optional extends true\n                          ? K extends OptionalPropertyOf<T>\n                            ? readonly [K]\n                            : never\n                          : readonly [K])\n                      | readonly [K, ..._PathAsArray<T[K], Optional, MaxDepth, [...Depth, 1]>];\n                  }[GetKeys<T>]\n          : never);\n\nexport type PathAsArray<\n  T,\n  Optional extends boolean = false,\n  MaxDepth extends number = 5,\n> = _PathAsArray<T, Optional, MaxDepth, []>;\n\nexport type PathAsString<\n  T,\n  Optional extends boolean = false,\n  MaxDepth extends number = 5,\n> = ArrayToStringPath<PathAsArray<T, Optional, MaxDepth>>;\n\nexport type Path<T, Optional extends boolean = false, MaxDepth extends number = 5> =\n  | PathAsString<T, Optional, MaxDepth>\n  | PathAsArray<T, Optional, MaxDepth>;\n\nexport type Value<T, P> = P extends readonly []\n  ? T\n  : true extends IsAny<T> | IsAny<P>\n    ? any\n    : true extends IsNever<T> | IsNever<P>\n      ? never\n      : P extends string\n        ? Value<T, StringToArrayPath<P>>\n        : P extends readonly [infer First extends KeyType, ...infer Rest extends readonly KeyType[]]\n          ? T extends Map<any, infer V> | Set<infer V>\n            ? Value<V, Rest> | undefined\n            : T extends Array_\n              ? any[] extends T\n                ? Value<T[First & keyof T], Rest> | undefined\n                : Value<T[First & keyof T], Rest>\n              : T extends Object_\n                ? Record<any, any> extends T\n                  ? Value<T[First], Rest> | undefined\n                  : Value<T[First], Rest>\n                : never\n          : never;\n\nexport type _WildcardPathAsArray<T, MaxDepth, Depth extends 1[]> =\n  | []\n  | (0 extends 1 & T\n      ? KeyType[]\n      : T extends never\n        ? never\n        : T extends Object_\n          ? Depth['length'] extends MaxDepth\n            ? string[]\n            : T extends Map<infer K extends KeyType, infer V>\n              ? ['*'] | [K] | [K, ..._WildcardPathAsArray<V, MaxDepth, [...Depth, 1]>]\n              : T extends Set<any>\n                ? ['*'] | [number]\n                : Record<string, any> extends T\n                  ? ['*'] | ['*', ..._WildcardPathAsArray<T[string], MaxDepth, [...Depth, 1]>]\n                  : {\n                      [K in GetKeys<T>]:\n                        | ['*']\n                        | [\n                            '*',\n                            ..._WildcardPathAsArray<\n                              T[T extends readonly any[] ? number : keyof T],\n                              MaxDepth,\n                              [...Depth, 1]\n                            >,\n                          ]\n                        | [K]\n                        | [K, ..._WildcardPathAsArray<T[K], MaxDepth, [...Depth, 1]>];\n                    }[GetKeys<T>]\n          : never);\n\nexport type WildcardPathAsArray<T, MaxDepth extends number = 5> = _WildcardPathAsArray<\n  T,\n  MaxDepth,\n  []\n>;\nexport type WildcardPathAsString<T, MaxDepth extends number = 5> = ArrayToStringPath<\n  _WildcardPathAsArray<T, MaxDepth, []>\n>;\nexport type WildcardPath<T, MaxDepth extends number = 5> =\n  | WildcardPathAsString<T, MaxDepth>\n  | WildcardPathAsArray<T, MaxDepth>;\n\nexport type WildcardValue<T, P> = true extends IsAny<T> | IsAny<P>\n  ? any\n  : true extends IsNever<T> | IsNever<P>\n    ? never\n    : P extends string\n      ? WildcardValue<T, StringToArrayPath<P>>\n      : P extends readonly [infer First extends KeyType, ...infer Rest extends KeyType[]]\n        ? T extends Map<any, infer V> | Set<infer V>\n          ? WildcardValue<V, Rest> | (First extends '*' ? never : undefined)\n          : T extends Array_\n            ? First extends '*'\n              ? WildcardValue<T[number], Rest>\n              : any[] extends T\n                ? WildcardValue<T[First & keyof T], Rest> | undefined\n                : First extends keyof T\n                  ? WildcardValue<T[First], Rest>\n                  : undefined\n            : T extends Object_\n              ? First extends '*'\n                ? WildcardValue<T[keyof T], Rest>\n                : Record<any, any> extends T\n                  ? WildcardValue<T[First], Rest> | undefined\n                  : WildcardValue<T[First], Rest>\n              : never\n        : T;\n\nexport type WildcardMatch<S, W> = S extends string\n  ? WildcardMatch<StringToArrayPath<S>, W>\n  : W extends string\n    ? WildcardMatch<S, StringToArrayPath<W>>\n    : [S, W] extends [readonly [], readonly []]\n      ? true\n      : [S, W] extends [\n            readonly [infer SFirst, ...infer SRest],\n            readonly [infer WFirst, ...infer WRest],\n          ]\n        ? [WFirst, WRest['length']] extends ['*' | SFirst, SRest['length']]\n          ? WildcardMatch<SRest, WRest>\n          : false\n        : false;\n\nexport type Join<A extends string | number, B extends string | number> = A extends ''\n  ? B\n  : B extends ''\n    ? A\n    : `${A}.${B}`;\n\ntype _SettablePathAsArray<T, MaxDepth, Depth extends 1[]> =\n  | readonly []\n  | (true extends IsAny<T>\n      ? readonly KeyType[]\n      : undefined extends T\n        ? T extends Map<any, any> | Set<any>\n          ? never\n          : T extends Object_\n            ? {\n                [K in GetKeys<T>]: Partial<T> extends Omit<T, K>\n                  ?\n                      | readonly [K]\n                      | readonly [K, ..._SettablePathAsArray<T[K], MaxDepth, [...Depth, 1]>]\n                  : readonly [];\n              }[GetKeys<T>]\n            : never\n        : T extends never\n          ? never\n          : T extends Object_\n            ? Depth['length'] extends MaxDepth\n              ? readonly string[]\n              : T extends Map<infer K extends KeyType, infer V>\n                ? readonly [K] | readonly [K, ..._SettablePathAsArray<V, MaxDepth, [...Depth, 1]>]\n                : T extends Set<any>\n                  ? readonly [number]\n                  : {\n                      [K in GetKeys<T>]:\n                        | readonly [K]\n                        | readonly [K, ..._SettablePathAsArray<T[K], MaxDepth, [...Depth, 1]>];\n                    }[GetKeys<T>]\n            : never);\n\nexport type SettablePathAsArray<T, MaxDepth extends number = 5> = _SettablePathAsArray<\n  T,\n  MaxDepth,\n  []\n>;\nexport type SettablePathAsString<T, MaxDepth extends number = 5> = ArrayToStringPath<\n  SettablePathAsArray<T, MaxDepth>\n>;\n\nexport type SettablePath<T, MaxDepth extends number = 5> =\n  | SettablePathAsString<T, MaxDepth>\n  | SettablePathAsArray<T, MaxDepth>;\n\nexport type SettableValue<T, P> = P extends readonly []\n  ? T\n  : true extends IsAny<T> | IsAny<P>\n    ? any\n    : true extends IsNever<T> | IsNever<P>\n      ? never\n      : P extends string\n        ? SettableValue<T, StringToArrayPath<P>>\n        : P extends readonly [infer First extends KeyType, ...infer Rest extends readonly KeyType[]]\n          ? T extends Map<any, infer V> | Set<infer V>\n            ? SettableValue<V, Rest>\n            : T extends Array_\n              ? SettableValue<T[First & keyof T], Rest>\n              : T extends Object_\n                ? SettableValue<T[First], Rest>\n                : never\n          : never;\n\nexport function isAnyPath(path: any): path is AnyPath {\n  return typeof path === 'string' || Array.isArray(path);\n}\n"],"mappings":";;AA8OA,SAAgB,UAAU,MAA4B;AACpD,QAAO,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK"}