@asenajs/asena 0.1.18 → 0.1.19

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 (273) hide show
  1. package/README.md +75 -64
  2. package/dist/index.d.ts +1 -10
  3. package/dist/index.js +1 -10
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/adapter/AsenaAdapter.d.ts +46 -53
  6. package/dist/lib/adapter/AsenaAdapter.js +22 -11
  7. package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
  8. package/dist/lib/adapter/AsenaContext.d.ts +67 -57
  9. package/dist/lib/adapter/AsenaWebsocketAdapter.d.ts +58 -34
  10. package/dist/lib/adapter/AsenaWebsocketAdapter.js +43 -12
  11. package/dist/lib/adapter/AsenaWebsocketAdapter.js.map +1 -1
  12. package/dist/lib/adapter/hono/HonoAdapter.d.ts +28 -0
  13. package/dist/lib/adapter/{defaultAdapter/DefaultAdapter.js → hono/HonoAdapter.js} +57 -35
  14. package/dist/lib/adapter/hono/HonoAdapter.js.map +1 -0
  15. package/dist/lib/adapter/{defaultAdapter/DefaultContextWrapper.d.ts → hono/HonoContextWrapper.d.ts} +4 -4
  16. package/dist/lib/adapter/{defaultAdapter/DefaultContextWrapper.js → hono/HonoContextWrapper.js} +6 -6
  17. package/dist/lib/adapter/hono/HonoContextWrapper.js.map +1 -0
  18. package/dist/lib/adapter/{defaultAdapter/DefaultWebsocketAdapter.d.ts → hono/HonoWebsocketAdapter.d.ts} +9 -5
  19. package/dist/lib/adapter/{defaultAdapter/DefaultWebsocketAdapter.js → hono/HonoWebsocketAdapter.js} +34 -24
  20. package/dist/lib/adapter/hono/HonoWebsocketAdapter.js.map +1 -0
  21. package/dist/lib/adapter/hono/defaults/ConfigService.d.ts +4 -0
  22. package/dist/lib/adapter/hono/defaults/ConfigService.js +3 -0
  23. package/dist/lib/adapter/hono/defaults/ConfigService.js.map +1 -0
  24. package/dist/lib/adapter/hono/defaults/Context.js +2 -0
  25. package/dist/lib/adapter/hono/defaults/Context.js.map +1 -0
  26. package/dist/lib/adapter/hono/defaults/MiddlewareService.d.ts +5 -0
  27. package/dist/lib/adapter/hono/defaults/MiddlewareService.js +4 -0
  28. package/dist/lib/adapter/hono/defaults/MiddlewareService.js.map +1 -0
  29. package/dist/lib/adapter/hono/defaults/ValidationService.d.ts +10 -0
  30. package/dist/lib/adapter/hono/defaults/ValidationService.js +3 -0
  31. package/dist/lib/adapter/hono/defaults/ValidationService.js.map +1 -0
  32. package/dist/lib/adapter/hono/defaults/index.d.ts +4 -0
  33. package/dist/lib/adapter/hono/defaults/index.js +5 -0
  34. package/dist/lib/adapter/hono/defaults/index.js.map +1 -0
  35. package/dist/lib/adapter/hono/index.d.ts +6 -0
  36. package/dist/lib/adapter/hono/index.js +7 -0
  37. package/dist/lib/adapter/hono/index.js.map +1 -0
  38. package/dist/lib/adapter/hono/types/HonoHandler.d.ts +5 -0
  39. package/dist/lib/adapter/hono/types/HonoHandler.js +2 -0
  40. package/dist/lib/adapter/hono/types/HonoHandler.js.map +1 -0
  41. package/dist/lib/adapter/hono/types/index.d.ts +2 -0
  42. package/dist/lib/adapter/hono/types/index.js +3 -0
  43. package/dist/lib/adapter/hono/types/index.js.map +1 -0
  44. package/dist/lib/adapter/hono/utils/createHonoAdapter.d.ts +3 -0
  45. package/dist/lib/adapter/hono/utils/createHonoAdapter.js +6 -0
  46. package/dist/lib/adapter/hono/utils/createHonoAdapter.js.map +1 -0
  47. package/dist/lib/adapter/hono/utils/middlewareParser.d.ts +4 -0
  48. package/dist/lib/adapter/hono/utils/middlewareParser.js +15 -0
  49. package/dist/lib/adapter/hono/utils/middlewareParser.js.map +1 -0
  50. package/dist/lib/adapter/index.d.ts +1 -0
  51. package/dist/lib/adapter/index.js +1 -0
  52. package/dist/lib/adapter/index.js.map +1 -1
  53. package/dist/lib/adapter/types/AsenaHandler.d.ts +2 -0
  54. package/dist/lib/adapter/types/AsenaHandler.js +2 -0
  55. package/dist/lib/adapter/types/AsenaHandler.js.map +1 -0
  56. package/dist/lib/adapter/types/AsenaMiddlewareHandler.d.ts +2 -0
  57. package/dist/lib/adapter/types/AsenaMiddlewareHandler.js +2 -0
  58. package/dist/lib/adapter/types/AsenaMiddlewareHandler.js.map +1 -0
  59. package/dist/lib/adapter/types/ErrorHandler.d.ts +2 -0
  60. package/dist/lib/adapter/types/ErrorHandler.js +2 -0
  61. package/dist/lib/adapter/types/ErrorHandler.js.map +1 -0
  62. package/dist/lib/adapter/types/RouteParams.d.ts +7 -4
  63. package/dist/lib/adapter/types/ServeOptions.d.ts +7 -0
  64. package/dist/lib/adapter/types/ServeOptions.js +2 -0
  65. package/dist/lib/adapter/types/ServeOptions.js.map +1 -0
  66. package/dist/lib/adapter/types/WebSocketRegistry.d.ts +5 -4
  67. package/dist/lib/adapter/types/WebsocketAdapterParams.d.ts +1 -1
  68. package/dist/lib/adapter/types/index.d.ts +3 -0
  69. package/dist/lib/adapter/types/index.js +3 -0
  70. package/dist/lib/adapter/types/index.js.map +1 -1
  71. package/dist/lib/ioc/Container.d.ts +7 -3
  72. package/dist/lib/ioc/Container.js +68 -72
  73. package/dist/lib/ioc/Container.js.map +1 -1
  74. package/dist/lib/ioc/IocEngine.d.ts +2 -2
  75. package/dist/lib/ioc/IocEngine.js +15 -15
  76. package/dist/lib/ioc/IocEngine.js.map +1 -1
  77. package/dist/lib/ioc/component/componentUtils.d.ts +1 -1
  78. package/dist/lib/ioc/component/componentUtils.js +16 -12
  79. package/dist/lib/ioc/component/componentUtils.js.map +1 -1
  80. package/dist/lib/{server/decorators/components → ioc/component/decorators}/Component.d.ts +1 -1
  81. package/dist/lib/{server/decorators/components → ioc/component/decorators}/Component.js +2 -2
  82. package/dist/lib/ioc/component/decorators/Component.js.map +1 -0
  83. package/dist/lib/ioc/component/decorators/Implements.js +2 -2
  84. package/dist/lib/ioc/component/decorators/Implements.js.map +1 -1
  85. package/dist/lib/ioc/component/decorators/Inject.d.ts +1 -1
  86. package/dist/lib/ioc/component/decorators/Inject.js +6 -7
  87. package/dist/lib/ioc/component/decorators/Inject.js.map +1 -1
  88. package/dist/lib/ioc/component/decorators/PostConstruct.d.ts +6 -0
  89. package/dist/lib/ioc/component/decorators/PostConstruct.js +17 -0
  90. package/dist/lib/ioc/component/decorators/PostConstruct.js.map +1 -0
  91. package/dist/lib/ioc/component/decorators/Strategy.js +6 -6
  92. package/dist/lib/ioc/component/decorators/Strategy.js.map +1 -1
  93. package/dist/lib/ioc/component/decorators/index.d.ts +1 -0
  94. package/dist/lib/ioc/component/decorators/index.js +1 -0
  95. package/dist/lib/ioc/component/decorators/index.js.map +1 -1
  96. package/dist/lib/ioc/component/index.d.ts +1 -0
  97. package/dist/lib/ioc/component/index.js +2 -0
  98. package/dist/lib/ioc/component/index.js.map +1 -0
  99. package/dist/lib/ioc/constants/ComponentConstants.d.ts +4 -2
  100. package/dist/lib/ioc/constants/ComponentConstants.js +3 -1
  101. package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
  102. package/dist/lib/ioc/helper/fileHelper.d.ts +1 -1
  103. package/dist/lib/ioc/helper/fileHelper.js +9 -3
  104. package/dist/lib/ioc/helper/fileHelper.js.map +1 -1
  105. package/dist/lib/ioc/helper/iocHelper.d.ts +2 -3
  106. package/dist/lib/ioc/helper/iocHelper.js +4 -2
  107. package/dist/lib/ioc/helper/iocHelper.js.map +1 -1
  108. package/dist/lib/ioc/types/{Component.d.ts → InjectableComponent.d.ts} +4 -4
  109. package/dist/lib/ioc/types/InjectableComponent.js +2 -0
  110. package/dist/lib/ioc/types/InjectableComponent.js.map +1 -0
  111. package/dist/lib/ioc/types/IocConfig.d.ts +1 -0
  112. package/dist/lib/ioc/types/decorators/ComponentParams.d.ts +1 -1
  113. package/dist/lib/ioc/types/decorators/ComponentType.d.ts +2 -2
  114. package/dist/lib/ioc/types/decorators/ComponentType.js +1 -1
  115. package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
  116. package/dist/lib/ioc/types/decorators/ControllerParams.d.ts +4 -3
  117. package/dist/lib/ioc/types/decorators/MiddlewareParams.d.ts +1 -1
  118. package/dist/lib/ioc/types/index.d.ts +1 -1
  119. package/dist/lib/ioc/types/index.js +1 -1
  120. package/dist/lib/ioc/types/index.js.map +1 -1
  121. package/dist/lib/{services/logger → logger}/DefaultLogger.d.ts +1 -1
  122. package/dist/lib/logger/DefaultLogger.js.map +1 -0
  123. package/dist/lib/{services/types → logger}/Logger.js.map +1 -1
  124. package/dist/lib/logger/index.d.ts +2 -0
  125. package/dist/lib/logger/index.js +3 -0
  126. package/dist/lib/logger/index.js.map +1 -0
  127. package/dist/lib/server/AsenaServer.d.ts +15 -14
  128. package/dist/lib/server/AsenaServer.js +125 -113
  129. package/dist/lib/server/AsenaServer.js.map +1 -1
  130. package/dist/lib/server/config/AsenaConfig.d.ts +43 -0
  131. package/dist/lib/server/config/AsenaConfig.js +2 -0
  132. package/dist/lib/server/config/AsenaConfig.js.map +1 -0
  133. package/dist/lib/server/decorators/Override.d.ts +4 -4
  134. package/dist/lib/server/decorators/Override.js +11 -7
  135. package/dist/lib/server/decorators/Override.js.map +1 -1
  136. package/dist/lib/server/decorators/components/Config.d.ts +10 -0
  137. package/dist/lib/server/decorators/components/Config.js +14 -0
  138. package/dist/lib/server/decorators/components/Config.js.map +1 -0
  139. package/dist/lib/server/decorators/components/Controller.js +4 -4
  140. package/dist/lib/server/decorators/components/Controller.js.map +1 -1
  141. package/dist/lib/server/decorators/components/Middleware.d.ts +1 -1
  142. package/dist/lib/server/decorators/components/Middleware.js +19 -9
  143. package/dist/lib/server/decorators/components/Middleware.js.map +1 -1
  144. package/dist/lib/server/decorators/components/Schedule.d.ts +2 -2
  145. package/dist/lib/server/decorators/components/Schedule.js +7 -7
  146. package/dist/lib/server/decorators/components/Schedule.js.map +1 -1
  147. package/dist/lib/server/decorators/components/Service.d.ts +1 -1
  148. package/dist/lib/server/decorators/components/Service.js +2 -2
  149. package/dist/lib/server/decorators/components/Service.js.map +1 -1
  150. package/dist/lib/server/decorators/components/WebSocket.js +4 -4
  151. package/dist/lib/server/decorators/components/WebSocket.js.map +1 -1
  152. package/dist/lib/server/decorators/components/index.d.ts +1 -2
  153. package/dist/lib/server/decorators/components/index.js +1 -2
  154. package/dist/lib/server/decorators/components/index.js.map +1 -1
  155. package/dist/lib/server/decorators/index.d.ts +2 -1
  156. package/dist/lib/server/decorators/index.js +2 -1
  157. package/dist/lib/server/decorators/index.js.map +1 -1
  158. package/dist/lib/server/index.d.ts +1 -0
  159. package/dist/lib/server/index.js +1 -0
  160. package/dist/lib/server/index.js.map +1 -1
  161. package/dist/lib/server/types/Class.d.ts +0 -3
  162. package/dist/lib/server/web/decorators/http.base.d.ts +4 -0
  163. package/dist/lib/server/web/decorators/http.base.js +35 -0
  164. package/dist/lib/server/web/decorators/http.base.js.map +1 -0
  165. package/dist/lib/server/web/decorators/index.d.ts +4 -0
  166. package/dist/lib/server/web/decorators/index.js +5 -0
  167. package/dist/lib/server/web/decorators/index.js.map +1 -0
  168. package/dist/lib/server/web/decorators/methods/Connect.d.ts +7 -0
  169. package/dist/lib/server/web/decorators/methods/Connect.js +12 -0
  170. package/dist/lib/server/web/decorators/methods/Connect.js.map +1 -0
  171. package/dist/lib/server/web/decorators/methods/Delete.d.ts +7 -0
  172. package/dist/lib/server/web/decorators/methods/Delete.js +12 -0
  173. package/dist/lib/server/web/decorators/methods/Delete.js.map +1 -0
  174. package/dist/lib/server/web/decorators/methods/Get.d.ts +7 -0
  175. package/dist/lib/server/web/decorators/methods/Get.js +12 -0
  176. package/dist/lib/server/web/decorators/methods/Get.js.map +1 -0
  177. package/dist/lib/server/web/decorators/methods/Head.d.ts +7 -0
  178. package/dist/lib/server/web/decorators/methods/Head.js +12 -0
  179. package/dist/lib/server/web/decorators/methods/Head.js.map +1 -0
  180. package/dist/lib/server/web/decorators/methods/Options.d.ts +7 -0
  181. package/dist/lib/server/web/decorators/methods/Options.js +12 -0
  182. package/dist/lib/server/web/decorators/methods/Options.js.map +1 -0
  183. package/dist/lib/server/web/decorators/methods/Patch.d.ts +7 -0
  184. package/dist/lib/server/web/decorators/methods/Patch.js +12 -0
  185. package/dist/lib/server/web/decorators/methods/Patch.js.map +1 -0
  186. package/dist/lib/server/web/decorators/methods/Post.d.ts +7 -0
  187. package/dist/lib/server/web/decorators/methods/Post.js +12 -0
  188. package/dist/lib/server/web/decorators/methods/Post.js.map +1 -0
  189. package/dist/lib/server/web/decorators/methods/Put.d.ts +7 -0
  190. package/dist/lib/server/web/decorators/methods/Put.js +12 -0
  191. package/dist/lib/server/web/decorators/methods/Put.js.map +1 -0
  192. package/dist/lib/server/web/decorators/methods/Trace.d.ts +7 -0
  193. package/dist/lib/server/web/decorators/methods/Trace.js +12 -0
  194. package/dist/lib/server/web/decorators/methods/Trace.js.map +1 -0
  195. package/dist/lib/server/web/decorators/methods/index.d.ts +9 -0
  196. package/dist/lib/server/web/decorators/methods/index.js +10 -0
  197. package/dist/lib/server/web/decorators/methods/index.js.map +1 -0
  198. package/dist/lib/server/web/helper/middlewareHelper.d.ts +7 -1
  199. package/dist/lib/server/web/helper/middlewareHelper.js +11 -5
  200. package/dist/lib/server/web/helper/middlewareHelper.js.map +1 -1
  201. package/dist/lib/server/web/http/HttpStatus.d.ts +69 -67
  202. package/dist/lib/server/web/http/HttpStatus.js +69 -68
  203. package/dist/lib/server/web/http/HttpStatus.js.map +1 -1
  204. package/dist/lib/server/web/middleware/AsenaMiddlewareService.d.ts +8 -10
  205. package/dist/lib/server/web/middleware/AsenaMiddlewareService.js +1 -4
  206. package/dist/lib/server/web/middleware/AsenaMiddlewareService.js.map +1 -1
  207. package/dist/lib/server/web/middleware/AsenaValidationService.d.ts +15 -16
  208. package/dist/lib/server/web/middleware/AsenaValidationService.js +1 -8
  209. package/dist/lib/server/web/middleware/AsenaValidationService.js.map +1 -1
  210. package/dist/lib/server/web/types/ApiParams.d.ts +73 -0
  211. package/dist/lib/server/web/types/ApiParams.js +2 -0
  212. package/dist/lib/server/web/types/ApiParams.js.map +1 -0
  213. package/dist/lib/server/web/types/BaseMiddleware.d.ts +50 -5
  214. package/dist/lib/server/web/types/BaseMiddleware.js +1 -1
  215. package/dist/lib/server/web/types/BaseMiddleware.js.map +1 -1
  216. package/dist/lib/server/web/types/index.d.ts +1 -1
  217. package/dist/lib/server/web/types/index.js +1 -1
  218. package/dist/lib/server/web/types/index.js.map +1 -1
  219. package/dist/lib/server/web/websocket/AsenaSocket.js +1 -0
  220. package/dist/lib/server/web/websocket/AsenaSocket.js.map +1 -1
  221. package/dist/lib/server/web/websocket/AsenaWebSocketServer.d.ts +39 -0
  222. package/dist/lib/server/web/websocket/AsenaWebSocketServer.js +40 -0
  223. package/dist/lib/server/web/websocket/AsenaWebSocketServer.js.map +1 -1
  224. package/dist/lib/server/web/websocket/AsenaWebSocketService.js +4 -4
  225. package/dist/lib/server/web/websocket/AsenaWebSocketService.js.map +1 -1
  226. package/dist/lib/utils/typedMetadata.d.ts +2 -0
  227. package/dist/lib/utils/typedMetadata.js +13 -0
  228. package/dist/lib/utils/typedMetadata.js.map +1 -0
  229. package/package.json +53 -5
  230. package/dist/lib/adapter/defaultAdapter/DefaultAdapter.d.ts +0 -26
  231. package/dist/lib/adapter/defaultAdapter/DefaultAdapter.js.map +0 -1
  232. package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.js.map +0 -1
  233. package/dist/lib/adapter/defaultAdapter/DefaultWebsocketAdapter.js.map +0 -1
  234. package/dist/lib/adapter/defaultAdapter/index.d.ts +0 -3
  235. package/dist/lib/adapter/defaultAdapter/index.js +0 -4
  236. package/dist/lib/adapter/defaultAdapter/index.js.map +0 -1
  237. package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.js +0 -2
  238. package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.js.map +0 -1
  239. package/dist/lib/adapter/defaultAdapter/types/Handler.d.ts +0 -4
  240. package/dist/lib/adapter/defaultAdapter/types/Handler.js +0 -2
  241. package/dist/lib/adapter/defaultAdapter/types/Handler.js.map +0 -1
  242. package/dist/lib/adapter/defaultAdapter/types/index.d.ts +0 -2
  243. package/dist/lib/adapter/defaultAdapter/types/index.js +0 -3
  244. package/dist/lib/adapter/defaultAdapter/types/index.js.map +0 -1
  245. package/dist/lib/ioc/types/Component.js +0 -2
  246. package/dist/lib/ioc/types/Component.js.map +0 -1
  247. package/dist/lib/server/decorators/components/Component.js.map +0 -1
  248. package/dist/lib/server/decorators/components/ServerService.d.ts +0 -9
  249. package/dist/lib/server/decorators/components/ServerService.js +0 -13
  250. package/dist/lib/server/decorators/components/ServerService.js.map +0 -1
  251. package/dist/lib/server/web/api/apiHandler.d.ts +0 -55
  252. package/dist/lib/server/web/api/apiHandler.js +0 -107
  253. package/dist/lib/server/web/api/apiHandler.js.map +0 -1
  254. package/dist/lib/server/web/api/index.d.ts +0 -1
  255. package/dist/lib/server/web/api/index.js +0 -2
  256. package/dist/lib/server/web/api/index.js.map +0 -1
  257. package/dist/lib/server/web/types/ApiHandler.d.ts +0 -22
  258. package/dist/lib/server/web/types/ApiHandler.js +0 -2
  259. package/dist/lib/server/web/types/ApiHandler.js.map +0 -1
  260. package/dist/lib/services/index.d.ts +0 -3
  261. package/dist/lib/services/index.js +0 -4
  262. package/dist/lib/services/index.js.map +0 -1
  263. package/dist/lib/services/logger/DefaultLogger.js.map +0 -1
  264. package/dist/lib/services/serverService/AsenaService.d.ts +0 -7
  265. package/dist/lib/services/serverService/AsenaService.js +0 -7
  266. package/dist/lib/services/serverService/AsenaService.js.map +0 -1
  267. package/dist/lib/services/types/index.d.ts +0 -2
  268. package/dist/lib/services/types/index.js +0 -3
  269. package/dist/lib/services/types/index.js.map +0 -1
  270. /package/dist/lib/adapter/{defaultAdapter/types/Defaultcontext.d.ts → hono/defaults/Context.d.ts} +0 -0
  271. /package/dist/lib/{services/logger → logger}/DefaultLogger.js +0 -0
  272. /package/dist/lib/{services/types → logger}/Logger.d.ts +0 -0
  273. /package/dist/lib/{services/types → logger}/Logger.js +0 -0
