gg-express 1.0.110 → 1.0.112

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,21 @@
1
1
  import { NextFunction } from "express";
2
2
  import { Request, Response } from "express-serve-static-core";
3
3
  import Express from "express-serve-static-core";
4
- import { TypeResolve, ConstSchemaType } from "./typeResolver";
4
+ import { TypeResolve, ConstSchemaType, CustomType } from "./typeResolver";
5
5
  export type Method = "get" | "post" | "put" | "delete";
6
- type MyRequest<M extends Method, RQ extends ConstSchemaType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false> = M extends "get" ? MyRequestQuery<RQ, S, P> : MyRequestBody<RQ, S, P>;
6
+ type MyRequest<M extends Method, RQ extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false> = M extends "get" ? MyRequestQuery<RQ, PR, S, P> : MyRequestBody<RQ, PR, S, P>;
7
7
  type NonNullableObject<T> = {
8
8
  [K in keyof T]-?: NonNullable<T[K]>;
9
9
  };
10
- type MyRequestQuery<T extends ConstSchemaType, S extends readonly (keyof TypeResolve<T>)[] = [], P extends boolean = false> = P extends true ? Request<{}, {}, {}, Partial<Omit<TypeResolve<T>, S[number]>> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>, {}> : Request<{}, {}, {}, Omit<TypeResolve<T>, S[number]> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>, {}>;
11
- type MyRequestBody<T extends ConstSchemaType, S extends readonly (keyof TypeResolve<T>)[] = [], P extends boolean = false> = P extends true ? Request<{}, {}, Partial<Omit<TypeResolve<T>, S[number]>> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>, {}, {}> : Request<{}, {}, Omit<TypeResolve<T>, S[number]> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>, {}, {}>;
10
+ type ResolvePartial<T extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<T>)[] = [], P extends boolean = false> = P extends true ? {
11
+ data: Partial<Omit<TypeResolve<T>, S[number]>> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>;
12
+ parameter: TypeResolve<PR>;
13
+ } : {
14
+ data: Omit<TypeResolve<T>, S[number]> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>;
15
+ parameter: TypeResolve<PR>;
16
+ };
17
+ type MyRequestQuery<T extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<T>)[] = [], P extends boolean = false> = P extends true ? Request<{}, {}, {}, ResolvePartial<T, PR, S, P>, {}> : Request<{}, {}, {}, ResolvePartial<T, PR, S, P>, {}>;
18
+ type MyRequestBody<T extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<T>)[] = [], P extends boolean = false> = P extends true ? Request<{}, {}, ResolvePartial<T, PR, S, P>, {}, {}> : Request<{}, {}, ResolvePartial<T, PR, S, P>, {}, {}>;
12
19
  type SuccessResponse<T extends ConstSchemaType> = {
13
20
  status: "SUCCESS";
14
21
  message: string;
@@ -19,34 +26,38 @@ type ErrorResponse = {
19
26
  message: string;
20
27
  };
21
28
  type MyResponse<T extends ConstSchemaType> = Response<SuccessResponse<T> | ErrorResponse>;
22
- type RequestParamWrapper<RQ extends ConstSchemaType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false> = {
29
+ type RequestParamWrapper<RQ extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false> = {
23
30
  nonNullableKey?: S;
24
31
  isPartial?: P;
25
32
  data: RQ;
33
+ parameter?: PR;
34
+ };
35
+ type RequestQueryBodyWrapper<M extends Method, RQ extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false> = MyRequest<M, RQ, PR, S, P>;
36
+ export type ParameterType = {
37
+ [key in string]: CustomType;
26
38
  };
27
- type RequestQueryBodyWrapper<M extends Method, RQ extends ConstSchemaType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false> = MyRequest<M, RQ, S, P>;
28
39
  export default class GGExpressV2<appName extends string, urlPrefix extends string> {
29
40
  express: Express.Express;
30
41
  private outputPath;
31
42
  appName: string;
32
43
  constructor(app: Express.Express, appName: appName, outputPath: string[]);
33
44
  private rootMethod;
34
- get<RQ extends ConstSchemaType, RS extends ConstSchemaType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
35
- requireParams: RequestParamWrapper<RQ, S, P>;
45
+ get<RQ extends ConstSchemaType, RS extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
46
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
36
47
  responseStructure: RS;
37
- }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"get", RQ, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
38
- post<RQ extends ConstSchemaType, RS extends ConstSchemaType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
39
- requireParams: RequestParamWrapper<RQ, S, P>;
48
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"get", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
49
+ post<RQ extends ConstSchemaType, RS extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
50
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
40
51
  responseStructure: RS;
41
- }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"post", RQ, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
42
- put<RQ extends ConstSchemaType, RS extends ConstSchemaType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
43
- requireParams: RequestParamWrapper<RQ, S, P>;
52
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"post", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
53
+ put<RQ extends ConstSchemaType, RS extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
54
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
44
55
  responseStructure: RS;
45
- }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"put", RQ, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
46
- delete<RQ extends ConstSchemaType, RS extends ConstSchemaType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
47
- requireParams: RequestParamWrapper<RQ, S, P>;
56
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"put", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
57
+ delete<RQ extends ConstSchemaType, RS extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false>(url: `${urlPrefix}/${appName}/${string}` | `${urlPrefix}/${appName}/${string}`[], options: {
58
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
48
59
  responseStructure: RS;
49
- }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"delete", RQ, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
60
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"delete", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
50
61
  generateAPIFiles(): Promise<void>;
51
62
  private generateStaticRouteFile;
52
63
  }
