gg-express 1.0.11 → 1.0.19

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.
package/dist/GGApi.js CHANGED
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
@@ -57,3 +66,14 @@ class GGApi {
57
66
  }
58
67
  }
59
68
  exports.GGApi = GGApi;
69
+ function run() {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ const api = new GGApi();
72
+ const data = yield api.post("/api/item", {
73
+ parameter: {
74
+ bankID: 1,
75
+ },
76
+ data: [{ id: 2, name: "2" }],
77
+ });
78
+ });
79
+ }
@@ -4,31 +4,46 @@ type Unarray<T> = T extends (infer U)[] ? U : T;
4
4
  type AsConstArray<T extends readonly any[]> = [...T];
5
5
  type paramType = "number" | "string" | AsConstArray<Array<string>> | AsConstArray<Array<number>>;
6
6
  interface responseStructure {
7
+ parameter: {
8
+ [key: string]: "number" | "string";
9
+ };
7
10
  dataType: "singleObject" | "arrayObject";
8
11
  structure: {
9
12
  [key: string]: paramType;
10
13
  };
11
14
  }
12
15
  interface requireParamsStructure {
16
+ parameter: {
17
+ [key: string]: "number" | "string";
18
+ };
13
19
  dataType: "singleObject" | "arrayObject";
14
20
  structure: {
15
21
  [key: string]: paramType;
16
22
  };
17
23
  }
18
24
  type numberOrString<T> = T extends "number" ? number : T extends "string" ? string : T extends string[] ? Unarray<T> : T extends number[] ? Unarray<T> : "error-type";
19
- type singleOrArrayObject<DT extends requireParamsStructure["dataType"], T extends requireParamsStructure["structure"], K extends keyof T> = DT extends "arrayObject" ? {
25
+ type singleOrArrayObject<DT extends requireParamsStructure["dataType"], T extends requireParamsStructure["structure"], K extends keyof T, P extends requireParamsStructure["parameter"]> = DT extends "arrayObject" ? {
26
+ parameter: {
27
+ [Key in keyof P]: numberOrString<P[Key]>;
28
+ };
20
29
  data: {
21
30
  [Key in K]: numberOrString<T[Key]>;
22
31
  }[];
23
32
  } : {
33
+ parameter: {
34
+ [Key in keyof P]: numberOrString<P[Key]>;
35
+ };
24
36
  data: {
25
37
  [Key in K]: numberOrString<T[Key]>;
26
38
  };
27
39
  };
28
- type MyRequest<DT extends requireParamsStructure["dataType"], T extends requireParamsStructure["structure"], K extends keyof T> = Request<{}, {}, singleOrArrayObject<DT, T, K>, singleOrArrayObject<DT, T, K>, {}>;
29
- type MyResponse<DT extends responseStructure["dataType"], T extends responseStructure["structure"], K extends keyof T> = Response<{
40
+ type MyRequest<DT extends requireParamsStructure["dataType"], T extends requireParamsStructure["structure"], K extends keyof T, P extends requireParamsStructure["parameter"]> = Request<{}, {}, singleOrArrayObject<DT, T, K, P>, singleOrArrayObject<DT, T, K, P>, {}>;
41
+ type MyResponse<DT extends responseStructure["dataType"], T extends responseStructure["structure"], K extends keyof T, P extends responseStructure["parameter"]> = Response<{
30
42
  status: "SUCCESS" | "ERROR";
31
43
  message: string;
44
+ parameter: {
45
+ [Key in keyof P]: numberOrString<P[Key]>;
46
+ };
32
47
  data: DT extends "arrayObject" ? Array<{
33
48
  [key in K]: numberOrString<T[key]>;
34
49
  }> : {
@@ -40,22 +55,22 @@ export default class GGExpress {
40
55
  private outputPath;
41
56
  constructor(app: Express.Express, outputPath: string[]);
42
57
  private rootMethod;
43
- get<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS>(url: `/api/${string}`, options: {
58
+ get<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS, P extends M["parameter"], PP extends M["parameter"]>(url: `/api/${string}`, options: {
44
59
  requireParams: M;
45
60
  responseStructure: R;
46
- }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K>, res: MyResponse<R["dataType"], RS, KR>, next: NextFunction) => any>): Express.Express;
47
- post<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS>(url: `/api/${string}`, options: {
61
+ }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, res: MyResponse<R["dataType"], RS, KR, PP>, next: NextFunction) => any>): Express.Express;
62
+ post<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS, P extends M["parameter"], PP extends M["parameter"]>(url: `/api/${string}`, options: {
48
63
  requireParams: M;
49
64
  responseStructure: R;
50
- }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K>, res: MyResponse<R["dataType"], RS, KR>, next: NextFunction) => any>): Express.Express;
51
- put<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS>(url: `/api/${string}`, options: {
65
+ }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, res: MyResponse<R["dataType"], RS, KR, PP>, next: NextFunction) => any>): Express.Express;
66
+ put<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS, P extends M["parameter"], PP extends M["parameter"]>(url: `/api/${string}`, options: {
52
67
  requireParams: M;
53
68
  responseStructure: R;
54
- }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K>, res: MyResponse<R["dataType"], RS, KR>, next: NextFunction) => any>): Express.Express;
55
- delete<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS>(url: `/api/${string}`, options: {
69
+ }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, res: MyResponse<R["dataType"], RS, KR, PP>, next: NextFunction) => any>): Express.Express;
70
+ delete<M extends requireParamsStructure, T extends M["structure"], K extends keyof T, R extends responseStructure, RS extends R["structure"], KR extends keyof RS, P extends M["parameter"], PP extends M["parameter"]>(url: `/api/${string}`, options: {
56
71
  requireParams: M;
57
72
  responseStructure: R;
58
- }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K>, res: MyResponse<R["dataType"], RS, KR>, next: NextFunction) => any>): Express.Express;
73
+ }, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, res: MyResponse<R["dataType"], RS, KR, PP>, next: NextFunction) => any>): Express.Express;
59
74
  generateAPIFiles(): void;