package/README.md CHANGED
@@ -22,9 +22,10 @@ First, create a new project using Bun:
22
22
 
23
23
  ```bash
24
24
  bun init
25
- ````
25
+ ```
26
26
 
27
27
  For decorators working properly, you need to add some settings to your tsconfig. Here is an recommended file:
28
+
28
29
  ```json
29
30
  {
30
31
  "compilerOptions": {
@@ -55,26 +56,26 @@ For decorators working properly, you need to add some settings to your tsconfig.
55
56
  "noPropertyAccessFromIndexSignature": true
56
57
  }
57
58
  }
58
-
59
59
  ```
60
60
 
61
61
  Then, install the required packages:
62
+
62
63
  ```bash
63
64
 
64
65
  bun add @asenajs/asena hono winston
65
66
  ```
67
+
66
68
  Add @asenajs/asena-cli to your package. This package provides a CLI for creating and managing Asena projects.
67
69
 
68
70
  ```bash
69
71
  bun add -D @asenajs/asena-cli
70
- ````
71
-
72
+ ```
72
73
 
73
- Then, create a new .asenarc.json file using the CLI:
74
+ Then, create a new asena-config.ts file using the CLI:
74
75
 
75
76
  ```bash
76
77
 
77
- ## Creates a .asenarc.json file with default values (requires manual updates). Source folder is 'src'.
78
+ ## Creates a asena-config.ts file with default values (requires manual updates). Source folder is 'src'.
78
79
  asena init
79
80
  ```
