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 +20 -0
- package/dist/GGExpress.d.ts +26 -11
- package/dist/GGExpress.js +99 -145
- package/dist/apiConnector.d.ts +8 -0
- package/dist/apiConnector.js +80 -0
- package/dist/staticRouteInterface.d.ts +20 -6
- package/dist/test.d.ts +1 -0
- package/dist/test.js +37 -0
- package/package.json +1 -1
- package/src/GGApi.ts +15 -5
- package/src/GGExpress.ts +88 -124
- package/src/apiConnector.ts +79 -0
- package/src/staticRouteInterface.ts +7 -5
- package/src/test.ts +36 -0
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
|
+
}
|
package/dist/GGExpress.d.ts
CHANGED
|
@@ -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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
2
|
+
get: {};
|
|
3
|
+
post: {
|
|
4
|
+
"/api/item": {
|
|
4
5
|
requireParams: {
|
|
5
|
-
|
|
6
|
+
parameter: {
|
|
7
|
+
bankID: number;
|
|
8
|
+
};
|
|
9
|
+
data: {
|
|
10
|
+
id: number;
|
|
11
|
+
name: string;
|
|
12
|
+
}[];
|
|
6
13
|
};
|
|
7
14
|
responseStructure: {
|
|
8
|
-
|
|
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
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
|
|
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
|
|
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
|
|
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
|
-
? {
|
|
43
|
-
|
|
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 : { ${
|
|
304
|
+
requireParams : { parameter : {${genParamCodeParameter(
|
|
259
305
|
row.requireParams
|
|
260
|
-
)}
|
|
261
|
-
|
|
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
|
-
)}
|
|
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,
|
|
286
|
-
this.generateGGApi(path.join(row,
|
|
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
|
|
308
|
-
|
|
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 : {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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()
|