60
75
  private generateStaticRouteFile;
61
76
  private generateGGApi;
package/dist/GGExpress.js CHANGED
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
13
  };
@@ -38,160 +47,105 @@ class GGExpress {
38
47
  this.generateStaticRouteFile();
39
48
  }
40
49
  generateStaticRouteFile() {
41
- const genParamCode = (data) => {
42
- let result;
43
- const resultArray = Object.entries(data["structure"]).map(([key, value]) => ({
44
- name: key,
45
- value: value,
46
- }));
47
- if (resultArray.length === 0)
48
- return "";
49
- result = resultArray
50
- .map((row) => {
51
- if (Array.isArray(row.value)) {
52
- return ` ${row.name} : ${row.value
53
- .map((vRow) => {
54
- if (typeof vRow === "string")
55
- return `"${vRow}"`;
56
- else if (typeof vRow === "number")
57
- return `${vRow}`;
58
- })
59
- .join(" | ")}`;
60
- }
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ const genParamCodeParameter = (data) => {
52
+ let result;
53
+ const resultArray = Object.entries(data["parameter"]).map(([key, value]) => ({
54
+ name: key,
55
+ value: value,
56
+ }));
57
+ if (resultArray.length === 0)
58
+ return "";
59
+ result = resultArray
60
+ .map((row) => {
61
+ if (Array.isArray(row.value)) {
62
+ return ` ${row.name} : ${row.value
63
+ .map((vRow) => {
64
+ if (typeof vRow === "string")
65
+ return `"${vRow}"`;
66
+ else if (typeof vRow === "number")
67
+ return `${vRow}`;
68
+ })
69
+ .join(" | ")}`;
70
+ }
71
+ else
72
+ return ` ${row.name} : ${row.value}`;
73
+ })
74
+ .join(",");
75
+ return result;
76
+ };
77
+ const genParamCode = (data) => {
78
+ let result;
79
+ const resultArray = Object.entries(data["structure"]).map(([key, value]) => ({
80
+ name: key,
81
+ value: value,
82
+ }));
83
+ if (resultArray.length === 0)
84
+ return "";
85
+ result = resultArray
86
+ .map((row) => {
87
+ if (Array.isArray(row.value)) {
88
+ return ` ${row.name} : ${row.value
89
+ .map((vRow) => {
90
+ if (typeof vRow === "string")
91
+ return `"${vRow}"`;
92
+ else if (typeof vRow === "number")
93
+ return `${vRow}`;
94
+ })
95
+ .join(" | ")}`;
96
+ }
97
+ else
98
+ return ` ${row.name} : ${row.value}`;
99
+ })
100
+ .join(",");
101
+ return result;
102
+ };
103
+ const isArray = (data) => {
104
+ if (Object.entries(data["structure"]).length === 0)
105
+ return "";
106
+ else if (data["dataType"] === "arrayObject")
107
+ return "[]";
61
108
  else
62
- return ` ${row.name} : ${row.value}`;
63
- })
64
- .join(",");
65
- return result;
66
- };
67
- const isArray = (data) => {
68
- if (Object.entries(data["structure"]).length === 0)
69
- return "";
70
- else if (data["dataType"] === "arrayObject")
71
- return "[]";
72
- else
73
- return "";
74
- };
75
- const genInterfaceString = (data) => {
76
- let rawString = ``;
77
- if (data.length === 0)
78
- return "";
79
- rawString = data
80
- .map((row) => {
81
- return ` "${row.url}" : {
82
- requireParams : { ${genParamCode(row.requireParams)} }${isArray(row.requireParams)},
83
- responseStructure : { ${genParamCode(row.responseStructure)} }${isArray(row.responseStructure)},
84
- responseModelInterfaceName : undefined
109
+ return "";
110
+ };
111
+ const genInterfaceString = (data) => {
112
+ let rawString = ``;
113
+ if (data.length === 0)
114
+ return "";
115
+ rawString = data
116
+ .map((row) => {
117
+ return ` "${row.url}" : {
118
+ requireParams : { parameter : {${genParamCodeParameter(row.requireParams)}}, data : { ${genParamCode(row.requireParams)} }${isArray(row.requireParams)}},
119
+ responseStructure : {
120
+ status : "SUCCESS" | "ERROR",
121
+ message : string,
122
+ parameter : {${genParamCodeParameter(row.responseStructure)}}, data : { ${genParamCode(row.responseStructure)} } ${isArray(row.responseStructure)}}
85
123
  } `;
86
- })
87
- .join(",");
88
- return rawString;
89
- };
90
- const getRoute = myExpressRouteList.filter((row) => row.method === "get");
91
- const postRoute = myExpressRouteList.filter((row) => row.method === "post");
92
- const putRoute = myExpressRouteList.filter((row) => row.method === "put");
93
- const deleteDelete = myExpressRouteList.filter((row) => row.method === "delete");
94
- let content = `export interface staticRouteInterface {
124
+ })
125
+ .join(",");
126
+ return rawString;
127
+ };
128
+ const getRoute = myExpressRouteList.filter((row) => row.method === "get");
129
+ const postRoute = myExpressRouteList.filter((row) => row.method === "post");
130
+ const putRoute = myExpressRouteList.filter((row) => row.method === "put");
131
+ const deleteDelete = myExpressRouteList.filter((row) => row.method === "delete");
132
+ let content = `export interface staticRouteInterface {
95
133
  get : { ${genInterfaceString(getRoute)} },
96
134
  post : { ${genInterfaceString(postRoute)} },
97
135
  put : { ${genInterfaceString(putRoute)} },
98
136
  delete : { ${genInterfaceString(deleteDelete)} },
99
137
  }`;
100
- for (let row of this.outputPath) {
101
- fs_1.default.writeFileSync(path_1.default.join(row, 'staticRouteInterface.ts'), content);
102
- this.generateGGApi(path_1.default.join(row, 'apiConnector.ts'));
103
- }
104
- // const serverFilePath = path.join(
105
- // appRootPath.toString(),
106
- // "../",
107
- // "my-app",
108
- // "src",
109
- // "interfaces",
110
- // "staticRouteInterface.ts"
111
- // )
112
- // const myAppFilePath = path.join(
113
- // appRootPath.toString(),
114
- // "src",
115
- // "interfaces",
116
- // "staticRouteInterface.ts"
117
- // )
118
- // fs.writeFileSync(serverFilePath, content)
119
- // fs.writeFileSync(myAppFilePath, content)
138
+ for (let row of this.outputPath) {
139
+ fs_1.default.writeFileSync(path_1.default.join(row, "staticRouteInterface.ts"), content);
140
+ yield this.generateGGApi(path_1.default.join(row, "apiConnector.ts"));
141
+ }
142
+ });
120
143
  }
