@bool-ts/core 1.1.2 → 1.2.2

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.
@@ -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
 
@@ -1,4 +1,5 @@
1
1
  export type TModuleOptions = Partial<{
2
+ prefix: string;
2
3
  controllers: Array<new (...args: any[]) => unknown>;
3
4
  dependencies: Array<new (...args: any[]) => unknown>;
4
5
  allowOrigins: string | Array<string>;
@@ -9,6 +9,7 @@ export type TBoolFactoryOptions = Partial<{
9
9
  depth: 10;
10
10
  arrayLimit: 50;
11
11
  }>;
12
+ prefix: string;
12
13
  }>;
13
14
  /**
14
15
  *
@@ -37,37 +37,38 @@ const http_1 = require("../http");
37
37
  * @param target
38
38
  * @param router
39
39
  */
40
- const controllerCreator = (target, router = (0, express_1.Router)()) => {
41
- if (!Reflect.getOwnMetadataKeys(target).includes(decorators_1.controllerKey)) {
42
- throw Error(`${target.name} is not a controller.`);
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(target);
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, target) || "/";
49
- const routesMetadata = (Reflect.getOwnMetadata(decorators_1.controllerRoutesKey, target) || []);
50
- const innerRouter = router.route(controllerMetadata);
51
- routesMetadata.forEach(route => {
52
- if (typeof route.descriptor.value !== "function") {
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
- switch (route.httpMethod) {
55
+ const route = router.route(routeMetadata.path);
56
+ switch (routeMetadata.httpMethod) {
56
57
  case "GET":
57
- return innerRouter.get(route.descriptor.value.bind(controller));
58
+ return route.get(routeMetadata.descriptor.value.bind(controller));
58
59
  case "POST":
59
- return innerRouter.post(route.descriptor.value.bind(controller));
60
+ return route.post(routeMetadata.descriptor.value.bind(controller));
60
61
  case "PUT":
61
- return innerRouter.put(route.descriptor.value.bind(controller));
62
+ return route.put(routeMetadata.descriptor.value.bind(controller));
62
63
  case "PATCH":
63
- return innerRouter.patch(route.descriptor.value.bind(controller));
64
+ return route.patch(routeMetadata.descriptor.value.bind(controller));
64
65
  case "DELETE":
65
- return innerRouter.delete(route.descriptor.value.bind(controller));
66
+ return route.delete(routeMetadata.descriptor.value.bind(controller));
66
67
  case "OPTIONS":
67
- return innerRouter.options(route.descriptor.value.bind(controller));
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
- app.use(routers);
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/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@bool-ts/core",
3
- "version": "1.1.2",
3
+ "version": "1.2.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
- "test": "bun run __test/index.ts --watch",
7
+ "test": "bun --hot run __test/index.ts",
8
8
  "build": "tsc"
9
9
  },
10
10
  "repository": {
@@ -1,4 +1,5 @@
1
1
  export type TModuleOptions = Partial<{
2
+ prefix: string;
2
3
  controllers: Array<new (...args: any[]) => unknown>;
3
4
  dependencies: Array<new (...args: any[]) => unknown>;
4
5
  allowOrigins: string | Array<string>;
@@ -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
- target: new (...args: any[]) => unknown,
32
- router = Router()
32
+ controllerConstructor: new (...args: any[]) => unknown,
33
+ parentRouter: Router = Router()
33
34
  ) => {
34
- if (!Reflect.getOwnMetadataKeys(target).includes(controllerKey)) {
35
- throw Error(`${target.name} is not a controller.`);
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(target);
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, target) || "/";
45
- const routesMetadata = (Reflect.getOwnMetadata(controllerRoutesKey, target) || []) as Array<IControllerRoute>;
46
- const innerRouter = router.route(controllerMetadata);
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(route => {
49
- if (typeof route.descriptor.value !== "function") {
49
+ routesMetadata.forEach(routeMetadata => {
50
+ if (typeof routeMetadata.descriptor.value !== "function") {
50
51
  return;
51
52
  }
52
53
 
53
- switch (route.httpMethod) {
54
+ const route = router.route(routeMetadata.path);
55
+
56
+ switch (routeMetadata.httpMethod) {
54
57
  case "GET":
55
- return innerRouter.get(route.descriptor.value.bind(controller));
58
+ return route.get(routeMetadata.descriptor.value.bind(controller));
56
59
  case "POST":
57
- return innerRouter.post(route.descriptor.value.bind(controller));
60
+ return route.post(routeMetadata.descriptor.value.bind(controller));
58
61
  case "PUT":
59
- return innerRouter.put(route.descriptor.value.bind(controller));
62
+ return route.put(routeMetadata.descriptor.value.bind(controller));
60
63
  case "PATCH":
61
- return innerRouter.patch(route.descriptor.value.bind(controller));
64
+ return route.patch(routeMetadata.descriptor.value.bind(controller));
62
65
  case "DELETE":
63
- return innerRouter.delete(route.descriptor.value.bind(controller));
66
+ return route.delete(routeMetadata.descriptor.value.bind(controller));
64
67
  case "OPTIONS":
65
- return innerRouter.options(route.descriptor.value.bind(controller));
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
- app.use(routers);
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/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