api 타입 시스템 준비 완료

This commit is contained in:
2023-08-06 12:38:38 +00:00
parent 5e216e5f67
commit 257644aff7
6 changed files with 25 additions and 8 deletions
+2 -2
View File
@@ -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.");
+2 -2
View File
@@ -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
View File
@@ -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]:
+7
View File
@@ -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>;
+6
View File
@@ -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 -2
View File
@@ -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;