import { Endpoints as Gen } from './autogen/endpoint.js'; import { UserDetailed } from './autogen/models.js'; import { AdminRolesCreateRequest, AdminRolesCreateResponse, UsersShowRequest } from './autogen/entities.js'; import { PartialRolePolicyOverride, SigninFlowRequest, SigninFlowResponse, SigninWithPasskeyInitResponse, SigninWithPasskeyRequest, SigninWithPasskeyResponse, SignupPendingRequest, SignupPendingResponse, SignupRequest, SignupResponse, } from './entities.js'; type Overwrite = Omit< T, keyof U > & U; type SwitchCase = { $switch: { $cases: [Condition, Result][], $default: Result; }; }; type IsNeverType = [T] extends [never] ? true : false; type StrictExtract = Cond extends Union ? Union : never; type IsCaseMatched = Endpoints[E]['res'] extends SwitchCase // eslint-disable-next-line @typescript-eslint/no-explicit-any ? IsNeverType> extends false ? true : false : false; type GetCaseResult = Endpoints[E]['res'] extends SwitchCase // eslint-disable-next-line @typescript-eslint/no-explicit-any ? StrictExtract[1] : never; /* eslint-disable @stylistic/indent */ export type SwitchCaseResponseType = Endpoints[E]['res'] extends SwitchCase ? IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : IsCaseMatched extends true ? GetCaseResult : Endpoints[E]['res']['$switch']['$default'] : Endpoints[E]['res']; /* eslint-enable @stylistic/indent */ export type Endpoints = Overwrite< Gen, { 'users/show': { req: UsersShowRequest; res: { $switch: { $cases: [[ { userIds?: string[]; }, UserDetailed[], ]]; $default: UserDetailed; }; }; }, // api.jsonには載せないものなのでここで定義 'signup': { req: SignupRequest; res: SignupResponse; }, // api.jsonには載せないものなのでここで定義 'signup-pending': { req: SignupPendingRequest; res: SignupPendingResponse; }, // api.jsonには載せないものなのでここで定義 'signin-flow': { req: SigninFlowRequest; res: SigninFlowResponse; }, 'signin-with-passkey': { req: SigninWithPasskeyRequest; res: { $switch: { $cases: [ [ { context: string; }, SigninWithPasskeyResponse, ], ]; $default: SigninWithPasskeyInitResponse; }, }, }, 'admin/roles/create': { req: Overwrite; res: AdminRolesCreateResponse; } } >;