80
81
 
@@ -85,24 +86,26 @@ Create index.ts file under your src folder:
85
86
 
86
87
  ```typescript
87
88
  // src/index.ts
88
- import {AsenaServer, DefaultLogger} from "@asenajs/asena";
89
-
90
- await new AsenaServer().logger(new DefaultLogger()).port(3000).start();
89
+ const [adapter, serverLogger] = createHonoAdapter(new DefaultLogger());
90
+ await new AsenaServer(adapter, serverLogger).port(3000).start(true);
91
91
  ```
92
92
 
93
93
  To run asena you need at least one controller. Create a new controller:
94
94
 
95
95
  ```typescript
96
96
  // src/controllers/TestController.ts
97
- import {type Context, Controller, Get} from "@asenajs/asena";
97
+ import type { Context } from '@asenajs/asena/adapter/hono';
98
+ import { Controller } from '@asenajs/asena/server';
99
+ import { Get } from '@asenajs/asena/web';
98
100
 
99
- @Controller("/hello")
101
+ @Controller('/hello')
100
102
  export class TestController {
101
103
 
102
- @Get("/world")
104
+ @Get('/world')
103
105
  public async getHello(context: Context) {
104
- return context.send("Hello World");
106
+ return context.send('Hello World');
105
107
  }
108
+
106
109
  }
107
110
  ```
