@asenajs/asena 0.1.18 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/README.md +90 -147
  2. package/dist/index.d.ts +0 -9
  3. package/dist/index.js +0 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/adapter/AsenaAdapter.d.ts +46 -54
  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 +57 -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/index.d.ts +1 -0
  13. package/dist/lib/adapter/index.js +1 -0
  14. package/dist/lib/adapter/index.js.map +1 -1
  15. package/dist/lib/adapter/types/ApiParams.d.ts +73 -0
  16. package/dist/lib/adapter/types/ApiParams.js +2 -0
  17. package/dist/lib/adapter/types/ApiParams.js.map +1 -0
  18. package/dist/lib/adapter/types/AsenaHandler.d.ts +2 -0
  19. package/dist/lib/adapter/types/AsenaHandler.js +2 -0
  20. package/dist/lib/adapter/types/AsenaHandler.js.map +1 -0
  21. package/dist/lib/adapter/types/AsenaMiddlewareHandler.d.ts +2 -0
  22. package/dist/lib/adapter/types/AsenaMiddlewareHandler.js +2 -0
  23. package/dist/lib/adapter/types/AsenaMiddlewareHandler.js.map +1 -0
  24. package/dist/lib/adapter/types/BaseMiddleware.d.ts +57 -0
  25. package/dist/lib/adapter/types/BaseMiddleware.js +2 -0
  26. package/dist/lib/adapter/types/BaseMiddleware.js.map +1 -0
  27. package/dist/lib/adapter/types/ErrorHandler.d.ts +2 -0
  28. package/dist/lib/adapter/types/ErrorHandler.js +2 -0
  29. package/dist/lib/adapter/types/ErrorHandler.js.map +1 -0
  30. package/dist/lib/adapter/types/RouteParams.d.ts +8 -5
  31. package/dist/lib/adapter/types/ServeOptions.d.ts +7 -0
  32. package/dist/lib/adapter/types/ServeOptions.js +2 -0
  33. package/dist/lib/adapter/types/ServeOptions.js.map +1 -0
  34. package/dist/lib/adapter/types/WebSocketRegistry.d.ts +5 -4
  35. package/dist/lib/adapter/types/WebsocketAdapterParams.d.ts +1 -1
  36. package/dist/lib/adapter/types/index.d.ts +6 -0
  37. package/dist/lib/adapter/types/index.js +6 -0
  38. package/dist/lib/adapter/types/index.js.map +1 -1
  39. package/dist/lib/ioc/Container.d.ts +8 -3
  40. package/dist/lib/ioc/Container.js +100 -76
  41. package/dist/lib/ioc/Container.js.map +1 -1
  42. package/dist/lib/ioc/IocEngine.d.ts +2 -2
  43. package/dist/lib/ioc/IocEngine.js +28 -16
  44. package/dist/lib/ioc/IocEngine.js.map +1 -1
  45. package/dist/lib/ioc/component/componentUtils.d.ts +1 -1
  46. package/dist/lib/ioc/component/componentUtils.js +16 -12
  47. package/dist/lib/ioc/component/componentUtils.js.map +1 -1
  48. package/dist/lib/{server/decorators/components → ioc/component/decorators}/Component.d.ts +1 -1
  49. package/dist/lib/{server/decorators/components → ioc/component/decorators}/Component.js +2 -2
  50. package/dist/lib/ioc/component/decorators/Component.js.map +1 -0
  51. package/dist/lib/ioc/component/decorators/Implements.js +2 -2
  52. package/dist/lib/ioc/component/decorators/Implements.js.map +1 -1
  53. package/dist/lib/ioc/component/decorators/Inject.d.ts +1 -1
  54. package/dist/lib/ioc/component/decorators/Inject.js +6 -7
  55. package/dist/lib/ioc/component/decorators/Inject.js.map +1 -1
  56. package/dist/lib/ioc/component/decorators/PostConstruct.d.ts +6 -0
  57. package/dist/lib/ioc/component/decorators/PostConstruct.js +17 -0
  58. package/dist/lib/ioc/component/decorators/PostConstruct.js.map +1 -0
  59. package/dist/lib/ioc/component/decorators/Strategy.js +6 -6
  60. package/dist/lib/ioc/component/decorators/Strategy.js.map +1 -1
  61. package/dist/lib/ioc/component/decorators/index.d.ts +1 -0
  62. package/dist/lib/ioc/component/decorators/index.js +1 -0
  63. package/dist/lib/ioc/component/decorators/index.js.map +1 -1
  64. package/dist/lib/ioc/component/index.d.ts +1 -0
  65. package/dist/lib/ioc/component/index.js +2 -0
  66. package/dist/lib/ioc/component/index.js.map +1 -0
  67. package/dist/lib/ioc/constants/ComponentConstants.d.ts +4 -2
  68. package/dist/lib/ioc/constants/ComponentConstants.js +3 -1
  69. package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
  70. package/dist/lib/ioc/helper/fileHelper.d.ts +1 -1
  71. package/dist/lib/ioc/helper/fileHelper.js +9 -3
  72. package/dist/lib/ioc/helper/fileHelper.js.map +1 -1
  73. package/dist/lib/ioc/helper/iocHelper.d.ts +2 -3
  74. package/dist/lib/ioc/helper/iocHelper.js +4 -2
  75. package/dist/lib/ioc/helper/iocHelper.js.map +1 -1
  76. package/dist/lib/ioc/types/{Component.d.ts → InjectableComponent.d.ts} +4 -4
  77. package/dist/lib/ioc/types/InjectableComponent.js +2 -0
  78. package/dist/lib/ioc/types/InjectableComponent.js.map +1 -0
  79. package/dist/lib/ioc/types/IocConfig.d.ts +1 -0
  80. package/dist/lib/ioc/types/decorators/ComponentParams.d.ts +1 -1
  81. package/dist/lib/ioc/types/decorators/ComponentType.d.ts +2 -2
  82. package/dist/lib/ioc/types/decorators/ComponentType.js +1 -1
  83. package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
  84. package/dist/lib/ioc/types/decorators/ControllerParams.d.ts +4 -3
  85. package/dist/lib/ioc/types/decorators/MiddlewareParams.d.ts +1 -1
  86. package/dist/lib/ioc/types/index.d.ts +1 -1
  87. package/dist/lib/ioc/types/index.js +1 -1
  88. package/dist/lib/ioc/types/index.js.map +1 -1
  89. package/dist/lib/{services/logger → logger}/DefaultLogger.d.ts +1 -1
  90. package/dist/lib/logger/DefaultLogger.js.map +1 -0
  91. package/dist/lib/{services/types → logger}/Logger.js.map +1 -1
  92. package/dist/lib/logger/index.d.ts +2 -0
  93. package/dist/lib/logger/index.js +3 -0
  94. package/dist/lib/logger/index.js.map +1 -0
  95. package/dist/lib/server/AsenaServer.d.ts +15 -14
  96. package/dist/lib/server/AsenaServer.js +125 -113
  97. package/dist/lib/server/AsenaServer.js.map +1 -1
  98. package/dist/lib/server/config/AsenaConfig.d.ts +43 -0
  99. package/dist/lib/server/config/AsenaConfig.js +2 -0
  100. package/dist/lib/server/config/AsenaConfig.js.map +1 -0
  101. package/dist/lib/server/config/index.d.ts +1 -0
  102. package/dist/lib/server/config/index.js +2 -0
  103. package/dist/lib/server/config/index.js.map +1 -0
  104. package/dist/lib/server/decorators/Override.d.ts +4 -4
  105. package/dist/lib/server/decorators/Override.js +11 -7
  106. package/dist/lib/server/decorators/Override.js.map +1 -1
  107. package/dist/lib/server/decorators/components/Config.d.ts +10 -0
  108. package/dist/lib/server/decorators/components/Config.js +14 -0
  109. package/dist/lib/server/decorators/components/Config.js.map +1 -0
  110. package/dist/lib/server/decorators/components/Controller.js +4 -4
  111. package/dist/lib/server/decorators/components/Controller.js.map +1 -1
  112. package/dist/lib/server/decorators/components/Middleware.d.ts +1 -1
  113. package/dist/lib/server/decorators/components/Middleware.js +19 -9
  114. package/dist/lib/server/decorators/components/Middleware.js.map +1 -1
  115. package/dist/lib/server/decorators/components/Schedule.d.ts +2 -2
  116. package/dist/lib/server/decorators/components/Schedule.js +7 -7
  117. package/dist/lib/server/decorators/components/Schedule.js.map +1 -1
  118. package/dist/lib/server/decorators/components/Service.d.ts +1 -1
  119. package/dist/lib/server/decorators/components/Service.js +2 -2
  120. package/dist/lib/server/decorators/components/Service.js.map +1 -1
  121. package/dist/lib/server/decorators/components/WebSocket.js +4 -4
  122. package/dist/lib/server/decorators/components/WebSocket.js.map +1 -1
  123. package/dist/lib/server/decorators/components/index.d.ts +1 -2
  124. package/dist/lib/server/decorators/components/index.js +1 -2
  125. package/dist/lib/server/decorators/components/index.js.map +1 -1
  126. package/dist/lib/server/decorators/index.d.ts +2 -1
  127. package/dist/lib/server/decorators/index.js +2 -1
  128. package/dist/lib/server/decorators/index.js.map +1 -1
  129. package/dist/lib/server/types/Class.d.ts +0 -3
  130. package/dist/lib/server/types/index.d.ts +2 -2
  131. package/dist/lib/server/types/index.js +2 -2
  132. package/dist/lib/server/types/index.js.map +1 -1
  133. package/dist/lib/server/web/decorators/http.base.d.ts +4 -0
  134. package/dist/lib/server/web/decorators/http.base.js +35 -0
  135. package/dist/lib/server/web/decorators/http.base.js.map +1 -0
  136. package/dist/lib/server/web/decorators/index.d.ts +4 -0
  137. package/dist/lib/server/web/decorators/index.js +5 -0
  138. package/dist/lib/server/web/decorators/index.js.map +1 -0
  139. package/dist/lib/server/web/decorators/methods/Connect.d.ts +7 -0
  140. package/dist/lib/server/web/decorators/methods/Connect.js +12 -0
  141. package/dist/lib/server/web/decorators/methods/Connect.js.map +1 -0
  142. package/dist/lib/server/web/decorators/methods/Delete.d.ts +7 -0
  143. package/dist/lib/server/web/decorators/methods/Delete.js +12 -0
  144. package/dist/lib/server/web/decorators/methods/Delete.js.map +1 -0
  145. package/dist/lib/server/web/decorators/methods/Get.d.ts +7 -0
  146. package/dist/lib/server/web/decorators/methods/Get.js +12 -0
  147. package/dist/lib/server/web/decorators/methods/Get.js.map +1 -0
  148. package/dist/lib/server/web/decorators/methods/Head.d.ts +7 -0
  149. package/dist/lib/server/web/decorators/methods/Head.js +12 -0
  150. package/dist/lib/server/web/decorators/methods/Head.js.map +1 -0
  151. package/dist/lib/server/web/decorators/methods/Options.d.ts +7 -0
  152. package/dist/lib/server/web/decorators/methods/Options.js +12 -0
  153. package/dist/lib/server/web/decorators/methods/Options.js.map +1 -0
  154. package/dist/lib/server/web/decorators/methods/Patch.d.ts +7 -0
  155. package/dist/lib/server/web/decorators/methods/Patch.js +12 -0
  156. package/dist/lib/server/web/decorators/methods/Patch.js.map +1 -0
  157. package/dist/lib/server/web/decorators/methods/Post.d.ts +7 -0
  158. package/dist/lib/server/web/decorators/methods/Post.js +12 -0
  159. package/dist/lib/server/web/decorators/methods/Post.js.map +1 -0
  160. package/dist/lib/server/web/decorators/methods/Put.d.ts +7 -0
  161. package/dist/lib/server/web/decorators/methods/Put.js +12 -0
  162. package/dist/lib/server/web/decorators/methods/Put.js.map +1 -0
  163. package/dist/lib/server/web/decorators/methods/Trace.d.ts +7 -0
  164. package/dist/lib/server/web/decorators/methods/Trace.js +12 -0
  165. package/dist/lib/server/web/decorators/methods/Trace.js.map +1 -0
  166. package/dist/lib/server/web/decorators/methods/index.d.ts +9 -0
  167. package/dist/lib/server/web/decorators/methods/index.js +10 -0
  168. package/dist/lib/server/web/decorators/methods/index.js.map +1 -0
  169. package/dist/lib/server/web/helper/middlewareHelper.d.ts +8 -2
  170. package/dist/lib/server/web/helper/middlewareHelper.js +11 -5
  171. package/dist/lib/server/web/helper/middlewareHelper.js.map +1 -1
  172. package/dist/lib/server/web/middleware/AsenaMiddlewareService.d.ts +8 -10
  173. package/dist/lib/server/web/middleware/AsenaMiddlewareService.js +1 -4
  174. package/dist/lib/server/web/middleware/AsenaMiddlewareService.js.map +1 -1
  175. package/dist/lib/server/web/middleware/AsenaValidationService.d.ts +15 -16
  176. package/dist/lib/server/web/middleware/AsenaValidationService.js +1 -8
  177. package/dist/lib/server/web/middleware/AsenaValidationService.js.map +1 -1
  178. package/dist/lib/server/web/types/HttpMethod.js.map +1 -0
  179. package/dist/lib/server/web/types/HttpStatus.d.ts +79 -0
  180. package/dist/lib/server/web/types/HttpStatus.js +85 -0
  181. package/dist/lib/server/web/types/HttpStatus.js.map +1 -0
  182. package/dist/lib/server/web/types/index.d.ts +2 -2
  183. package/dist/lib/server/web/types/index.js +2 -2
  184. package/dist/lib/server/web/types/index.js.map +1 -1
  185. package/dist/lib/server/web/websocket/AsenaSocket.d.ts +1 -0
  186. package/dist/lib/server/web/websocket/AsenaSocket.js +4 -0
  187. package/dist/lib/server/web/websocket/AsenaSocket.js.map +1 -1
  188. package/dist/lib/server/web/websocket/AsenaWebSocketServer.d.ts +39 -0
  189. package/dist/lib/server/web/websocket/AsenaWebSocketServer.js +41 -1
  190. package/dist/lib/server/web/websocket/AsenaWebSocketServer.js.map +1 -1
  191. package/dist/lib/server/web/websocket/AsenaWebSocketService.js +4 -4
  192. package/dist/lib/server/web/websocket/AsenaWebSocketService.js.map +1 -1
  193. package/dist/lib/server/web/websocket/index.d.ts +1 -0
  194. package/dist/lib/server/web/websocket/index.js +1 -0
  195. package/dist/lib/server/web/websocket/index.js.map +1 -1
  196. package/dist/lib/utils/typedMetadata.d.ts +3 -0
  197. package/dist/lib/utils/typedMetadata.js +16 -0
  198. package/dist/lib/utils/typedMetadata.js.map +1 -0
  199. package/package.json +55 -6
  200. package/dist/lib/adapter/defaultAdapter/DefaultAdapter.d.ts +0 -26
  201. package/dist/lib/adapter/defaultAdapter/DefaultAdapter.js +0 -92
  202. package/dist/lib/adapter/defaultAdapter/DefaultAdapter.js.map +0 -1
  203. package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.d.ts +0 -32
  204. package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.js +0 -97
  205. package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.js.map +0 -1
  206. package/dist/lib/adapter/defaultAdapter/DefaultWebsocketAdapter.d.ts +0 -15
  207. package/dist/lib/adapter/defaultAdapter/DefaultWebsocketAdapter.js +0 -77
  208. package/dist/lib/adapter/defaultAdapter/DefaultWebsocketAdapter.js.map +0 -1
  209. package/dist/lib/adapter/defaultAdapter/index.d.ts +0 -3
  210. package/dist/lib/adapter/defaultAdapter/index.js +0 -4
  211. package/dist/lib/adapter/defaultAdapter/index.js.map +0 -1
  212. package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.d.ts +0 -3
  213. package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.js +0 -2
  214. package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.js.map +0 -1
  215. package/dist/lib/adapter/defaultAdapter/types/Handler.d.ts +0 -4
  216. package/dist/lib/adapter/defaultAdapter/types/Handler.js +0 -2
  217. package/dist/lib/adapter/defaultAdapter/types/Handler.js.map +0 -1
  218. package/dist/lib/adapter/defaultAdapter/types/index.d.ts +0 -2
  219. package/dist/lib/adapter/defaultAdapter/types/index.js +0 -3
  220. package/dist/lib/adapter/defaultAdapter/types/index.js.map +0 -1
  221. package/dist/lib/ioc/types/Component.js +0 -2
  222. package/dist/lib/ioc/types/Component.js.map +0 -1
  223. package/dist/lib/server/decorators/components/Component.js.map +0 -1
  224. package/dist/lib/server/decorators/components/ServerService.d.ts +0 -9
  225. package/dist/lib/server/decorators/components/ServerService.js +0 -13
  226. package/dist/lib/server/decorators/components/ServerService.js.map +0 -1
  227. package/dist/lib/server/web/api/apiHandler.d.ts +0 -55
  228. package/dist/lib/server/web/api/apiHandler.js +0 -107
  229. package/dist/lib/server/web/api/apiHandler.js.map +0 -1
  230. package/dist/lib/server/web/api/index.d.ts +0 -1
  231. package/dist/lib/server/web/api/index.js +0 -2
  232. package/dist/lib/server/web/api/index.js.map +0 -1
  233. package/dist/lib/server/web/http/HttpMethod.js.map +0 -1
  234. package/dist/lib/server/web/http/HttpStatus.d.ts +0 -77
  235. package/dist/lib/server/web/http/HttpStatus.js +0 -84
  236. package/dist/lib/server/web/http/HttpStatus.js.map +0 -1
  237. package/dist/lib/server/web/http/index.d.ts +0 -2
  238. package/dist/lib/server/web/http/index.js +0 -3
  239. package/dist/lib/server/web/http/index.js.map +0 -1
  240. package/dist/lib/server/web/types/ApiHandler.d.ts +0 -22
  241. package/dist/lib/server/web/types/ApiHandler.js +0 -2
  242. package/dist/lib/server/web/types/ApiHandler.js.map +0 -1
  243. package/dist/lib/server/web/types/BaseMiddleware.d.ts +0 -12
  244. package/dist/lib/server/web/types/BaseMiddleware.js +0 -2
  245. package/dist/lib/server/web/types/BaseMiddleware.js.map +0 -1
  246. package/dist/lib/services/index.d.ts +0 -3
  247. package/dist/lib/services/index.js +0 -4
  248. package/dist/lib/services/index.js.map +0 -1
  249. package/dist/lib/services/logger/DefaultLogger.js.map +0 -1
  250. package/dist/lib/services/serverService/AsenaService.d.ts +0 -7
  251. package/dist/lib/services/serverService/AsenaService.js +0 -7
  252. package/dist/lib/services/serverService/AsenaService.js.map +0 -1
  253. package/dist/lib/services/types/index.d.ts +0 -2
  254. package/dist/lib/services/types/index.js +0 -3
  255. package/dist/lib/services/types/index.js.map +0 -1
  256. /package/dist/lib/{services/logger → logger}/DefaultLogger.js +0 -0
  257. /package/dist/lib/{services/types → logger}/Logger.d.ts +0 -0
  258. /package/dist/lib/{services/types → logger}/Logger.js +0 -0
  259. /package/dist/lib/server/web/{http → types}/HttpMethod.d.ts +0 -0
  260. /package/dist/lib/server/web/{http → types}/HttpMethod.js +0 -0
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Asena
2
2
 
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
- with the performance of Bun runtime and the flexibility of Hono web framework.
4
+ with the performance of Bun runtime and the flexibility of Adapter design system.
5
5
 
