@bool-ts/core 1.9.0 → 1.9.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 (42) hide show
  1. package/__test/_constants.ts +1 -0
  2. package/__test/container.ts +28 -0
  3. package/__test/controller.ts +1 -1
  4. package/__test/{module.ts → firstModule.ts} +4 -6
  5. package/__test/index.ts +2 -4
  6. package/__test/secondModule.ts +29 -0
  7. package/__test/tsconfig.json +1 -1
  8. package/__test/webSocket.ts +1 -1
  9. package/dist/decorators/arguments.d.ts +6 -1
  10. package/dist/decorators/container.d.ts +29 -0
  11. package/dist/decorators/http.d.ts +2 -0
  12. package/dist/decorators/index.d.ts +4 -2
  13. package/dist/decorators/module.d.ts +6 -2
  14. package/dist/decorators/webSocket.d.ts +2 -0
  15. package/dist/entities/httpRoute.d.ts +6 -0
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js +5 -5
  18. package/dist/interfaces/context.d.ts +8 -2
  19. package/dist/interfaces/index.d.ts +1 -1
  20. package/dist/keys/index.d.ts +3 -0
  21. package/dist/producers/context.d.ts +13 -0
  22. package/dist/{hooks → producers}/factory.d.ts +5 -2
  23. package/dist/{hooks → producers}/injector.d.ts +7 -1
  24. package/package.json +3 -3
  25. package/src/decorators/arguments.ts +126 -77
  26. package/src/decorators/container.ts +94 -0
  27. package/src/decorators/controller.ts +1 -1
  28. package/src/decorators/http.ts +9 -2
  29. package/src/decorators/index.ts +4 -1
  30. package/src/decorators/module.ts +27 -4
  31. package/src/decorators/webSocket.ts +6 -2
  32. package/src/entities/httpRoute.ts +2 -0
  33. package/src/index.ts +1 -1
  34. package/src/interfaces/context.ts +9 -2
  35. package/src/interfaces/index.ts +1 -1
  36. package/src/keys/index.ts +3 -0
  37. package/src/producers/context.ts +63 -0
  38. package/src/producers/factory.ts +2013 -0
  39. package/src/{hooks → producers}/injector.ts +41 -6
  40. package/src/hooks/factory.ts +0 -1701
  41. /package/dist/{hooks → producers}/index.d.ts +0 -0
  42. /package/src/{hooks → producers}/index.ts +0 -0
