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