6
6
  ## Documentation
7
7
 
@@ -15,16 +15,49 @@ For detailed documentation, please visit [not ready yet](https://asena.sh). Docu
15
15
  - **WebSocket Support**: Built-in WebSocket handling capabilities
16
16
  - **Middleware System**: Flexible middleware architecture
17
17
  - **HTTP Adapters**: Extensible adapter system with Hono as default
18
+ - **Zero Dependencies**: Only uses reflect-metadata for dependency injection
19
+ - **TypeScript Support**: Full TypeScript support with strict mode
20
+ - **Modular Architecture**: Easy to extend and customize
21
+
22
+ ## Installation
23
+
24
+ ```bash
25
+ bun add @asenajs/asena
26
+ ```
18
27
 
19
28
  ## Quick Start
20
29
 
30
+ The easiest way to create a new Asena project is using the CLI:
31
+
32
+ ```bash
33
+ # Create a new project
34
+ bun add -D @asenajs/asena-cli
35
+ asena create
36
+ ```
37
+
38
+ This will create a new project with the following structure:
39
+ ```
40
+ ├── src/
41
+ │ ├── controllers/
42
+ │ │ └── AsenaController.ts
43
+ │ └── index.ts
44
+ ├── package.json
45
+ ├── tsconfig.json
46
+ ├── .eslintrc.js
47
+ ├── .eslintignore
48
+ └── .prettierrc.js
49
+ ```
50
+
51
+ Alternatively, you can create a project manually:
52
+
21
53
  First, create a new project using Bun:
22
54
 
23
55
  ```bash
24
56
  bun init
25
- ````
57
+ ```
58
+
59
+ For decorators working properly, you need to add some settings to your tsconfig. Here is a recommended file:
26
60
 
27
- For decorators working properly, you need to add some settings to your tsconfig. Here is an recommended file:
28
61
  ```json
29
62
  {
30
63
  "compilerOptions": {
@@ -45,7 +78,7 @@ For decorators working properly, you need to add some settings to your tsconfig.
45
78
  "noEmit": true,
46
79
 
47
80
  // Best practices
48
- "strict": false,
81
+ "strict": true,
49
82
  "skipLibCheck": true,
50
83
  "noFallthroughCasesInSwitch": true,
51
84
 
@@ -55,26 +88,23 @@ For decorators working properly, you need to add some settings to your tsconfig.
55
88
  "noPropertyAccessFromIndexSignature": true
56
89
  }
57
90
  }
58
-
59
91
  ```
60
92
 
61
93
  Then, install the required packages:
62
- ```bash
63
94
 
64
- bun add @asenajs/asena hono winston
95
+ ```bash
96
+ bun add @asenajs/asena @asenajs/hono-adapter
65
97
  ```
98
+
66
99
  Add @asenajs/asena-cli to your package. This package provides a CLI for creating and managing Asena projects.
67
100
 
68
101
  ```bash
69
102
  bun add -D @asenajs/asena-cli
70
- ````
71
-
103
+ ```
72
104
 
73
- Then, create a new .asenarc.json file using the CLI:
105
+ Then, create a new asena-config.ts file using the CLI:
74
106
 
75
107
  ```bash
76
-
77
- ## Creates a .asenarc.json file with default values (requires manual updates). Source folder is 'src'.
78
108
  asena init
79
109
  ```
80
110
 
@@ -85,23 +115,30 @@ Create index.ts file under your src folder:
85
115
 
86
116
  ```typescript
87
117
  // src/index.ts
88
- import {AsenaServer, DefaultLogger} from "@asenajs/asena";
89
-
90
- await new AsenaServer().logger(new DefaultLogger()).port(3000).start();
118
+ import { AsenaServer } from '@asenajs/asena';
119
+ import { DefaultLogger } from "@asenajs/asena/logger";
120
+ import { createHonoAdapter } from '@asenajs/hono-adapter';
121
+
122
+ const [adapter, logger] = createHonoAdapter(new DefaultLogger());
123
+ await new AsenaServer(adapter)
124
+ .logger(logger)
125
+ .port(3000)
126
+ .start(true);
91
127
  ```
92
128
 
93
129
  To run asena you need at least one controller. Create a new controller:
94
130
 
95
131
  ```typescript
96
132
  // src/controllers/TestController.ts
97
- import {type Context, Controller, Get} from "@asenajs/asena";
133
+ import type { Context } from '@asenajs/hono-adapter';
134
+ import { Controller } from '@asenajs/asena/server';
135
+ import { Get } from '@asenajs/asena/web';
98
136
 
99
- @Controller("/hello")
137
+ @Controller('/hello')
100
138
  export class TestController {
101
-
102
- @Get("/world")
139
+ @Get('/world')
103
140
  public async getHello(context: Context) {
104
- return context.send("Hello World");
141
+ return context.send('Hello World');
105
142
  }
106
143
  }
107
144
  ```
@@ -109,167 +146,61 @@ export class TestController {
109
146
  Finally, run the project:
110
147
 
111
148
  ```bash
112
-
113
149
  ## only for fast developing purposes
114
- asena dev start
115
- ````
150
+ asena dev start
151
+ ```
152
+
116
153
  ```bash
117
154
  ## or you can simply build then run your bundled project
118
155
  asena build
119
- ## then go to dist folder and run the project this way it will consume less memory
156
+ ## then go to dist folder and run the project this way it will consume less memory and it will be faster.
120
157
  bun index.asena.js
121
158
  ```
122
159
 
123
- ## Example
124
-
125
- Here is a simple example of a controller with service and middleware:
126
-
127
- ### Middleware
128
- This middleware sets a value to the context object.
129
- ```typescript
130
- // src/middleware/TestMiddleware.ts
131
- import {type Context, Middleware, MiddlewareService} from "@asenajs/asena";
132
-
133
- @Middleware()
134
- export class TestMiddleware extends MiddlewareService {
135
-
136
- public handle(context: Context, next: Function) {
137
- context.setValue("testValue", "test");
138
-
139
- next();
140
- }
141
- }
142
- ```
143
-
144
- ### Service
145
- Basic service with a getter and setter.
146
-
147
- ```typescript
148
- import {Service} from "@asenajs/asena";
149
-
150
- @Service()
151
- export class HelloService {
152
-
153
- private _foo: string = "bar";
154
-
155
- public get foo(): string {
156
- return this._foo;
157
- }
158
-
159
- public set foo(value: string) {
160
- this._foo = value;
161
- }
162
- }
163
-
164
- ```
165
-
166
- ### Controller
167
- Controller with a GET route that uses the middleware and service.
168
-
169
- ```typescript
170
- // 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";
174
-
175
- @Controller("/v1")
176
- export class TestController {
177
-
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
- }
185
-
186
- @Get({path: "world", middlewares: [TestMiddleware]})
187
- public async getHello(context: Context) {
188
- const testValue: string = context.getValue("testValue");
189
-
190
- return context.send(testValue);
191
- }
192
- }
193
- ```
160
+ ## CLI Commands
194
161
 
195
- ### Index
196
- The main file that starts the server.
162
+ For more information about CLI commands and usage, please visit:
163
+ [Asena CLI Documentation](https://github.com/AsenaJs/Asena-cli/blob/master/README.md)
197
164
 
198
- ```typescript
199
- // src/index.ts
200
- import {AsenaServer, DefaultLogger} from "@asenajs/asena";
201
165
 