121
144
  generateGGApi(filePathWithFileName) {
122
- let code = `
123
- import { staticRouteInterface } from "./staticRouteInterface"
124
- import axios from "axios"
125
-
126
- export class GGApi {
127
- constructor() {}
128
-
129
- get<T extends keyof staticRouteInterface["get"]>(
130
- url: T,
131
- requireParams: staticRouteInterface["get"][T]["requireParams"]
132
- ): Promise<staticRouteInterface["get"][T]["responseStructure"]> {
133
- return new Promise((resolve, reject) => {
134
- axios
135
- .get(url, { params: requireParams })
136
- .then((response) => {
137
- resolve(response.data)
138
- })
139
- .catch((error) => {
140
- reject(error)
141
- })
142
- })
143
- }
144
-
145
- post<T extends keyof staticRouteInterface["post"]>(
146
- url: T,
147
- requireParams: staticRouteInterface["post"][T]["requireParams"]
148
- ): Promise<staticRouteInterface["post"][T]["responseStructure"]> {
149
- return new Promise((resolve, reject) => {
150
- axios
151
- .post(url, { data : requireParams})
152
- .then((response) => {
153
- resolve(response.data)
154
- })
155
- .catch((error) => {
156
- reject(error)
157
- })
158
- })
159
- }
160
- put<T extends keyof staticRouteInterface["put"]>(
161
- url: T,
162
- requireParams: staticRouteInterface["put"][T]["requireParams"]
163
- ): Promise<staticRouteInterface["put"][T]["responseStructure"]> {
164
- return new Promise((resolve, reject) => {
165
- axios
166
- .put(url, { data : requireParams})
167
- .then((response) => {
168
- resolve(response.data)
169
- })
170
- .catch((error) => {
171
- reject(error)
172
- })
173
- })
174
- }
175
- delete<T extends keyof staticRouteInterface["delete"]>(
176
- url: T,
177
- requireParams: staticRouteInterface["delete"][T]["requireParams"]
178
- ): Promise<staticRouteInterface["delete"][T]["responseStructure"]> {
179
- return new Promise((resolve, reject) => {
180
- axios
181
- .delete(url, { data : requireParams})
182
- .then((response) => {
183
- resolve(response.data)
184
- })
185
- .catch((error) => {
186
- reject(error)
187
- })
188
- })
189
- }
190
- }
191
-
192
-
193
- `;
194
- fs_1.default.writeFileSync(filePathWithFileName, code);
145
+ return __awaiter(this, void 0, void 0, function* () {
146
+ const code = yield fs_1.default.readFileSync("./GGApi.ts");
147
+ fs_1.default.writeFileSync(filePathWithFileName, code);
148
+ });
195
149
  }
196
150
  }
197
151
  exports.default = GGExpress;