108
111
 
@@ -111,12 +114,13 @@ Finally, run the project:
111
114
  ```bash
112
115
 
113
116
  ## only for fast developing purposes
114
- asena dev start
115
- ````
117
+ asena dev start
118
+ ```
119
+
116
120
  ```bash
117
121
  ## or you can simply build then run your bundled project
118
122
  asena build
119
- ## then go to dist folder and run the project this way it will consume less memory
123
+ ## then go to dist folder and run the project this way it will consume less memory
120
124
  bun index.asena.js
121
125
  ```
122
126
 
@@ -125,106 +129,113 @@ bun index.asena.js
125
129
  Here is a simple example of a controller with service and middleware:
126
130
 
127
131
  ### Middleware
132
+
128
133
  This middleware sets a value to the context object.
134
+
129
135
  ```typescript
130
136
  // src/middleware/TestMiddleware.ts
131
- import {type Context, Middleware, MiddlewareService} from "@asenajs/asena";
137
+ import type { AsenaNextHandler } from '@asenajs/asena/adapter';
138
+ import type { Context, MiddlewareService } from '@asenajs/asena/adapter/hono';
139
+ import { Middleware } from '@asenajs/asena/server';
132
140
 
133
141
  @Middleware()
134
- export class TestMiddleware extends MiddlewareService {
135
-
136
- public handle(context: Context, next: Function) {
137
- context.setValue("testValue", "test");
142
+ export class TestMiddleware implements MiddlewareService {
143
+ public handle(context: Context, next: AsenaNextHandler) {
144
+ context.setValue('testValue', 'test');
138
145
 
139
- next();
140
- }
146
+ next();
147
+ }
141
148
  }
142
149
  ```
