@bool-ts/core 1.7.17 → 1.8.0

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 (83) hide show
  1. package/.prettierrc +1 -1
  2. package/__test/controller.ts +1 -1
  3. package/__test/index.ts +4 -1
  4. package/__test/module.ts +3 -1
  5. package/__test/tsconfig.json +109 -0
  6. package/__test/webSocket.ts +37 -0
  7. package/__test/webSocketClient.ts +23 -0
  8. package/dist/decorators/controller.d.ts +3 -3
  9. package/dist/decorators/controller.js +1 -2
  10. package/dist/decorators/dispatcher.d.ts +1 -1
  11. package/dist/decorators/http.d.ts +12 -12
  12. package/dist/decorators/http.js +1 -1
  13. package/dist/decorators/index.d.ts +5 -0
  14. package/dist/decorators/index.js +3 -0
  15. package/dist/decorators/module.d.ts +3 -1
  16. package/dist/decorators/module.js +9 -2
  17. package/dist/decorators/webSocket.d.ts +25 -0
  18. package/dist/decorators/webSocket.js +40 -0
  19. package/dist/decorators/webSocketArguments.d.ts +22 -0
  20. package/dist/decorators/webSocketArguments.js +49 -0
  21. package/dist/decorators/webSocketEvent.d.ts +15 -0
  22. package/dist/decorators/webSocketEvent.js +24 -0
  23. package/dist/decorators/zodSchema.js +3 -3
  24. package/dist/entities/{route.d.ts → httpRoute.d.ts} +12 -12
  25. package/dist/entities/{route.js → httpRoute.js} +27 -25
  26. package/dist/entities/httpRouter.d.ts +10 -0
  27. package/dist/entities/{router.js → httpRouter.js} +7 -5
  28. package/dist/entities/{routerGroup.d.ts → httpRouterGroup.d.ts} +4 -4
  29. package/dist/entities/{routerGroup.js → httpRouterGroup.js} +1 -1
  30. package/dist/entities/index.d.ts +7 -4
  31. package/dist/entities/index.js +6 -3
  32. package/dist/entities/webSocketRoute.d.ts +10 -0
  33. package/dist/entities/webSocketRoute.js +15 -0
  34. package/dist/entities/webSocketRouter.d.ts +31 -0
  35. package/dist/entities/webSocketRouter.js +54 -0
  36. package/dist/entities/webSocketRouterGroup.d.ts +25 -0
  37. package/dist/entities/webSocketRouterGroup.js +51 -0
  38. package/dist/hooks/factory.d.ts +0 -39
  39. package/dist/hooks/factory.js +398 -63
  40. package/dist/hooks/injector.js +2 -2
  41. package/dist/index.d.ts +1 -1
  42. package/dist/interfaces/index.d.ts +1 -0
  43. package/dist/interfaces/webSocket.d.ts +2 -0
  44. package/dist/interfaces/webSocket.js +1 -0
  45. package/dist/keys/index.d.ts +10 -1
  46. package/dist/keys/index.js +21 -12
  47. package/dist/ultils/colors.d.ts +30 -0
  48. package/dist/ultils/colors.js +41 -0
  49. package/dist/ultils/index.d.ts +2 -0
  50. package/dist/ultils/index.js +2 -0
  51. package/dist/ultils/socket.d.ts +1 -0
  52. package/dist/ultils/socket.js +7 -0
  53. package/package.json +7 -7
  54. package/src/decorators/controller.ts +5 -4
  55. package/src/decorators/dispatcher.ts +2 -1
  56. package/src/decorators/guard.ts +1 -0
  57. package/src/decorators/http.ts +3 -3
  58. package/src/decorators/index.ts +10 -0
  59. package/src/decorators/middleware.ts +1 -0
  60. package/src/decorators/module.ts +14 -3
  61. package/src/decorators/webSocket.ts +81 -0
  62. package/src/decorators/webSocketArguments.ts +144 -0
  63. package/src/decorators/webSocketEvent.ts +56 -0
  64. package/src/decorators/zodSchema.ts +5 -3
  65. package/src/entities/{route.ts → httpRoute.ts} +71 -57
  66. package/src/entities/{router.ts → httpRouter.ts} +8 -6
  67. package/src/entities/{routerGroup.ts → httpRouterGroup.ts} +4 -4
  68. package/src/entities/index.ts +7 -4
  69. package/src/entities/webSocketRoute.ts +27 -0
  70. package/src/entities/webSocketRouter.ts +64 -0
  71. package/src/entities/webSocketRouterGroup.ts +64 -0
  72. package/src/hooks/factory.ts +622 -95
  73. package/src/hooks/injector.ts +2 -2
  74. package/src/index.ts +1 -1
  75. package/src/interfaces/index.ts +1 -0
  76. package/src/interfaces/webSocket.ts +1 -0
  77. package/src/keys/index.ts +22 -12
  78. package/src/ultils/colors.ts +56 -0
  79. package/src/ultils/index.ts +3 -1
  80. package/src/ultils/socket.ts +9 -0
  81. package/test.ts +0 -0
  82. package/tsconfig.json +3 -2
  83. package/dist/entities/router.d.ts +0 -10