@@ -0,0 +1,8 @@
1
+ import { staticRouteInterface } from "./staticRouteInterface";
2
+ export declare class GGApi {
3
+ constructor();
4
+ get<T extends keyof staticRouteInterface["get"]>(url: T, requireParams: staticRouteInterface["get"][T]["requireParams"]): Promise<staticRouteInterface["get"][T]["responseStructure"]>;
5
+ post<T extends keyof staticRouteInterface["post"]>(url: T, requireParams: staticRouteInterface["post"][T]["requireParams"]): Promise<staticRouteInterface["post"][T]["responseStructure"]>;
6
+ put<T extends keyof staticRouteInterface["put"]>(url: T, requireParams: staticRouteInterface["put"][T]["requireParams"]): Promise<staticRouteInterface["put"][T]["responseStructure"]>;
7
+ delete<T extends keyof staticRouteInterface["delete"]>(url: T, requireParams: staticRouteInterface["delete"][T]["requireParams"]): Promise<staticRouteInterface["delete"][T]["responseStructure"]>;
8
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.GGApi = void 0;
16
+ const axios_1 = __importDefault(require("axios"));
17
+ class GGApi {
18
+ constructor() { }
19
+ get(url, requireParams) {
20
+ return new Promise((resolve, reject) => {
21
+ axios_1.default
22
+ .get(url, { params: requireParams })
23
+ .then((response) => {
24
+ resolve(response.data);
25
+ })
26
+ .catch((error) => {
27
+ reject(error);
28
+ });
29
+ });
30
+ }
31
+ post(url, requireParams) {
32
+ return new Promise((resolve, reject) => {
33
+ axios_1.default
34
+ .post(url, { data: requireParams })
35
+ .then((response) => {
36
+ resolve(response.data);
37
+ })
38
+ .catch((error) => {
39
+ reject(error);
40
+ });
41
+ });
42
+ }
43
+ put(url, requireParams) {
44
+ return new Promise((resolve, reject) => {
45
+ axios_1.default
46
+ .put(url, { data: requireParams })
47
+ .then((response) => {
48
+ resolve(response.data);
49
+ })
50
+ .catch((error) => {
51
+ reject(error);
52
+ });
53
+ });
54
+ }
55
+ delete(url, requireParams) {
56
+ return new Promise((resolve, reject) => {
57
+ axios_1.default
58
+ .delete(url, { data: requireParams })
59
+ .then((response) => {
60
+ resolve(response.data);
61
+ })
62
+ .catch((error) => {
63
+ reject(error);
64
+ });
65
+ });
66
+ }
67
+ }
68
+ exports.GGApi = GGApi;
69
+ function run() {
70
+ return __awaiter(this, void 0, void 0, function* () {
71
+ const api = new GGApi();
72
+ const data = yield api.post("/api/item", {
73
+ parameter: {
74
+ bankID: 1,
75
+ },
76
+ data: [{ id: 2, name: "2" }],
77
+ });
78
+ data.data;
79
+ });
80
+ }
@@ -1,16 +1,30 @@
1
1
  export interface staticRouteInterface {
2
- get: {
3
- "/api/user": {
2
+ get: {};
3
+ post: {
4
+ "/api/item": {
4
5
  requireParams: {
5
- date: string;
6
+ parameter: {
7
+ bankID: number;
8
+ };
9
+ data: {
10
+ id: number;
11
+ name: string;
12
+ }[];
6
13
  };
7
14
  responseStructure: {
8
- amount: number;
15
+ status: "SUCCESS" | "ERROR";
16
+ message: string;
17
+ parameter: {
18
+ numberOfPeople: number;
19
+ itemName: string;
20
+ };
21
+ data: {
22
+ id: number;
23
+ name: string;
24
+ }[];
9
25
  };
10
- responseModelInterfaceName: undefined;
11
26
  };
12
27
  };
13
- post: {};
14
28
  put: {};
15
29
  delete: {};
16
30
  }
package/dist/test.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/test.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const GGExpress_1 = __importDefault(require("./GGExpress"));
7
+ const express_1 = __importDefault(require("express"));
8
+ function run() {
9
+ const app = (0, express_1.default)();
10
+ const ggapp = new GGExpress_1.default(app, ["./"]);
11
+ ggapp.post("/api/item", {
12
+ requireParams: {
13
+ parameter: {
14
+ bankID: "number",
15
+ },
16
+ dataType: "arrayObject",
17
+ structure: {
18
+ id: "number",
19
+ name: "string",
20
+ },
21
+ },
22
+ responseStructure: {
23
+ parameter: { numberOfPeople: "number", itemName: "string" },
24
+ dataType: "arrayObject",
25
+ structure: {
26
+ id: "number",
27
+ name: "string",
28
+ },
29
+ },
30
+ }, (req, res, next) => {
31
+ req.body.parameter;
32
+ });
33
+ app.listen(3000, () => {
34
+ ggapp.generateAPIFiles();
35
+ });
36
+ }
37
+ run();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gg-express",
3
- "version": "1.0.11",
3
+ "version": "1.0.19",
4
4
  "description": "",
5
5
  "main": "dist/GGExpress.js",
6
6
  "scripts": {
package/src/GGApi.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { staticRouteInterface } from "./staticRouteInterface"
2
1
  import axios from "axios"
2
+ import { staticRouteInterface } from "./staticRouteInterface"
3
3
 
4
4
  export class GGApi {
5
5
  constructor() {}
@@ -10,7 +10,7 @@ export class GGApi {
10
10
  ): Promise<staticRouteInterface["get"][T]["responseStructure"]> {
11
11
  return new Promise((resolve, reject) => {
12
12
  axios
13
- .get(url, { params: requireParams })
13
+ .get(url as string, { params: requireParams })
14
14
  .then((response) => {
15
15
  resolve(response.data)
16
16
  })
@@ -26,7 +26,7 @@ export class GGApi {
26
26
  ): Promise<staticRouteInterface["post"][T]["responseStructure"]> {
27
27
  return new Promise((resolve, reject) => {
28
28
  axios
29
- .post(url, { data : requireParams})
29
+ .post(url as string, { data: requireParams })
30
30
  .then((response) => {
31
31
  resolve(response.data)
32
32
  })
@@ -41,7 +41,7 @@ export class GGApi {
41
41
  ): Promise<staticRouteInterface["put"][T]["responseStructure"]> {
42
42
  return new Promise((resolve, reject) => {
43
43
  axios
44
- .put(url, { data : requireParams})
44
+ .put(url as string, { data: requireParams })
45
45
  .then((response) => {
46
46
  resolve(response.data)
47
47
  })
@@ -56,7 +56,7 @@ export class GGApi {
56
56
  ): Promise<staticRouteInterface["delete"][T]["responseStructure"]> {
57
57
  return new Promise((resolve, reject) => {
58
58
  axios
59
- .delete(url, { data : requireParams})
59
+ .delete(url as string, { data: requireParams })
60
60
  .then((response) => {
61
61
  resolve(response.data)
62
62
  })
@@ -66,3 +66,13 @@ export class GGApi {
66
66
  })
67
67
  }
68
68
  }
69
+
70
+ async function run() {
71
+ const api = new GGApi()
72
+ const data = await api.post("/api/item", {
73
+ parameter: {
74
+ bankID: 1,
75
+ },
76
+ data: [{ id: 2, name: "2" }],
77
+ })
78
+ }
package/src/GGExpress.ts CHANGED
@@ -4,7 +4,7 @@ import Express from "express-serve-static-core"
4
4
  import fs from "fs"
5
5
  import path from "path"
6
6
  // export { GGApi } from "./GGApi"
7
- type Unarray<T> = T extends (infer U)[] ? U : T;
7
+ type Unarray<T> = T extends (infer U)[] ? U : T
8
8
  type AsConstArray<T extends readonly any[]> = [...T]
9
9
  type paramType =
10
10
  | "number"
@@ -12,6 +12,7 @@ type paramType =
12
12
  | AsConstArray<Array<string>>
13
13
  | AsConstArray<Array<number>>
14
14
  interface responseStructure {
15
+ parameter: { [key: string]: "number" | "string" }
15
16
  dataType: "singleObject" | "arrayObject"
16
17
  structure: {
17
18
  [key: string]: paramType
@@ -19,6 +20,7 @@ interface responseStructure {
19
20
  }
20
21
 
21
22
  interface requireParamsStructure {
23
+ parameter: { [key: string]: "number" | "string" }
22
24
  dataType: "singleObject" | "arrayObject"
23
25
  structure: {
24
26
  [key: string]: paramType
@@ -37,30 +39,40 @@ type numberOrString<T> = T extends "number"
37
39
  type singleOrArrayObject<
38
40
  DT extends requireParamsStructure["dataType"],
39
41
  T extends requireParamsStructure["structure"],
40
- K extends keyof T
42
+ K extends keyof T,
43
+ P extends requireParamsStructure["parameter"]
41
44
  > = DT extends "arrayObject"
42
- ? { data: { [Key in K]: numberOrString<T[Key]> }[] }
43
- : { data: { [Key in K]: numberOrString<T[Key]> } }
45
+ ? {
46
+ parameter: { [Key in keyof P]: numberOrString<P[Key]> }
47
+ data: { [Key in K]: numberOrString<T[Key]> }[]
48
+ }
49
+ : {
50
+ parameter: { [Key in keyof P]: numberOrString<P[Key]> }
51
+ data: { [Key in K]: numberOrString<T[Key]> }
52
+ }
44
53
 
45
54
  type MyRequest<
46
55
  DT extends requireParamsStructure["dataType"],
47
56
  T extends requireParamsStructure["structure"],
48
- K extends keyof T
57
+ K extends keyof T,
58
+ P extends requireParamsStructure["parameter"]
49
59
  > = Request<
50
60
  {},
51
61
  {},
52
- singleOrArrayObject<DT, T, K>,
53
- singleOrArrayObject<DT, T, K>,
62
+ singleOrArrayObject<DT, T, K, P>,
63
+ singleOrArrayObject<DT, T, K, P>,
54
64
  {}
55
65
  >
56
66
 
57
67
  type MyResponse<
58
68
  DT extends responseStructure["dataType"],
59
69
  T extends responseStructure["structure"],
60
- K extends keyof T
70
+ K extends keyof T,
71
+ P extends responseStructure["parameter"]
61
72
  > = Response<{
62
73
  status: "SUCCESS" | "ERROR"
63
74
  message: string
75
+ parameter: { [Key in keyof P]: numberOrString<P[Key]> }
64
76
  data: DT extends "arrayObject"
65
77
  ? Array<{ [key in K]: numberOrString<T[key]> }>
66
78
  : { [key in K]: numberOrString<T[key]> }
@@ -87,7 +99,9 @@ export default class GGExpress {
87
99
  K extends keyof T,
88
100
  R extends responseStructure,
89
101
  RS extends R["structure"],
90
- KR extends keyof RS
102
+ KR extends keyof RS,
103
+ P extends M["parameter"],
104
+ PP extends M["parameter"]
91
105
  >(
92
106
  method: "get" | "post" | "put" | "delete",
93
107
  url: string,
@@ -97,8 +111,8 @@ export default class GGExpress {
97
111
  },
98
112
  ...middlewares: Array<
99
113
  (
100
- req: MyRequest<M["dataType"], T, K>,
101
- res: MyResponse<R["dataType"], RS, KR>,
114
+ req: MyRequest<M["dataType"], T, K, P>,
115
+ res: MyResponse<R["dataType"], RS, KR, PP>,
102
116
  next: NextFunction
103
117
  ) => any
104
118
  >
@@ -113,7 +127,7 @@ export default class GGExpress {
113
127
  return this.express[method](
114
128
  url,
115
129
  (
116
- req: MyRequest<M["dataType"], T, K>,
130
+ req: MyRequest<M["dataType"], T, K, P>,
117
131
  res: Response,
118
132
  next: NextFunction
119
133
  ) => {
@@ -128,7 +142,9 @@ export default class GGExpress {
128
142
  K extends keyof T,
129
143
  R extends responseStructure,
130
144
  RS extends R["structure"],
131
- KR extends keyof RS
145
+ KR extends keyof RS,
146
+ P extends M["parameter"],
147
+ PP extends M["parameter"]
132
148
  >(
133
149
  url: `/api/${string}`,
134
150
  options: {
@@ -137,8 +153,8 @@ export default class GGExpress {
137
153
  },
138
154
  ...middlewares: Array<
139
155
  (
140
- req: MyRequest<M["dataType"], T, K>,
141
- res: MyResponse<R["dataType"], RS, KR>,
156
+ req: MyRequest<M["dataType"], T, K, P>,
157
+ res: MyResponse<R["dataType"], RS, KR, PP>,
142
158
  next: NextFunction
143
159
  ) => any
144
160
  >
@@ -152,7 +168,9 @@ export default class GGExpress {
152
168
  K extends keyof T,
153
169
  R extends responseStructure,
154
170
  RS extends R["structure"],
155
- KR extends keyof RS
171
+ KR extends keyof RS,
172
+ P extends M["parameter"],
173
+ PP extends M["parameter"]
156
174
  >(
157
175
  url: `/api/${string}`,
158
176
  options: {
@@ -161,8 +179,8 @@ export default class GGExpress {
161
179
  },
162
180
  ...middlewares: Array<
163
181
  (
164
- req: MyRequest<M["dataType"], T, K>,
165
- res: MyResponse<R["dataType"], RS, KR>,
182
+ req: MyRequest<M["dataType"], T, K, P>,
183
+ res: MyResponse<R["dataType"], RS, KR, PP>,
166
184
  next: NextFunction
167
185
  ) => any
168
186
  >
@@ -175,7 +193,9 @@ export default class GGExpress {
175
193
  K extends keyof T,
176
194
  R extends responseStructure,
177
195
  RS extends R["structure"],
178
- KR extends keyof RS
196
+ KR extends keyof RS,
197
+ P extends M["parameter"],
198
+ PP extends M["parameter"]
179
199
  >(
180
200
  url: `/api/${string}`,
181
201
  options: {
@@ -184,8 +204,8 @@ export default class GGExpress {
184
204
  },
185
205
  ...middlewares: Array<
186
206
  (
187
- req: MyRequest<M["dataType"], T, K>,
188
- res: MyResponse<R["dataType"], RS, KR>,
207
+ req: MyRequest<M["dataType"], T, K, P>,
208
+ res: MyResponse<R["dataType"], RS, KR, PP>,
189
209
  next: NextFunction
190
210
  ) => any
191
211
  >
@@ -198,7 +218,9 @@ export default class GGExpress {
198
218
  K extends keyof T,
199
219
  R extends responseStructure,
200
220
  RS extends R["structure"],
201
- KR extends keyof RS
221
+ KR extends keyof RS,
222
+ P extends M["parameter"],
223
+ PP extends M["parameter"]
202
224
  >(
203
225
  url: `/api/${string}`,
204
226
  options: {
@@ -207,8 +229,8 @@ export default class GGExpress {
207
229
  },
208
230
  ...middlewares: Array<
209
231
  (
210
- req: MyRequest<M["dataType"], T, K>,
211
- res: MyResponse<R["dataType"], RS, KR>,
232
+ req: MyRequest<M["dataType"], T, K, P>,
233
+ res: MyResponse<R["dataType"], RS, KR, PP>,
212
234
  next: NextFunction
213
235
  ) => any
214
236
  >
@@ -218,7 +240,31 @@ export default class GGExpress {
218
240
  public generateAPIFiles() {
219
241
  this.generateStaticRouteFile()
220
242
  }
221
- private generateStaticRouteFile() {
243
+ private async generateStaticRouteFile() {
244
+ const genParamCodeParameter = (data: requireParamsStructure) => {
245
+ let result: string
246
+ const resultArray = Object.entries(data["parameter"]).map(
247
+ ([key, value]) => ({
248
+ name: key,
249
+ value: value,
250
+ })
251
+ )
252
+ if (resultArray.length === 0) return ""
253
+
254
+ result = resultArray
255
+ .map((row) => {
256
+ if (Array.isArray(row.value)) {
257
+ return ` ${row.name} : ${row.value
258
+ .map((vRow) => {
259
+ if (typeof vRow === "string") return `"${vRow}"`
260
+ else if (typeof vRow === "number") return `${vRow}`
261
+ })
262
+ .join(" | ")}`
263
+ } else return ` ${row.name} : ${row.value}`
264
+ })
265
+ .join(",")
266
+ return result
267
+ }
222
268
  const genParamCode = (data: requireParamsStructure) => {
223
269
  let result: string
224
270
  const resultArray = Object.entries(data["structure"]).map(
@@ -241,9 +287,9 @@ export default class GGExpress {
241
287
  } else return ` ${row.name} : ${row.value}`
242
288
  })
243
289
  .join(",")
244
-
245
290
  return result
246
291
  }
292
+
247
293
  const isArray = (data: requireParamsStructure) => {
248
294
  if (Object.entries(data["structure"]).length === 0) return ""
249
295
  else if (data["dataType"] === "arrayObject") return "[]"
@@ -255,13 +301,19 @@ export default class GGExpress {
255
301
  rawString = data
256
302
  .map((row) => {
257
303
  return ` "${row.url}" : {
258
- requireParams : { ${genParamCode(
304
+ requireParams : { parameter : {${genParamCodeParameter(
259
305
  row.requireParams
260
- )} }${isArray(row.requireParams)},
261
- responseStructure : { ${genParamCode(
306
+ )}}, data : { ${genParamCode(row.requireParams)} }${isArray(
307
+ row.requireParams
308
+ )}},
309
+ responseStructure : {
310
+ status : "SUCCESS" | "ERROR",
311
+ message : string,
312
+ parameter : {${genParamCodeParameter(
313
+ row.responseStructure
314
+ )}}, data : { ${genParamCode(row.responseStructure)} } ${isArray(
262
315
  row.responseStructure
263
- )} }${isArray(row.responseStructure)},
264
- responseModelInterfaceName : undefined
316
+ )}}
265
317
  } `
266
318
  })
267
319
  .join(",")
@@ -282,101 +334,13 @@ export default class GGExpress {
282
334
  }`
283
335
 
284
336
  for (let row of this.outputPath) {
285
- fs.writeFileSync(path.join(row,'staticRouteInterface.ts'), content)
286
- this.generateGGApi(path.join(row,'apiConnector.ts'))
337
+ fs.writeFileSync(path.join(row, "staticRouteInterface.ts"), content)
338
+ await this.generateGGApi(path.join(row, "apiConnector.ts"))
287
339
  }
288
-
289
- // const serverFilePath = path.join(
290
- // appRootPath.toString(),
291
- // "../",
292
- // "my-app",
293
- // "src",
294
- // "interfaces",
295
- // "staticRouteInterface.ts"
296
- // )
297
- // const myAppFilePath = path.join(
298
- // appRootPath.toString(),
299
- // "src",
300
- // "interfaces",
301
- // "staticRouteInterface.ts"
302
- // )
303
-
304
- // fs.writeFileSync(serverFilePath, content)
305
- // fs.writeFileSync(myAppFilePath, content)
306
340
  }
307
- private generateGGApi(filePathWithFileName : string) {
308
- let code = `
309
- import { staticRouteInterface } from "./staticRouteInterface"
310
- import axios from "axios"
311
-
312
- export class GGApi {
313
- constructor() {}
314
-
315
- get<T extends keyof staticRouteInterface["get"]>(
316
- url: T,
317
- requireParams: staticRouteInterface["get"][T]["requireParams"]
318
- ): Promise<staticRouteInterface["get"][T]["responseStructure"]> {
319
- return new Promise((resolve, reject) => {
320
- axios
321
- .get(url, { params: requireParams })
322
- .then((response) => {
323
- resolve(response.data)
324
- })
325
- .catch((error) => {
326
- reject(error)
327
- })
328
- })
329
- }
330
-
331
- post<T extends keyof staticRouteInterface["post"]>(
332
- url: T,
333
- requireParams: staticRouteInterface["post"][T]["requireParams"]
334
- ): Promise<staticRouteInterface["post"][T]["responseStructure"]> {
335
- return new Promise((resolve, reject) => {
336
- axios
337
- .post(url, { data : requireParams})
338
- .then((response) => {
339
- resolve(response.data)
340
- })
341
- .catch((error) => {
342
- reject(error)
343
- })
344
- })
345
- }
346
- put<T extends keyof staticRouteInterface["put"]>(
347
- url: T,
348
- requireParams: staticRouteInterface["put"][T]["requireParams"]
349
- ): Promise<staticRouteInterface["put"][T]["responseStructure"]> {
350
- return new Promise((resolve, reject) => {
351
- axios
352
- .put(url, { data : requireParams})
353
- .then((response) => {
354
- resolve(response.data)
355
- })
356
- .catch((error) => {
357
- reject(error)
358
- })
359
- })
360
- }
361
- delete<T extends keyof staticRouteInterface["delete"]>(
362
- url: T,
363
- requireParams: staticRouteInterface["delete"][T]["requireParams"]
364
- ): Promise<staticRouteInterface["delete"][T]["responseStructure"]> {
365
- return new Promise((resolve, reject) => {
366
- axios
367
- .delete(url, { data : requireParams})
368
- .then((response) => {
369
- resolve(response.data)
370
- })
371
- .catch((error) => {
372
- reject(error)
373
- })
374
- })
375
- }
376
- }
377
-
341
+ private async generateGGApi(filePathWithFileName: string) {
342
+ const code = await fs.readFileSync("./GGApi.ts")
378
343
 
379
- `
380
- fs.writeFileSync(filePathWithFileName,code)
344
+ fs.writeFileSync(filePathWithFileName, code)
381
345
  }
382
346
  }
@@ -0,0 +1,79 @@
1
+ import axios from "axios"
2
+ import { staticRouteInterface } from "./staticRouteInterface"
3
+
4
+ export class GGApi {
5
+ constructor() {}
6
+
7
+ get<T extends keyof staticRouteInterface["get"]>(
8
+ url: T,
9
+ requireParams: staticRouteInterface["get"][T]["requireParams"]
10
+ ): Promise<staticRouteInterface["get"][T]["responseStructure"]> {
11
+ return new Promise((resolve, reject) => {
12
+ axios
13
+ .get(url as string, { params: requireParams })
14
+ .then((response) => {
15
+ resolve(response.data)
16
+ })
17
+ .catch((error) => {
18
+ reject(error)
19
+ })
20
+ })
21
+ }
22
+
23
+ post<T extends keyof staticRouteInterface["post"]>(
24
+ url: T,
25
+ requireParams: staticRouteInterface["post"][T]["requireParams"]
26
+ ): Promise<staticRouteInterface["post"][T]["responseStructure"]> {
27
+ return new Promise((resolve, reject) => {
28
+ axios
29
+ .post(url as string, { data: requireParams })
30
+ .then((response) => {
31
+ resolve(response.data)
32
+ })
33
+ .catch((error) => {
34
+ reject(error)
35
+ })
36
+ })
37
+ }
38
+ put<T extends keyof staticRouteInterface["put"]>(
39
+ url: T,
40
+ requireParams: staticRouteInterface["put"][T]["requireParams"]
41
+ ): Promise<staticRouteInterface["put"][T]["responseStructure"]> {
42
+ return new Promise((resolve, reject) => {
43
+ axios
44
+ .put(url as string, { data: requireParams })
45
+ .then((response) => {
46
+ resolve(response.data)
47
+ })
48
+ .catch((error) => {
49
+ reject(error)
50
+ })
51
+ })
52
+ }
53
+ delete<T extends keyof staticRouteInterface["delete"]>(
54
+ url: T,
55
+ requireParams: staticRouteInterface["delete"][T]["requireParams"]
56
+ ): Promise<staticRouteInterface["delete"][T]["responseStructure"]> {
57
+ return new Promise((resolve, reject) => {
58
+ axios
59
+ .delete(url as string, { data: requireParams })
60
+ .then((response) => {
61
+ resolve(response.data)
62
+ })
63
+ .catch((error) => {
64
+ reject(error)
65
+ })
66
+ })
67
+ }
68
+ }
69
+
70
+ async function run() {
71
+ const api = new GGApi()
72
+ const data = await api.post("/api/item", {
73
+ parameter: {
74
+ bankID: 1,
75
+ },
76
+ data: [{ id: 2, name: "2" }],
77
+ })
78
+ data.data
79
+ }
@@ -1,10 +1,12 @@
1
1
  export interface staticRouteInterface {
2
- get : { "/api/user" : {
3
- requireParams : { date : string },
4
- responseStructure : { amount : number },
5
- responseModelInterfaceName : undefined
2
+ get : { },
3
+ post : { "/api/item" : {
4
+ requireParams : { parameter : { bankID : number}, data : { id : number, name : string }[]},
5
+ responseStructure : {
6
+ status : "SUCCESS" | "ERROR",
7
+ message : string,
8
+ parameter : { numberOfPeople : number, itemName : string}, data : { id : number, name : string } []}
6
9
  } },
7
- post : { },
8
10
  put : { },
9
11
  delete : { },
10
12
  }
package/src/test.ts ADDED
@@ -0,0 +1,36 @@
1
+ import GGExpress from "./GGExpress"
2
+ import express, { Express } from "express"
3
+ function run() {
4
+ const app = express()
5
+ const ggapp = new GGExpress(app, ["./"])
6
+ ggapp.post(
7
+ "/api/item",
8
+ {
9
+ requireParams: {
10
+ parameter: {
11
+ bankID: "number",
12
+ },
13
+ dataType: "arrayObject",
14
+ structure: {
15
+ id: "number",
16
+ name: "string",
17
+ },
18
+ },
19
+ responseStructure: {
20
+ parameter: { numberOfPeople: "number", itemName: "string" },
21
+ dataType: "arrayObject",
22
+ structure: {
23
+ id: "number",
24
+ name: "string",
25
+ },
26
+ },
27
+ },
28
+ (req, res, next) => {
29
+ req.body.parameter
30
+ }
31
+ )
32
+ app.listen(3000, () => {
33
+ ggapp.generateAPIFiles()
34
+ })
35
+ }
36
+ run()