Created
March 31, 2025 07:48
-
-
Save zRains/b9063f0fb859bb8b3fd8eaf73d2b7142 to your computer and use it in GitHub Desktop.
ExtractFieldsFromStaticDefinition impl. GraphQL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export type StrLen<T extends string, __Res extends Array<string> = []> = T extends `${infer A}${infer RestB}` | |
? StrLen<RestB, [...__Res, A]> | |
: __Res['length'] | |
export type IsValidPath< | |
T extends string, | |
__Res extends boolean = StrLen<T> extends 0 ? false : true, | |
> = T extends `${infer A}${infer RestB}` | |
? __Res extends false | |
? false | |
: IsValidPath<RestB, A extends ' ' | '/' ? false : true> | |
: __Res | |
export type FilterValidPath<T extends Array<string>, __Res extends Array<string> = []> = T extends [ | |
infer A extends string, | |
...infer RestB extends Array<string>, | |
] | |
? FilterValidPath<RestB, IsValidPath<A> extends true ? [...__Res, A] : __Res> | |
: __Res | |
export type PathLikeToStrImpl<T extends Array<string>, Res extends string = ''> = T extends [ | |
infer FirstP extends string, | |
...infer RestP extends Array<string>, | |
] | |
? PathLikeToStrImpl<RestP, Res extends '' ? FirstP : `${Res}/${FirstP}`> | |
: Res | |
export type PathLikeToStr< | |
T extends Array<string>, | |
__FilteredT extends Array<string> = FilterValidPath<T>, | |
> = __FilteredT['length'] extends 0 ? '' : PathLikeToStrImpl<__FilteredT> | |
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never | |
export type LastOfUnion<U> = UnionToIntersection<U extends any ? () => U : never> extends () => infer R ? R : never | |
export type UnionToTuple<U, Last = LastOfUnion<U>> = [U] extends [never] | |
? [] | |
: [...UnionToTuple<Exclude<U, Last>>, Last] | |
export type ObjUnWrapper< | |
T extends Record<string, unknown>, | |
__Path extends Array<string> = [], | |
__Res extends Array<Array<string>> = [], | |
__KeysOfT extends Array<unknown> = UnionToTuple<keyof T>, | |
> = __KeysOfT extends [infer A extends keyof T, ...infer RestB] | |
? ObjUnWrapper< | |
T, | |
[...__Path, Extract<A, string>], | |
ConvertToPathLike<Extract<T[A], Readonly<Array<unknown>>>, [...__Path, Extract<A, string>], __Res>, | |
RestB | |
> | |
: __Res | |
export type ConvertToPathLike< | |
T extends Readonly<Array<any>>, | |
__Path extends Array<string> = [], | |
__Res extends Array<Array<string>> = [], | |
> = T extends Readonly<[infer A, ...infer RestB]> | |
? ConvertToPathLike< | |
RestB, | |
__Path, | |
A extends string ? [...__Res, [...__Path, A]] : ObjUnWrapper<Extract<A, Record<string, unknown>>, __Path, __Res> | |
> | |
: __Res | |
export type ConvertToPathLikeToStrArr<T extends Array<Array<string>>, __Res extends Array<string> = []> = T extends [ | |
infer A extends Array<string>, | |
...infer RestB extends Array<Array<string>>, | |
] | |
? ConvertToPathLikeToStrArr<RestB, [...__Res, PathLikeToStr<A>]> | |
: __Res | |
export type ExtractFieldsFromStaticDefinition<T extends Readonly<Array<unknown>>> = ConvertToPathLikeToStrArr< | |
ConvertToPathLike<T> | |
>[number] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment