@asenajs/asena 0.1.18 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -64
- package/dist/index.d.ts +1 -10
- package/dist/index.js +1 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter/AsenaAdapter.d.ts +46 -53
- 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 +58 -34
- package/dist/lib/adapter/AsenaWebsocketAdapter.js +43 -12
- package/dist/lib/adapter/AsenaWebsocketAdapter.js.map +1 -1
- package/dist/lib/adapter/hono/HonoAdapter.d.ts +28 -0
- package/dist/lib/adapter/{defaultAdapter/DefaultAdapter.js → hono/HonoAdapter.js} +57 -35
- package/dist/lib/adapter/hono/HonoAdapter.js.map +1 -0
- package/dist/lib/adapter/{defaultAdapter/DefaultContextWrapper.d.ts → hono/HonoContextWrapper.d.ts} +4 -4
- package/dist/lib/adapter/{defaultAdapter/DefaultContextWrapper.js → hono/HonoContextWrapper.js} +6 -6
- package/dist/lib/adapter/hono/HonoContextWrapper.js.map +1 -0
- package/dist/lib/adapter/{defaultAdapter/DefaultWebsocketAdapter.d.ts → hono/HonoWebsocketAdapter.d.ts} +9 -5
- package/dist/lib/adapter/{defaultAdapter/DefaultWebsocketAdapter.js → hono/HonoWebsocketAdapter.js} +34 -24
- package/dist/lib/adapter/hono/HonoWebsocketAdapter.js.map +1 -0
- package/dist/lib/adapter/hono/defaults/ConfigService.d.ts +4 -0
- package/dist/lib/adapter/hono/defaults/ConfigService.js +3 -0
- package/dist/lib/adapter/hono/defaults/ConfigService.js.map +1 -0
- package/dist/lib/adapter/hono/defaults/Context.js +2 -0
- package/dist/lib/adapter/hono/defaults/Context.js.map +1 -0
- package/dist/lib/adapter/hono/defaults/MiddlewareService.d.ts +5 -0
- package/dist/lib/adapter/hono/defaults/MiddlewareService.js +4 -0
- package/dist/lib/adapter/hono/defaults/MiddlewareService.js.map +1 -0
- package/dist/lib/adapter/hono/defaults/ValidationService.d.ts +10 -0
- package/dist/lib/adapter/hono/defaults/ValidationService.js +3 -0
- package/dist/lib/adapter/hono/defaults/ValidationService.js.map +1 -0
- package/dist/lib/adapter/hono/defaults/index.d.ts +4 -0
- package/dist/lib/adapter/hono/defaults/index.js +5 -0
- package/dist/lib/adapter/hono/defaults/index.js.map +1 -0
- package/dist/lib/adapter/hono/index.d.ts +6 -0
- package/dist/lib/adapter/hono/index.js +7 -0
- package/dist/lib/adapter/hono/index.js.map +1 -0
- package/dist/lib/adapter/hono/types/HonoHandler.d.ts +5 -0
- package/dist/lib/adapter/hono/types/HonoHandler.js +2 -0
- package/dist/lib/adapter/hono/types/HonoHandler.js.map +1 -0
- package/dist/lib/adapter/hono/types/index.d.ts +2 -0
- package/dist/lib/adapter/hono/types/index.js +3 -0
- package/dist/lib/adapter/hono/types/index.js.map +1 -0
- package/dist/lib/adapter/hono/utils/createHonoAdapter.d.ts +3 -0
- package/dist/lib/adapter/hono/utils/createHonoAdapter.js +6 -0
- package/dist/lib/adapter/hono/utils/createHonoAdapter.js.map +1 -0
- package/dist/lib/adapter/hono/utils/middlewareParser.d.ts +4 -0
- package/dist/lib/adapter/hono/utils/middlewareParser.js +15 -0
- package/dist/lib/adapter/hono/utils/middlewareParser.js.map +1 -0
- 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/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/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 +7 -4
- 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 +3 -0
- package/dist/lib/adapter/types/index.js +3 -0
- package/dist/lib/adapter/types/index.js.map +1 -1
- package/dist/lib/ioc/Container.d.ts +7 -3
- package/dist/lib/ioc/Container.js +68 -72
- package/dist/lib/ioc/Container.js.map +1 -1
- package/dist/lib/ioc/IocEngine.d.ts +2 -2
- package/dist/lib/ioc/IocEngine.js +15 -15
- 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/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/index.d.ts +1 -0
- package/dist/lib/server/index.js +1 -0
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/types/Class.d.ts +0 -3
- 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 +7 -1
- 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/http/HttpStatus.d.ts +69 -67
- package/dist/lib/server/web/http/HttpStatus.js +69 -68
- package/dist/lib/server/web/http/HttpStatus.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/ApiParams.d.ts +73 -0
- package/dist/lib/server/web/types/ApiParams.js +2 -0
- package/dist/lib/server/web/types/ApiParams.js.map +1 -0
- package/dist/lib/server/web/types/BaseMiddleware.d.ts +50 -5
- package/dist/lib/server/web/types/BaseMiddleware.js +1 -1
- package/dist/lib/server/web/types/BaseMiddleware.js.map +1 -1
- package/dist/lib/server/web/types/index.d.ts +1 -1
- package/dist/lib/server/web/types/index.js +1 -1
- package/dist/lib/server/web/types/index.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaSocket.js +1 -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 +40 -0
- 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/utils/typedMetadata.d.ts +2 -0
- package/dist/lib/utils/typedMetadata.js +13 -0
- package/dist/lib/utils/typedMetadata.js.map +1 -0
- package/package.json +53 -5
- package/dist/lib/adapter/defaultAdapter/DefaultAdapter.d.ts +0 -26
- package/dist/lib/adapter/defaultAdapter/DefaultAdapter.js.map +0 -1
- package/dist/lib/adapter/defaultAdapter/DefaultContextWrapper.js.map +0 -1
- 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.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/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/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/adapter/{defaultAdapter/types/Defaultcontext.d.ts → hono/defaults/Context.d.ts} +0 -0
- /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/README.md
CHANGED
|
@@ -22,9 +22,10 @@ First, create a new project using Bun:
|
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
bun init
|
|
25
|
-
|
|
25
|
+
```
|
|
26
26
|
|
|
27
27
|
For decorators working properly, you need to add some settings to your tsconfig. Here is an recommended file:
|
|
28
|
+
|
|
28
29
|
```json
|
|
29
30
|
{
|
|
30
31
|
"compilerOptions": {
|
|
@@ -55,26 +56,26 @@ For decorators working properly, you need to add some settings to your tsconfig.
|
|
|
55
56
|
"noPropertyAccessFromIndexSignature": true
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
|
-
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Then, install the required packages:
|
|
62
|
+
|
|
62
63
|
```bash
|
|
63
64
|
|
|
64
65
|
bun add @asenajs/asena hono winston
|
|
65
66
|
```
|
|
67
|
+
|
|
66
68
|
Add @asenajs/asena-cli to your package. This package provides a CLI for creating and managing Asena projects.
|
|
67
69
|
|
|
68
70
|
```bash
|
|
69
71
|
bun add -D @asenajs/asena-cli
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
```
|
|
72
73
|
|
|
73
|
-
Then, create a new .
|
|
74
|
+
Then, create a new asena-config.ts file using the CLI:
|
|
74
75
|
|
|
75
76
|
```bash
|
|
76
77
|
|
|
77
|
-
## Creates a .
|
|
78
|
+
## Creates a asena-config.ts file with default values (requires manual updates). Source folder is 'src'.
|
|
78
79
|
asena init
|
|
79
80
|
```
|
|
80
81
|
|
|
@@ -85,24 +86,26 @@ Create index.ts file under your src folder:
|
|
|
85
86
|
|
|
86
87
|
```typescript
|
|
87
88
|
// src/index.ts
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await new AsenaServer().logger(new DefaultLogger()).port(3000).start();
|
|
89
|
+
const [adapter, serverLogger] = createHonoAdapter(new DefaultLogger());
|
|
90
|
+
await new AsenaServer(adapter, serverLogger).port(3000).start(true);
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
To run asena you need at least one controller. Create a new controller:
|
|
94
94
|
|
|
95
95
|
```typescript
|
|
96
96
|
// src/controllers/TestController.ts
|
|
97
|
-
import
|
|
97
|
+
import type { Context } from '@asenajs/asena/adapter/hono';
|
|
98
|
+
import { Controller } from '@asenajs/asena/server';
|
|
99
|
+
import { Get } from '@asenajs/asena/web';
|
|
98
100
|
|
|
99
|
-
@Controller(
|
|
101
|
+
@Controller('/hello')
|
|
100
102
|
export class TestController {
|
|
101
103
|
|
|
102
|
-
@Get(
|
|
104
|
+
@Get('/world')
|
|
103
105
|
public async getHello(context: Context) {
|
|
104
|
-
return context.send(
|
|
106
|
+
return context.send('Hello World');
|
|
105
107
|
}
|
|
108
|
+
|
|
106
109
|
}
|
|
107
110
|
```
|
|
108
111
|
|
|
@@ -111,12 +114,13 @@ Finally, run the project:
|
|
|
111
114
|
```bash
|
|
112
115
|
|
|
113
116
|
## only for fast developing purposes
|
|
114
|
-
asena dev start
|
|
115
|
-
|
|
117
|
+
asena dev start
|
|
118
|
+
```
|
|
119
|
+
|
|
116
120
|
```bash
|
|
117
121
|
## or you can simply build then run your bundled project
|
|
118
122
|
asena build
|
|
119
|
-
## then go to dist folder and run the project this way it will consume less memory
|
|
123
|
+
## then go to dist folder and run the project this way it will consume less memory
|
|
120
124
|
bun index.asena.js
|
|
121
125
|
```
|
|
122
126
|
|
|
@@ -125,106 +129,113 @@ bun index.asena.js
|
|
|
125
129
|
Here is a simple example of a controller with service and middleware:
|
|
126
130
|
|
|
127
131
|
### Middleware
|
|
132
|
+
|
|
128
133
|
This middleware sets a value to the context object.
|
|
134
|
+
|
|
129
135
|
```typescript
|
|
130
136
|
// src/middleware/TestMiddleware.ts
|
|
131
|
-
import
|
|
137
|
+
import type { AsenaNextHandler } from '@asenajs/asena/adapter';
|
|
138
|
+
import type { Context, MiddlewareService } from '@asenajs/asena/adapter/hono';
|
|
139
|
+
import { Middleware } from '@asenajs/asena/server';
|
|
132
140
|
|
|
133
141
|
@Middleware()
|
|
134
|
-
export class TestMiddleware
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
context.setValue("testValue", "test");
|
|
142
|
+
export class TestMiddleware implements MiddlewareService {
|
|
143
|
+
public handle(context: Context, next: AsenaNextHandler) {
|
|
144
|
+
context.setValue('testValue', 'test');
|
|
138
145
|
|
|
139
|
-
|
|
140
|
-
|
|
146
|
+
next();
|
|
147
|
+
}
|
|
141
148
|
}
|
|
142
149
|
```
|
|
143
150
|
|
|
144
151
|
### Service
|
|
152
|
+
|
|
145
153
|
Basic service with a getter and setter.
|
|
146
154
|
|
|
147
155
|
```typescript
|
|
148
|
-
import {Service} from
|
|
156
|
+
import { Service } from '@asenajs/asena/server';
|
|
149
157
|
|
|
150
158
|
@Service()
|
|
151
159
|
export class HelloService {
|
|
160
|
+
private _foo = 'bar';
|
|
152
161
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
return this._foo;
|
|
157
|
-
}
|
|
162
|
+
public get foo(): string {
|
|
163
|
+
return this._foo;
|
|
164
|
+
}
|
|
158
165
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
166
|
+
public set foo(value: string) {
|
|
167
|
+
this._foo = value;
|
|
168
|
+
}
|
|
162
169
|
}
|
|
163
|
-
|
|
164
170
|
```
|
|
165
171
|
|
|
166
172
|
### Controller
|
|
173
|
+
|
|
167
174
|
Controller with a GET route that uses the middleware and service.
|
|
168
175
|
|
|
169
176
|
```typescript
|
|
170
177
|
// src/controller/TestController.ts
|
|
171
|
-
import {type Context, Controller, Get, Inject} from
|
|
172
|
-
import {HelloService} from
|
|
173
|
-
import {TestMiddleware} from
|
|
178
|
+
import { type Context, Controller, Get, Inject } from '@asenajs/asena';
|
|
179
|
+
import { HelloService } from '../service/HelloService.ts';
|
|
180
|
+
import { TestMiddleware } from '../middleware/TestMiddleware.ts';
|
|
174
181
|
|
|
175
|
-
@Controller(
|
|
182
|
+
@Controller('/v1')
|
|
176
183
|
export class TestController {
|
|
184
|
+
@Inject(HelloService)
|
|
185
|
+
private helloService: HelloService;
|
|
177
186
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
public async getFoo(context: Context) {
|
|
183
|
-
return context.send(this.helloService.foo);
|
|
184
|
-
}
|
|
187
|
+
@Get('foo')
|
|
188
|
+
public async getFoo(context: Context) {
|
|
189
|
+
return context.send(this.helloService.foo);
|
|
190
|
+
}
|
|
185
191
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
192
|
+
@Get({ path: 'world', middlewares: [TestMiddleware] })
|
|
193
|
+
public async getHello(context: Context) {
|
|
194
|
+
const testValue: string = context.getValue('testValue');
|
|
189
195
|
|
|
190
|
-
|
|
191
|
-
|
|
196
|
+
return context.send(testValue);
|
|
197
|
+
}
|
|
192
198
|
}
|
|
193
199
|
```
|
|
194
200
|
|
|
195
201
|
### Index
|
|
202
|
+
|
|
196
203
|
The main file that starts the server.
|
|
197
204
|
|
|
198
205
|
```typescript
|
|
199
206
|
// src/index.ts
|
|
200
|
-
import {AsenaServer,
|
|
207
|
+
import { AsenaServer, createHonoAdapter } from '@asenajs/asena';
|
|
208
|
+
import { DefaultLogger } from '@asenajs/asena/logger';
|
|
201
209
|
|
|
202
|
-
|
|
210
|
+
const [adapter, serverLogger] = createHonoAdapter(new DefaultLogger());
|
|
211
|
+
await new AsenaServer(adapter, serverLogger).port(3000).start(true);
|
|
203
212
|
```
|
|
204
213
|
|
|
205
214
|
then run
|
|
215
|
+
|
|
206
216
|
```bash
|
|
207
217
|
asena dev start
|
|
208
218
|
```
|
|
209
219
|
|
|
210
220
|
You should see the following output:
|
|
221
|
+
|
|
211
222
|
```text
|
|
212
223
|
|
|
213
|
-
Build completed successfully.
|
|
214
|
-
2024-11-19 17:58:35 [info]:
|
|
215
|
-
___ _____ ______ _ __ ___
|
|
224
|
+
Build completed successfully.
|
|
225
|
+
2024-11-19 17:58:35 [info]:
|
|
226
|
+
___ _____ ______ _ __ ___
|
|
216
227
|
/ | / ___/ / ____// | / // |
|
|
217
228
|
/ /| | \__ \ / __/ / |/ // /| |
|
|
218
229
|
/ ___ | ___/ // /___ / /| // ___ |
|
|
219
|
-
/_/ |_|/____//_____//_/ |_//_/ |_|
|
|
220
|
-
|
|
221
|
-
2024-11-19 17:58:35 [info]: IoC initialized
|
|
222
|
-
2024-11-19 17:58:35 [info]: No server services found
|
|
223
|
-
2024-11-19 17:58:35 [info]: Controller: V1 found
|
|
224
|
-
2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/foo
|
|
225
|
-
2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/world
|
|
226
|
-
2024-11-19 17:58:35 [info]: No websockets found
|
|
227
|
-
2024-11-19 17:58:35 [info]: Server started on port 3000
|
|
230
|
+
/_/ |_|/____//_____//_/ |_//_/ |_|
|
|
231
|
+
|
|
232
|
+
2024-11-19 17:58:35 [info]: IoC initialized
|
|
233
|
+
2024-11-19 17:58:35 [info]: No server services found
|
|
234
|
+
2024-11-19 17:58:35 [info]: Controller: V1 found
|
|
235
|
+
2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/foo
|
|
236
|
+
2024-11-19 17:58:35 [info]: Successfully registered GET route for PATH: /v1/world
|
|
237
|
+
2024-11-19 17:58:35 [info]: No websockets found
|
|
238
|
+
2024-11-19 17:58:35 [info]: Server started on port 3000
|
|
228
239
|
```
|
|
229
240
|
|
|
230
241
|
and you see the result on your browser [http://localhost:3000/v1/foo](http://localhost:3000/v1/foo) with "bar" message.
|
|
@@ -267,7 +278,7 @@ the project:
|
|
|
267
278
|
### Performance Comparison (Fastest to Slowest)
|
|
268
279
|
|
|
269
280
|
| Framework | Requests/sec | Latency (avg) | Transfer/sec |
|
|
270
|
-
|
|
281
|
+
| ------------------------------------ | ------------ | ------------- | ------------ |
|
|
271
282
|
| Hono | 147,031.08 | 2.69ms | 18.09MB |
|
|
272
283
|
| Asena | 137,148.80 | 2.89ms | 16.74MB |
|
|
273
284
|
| NestJS (Bun + Fastify) | 81,652.05 | 6.01ms | 13.78MB |
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1 @@
|
|
|
1
|
-
export { AsenaServer } from './lib/server';
|
|
2
|
-
export * from './lib/server/web/middleware';
|
|
3
|
-
export * from './lib/services';
|
|
4
|
-
export * from './lib/adapter';
|
|
5
|
-
export * from './lib/adapter/defaultAdapter';
|
|
6
|
-
export { Implements } from './lib/ioc/component/decorators/Implements';
|
|
7
|
-
export { Inject } from './lib/ioc/component/decorators/Inject';
|
|
8
|
-
export * from './lib/server/web/api';
|
|
9
|
-
export * from './lib/server/web/websocket';
|
|
10
|
-
export * from './lib/server/decorators';
|
|
1
|
+
export { AsenaServer, createHonoAdapter } from './lib/server';
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
export { AsenaServer } from './lib/server';
|
|
2
|
-
export * from './lib/server/web/middleware';
|
|
3
|
-
export * from './lib/services';
|
|
4
|
-
export * from './lib/adapter';
|
|
5
|
-
export * from './lib/adapter/defaultAdapter';
|
|
6
|
-
export { Implements } from './lib/ioc/component/decorators/Implements';
|
|
7
|
-
export { Inject } from './lib/ioc/component/decorators/Inject';
|
|
8
|
-
export * from './lib/server/web/api';
|
|
9
|
-
export * from './lib/server/web/websocket';
|
|
10
|
-
export * from './lib/server/decorators';
|
|
1
|
+
export { AsenaServer, createHonoAdapter } from './lib/server';
|
|
11
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,
|
|
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 '../
|
|
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
|
|
12
|
-
* @template
|
|
13
|
-
* @template
|
|
14
|
-
* @template
|
|
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
|
|
17
|
+
export declare abstract class AsenaAdapter<A, C extends AsenaContext<any, any>, VS, WSA extends AsenaWebsocketAdapter<A, C>> {
|
|
19
18
|
/**
|
|
20
|
-
* The
|
|
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
|
-
*
|
|
27
|
+
* WebSocket adapter instance for handling real-time communications
|
|
25
28
|
*/
|
|
26
29
|
websocketAdapter: WSA;
|
|
27
30
|
/**
|
|
28
|
-
*
|
|
31
|
+
* Server port number
|
|
29
32
|
*/
|
|
30
33
|
protected port: number;
|
|
31
34
|
/**
|
|
32
|
-
*
|
|
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
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* @param
|
|
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
|
-
|
|
43
|
+
protected constructor(websocketAdapter: WSA, logger?: ServerLogger);
|
|
49
44
|
/**
|
|
50
|
-
*
|
|
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
|
|
48
|
+
abstract setPort(port: number): void;
|
|
55
49
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* @param
|
|
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
|
|
54
|
+
abstract use(middleware: BaseMiddleware<C>, path?: string): Promise<void> | void;
|
|
62
55
|
/**
|
|
63
|
-
*
|
|
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
|
|
59
|
+
abstract registerRoute(params: RouteParams<C, VS>): Promise<void> | void;
|
|
69
60
|
/**
|
|
70
|
-
*
|
|
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
|
|
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:
|
|
69
|
+
abstract onError(errorHandler: ErrorHandler<C>): Promise<void> | void;
|
|
81
70
|
/**
|
|
82
|
-
*
|
|
71
|
+
* Configures server options.
|
|
83
72
|
*
|
|
84
|
-
* @param
|
|
85
|
-
*
|
|
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
|
|
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
|
|
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":"AAOA
|
|
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"}
|