gg-express 1.0.110 → 1.0.111

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,26 @@
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 MyRequestQuery<T extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<T>)[] = [], P extends boolean = false> = P extends true ? Request<{}, {}, {}, {
11
+ data: Partial<Omit<TypeResolve<T>, S[number]>> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>;
12
+ parameter: TypeResolve<PR>;
13
+ }, {}> : Request<{}, {}, {}, {
14
+ data: Omit<TypeResolve<T>, S[number]> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>;
15
+ parameter: TypeResolve<PR>;
16
+ }, {}>;
17
+ type MyRequestBody<T extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<T>)[] = [], P extends boolean = false> = P extends true ? Request<{}, {}, {
18
+ data: Partial<Omit<TypeResolve<T>, S[number]>> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>;
19
+ parameter: TypeResolve<PR>;
20
+ }, {}, {}> : Request<{}, {}, {
21
+ data: Omit<TypeResolve<T>, S[number]> & NonNullableObject<Pick<TypeResolve<T>, S[number]>>;
22
+ parameter: TypeResolve<PR>;
23
+ }, {}, {}>;
12
24
  type SuccessResponse<T extends ConstSchemaType> = {
13
25
  status: "SUCCESS";
14
26
  message: string;
@@ -19,34 +31,38 @@ type ErrorResponse = {
19
31
  message: string;
20
32
  };
21
33
  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> = {
34
+ type RequestParamWrapper<RQ extends ConstSchemaType, PR extends ParameterType, S extends readonly (keyof TypeResolve<RQ>)[] = [], P extends boolean = false> = {
23
35
  nonNullableKey?: S;
24
36
  isPartial?: P;
25
37
  data: RQ;
38
+ parameter?: PR;
39
+ };
40
+ 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>;
41
+ export type ParameterType = {
42
+ [key in string]: CustomType;
26
43
  };
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
44
  export default class GGExpressV2<appName extends string, urlPrefix extends string> {
29
45
  express: Express.Express;
30
46
  private outputPath;
31
47
  appName: string;
32
48
  constructor(app: Express.Express, appName: appName, outputPath: string[]);
33
49
  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>;
50
+ 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: {
51
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
36
52
  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>;
53
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"get", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
54
+ 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: {
55
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
40
56
  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>;
57
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"post", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
58
+ 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: {
59
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
44
60
  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>;
61
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"put", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
62
+ 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: {
63
+ requireParams: RequestParamWrapper<RQ, PR, S, P>;
48
64
  responseStructure: RS;
49
- }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"delete", RQ, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
65
+ }, ...middlewares: Array<(req: RequestQueryBodyWrapper<"delete", RQ, PR, S, P>, res: MyResponse<RS>, next: NextFunction) => any>): Express.Express;
50
66
  generateAPIFiles(): Promise<void>;
51
67
  private generateStaticRouteFile;
52
68
  }
@@ -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.111",
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,19 +15,21 @@ 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
  }
29
30
  type MyRequestQuery<
30
31
  T extends ConstSchemaType,
32
+ PR extends ParameterType,
31
33
  S extends readonly (keyof TypeResolve<T>)[] = [],
32
34
  P extends boolean = false
33
35
  > = P extends true
@@ -35,37 +37,50 @@ type MyRequestQuery<
35
37
  {},
36
38
  {},
37
39
  {},
38
- Partial<Omit<TypeResolve<T>, S[number]>> &
39
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
40
+ {
41
+ data: Partial<Omit<TypeResolve<T>, S[number]>> &
42
+ NonNullableObject<Pick<TypeResolve<T>, S[number]>>
43
+ parameter: TypeResolve<PR>
44
+ },
40
45
  {}
41
46
  >
42
47
  : Request<
43
48
  {},
44
49
  {},
45
50
  {},
46
- Omit<TypeResolve<T>, S[number]> &
47
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
51
+ {
52
+ data: Omit<TypeResolve<T>, S[number]> &
53
+ NonNullableObject<Pick<TypeResolve<T>, S[number]>>
54
+ parameter: TypeResolve<PR>
55
+ },
48
56
  {}
49
57
  >
50
58
 
51
59
  type MyRequestBody<
52
60
  T extends ConstSchemaType,
61
+ PR extends ParameterType,
53
62
  S extends readonly (keyof TypeResolve<T>)[] = [],
54
63
  P extends boolean = false
55
64
  > = P extends true
56
65
  ? Request<
57
66
  {},
58
67
  {},
59
- Partial<Omit<TypeResolve<T>, S[number]>> &
60
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
68
+ {
69
+ data: Partial<Omit<TypeResolve<T>, S[number]>> &
70
+ NonNullableObject<Pick<TypeResolve<T>, S[number]>>
71
+ parameter: TypeResolve<PR>
72
+ },
61
73
  {},
62
74
  {}
63
75
  >
64
76
  : Request<
65
77
  {},
66
78
  {},
67
- Omit<TypeResolve<T>, S[number]> &
68
- NonNullableObject<Pick<TypeResolve<T>, S[number]>>,
79
+ {
80
+ data: Omit<TypeResolve<T>, S[number]> &
81
+ NonNullableObject<Pick<TypeResolve<T>, S[number]>>
82
+ parameter: TypeResolve<PR>
83
+ },
69
84
  {},
70
85
  {}
71
86
  >
@@ -86,23 +101,28 @@ type MyResponse<T extends ConstSchemaType> = Response<
86
101
 
87
102
  type RequestParamWrapper<
88
103
  RQ extends ConstSchemaType,
104
+ PR extends ParameterType,
89
105
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
90
106
  P extends boolean = false
91
107
  > = {
92
108
  nonNullableKey?: S
93
109
  isPartial?: P
94
110
  data: RQ
111
+ parameter?: PR
95
112
  }
96
113
 
97
114
  type RequestQueryBodyWrapper<
98
115
  M extends Method,
99
116
  RQ extends ConstSchemaType,
117
+ PR extends ParameterType,
100
118
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
101
119
  P extends boolean = false
102
- > = MyRequest<M, RQ, S, P>
120
+ > = MyRequest<M, RQ, PR, S, P>
103
121
 
104
122
  const myExpressRouteList: routeList[] = []
105
-
123
+ export type ParameterType = {
124
+ [key in string]: CustomType
125
+ }
106
126
  export default class GGExpressV2<
107
127
  appName extends string,
108
128
  urlPrefix extends string
@@ -120,18 +140,19 @@ export default class GGExpressV2<
120
140
  M extends Method,
121
141
  RQ extends ConstSchemaType,
122
142
  RS extends ConstSchemaType,
143
+ PR extends ParameterType,
123
144
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
124
145
  P extends boolean = false
125
146
  >(
126
147
  method: M,
127
148
  url: string | string[],
128
149
  options: {
129
- requireParams: RequestParamWrapper<RQ, S, P>
150
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
130
151
  responseStructure: RS
131
152
  },
132
153
  ...middlewares: Array<
133
154
  (
134
- req: RequestQueryBodyWrapper<M, RQ, S, P>,
155
+ req: RequestQueryBodyWrapper<M, RQ, PR, S, P>,
135
156
  res: MyResponse<RS>,
136
157
  next: NextFunction
137
158
  ) => void | Promise<void>
@@ -151,6 +172,7 @@ export default class GGExpressV2<
151
172
  options.requireParams.isPartial === true ? true : false,
152
173
  requireParams: options.requireParams.data,
153
174
  responseStructure: options.responseStructure,
175
+ parameter: options.requireParams.parameter,
154
176
  })
155
177
  })
