@bool-ts/core 1.1.1 → 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.
Files changed (41) hide show
  1. package/LICENSE +21 -21
  2. package/__test/controller.ts +64 -63
  3. package/__test/index.ts +11 -11
  4. package/__test/interfaces.ts +7 -7
  5. package/__test/module.ts +17 -17
  6. package/__test/repository.ts +16 -16
  7. package/__test/service.ts +20 -20
  8. package/bun.lockb +0 -0
  9. package/dist/decorators/controller.js +10 -6
  10. package/dist/decorators/http.js +34 -25
  11. package/dist/decorators/index.js +23 -5
  12. package/dist/decorators/inject.js +9 -5
  13. package/dist/decorators/injectable.js +8 -4
  14. package/dist/decorators/module.d.ts +1 -0
  15. package/dist/decorators/module.js +8 -4
  16. package/dist/hooks/factory.d.ts +1 -0
  17. package/dist/hooks/factory.js +66 -35
  18. package/dist/hooks/index.js +7 -2
  19. package/dist/hooks/injector.js +10 -7
  20. package/dist/http/clientError.js +7 -3
  21. package/dist/http/index.js +25 -7
  22. package/dist/http/serverError.js +7 -3
  23. package/dist/index.js +21 -5
  24. package/dist/interfaces/index.js +3 -1
  25. package/package.json +2 -2
  26. package/src/decorators/controller.ts +18 -18
  27. package/src/decorators/http.ts +185 -185
  28. package/src/decorators/index.ts +5 -5
  29. package/src/decorators/inject.ts +19 -19
  30. package/src/decorators/injectable.ts +12 -12
  31. package/src/decorators/module.ts +22 -21
  32. package/src/hooks/factory.ts +199 -193
  33. package/src/hooks/index.ts +2 -2
  34. package/src/hooks/injector.ts +43 -43
  35. package/src/http/clientError.ts +57 -57
  36. package/src/http/index.ts +68 -68
  37. package/src/http/serverError.ts +39 -39
  38. package/src/index.ts +6 -6
  39. package/src/interfaces/index.ts +3 -3
  40. package/test.http +28 -28
  41. package/tsconfig.json +108 -108
@@ -1,80 +1,108 @@
1
- import "reflect-metadata";
2
- import "colors";
3
- import * as Qs from "qs";
4
- import * as ResponseTime from "response-time";
5
- import { controllerKey, controllerRoutesKey, moduleKey } from "../decorators";
6
- import { default as ExpressApp, Router, json, urlencoded } from "express";
7
- import { Injector } from "./injector";
8
- import { errorInfer } from "../http";
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.BoolFactory = void 0;
27
+ require("reflect-metadata");
28
+ require("colors");
29
+ const Qs = __importStar(require("qs"));
30
+ const ResponseTime = __importStar(require("response-time"));
31
+ const decorators_1 = require("../decorators");
32
+ const express_1 = __importStar(require("express"));
33
+ const injector_1 = require("./injector");
34
+ const http_1 = require("../http");
9
35
  /**
10
36
  *
11
37
  * @param target
12
38
  * @param router
13
39
  */
