@vercube/core 0.0.2-beta.0 → 0.0.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.
@@ -9,6 +9,7 @@ export declare class App {
9
9
  private gPluginsRegistry;
10
10
  private gHttpServer;
11
11
  private gStaticRequestHandler;
12
+ private gLogger;
12
13
  /** Holds the initialization status of the application */
13
14
  private fIsInitialized;
14
15
  /** Holds the dependency injection container */
@@ -48,6 +49,14 @@ export declare class App {
48
49
  */
49
50
  listen(): Promise<void>;
50
51
  /**
52
+ * Handles an incoming HTTP request.
53
+ * This method is an adapter for HttpServer.handleRequest method.
54
+ *
55
+ * @param {Request} request - The incoming HTTP request
56
+ * @returns {Promise<Response>} The HTTP response
57
+ */
58
+ fetch(request: Request): Promise<Response>;
59
+ /**
51
60
  * Resolves and initializes the plugins for the application.
52
61
  *
53
62
  * @private
@@ -8,7 +8,7 @@ export declare class DefaultErrorHandlerProvider extends ErrorHandlerProvider {
8
8
  private gLogger;
9
9
  /**
10
10
  * Handles an error that occurred during request processing
11
- *
11
+ *
12
12
  * @param error - The Error object containing error details
13
13
  * @returns Promise<Response> | Response - The response to be sent to the client
14
14
  */
@@ -8,6 +8,10 @@ import { ConfigTypes } from "@vercube/core";
8
8
  * - Processing HTTP responses
9
9
  */
10
10
  export declare class HttpServer {
11
+ /**
12
+ * DI container for resolving dependencies
13
+ */
14
+ private gContainer;
11
15
  /**
12
16
  * Router service for resolving routes
13
17
  */
@@ -17,10 +21,6 @@ export declare class HttpServer {
17
21
  */
18
22
  private gRequestHandler;
19
23
  /**
20
- * Error handler provider for managing error responses
21
- */
22
- private gErrorHandlerProvider;
23
- /**
24
24
  * Static server for serving static files
25
25
  */
26
26
  private gStaticRequestHandler;
@@ -53,5 +53,5 @@ export declare class HttpServer {
53
53
  * @returns {Promise<Response>} The HTTP response
54
54
  * @private
55
55
  */
56
- private handleRequest;
56
+ handleRequest(request: Request): Promise<Response>;
57
57
  }
@@ -23,8 +23,6 @@ export declare class RequestHandler {
23
23
  private gMetadataResolver;
24
24
  /** DI container for resolving dependencies */
25
25
  private gContainer;
26
- /** Provider for handling errors during request processing */
27
- private gErrorHandlerProvider;
28
26
  private gGlobalMiddlewareRegistry;
29
27
  /**
30
28
  * Prepares a route handler by resolving its metadata and middlewares
package/dist/index.cjs CHANGED
@@ -544,8 +544,6 @@ var RequestHandler = class {
544
544
  gMetadataResolver;
545
545
  /** DI container for resolving dependencies */
546
546
  gContainer;
547
- /** Provider for handling errors during request processing */
548
- gErrorHandlerProvider;
549
547
  gGlobalMiddlewareRegistry;
550
548
  /**
551
549
  * Prepares a route handler by resolving its metadata and middlewares
@@ -604,8 +602,8 @@ var RequestHandler = class {
604
602
  methodArgs: args
605
603
  });
606
604
  if (hookResponse instanceof Response) return hookResponse;
607
- } catch (error) {
608
- return this.gErrorHandlerProvider.handleError(error);
605
+ } catch (error_) {
606
+ this.gContainer.get(ErrorHandlerProvider).handleError(error_);
609
607
  }
610
608
  for (const action of actions) {
611
609
  const actionResponse = action.handler(request, fakeResponse);
@@ -621,8 +619,8 @@ var RequestHandler = class {
621
619
  for await (const hook of middlewares?.afterMiddlewares ?? []) try {
622
620
  const hookResponse = await hook.middleware.onResponse?.(request, fakeResponse, handlerResponse);
623
621
  if (hookResponse !== null) fakeResponse = this.processOverrideResponse(hookResponse, fakeResponse);
624
- } catch (error) {
625
- return this.gErrorHandlerProvider.handleError(error);
622
+ } catch (error_) {
623
+ this.gContainer.get(ErrorHandlerProvider).handleError(error_);
626
624
  }
627
625
  const body = fakeResponse?.body ?? JSON.stringify(handlerResponse);
628
626
  return new Response(body, {
@@ -631,7 +629,7 @@ var RequestHandler = class {
631
629
  headers: fakeResponse.headers
632
630
  });
633
631
  } catch (error_) {
634
- return this.gErrorHandlerProvider.handleError(error_);
632
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error_);
635
633
  }
636
634
  }
637
635
  /**
@@ -662,7 +660,6 @@ var RequestHandler = class {
662
660
  };
663
661
  (0, import_decorate.default)([(0, __vercube_di.Inject)(MetadataResolver)], RequestHandler.prototype, "gMetadataResolver", void 0);
664
662
  (0, import_decorate.default)([(0, __vercube_di.Inject)(__vercube_di.Container)], RequestHandler.prototype, "gContainer", void 0);
665
- (0, import_decorate.default)([(0, __vercube_di.Inject)(ErrorHandlerProvider)], RequestHandler.prototype, "gErrorHandlerProvider", void 0);
666
663
  (0, import_decorate.default)([(0, __vercube_di.Inject)(GlobalMiddlewareRegistry)], RequestHandler.prototype, "gGlobalMiddlewareRegistry", void 0);
667
664
 
668
665
  //#endregion
@@ -768,6 +765,10 @@ var StaticRequestHandler = class {
768
765
  * - Processing HTTP responses
769
766
  */
770
767
  var HttpServer = class {
768
+ /**
769
+ * DI container for resolving dependencies
770
+ */
771
+ gContainer;
771
772
  /**
772
773
  * Router service for resolving routes
773
774
  */
@@ -777,10 +778,6 @@ var HttpServer = class {
777
778
  */
778
779
  gRequestHandler;
779
780
  /**
780
- * Error handler provider for managing error responses
781
- */
782
- gErrorHandlerProvider;
783
- /**
784
781
  * Static server for serving static files
785
782
  */
786
783
  gStaticRequestHandler;
@@ -798,10 +795,10 @@ var HttpServer = class {
798
795
  const { port, host } = config.server ?? {};
799
796
  this.fServer = (0, srvx.serve)({
800
797
  bun: { error: (error) => {
801
- return this.gErrorHandlerProvider.handleError(error);
798
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error);
802
799
  } },
803
800
  deno: { onError: (error) => {
804
- return this.gErrorHandlerProvider.handleError(error);
801
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error);
805
802
  } },
806
803
  hostname: host,
807
804
  port,
@@ -841,13 +838,13 @@ var HttpServer = class {
841
838
  }
842
839
  return this.gRequestHandler.handleRequest(request, route);
843
840
  } catch (error) {
844
- return this.gErrorHandlerProvider.handleError(error);
841
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error);
845
842
  }
846
843
  }
847
844
  };
845
+ (0, import_decorate.default)([(0, __vercube_di.Inject)(__vercube_di.Container)], HttpServer.prototype, "gContainer", void 0);
848
846
  (0, import_decorate.default)([(0, __vercube_di.Inject)(Router)], HttpServer.prototype, "gRouter", void 0);
849
847
  (0, import_decorate.default)([(0, __vercube_di.Inject)(RequestHandler)], HttpServer.prototype, "gRequestHandler", void 0);
850
- (0, import_decorate.default)([(0, __vercube_di.Inject)(ErrorHandlerProvider)], HttpServer.prototype, "gErrorHandlerProvider", void 0);
851
848
  (0, import_decorate.default)([(0, __vercube_di.Inject)(StaticRequestHandler)], HttpServer.prototype, "gStaticRequestHandler", void 0);
852
849
 
853
850
  //#endregion
@@ -860,6 +857,7 @@ var App = class {
860
857
  gPluginsRegistry;
861
858
  gHttpServer;
862
859
  gStaticRequestHandler;
860
+ gLogger;
863
861
  /** Holds the initialization status of the application */
864
862
  fIsInitialized = false;
865
863
  /** Holds the dependency injection container */
@@ -913,9 +911,20 @@ var App = class {
913
911
  await this.resolvePlugins();
914
912
  (0, __vercube_di.initializeContainer)(this.container);
915
913
  await this.gHttpServer.listen();
914
+ this.gLogger?.info(`\n${__vercube_logger.colors.green("➜")} App listening on port ${__vercube_logger.colors.bold(this.fConfig.server?.port?.toString() ?? "3000")}`);
916
915
  this.fIsInitialized = true;
917
916
  }
918
917
  /**
918
+ * Handles an incoming HTTP request.
919
+ * This method is an adapter for HttpServer.handleRequest method.
920
+ *
921
+ * @param {Request} request - The incoming HTTP request
922
+ * @returns {Promise<Response>} The HTTP response
923
+ */
924
+ async fetch(request) {
925
+ return this.gHttpServer.handleRequest(request);
926
+ }
927
+ /**
919
928
  * Resolves and initializes the plugins for the application.
920
929
  *
921
930
  * @private
@@ -928,6 +937,7 @@ var App = class {
928
937
  (0, import_decorate.default)([(0, __vercube_di.Inject)(PluginsRegistry)], App.prototype, "gPluginsRegistry", void 0);
929
938
  (0, import_decorate.default)([(0, __vercube_di.Inject)(HttpServer)], App.prototype, "gHttpServer", void 0);
930
939
  (0, import_decorate.default)([(0, __vercube_di.Inject)(StaticRequestHandler)], App.prototype, "gStaticRequestHandler", void 0);
940
+ (0, import_decorate.default)([(0, __vercube_di.InjectOptional)(__vercube_logger.Logger)], App.prototype, "gLogger", void 0);
931
941
 
932
942
  //#endregion
933
943
  //#region packages/logger/dist/Providers/index.mjs
@@ -1073,16 +1083,16 @@ var DefaultErrorHandlerProvider = class extends ErrorHandlerProvider {
1073
1083
  gLogger;
1074
1084
  /**
1075
1085
  * Handles an error that occurred during request processing
1076
- *
1086
+ *
1077
1087
  * @param error - The Error object containing error details
1078
1088
  * @returns Promise<Response> | Response - The response to be sent to the client
1079
1089
  */
1080
1090
  handleError(error) {
1081
- const _internalError = new InternalServerError();
1091
+ const _internalError = new InternalServerError(error?.message ?? "Internal server error");
1082
1092
  const status = error?.status ?? 500;
1083
1093
  if (error instanceof HttpError) return new Response(JSON.stringify({ ...error }, void 0, 2), { status });
1084
1094
  this.gLogger.error(error);
1085
- return new Response(JSON.stringify({ ...error?.cause ?? _internalError.cause }, void 0, 2), { status });
1095
+ return new Response(JSON.stringify({ ...error?.cause ?? _internalError }, void 0, 2), { status });
1086
1096
  }
1087
1097
  };
1088
1098
  (0, import_decorate.default)([(0, __vercube_di.Inject)(__vercube_logger.Logger)], DefaultErrorHandlerProvider.prototype, "gLogger", void 0);
@@ -2643,6 +2653,7 @@ exports.Delete = Delete
2643
2653
  exports.ErrorHandlerProvider = ErrorHandlerProvider
2644
2654
  exports.ForbiddenError = ForbiddenError
2645
2655
  exports.Get = Get
2656
+ exports.GlobalMiddlewareRegistry = GlobalMiddlewareRegistry
2646
2657
  exports.HTTPStatus = HTTPStatus
2647
2658
  exports.Head = Head
2648
2659
  exports.Header = Header
package/dist/index.d.ts CHANGED
@@ -30,6 +30,7 @@ export * from "./Decorators/Hooks/Listen.js";
30
30
  export * from "./Services/Hooks/HooksService.js";
31
31
  export * from "./Services/Plugins/BasePlugin.js";
32
32
  export * from "./Services/Middleware/BaseMiddleware.js";
33
+ export * from "./Services/Middleware/GlobalMiddlewareRegistry.js";
33
34
  export * from "./Services/HttpServer/HttpServer.js";
34
35
  export * from "./Services/Metadata/MetadataResolver.js";
35
36
  export * from "./Services/ErrorHandler/ErrorHandlerProvider.js";
package/dist/index.mjs CHANGED
@@ -4,7 +4,7 @@ import { addRoute, createRouter, findRoute } from "rou3";
4
4
  import { createReadStream } from "node:fs";
5
5
  import { extname, join, normalize } from "node:path";
6
6
  import { stat } from "node:fs/promises";
7
- import { BaseLogger, Logger } from "@vercube/logger";
7
+ import { BaseLogger, Logger, colors } from "@vercube/logger";
8
8
  import { loadConfig } from "c12";
9
9
  import { defu } from "defu";
10
10
 
@@ -514,8 +514,6 @@ var RequestHandler = class {
514
514
  gMetadataResolver;
515
515
  /** DI container for resolving dependencies */
516
516
  gContainer;
517
- /** Provider for handling errors during request processing */
518
- gErrorHandlerProvider;
519
517
  gGlobalMiddlewareRegistry;
520
518
  /**
521
519
  * Prepares a route handler by resolving its metadata and middlewares
@@ -574,8 +572,8 @@ var RequestHandler = class {
574
572
  methodArgs: args
575
573
  });
576
574
  if (hookResponse instanceof Response) return hookResponse;
577
- } catch (error) {
578
- return this.gErrorHandlerProvider.handleError(error);
575
+ } catch (error_) {
576
+ this.gContainer.get(ErrorHandlerProvider).handleError(error_);
579
577
  }
580
578
  for (const action of actions) {
581
579
  const actionResponse = action.handler(request, fakeResponse);
@@ -591,8 +589,8 @@ var RequestHandler = class {
591
589
  for await (const hook of middlewares?.afterMiddlewares ?? []) try {
592
590
  const hookResponse = await hook.middleware.onResponse?.(request, fakeResponse, handlerResponse);
593
591
  if (hookResponse !== null) fakeResponse = this.processOverrideResponse(hookResponse, fakeResponse);
594
- } catch (error) {
595
- return this.gErrorHandlerProvider.handleError(error);
592
+ } catch (error_) {
593
+ this.gContainer.get(ErrorHandlerProvider).handleError(error_);
596
594
  }
597
595
  const body = fakeResponse?.body ?? JSON.stringify(handlerResponse);
598
596
  return new Response(body, {
@@ -601,7 +599,7 @@ var RequestHandler = class {
601
599
  headers: fakeResponse.headers
602
600
  });
603
601
  } catch (error_) {
604
- return this.gErrorHandlerProvider.handleError(error_);
602
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error_);
605
603
  }
606
604
  }
607
605
  /**
@@ -632,7 +630,6 @@ var RequestHandler = class {
632
630
  };
633
631
  __decorate([Inject(MetadataResolver)], RequestHandler.prototype, "gMetadataResolver", void 0);
634
632
  __decorate([Inject(Container)], RequestHandler.prototype, "gContainer", void 0);
635
- __decorate([Inject(ErrorHandlerProvider)], RequestHandler.prototype, "gErrorHandlerProvider", void 0);
636
633
  __decorate([Inject(GlobalMiddlewareRegistry)], RequestHandler.prototype, "gGlobalMiddlewareRegistry", void 0);
637
634
 
638
635
  //#endregion
@@ -738,6 +735,10 @@ var StaticRequestHandler = class {
738
735
  * - Processing HTTP responses
739
736
  */
740
737
  var HttpServer = class {
738
+ /**
739
+ * DI container for resolving dependencies
740
+ */
741
+ gContainer;
741
742
  /**
742
743
  * Router service for resolving routes
743
744
  */
@@ -747,10 +748,6 @@ var HttpServer = class {
747
748
  */
748
749
  gRequestHandler;
749
750
  /**
750
- * Error handler provider for managing error responses
751
- */
752
- gErrorHandlerProvider;
753
- /**
754
751
  * Static server for serving static files
755
752
  */
756
753
  gStaticRequestHandler;
@@ -768,10 +765,10 @@ var HttpServer = class {
768
765
  const { port, host } = config.server ?? {};
769
766
  this.fServer = serve({
770
767
  bun: { error: (error) => {
771
- return this.gErrorHandlerProvider.handleError(error);
768
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error);
772
769
  } },
773
770
  deno: { onError: (error) => {
774
- return this.gErrorHandlerProvider.handleError(error);
771
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error);
775
772
  } },
776
773
  hostname: host,
777
774
  port,
@@ -811,13 +808,13 @@ var HttpServer = class {
811
808
  }
812
809
  return this.gRequestHandler.handleRequest(request, route);
813
810
  } catch (error) {
814
- return this.gErrorHandlerProvider.handleError(error);
811
+ return this.gContainer.get(ErrorHandlerProvider).handleError(error);
815
812
  }
816
813
  }
817
814
  };
815
+ __decorate([Inject(Container)], HttpServer.prototype, "gContainer", void 0);
818
816
  __decorate([Inject(Router)], HttpServer.prototype, "gRouter", void 0);
819
817
  __decorate([Inject(RequestHandler)], HttpServer.prototype, "gRequestHandler", void 0);
820
- __decorate([Inject(ErrorHandlerProvider)], HttpServer.prototype, "gErrorHandlerProvider", void 0);
821
818
  __decorate([Inject(StaticRequestHandler)], HttpServer.prototype, "gStaticRequestHandler", void 0);
822
819
 
823
820
  //#endregion
@@ -830,6 +827,7 @@ var App = class {
830
827
  gPluginsRegistry;
831
828
  gHttpServer;
832
829
  gStaticRequestHandler;
830
+ gLogger;
833
831
  /** Holds the initialization status of the application */
834
832
  fIsInitialized = false;
835
833
  /** Holds the dependency injection container */
@@ -883,9 +881,20 @@ var App = class {
883
881
  await this.resolvePlugins();
884
882
  initializeContainer(this.container);
885
883
  await this.gHttpServer.listen();
884
+ this.gLogger?.info(`\n${colors.green("➜")} App listening on port ${colors.bold(this.fConfig.server?.port?.toString() ?? "3000")}`);
886
885
  this.fIsInitialized = true;
887
886
  }
888
887
  /**
888
+ * Handles an incoming HTTP request.
889
+ * This method is an adapter for HttpServer.handleRequest method.
890
+ *
891
+ * @param {Request} request - The incoming HTTP request
892
+ * @returns {Promise<Response>} The HTTP response
893
+ */
894
+ async fetch(request) {
895
+ return this.gHttpServer.handleRequest(request);
896
+ }
897
+ /**
889
898
  * Resolves and initializes the plugins for the application.
890
899
  *
891
900
  * @private
@@ -898,6 +907,7 @@ __decorate([Inject(Router)], App.prototype, "gRouter", void 0);
898
907
  __decorate([Inject(PluginsRegistry)], App.prototype, "gPluginsRegistry", void 0);
899
908
  __decorate([Inject(HttpServer)], App.prototype, "gHttpServer", void 0);
900
909
  __decorate([Inject(StaticRequestHandler)], App.prototype, "gStaticRequestHandler", void 0);
910
+ __decorate([InjectOptional(Logger)], App.prototype, "gLogger", void 0);
901
911
 
902
912
  //#endregion
903
913
  //#region packages/logger/dist/Providers/index.mjs
@@ -916,7 +926,7 @@ const colorIfAllowed = (colorFn) => {
916
926
  };
917
927
  return wrappedFn;
918
928
  };
919
- const colors = {
929
+ const colors$1 = {
920
930
  bold: colorIfAllowed((text) => `\x1B[1m${text}\x1B[0m`),
921
931
  green: colorIfAllowed((text) => `\x1B[32m${text}\x1B[39m`),
922
932
  yellow: colorIfAllowed((text) => `\x1B[33m${text}\x1B[39m`),
@@ -925,10 +935,10 @@ const colors = {
925
935
  cyanBright: colorIfAllowed((text) => `\x1B[96m${text}\x1B[39m`)
926
936
  };
927
937
  const LOG_LEVEL_COLORS = {
928
- debug: colors.green,
929
- info: colors.bold,
930
- warn: colors.yellow,
931
- error: colors.red
938
+ debug: colors$1.green,
939
+ info: colors$1.bold,
940
+ warn: colors$1.yellow,
941
+ error: colors$1.red
932
942
  };
933
943
  /**
934
944
  * ConsoleProvider class for logging messages to the console.
@@ -1043,16 +1053,16 @@ var DefaultErrorHandlerProvider = class extends ErrorHandlerProvider {
1043
1053
  gLogger;
1044
1054
  /**
1045
1055
  * Handles an error that occurred during request processing
1046
- *
1056
+ *
1047
1057
  * @param error - The Error object containing error details
1048
1058
  * @returns Promise<Response> | Response - The response to be sent to the client
1049
1059
  */
1050
1060
  handleError(error) {
1051
- const _internalError = new InternalServerError();
1061
+ const _internalError = new InternalServerError(error?.message ?? "Internal server error");
1052
1062
  const status = error?.status ?? 500;
1053
1063
  if (error instanceof HttpError) return new Response(JSON.stringify({ ...error }, void 0, 2), { status });
1054
1064
  this.gLogger.error(error);
1055
- return new Response(JSON.stringify({ ...error?.cause ?? _internalError.cause }, void 0, 2), { status });
1065
+ return new Response(JSON.stringify({ ...error?.cause ?? _internalError }, void 0, 2), { status });
1056
1066
  }
1057
1067
  };
1058
1068
  __decorate([Inject(Logger)], DefaultErrorHandlerProvider.prototype, "gLogger", void 0);
@@ -2602,4 +2612,4 @@ let HTTPStatus = /* @__PURE__ */ function(HTTPStatus$1) {
2602
2612
  }({});
2603
2613
 
2604
2614
  //#endregion
2605
- export { App, BadRequestError, BaseMiddleware, BasePlugin, Body, Connect, Controller, Delete, ErrorHandlerProvider, ForbiddenError, Get, HTTPStatus, Head, Header, Headers$1 as Headers, HooksService, HttpError, HttpServer, InternalServerError, Listen, MetadataResolver, MethodNotAllowedError, Middleware, MultipartFormData, NotAcceptableError, NotFoundError, Options, Param, Patch, Post, Put, QueryParam, QueryParams, Redirect, Request, Response$1 as Response, Session, SetHeader, Status, Trace, UnauthorizedError, createApp, createMetadataCtx, createMetadataMethod, defineConfig, initializeMetadata, initializeMetadataMethod, loadVercubeConfig };
2615
+ export { App, BadRequestError, BaseMiddleware, BasePlugin, Body, Connect, Controller, Delete, ErrorHandlerProvider, ForbiddenError, Get, GlobalMiddlewareRegistry, HTTPStatus, Head, Header, Headers$1 as Headers, HooksService, HttpError, HttpServer, InternalServerError, Listen, MetadataResolver, MethodNotAllowedError, Middleware, MultipartFormData, NotAcceptableError, NotFoundError, Options, Param, Patch, Post, Put, QueryParam, QueryParams, Redirect, Request, Response$1 as Response, Session, SetHeader, Status, Trace, UnauthorizedError, createApp, createMetadataCtx, createMetadataMethod, defineConfig, initializeMetadata, initializeMetadataMethod, loadVercubeConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercube/core",
3
- "version": "0.0.2-beta.0",
3
+ "version": "0.0.2",
4
4
  "description": "Core module for Vercube framework",
5
5
  "repository": "@vercube/core",
6
6
  "license": "MIT",
@@ -25,10 +25,10 @@
25
25
  "c12": "3.0.3",
26
26
  "defu": "6.1.4",
27
27
  "pathe": "2.0.3",
28
- "rou3": "0.6.0",
28
+ "rou3": "0.6.1",
29
29
  "srvx": "0.4.0",
30
- "@vercube/di": "0.0.2-beta.0",
31
- "@vercube/logger": "0.0.2-beta.0"
30
+ "@vercube/di": "0.0.2",
31
+ "@vercube/logger": "0.0.2"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@vitest/coverage-v8": "^3.1.2",