@asenajs/asena 0.1.17 → 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 +171 -41
  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 +70 -62
  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 +69 -87
  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 +27 -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 -23
  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
@@ -3,6 +3,10 @@
3
3
  Asena is a NestJS-like IoC web framework built on top of Hono and Bun. It combines the power of dependency injection
4
4
  with the performance of Bun runtime and the flexibility of Hono web framework.
5
5
 
6
+ ## Documentation
7
+
8
+ For detailed documentation, please visit [not ready yet](https://asena.sh). Documentation is still in progress, but updates are being made regularly.
9
+
6
10
  ## Key Features
7
11
 
8
12
  - **Dependency Injection**: Built-in IoC container for managing dependencies
@@ -14,97 +18,227 @@ with the performance of Bun runtime and the flexibility of Hono web framework.
14
18
 
15
19
  ## Quick Start
16
20
 
17
- First, install the required packages:
21
+ First, create a new project using Bun:
18
22
 
19
23
  ```bash
24
+ bun init
25
+ ```
20
26
 
21
- bun add @asenajs/asena @asenajs/asena-cli hono winston
27
+ For decorators working properly, you need to add some settings to your tsconfig. Here is an recommended file:
28
+
29
+ ```json
30
+ {
31
+ "compilerOptions": {
32
+ // Enable latest features
33
+ "lib": ["ESNext", "DOM"],
34
+ "target": "ESNext",
35
+ "module": "ESNext",
36
+ "moduleDetection": "force",
37
+ "jsx": "react-jsx",
38
+ "allowJs": true,
39
+ "experimentalDecorators": true,
40
+ "emitDecoratorMetadata": true,
41
+
42
+ // Bundler mode
43
+ "moduleResolution": "bundler",
44
+ "allowImportingTsExtensions": true,
45
+ "verbatimModuleSyntax": true,
46
+ "noEmit": true,
47
+
48
+ // Best practices
49
+ "strict": false,
50
+ "skipLibCheck": true,
51
+ "noFallthroughCasesInSwitch": true,
52
+
53
+ // Some stricter flags
54
+ "noUnusedLocals": true,
55
+ "noUnusedParameters": true,
56
+ "noPropertyAccessFromIndexSignature": true
57
+ }
58
+ }
22
59
  ```
23
60
 
24
- Then, create a new project using the CLI:
61
+ Then, install the required packages:
25
62
 
26
63
  ```bash
27
64
 
28
- ## Creates a .asenarc.json file with default values (requires manual updates). Source folder is 'src'.
29
- asena-cli init
65
+ bun add @asenajs/asena hono winston
30
66
  ```
31
67
 
68
+ Add @asenajs/asena-cli to your package. This package provides a CLI for creating and managing Asena projects.
69
+
70
+ ```bash
71
+ bun add -D @asenajs/asena-cli
72
+ ```
73
+
74
+ Then, create a new asena-config.ts file using the CLI:
75
+
76
+ ```bash
77
+
78
+ ## Creates a asena-config.ts file with default values (requires manual updates). Source folder is 'src'.
79
+ asena init
80
+ ```
81
+
82
+ `Note`: Built options directly copy of bun options, you can check bun documentation for more
83
+ options. [Bun Documentation](https://bun.sh/docs/bundler#reference)
84
+
32
85
  Create index.ts file under your src folder:
33
86
 
34
87
  ```typescript
35
- import {AsenaServer} from '@asenajs/asena';
36
- import {DefaultLogger} from '@asenajs/asena/lib/services';
88
+ // src/index.ts
89
+ const [adapter, serverLogger] = createHonoAdapter(new DefaultLogger());
90
+ await new AsenaServer(adapter, serverLogger).port(3000).start(true);
91
+ ```
37
92
 
38
- const server = new AsenaServer().logger(new DefaultLogger()).port(3000);
93
+ To run asena you need at least one controller. Create a new controller:
39
94
 
40
- await server.start();
95
+ ```typescript
96
+ // src/controllers/TestController.ts
97
+ import type { Context } from '@asenajs/asena/adapter/hono';
98
+ import { Controller } from '@asenajs/asena/server';
99
+ import { Get } from '@asenajs/asena/web';
100
+
101
+ @Controller('/hello')
102
+ export class TestController {
103
+
104
+ @Get('/world')
105
+ public async getHello(context: Context) {
106
+ return context.send('Hello World');
107
+ }
108
+
109
+ }
41
110
  ```
42
111
 
43
112
  Finally, run the project:
44
113
 
45
114
  ```bash
46
115
 
47
- asena-cli dev start
116
+ ## only for fast developing purposes
117
+ asena dev start
118
+ ```
48
119
 
120
+ ```bash
49
121
  ## or you can simply build then run your bundled project
122
+ asena build
123
+ ## then go to dist folder and run the project this way it will consume less memory
124
+ bun index.asena.js
125
+ ```
126
+
127
+ ## Example
50
128
 
51
- asena-cli build
129
+ Here is a simple example of a controller with service and middleware:
52
130
 
53
- ## theb go to dist folder and run the project
131
+ ### Middleware
54
132
 
55
- bun index.asena.js
133
+ This middleware sets a value to the context object.
134
+
135
+ ```typescript
136
+ // src/middleware/TestMiddleware.ts
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';
140
+
141
+ @Middleware()
142
+ export class TestMiddleware implements MiddlewareService {
143
+ public handle(context: Context, next: AsenaNextHandler) {
144
+ context.setValue('testValue', 'test');
145
+
146
+ next();
147
+ }
148
+ }
56
149
  ```
57
150
 
58
- `Note`: Built options directly copy of bun options, you can check bun documentation for more
59
- options. [Bun Documentation](https://bun.sh/docs/bundler#reference)
151
+ ### Service
60
152
 
61
- ## Example
153
+ Basic service with a getter and setter.
154
+
155
+ ```typescript
156
+ import { Service } from '@asenajs/asena/server';
157
+
158
+ @Service()
159
+ export class HelloService {
160
+ private _foo = 'bar';
161
+
162
+ public get foo(): string {
163
+ return this._foo;
164
+ }
165
+
166
+ public set foo(value: string) {
167
+ this._foo = value;
168
+ }
169
+ }
170
+ ```
62
171
 
63
- Here is a simple example of a controller:
172
+ ### Controller
173
+
174
+ Controller with a GET route that uses the middleware and service.
64
175
 
65
176
  ```typescript
66
- // src/controllers/TestController.ts
67
- import {type Context, Controller, Get} from '@asenajs/asena';
177
+ // src/controller/TestController.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';
68
181
 
69
- @Controller()
182
+ @Controller('/v1')
70
183
  export class TestController {
71
- @Get('/')
72
- public async testerTest(context: Context) {
73
- return context.send('Hello world!');
74
- }
184
+ @Inject(HelloService)
185
+ private helloService: HelloService;
186
+
187
+ @Get('foo')
188
+ public async getFoo(context: Context) {
189
+ return context.send(this.helloService.foo);
190
+ }
191
+
192
+ @Get({ path: 'world', middlewares: [TestMiddleware] })
193
+ public async getHello(context: Context) {
194
+ const testValue: string = context.getValue('testValue');
195
+
196
+ return context.send(testValue);
197
+ }
75
198
  }
76
199
  ```
77
200
 
201
+ ### Index
202
+
203
+ The main file that starts the server.
204
+
78
205
  ```typescript
79
206
  // src/index.ts
80
- import {AsenaServer, DefaultLogger} from '@asenajs/asena';
207
+ import { AsenaServer, createHonoAdapter } from '@asenajs/asena';
208
+ import { DefaultLogger } from '@asenajs/asena/logger';
81
209
 
82
- 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);
83
212
  ```
84
213
 
85
214
  then run
86
215
 
87
216
  ```bash
217
+ asena dev start
218
+ ```
219
+
220
+ You should see the following output:
88
221
 
89
- asena-cli dev start
222
+ ```text
90
223
 
91
- ## logs
92
- 2024-11-16 15:29:44 [info]:
224
+ Build completed successfully.
225
+ 2024-11-19 17:58:35 [info]:
93
226
  ___ _____ ______ _ __ ___
94
227
  / | / ___/ / ____// | / // |
95
228
  / /| | \__ \ / __/ / |/ // /| |
96
229
  / ___ | ___/ // /___ / /| // ___ |
97
230
  /_/ |_|/____//_____//_/ |_//_/ |_|
98
231
 
99
- 2024-11-16 15:29:44 [info]: IoC initialized
100
- 2024-11-16 15:29:44 [info]: No server services found
101
- 2024-11-16 15:29:44 [info]: Controller: TestController found
102
- 2024-11-16 15:29:44 [info]: METHOD: GET, PATH: /, READY
103
- 2024-11-16 15:29:44 [info]: No websockets found
104
- 2024-11-16 15:29:44 [info]: Server started on port 3000
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
105
239
  ```
106
240
 
107
- and you see the result on your browser [http://localhost:3000](http://localhost:3000) with "Hello world!" message.
241
+ and you see the result on your browser [http://localhost:3000/v1/foo](http://localhost:3000/v1/foo) with "bar" message.
108
242
 
109
243
  `Note`: For more example, you can check this project [Example](https://github.com/LibirSoft/AsenaExample).
110
244
 
@@ -144,7 +278,7 @@ the project:
144
278
  ### Performance Comparison (Fastest to Slowest)
145
279
 
146
280
  | Framework | Requests/sec | Latency (avg) | Transfer/sec |
147
- |--------------------------------------|--------------|---------------|--------------|
281
+ | ------------------------------------ | ------------ | ------------- | ------------ |
148
282
  | Hono | 147,031.08 | 2.69ms | 18.09MB |
149
283
  | Asena | 137,148.80 | 2.89ms | 16.74MB |
150
284
  | NestJS (Bun + Fastify) | 81,652.05 | 6.01ms | 13.78MB |
@@ -161,7 +295,3 @@ the project:
161
295
  > - Running on same hardware
162
296
 
163
297
  _Note: Lower latency and higher requests/sec indicate better performance_
164
-
165
- ## Documentation
166
-
167
- For detailed documentation, please visit [not ready yet](https://asena.sh).
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"}