143
150
 
144
151
  ### Service
152
+
145
153
  Basic service with a getter and setter.
146
154
 
147
155
  ```typescript
148
- import {Service} from "@asenajs/asena";
156
+ import { Service } from '@asenajs/asena/server';
149
157
 
150
158
  @Service()
151
159
  export class HelloService {
160
+ private _foo = 'bar';
152
161
 
153
- private _foo: string = "bar";
154
-
155
- public get foo(): string {
156
- return this._foo;
157
- }
162
+ public get foo(): string {
163
+ return this._foo;
164
+ }
158
165
 
159
- public set foo(value: string) {
160
- this._foo = value;
161
- }
166
+ public set foo(value: string) {
167
+ this._foo = value;
168
+ }
162
169
  }
163
-
164
170
  ```
165
171
 
166
172
  ### Controller
173
+
167
174
  Controller with a GET route that uses the middleware and service.
168
175
 
169
176
  ```typescript
170
177
  // src/controller/TestController.ts
171
- import {type Context, Controller, Get, Inject} from "@asenajs/asena";
172
- import {HelloService} from "../service/HelloService.ts";
173
- import {TestMiddleware} from "../middleware/TestMiddleware.ts";
178
+ import { type Context, Controller, Get, Inject } from '@asenajs/asena';
179
+ import { HelloService } from '../service/HelloService.ts';
180
+ import { TestMiddleware } from '../middleware/TestMiddleware.ts';
174
181
 
175
- @Controller("/v1")
182
+ @Controller('/v1')
176
183
  export class TestController {
184
+ @Inject(HelloService)
185
+ private helloService: HelloService;
177
186
 
178
- @Inject(HelloService)
179
- private helloService: HelloService
180
-
181
- @Get("foo")
182
- public async getFoo(context: Context) {
183
- return context.send(this.helloService.foo);
184
- }
187
+ @Get('foo')
188
+ public async getFoo(context: Context) {
189
+ return context.send(this.helloService.foo);
190
+ }
185
191
 
186
- @Get({path: "world", middlewares: [TestMiddleware]})
187
- public async getHello(context: Context) {
188
- const testValue: string = context.getValue("testValue");
192
+ @Get({ path: 'world', middlewares: [TestMiddleware] })
193
+ public async getHello(context: Context) {
194
+ const testValue: string = context.getValue('testValue');
189
195
 
190
- return context.send(testValue);
191
- }
196
+ return context.send(testValue);
197
+ }
192
198
  }
193
199
  ```