@@ -1,5 +1,5 @@
1
1
  import "reflect-metadata";
2
- import { controllerKey, dispatcherKey, guardKey, injectableKey, injectKey, middlewareKey } from "../keys";
2
+ import { controllerKey, dispatcherKey, guardKey, injectableKey, injectKey, middlewareKey, webSocketKey } from "../keys";
3
3
 
4
4
  type TDefinition<T = any> = { new (...args: any[]): T } | string | symbol;
5
5
 
@@ -27,7 +27,7 @@ export class Injector implements IInjector {
27
27
  const ownMetadataKeys = Reflect.getMetadataKeys(definition);
28
28
 
29
29
  if (
30
- ![injectableKey, controllerKey, middlewareKey, guardKey, dispatcherKey].some((value) =>
30
+ ![injectableKey, controllerKey, middlewareKey, guardKey, dispatcherKey, webSocketKey].some((value) =>
31
31
  ownMetadataKeys.includes(value)
32
32
  )
33
33
  ) {
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import "reflect-metadata";
2
2
 
3
- export type { TRouteModel } from "./entities";
3
+ export type { THttpRouteModel } from "./entities";
4
4
 
5
5
  export * from "./decorators";
6
6
  export * from "./hooks";
@@ -4,3 +4,4 @@ export type { IDispatcher } from "./dispatcher";
4
4
  export type { IGuard } from "./guard";
5
5
  export type { IMiddleware } from "./middleware";
6
6
  export type { IModule } from "./module";
7
+ export type { IWebSocket } from "./webSocket";
@@ -0,0 +1 @@
1
+ export interface IWebSocket<T = any> {}
package/src/keys/index.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export const argumentsKey = Symbol("__bool:arguments__");
2
+ export const webSocketEventArgumentsKey = Symbol("__bool:webSocketEventArguments__");
2
3
  export const configKey = Symbol("__bool:config__");
3
4
  export const controllerKey = Symbol("__bool:controller__");
4
5
  export const dispatcherKey = Symbol("__bool:dispatcher__");
@@ -8,16 +9,25 @@ export const injectKey = Symbol("__bool:inject__");
8
9
  export const injectableKey = Symbol("__bool:injectable__");
9
10
  export const middlewareKey = Symbol("__bool:middleware__");
10
11
  export const moduleKey = Symbol("__bool:module__");
11
- export const controllerRouteZodSchemaKey = Symbol("__bool:controller.route.zodSchema__");
12
+ export const zodSchemaKey = Symbol("__bool:zodSchema__");
13
+ export const webSocketKey = Symbol("__bool:webSocket__");
14
+ export const webSocketEventKey = Symbol("__bool:webSocket:event__");
12
15
 
13
- export const requestHeadersArgsKey = Symbol("__bool:arguments:requestHeaders__");
14
- export const requestHeaderArgsKey = Symbol("__bool:arguments:requestHeader__");
15
- export const requestBodyArgsKey = Symbol("__bool:arguments:requestBody__");
16
- export const paramsArgsKey = Symbol("__bool:arguments:params__");
17
- export const paramArgsKey = Symbol("__bool:arguments:param__");
18
- export const queryArgsKey = Symbol("__bool:arguments:query__");
19
- export const requestArgsKey = Symbol("__bool:arguments:request__");
20
- export const responseHeadersArgsKey = Symbol("__bool:arguments:responseHeaders__");
21
- export const contextArgsKey = Symbol("__bool:arguments:context__");
22
- export const routeModelArgsKey = Symbol("__bool:arguments:routeModel__");
23
- export const responseBodyArgsKey = Symbol("__bool:arguments:responseBody__");
16
+ export const webSocketServerArgsKey = Symbol("__bool:webSocketArguments:server__");
17
+ export const webSocketConnectionArgsKey = Symbol("__bool:webSocketArguments:connection__");
18
+ export const webSocketMessageArgsKey = Symbol("__bool:webSocketArguments:message__");
19
+ export const webSocketCloseCodeArgsKey = Symbol("__bool:webSocketArguments:closeCode__");
20
+ export const webSocketCloseReasonArgsKey = Symbol("__bool:webSocketArguments:closeReason__");
21
+
22
+ export const httpServerArgsKey = Symbol("__bool:httpArguments:server__");
23
+ export const requestHeadersArgsKey = Symbol("__bool:httpArguments:requestHeaders__");
24
+ export const requestHeaderArgsKey = Symbol("__bool:httpArguments:requestHeader__");
25
+ export const requestBodyArgsKey = Symbol("__bool:httpArguments:requestBody__");
26
+ export const paramsArgsKey = Symbol("__bool:httpArguments:params__");
27
+ export const paramArgsKey = Symbol("__bool:httpArguments:param__");
28
+ export const queryArgsKey = Symbol("__bool:httpArguments:query__");
29
+ export const requestArgsKey = Symbol("__bool:httpArguments:request__");
30
+ export const responseHeadersArgsKey = Symbol("__bool:httpArguments:responseHeaders__");
31
+ export const contextArgsKey = Symbol("__bool:httpArguments:context__");
32
+ export const routeModelArgsKey = Symbol("__bool:httpArguments:routeModel__");
33
+ export const responseBodyArgsKey = Symbol("__bool:httpArguments:responseBody__");
@@ -0,0 +1,56 @@
1
+ type AnsiOptions = {
2
+ color?: keyof typeof ansiColors;
3
+ backgroundColor?: keyof typeof backgroundColors;
4
+ bold?: boolean;
5
+ underline?: boolean;
6
+ };
7
+
8
+ const ansiColors = Object.freeze({
9
+ black: 30,
10
+ red: 31,
11
+ green: 32,
12
+ yellow: 33,
13
+ blue: 34,
14
+ magenta: 35,
15
+ cyan: 36,
16
+ white: 37,
17
+ gray: 90
18
+ });
19
+
20
+ const backgroundColors = Object.freeze({
21
+ black: 40,
22
+ red: 41,
23
+ green: 42,
24
+ yellow: 43,
25
+ blue: 44,
26
+ magenta: 45,
27
+ cyan: 46,
28
+ white: 47,
29
+ gray: 100
30
+ });
31
+
32
+ export const ansiText = (text: string, options: AnsiOptions = {}) => {
33
+ const { color, backgroundColor, bold, underline } = options;
34
+
35
+ let ansiCode = "";
36
+
37
+ if (bold) {
38
+ ansiCode += "\x1b[1m"; // Mã ANSI cho in đậm
39
+ }
40
+
41
+ if (underline) {
42
+ ansiCode += "\x1b[4m"; // Mã ANSI cho gạch chân
43
+ }
44
+
45
+ if (color && ansiColors[color]) {
46
+ ansiCode += `\x1b[${ansiColors[color]}m`;
47
+ }
48
+
49
+ // Màu nền
50
+ if (backgroundColor && backgroundColors[backgroundColor]) {
51
+ ansiCode += `\x1b[${backgroundColors[backgroundColor]}m`;
52
+ }
53
+
54
+ // Kết quả với reset
55
+ return `${ansiCode}${text}\x1b[0m`;
56
+ };
@@ -1 +1,3 @@
1
- export * from "./asyncFunction";
1
+ export * from "./asyncFunction";
2
+ export * from "./colors";
3
+ export * from "./socket";
@@ -0,0 +1,9 @@
1
+ export const isWebSocketUpgrade = (request: Request): boolean => {
2
+ const headers = request.headers;
3
+
4
+ const method = request.method;
5
+ const upgrade = headers.get("upgrade")?.toLowerCase() || "";
6
+ const connection = headers.get("connection")?.toLowerCase() || "";
7
+
8
+ return method === "GET" && upgrade?.toLowerCase() === "websocket" && connection?.toLowerCase().includes("upgrade");
9
+ };
package/test.ts ADDED
File without changes
package/tsconfig.json CHANGED
@@ -16,7 +16,7 @@
16
16
  ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
17
17
  // "jsx": "preserve", /* Specify what JSX code is generated. */
18
18
  "experimentalDecorators": true /* Enable experimental support for legacy experimental decorators. */,
19
- "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */,
19
+ "emitDecoratorMetadata": false /* Emit design-type metadata for decorated declarations in source files. */,
20
20
  // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
21
21
  // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
22
22
  // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
@@ -101,7 +101,8 @@
101
101
  // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
102
102
  /* Completeness */
103
103
  // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
104
- "skipLibCheck": true /* Skip type checking all .d.ts files. */
104
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */,
105
+ "useDefineForClassFields": true
105
106
  },
106
107
  "include": ["./src/**/*.ts"],
107
108
  "exclude": ["./__test/**/*.ts"]
@@ -1,10 +0,0 @@
1
- import Route from "./route";
2
- export declare class Router {
3
- readonly alias: string;
4
- private _routes;
5
- constructor(alias: string);
6
- route(alias: string): Route;
7
- private _thinAlias;
8
- get routes(): Map<string, Route>;
9
- }
10
- export default Router;