202
- await new AsenaServer().logger(new DefaultLogger()).port(3000).start();
203
- ```
166
+ ## Project Structure
204
167
 
205
- then run
206
- ```bash
207
- asena dev start
208
168
  ```
209
-
210
- You should see the following output:
211
- ```text
212
-
213
- Build completed successfully.
214
- 2024-11-19 17:58:35 [info]:
215
- ___ _____ ______ _ __ ___
216
- / | / ___/ / ____// | / // |
217
- / /| | \__ \ / __/ / |/ // /| |
218
- / ___ | ___/ // /___ / /| // ___ |
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
169
+ lib/
170
+ ├── adapter/ # HTTP adapter implementations
171
+ ├── server/ # Core server functionality
172
+ ├── ioc/ # Dependency injection container
173
+ ├── utils/ # Utility functions
174
+ ├── test/ # Test utilities
175
+ └── logger/ # Logging system
228
176
  ```
229
177
 
230
- and you see the result on your browser [http://localhost:3000/v1/foo](http://localhost:3000/v1/foo) with "bar" message.
231
-
232
- `Note`: For more example, you can check this project [Example](https://github.com/LibirSoft/AsenaExample).
233
-
234
178
  ## Core Concepts
235
179
 
236
180
  - **Controllers**: Handle incoming requests using decorators
237
181
  - **Services**: Business logic containers that can be injected
238
- - **ServerSrvices**: Server-wide services that can be injected (e.g. Database)
239
182
  - **Middleware**: Request/Response interceptors
240
- - **Adapters**: Framework adapters (default: Hono)
241
- - **WebSocket**: Real-time communication support
242
- - **Validators**: Request validation system
243
-
244
- ## Architecture
245
-
246
- Asena follows a modular architecture with:
247
-
248
- - IoC Container for dependency management
249
- - Adapter pattern for framework integration
250
- - Decorator-based routing system
251
- - Middleware pipeline
252
- - WebSocket integration
253
- - Context management
183
+ - **WebSocket**: Built-in WebSocket support
184
+ - **HTTP Status**: Standard HTTP status codes and utilities
254
185
 
255
186
  ## Performance
256
187
 
257
- Built on Bun runtime and Hono, Asena provides:
188
+ Built on Bun runtime, Asena provides:
258
189
 
259
190
  - Fast startup time
260
191
  - Low memory footprint
261
192
  - Quick request processing
262
193
  - Efficient WebSocket handling
263
194
 
264
- and here is the benchmark result of Asena with Hono adapter(Basic hello world example) in every test we used bun to run
195
+ Here is the benchmark result of Asena with Hono adapter (Basic hello world example) in every test we used bun to run
265
196
  the project:
266
197
 
267
198
  ### Performance Comparison (Fastest to Slowest)
268
199
 
269
200
  | Framework | Requests/sec | Latency (avg) | Transfer/sec |
270
- |--------------------------------------|--------------|---------------|--------------|
201
+ | ------------------------------------ | ------------ | ------------- | ------------ |
271
202
  | Hono | 147,031.08 | 2.69ms | 18.09MB |
272
- | Asena | 137,148.80 | 2.89ms | 16.74MB |
203
+ | Asena + Hono-adapter | 137,148.80 | 2.89ms | 16.74MB |
273
204
  | NestJS (Bun + Fastify) | 81,652.05 | 6.01ms | 13.78MB |
274
205
  | NestJS (Bun) | 64,435.83 | 6.14ms | 11.80MB |
275
206
  | NestJS (Bun + kiyasov/platform-hono) | 45,082.27 | 8.79ms | 5.55MB |
@@ -284,3 +215,15 @@ the project:
284
215
  > - Running on same hardware
285
216
 
286
217
  _Note: Lower latency and higher requests/sec indicate better performance_
218
+
219
+ ## Contributing
220
+
221
+ Contributions are welcome! Please feel free to submit a Pull Request.
222
+
223
+ ## License
224
+
225
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
226
+
227
+ ## Support
228
+
229
+ If you encounter any issues or have questions, please open an issue on the [GitHub repository](https://github.com/AsenaJs/Asena/issues).
package/dist/index.d.ts CHANGED
@@ -1,10 +1 @@
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';
package/dist/index.js CHANGED
@@ -1,11 +1,2 @@
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';
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,MAAM,cAAc,CAAC"}
@@ -1,88 +1,80 @@
1
- import type { RouteParams } from './types';
2
- import type { BaseMiddleware } from '../server/web/types';
3
- import type { ValidatorClass } from '../server/types';
1
+ import type { AsenaServeOptions, BaseMiddleware, ErrorHandler, RouteParams } from './types';
4
2
  import type { Server } from 'bun';
5
3
  import type { AsenaWebsocketAdapter } from './AsenaWebsocketAdapter';
6
- import type { ServerLogger } from '../services';
4
+ import type { ServerLogger } from '../logger';
5
+ import type { AsenaContext } from './AsenaContext';
7
6
  /**
8
7
  * Abstract class representing an adapter for the Asena framework.
8
+ * This adapter serves as a base interface between the framework and different server implementations.
9
9
  *
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.
10
+ * @template A - Type for the application instance (e.g., Express, Bun, etc.)
11
+ * @template R - Type for the request object
12
+ * @template S - Type for the response object
13
+ * @template VS - Type for the validator schema
14
+ * @template WSA - Type for the WebSocket adapter implementation
17
15
  */
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>> {
16
+ export declare abstract class AsenaAdapter<A, C extends AsenaContext<any, any>, VS, WSA extends AsenaWebsocketAdapter<A, C>> {
19
17
  /**
20
- * The application instance.
18
+ * The name identifier of the adapter
19
+ */
20
+ readonly name: string;
21
+ /**
22
+ * The main application instance
21
23
  */
22
24
  app: A;
23
25
  /**
24
- * The WebSocket adapter instance.
26
+ * WebSocket adapter instance for handling real-time communications
25
27
  */
26
28
  websocketAdapter: WSA;
27
29
  /**
28
- * The port number.
30
+ * Server port number
29
31
  */
30
32
  protected port: number;
31
33
  /**
32
- * The logger instance.
34
+ * Logger instance for server operations
33
35
  */
34
36
  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
37
  /**
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.
38
+ * Creates a new adapter instance
39
+ * @param websocketAdapter - WebSocket adapter implementation
40
+ * @param logger - Optional custom logger implementation
47
41
  */
48
- abstract use(middleware: BaseMiddleware<R, S>, path?: string): void;
42
+ protected constructor(websocketAdapter: WSA, logger?: ServerLogger);
49
43
  /**
50
- * Registers a route.
51
- *
52
- * @param {RouteParams<AM, AH>} params - The route parameters.
44
+ * Configures the server port
45
+ * @param port - Port number to listen on
53
46
  */
54
- abstract registerRoute(params: RouteParams<AM, AH>): void;
47
+ abstract setPort(port: number): void;
55
48
  /**
56
- * Prepares middlewares.
57
- *
58
- * @param {BaseMiddleware<R, S> | BaseMiddleware<R, S>[]} middlewares - The middlewares to prepare.
59
- * @returns {any[]} The prepared middlewares.
49
+ * Registers middleware to the application
50
+ * @param middleware - Middleware implementation
51
+ * @param path - Optional path to apply the middleware to
60
52
  */
61
- abstract prepareMiddlewares(middlewares: BaseMiddleware<R, S> | BaseMiddleware<R, S>[]): any[];
53
+ abstract use(middleware: BaseMiddleware<C>, path?: string): Promise<void> | void;
62
54
  /**
63
- * Prepares a handler.
64
- *
65
- * @param {H} handler - The handler to prepare.
66
- * @returns {any} The prepared handler.
55
+ * Registers a new route with the application
56
+ * @param params - Route configuration parameters
67
57
  */
68
- abstract prepareHandler(handler: H): any;
58
+ abstract registerRoute(params: RouteParams<C, VS>): Promise<void> | void;
69
59
  /**
70
- * Starts the server.
71
- *
72
- * @returns {Promise<Server>} A promise that resolves to the server instance.
60
+ * Initializes and starts the server
61
+ * @returns Server instance
73
62
  */
74
- abstract start(): Promise<Server>;
63
+ abstract start(): Promise<Server> | Server;
75
64
  /**
76
- * Sets an error handler.
77
- *
78
- * @param {any} errorHandler - The error handler to set.
65
+ * Sets up global error handling
66
+ * @param errorHandler - Error handler implementation
79
67
  */
80
- abstract onError(errorHandler: any): void;
68
+ abstract onError(errorHandler: ErrorHandler<C>): Promise<void> | void;
81
69
  /**
82
- * Prepares a validator.
70
+ * Configures server options.
83
71
  *
84
- * @param {ValidatorClass<AM>} validator - The validator to prepare.
85
- * @returns {any} The prepared validator.
72
+ * @param options - Configuration options for the server, which can include:
73
+ * - `ServeOptions`: Basic server options.
74
+ * - `TLSServeOptions`: Options for TLS/SSL configuration.
75
+ * - `UnixServeOptions`: Options for Unix domain sockets.
76
+ * - `UnixTLSServeOptions`: Options for Unix domain sockets with TLS/SSL.
77
+ * @returns A promise that resolves when the options are set, or void.
86
78
  */
87
- abstract prepareValidator(validator: ValidatorClass<AM>): any;
79
+ abstract serveOptions(options: () => Promise<AsenaServeOptions> | AsenaServeOptions): Promise<void> | void;
88
80
  }
@@ -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":"AAMA;;;;;;;;;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"}