@bool-ts/core 1.5.7 → 1.5.9

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 (48) hide show
  1. package/.prettierrc +11 -11
  2. package/LICENSE +21 -21
  3. package/__test/afterDispatcher.ts +9 -9
  4. package/__test/beforeDispatcher.ts +9 -9
  5. package/__test/controller.ts +68 -68
  6. package/__test/firstGuard.ts +10 -10
  7. package/__test/firstMiddleware.ts +9 -9
  8. package/__test/index.ts +8 -8
  9. package/__test/interfaces.ts +7 -7
  10. package/__test/module.ts +22 -22
  11. package/__test/repository.ts +16 -16
  12. package/__test/secondGuard.ts +10 -10
  13. package/__test/secondMiddleware.ts +9 -9
  14. package/__test/service.ts +20 -20
  15. package/bun.lockb +0 -0
  16. package/dist/entities/route.js +0 -1
  17. package/jsconfig.json +27 -27
  18. package/package.json +1 -1
  19. package/src/decorators/arguments.ts +214 -214
  20. package/src/decorators/controller.ts +22 -22
  21. package/src/decorators/dispatcher.ts +19 -19
  22. package/src/decorators/guard.ts +19 -19
  23. package/src/decorators/http.ts +81 -81
  24. package/src/decorators/index.ts +28 -28
  25. package/src/decorators/inject.ts +13 -13
  26. package/src/decorators/injectable.ts +8 -8
  27. package/src/decorators/middleware.ts +19 -19
  28. package/src/decorators/module.ts +92 -92
  29. package/src/decorators/zodSchema.ts +20 -20
  30. package/src/entities/index.ts +3 -3
  31. package/src/entities/route.ts +327 -328
  32. package/src/entities/router.ts +35 -35
  33. package/src/entities/routerGroup.ts +34 -34
  34. package/src/hooks/factory.ts +616 -616
  35. package/src/hooks/index.ts +2 -2
  36. package/src/hooks/injector.ts +43 -43
  37. package/src/http/clientError.ts +45 -45
  38. package/src/http/index.ts +61 -61
  39. package/src/http/serverError.ts +38 -38
  40. package/src/index.ts +6 -6
  41. package/src/interfaces/controller.ts +1 -1
  42. package/src/interfaces/dispatcher.ts +3 -3
  43. package/src/interfaces/guard.ts +3 -3
  44. package/src/interfaces/index.ts +5 -5
  45. package/src/interfaces/middleware.ts +3 -3
  46. package/src/interfaces/module.ts +1 -1
  47. package/test.http +31 -31
  48. package/tsconfig.json +108 -108
