export type ParamsValue = string | number | null | Buffer;
type EndToken = ',' | ' ' | ';' | ')';
type Analyze<T extends string, Current extends string = ''> = T extends `${infer Char}${infer Rest}`
? CharCheck<Char, Current, Rest>
: T extends EndToken ? {} : PropObject<`${Current}${T}`>;
type CharCheck<Char extends string, Current extends string, Rest extends string = ''> = Char extends EndToken
? PropObject<Current> & QueryInfer<Rest>
: Analyze<Rest, `${Current}${Char}`>
type PropObject<Name extends string> = { [K in `$${Name}`]: ParamsValue };
type SliceEnd<T extends string, Token extends string> = T extends `${string}${Token}${infer Rest}` ? Rest : ''
export type QueryInfer<T extends string> =
T extends `${infer X}'${infer Y}`
? QueryInfer<X> & QueryInfer<SliceEnd<Y, `'`>>
: T extends `${infer X}"${infer Y}`
? QueryInfer<X> & QueryInfer<SliceEnd<Y, `"`>>
: T extends `${string}$${infer Rest}`
? Analyze<Rest> : {};
Can anyone find a better solution than this