wip
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { Endpoints, SchemaOrUndefined, IEndpointMeta, EndpointDefines } from './endpoints.types';
|
||||
import type { Endpoints, SchemaOrUndefined, IEndpointMeta, ResponseOf } from './endpoints.types';
|
||||
|
||||
const MK_API_ERROR = Symbol();
|
||||
|
||||
@@ -25,9 +25,6 @@ export type FetchLike = (input: string, init?: {
|
||||
json(): Promise<any>;
|
||||
}>;
|
||||
|
||||
type Response<D extends IEndpointMeta, P extends SchemaOrUndefined<D['defines'][number]['req']>, DD extends EndpointDefines[number] = D['defines'][number]> =
|
||||
P extends DD['req'] ? SchemaOrUndefined<DD['res']> : never;
|
||||
|
||||
export class APIClient {
|
||||
public origin: string;
|
||||
public credential: string | null | undefined;
|
||||
@@ -45,8 +42,8 @@ export class APIClient {
|
||||
this.fetch = opts.fetch ?? ((...args) => fetch(...args));
|
||||
}
|
||||
|
||||
public request<E extends keyof Endpoints, P extends SchemaOrUndefined<D['defines'][number]['req']>, D extends IEndpointMeta = Endpoints[E], R = Response<D, P>>(
|
||||
endpoint: E, params: P = {} as P, credential?: string | null | undefined,
|
||||
public request<E extends keyof Endpoints, P extends SchemaOrUndefined<D['defines'][number]['req']>, D extends IEndpointMeta = Endpoints[E], R = ResponseOf<D, P>>(
|
||||
endpoint: E, params: P, credential?: string | null | undefined,
|
||||
): Promise<R>
|
||||
{
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
|
@@ -37,7 +37,7 @@ export interface IEndpointMeta {
|
||||
};
|
||||
};
|
||||
|
||||
readonly defines: EndpointDefines;
|
||||
readonly defines: ReadonlyArray<{ req: JSONSchema7 | undefined; res: JSONSchema7 | undefined; }>;
|
||||
|
||||
/**
|
||||
* このエンドポイントにリクエストするのにユーザー情報が必須か否か
|
||||
@@ -123,6 +123,9 @@ export interface IEndpointMeta {
|
||||
readonly cacheSec?: number;
|
||||
}
|
||||
|
||||
export type SchemaOrUndefined<T extends JSONSchema7 | undefined> = T extends JSONSchema7 ? SchemaType<T, References> : never;
|
||||
export type SchemaOrUndefined<T extends JSONSchema7 | undefined> = T extends JSONSchema7 ? SchemaType<T, References> : (void | Record<string, never>);
|
||||
|
||||
export type ResponseOf<D extends IEndpointMeta, P, DD extends D['defines'][number] = D['defines'][number]> =
|
||||
P extends SchemaOrUndefined<DD['req']> ? SchemaOrUndefined<DD['res']> : never;
|
||||
|
||||
export type Endpoints = typeof endpoints;
|
||||
|
Reference in New Issue
Block a user