@@ -38,6 +38,7 @@ class GGExpressV2 {
38
38
  isPartialRequireParam: options.requireParams.isPartial === true ? true : false,
39
39
  requireParams: options.requireParams.data,
40
40
  responseStructure: options.responseStructure,
41
+ parameter: options.requireParams.parameter,
41
42
  });
42
43
  });
43
44
  return this.express[method](url,
@@ -1,16 +1,18 @@
1
- import { Method } from "./GGExpressV2";
1
+ import { Method, ParameterType } from "./GGExpressV2";
2
2
  import { ConstSchemaType } from "./typeResolver";
3
3
  export type routeList = {
4
4
  method: Method;
5
5
  url: string;
6
6
  isPartialRequireParam: boolean;
7
7
  requireParams: ConstSchemaType;
8
+ parameter?: ParameterType;
8
9
  responseStructure: ConstSchemaType;
9
10
  };
10
11
  type PrepareRouteStructure = {
11
12
  [K in Method]: {
12
13
  [key in string]: {
13
14
  requireParams: string;
15
+ parameter: string;
14
16
  responseStructure: string;
15
17
  isPartial: boolean;
16
18
  };
@@ -16,6 +16,9 @@ function extract(allData, prepareRoute) {
16
16
  for (const route of allData) {
17
17
  prepareRoute[route.method][route.url] = {
18
18
  requireParams: parentInputToCode(route.requireParams, route.isPartialRequireParam),
19
+ parameter: route.parameter
20
+ ? parentInputToCode({ data: route.parameter }, false)
21
+ : "never",
19
22
  responseStructure: parentInputToCode(route.responseStructure, false),
20
23
  isPartial: route.isPartialRequireParam,
21
24
  };
@@ -99,7 +102,7 @@ function generateStaticRouteFileV2(appName, data) {
99
102
  return keyName
100
103
  .map((keyName) => `
101
104
  "${keyName}" : {
102
- requireParams : ${data[keyName].requireParams} ,
105
+ requireParams : { data: ${data[keyName].requireParams}, parameter : ${data[keyName].parameter} },
103
106
  responseStructure : {
104
107
  data : ${data[keyName].responseStructure},
105
108
  status: "SUCCESS" | "ERROR",
@@ -1,27 +1,35 @@
1
1
  export interface staticRouteInterface_hotel_v2 {
2
2
  get: {
3
- "/api/hotel/users/id": {
3
+ "/api/v2/hotel/users/id": {
4
4
  requireParams: {
5
- id: number;
6
- bookingGroupID: number;
7
- checkInDate: string;
8
- checkOutDate: string;
9
- checkInTime: string;
10
- checkOutTime: string;
11
- roomRate: number;
12
- extraBedRate: number;
13
- roomNumber?: string | undefined | null;
14
- editTime: string;
15
- createTime: string;
16
- shiftDate: string;
17
- shiftName: string;
18
- userName: string;
19
- bookingStatus: "ACTIVE" | "CLOSE" | "CANCEL" | "NO_SHOW";
20
- is_specificRoom: number;
21
- guestCount: number;
22
- reasonToCancel: string;
23
- note: string;
24
- }[];
5
+ data: {
6
+ id: number;
7
+ bookingGroupID: number;
8
+ checkInDate: string;
9
+ checkOutDate: string;
10
+ checkInTime: string;
11
+ checkOutTime: string;
12
+ roomRate: number;
13
+ extraBedRate: number;
14
+ roomNumber?: string | undefined | null;
15
+ editTime: string;
16
+ createTime: string;
17
+ shiftDate: string;
18
+ shiftName: string | null;
19
+ userName: string;
20
+ bookingStatus: "ACTIVE" | "CLOSE" | "CANCEL" | "NO_SHOW";
21
+ is_specificRoom: number;
22
+ guestCount: number;
23
+ reasonToCancel: string;
24
+ note?: string | undefined | null;
25
+ };
26
+ parameter: {
27
+ data: {
28
+ xx: boolean;
29
+ data: string[];
30
+ };
31
+ };
32
+ };
25
33
  responseStructure: {
26
34
  data: {
27
35
  id: number;
@@ -36,13 +44,13 @@ export interface staticRouteInterface_hotel_v2 {
36
44
  editTime: string;
37
45
  createTime: string;
38
46
  shiftDate: string;
39
- shiftName: string;
47
+ shiftName: string | null;
40
48
  userName: string;
41
49
  bookingStatus: "ACTIVE" | "CLOSE" | "CANCEL" | "NO_SHOW";
42
50
  is_specificRoom: number;
43
51
  guestCount: number;
44
52
  reasonToCancel: string;
45
- note: string;
53
+ note?: string | undefined | null;
46
54
  }[];
47
55
  status: "SUCCESS" | "ERROR";
48
56
  message: string;
@@ -45,48 +45,22 @@ function run() {
45
45
  requireParams: {
46
46
  data: exports.hotel_model_const_temp.booking,
47
47
  nonNullableKey: ["id", "note"],
48
+ parameter: {
49
+ xx: "boolean",
50
+ data: "string[]",
51
+ },
48
52
  // isPartial: true,
49
53
  },
50
54
  responseStructure: [exports.hotel_model_const_temp.booking],
51
55
  }, (req, res, next) => {
52
- req.query;
56
+ req.query.parameter.xx;
57
+ req.query.data;
53
58
  return res.json({
54
59
  message: "",
55
60
  status: "SUCCESS",
56
61
  data: [],
57
62
  });
58
63
  });
59
- // ggapp.post(
60
- // "/api/hotel/booking/id",
61
- // {
62
- // requireParams: {
63
- // isPartial: true,
64
- // data: {
65
- // id: "number",
66
- // id2: "number",
67
- // name: "string",
68
- // },
69
- // },
70
- // responseStructure: {
71
- // bookingData: {
72
- // id: "number",
73
- // roomNumber: "string",
74
- // },
75
- // },
76
- // },
77
- // (req, res, next) => {
78
- // return res.json({
79
- // message: "",
80
- // status: "SUCCESS",
81
- // data: {
82
- // bookingData: {
83
- // id: 2,
84
- // roomNumber: "dd",
85
- // },
86
- // },
87
- // })
88
- // }
89
- // )
90
64
  app.listen(3002, () => __awaiter(this, void 0, void 0, function* () {
91
65
  yield ggapp.generateAPIFiles();
92
66
  console.log("done");
@@ -1,14 +1,14 @@
1
1
  type Unarray<T> = T extends (infer U)[] ? U : T;
2
2
  type BaseType = "string" | "number" | "boolean" | "string[]" | "number[]" | "boolean[]";
3
- type CustomType = BaseType | `${BaseType}?` | `${BaseType}~` | `${BaseType}?~`;
4
- type InputEnum = readonly string[] | readonly number[];
3
+ export type CustomType = BaseType | `${BaseType}?` | `${BaseType}~` | `${BaseType}?~`;
4
+ export type InputEnumType = readonly string[] | readonly number[];
5
5
  export type ConstSchemaType = {
6
- [key in string]: CustomType | ConstSchemaType | ConstSchemaType[] | InputEnum;
6
+ [key in string]: CustomType | ConstSchemaType | ConstSchemaType[] | InputEnumType;
7
7
  } | ConstSchemaType[];
8
8
  type ResolveBase<T extends BaseType> = T extends "string" ? string : T extends "string[]" ? string[] : T extends "number" ? number : T extends "number[]" ? number[] : T extends "boolean" ? boolean : T extends "boolean[]" ? boolean[] : never;
9
9
  export declare const toArray: <T>(input: T) => T[];
10
10
  type ResolveExtraType<T> = T extends `${infer B}?~` ? ResolveBase<B & BaseType> | null | undefined : T extends `${infer B}?` ? ResolveBase<B & BaseType> | undefined : T extends `${infer B}~` ? ResolveBase<B & BaseType> | null : ResolveBase<T & BaseType>;
11
- type chooseType<T> = T extends InputEnum ? T[number] : T extends any[] ? chooseType<Unarray<T>>[] : T extends object ? TypeResolve<T> : ResolveExtraType<T>;
11
+ type chooseType<T> = T extends InputEnumType ? T[number] : T extends any[] ? chooseType<Unarray<T>>[] : T extends object ? TypeResolve<T> : ResolveExtraType<T>;
12
12
  export type TypeResolve<T> = {
13
13
  [K in keyof T]: chooseType<T[K]>;
14
14
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gg-express",
3
- "version": "1.0.110",
3
+ "version": "1.0.112",
4
4
  "description": "",
5
5
  "main": "dist/main.js",
6
6
  "scripts": {
@@ -2,7 +2,7 @@ import { NextFunction } from "express"
2
2
  import { Request, Response } from "express-serve-static-core"
3
3
  import Express from "express-serve-static-core"
4
4
  import fs from "fs"
5
- import { TypeResolve, ConstSchemaType } from "./typeResolver"
5
+ import { TypeResolve, ConstSchemaType, CustomType } from "./typeResolver"
6
6
  import {
7
7
  generateStaticRouteFileV2,
8
8
  routeList,
@@ -15,60 +15,52 @@ export type Method = "get" | "post" | "put" | "delete"
15
15
  type MyRequest<
16
16
  M extends Method,
17
17
  RQ extends ConstSchemaType,
18
+ PR extends ParameterType,
18
19
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
19
20
  P extends boolean = false
20
21
  > = M extends "get"
21
22
  ? // get
22
- MyRequestQuery<RQ, S, P>
23
+ MyRequestQuery<RQ, PR, S, P>
23
24
  : // post, put, delete
24
- MyRequestBody<RQ, S, P>
25
+ MyRequestBody<RQ, PR, S, P>
25
26
 
26
27
  type NonNullableObject<T> = {
27
28
  [K in keyof T]-?: NonNullable<T[K]>
28
29
  }
30
+ type ResolvePartial<
31
+ T extends ConstSchemaType,
32
+ PR extends ParameterType,
33
+ S extends readonly (keyof TypeResolve<T>)[] = [],
34
+ P extends boolean = false
35
+ > = P extends true
36
+ ? {
37
+ data: Partial<Omit<TypeResolve<T>, S[number]>> &
38
+ NonNullableObject<Pick<TypeResolve<T>, S[number]>>
39
+ parameter: TypeResolve<PR>
40
+ }
41
+ : {
42
+ data: Omit<TypeResolve<T>, S[number]> &
43
+ NonNullableObject<Pick<TypeResolve<T>, S[number]>>
44
+ parameter: TypeResolve<PR>
45
+ }
46
+
29
47
  type MyRequestQuery<
30
48
  T extends ConstSchemaType,
49
+ PR extends ParameterType,
31
50
  S extends readonly (keyof TypeResolve<T>)[] = [],
32
51
  P extends boolean = false
33
52
  > = P extends true
34
- ? Request<
35
- {},
36
- {},
37
- {},
38
- Partial<Omit<TypeResolve<T>, S[number]>> &
39
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
40
- {}
41
- >
42
- : Request<
43
- {},
44
- {},
45
- {},
46
- Omit<TypeResolve<T>, S[number]> &
47
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
48
- {}
49
- >
53
+ ? Request<{}, {}, {}, ResolvePartial<T, PR, S, P>, {}>
54
+ : Request<{}, {}, {}, ResolvePartial<T, PR, S, P>, {}>
50
55
 
51
56
  type MyRequestBody<
52
57
  T extends ConstSchemaType,
58
+ PR extends ParameterType,
53
59
  S extends readonly (keyof TypeResolve<T>)[] = [],
54
60
  P extends boolean = false
55
61
  > = P extends true
56
- ? Request<
57
- {},
58
- {},
59
- Partial<Omit<TypeResolve<T>, S[number]>> &
60
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
61
- {},
62
- {}
63
- >
64
- : Request<
65
- {},
66
- {},
67
- Omit<TypeResolve<T>, S[number]> &
68
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
69
- {},
70
- {}
71
- >
62
+ ? Request<{}, {}, ResolvePartial<T, PR, S, P>, {}, {}>
63
+ : Request<{}, {}, ResolvePartial<T, PR, S, P>, {}, {}>
72
64
 
73
65
  type SuccessResponse<T extends ConstSchemaType> = {
74
66
  status: "SUCCESS"
@@ -86,23 +78,28 @@ type MyResponse<T extends ConstSchemaType> = Response<
86
78
 
87
79
  type RequestParamWrapper<
88
80
  RQ extends ConstSchemaType,
81
+ PR extends ParameterType,
89
82
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
90
83
  P extends boolean = false
91
84
  > = {
92
85
  nonNullableKey?: S
93
86
  isPartial?: P
94
87
  data: RQ
88
+ parameter?: PR
95
89
  }
96
90
 
97
91
  type RequestQueryBodyWrapper<
98
92
  M extends Method,
99
93
  RQ extends ConstSchemaType,
94
+ PR extends ParameterType,
100
95
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
101
96
  P extends boolean = false
102
- > = MyRequest<M, RQ, S, P>
97
+ > = MyRequest<M, RQ, PR, S, P>
103
98
 
104
99
  const myExpressRouteList: routeList[] = []
105
-
100
+ export type ParameterType = {
101
+ [key in string]: CustomType
102
+ }
106
103
  export default class GGExpressV2<
107
104
  appName extends string,
108
105
  urlPrefix extends string
@@ -120,18 +117,19 @@ export default class GGExpressV2<
120
117
  M extends Method,
121
118
  RQ extends ConstSchemaType,
122
119
  RS extends ConstSchemaType,
120
+ PR extends ParameterType,
123
121
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
124
122
  P extends boolean = false
125
123
  >(
126
124
  method: M,
127
125
  url: string | string[],
128
126
  options: {
129
- requireParams: RequestParamWrapper<RQ, S, P>
127
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
130
128
  responseStructure: RS
131
129
  },
132
130
  ...middlewares: Array<
133
131
  (
134
- req: RequestQueryBodyWrapper<M, RQ, S, P>,
132
+ req: RequestQueryBodyWrapper<M, RQ, PR, S, P>,
135
133
  res: MyResponse<RS>,
136
134
  next: NextFunction
137
135
  ) => void | Promise<void>
@@ -151,6 +149,7 @@ export default class GGExpressV2<
151
149
  options.requireParams.isPartial === true ? true : false,
152
150
  requireParams: options.requireParams.data,
153
151
  responseStructure: options.responseStructure,
152
+ parameter: options.requireParams.parameter,
154
153
  })
155
154
  })
156
155
 
@@ -163,7 +162,7 @@ export default class GGExpressV2<
163
162
  ...middlewares.map(
164
163
  (mw) => (req: Request, res: Response, next: NextFunction) =>
165
164
  mw(
166
- req as RequestQueryBodyWrapper<M, RQ, S, P>,
165
+ req as RequestQueryBodyWrapper<M, RQ, PR, S, P>,
167
166
  res as MyResponse<RS>,
168
167
  next
169
168
  )
@@ -173,6 +172,7 @@ export default class GGExpressV2<
173
172
  get<
174
173
  RQ extends ConstSchemaType,
175
174
  RS extends ConstSchemaType,
175
+ PR extends ParameterType,
176
176
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
177
177
  P extends boolean = false
178
178
  >(
@@ -180,12 +180,12 @@ export default class GGExpressV2<
180
180
  | `${urlPrefix}/${appName}/${string}`
181
181
  | `${urlPrefix}/${appName}/${string}`[],
182
182
  options: {
183
- requireParams: RequestParamWrapper<RQ, S, P>
183
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
184
184
  responseStructure: RS
185
185
  },
186
186
  ...middlewares: Array<
187
187
  (
188
- req: RequestQueryBodyWrapper<"get", RQ, S, P>,
188
+ req: RequestQueryBodyWrapper<"get", RQ, PR, S, P>,
189
189
  res: MyResponse<RS>,
190
190
  next: NextFunction
191
191
  ) => any
@@ -197,6 +197,7 @@ export default class GGExpressV2<
197
197
  post<
198
198
  RQ extends ConstSchemaType,
199
199
  RS extends ConstSchemaType,
200
+ PR extends ParameterType,
200
201
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
201
202
  P extends boolean = false
202
203
  >(
@@ -204,12 +205,12 @@ export default class GGExpressV2<
204
205
  | `${urlPrefix}/${appName}/${string}`
205
206
  | `${urlPrefix}/${appName}/${string}`[],
206
207
  options: {
207
- requireParams: RequestParamWrapper<RQ, S, P>
208
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
208
209
  responseStructure: RS
209
210
  },
210
211
  ...middlewares: Array<
211
212
  (
212
- req: RequestQueryBodyWrapper<"post", RQ, S, P>,
213
+ req: RequestQueryBodyWrapper<"post", RQ, PR, S, P>,
213
214
  res: MyResponse<RS>,
214
215
  next: NextFunction
215
216
  ) => any
@@ -220,6 +221,7 @@ export default class GGExpressV2<
220
221
  put<
221
222
  RQ extends ConstSchemaType,
222
223
  RS extends ConstSchemaType,
224
+ PR extends ParameterType,
223
225
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
224
226
  P extends boolean = false
225
227
  >(
@@ -227,12 +229,12 @@ export default class GGExpressV2<
227
229
  | `${urlPrefix}/${appName}/${string}`
228
230
  | `${urlPrefix}/${appName}/${string}`[],
229
231
  options: {
230
- requireParams: RequestParamWrapper<RQ, S, P>
232
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
231
233
  responseStructure: RS
232
234
  },
233
235
  ...middlewares: Array<
234
236
  (
235
- req: RequestQueryBodyWrapper<"put", RQ, S, P>,
237
+ req: RequestQueryBodyWrapper<"put", RQ, PR, S, P>,
236
238
  res: MyResponse<RS>,
237
239
  next: NextFunction
238
240
  ) => any
@@ -243,6 +245,7 @@ export default class GGExpressV2<
243
245
  delete<
244
246
  RQ extends ConstSchemaType,
245
247
  RS extends ConstSchemaType,
248
+ PR extends ParameterType,
246
249
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
247
250
  P extends boolean = false
248
251
  >(
@@ -250,12 +253,12 @@ export default class GGExpressV2<
250
253
  | `${urlPrefix}/${appName}/${string}`
251
254
  | `${urlPrefix}/${appName}/${string}`[],
252
255
  options: {
253
- requireParams: RequestParamWrapper<RQ, S, P>
256
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
254
257
  responseStructure: RS
255
258
  },
256
259
  ...middlewares: Array<
257
260
  (
258
- req: RequestQueryBodyWrapper<"delete", RQ, S, P>,
261
+ req: RequestQueryBodyWrapper<"delete", RQ, PR, S, P>,
259
262
  res: MyResponse<RS>,
260
263
  next: NextFunction
261
264
  ) => any
@@ -1,10 +1,11 @@
1
- import { Method } from "./GGExpressV2"
2
- import { ConstSchemaType } from "./typeResolver"
1
+ import { Method, ParameterType } from "./GGExpressV2"
2
+ import { ConstSchemaType, CustomType } from "./typeResolver"
3
3
  export type routeList = {
4
4
  method: Method
5
5
  url: string
6
6
  isPartialRequireParam: boolean
7
7
  requireParams: ConstSchemaType
8
+ parameter?: ParameterType
8
9
  responseStructure: ConstSchemaType
9
10
  }
10
11
 
@@ -12,6 +13,7 @@ type PrepareRouteStructure = {
12
13
  [K in Method]: {
13
14
  [key in string]: {
14
15
  requireParams: string
16
+ parameter: string
15
17
  responseStructure: string
16
18
  isPartial: boolean
17
19
  }
@@ -38,6 +40,9 @@ function extract(
38
40
  route.requireParams,
39
41
  route.isPartialRequireParam
40
42
  ),
43
+ parameter: route.parameter
44
+ ? parentInputToCode({ data: route.parameter }, false)
45
+ : "never",
41
46
  responseStructure: parentInputToCode(route.responseStructure, false),
42
47
  isPartial: route.isPartialRequireParam,
43
48
  }
@@ -126,7 +131,7 @@ export function generateStaticRouteFileV2(appName: string, data: routeList[]) {
126
131
  .map(
127
132
  (keyName) => `
128
133
  "${keyName}" : {
129
- requireParams : ${data[keyName].requireParams} ,
134
+ requireParams : { data: ${data[keyName].requireParams}, parameter : ${data[keyName].parameter} },
130
135
  responseStructure : {
131
136
  data : ${data[keyName].responseStructure},
132
137
  status: "SUCCESS" | "ERROR",
@@ -1,27 +1,32 @@
1
1
  export interface staticRouteInterface_hotel_v2 {
2
2
  get: {
3
- "/api/hotel/users/id": {
3
+ "/api/v2/hotel/users/id": {
4
4
  requireParams: {
5
- id: number
6
- bookingGroupID: number
7
- checkInDate: string
8
- checkOutDate: string
9
- checkInTime: string
10
- checkOutTime: string
11
- roomRate: number
12
- extraBedRate: number
13
- roomNumber?: string | undefined | null
14
- editTime: string
15
- createTime: string
16
- shiftDate: string
17
- shiftName: string
18
- userName: string
19
- bookingStatus: "ACTIVE" | "CLOSE" | "CANCEL" | "NO_SHOW"
20
- is_specificRoom: number
21
- guestCount: number
22
- reasonToCancel: string
23
- note: string
24
- }[]
5
+ data: {
6
+ id: number
7
+ bookingGroupID: number
8
+ checkInDate: string
9
+ checkOutDate: string
10
+ checkInTime: string
11
+ checkOutTime: string
12
+ roomRate: number
13
+ extraBedRate: number
14
+ roomNumber?: string | undefined | null
15
+ editTime: string
16
+ createTime: string
17
+ shiftDate: string
18
+ shiftName: string | null
19
+ userName: string
20
+ bookingStatus: "ACTIVE" | "CLOSE" | "CANCEL" | "NO_SHOW"
21
+ is_specificRoom: number
22
+ guestCount: number
23
+ reasonToCancel: string
24
+ note?: string | undefined | null
25
+ }
26
+ parameter: {
27
+ data: { xx: boolean; data: string[] }
28
+ }
29
+ }
25
30
  responseStructure: {
26
31
  data: {
27
32
  id: number
@@ -36,13 +41,13 @@ export interface staticRouteInterface_hotel_v2 {
36
41
  editTime: string
37
42
  createTime: string
38
43
  shiftDate: string
39
- shiftName: string
44
+ shiftName: string | null
40
45
  userName: string
41
46
  bookingStatus: "ACTIVE" | "CLOSE" | "CANCEL" | "NO_SHOW"
42
47
  is_specificRoom: number
43
48
  guestCount: number
44
49
  reasonToCancel: string
45
- note: string
50
+ note?: string | undefined | null
46
51
  }[]
47
52
  status: "SUCCESS" | "ERROR"
48
53
  message: string
@@ -36,12 +36,17 @@ function run() {
36
36
  requireParams: {
37
37
  data: hotel_model_const_temp.booking,
38
38
  nonNullableKey: ["id", "note"],
39
+ parameter: {
40
+ xx: "boolean",
41
+ data: "string[]",
42
+ },
39
43
  // isPartial: true,
40
44
  },
41
45
  responseStructure: [hotel_model_const_temp.booking],
42
46
  },
43
47
  (req, res, next) => {
44
- req.query
48
+ req.query.parameter.xx
49
+ req.query.data
45
50
  return res.json({
46
51
  message: "",
47
52
  status: "SUCCESS",
@@ -49,37 +54,6 @@ function run() {
49
54
  })
50
55
  }
51
56
  )
52
- // ggapp.post(
53
- // "/api/hotel/booking/id",
54
- // {
55
- // requireParams: {
56
- // isPartial: true,
57
- // data: {
58
- // id: "number",
59
- // id2: "number",
60
- // name: "string",
61
- // },
62
- // },
63
- // responseStructure: {
64
- // bookingData: {
65
- // id: "number",
66
- // roomNumber: "string",
67
- // },
68
- // },
69
- // },
70
- // (req, res, next) => {
71
- // return res.json({
72
- // message: "",
73
- // status: "SUCCESS",
74
- // data: {
75
- // bookingData: {
76
- // id: 2,
77
- // roomNumber: "dd",
78
- // },
79
- // },
80
- // })
81
- // }
82
- // )
83
57
 
84
58
  app.listen(3002, async () => {
85
59
  await ggapp.generateAPIFiles()
@@ -8,8 +8,12 @@ type BaseType =
8
8
  | "number[]"
9
9
  | "boolean[]"
10
10
 
11
- type CustomType = BaseType | `${BaseType}?` | `${BaseType}~` | `${BaseType}?~`
12
- type InputEnum = readonly string[] | readonly number[]
11
+ export type CustomType =
12
+ | BaseType
13
+ | `${BaseType}?`
14
+ | `${BaseType}~`
15
+ | `${BaseType}?~`
16
+ export type InputEnumType = readonly string[] | readonly number[]
13
17
 
14
18
  export type ConstSchemaType =
15
19
  | {
@@ -17,7 +21,7 @@ export type ConstSchemaType =
17
21
  | CustomType
18
22
  | ConstSchemaType
19
23
  | ConstSchemaType[]
20
- | InputEnum
24
+ | InputEnumType
21
25
  }
22
26
  | ConstSchemaType[]
23
27
 
@@ -52,7 +56,7 @@ type ResolveExtraType<T> =
52
56
  : // plain primitive
53
57
  ResolveBase<T & BaseType>
54
58
 
55
- type chooseType<T> = T extends InputEnum
59
+ type chooseType<T> = T extends InputEnumType
56
60
  ? T[number]
57
61
  : T extends any[]
58
62
  ? chooseType<Unarray<T>>[]