@@ -1,2 +1,2 @@
1
- export { BoolFactory } from "./factory";
2
- export { Injector } from "./injector";
1
+ export { BoolFactory } from "./factory";
2
+ export { Injector } from "./injector";
@@ -1,43 +1,43 @@
1
- import "reflect-metadata";
2
-
3
- import { controllerKey, dispatcherKey, guardKey, injectableKey, injectKey, middlewareKey } from "../decorators";
4
-
5
- interface IInjector {
6
- get<T>(classDefinition: { new (...args: any[]): T }): T;
7
- }
8
-
9
- export const Injector: IInjector = new (class {
10
- private readonly _mapper: Map<Function, any> = new Map();
11
-
12
- /**
13
- *
14
- * @param constructor
15
- */
16
- get<T>(classDefinition: { new (...args: any[]): T }) {
17
- if (this._mapper.has(classDefinition)) {
18
- return this._mapper.get(classDefinition) as T;
19
- }
20
-
21
- const ownMetadataKeys = Reflect.getMetadataKeys(classDefinition);
22
-
23
- if (
24
- ![injectableKey, controllerKey, middlewareKey, guardKey, dispatcherKey].some((value) =>
25
- ownMetadataKeys.includes(value)
26
- )
27
- ) {
28
- console.error(classDefinition);
29
- throw Error("Missing dependency declaration, please check @Injectable() used on dependency(ies).");
30
- }
31
-
32
- // Initialize dependencies injection
33
- const dependencies: any[] = Reflect.getOwnMetadata(injectKey, classDefinition) || [];
34
- const injections: any[] = dependencies.map((dependency) => Injector.get(dependency));
35
- const instance = new classDefinition(...injections);
36
-
37
- this._mapper.set(classDefinition, instance);
38
-
39
- return instance;
40
- }
41
- })();
42
-
43
- export default Injector;
1
+ import "reflect-metadata";
2
+
3
+ import { controllerKey, dispatcherKey, guardKey, injectableKey, injectKey, middlewareKey } from "../decorators";
4
+
5
+ interface IInjector {
6
+ get<T>(classDefinition: { new (...args: any[]): T }): T;
7
+ }
8
+
9
+ export const Injector: IInjector = new (class {
10
+ private readonly _mapper: Map<Function, any> = new Map();
11
+
12
+ /**
13
+ *
14
+ * @param constructor
15
+ */
16
+ get<T>(classDefinition: { new (...args: any[]): T }) {
17
+ if (this._mapper.has(classDefinition)) {
18
+ return this._mapper.get(classDefinition) as T;
19
+ }
20
+
21
+ const ownMetadataKeys = Reflect.getMetadataKeys(classDefinition);
22
+
23
+ if (
24
+ ![injectableKey, controllerKey, middlewareKey, guardKey, dispatcherKey].some((value) =>
25
+ ownMetadataKeys.includes(value)
26
+ )
27
+ ) {
28
+ console.error(classDefinition);
29
+ throw Error("Missing dependency declaration, please check @Injectable() used on dependency(ies).");
30
+ }
31
+
32
+ // Initialize dependencies injection
33
+ const dependencies: any[] = Reflect.getOwnMetadata(injectKey, classDefinition) || [];
34
+ const injections: any[] = dependencies.map((dependency) => Injector.get(dependency));
35
+ const instance = new classDefinition(...injections);
36
+
37
+ this._mapper.set(classDefinition, instance);
38
+
39
+ return instance;
40
+ }
41
+ })();
42
+
43
+ export default Injector;
@@ -1,45 +1,45 @@
1
- export const httpClientErrors = Object.freeze({
2
- 400: "BAD_REQUEST",
3
- 401: "UNAUTHORIZED",
4
- 402: "PAYMENT_REQUIRED",
5
- 403: "FORBIDDEN",
6
- 404: "NOT_FOUND",
7
- 405: "METHOD_NOT_ALLOWED",
8
- 406: "NOT_ACCEPTABLE",
9
- 407: "PROXY_AUTHENCATION_REQUIRED",
10
- 408: "REQUEST_TIMEOUT",
11
- 409: "CONFLICT",
12
- 410: "GONE",
13
- 411: "LENGTH_REQUIRED",
14
- 412: "PRECONDITION_FAILED",
15
- 413: "PAYLOAD_TOO_LARGE",
16
- 414: "URI_TOO_LONG",
17
- 415: "UNSUPPORTED_MEDIA_TYPE",
18
- 416: "RANGE_NOT_SATISFIABLE",
19
- 417: "EXPECTATION_FAILED",
20
- 418: "IM_A_TEAPOT",
21
- 421: "MISDIRECTED_REQUEST",
22
- 422: "UNPROCESSABLE_ENTITY",
23
- 423: "LOCKED",
24
- 424: "FAILED_DEPENDENCY",
25
- 425: "TOO_EARLY_",
26
- 426: "UPGRAGE_REQUIRED",
27
- 428: "PRECONDITION_REQUIRED",
28
- 429: "TOO_MANY_REQUESTS",
29
- 431: "REQUEST_HEADER_FIELDS_TOO_LARGE",
30
- 451: "UNAVAILABLE_FOR_LEGAL_REASONS"
31
- });
32
-
33
- export class HttpClientError<T extends keyof typeof httpClientErrors = keyof typeof httpClientErrors, K = any> extends Error {
34
- public readonly httpCode: T;
35
- public readonly message: (typeof httpClientErrors)[T] | string;
36
- public readonly data: K;
37
-
38
- constructor({ httpCode, data, message }: { httpCode: T; data: K; message?: string }) {
39
- super();
40
-
41
- this.httpCode = httpCode;
42
- this.message = !message?.trim() ? httpClientErrors[httpCode] : message.trim();
43
- this.data = data;
44
- }
45
- }
1
+ export const httpClientErrors = Object.freeze({
2
+ 400: "BAD_REQUEST",
3
+ 401: "UNAUTHORIZED",
4
+ 402: "PAYMENT_REQUIRED",
5
+ 403: "FORBIDDEN",
6
+ 404: "NOT_FOUND",
7
+ 405: "METHOD_NOT_ALLOWED",
8
+ 406: "NOT_ACCEPTABLE",
9
+ 407: "PROXY_AUTHENCATION_REQUIRED",
10
+ 408: "REQUEST_TIMEOUT",
11
+ 409: "CONFLICT",
12
+ 410: "GONE",
13
+ 411: "LENGTH_REQUIRED",
14
+ 412: "PRECONDITION_FAILED",
15
+ 413: "PAYLOAD_TOO_LARGE",
16
+ 414: "URI_TOO_LONG",
17
+ 415: "UNSUPPORTED_MEDIA_TYPE",
18
+ 416: "RANGE_NOT_SATISFIABLE",
19
+ 417: "EXPECTATION_FAILED",
20
+ 418: "IM_A_TEAPOT",
21
+ 421: "MISDIRECTED_REQUEST",
22
+ 422: "UNPROCESSABLE_ENTITY",
23
+ 423: "LOCKED",
24
+ 424: "FAILED_DEPENDENCY",
25
+ 425: "TOO_EARLY_",
26
+ 426: "UPGRAGE_REQUIRED",
27
+ 428: "PRECONDITION_REQUIRED",
28
+ 429: "TOO_MANY_REQUESTS",
29
+ 431: "REQUEST_HEADER_FIELDS_TOO_LARGE",
30
+ 451: "UNAVAILABLE_FOR_LEGAL_REASONS"
31
+ });
32
+
33
+ export class HttpClientError<T extends keyof typeof httpClientErrors = keyof typeof httpClientErrors, K = any> extends Error {
34
+ public readonly httpCode: T;
35
+ public readonly message: (typeof httpClientErrors)[T] | string;
36
+ public readonly data: K;
37
+
38
+ constructor({ httpCode, data, message }: { httpCode: T; data: K; message?: string }) {
39
+ super();
40
+
41
+ this.httpCode = httpCode;
42
+ this.message = !message?.trim() ? httpClientErrors[httpCode] : message.trim();
43
+ this.data = data;
44
+ }
45
+ }
package/src/http/index.ts CHANGED
@@ -1,61 +1,61 @@
1
- import { HttpClientError } from "./clientError";
2
- import { HttpServerError } from "./serverError";
3
-
4
- export type THttpMethods = {
5
- GET: "GET";
6
- HEAD: "HEAD";
7
- POST: "POST";
8
- PUT: "PUT";
9
- DELETE: "DELETE";
10
- CONNECT: "CONNECT";
11
- OPTIONS: "OPTIONS";
12
- TRACE: "TRACE";
13
- PATCH: "PATCH";
14
- };
15
-
16
- export const jsonErrorInfer = (data: any, headers: Headers = new Headers()) => {
17
- headers.set("Content-Type", "application/json");
18
-
19
- if (data instanceof HttpClientError || data instanceof HttpServerError) {
20
- return new Response(JSON.stringify(data), {
21
- status: data.httpCode,
22
- statusText: data.message,
23
- headers: headers
24
- });
25
- }
26
-
27
- return new Response(
28
- JSON.stringify(
29
- (() => {
30
- switch (typeof data) {
31
- case "object":
32
- return !(data instanceof Error)
33
- ? data
34
- : {
35
- message: data.message,
36
- code: data.name,
37
- cause: data.cause
38
- };
39
- case "string":
40
- return {
41
- message: data
42
- };
43
- case "number":
44
- return {
45
- code: data
46
- };
47
- default:
48
- return undefined;
49
- }
50
- })()
51
- ),
52
- {
53
- status: 500,
54
- statusText: "INTERNAL SERVER ERROR",
55
- headers: headers
56
- }
57
- );
58
- };
59
-
60
- export * from "./clientError";
61
- export * from "./serverError";
1
+ import { HttpClientError } from "./clientError";
2
+ import { HttpServerError } from "./serverError";
3
+
4
+ export type THttpMethods = {
5
+ GET: "GET";
6
+ HEAD: "HEAD";
7
+ POST: "POST";
8
+ PUT: "PUT";
9
+ DELETE: "DELETE";
10
+ CONNECT: "CONNECT";
11
+ OPTIONS: "OPTIONS";
12
+ TRACE: "TRACE";
13
+ PATCH: "PATCH";
14
+ };
15
+
16
+ export const jsonErrorInfer = (data: any, headers: Headers = new Headers()) => {
17
+ headers.set("Content-Type", "application/json");
18
+
19
+ if (data instanceof HttpClientError || data instanceof HttpServerError) {
20
+ return new Response(JSON.stringify(data), {
21
+ status: data.httpCode,
22
+ statusText: data.message,
23
+ headers: headers
24
+ });
25
+ }
26
+
27
+ return new Response(
28
+ JSON.stringify(
29
+ (() => {
30
+ switch (typeof data) {
31
+ case "object":
32
+ return !(data instanceof Error)
33
+ ? data
34
+ : {
35
+ message: data.message,
36
+ code: data.name,
37
+ cause: data.cause
38
+ };
39
+ case "string":
40
+ return {
41
+ message: data
42
+ };
43
+ case "number":
44
+ return {
45
+ code: data
46
+ };
47
+ default:
48
+ return undefined;
49
+ }
50
+ })()
51
+ ),
52
+ {
53
+ status: 500,
54
+ statusText: "INTERNAL SERVER ERROR",
55
+ headers: headers
56
+ }
57
+ );
58
+ };
59
+
60
+ export * from "./clientError";
61
+ export * from "./serverError";
@@ -1,38 +1,38 @@
1
- export const httpServerErrors = Object.freeze({
2
- 500: "INTERNAL_SERVER_ERROR",
3
- 501: "NOT_IMPLEMENTED",
4
- 502: "BAD_GATEWAY",
5
- 503: "SERVICE_UNAVAILABLE",
6
- 504: "GATEWAY_TIMEOUT",
7
- 505: "HTTP_VERSION_NOT_SUPPORTED",
8
- 506: "VARIANT_ALSO_NEGOTIATES",
9
- 507: "INSUFFICIENT_STORAGE",
10
- 508: "LOOP_DETECTED",
11
- 510: "NOT_EXTENDED",
12
- 511: "NETWORK_AUTHENTICATION_REQUIRED"
13
- });
14
-
15
- export class HttpServerError<
16
- T extends keyof typeof httpServerErrors = keyof typeof httpServerErrors,
17
- K = any
18
- > extends Error {
19
- public readonly httpCode: T;
20
- public readonly message: typeof httpServerErrors[T] | string;
21
- public readonly data: K;
22
-
23
- constructor({
24
- httpCode,
25
- data,
26
- message
27
- }: {
28
- httpCode: T;
29
- data: K;
30
- message?: string;
31
- }) {
32
- super();
33
-
34
- this.httpCode = httpCode;
35
- this.message = !message?.trim() ? httpServerErrors[httpCode] : message.trim();
36
- this.data = data;
37
- }
38
- }
1
+ export const httpServerErrors = Object.freeze({
2
+ 500: "INTERNAL_SERVER_ERROR",
3
+ 501: "NOT_IMPLEMENTED",
4
+ 502: "BAD_GATEWAY",
5
+ 503: "SERVICE_UNAVAILABLE",
6
+ 504: "GATEWAY_TIMEOUT",
7
+ 505: "HTTP_VERSION_NOT_SUPPORTED",
8
+ 506: "VARIANT_ALSO_NEGOTIATES",
9
+ 507: "INSUFFICIENT_STORAGE",
10
+ 508: "LOOP_DETECTED",
11
+ 510: "NOT_EXTENDED",
12
+ 511: "NETWORK_AUTHENTICATION_REQUIRED"
13
+ });
14
+
15
+ export class HttpServerError<
16
+ T extends keyof typeof httpServerErrors = keyof typeof httpServerErrors,
17
+ K = any
18
+ > extends Error {
19
+ public readonly httpCode: T;
20
+ public readonly message: typeof httpServerErrors[T] | string;
21
+ public readonly data: K;
22
+
23
+ constructor({
24
+ httpCode,
25
+ data,
26
+ message
27
+ }: {
28
+ httpCode: T;
29
+ data: K;
30
+ message?: string;
31
+ }) {
32
+ super();
33
+
34
+ this.httpCode = httpCode;
35
+ this.message = !message?.trim() ? httpServerErrors[httpCode] : message.trim();
36
+ this.data = data;
37
+ }
38
+ }
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
- import "reflect-metadata";
2
-
3
- export * from "./interfaces";
4
- export * from "./hooks";
5
- export * from "./decorators";
6
- export * from "./http";
1
+ import "reflect-metadata";
2
+
3
+ export * from "./interfaces";
4
+ export * from "./hooks";
5
+ export * from "./decorators";
6
+ export * from "./http";
@@ -1 +1 @@
1
- export interface IController<T = any> {}
1
+ export interface IController<T = any> {}
@@ -1,3 +1,3 @@
1
- export interface IDispatcher<T = any> {
2
- execute(...args: any[]): T;
3
- }
1
+ export interface IDispatcher<T = any> {
2
+ execute(...args: any[]): T;
3
+ }
@@ -1,3 +1,3 @@
1
- export interface IGuard {
2
- enforce(...args: any[]): boolean | Promise<boolean>;
3
- }
1
+ export interface IGuard {
2
+ enforce(...args: any[]): boolean | Promise<boolean>;
3
+ }
@@ -1,5 +1,5 @@
1
- export type { IGuard } from "./guard";
2
- export type { IMiddleware } from "./middleware";
3
- export type { IController } from "./controller";
4
- export type { IDispatcher } from "./dispatcher";
5
- export type { IModule } from "./module";
1
+ export type { IGuard } from "./guard";
2
+ export type { IMiddleware } from "./middleware";
3
+ export type { IController } from "./controller";
4
+ export type { IDispatcher } from "./dispatcher";
5
+ export type { IModule } from "./module";
@@ -1,3 +1,3 @@
1
- export interface IMiddleware<T = any> {
2
- enforce(...args: any[]): T;
3
- }
1
+ export interface IMiddleware<T = any> {
2
+ enforce(...args: any[]): T;
3
+ }
@@ -1 +1 @@
1
- export interface IModule<T = any> {}
1
+ export interface IModule<T = any> {}
package/test.http CHANGED
@@ -1,31 +1,31 @@
1
- @baseUrl = localhost:3000
2
-
3
-
4
- ### Send test GET method
5
- GET http://{{baseUrl}}/test/abc/23234
6
-
7
- ### Send test POST method
8
- POST http://{{baseUrl}}/test/abc/123/provider/23234?options[page]=1&options[limit]=6&options[sort][metadata.latestReviewAt]=desc&options[sort][info.searchCount]=desc&options[sort][createdAt]=desc&populate[0]=__headquarters&populate[1]=__logoMedia HTTP/1.1
9
- content-type: application/json
10
-
11
- {
12
- "data": {
13
- "age": 2,
14
- "name": "sample",
15
- "time": "Wed, 21 Oct 2015 18:27:50 GMT"
16
- }
17
- }
18
-
19
- ### Send test PUT method
20
- PUT http://{{baseUrl}}/test
21
- Content-Type: "application/json"
22
-
23
- ### Send test PATCH method
24
- PATCH http://{{baseUrl}}/test/abc/23
25
- Content-Type: "application/json"
26
-
27
- ### Send test DELETE method
28
- DELETE http://{{baseUrl}}/test
29
-
30
- ### Send test OPTIONS method
31
- OPTIONS http://{{baseUrl}}/test
1
+ @baseUrl = localhost:3000
2
+
3
+
4
+ ### Send test GET method
5
+ GET http://{{baseUrl}}/test/abc/23234
6
+
7
+ ### Send test POST method
8
+ POST http://{{baseUrl}}/test/abc/123/provider/23234?options[page]=1&options[limit]=6&options[sort][metadata.latestReviewAt]=desc&options[sort][info.searchCount]=desc&options[sort][createdAt]=desc&populate[0]=__headquarters&populate[1]=__logoMedia HTTP/1.1
9
+ content-type: application/json
10
+
11
+ {
12
+ "data": {
13
+ "age": 2,
14
+ "name": "sample",
15
+ "time": "Wed, 21 Oct 2015 18:27:50 GMT"
16
+ }
17
+ }
18
+
19
+ ### Send test PUT method
20
+ PUT http://{{baseUrl}}/test
21
+ Content-Type: "application/json"
22
+
23
+ ### Send test PATCH method
24
+ PATCH http://{{baseUrl}}/test/abc/23
25
+ Content-Type: "application/json"
26
+
27
+ ### Send test DELETE method
28
+ DELETE http://{{baseUrl}}/test
29
+
30
+ ### Send test OPTIONS method
31
+ OPTIONS http://{{baseUrl}}/test