@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.
- package/README.md +90 -147
- package/dist/index.d.ts +0 -9
- package/dist/index.js +0 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter/AsenaAdapter.d.ts +46 -54
- package/dist/lib/adapter/AsenaAdapter.js +22 -11
- package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
- package/dist/lib/adapter/AsenaContext.d.ts +67 -57
- package/dist/lib/adapter/AsenaWebsocketAdapter.d.ts +57 -34
- package/dist/lib/adapter/AsenaWebsocketAdapter.js +43 -12
- package/dist/lib/adapter/AsenaWebsocketAdapter.js.map +1 -1
- package/dist/lib/adapter/index.d.ts +1 -0
- package/dist/lib/adapter/index.js +1 -0
- package/dist/lib/adapter/index.js.map +1 -1
- package/dist/lib/adapter/types/ApiParams.d.ts +73 -0
- package/dist/lib/adapter/types/ApiParams.js +2 -0
- package/dist/lib/adapter/types/ApiParams.js.map +1 -0
- package/dist/lib/adapter/types/AsenaHandler.d.ts +2 -0
- package/dist/lib/adapter/types/AsenaHandler.js +2 -0
- package/dist/lib/adapter/types/AsenaHandler.js.map +1 -0
- package/dist/lib/adapter/types/AsenaMiddlewareHandler.d.ts +2 -0
- package/dist/lib/adapter/types/AsenaMiddlewareHandler.js +2 -0
- package/dist/lib/adapter/types/AsenaMiddlewareHandler.js.map +1 -0
- package/dist/lib/adapter/types/BaseMiddleware.d.ts +57 -0
- package/dist/lib/adapter/types/BaseMiddleware.js +2 -0
- package/dist/lib/adapter/types/BaseMiddleware.js.map +1 -0
- package/dist/lib/adapter/types/ErrorHandler.d.ts +2 -0
- package/dist/lib/adapter/types/ErrorHandler.js +2 -0
- package/dist/lib/adapter/types/ErrorHandler.js.map +1 -0
- package/dist/lib/adapter/types/RouteParams.d.ts +8 -5
- package/dist/lib/adapter/types/ServeOptions.d.ts +7 -0
- package/dist/lib/adapter/types/ServeOptions.js +2 -0
- package/dist/lib/adapter/types/ServeOptions.js.map +1 -0
- package/dist/lib/adapter/types/WebSocketRegistry.d.ts +5 -4
- package/dist/lib/adapter/types/WebsocketAdapterParams.d.ts +1 -1
- package/dist/lib/adapter/types/index.d.ts +6 -0
- package/dist/lib/adapter/types/index.js +6 -0
- package/dist/lib/adapter/types/index.js.map +1 -1
- package/dist/lib/ioc/Container.d.ts +8 -3
- package/dist/lib/ioc/Container.js +100 -76
- package/dist/lib/ioc/Container.js.map +1 -1
- package/dist/lib/ioc/IocEngine.d.ts +2 -2
- package/dist/lib/ioc/IocEngine.js +28 -16
- package/dist/lib/ioc/IocEngine.js.map +1 -1
- package/dist/lib/ioc/component/componentUtils.d.ts +1 -1
- package/dist/lib/ioc/component/componentUtils.js +16 -12
- package/dist/lib/ioc/component/componentUtils.js.map +1 -1
- package/dist/lib/{server/decorators/components → ioc/component/decorators}/Component.d.ts +1 -1
- package/dist/lib/{server/decorators/components → ioc/component/decorators}/Component.js +2 -2
- package/dist/lib/ioc/component/decorators/Component.js.map +1 -0
- package/dist/lib/ioc/component/decorators/Implements.js +2 -2
- package/dist/lib/ioc/component/decorators/Implements.js.map +1 -1
- package/dist/lib/ioc/component/decorators/Inject.d.ts +1 -1
- package/dist/lib/ioc/component/decorators/Inject.js +6 -7
- package/dist/lib/ioc/component/decorators/Inject.js.map +1 -1
- package/dist/lib/ioc/component/decorators/PostConstruct.d.ts +6 -0
- package/dist/lib/ioc/component/decorators/PostConstruct.js +17 -0
- package/dist/lib/ioc/component/decorators/PostConstruct.js.map +1 -0
- package/dist/lib/ioc/component/decorators/Strategy.js +6 -6
- package/dist/lib/ioc/component/decorators/Strategy.js.map +1 -1
- package/dist/lib/ioc/component/decorators/index.d.ts +1 -0
- package/dist/lib/ioc/component/decorators/index.js +1 -0
- package/dist/lib/ioc/component/decorators/index.js.map +1 -1
- package/dist/lib/ioc/component/index.d.ts +1 -0
- package/dist/lib/ioc/component/index.js +2 -0
- package/dist/lib/ioc/component/index.js.map +1 -0
- package/dist/lib/ioc/constants/ComponentConstants.d.ts +4 -2
- package/dist/lib/ioc/constants/ComponentConstants.js +3 -1
- package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
- package/dist/lib/ioc/helper/fileHelper.d.ts +1 -1
- package/dist/lib/ioc/helper/fileHelper.js +9 -3
- package/dist/lib/ioc/helper/fileHelper.js.map +1 -1
- package/dist/lib/ioc/helper/iocHelper.d.ts +2 -3
- package/dist/lib/ioc/helper/iocHelper.js +4 -2
- package/dist/lib/ioc/helper/iocHelper.js.map +1 -1
- package/dist/lib/ioc/types/{Component.d.ts → InjectableComponent.d.ts} +4 -4
- package/dist/lib/ioc/types/InjectableComponent.js +2 -0
- package/dist/lib/ioc/types/InjectableComponent.js.map +1 -0
- package/dist/lib/ioc/types/IocConfig.d.ts +1 -0
- package/dist/lib/ioc/types/decorators/ComponentParams.d.ts +1 -1
- package/dist/lib/ioc/types/decorators/ComponentType.d.ts +2 -2
- package/dist/lib/ioc/types/decorators/ComponentType.js +1 -1
- package/dist/lib/ioc/types/decorators/ComponentType.js.map +1 -1
- package/dist/lib/ioc/types/decorators/ControllerParams.d.ts +4 -3
- package/dist/lib/ioc/types/decorators/MiddlewareParams.d.ts +1 -1
- package/dist/lib/ioc/types/index.d.ts +1 -1
- package/dist/lib/ioc/types/index.js +1 -1
- package/dist/lib/ioc/types/index.js.map +1 -1
- package/dist/lib/{services/logger → logger}/DefaultLogger.d.ts +1 -1
- package/dist/lib/logger/DefaultLogger.js.map +1 -0
- package/dist/lib/{services/types → logger}/Logger.js.map +1 -1
- package/dist/lib/logger/index.d.ts +2 -0
- package/dist/lib/logger/index.js +3 -0
- package/dist/lib/logger/index.js.map +1 -0
- package/dist/lib/server/AsenaServer.d.ts +15 -14
- package/dist/lib/server/AsenaServer.js +125 -113
- package/dist/lib/server/AsenaServer.js.map +1 -1
- package/dist/lib/server/config/AsenaConfig.d.ts +43 -0
- package/dist/lib/server/config/AsenaConfig.js +2 -0
- package/dist/lib/server/config/AsenaConfig.js.map +1 -0
- package/dist/lib/server/config/index.d.ts +1 -0
- package/dist/lib/server/config/index.js +2 -0
- package/dist/lib/server/config/index.js.map +1 -0
- package/dist/lib/server/decorators/Override.d.ts +4 -4
- package/dist/lib/server/decorators/Override.js +11 -7
- package/dist/lib/server/decorators/Override.js.map +1 -1
- package/dist/lib/server/decorators/components/Config.d.ts +10 -0
- package/dist/lib/server/decorators/components/Config.js +14 -0
- package/dist/lib/server/decorators/components/Config.js.map +1 -0
- package/dist/lib/server/decorators/components/Controller.js +4 -4
- package/dist/lib/server/decorators/components/Controller.js.map +1 -1
- package/dist/lib/server/decorators/components/Middleware.d.ts +1 -1
- package/dist/lib/server/decorators/components/Middleware.js +19 -9
- package/dist/lib/server/decorators/components/Middleware.js.map +1 -1
- package/dist/lib/server/decorators/components/Schedule.d.ts +2 -2
- package/dist/lib/server/decorators/components/Schedule.js +7 -7
- package/dist/lib/server/decorators/components/Schedule.js.map +1 -1
- package/dist/lib/server/decorators/components/Service.d.ts +1 -1
- package/dist/lib/server/decorators/components/Service.js +2 -2
- package/dist/lib/server/decorators/components/Service.js.map +1 -1
- package/dist/lib/server/decorators/components/WebSocket.js +4 -4
- package/dist/lib/server/decorators/components/WebSocket.js.map +1 -1
- package/dist/lib/server/decorators/components/index.d.ts +1 -2
- package/dist/lib/server/decorators/components/index.js +1 -2
- package/dist/lib/server/decorators/components/index.js.map +1 -1
- package/dist/lib/server/decorators/index.d.ts +2 -1
- package/dist/lib/server/decorators/index.js +2 -1
- package/dist/lib/server/decorators/index.js.map +1 -1
- package/dist/lib/server/types/Class.d.ts +0 -3
- package/dist/lib/server/types/index.d.ts +2 -2
- package/dist/lib/server/types/index.js +2 -2
- package/dist/lib/server/types/index.js.map +1 -1
- package/dist/lib/server/web/decorators/http.base.d.ts +4 -0
- package/dist/lib/server/web/decorators/http.base.js +35 -0
- package/dist/lib/server/web/decorators/http.base.js.map +1 -0
- package/dist/lib/server/web/decorators/index.d.ts +4 -0
- package/dist/lib/server/web/decorators/index.js +5 -0
- package/dist/lib/server/web/decorators/index.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Connect.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Connect.js +12 -0
- package/dist/lib/server/web/decorators/methods/Connect.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Delete.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Delete.js +12 -0
- package/dist/lib/server/web/decorators/methods/Delete.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Get.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Get.js +12 -0
- package/dist/lib/server/web/decorators/methods/Get.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Head.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Head.js +12 -0
- package/dist/lib/server/web/decorators/methods/Head.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Options.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Options.js +12 -0
- package/dist/lib/server/web/decorators/methods/Options.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Patch.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Patch.js +12 -0
- package/dist/lib/server/web/decorators/methods/Patch.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Post.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Post.js +12 -0
- package/dist/lib/server/web/decorators/methods/Post.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Put.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Put.js +12 -0
- package/dist/lib/server/web/decorators/methods/Put.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/Trace.d.ts +7 -0
- package/dist/lib/server/web/decorators/methods/Trace.js +12 -0
- package/dist/lib/server/web/decorators/methods/Trace.js.map +1 -0
- package/dist/lib/server/web/decorators/methods/index.d.ts +9 -0
- package/dist/lib/server/web/decorators/methods/index.js +10 -0
- package/dist/lib/server/web/decorators/methods/index.js.map +1 -0
- package/dist/lib/server/web/helper/middlewareHelper.d.ts +8 -2
- package/dist/lib/server/web/helper/middlewareHelper.js +11 -5
- package/dist/lib/server/web/helper/middlewareHelper.js.map +1 -1
- package/dist/lib/server/web/middleware/AsenaMiddlewareService.d.ts +8 -10
- package/dist/lib/server/web/middleware/AsenaMiddlewareService.js +1 -4
- package/dist/lib/server/web/middleware/AsenaMiddlewareService.js.map +1 -1
- package/dist/lib/server/web/middleware/AsenaValidationService.d.ts +15 -16
- package/dist/lib/server/web/middleware/AsenaValidationService.js +1 -8
- package/dist/lib/server/web/middleware/AsenaValidationService.js.map +1 -1
- package/dist/lib/server/web/types/HttpMethod.js.map +1 -0
- package/dist/lib/server/web/types/HttpStatus.d.ts +79 -0
- package/dist/lib/server/web/types/HttpStatus.js +85 -0
- package/dist/lib/server/web/types/HttpStatus.js.map +1 -0
- package/dist/lib/server/web/types/index.d.ts +2 -2
- package/dist/lib/server/web/types/index.js +2 -2
- package/dist/lib/server/web/types/index.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaSocket.d.ts +1 -0
- package/dist/lib/server/web/websocket/AsenaSocket.js +4 -0
- package/dist/lib/server/web/websocket/AsenaSocket.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.d.ts +39 -0
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.js +41 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketService.js +4 -4
- package/dist/lib/server/web/websocket/AsenaWebSocketService.js.map +1 -1
- package/dist/lib/server/web/websocket/index.d.ts +1 -0
- package/dist/lib/server/web/websocket/index.js +1 -0
- package/dist/lib/server/web/websocket/index.js.map +1 -1
- package/dist/lib/utils/typedMetadata.d.ts +3 -0
- package/dist/lib/utils/typedMetadata.js +16 -0
- package/dist/lib/utils/typedMetadata.js.map +1 -0
- package/package.json +55 -6
- package/dist/lib/adapter/defaultAdapter/DefaultAdapter.d.ts +0 -26
- package/dist/lib/adapter/defaultAdapter/DefaultAdapter.js +0 -92
- package/dist/lib/adapter/defaultAdapter/DefaultAdapter.js.map +0 -1
- package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.d.ts +0 -32
- package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.js +0 -97
- package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.js.map +0 -1
- package/dist/lib/adapter/defaultAdapter/DefaultWebsocketAdapter.d.ts +0 -15
- package/dist/lib/adapter/defaultAdapter/DefaultWebsocketAdapter.js +0 -77
- package/dist/lib/adapter/defaultAdapter/DefaultWebsocketAdapter.js.map +0 -1
- package/dist/lib/adapter/defaultAdapter/index.d.ts +0 -3
- package/dist/lib/adapter/defaultAdapter/index.js +0 -4
- package/dist/lib/adapter/defaultAdapter/index.js.map +0 -1
- package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.d.ts +0 -3
- package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.js +0 -2
- package/dist/lib/adapter/defaultAdapter/types/Defaultcontext.js.map +0 -1
- package/dist/lib/adapter/defaultAdapter/types/Handler.d.ts +0 -4
- package/dist/lib/adapter/defaultAdapter/types/Handler.js +0 -2
- package/dist/lib/adapter/defaultAdapter/types/Handler.js.map +0 -1
- package/dist/lib/adapter/defaultAdapter/types/index.d.ts +0 -2
- package/dist/lib/adapter/defaultAdapter/types/index.js +0 -3
- package/dist/lib/adapter/defaultAdapter/types/index.js.map +0 -1
- package/dist/lib/ioc/types/Component.js +0 -2
- package/dist/lib/ioc/types/Component.js.map +0 -1
- package/dist/lib/server/decorators/components/Component.js.map +0 -1
- package/dist/lib/server/decorators/components/ServerService.d.ts +0 -9
- package/dist/lib/server/decorators/components/ServerService.js +0 -13
- package/dist/lib/server/decorators/components/ServerService.js.map +0 -1
- package/dist/lib/server/web/api/apiHandler.d.ts +0 -55
- package/dist/lib/server/web/api/apiHandler.js +0 -107
- package/dist/lib/server/web/api/apiHandler.js.map +0 -1
- package/dist/lib/server/web/api/index.d.ts +0 -1
- package/dist/lib/server/web/api/index.js +0 -2
- package/dist/lib/server/web/api/index.js.map +0 -1
- package/dist/lib/server/web/http/HttpMethod.js.map +0 -1
- package/dist/lib/server/web/http/HttpStatus.d.ts +0 -77
- package/dist/lib/server/web/http/HttpStatus.js +0 -84
- package/dist/lib/server/web/http/HttpStatus.js.map +0 -1
- package/dist/lib/server/web/http/index.d.ts +0 -2
- package/dist/lib/server/web/http/index.js +0 -3
- package/dist/lib/server/web/http/index.js.map +0 -1
- package/dist/lib/server/web/types/ApiHandler.d.ts +0 -22
- package/dist/lib/server/web/types/ApiHandler.js +0 -2
- package/dist/lib/server/web/types/ApiHandler.js.map +0 -1
- package/dist/lib/server/web/types/BaseMiddleware.d.ts +0 -12
- package/dist/lib/server/web/types/BaseMiddleware.js +0 -2
- package/dist/lib/server/web/types/BaseMiddleware.js.map +0 -1
- package/dist/lib/services/index.d.ts +0 -3
- package/dist/lib/services/index.js +0 -4
- package/dist/lib/services/index.js.map +0 -1
- package/dist/lib/services/logger/DefaultLogger.js.map +0 -1
- package/dist/lib/services/serverService/AsenaService.d.ts +0 -7
- package/dist/lib/services/serverService/AsenaService.js +0 -7
- package/dist/lib/services/serverService/AsenaService.js.map +0 -1
- package/dist/lib/services/types/index.d.ts +0 -2
- package/dist/lib/services/types/index.js +0 -3
- package/dist/lib/services/types/index.js.map +0 -1
- /package/dist/lib/{services/logger → logger}/DefaultLogger.js +0 -0
- /package/dist/lib/{services/types → logger}/Logger.d.ts +0 -0
- /package/dist/lib/{services/types → logger}/Logger.js +0 -0
- /package/dist/lib/server/web/{http → types}/HttpMethod.d.ts +0 -0
- /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
|
|
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":
|
|
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
|
-
|
|
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 .
|
|
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
|
|
89
|
-
|
|
90
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
##
|
|
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
|
-
|
|
196
|
-
|
|
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
|
-
|
|
203
|
-
```
|
|
166
|
+
## Project Structure
|
|
204
167
|
|
|
205
|
-
then run
|
|
206
|
-
```bash
|
|
207
|
-
asena dev start
|
|
208
168
|
```
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
- **
|
|
241
|
-
- **
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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 '../
|
|
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
|
|
12
|
-
* @template
|
|
13
|
-
* @template
|
|
14
|
-
* @template
|
|
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
|
|
16
|
+
export declare abstract class AsenaAdapter<A, C extends AsenaContext<any, any>, VS, WSA extends AsenaWebsocketAdapter<A, C>> {
|
|
19
17
|
/**
|
|
20
|
-
* The
|
|
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
|
-
*
|
|
26
|
+
* WebSocket adapter instance for handling real-time communications
|
|
25
27
|
*/
|
|
26
28
|
websocketAdapter: WSA;
|
|
27
29
|
/**
|
|
28
|
-
*
|
|
30
|
+
* Server port number
|
|
29
31
|
*/
|
|
30
32
|
protected port: number;
|
|
31
33
|
/**
|
|
32
|
-
*
|
|
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
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* @param
|
|
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
|
-
|
|
42
|
+
protected constructor(websocketAdapter: WSA, logger?: ServerLogger);
|
|
49
43
|
/**
|
|
50
|
-
*
|
|
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
|
|
47
|
+
abstract setPort(port: number): void;
|
|
55
48
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* @param
|
|
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
|
|
53
|
+
abstract use(middleware: BaseMiddleware<C>, path?: string): Promise<void> | void;
|
|
62
54
|
/**
|
|
63
|
-
*
|
|
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
|
|
58
|
+
abstract registerRoute(params: RouteParams<C, VS>): Promise<void> | void;
|
|
69
59
|
/**
|
|
70
|
-
*
|
|
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
|
|
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:
|
|
68
|
+
abstract onError(errorHandler: ErrorHandler<C>): Promise<void> | void;
|
|
81
69
|
/**
|
|
82
|
-
*
|
|
70
|
+
* Configures server options.
|
|
83
71
|
*
|
|
84
|
-
* @param
|
|
85
|
-
*
|
|
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
|
|
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
|
|
6
|
-
* @template
|
|
7
|
-
* @template
|
|
8
|
-
* @template
|
|
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
|
|
13
|
+
* The name identifier of the adapter
|
|
14
|
+
*/
|
|
15
|
+
name;
|
|
16
|
+
/**
|
|
17
|
+
* The main application instance
|
|
15
18
|
*/
|
|
16
19
|
app;
|
|
17
20
|
/**
|
|
18
|
-
*
|
|
21
|
+
* WebSocket adapter instance for handling real-time communications
|
|
19
22
|
*/
|
|
20
23
|
websocketAdapter;
|
|
21
24
|
/**
|
|
22
|
-
*
|
|
25
|
+
* Server port number
|
|
23
26
|
*/
|
|
24
27
|
port;
|
|
25
28
|
/**
|
|
26
|
-
*
|
|
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":"
|
|
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"}
|