/* eslint-disable @typescript-eslint/ban-ts-comment */ export type RemoveFirstFromTuple = T['length'] extends 0 ? undefined : ((...b: T) => void) extends (a: infer Q, ...b: infer I) => void ? I : [] export type SplitStringBy = string extends S ? string[] : S extends '' ? [] : S extends `${infer T}${D}${infer U}` ? [T, ...SplitStringBy] : [S] type PickParams = S['length'] extends 0 ? [] : S[0] extends `${P}${string}` ? // @ts-ignore [S[0], ...PickParams, P>] : // @ts-ignore PickParams, P> export type Substring = S['length'] extends 0 ? [] : // @ts-ignore [SplitStringBy[1], ...Substring>] export type ExtractedRequestParams = { parsedPathParams: PickParams, ':'> } export type CamelCase = S extends `${infer P1}_${infer P2}${infer P3}` ? `${Lowercase}${Uppercase}${CamelCase}` : S extends `${infer P1}-${infer P2}${infer P3}` ? `${Lowercase}${Uppercase}${CamelCase}` : S export type KeysToCamelCase = { [K in keyof T as CamelCase]: T[K] extends Record ? KeysToCamelCase : T[K] } type RemoveLeadingColon = S['length'] extends 0 ? never : SplitStringBy[1] type RemoveTrailingQuestion = S['length'] extends 0 ? never : SplitStringBy[0] export type CleanUpPathParam = S extends string ? //@ts-ignore RemoveLeadingColon> extends string ? //@ts-ignore RemoveLeadingColon> : '' : never