@@ -0,0 +1 @@
1
+ export const mongodbKey = Symbol.for("mongo");
@@ -0,0 +1,28 @@
1
+ import { Container } from "@dist";
2
+ import { mongodbKey } from "_constants";
3
+ import { FirstModule } from "firstModule";
4
+ import { SecondModule } from "secondModule";
5
+ import { FirstGuard } from "./firstGuard";
6
+ import { FirstMiddleware } from "./firstMiddleware";
7
+ import { TestRepository } from "./repository";
8
+ import { SecondGuard } from "./secondGuard";
9
+ import { SecondMiddleware } from "./secondMiddleware";
10
+ import { TestService } from "./service";
11
+
12
+ @Container<{
13
+ mongodb: string;
14
+ }>({
15
+ config: {
16
+ mongodb: "123"
17
+ },
18
+ loaders: {
19
+ mongodb: ({ config }) => {
20
+ return [mongodbKey, { hehe: "435345" }];
21
+ }
22
+ },
23
+ modules: [FirstModule, SecondModule],
24
+ middlewares: [FirstMiddleware, SecondMiddleware],
25
+ guards: [FirstGuard, SecondGuard],
26
+ dependencies: [TestService, TestRepository]
27
+ })
28
+ export class AppContainer {}
@@ -52,7 +52,7 @@ const headersSchema = Zod.object({
52
52
  @Controller("test")
53
53
  export class TestController {
54
54
  constructor(
55
- @Inject(Symbol.for("etst")) private readonly testInject: any,
55
+ @Inject(Symbol.for("mongo")) private readonly testInject: any,
56
56
  @Inject(TestService) private readonly testService: IService
57
57
  ) {
58
58
  console.log("testInject", testInject);
@@ -13,11 +13,9 @@ import { TestWebSocket } from "./webSocket";
13
13
  mongodb: string;
14
14
  }>({
15
15
  config: {
16
- mongodb: "123"
17
- },
18
- loaders: {
19
- mongodb: ({ config }) => {
20
- return [Symbol.for("etst"), { hehe: "435345" }];
16
+ key: Symbol("firstModuleConfig"),
17
+ value: {
18
+ mongodb: "123"
21
19
  }
22
20
  },
23
21
  middlewares: [FirstMiddleware, SecondMiddleware],
@@ -27,4 +25,4 @@ import { TestWebSocket } from "./webSocket";
27
25
  dependencies: [TestService, TestRepository],
28
26
  webSockets: [TestWebSocket]
29
27
  })
30
- export class TestModule {}
28
+ export class FirstModule {}
package/__test/index.ts CHANGED
@@ -1,9 +1,7 @@
1
- import "reflect-metadata";
2
-
3
1
  import { BoolFactory } from "@dist";
4
- import { TestModule } from "./module";
2
+ import { AppContainer } from "container";
5
3
 
6
- BoolFactory(TestModule, {
4
+ BoolFactory(AppContainer, {
7
5
  port: 3000,
8
6
  log: {
9
7
  methods: ["GET", "POST"]
@@ -0,0 +1,29 @@
1
+ import { Module } from "@dist";
2
+ import { TestController } from "./controller";
3
+ import { CustomDispatcher } from "./dispatcher";
4
+ import { FirstGuard } from "./firstGuard";
5
+ import { FirstMiddleware } from "./firstMiddleware";
6
+ import { TestRepository } from "./repository";
7
+ import { SecondGuard } from "./secondGuard";
8
+ import { SecondMiddleware } from "./secondMiddleware";
9
+ import { TestService } from "./service";
10
+ import { TestWebSocket } from "./webSocket";
11
+
12
+ @Module<{
13
+ mongodb: string;
14
+ }>({
15
+ prefix: "/second-module",
16
+ config: {
17
+ key: Symbol.for("secondModuleConfig"),
18
+ value: {
19
+ mongodb: "123"
20
+ }
21
+ },
22
+ middlewares: [FirstMiddleware, SecondMiddleware],
23
+ guards: [FirstGuard, SecondGuard],
24
+ dispatchers: [CustomDispatcher],
25
+ controllers: [TestController],
26
+ dependencies: [TestService, TestRepository],
27
+ webSockets: [TestWebSocket]
28
+ })
29
+ export class SecondModule {}
@@ -31,7 +31,7 @@
31
31
  "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */,
32
32
  "paths": {
33
33
  "@src": ["../src"],
34
- "@dist": ["../dist"]
34
+ "@dist": ["../src"]
35
35
  } /* Specify a set of entries that re-map imports to additional lookup locations. */,
36
36
  "rootDirs": [
37
37
  "./",
@@ -1,5 +1,5 @@
1
1
  import type { ServerWebSocket } from "bun";
2
- import type { TWebSocketUpgradeData } from "./decorators/webSocket";
2
+ import type { TWebSocketUpgradeData } from "../dist/decorators/webSocket";
3
3
 
4
4
  import {
5
5
  WebSocket,
@@ -1,5 +1,5 @@
1
1
  import * as Zod from "zod";
2
- import { contextArgsKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestBodyArgsKey, requestHeaderArgsKey, requestHeadersArgsKey, responseHeadersArgsKey, routeModelArgsKey } from "../keys";
2
+ import { contextArgsKey, httpServerArgsKey, paramArgsKey, paramsArgsKey, queryArgsKey, requestArgsKey, requestBodyArgsKey, requestHeaderArgsKey, requestHeadersArgsKey, responseHeadersArgsKey, routeModelArgsKey } from "../keys";
3
3
  export type TArgumentsMetadata = {
4
4
  index: number;
5
5
  type: typeof requestHeadersArgsKey;
@@ -41,7 +41,11 @@ export type TArgumentsMetadata = {
41
41
  } | {
42
42
  index: number;
43
43
  type: typeof routeModelArgsKey;
44
+ } | {
45
+ index: number;
46
+ type: typeof httpServerArgsKey;
44
47
  };
48
+ export type TArgumentsMetadataCollection = Record<`argumentIndexes.${number}`, TArgumentsMetadata>;
45
49
  export declare const RequestHeaders: (schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
46
50
  export declare const RequestHeader: (key: string, schema?: Zod.Schema) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
47
51
  export declare const RequestBody: (schema?: Zod.Schema, parser?: "arrayBuffer" | "blob" | "formData" | "json" | "text") => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
@@ -52,3 +56,4 @@ export declare const Request: (schema?: Zod.Schema) => (target: Object, methodNa
52
56
  export declare const ResponseHeaders: () => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
53
57
  export declare const Context: (key?: symbol) => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
54
58
  export declare const RouteModel: () => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
59
+ export declare const HttpServer: () => (target: Object, methodName: string | symbol | undefined, parameterIndex: number) => void;
@@ -0,0 +1,29 @@
1
+ import type { IModule } from "../interfaces";
2
+ type TInstances = Array<new (...args: any[]) => any>;
3
+ type TLoaders<TConfig extends {} = {}> = Record<string | symbol, (args: {
4
+ config: TConfig;
5
+ }) => [string | symbol, any] | Promise<[string | symbol, any]>>;
6
+ export type TContainerConfig<TConfig> = TConfig | (() => TConfig | Promise<TConfig>) | Readonly<{
7
+ key: symbol;
8
+ value: TConfig | (() => TConfig | Promise<TConfig>);
9
+ }>;
10
+ export type TContainerOptions<TConfig extends {} = {}> = Partial<{
11
+ config: TContainerConfig<TConfig>;
12
+ modules: TInstances;
13
+ dependencies: TInstances;
14
+ loaders: TLoaders<TConfig>;
15
+ middlewares: TInstances;
16
+ guards: TInstances;
17
+ }> | undefined;
18
+ export type TContainerMetadata<TConfig extends {} = {}> = Partial<{
19
+ modules: TInstances;
20
+ config: TContainerConfig<TConfig>;
21
+ dependencies: TInstances;
22
+ loaders: TLoaders<TConfig>;
23
+ middlewares: TInstances;
24
+ guards: TInstances;
25
+ }> | undefined;
26
+ export declare const Container: <TConfig extends {} = {}>(args?: TContainerOptions<TConfig>) => <T extends {
27
+ new (...args: any[]): IModule;
28
+ }>(target: T) => void;
29
+ export default Container;
@@ -1,8 +1,10 @@
1
+ import type { TArgumentsMetadataCollection } from "./arguments";
1
2
  export type TRoute = {
2
3
  path: string;
3
4
  httpMethod: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS";
4
5
  methodName: string;
5
6
  descriptor: TypedPropertyDescriptor<any>;
7
+ argumentsMetadata: TArgumentsMetadataCollection;
6
8
  };
7
9
  export type THttpMetadata = Array<TRoute>;
8
10
  /**
@@ -1,4 +1,5 @@
1
- export { Context, Param, Params, Query, Request, RequestBody, RequestHeader, RequestHeaders, ResponseHeaders, RouteModel } from "./arguments";
1
+ export { Context, HttpServer, Param, Params, Query, Request, RequestBody, RequestHeader, RequestHeaders, ResponseHeaders, RouteModel } from "./arguments";
2
+ export { Container } from "./container";
2
3
  export { Controller } from "./controller";
3
4
  export { Dispatcher } from "./dispatcher";
4
5
  export { Guard } from "./guard";
@@ -12,11 +13,12 @@ export { WebSocketCloseCode, WebSocketCloseReason, WebSocketConnection, WebSocke
12
13
  export { WebSocketEvent } from "./webSocketEvent";
13
14
  export { ZodSchema } from "./zodSchema";
14
15
  export type { TArgumentsMetadata } from "./arguments";
16
+ export type { TContainerConfig, TContainerMetadata, TContainerOptions } from "./container";
15
17
  export type { TControllerMetadata } from "./controller";
16
18
  export type { TDispatcherMetadata } from "./dispatcher";
17
19
  export type { TGuardMetadata } from "./guard";
18
20
  export type { THttpMetadata } from "./http";
19
21
  export type { TMiddlewareMetadata } from "./middleware";
20
- export type { TModuleMetadata, TModuleOptions } from "./module";
22
+ export type { TModuleConfig, TModuleMetadata, TModuleOptions } from "./module";
21
23
  export type { TWebSocketMetadata } from "./webSocket";
22
24
  export type { TWebSocketEventHandlerMetadata, TWebSocketEventMetadata } from "./webSocketEvent";
@@ -3,8 +3,12 @@ type TInstances = Array<new (...args: any[]) => any>;
3
3
  type TLoaders<TConfig extends {} = {}> = Record<string | symbol, (args: {
4
4
  config: TConfig;
5
5
  }) => [string | symbol, any] | Promise<[string | symbol, any]>>;
6
+ export type TModuleConfig<TConfig> = TConfig | (() => TConfig | Promise<TConfig>) | Readonly<{
7
+ key: symbol;
8
+ value: TConfig | (() => TConfig | Promise<TConfig>);
9
+ }>;
6
10
  export type TModuleOptions<TConfig extends {} = {}> = Partial<{
7
- config: TConfig | (() => TConfig | Promise<TConfig>);
11
+ config: TModuleConfig<TConfig>;
8
12
  prefix: string;
9
13
  dependencies: TInstances;
10
14
  loaders: TLoaders<TConfig>;
@@ -15,7 +19,7 @@ export type TModuleOptions<TConfig extends {} = {}> = Partial<{
15
19
  webSockets: TInstances;
16
20
  }> | undefined;
17
21
  export type TModuleMetadata<TConfig extends {} = {}> = Partial<{
18
- config: TConfig | ((...args: any[]) => TConfig | Promise<TConfig>);
22
+ config: TModuleConfig<TConfig>;
19
23
  prefix: string;
20
24
  dependencies: TInstances;
21
25
  loaders: TLoaders<TConfig>;
@@ -1,10 +1,12 @@
1
1
  import type { IWebSocket } from "../interfaces";
2
+ import type { TArgumentsMetadataCollection } from "./arguments";
2
3
  import type { TWebSocketEventMetadata } from "./webSocketEvent";
3
4
  export type TWebSocketHttpRouteMetadata = {
4
5
  path: string;
5
6
  httpMethod: "GET" | "POST";
6
7
  methodName: symbol;
7
8
  descriptor: PropertyDescriptor;
9
+ argumentsMetadata: TArgumentsMetadataCollection;
8
10
  };
9
11
  export type TWebSocketUpgradeData = {
10
12
  pathname: string;
@@ -1,8 +1,10 @@
1
+ import type { TArgumentsMetadataCollection } from "../decorators/arguments";
1
2
  import type { THttpMethods } from "../http";
2
3
  export type THttpRouteModel<T = unknown> = Readonly<{
3
4
  class: new (...args: Array<any>) => T;
4
5
  funcName: string | symbol;
5
6
  func: (...args: Array<any>) => unknown;
7
+ argumentsMetadata: TArgumentsMetadataCollection;
6
8
  }>;
7
9
  export declare class HttpRoute {
8
10
  static rootPattern: string;
@@ -51,6 +53,7 @@ export declare class HttpRoute {
51
53
  class: new (...args: Array<any>) => unknown;
52
54
  funcName: string | symbol;
53
55
  func: (...args: Array<any>) => unknown;
56
+ argumentsMetadata: TArgumentsMetadataCollection;
54
57
  }>>;
55
58
  /**
56
59
  *
@@ -61,6 +64,7 @@ export declare class HttpRoute {
61
64
  class: new (...args: Array<any>) => unknown;
62
65
  funcName: string | symbol;
63
66
  func: (...args: Array<any>) => unknown;
67
+ argumentsMetadata: TArgumentsMetadataCollection;
64
68
  }>>;
65
69
  /**
66
70
  *
@@ -71,6 +75,7 @@ export declare class HttpRoute {
71
75
  class: new (...args: Array<any>) => unknown;
72
76
  funcName: string | symbol;
73
77
  func: (...args: Array<any>) => unknown;
78
+ argumentsMetadata: TArgumentsMetadataCollection;
74
79
  }>>;
75
80
  /**
76
81
  *
@@ -81,6 +86,7 @@ export declare class HttpRoute {
81
86
  class: new (...args: Array<any>) => unknown;
82
87
  funcName: string | symbol;
83
88
  func: (...args: Array<any>) => unknown;
89
+ argumentsMetadata: TArgumentsMetadataCollection;
84
90
  }>>;
85
91
  /**
86
92
  *
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import "reflect-metadata";
2
2
  export type { THttpRouteModel } from "./entities";
3
3
  export * from "./decorators";
4
- export * from "./hooks";
5
4
  export * from "./http";
6
5
  export * from "./interfaces";
7
6
  export * as Keys from "./keys";
7
+ export * from "./producers";