194
200
 
195
201
  ### Index
202
+
196
203
  The main file that starts the server.
197
204
 
198
205
  ```typescript
199
206
  // src/index.ts
200
- import {AsenaServer, DefaultLogger} from "@asenajs/asena";
207
+ import { AsenaServer, createHonoAdapter } from '@asenajs/asena';
208
+ import { DefaultLogger } from '@asenajs/asena/logger';
201
209
 
202
- await new AsenaServer().logger(new DefaultLogger()).port(3000).start();
210
+ const [adapter, serverLogger] = createHonoAdapter(new DefaultLogger());
211
+ await new AsenaServer(adapter, serverLogger).port(3000).start(true);
203
212
  ```
204
213
 
205
214
  then run
215
+
206
216
  ```bash
207
217
  asena dev start
208
218
  ```
209
219
 
210
220
  You should see the following output:
221
+
211
222
  ```text
212
223
 
213
- Build completed successfully.
214
- 2024-11-19 17:58:35 [info]:
215
- ___ _____ ______ _ __ ___
224
+ Build completed successfully.
225
+ 2024-11-19 17:58:35 [info]:
226
+ ___ _____ ______ _ __ ___
216
227
  / | / ___/ / ____// | / // |
217
228
  / /| | \__ \ / __/ / |/ // /| |
218
229
  / ___ | ___/ // /___ / /| // ___ |
219
- /_/ |_|/____//_____//_/ |_//_/ |_|
220
-
221
- 2024-11-19 17:58:35 [info]: IoC initialized
222
- 2024-11-19 17:58:35 [info]: No server services found
223
- 2024-11-19 17:58:35 [info]: Controller: V1 found
224
- 2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/foo
225
- 2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/world
226
- 2024-11-19 17:58:35 [info]: No websockets found
227
- 2024-11-19 17:58:35 [info]: Server started on port 3000
230
+ /_/ |_|/____//_____//_/ |_//_/ |_|
231
+
232
+ 2024-11-19 17:58:35 [info]: IoC initialized
233
+ 2024-11-19 17:58:35 [info]: No server services found
234
+ 2024-11-19 17:58:35 [info]: Controller: V1 found
235
+ 2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/foo
236
+ 2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/world
237
+ 2024-11-19 17:58:35 [info]: No websockets found
238
+ 2024-11-19 17:58:35 [info]: Server started on port 3000
228
239
  ```
229
240
 
