gg-express 1.0.17 → 1.0.20
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 -7
- package/dist/GGExpress.d.ts +12 -9
- package/dist/GGExpress.js +98 -152
- package/dist/apiConnector.js +21 -0
- package/dist/staticRouteInterface.d.ts +10 -2
- package/dist/test.js +14 -3
- package/package.json +1 -1
- package/src/GGApi.ts +9 -7
- package/src/GGExpress.ts +26 -85
- package/src/apiConnector.ts +15 -4
- package/src/staticRouteInterface.ts +4 -1
- package/src/test.ts +14 -3
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,10 +66,14 @@ class GGApi {
|
|
|
57
66
|
}
|
|
58
67
|
}
|
|
59
68
|
exports.GGApi = GGApi;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
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
|
@@ -38,9 +38,12 @@ type singleOrArrayObject<DT extends requireParamsStructure["dataType"], T extend
|
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
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> = Response<{
|
|
41
|
+
type MyResponse<DT extends responseStructure["dataType"], T extends responseStructure["structure"], K extends keyof T, P extends responseStructure["parameter"]> = Response<{
|
|
42
42
|
status: "SUCCESS" | "ERROR";
|
|
43
43
|
message: string;
|
|
44
|
+
parameter: {
|
|
45
|
+
[Key in keyof P]: numberOrString<P[Key]>;
|
|
46
|
+
};
|
|
44
47
|
data: DT extends "arrayObject" ? Array<{
|
|
45
48
|
[key in K]: numberOrString<T[key]>;
|
|
46
49
|
}> : {
|
|
@@ -52,22 +55,22 @@ export default class GGExpress {
|
|
|
52
55
|
private outputPath;
|
|
53
56
|
constructor(app: Express.Express, outputPath: string[]);
|
|
54
57
|
private rootMethod;
|
|
55
|
-
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"]>(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 R["parameter"]>(url: `/api/${string}`, options: {
|
|
56
59
|
requireParams: M;
|
|
57
60
|
responseStructure: R;
|
|
58
|
-
}, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, res: MyResponse<R["dataType"], RS, KR>, next: NextFunction) => any>): Express.Express;
|
|
59
|
-
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"]>(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 R["parameter"]>(url: `/api/${string}`, options: {
|
|
60
63
|
requireParams: M;
|
|
61
64
|
responseStructure: R;
|
|
62
|
-
}, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, res: MyResponse<R["dataType"], RS, KR>, next: NextFunction) => any>): Express.Express;
|
|
63
|
-
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"]>(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 R["parameter"]>(url: `/api/${string}`, options: {
|
|
64
67
|
requireParams: M;
|
|
65
68
|
responseStructure: R;
|
|
66
|
-
}, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, res: MyResponse<R["dataType"], RS, KR>, next: NextFunction) => any>): Express.Express;
|
|
67
|
-
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"]>(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 R["parameter"]>(url: `/api/${string}`, options: {
|
|
68
71
|
requireParams: M;
|
|
69
72
|
responseStructure: R;
|
|
70
|
-
}, ...middlewares: Array<(req: MyRequest<M["dataType"], T, K, P>, 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;
|
|
71
74
|
generateAPIFiles(): void;
|
|
72
75
|
private generateStaticRouteFile;
|
|
73
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,168 +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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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 "[]";
|
|
87
108
|
else
|
|
88
|
-
return
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return "[]";
|
|
98
|
-
else
|
|
99
|
-
return "";
|
|
100
|
-
};
|
|
101
|
-
const genInterfaceString = (data) => {
|
|
102
|
-
let rawString = ``;
|
|
103
|
-
if (data.length === 0)
|
|
104
|
-
return "";
|
|
105
|
-
rawString = data
|
|
106
|
-
.map((row) => {
|
|
107
|
-
return ` "${row.url}" : {
|
|
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}" : {
|
|
108
118
|
requireParams : { parameter : {${genParamCodeParameter(row.requireParams)}}, data : { ${genParamCode(row.requireParams)} }${isArray(row.requireParams)}},
|
|
109
|
-
responseStructure : {
|
|
119
|
+
responseStructure : {
|
|
120
|
+
status : "SUCCESS" | "ERROR",
|
|
121
|
+
message : string,
|
|
122
|
+
parameter : {${genParamCodeParameter(row.responseStructure)}}, data : { ${genParamCode(row.responseStructure)} } ${isArray(row.responseStructure)}}
|
|
110
123
|
} `;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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 {
|
|
120
133
|
get : { ${genInterfaceString(getRoute)} },
|
|
121
134
|
post : { ${genInterfaceString(postRoute)} },
|
|
122
135
|
put : { ${genInterfaceString(putRoute)} },
|
|
123
136
|
delete : { ${genInterfaceString(deleteDelete)} },
|
|
124
137
|
}`;
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
+
});
|
|
129
143
|
}
|
|
130
144
|
generateGGApi(filePathWithFileName) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
export class GGApi {
|
|
136
|
-
constructor() {}
|
|
137
|
-
|
|
138
|
-
get<T extends keyof staticRouteInterface["get"]>(
|
|
139
|
-
url: T,
|
|
140
|
-
requireParams: staticRouteInterface["get"][T]["requireParams"]
|
|
141
|
-
): Promise<staticRouteInterface["get"][T]["responseStructure"]> {
|
|
142
|
-
return new Promise((resolve, reject) => {
|
|
143
|
-
axios
|
|
144
|
-
.get(url, { params: requireParams })
|
|
145
|
-
.then((response) => {
|
|
146
|
-
resolve(response.data)
|
|
147
|
-
})
|
|
148
|
-
.catch((error) => {
|
|
149
|
-
reject(error)
|
|
150
|
-
})
|
|
151
|
-
})
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
post<T extends keyof staticRouteInterface["post"]>(
|
|
155
|
-
url: T,
|
|
156
|
-
requireParams: staticRouteInterface["post"][T]["requireParams"]
|
|
157
|
-
): Promise<staticRouteInterface["post"][T]["responseStructure"]> {
|
|
158
|
-
return new Promise((resolve, reject) => {
|
|
159
|
-
axios
|
|
160
|
-
.post(url, { data: requireParams })
|
|
161
|
-
.then((response) => {
|
|
162
|
-
resolve(response.data)
|
|
163
|
-
})
|
|
164
|
-
.catch((error) => {
|
|
165
|
-
reject(error)
|
|
166
|
-
})
|
|
167
|
-
})
|
|
168
|
-
}
|
|
169
|
-
put<T extends keyof staticRouteInterface["put"]>(
|
|
170
|
-
url: T,
|
|
171
|
-
requireParams: staticRouteInterface["put"][T]["requireParams"]
|
|
172
|
-
): Promise<staticRouteInterface["put"][T]["responseStructure"]> {
|
|
173
|
-
return new Promise((resolve, reject) => {
|
|
174
|
-
axios
|
|
175
|
-
.put(url, { data: requireParams })
|
|
176
|
-
.then((response) => {
|
|
177
|
-
resolve(response.data)
|
|
178
|
-
})
|
|
179
|
-
.catch((error) => {
|
|
180
|
-
reject(error)
|
|
181
|
-
})
|
|
182
|
-
})
|
|
183
|
-
}
|
|
184
|
-
delete<T extends keyof staticRouteInterface["delete"]>(
|
|
185
|
-
url: T,
|
|
186
|
-
requireParams: staticRouteInterface["delete"][T]["requireParams"]
|
|
187
|
-
): Promise<staticRouteInterface["delete"][T]["responseStructure"]> {
|
|
188
|
-
return new Promise((resolve, reject) => {
|
|
189
|
-
axios
|
|
190
|
-
.delete(url, { data: requireParams })
|
|
191
|
-
.then((response) => {
|
|
192
|
-
resolve(response.data)
|
|
193
|
-
})
|
|
194
|
-
.catch((error) => {
|
|
195
|
-
reject(error)
|
|
196
|
-
})
|
|
197
|
-
})
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
`;
|
|
202
|
-
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
|
+
});
|
|
203
149
|
}
|
|
204
150
|
}
|
|
205
151
|
exports.default = GGExpress;
|
package/dist/apiConnector.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,15 @@ 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
|
+
data.data;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
@@ -12,8 +12,16 @@ export interface staticRouteInterface {
|
|
|
12
12
|
}[];
|
|
13
13
|
};
|
|
14
14
|
responseStructure: {
|
|
15
|
-
|
|
16
|
-
|
|
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
|
+
}[];
|
|
17
25
|
};
|
|
18
26
|
};
|
|
19
27
|
};
|
package/dist/test.js
CHANGED
|
@@ -20,12 +20,23 @@ function run() {
|
|
|
20
20
|
},
|
|
21
21
|
},
|
|
22
22
|
responseStructure: {
|
|
23
|
-
parameter: {},
|
|
23
|
+
parameter: { numberOfPeople: "number", itemName: "string" },
|
|
24
24
|
dataType: "arrayObject",
|
|
25
|
-
structure: {
|
|
25
|
+
structure: {
|
|
26
|
+
id: "number",
|
|
27
|
+
name: "string",
|
|
28
|
+
},
|
|
26
29
|
},
|
|
27
30
|
}, (req, res, next) => {
|
|
28
|
-
|
|
31
|
+
return res.json({
|
|
32
|
+
message: "",
|
|
33
|
+
status: "SUCCESS",
|
|
34
|
+
data: [],
|
|
35
|
+
parameter: {
|
|
36
|
+
itemName: "",
|
|
37
|
+
numberOfPeople: 2,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
29
40
|
});
|
|
30
41
|
app.listen(3000, () => {
|
|
31
42
|
ggapp.generateAPIFiles();
|
package/package.json
CHANGED
package/src/GGApi.ts
CHANGED
|
@@ -67,10 +67,12 @@ export class GGApi {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
api
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
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
|
@@ -67,10 +67,12 @@ type MyRequest<
|
|
|
67
67
|
type MyResponse<
|
|
68
68
|
DT extends responseStructure["dataType"],
|
|
69
69
|
T extends responseStructure["structure"],
|
|
70
|
-
K extends keyof T
|
|
70
|
+
K extends keyof T,
|
|
71
|
+
P extends responseStructure["parameter"]
|
|
71
72
|
> = Response<{
|
|
72
73
|
status: "SUCCESS" | "ERROR"
|
|
73
74
|
message: string
|
|
75
|
+
parameter: { [Key in keyof P]: numberOrString<P[Key]> }
|
|
74
76
|
data: DT extends "arrayObject"
|
|
75
77
|
? Array<{ [key in K]: numberOrString<T[key]> }>
|
|
76
78
|
: { [key in K]: numberOrString<T[key]> }
|
|
@@ -98,7 +100,8 @@ export default class GGExpress {
|
|
|
98
100
|
R extends responseStructure,
|
|
99
101
|
RS extends R["structure"],
|
|
100
102
|
KR extends keyof RS,
|
|
101
|
-
P extends M["parameter"]
|
|
103
|
+
P extends M["parameter"],
|
|
104
|
+
PP extends R["parameter"]
|
|
102
105
|
>(
|
|
103
106
|
method: "get" | "post" | "put" | "delete",
|
|
104
107
|
url: string,
|
|
@@ -109,7 +112,7 @@ export default class GGExpress {
|
|
|
109
112
|
...middlewares: Array<
|
|
110
113
|
(
|
|
111
114
|
req: MyRequest<M["dataType"], T, K, P>,
|
|
112
|
-
res: MyResponse<R["dataType"], RS, KR>,
|
|
115
|
+
res: MyResponse<R["dataType"], RS, KR, PP>,
|
|
113
116
|
next: NextFunction
|
|
114
117
|
) => any
|
|
115
118
|
>
|
|
@@ -140,7 +143,8 @@ export default class GGExpress {
|
|
|
140
143
|
R extends responseStructure,
|
|
141
144
|
RS extends R["structure"],
|
|
142
145
|
KR extends keyof RS,
|
|
143
|
-
P extends M["parameter"]
|
|
146
|
+
P extends M["parameter"],
|
|
147
|
+
PP extends R["parameter"]
|
|
144
148
|
>(
|
|
145
149
|
url: `/api/${string}`,
|
|
146
150
|
options: {
|
|
@@ -150,7 +154,7 @@ export default class GGExpress {
|
|
|
150
154
|
...middlewares: Array<
|
|
151
155
|
(
|
|
152
156
|
req: MyRequest<M["dataType"], T, K, P>,
|
|
153
|
-
res: MyResponse<R["dataType"], RS, KR>,
|
|
157
|
+
res: MyResponse<R["dataType"], RS, KR, PP>,
|
|
154
158
|
next: NextFunction
|
|
155
159
|
) => any
|
|
156
160
|
>
|
|
@@ -165,7 +169,8 @@ export default class GGExpress {
|
|
|
165
169
|
R extends responseStructure,
|
|
166
170
|
RS extends R["structure"],
|
|
167
171
|
KR extends keyof RS,
|
|
168
|
-
P extends M["parameter"]
|
|
172
|
+
P extends M["parameter"],
|
|
173
|
+
PP extends R["parameter"]
|
|
169
174
|
>(
|
|
170
175
|
url: `/api/${string}`,
|
|
171
176
|
options: {
|
|
@@ -175,7 +180,7 @@ export default class GGExpress {
|
|
|
175
180
|
...middlewares: Array<
|
|
176
181
|
(
|
|
177
182
|
req: MyRequest<M["dataType"], T, K, P>,
|
|
178
|
-
res: MyResponse<R["dataType"], RS, KR>,
|
|
183
|
+
res: MyResponse<R["dataType"], RS, KR, PP>,
|
|
179
184
|
next: NextFunction
|
|
180
185
|
) => any
|
|
181
186
|
>
|
|
@@ -189,7 +194,8 @@ export default class GGExpress {
|
|
|
189
194
|
R extends responseStructure,
|
|
190
195
|
RS extends R["structure"],
|
|
191
196
|
KR extends keyof RS,
|
|
192
|
-
P extends M["parameter"]
|
|
197
|
+
P extends M["parameter"],
|
|
198
|
+
PP extends R["parameter"]
|
|
193
199
|
>(
|
|
194
200
|
url: `/api/${string}`,
|
|
195
201
|
options: {
|
|
@@ -199,7 +205,7 @@ export default class GGExpress {
|
|
|
199
205
|
...middlewares: Array<
|
|
200
206
|
(
|
|
201
207
|
req: MyRequest<M["dataType"], T, K, P>,
|
|
202
|
-
res: MyResponse<R["dataType"], RS, KR>,
|
|
208
|
+
res: MyResponse<R["dataType"], RS, KR, PP>,
|
|
203
209
|
next: NextFunction
|
|
204
210
|
) => any
|
|
205
211
|
>
|
|
@@ -213,7 +219,8 @@ export default class GGExpress {
|
|
|
213
219
|
R extends responseStructure,
|
|
214
220
|
RS extends R["structure"],
|
|
215
221
|
KR extends keyof RS,
|
|
216
|
-
P extends M["parameter"]
|
|
222
|
+
P extends M["parameter"],
|
|
223
|
+
PP extends R["parameter"]
|
|
217
224
|
>(
|
|
218
225
|
url: `/api/${string}`,
|
|
219
226
|
options: {
|
|
@@ -223,7 +230,7 @@ export default class GGExpress {
|
|
|
223
230
|
...middlewares: Array<
|
|
224
231
|
(
|
|
225
232
|
req: MyRequest<M["dataType"], T, K, P>,
|
|
226
|
-
res: MyResponse<R["dataType"], RS, KR>,
|
|
233
|
+
res: MyResponse<R["dataType"], RS, KR, PP>,
|
|
227
234
|
next: NextFunction
|
|
228
235
|
) => any
|
|
229
236
|
>
|
|
@@ -233,7 +240,7 @@ export default class GGExpress {
|
|
|
233
240
|
public generateAPIFiles() {
|
|
234
241
|
this.generateStaticRouteFile()
|
|
235
242
|
}
|
|
236
|
-
private generateStaticRouteFile() {
|
|
243
|
+
private async generateStaticRouteFile() {
|
|
237
244
|
const genParamCodeParameter = (data: requireParamsStructure) => {
|
|
238
245
|
let result: string
|
|
239
246
|
const resultArray = Object.entries(data["parameter"]).map(
|
|
@@ -299,7 +306,10 @@ export default class GGExpress {
|
|
|
299
306
|
)}}, data : { ${genParamCode(row.requireParams)} }${isArray(
|
|
300
307
|
row.requireParams
|
|
301
308
|
)}},
|
|
302
|
-
responseStructure : {
|
|
309
|
+
responseStructure : {
|
|
310
|
+
status : "SUCCESS" | "ERROR",
|
|
311
|
+
message : string,
|
|
312
|
+
parameter : {${genParamCodeParameter(
|
|
303
313
|
row.responseStructure
|
|
304
314
|
)}}, data : { ${genParamCode(row.responseStructure)} } ${isArray(
|
|
305
315
|
row.responseStructure
|
|
@@ -325,81 +335,12 @@ export default class GGExpress {
|
|
|
325
335
|
|
|
326
336
|
for (let row of this.outputPath) {
|
|
327
337
|
fs.writeFileSync(path.join(row, "staticRouteInterface.ts"), content)
|
|
328
|
-
this.generateGGApi(path.join(row, "apiConnector.ts"))
|
|
338
|
+
await this.generateGGApi(path.join(row, "apiConnector.ts"))
|
|
329
339
|
}
|
|
330
340
|
}
|
|
331
|
-
private generateGGApi(filePathWithFileName: string) {
|
|
332
|
-
|
|
333
|
-
import axios from "axios"
|
|
334
|
-
import { staticRouteInterface } from "./staticRouteInterface"
|
|
335
|
-
|
|
336
|
-
export class GGApi {
|
|
337
|
-
constructor() {}
|
|
338
|
-
|
|
339
|
-
get<T extends keyof staticRouteInterface["get"]>(
|
|
340
|
-
url: T,
|
|
341
|
-
requireParams: staticRouteInterface["get"][T]["requireParams"]
|
|
342
|
-
): Promise<staticRouteInterface["get"][T]["responseStructure"]> {
|
|
343
|
-
return new Promise((resolve, reject) => {
|
|
344
|
-
axios
|
|
345
|
-
.get(url, { params: requireParams })
|
|
346
|
-
.then((response) => {
|
|
347
|
-
resolve(response.data)
|
|
348
|
-
})
|
|
349
|
-
.catch((error) => {
|
|
350
|
-
reject(error)
|
|
351
|
-
})
|
|
352
|
-
})
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
post<T extends keyof staticRouteInterface["post"]>(
|
|
356
|
-
url: T,
|
|
357
|
-
requireParams: staticRouteInterface["post"][T]["requireParams"]
|
|
358
|
-
): Promise<staticRouteInterface["post"][T]["responseStructure"]> {
|
|
359
|
-
return new Promise((resolve, reject) => {
|
|
360
|
-
axios
|
|
361
|
-
.post(url, { data: requireParams })
|
|
362
|
-
.then((response) => {
|
|
363
|
-
resolve(response.data)
|
|
364
|
-
})
|
|
365
|
-
.catch((error) => {
|
|
366
|
-
reject(error)
|
|
367
|
-
})
|
|
368
|
-
})
|
|
369
|
-
}
|
|
370
|
-
put<T extends keyof staticRouteInterface["put"]>(
|
|
371
|
-
url: T,
|
|
372
|
-
requireParams: staticRouteInterface["put"][T]["requireParams"]
|
|
373
|
-
): Promise<staticRouteInterface["put"][T]["responseStructure"]> {
|
|
374
|
-
return new Promise((resolve, reject) => {
|
|
375
|
-
axios
|
|
376
|
-
.put(url, { data: requireParams })
|
|
377
|
-
.then((response) => {
|
|
378
|
-
resolve(response.data)
|
|
379
|
-
})
|
|
380
|
-
.catch((error) => {
|
|
381
|
-
reject(error)
|
|
382
|
-
})
|
|
383
|
-
})
|
|
384
|
-
}
|
|
385
|
-
delete<T extends keyof staticRouteInterface["delete"]>(
|
|
386
|
-
url: T,
|
|
387
|
-
requireParams: staticRouteInterface["delete"][T]["requireParams"]
|
|
388
|
-
): Promise<staticRouteInterface["delete"][T]["responseStructure"]> {
|
|
389
|
-
return new Promise((resolve, reject) => {
|
|
390
|
-
axios
|
|
391
|
-
.delete(url, { data: requireParams })
|
|
392
|
-
.then((response) => {
|
|
393
|
-
resolve(response.data)
|
|
394
|
-
})
|
|
395
|
-
.catch((error) => {
|
|
396
|
-
reject(error)
|
|
397
|
-
})
|
|
398
|
-
})
|
|
399
|
-
}
|
|
400
|
-
}
|
|
341
|
+
private async generateGGApi(filePathWithFileName: string) {
|
|
342
|
+
const code = await fs.readFileSync("./GGApi.ts")
|
|
401
343
|
|
|
402
|
-
`
|
|
403
344
|
fs.writeFileSync(filePathWithFileName, code)
|
|
404
345
|
}
|
|
405
346
|
}
|
package/src/apiConnector.ts
CHANGED
|
@@ -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,14 @@ 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
|
+
data.data
|
|
79
|
+
}
|
|
@@ -2,7 +2,10 @@ export interface staticRouteInterface {
|
|
|
2
2
|
get : { },
|
|
3
3
|
post : { "/api/item" : {
|
|
4
4
|
requireParams : { parameter : { bankID : number}, data : { id : number, name : string }[]},
|
|
5
|
-
responseStructure : {
|
|
5
|
+
responseStructure : {
|
|
6
|
+
status : "SUCCESS" | "ERROR",
|
|
7
|
+
message : string,
|
|
8
|
+
parameter : { numberOfPeople : number, itemName : string}, data : { id : number, name : string } []}
|
|
6
9
|
} },
|
|
7
10
|
put : { },
|
|
8
11
|
delete : { },
|
package/src/test.ts
CHANGED
|
@@ -17,13 +17,24 @@ function run() {
|
|
|
17
17
|
},
|
|
18
18
|
},
|
|
19
19
|
responseStructure: {
|
|
20
|
-
parameter: {},
|
|
20
|
+
parameter: { numberOfPeople: "number", itemName: "string" },
|
|
21
21
|
dataType: "arrayObject",
|
|
22
|
-
structure: {
|
|
22
|
+
structure: {
|
|
23
|
+
id: "number",
|
|
24
|
+
name: "string",
|
|
25
|
+
},
|
|
23
26
|
},
|
|
24
27
|
},
|
|
25
28
|
(req, res, next) => {
|
|
26
|
-
|
|
29
|
+
return res.json({
|
|
30
|
+
message: "",
|
|
31
|
+
status: "SUCCESS",
|
|
32
|
+
data: [],
|
|
33
|
+
parameter: {
|
|
34
|
+
itemName: "",
|
|
35
|
+
numberOfPeople: 2,
|
|
36
|
+
},
|
|
37
|
+
})
|
|
27
38
|
}
|
|
28
39
|
)
|
|
29
40
|
app.listen(3000, () => {
|