14
- const controllerCreator = (target, router = Router()) => {
15
- if (!Reflect.getOwnMetadataKeys(target).includes(controllerKey)) {
16
- 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.`);
17
43
  }
18
- const controller = Injector.get(target);
44
+ const controller = injector_1.Injector.get(controllerConstructor);
19
45
  if (!controller) {
20
46
  throw Error("Can not initialize controller.");
21
47
  }
22
- const controllerMetadata = Reflect.getOwnMetadata(controllerKey, target) || "/";
23
- const routesMetadata = (Reflect.getOwnMetadata(controllerRoutesKey, target) || []);
24
- const innerRouter = router.route(controllerMetadata);
25
- routesMetadata.forEach(route => {
26
- 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") {
27
53
  return;
28
54
  }
29
- switch (route.httpMethod) {
55
+ const route = router.route(routeMetadata.path);
56
+ switch (routeMetadata.httpMethod) {
30
57
  case "GET":
31
- return innerRouter.get(route.descriptor.value.bind(controller));
58
+ return route.get(routeMetadata.descriptor.value.bind(controller));
32
59
  case "POST":
33
- return innerRouter.post(route.descriptor.value.bind(controller));
60
+ return route.post(routeMetadata.descriptor.value.bind(controller));
34
61
  case "PUT":
35
- return innerRouter.put(route.descriptor.value.bind(controller));
62
+ return route.put(routeMetadata.descriptor.value.bind(controller));
36
63
  case "PATCH":
37
- return innerRouter.patch(route.descriptor.value.bind(controller));
64
+ return route.patch(routeMetadata.descriptor.value.bind(controller));
38
65
  case "DELETE":
39
- return innerRouter.delete(route.descriptor.value.bind(controller));
66
+ return route.delete(routeMetadata.descriptor.value.bind(controller));
40
67
  case "OPTIONS":
41
- return innerRouter.options(route.descriptor.value.bind(controller));
68
+ return route.options(routeMetadata.descriptor.value.bind(controller));
42
69
  }
43
70
  });
44
- return router;
71
+ return parentRouter.use(controllerMetadata, router);
45
72
  };
46
73
  /**
47
74
  *
48
75
  * @param target
49
76
  */
50
- export const BoolFactory = (target, options) => {
51
- if (!Reflect.getOwnMetadataKeys(target).includes(moduleKey)) {
77
+ const BoolFactory = (target, options) => {
78
+ if (!Reflect.getOwnMetadataKeys(target).includes(decorators_1.moduleKey)) {
52
79
  throw Error(`${target.name} is not a module.`);
53
80
  }
54
- const metadata = Reflect.getOwnMetadata(moduleKey, target);
55
- const routers = !metadata?.controllers ? [] : metadata.controllers.map(controllerConstructor => controllerCreator(controllerConstructor));
81
+ const metadata = Reflect.getOwnMetadata(decorators_1.moduleKey, target);
56
82
  const allowOrigins = !metadata?.allowOrigins ?
57
83
  ["*"] : typeof metadata.allowOrigins !== "string" ?
58
84
  metadata.allowOrigins : [metadata.allowOrigins];
59
85
  const allowMethods = !metadata?.allowMethods ?
60
86
  ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"] : metadata.allowMethods;
61
- const app = ExpressApp();
87
+ const app = (0, express_1.default)();
62
88
  const factoryOptions = Object.freeze({
63
89
  allowLogsMethods: !options?.log?.methods ? ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"] : options.log.methods
64
90
  });
91
+ const routers = !metadata?.controllers ?
92
+ [] : metadata.controllers.map(controllerConstructor => controllerCreator(controllerConstructor));
65
93
  app.set("etag", "strong");
66
94
  app.set("query parser", (query) => Qs.parse(query, {
67
95
  depth: !options?.queryParser?.depth || options.queryParser.depth < 0 ? 10 : options.queryParser.depth,
68
96
  arrayLimit: !options?.queryParser?.arrayLimit || options.queryParser.arrayLimit < 0 ? 50 : options.queryParser.arrayLimit
69
97
  }));
70
- app.use(urlencoded({
98
+ app.use((0, express_1.urlencoded)({
71
99
  extended: true,
72
100
  inflate: true,
73
101
  limit: "1mb",
74
102
  parameterLimit: 20,
75
103
  type: "application/x-www-form-urlencoded",
76
104
  verify: undefined
77
- }), json({
105
+ }), (0, express_1.json)({
78
106
  inflate: true,
79
107
  limit: "5mb",
80
108
  reviver: undefined,
@@ -98,7 +126,7 @@ export const BoolFactory = (target, options) => {
98
126
  },
99
127
  // Error catcher
100
128
  (err, req, res, next) => {
101
- errorInfer(res, err);
129
+ (0, http_1.errorInfer)(res, err);
102
130
  if (!options?.debug) {
103
131
  return;
104
132
  }
@@ -137,8 +165,11 @@ export const BoolFactory = (target, options) => {
137
165
  next();
138
166
  });
139
167
  if (routers.length > 0) {
140
- app.use(routers);
168
+ !metadata?.prefix ?
169
+ app.use(routers) : app.use(!metadata.prefix.startsWith("/") ?
170
+ `/${metadata.prefix}` : metadata.prefix, routers);
141
171
  }
142
172
  return app;
143
173
  };
144
- export default BoolFactory;
174
+ exports.BoolFactory = BoolFactory;
175
+ exports.default = exports.BoolFactory;
@@ -1,2 +1,7 @@
1
- export { BoolFactory } from "./factory";
2
- export { Injector } from "./injector";
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Injector = exports.BoolFactory = void 0;
4
+ var factory_1 = require("./factory");
5
+ Object.defineProperty(exports, "BoolFactory", { enumerable: true, get: function () { return factory_1.BoolFactory; } });
6
+ var injector_1 = require("./injector");
7
+ Object.defineProperty(exports, "Injector", { enumerable: true, get: function () { return injector_1.Injector; } });
@@ -1,6 +1,9 @@
1
- import "reflect-metadata";
2
- import { injectableKey, injectKey } from "../decorators";
3
- export const Injector = new class {
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Injector = void 0;
4
+ require("reflect-metadata");
5
+ const decorators_1 = require("../decorators");
6
+ exports.Injector = new class {
4
7
  _mapper = new Map();
5
8
  /**
6
9
  *
@@ -11,15 +14,15 @@ export const Injector = new class {
11
14
  return this._mapper.get(classDefinition);
12
15
  }
13
16
  const ownMetadataKeys = Reflect.getMetadataKeys(classDefinition);
14
- if (!ownMetadataKeys.includes(injectableKey)) {
17
+ if (!ownMetadataKeys.includes(decorators_1.injectableKey)) {
15
18
  throw Error("Missing dependency declaration, please check @Injectable() used on dependency(ies).");
16
19
  }
17
20
  // Initialize dependencies injection
18
- const dependencies = Reflect.getOwnMetadata(injectKey, classDefinition) || [];
19
- const injections = dependencies.map(dependency => Injector.get(dependency));
21
+ const dependencies = Reflect.getOwnMetadata(decorators_1.injectKey, classDefinition) || [];
22
+ const injections = dependencies.map(dependency => exports.Injector.get(dependency));
20
23
  const instance = new classDefinition(...injections);
21
24
  this._mapper.set(classDefinition, instance);
22
25
  return instance;
23
26
  }
24
27
  };
25
- export default Injector;
28
+ exports.default = exports.Injector;
@@ -1,4 +1,7 @@
1
- export const httpClientErrors = Object.freeze({
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpClientError = exports.httpClientErrors = void 0;
4
+ exports.httpClientErrors = Object.freeze({
2
5
  400: "BAD_REQUEST",
3
6
  401: "UNAUTHORIZED",
4
7
  402: "PAYMENT_REQUIRED",
@@ -29,14 +32,15 @@ export const httpClientErrors = Object.freeze({
29
32
  431: "REQUEST_HEADER_FIELDS_TOO_LARGE",
30
33
  451: "UNAVAILABLE_FOR_LEGAL_REASONS"
31
34
  });
32
- export class HttpClientError extends Error {
35
+ class HttpClientError extends Error {
33
36
  httpCode;
34
37
  message;
35
38
  data;
36
39
  constructor({ httpCode, data }) {
37
40
  super();
38
41
  this.httpCode = httpCode;
39
- this.message = httpClientErrors[httpCode];
42
+ this.message = exports.httpClientErrors[httpCode];
40
43
  this.data = data;
41
44
  }
42
45
  }
46
+ exports.HttpClientError = HttpClientError;
@@ -1,15 +1,32 @@
1
- import { HttpClientError } from "./clientError";
2
- import { HttpServerError } from "./serverError";
3
- export const errorInfer = (res, data) => {
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.errorInfer = void 0;
18
+ const clientError_1 = require("./clientError");
19
+ const serverError_1 = require("./serverError");
20
+ const errorInfer = (res, data) => {
4
21
  if (res.headersSent) {
5
22
  return;
6
23
  }
7
24
  try {
8
- if (data instanceof HttpClientError) {
25
+ if (data instanceof clientError_1.HttpClientError) {
9
26
  res.status(data.httpCode).json(data);
10
27
  return;
11
28
  }
12
- if (data instanceof HttpServerError) {
29
+ if (data instanceof serverError_1.HttpServerError) {
13
30
  res.status(data.httpCode).json(data);
14
31
  return;
15
32
  }
@@ -54,5 +71,6 @@ export const errorInfer = (res, data) => {
54
71
  res.end();
55
72
  }
56
73
  };
57
- export * from "./clientError";
58
- export * from "./serverError";
74
+ exports.errorInfer = errorInfer;
75
+ __exportStar(require("./clientError"), exports);
76
+ __exportStar(require("./serverError"), exports);
@@ -1,4 +1,7 @@
1
- export const httpServerErrors = Object.freeze({
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpServerError = exports.httpServerErrors = void 0;
4
+ exports.httpServerErrors = Object.freeze({
2
5
  500: "INTERNAL_SERVER_ERROR",
3
6
  501: "NOT_IMPLEMENTED",
4
7
  502: "BAD_GATEWAY",
@@ -11,14 +14,15 @@ export const httpServerErrors = Object.freeze({
11
14
  510: "NOT_EXTENDED",
12
15
  511: "NETWORK_AUTHENTICATION_REQUIRED"
13
16
  });
14
- export class HttpServerError extends Error {
17
+ class HttpServerError extends Error {
15
18
  httpCode;
16
19
  message;
17
20
  data;
18
21
  constructor({ httpCode, data }) {
19
22
  super();
20
23
  this.httpCode = httpCode;
21
- this.message = httpServerErrors[httpCode];
24
+ this.message = exports.httpServerErrors[httpCode];
22
25
  this.data = data;
23
26
  }
24
27
  }
28
+ exports.HttpServerError = HttpServerError;
package/dist/index.js CHANGED
@@ -1,5 +1,21 @@
1
- import "reflect-metadata";
2
- export * from "./interfaces";
3
- export * from "./hooks";
4
- export * from "./decorators";
5
- export * from "./http";
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ require("reflect-metadata");
18
+ __exportStar(require("./interfaces"), exports);
19
+ __exportStar(require("./hooks"), exports);
20
+ __exportStar(require("./decorators"), exports);
21
+ __exportStar(require("./http"), exports);
@@ -1 +1,3 @@
1
- export default {};
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {};
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@bool-ts/core",
3
- "version": "1.1.1",
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,18 +1,18 @@
1
- import { injectableKey } from "./injectable";
2
-
3
-
4
- export const controllerKey = "__bool:controller__";
5
-
6
- export const Controller = (
7
- prefix: string
8
- ) => <T extends Object>(
9
- target: T,
10
- context?: ClassDecoratorContext
11
- ) => {
12
- Reflect.defineMetadata(controllerKey, !prefix.startsWith("/") ? `/${prefix}` : prefix, target);
13
- Reflect.defineMetadata(injectableKey, undefined, target);
14
-
15
- return target;
16
- }
17
-
18
- export default Controller;
1
+ import { injectableKey } from "./injectable";
2
+
3
+
4
+ export const controllerKey = "__bool:controller__";
5
+
6
+ export const Controller = (
7
+ prefix: string
8
+ ) => <T extends Object>(
9
+ target: T,
10
+ context?: ClassDecoratorContext
11
+ ) => {
12
+ Reflect.defineMetadata(controllerKey, !prefix.startsWith("/") ? `/${prefix}` : prefix, target);
13
+ Reflect.defineMetadata(injectableKey, undefined, target);
14
+
15
+ return target;
16
+ }
17
+
18
+ export default Controller;