@bool-ts/core 1.1.2 → 1.2.3
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/__test/controller.ts +4 -3
- package/dist/decorators/module.d.ts +1 -0
- package/dist/hooks/factory.d.ts +1 -0
- package/dist/hooks/factory.js +23 -19
- package/dist/http/index.js +1 -1
- package/package.json +2 -2
- package/src/decorators/module.ts +1 -0
- package/src/hooks/factory.ts +26 -20
- package/src/http/index.ts +1 -1
- package/test.http +3 -3
package/__test/controller.ts
CHANGED
|
@@ -11,7 +11,7 @@ export class TestController {
|
|
|
11
11
|
@Inject(TestService) private readonly testService: IService
|
|
12
12
|
) { }
|
|
13
13
|
|
|
14
|
-
@Get()
|
|
14
|
+
@Get("abc")
|
|
15
15
|
private _get(
|
|
16
16
|
req: Request,
|
|
17
17
|
res: Response
|
|
@@ -20,7 +20,7 @@ export class TestController {
|
|
|
20
20
|
res.json({ test: "success" }).send();
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
@Post()
|
|
23
|
+
@Post("abc")
|
|
24
24
|
private _post(
|
|
25
25
|
req: Request,
|
|
26
26
|
res: Response
|
|
@@ -37,11 +37,12 @@ export class TestController {
|
|
|
37
37
|
res.json({ test: "success" }).send();
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
@Patch()
|
|
40
|
+
@Patch("abc/:id")
|
|
41
41
|
private _patch(
|
|
42
42
|
req: Request,
|
|
43
43
|
res: Response
|
|
44
44
|
) {
|
|
45
|
+
console.log(req.params)
|
|
45
46
|
res.json({ test: "success" }).send();
|
|
46
47
|
}
|
|
47
48
|
|
package/dist/hooks/factory.d.ts
CHANGED
package/dist/hooks/factory.js
CHANGED
|
@@ -37,37 +37,38 @@ const http_1 = require("../http");
|
|
|
37
37
|
* @param target
|
|
38
38
|
* @param router
|
|
39
39
|
*/
|
|
40
|
-
const controllerCreator = (
|
|
41
|
-
if (!Reflect.getOwnMetadataKeys(
|
|
42
|
-
throw Error(`${
|
|
40
|
+
const controllerCreator = (controllerConstructor, parentRouter = (0, express_1.Router)()) => {
|
|
41
|
+
if (!Reflect.getOwnMetadataKeys(controllerConstructor).includes(decorators_1.controllerKey)) {
|
|
42
|
+
throw Error(`${controllerConstructor.name} is not a controller.`);
|
|
43
43
|
}
|
|
44
|
-
const controller = injector_1.Injector.get(
|
|
44
|
+
const controller = injector_1.Injector.get(controllerConstructor);
|
|
45
45
|
if (!controller) {
|
|
46
46
|
throw Error("Can not initialize controller.");
|
|
47
47
|
}
|
|
48
|
-
const controllerMetadata = Reflect.getOwnMetadata(decorators_1.controllerKey,
|
|
49
|
-
const routesMetadata = (Reflect.getOwnMetadata(decorators_1.controllerRoutesKey,
|
|
50
|
-
const
|
|
51
|
-
routesMetadata.forEach(
|
|
52
|
-
if (typeof
|
|
48
|
+
const controllerMetadata = Reflect.getOwnMetadata(decorators_1.controllerKey, controllerConstructor) || "/";
|
|
49
|
+
const routesMetadata = (Reflect.getOwnMetadata(decorators_1.controllerRoutesKey, controllerConstructor) || []);
|
|
50
|
+
const router = (0, express_1.Router)();
|
|
51
|
+
routesMetadata.forEach(routeMetadata => {
|
|
52
|
+
if (typeof routeMetadata.descriptor.value !== "function") {
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
const route = router.route(routeMetadata.path);
|
|
56
|
+
switch (routeMetadata.httpMethod) {
|
|
56
57
|
case "GET":
|
|
57
|
-
return
|
|
58
|
+
return route.get(routeMetadata.descriptor.value.bind(controller));
|
|
58
59
|
case "POST":
|
|
59
|
-
return
|
|
60
|
+
return route.post(routeMetadata.descriptor.value.bind(controller));
|
|
60
61
|
case "PUT":
|
|
61
|
-
return
|
|
62
|
+
return route.put(routeMetadata.descriptor.value.bind(controller));
|
|
62
63
|
case "PATCH":
|
|
63
|
-
return
|
|
64
|
+
return route.patch(routeMetadata.descriptor.value.bind(controller));
|
|
64
65
|
case "DELETE":
|
|
65
|
-
return
|
|
66
|
+
return route.delete(routeMetadata.descriptor.value.bind(controller));
|
|
66
67
|
case "OPTIONS":
|
|
67
|
-
return
|
|
68
|
+
return route.options(routeMetadata.descriptor.value.bind(controller));
|
|
68
69
|
}
|
|
69
70
|
});
|
|
70
|
-
return router;
|
|
71
|
+
return parentRouter.use(controllerMetadata, router);
|
|
71
72
|
};
|
|
72
73
|
/**
|
|
73
74
|
*
|
|
@@ -78,7 +79,6 @@ const BoolFactory = (target, options) => {
|
|
|
78
79
|
throw Error(`${target.name} is not a module.`);
|
|
79
80
|
}
|
|
80
81
|
const metadata = Reflect.getOwnMetadata(decorators_1.moduleKey, target);
|
|
81
|
-
const routers = !metadata?.controllers ? [] : metadata.controllers.map(controllerConstructor => controllerCreator(controllerConstructor));
|
|
82
82
|
const allowOrigins = !metadata?.allowOrigins ?
|
|
83
83
|
["*"] : typeof metadata.allowOrigins !== "string" ?
|
|
84
84
|
metadata.allowOrigins : [metadata.allowOrigins];
|
|
@@ -88,6 +88,8 @@ const BoolFactory = (target, options) => {
|
|
|
88
88
|
const factoryOptions = Object.freeze({
|
|
89
89
|
allowLogsMethods: !options?.log?.methods ? ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"] : options.log.methods
|
|
90
90
|
});
|
|
91
|
+
const routers = !metadata?.controllers ?
|
|
92
|
+
[] : metadata.controllers.map(controllerConstructor => controllerCreator(controllerConstructor));
|
|
91
93
|
app.set("etag", "strong");
|
|
92
94
|
app.set("query parser", (query) => Qs.parse(query, {
|
|
93
95
|
depth: !options?.queryParser?.depth || options.queryParser.depth < 0 ? 10 : options.queryParser.depth,
|
|
@@ -163,7 +165,9 @@ const BoolFactory = (target, options) => {
|
|
|
163
165
|
next();
|
|
164
166
|
});
|
|
165
167
|
if (routers.length > 0) {
|
|
166
|
-
|
|
168
|
+
!metadata?.prefix ?
|
|
169
|
+
app.use(routers) : app.use(!metadata.prefix.startsWith("/") ?
|
|
170
|
+
`/${metadata.prefix}` : metadata.prefix, routers);
|
|
167
171
|
}
|
|
168
172
|
return app;
|
|
169
173
|
};
|
package/dist/http/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bool-ts/core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"test": "bun run __test/index.ts
|
|
7
|
+
"test": "bun --hot run __test/index.ts",
|
|
8
8
|
"build": "tsc"
|
|
9
9
|
},
|
|
10
10
|
"repository": {
|
package/src/decorators/module.ts
CHANGED
package/src/hooks/factory.ts
CHANGED
|
@@ -19,6 +19,7 @@ export type TBoolFactoryOptions = Partial<{
|
|
|
19
19
|
depth: 10,
|
|
20
20
|
arrayLimit: 50
|
|
21
21
|
}>;
|
|
22
|
+
prefix: string;
|
|
22
23
|
}>;
|
|
23
24
|
|
|
24
25
|
|
|
@@ -28,45 +29,47 @@ export type TBoolFactoryOptions = Partial<{
|
|
|
28
29
|
* @param router
|
|
29
30
|
*/
|
|
30
31
|
const controllerCreator = (
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
controllerConstructor: new (...args: any[]) => unknown,
|
|
33
|
+
parentRouter: Router = Router()
|
|
33
34
|
) => {
|
|
34
|
-
if (!Reflect.getOwnMetadataKeys(
|
|
35
|
-
throw Error(`${
|
|
35
|
+
if (!Reflect.getOwnMetadataKeys(controllerConstructor).includes(controllerKey)) {
|
|
36
|
+
throw Error(`${controllerConstructor.name} is not a controller.`);
|
|
36
37
|
}
|
|
37
38
|
|
|
38
|
-
const controller = Injector.get(
|
|
39
|
+
const controller = Injector.get(controllerConstructor);
|
|
39
40
|
|
|
40
41
|
if (!controller) {
|
|
41
42
|
throw Error("Can not initialize controller.");
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
const controllerMetadata = Reflect.getOwnMetadata(controllerKey,
|
|
45
|
-
const routesMetadata = (Reflect.getOwnMetadata(controllerRoutesKey,
|
|
46
|
-
const
|
|
45
|
+
const controllerMetadata = Reflect.getOwnMetadata(controllerKey, controllerConstructor) || "/";
|
|
46
|
+
const routesMetadata = (Reflect.getOwnMetadata(controllerRoutesKey, controllerConstructor) || []) as Array<IControllerRoute>;
|
|
47
|
+
const router = Router();
|
|
47
48
|
|
|
48
|
-
routesMetadata.forEach(
|
|
49
|
-
if (typeof
|
|
49
|
+
routesMetadata.forEach(routeMetadata => {
|
|
50
|
+
if (typeof routeMetadata.descriptor.value !== "function") {
|
|
50
51
|
return;
|
|
51
52
|
}
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
const route = router.route(routeMetadata.path);
|
|
55
|
+
|
|
56
|
+
switch (routeMetadata.httpMethod) {
|
|
54
57
|
case "GET":
|
|
55
|
-
return
|
|
58
|
+
return route.get(routeMetadata.descriptor.value.bind(controller));
|
|
56
59
|
case "POST":
|
|
57
|
-
return
|
|
60
|
+
return route.post(routeMetadata.descriptor.value.bind(controller));
|
|
58
61
|
case "PUT":
|
|
59
|
-
return
|
|
62
|
+
return route.put(routeMetadata.descriptor.value.bind(controller));
|
|
60
63
|
case "PATCH":
|
|
61
|
-
return
|
|
64
|
+
return route.patch(routeMetadata.descriptor.value.bind(controller));
|
|
62
65
|
case "DELETE":
|
|
63
|
-
return
|
|
66
|
+
return route.delete(routeMetadata.descriptor.value.bind(controller));
|
|
64
67
|
case "OPTIONS":
|
|
65
|
-
return
|
|
68
|
+
return route.options(routeMetadata.descriptor.value.bind(controller));
|
|
66
69
|
}
|
|
67
70
|
});
|
|
68
71
|
|
|
69
|
-
return router;
|
|
72
|
+
return parentRouter.use(controllerMetadata, router);
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
|
|
@@ -83,7 +86,6 @@ export const BoolFactory = (
|
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
const metadata = Reflect.getOwnMetadata(moduleKey, target) as TModuleOptions;
|
|
86
|
-
const routers = !metadata?.controllers ? [] : metadata.controllers.map(controllerConstructor => controllerCreator(controllerConstructor));
|
|
87
89
|
const allowOrigins = !metadata?.allowOrigins ?
|
|
88
90
|
["*"] : typeof metadata.allowOrigins !== "string" ?
|
|
89
91
|
metadata.allowOrigins : [metadata.allowOrigins];
|
|
@@ -93,6 +95,8 @@ export const BoolFactory = (
|
|
|
93
95
|
const factoryOptions = Object.freeze({
|
|
94
96
|
allowLogsMethods: !options?.log?.methods ? ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"] : options.log.methods
|
|
95
97
|
});
|
|
98
|
+
const routers = !metadata?.controllers ?
|
|
99
|
+
[] : metadata.controllers.map(controllerConstructor => controllerCreator(controllerConstructor));
|
|
96
100
|
|
|
97
101
|
app.set("etag", "strong");
|
|
98
102
|
app.set("query parser", (query: string) => Qs.parse(query, {
|
|
@@ -184,7 +188,9 @@ export const BoolFactory = (
|
|
|
184
188
|
});
|
|
185
189
|
|
|
186
190
|
if (routers.length > 0) {
|
|
187
|
-
|
|
191
|
+
!metadata?.prefix ?
|
|
192
|
+
app.use(routers) : app.use(!metadata.prefix.startsWith("/") ?
|
|
193
|
+
`/${metadata.prefix}` : metadata.prefix, routers);
|
|
188
194
|
}
|
|
189
195
|
|
|
190
196
|
return app;
|
package/src/http/index.ts
CHANGED
package/test.http
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
### Send test GET method
|
|
5
|
-
GET http://{{baseUrl}}/test
|
|
5
|
+
GET http://{{baseUrl}}/test/abc
|
|
6
6
|
|
|
7
7
|
### Send test POST method
|
|
8
|
-
POST http://{{baseUrl}}/test HTTP/1.1
|
|
8
|
+
POST http://{{baseUrl}}/test/abc HTTP/1.1
|
|
9
9
|
content-type: application/json
|
|
10
10
|
|
|
11
11
|
{
|
|
@@ -18,7 +18,7 @@ PUT http://{{baseUrl}}/test
|
|
|
18
18
|
Content-Type: "application/json"
|
|
19
19
|
|
|
20
20
|
### Send test PATCH method
|
|
21
|
-
PATCH http://{{baseUrl}}/test
|
|
21
|
+
PATCH http://{{baseUrl}}/test/abc/23
|
|
22
22
|
Content-Type: "application/json"
|
|
23
23
|
|
|
24
24
|
### Send test DELETE method
|