230
241
  and you see the result on your browser [http://localhost:3000/v1/foo](http://localhost:3000/v1/foo) with "bar" message.
@@ -267,7 +278,7 @@ the project:
267
278
  ### Performance Comparison (Fastest to Slowest)
268
279
 
269
280
  | Framework | Requests/sec | Latency (avg) | Transfer/sec |
270
- |--------------------------------------|--------------|---------------|--------------|
281
+ | ------------------------------------ | ------------ | ------------- | ------------ |
271
282
  | Hono | 147,031.08 | 2.69ms | 18.09MB |
272
283
  | Asena | 137,148.80 | 2.89ms | 16.74MB |
273
284
  | NestJS (Bun + Fastify) | 81,652.05 | 6.01ms | 13.78MB |
package/dist/index.d.ts CHANGED
@@ -1,10 +1 @@
1
- export { AsenaServer } from './lib/server';
2
- export * from './lib/server/web/middleware';
3
- export * from './lib/services';
4
- export * from './lib/adapter';
5
- export * from './lib/adapter/defaultAdapter';
6
- export { Implements } from './lib/ioc/component/decorators/Implements';
7
- export { Inject } from './lib/ioc/component/decorators/Inject';
8
- export * from './lib/server/web/api';
9
- export * from './lib/server/web/websocket';
10
- export * from './lib/server/decorators';
1
+ export { AsenaServer, createHonoAdapter } from './lib/server';
package/dist/index.js CHANGED
@@ -1,11 +1,2 @@
1
- export { AsenaServer } from './lib/server';
2
- export * from './lib/server/web/middleware';
3
- export * from './lib/services';
4
- export * from './lib/adapter';
5
- export * from './lib/adapter/defaultAdapter';
6
- export { Implements } from './lib/ioc/component/decorators/Implements';
7
- export { Inject } from './lib/ioc/component/decorators/Inject';
8
- export * from './lib/server/web/api';
9
- export * from './lib/server/web/websocket';
10
- export * from './lib/server/decorators';
1
+ export { AsenaServer, createHonoAdapter } from './lib/server';
11
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -1,88 +1,81 @@
1
- import type { RouteParams } from './types';
1
+ import type { AsenaServeOptions, ErrorHandler, RouteParams } from './types';
2
2
  import type { BaseMiddleware } from '../server/web/types';
3
- import type { ValidatorClass } from '../server/types';
4
3
  import type { Server } from 'bun';
5
4
  import type { AsenaWebsocketAdapter } from './AsenaWebsocketAdapter';
6
- import type { ServerLogger } from '../services';
5
+ import type { ServerLogger } from '../logger';
6
+ import type { AsenaContext } from './AsenaContext';
7
7
  /**
8
8
  * Abstract class representing an adapter for the Asena framework.
9
+ * This adapter serves as a base interface between the framework and different server implementations.
9
10
  *
10
- * @template A - Type for the application instance.
11
- * @template H - Type for the handler.
12
- * @template AM - Type for the middleware.
13
- * @template AH - Type for the handler.
14
- * @template R - Type for the request.
15
- * @template S - Type for the response.
16
- * @template WSA - Type for the WebSocket adapter.
11
+ * @template A - Type for the application instance (e.g., Express, Bun, etc.)
12
+ * @template R - Type for the request object
13
+ * @template S - Type for the response object
14
+ * @template VS - Type for the validator schema
15
+ * @template WSA - Type for the WebSocket adapter implementation
17
16
  */
18
- export declare abstract class AsenaAdapter<A = unknown, H = unknown, AM = unknown, AH = unknown, R = unknown, S = unknown, WSA extends AsenaWebsocketAdapter<A, AM> = AsenaWebsocketAdapter<A, AM>> {
17
+ export declare abstract class AsenaAdapter<A, C extends AsenaContext<any, any>, VS, WSA extends AsenaWebsocketAdapter<A, C>> {
19
18
  /**
20
- * The application instance.
19
+ * The name identifier of the adapter
20
+ */
21
+ readonly name: string;
22
+ /**
23
+ * The main application instance
21
24
  */
22
25
  app: A;
23
26
  /**
24
- * The WebSocket adapter instance.
27
+ * WebSocket adapter instance for handling real-time communications
25
28
  */
26
29
  websocketAdapter: WSA;
27
30
  /**
28
- * The port number.
31
+ * Server port number
29
32
  */
30
33
  protected port: number;
31
34
  /**
32
- * The logger instance.
35
+ * Logger instance for server operations
33
36
  */
34
37
  protected logger: ServerLogger;
35
- protected constructor(websocketAdapter: WSA, logger?: ServerLogger);
36
- /**
37
- * Sets the port number.
38
- *
39
- * @param {number} port - The port number to set.
40
- */
41
- abstract setPort(port: number): void;
42
38
  /**
43
- * Uses a middleware.
44
- *
45
- * @param {BaseMiddleware<R, S>} middleware - The middleware to use.
46
- * @param path - The path to use the middleware on.
39
+ * Creates a new adapter instance
40
+ * @param websocketAdapter - WebSocket adapter implementation
41
+ * @param logger - Optional custom logger implementation
47
42
  */
48
- abstract use(middleware: BaseMiddleware<R, S>, path?: string): void;
43
+ protected constructor(websocketAdapter: WSA, logger?: ServerLogger);
49
44
  /**
50
- * Registers a route.
51
- *
52
- * @param {RouteParams<AM, AH>} params - The route parameters.
45
+ * Configures the server port
46
+ * @param port - Port number to listen on
53
47
  */
54
- abstract registerRoute(params: RouteParams<AM, AH>): void;
48
+ abstract setPort(port: number): void;
55
49
  /**
56
- * Prepares middlewares.
57
- *
58
- * @param {BaseMiddleware<R, S> | BaseMiddleware<R, S>[]} middlewares - The middlewares to prepare.
59
- * @returns {any[]} The prepared middlewares.
50
+ * Registers middleware to the application
51
+ * @param middleware - Middleware implementation
52
+ * @param path - Optional path to apply the middleware to
60
53
  */
61
- abstract prepareMiddlewares(middlewares: BaseMiddleware<R, S> | BaseMiddleware<R, S>[]): any[];
54
+ abstract use(middleware: BaseMiddleware<C>, path?: string): Promise<void> | void;
62
55
  /**
63
- * Prepares a handler.
64
- *
65
- * @param {H} handler - The handler to prepare.
66
- * @returns {any} The prepared handler.
56
+ * Registers a new route with the application
57
+ * @param params - Route configuration parameters
67
58
  */
68
- abstract prepareHandler(handler: H): any;
59
+ abstract registerRoute(params: RouteParams<C, VS>): Promise<void> | void;
69
60
  /**
70
- * Starts the server.
71
- *
72
- * @returns {Promise<Server>} A promise that resolves to the server instance.
61
+ * Initializes and starts the server
62
+ * @returns Server instance
73
63
  */
74
- abstract start(): Promise<Server>;
64
+ abstract start(): Promise<Server> | Server;
75
65
  /**
76
- * Sets an error handler.
77
- *
78
- * @param {any} errorHandler - The error handler to set.
66
+ * Sets up global error handling
67
+ * @param errorHandler - Error handler implementation
79
68
  */
80
- abstract onError(errorHandler: any): void;
69
+ abstract onError(errorHandler: ErrorHandler<C>): Promise<void> | void;
81
70
  /**
82
- * Prepares a validator.
71
+ * Configures server options.
83
72
  *
84
- * @param {ValidatorClass<AM>} validator - The validator to prepare.
85
- * @returns {any} The prepared validator.
73
+ * @param options - Configuration options for the server, which can include:
74
+ * - `ServeOptions`: Basic server options.
75
+ * - `TLSServeOptions`: Options for TLS/SSL configuration.
76
+ * - `UnixServeOptions`: Options for Unix domain sockets.
77
+ * - `UnixTLSServeOptions`: Options for Unix domain sockets with TLS/SSL.
78
+ * @returns A promise that resolves when the options are set, or void.
86
79
  */
87
- abstract prepareValidator(validator: ValidatorClass<AM>): any;
80
+ abstract serveOptions(options: () => Promise<AsenaServeOptions> | AsenaServeOptions): Promise<void> | void;
88
81
  }
@@ -1,35 +1,46 @@
1
1
  /**
2
2
  * Abstract class representing an adapter for the Asena framework.
3
+ * This adapter serves as a base interface between the framework and different server implementations.
3
4
  *
4
- * @template A - Type for the application instance.
5
- * @template H - Type for the handler.
6
- * @template AM - Type for the middleware.
7
- * @template AH - Type for the handler.
8
- * @template R - Type for the request.
9
- * @template S - Type for the response.
10
- * @template WSA - Type for the WebSocket adapter.
5
+ * @template A - Type for the application instance (e.g., Express, Bun, etc.)
6
+ * @template R - Type for the request object
7
+ * @template S - Type for the response object
8
+ * @template VS - Type for the validator schema
9
+ * @template WSA - Type for the WebSocket adapter implementation
11
10
  */
12
11
  export class AsenaAdapter {
13
12
  /**
14
- * The application instance.
13
+ * The name identifier of the adapter
14
+ */
15
+ name;
16
+ /**
17
+ * The main application instance
15
18
  */
16
19
  app;
17
20
  /**
18
- * The WebSocket adapter instance.
21
+ * WebSocket adapter instance for handling real-time communications
19
22
  */
20
23
  websocketAdapter;
21
24
  /**
22
- * The port number.
25
+ * Server port number
23
26
  */
24
27
  port;
25
28
  /**
26
- * The logger instance.
29
+ * Logger instance for server operations
27
30
  */
28
31
  logger = console;
32
+ /**
33
+ * Creates a new adapter instance
34
+ * @param websocketAdapter - WebSocket adapter implementation
35
+ * @param logger - Optional custom logger implementation
36
+ */
29
37
  constructor(websocketAdapter, logger) {
30
38
  this.websocketAdapter = websocketAdapter;
31
39
  if (logger) {
32
40
  this.logger = logger;
41
+ if (!this.websocketAdapter.logger) {
42
+ this.websocketAdapter.logger = logger;
43
+ }
33
44
  }
34
45
  }
35
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AsenaAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/AsenaAdapter.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,MAAM,OAAgB,YAAY;IAUhC;;OAEG;IACI,GAAG,CAAI;IAEd;;OAEG;IACI,gBAAgB,CAAM;IAE7B;;OAEG;IACO,IAAI,CAAS;IAEvB;;OAEG;IACO,MAAM,GAAiB,OAAO,CAAC;IAEzC,YAAsB,gBAAqB,EAAE,MAAqB;QAChE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;CA8DF"}
1
+ {"version":3,"file":"AsenaAdapter.js","sourceRoot":"","sources":["../../../lib/adapter/AsenaAdapter.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,MAAM,OAAgB,YAAY;IAEhC;;OAEG;IACa,IAAI,CAAS;IAE7B;;OAEG;IACI,GAAG,CAAI;IAEd;;OAEG;IACI,gBAAgB,CAAM;IAE7B;;OAEG;IACO,IAAI,CAAS;IAEvB;;OAEG;IACO,MAAM,GAAiB,OAAO,CAAC;IAEzC;;;;OAIG;IACH,YAAsB,gBAAqB,EAAE,MAAqB;QAChE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YAErB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBAClC,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;CA6CF"}