api 타입 시스템 준비 완료
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { POST } from "../defs";
|
||||
import { GET } from "../defs";
|
||||
import type { structure } from "../../apiStructure/sammoRootAPI";
|
||||
import type { ExtractError, ExtractQuery, ExtractResponse } from "../../apiStructure/defs";
|
||||
|
||||
@@ -7,7 +7,7 @@ type RType = ExtractResponse<BaseAPI>;
|
||||
type EType = ExtractError<BaseAPI>;
|
||||
type QType = ExtractQuery<BaseAPI>;
|
||||
|
||||
export class ReqNonce extends POST<RType, EType, QType>{
|
||||
export class ReqNonce extends GET<RType, EType, QType>{
|
||||
protected ReqNonce = Symbol("ReqNonce");//TODO: remove this
|
||||
protected override async api(query: QType): Promise<RType | EType | true> {
|
||||
throw new Error("Method not implemented.");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { structure } from "../../apiStructure/sammoRootAPI";
|
||||
import { APINamespaceType } from "../defs";
|
||||
import type { structure } from "../../apiStructure/sammoRootAPI";
|
||||
import type { APINamespaceType } from "../defs";
|
||||
import { LoginByID } from "./LoginByID";
|
||||
import { LoginByToken } from "./LoginByToken";
|
||||
import { ReqNonce } from "./ReqNonce";
|
||||
|
||||
+7
-2
@@ -1,6 +1,6 @@
|
||||
|
||||
import type { Request, Response } from 'express';
|
||||
import type { APICallT, Callable, DefAPINamespace, EmptyAPICallT, HttpMethod, InvalidResponse, RawArgType, ValidResponse, recoveryMethod } from '../apiStructure/defs';
|
||||
import type { APICallT, Callable, DefAPINamespace, DeleteAPICallT, EmptyAPICallT, GetAPICallT, HeadAPICallT, HttpMethod, InvalidResponse, PatchAPICallT, PostAPICallT, PutAPICallT, RawArgType, ValidResponse, recoveryMethod } from '../apiStructure/defs';
|
||||
|
||||
export const treatedSpecial = Symbol('treatedSpecial');
|
||||
export type APINamespace = {
|
||||
@@ -83,7 +83,12 @@ export type GetClassGenerator<T> = {
|
||||
prototype: T
|
||||
};
|
||||
export type APIServerType<T extends Callable> =
|
||||
T extends APICallT<infer Q, infer R, infer E> ? GetClassGenerator<APIExecuter<R, E, Q>> :
|
||||
T extends GetAPICallT<infer Q, infer R, infer E> ? GetClassGenerator<GET<R, E, Q>> :
|
||||
T extends PostAPICallT<infer Q, infer R, infer E> ? GetClassGenerator<POST<R, E, Q>> :
|
||||
T extends PutAPICallT<infer Q, infer R, infer E> ? GetClassGenerator<PUT<R, E, Q>> :
|
||||
T extends DeleteAPICallT<infer Q, infer R, infer E> ? GetClassGenerator<DELETE<R, E, Q>> :
|
||||
T extends PatchAPICallT<infer Q, infer R, infer E> ? GetClassGenerator<PATCH<R, E, Q>> :
|
||||
T extends HeadAPICallT<infer Q, infer R, infer E> ? GetClassGenerator<HEAD<R, E, Q>> :
|
||||
never;
|
||||
export type APINamespaceType<T extends DefAPINamespace> = {
|
||||
[K in keyof T]:
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
import type { structure } from "../apiStructure/sammoRootAPI";
|
||||
import type { APINamespaceType } from "./defs";
|
||||
import { Login } from "./Login";
|
||||
|
||||
export const sammoRootAPI = {
|
||||
Login,
|
||||
} satisfies APINamespaceType<typeof structure>;
|
||||
@@ -129,6 +129,12 @@ export type PatchAPICallT<
|
||||
ErrorType extends InvalidResponse = InvalidResponse
|
||||
> = ArgType extends undefined ? EmptyPatchAPICallT<ResultType, ErrorType> : BasicPatchAPICallT<ArgType, ResultType, ErrorType>;
|
||||
|
||||
export type HeadAPICallT<
|
||||
ArgType extends RawArgType,
|
||||
ResultType extends ValidResponse = ValidResponse,
|
||||
ErrorType extends InvalidResponse = InvalidResponse
|
||||
> = ArgType extends undefined ? EmptyHeadAPICallT<ResultType, ErrorType> : BasicHeadAPICallT<ArgType, ResultType, ErrorType>;
|
||||
|
||||
export type APITail = ReturnType<typeof GET> | ReturnType<typeof POST> | ReturnType<typeof PUT> | ReturnType<typeof DELETE> | ReturnType<typeof PATCH> | ReturnType<typeof HEAD>;
|
||||
|
||||
export function GET<
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { DefAPINamespace, GET, POST } from "./defs";
|
||||
import { type DefAPINamespace, GET, POST } from "./defs";
|
||||
|
||||
export type LoginResponse = {
|
||||
result: true,
|
||||
@@ -40,7 +40,6 @@ export const structure = {
|
||||
hashedToken: string,
|
||||
token_id: number,
|
||||
}, AutoLoginResponse, AutoLoginFailed>(),
|
||||
Test: POST<AutoLoginResponse, AutoLoginFailed>(),
|
||||
ReqNonce: GET<AutoLoginNonceResponse, AutoLoginFailed>()
|
||||
},
|
||||
} satisfies DefAPINamespace;
|
||||
Reference in New Issue
Block a user