156
178
 
@@ -163,7 +185,7 @@ export default class GGExpressV2<
163
185
  ...middlewares.map(
164
186
  (mw) => (req: Request, res: Response, next: NextFunction) =>
165
187
  mw(
166
- req as RequestQueryBodyWrapper<M, RQ, S, P>,
188
+ req as RequestQueryBodyWrapper<M, RQ, PR, S, P>,
167
189
  res as MyResponse<RS>,
168
190
  next
169
191
  )
@@ -173,6 +195,7 @@ export default class GGExpressV2<
173
195
  get<
174
196
  RQ extends ConstSchemaType,
175
197
  RS extends ConstSchemaType,
198
+ PR extends ParameterType,
176
199
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
177
200
  P extends boolean = false
178
201
  >(
@@ -180,12 +203,12 @@ export default class GGExpressV2<
180
203
  | `${urlPrefix}/${appName}/${string}`
181
204
  | `${urlPrefix}/${appName}/${string}`[],
182
205
  options: {
183
- requireParams: RequestParamWrapper<RQ, S, P>
206
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
184
207
  responseStructure: RS
185
208
  },
186
209
  ...middlewares: Array<
187
210
  (
188
- req: RequestQueryBodyWrapper<"get", RQ, S, P>,
211
+ req: RequestQueryBodyWrapper<"get", RQ, PR, S, P>,
189
212
  res: MyResponse<RS>,
190
213
  next: NextFunction
191
214
  ) => any
@@ -197,6 +220,7 @@ export default class GGExpressV2<
197
220
  post<
198
221
  RQ extends ConstSchemaType,
199
222
  RS extends ConstSchemaType,
223
+ PR extends ParameterType,
200
224
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
201
225
  P extends boolean = false
202
226
  >(
@@ -204,12 +228,12 @@ export default class GGExpressV2<
204
228
  | `${urlPrefix}/${appName}/${string}`
205
229
  | `${urlPrefix}/${appName}/${string}`[],
206
230
  options: {
207
- requireParams: RequestParamWrapper<RQ, S, P>
231
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
208
232
  responseStructure: RS
209
233
  },
210
234
  ...middlewares: Array<
211
235
  (
212
- req: RequestQueryBodyWrapper<"post", RQ, S, P>,
236
+ req: RequestQueryBodyWrapper<"post", RQ, PR, S, P>,
213
237
  res: MyResponse<RS>,
214
238
  next: NextFunction
215
239
  ) => any
@@ -220,6 +244,7 @@ export default class GGExpressV2<
220
244
  put<
221
245
  RQ extends ConstSchemaType,
222
246
  RS extends ConstSchemaType,
247
+ PR extends ParameterType,
223
248
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
224
249
  P extends boolean = false
225
250
  >(
@@ -227,12 +252,12 @@ export default class GGExpressV2<
227
252
  | `${urlPrefix}/${appName}/${string}`
228
253
  | `${urlPrefix}/${appName}/${string}`[],
229
254
  options: {
230
- requireParams: RequestParamWrapper<RQ, S, P>
255
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
231
256
  responseStructure: RS
232
257
  },
233
258
  ...middlewares: Array<
234
259
  (
235
- req: RequestQueryBodyWrapper<"put", RQ, S, P>,
260
+ req: RequestQueryBodyWrapper<"put", RQ, PR, S, P>,
236
261
  res: MyResponse<RS>,
237
262
  next: NextFunction
238
263
  ) => any
@@ -243,6 +268,7 @@ export default class GGExpressV2<
243
268
  delete<
244
269
  RQ extends ConstSchemaType,
245
270
  RS extends ConstSchemaType,
271
+ PR extends ParameterType,
246
272
  S extends readonly (keyof TypeResolve<RQ>)[] = [],
247
273
  P extends boolean = false
248
274
  >(
@@ -250,12 +276,12 @@ export default class GGExpressV2<
250
276
  | `${urlPrefix}/${appName}/${string}`
251
277
  | `${urlPrefix}/${appName}/${string}`[],
252
278
  options: {
253
- requireParams: RequestParamWrapper<RQ, S, P>
279
+ requireParams: RequestParamWrapper<RQ, PR, S, P>
254
280
  responseStructure: RS
255
281
  },
256
282
  ...middlewares: Array<
257
283
  (
258
- req: RequestQueryBodyWrapper<"delete", RQ, S, P>,
284
+ req: RequestQueryBodyWrapper<"delete", RQ, PR, S, P>,
259
285
  res: MyResponse<RS>,
260
286
  next: NextFunction
261
287
  ) => 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>>[]