@asenajs/asena 0.3.3 → 0.4.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 +165 -140
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/adapter/AsenaAdapter.d.ts +19 -3
- package/dist/lib/adapter/AsenaAdapter.js.map +1 -1
- package/dist/lib/adapter/AsenaWebsocketAdapter.d.ts +2 -2
- package/dist/lib/adapter/AsenaWebsocketAdapter.js.map +1 -1
- package/dist/lib/adapter/types/RouteParams.d.ts +3 -0
- package/dist/lib/adapter/types/ServeOptions.d.ts +2 -2
- package/dist/lib/adapter/types/index.d.ts +4 -4
- package/dist/lib/adapter/types/index.js +4 -4
- package/dist/lib/adapter/types/index.js.map +1 -1
- package/dist/lib/ioc/CircularDependencyDetector.d.ts +49 -0
- package/dist/lib/ioc/CircularDependencyDetector.js +69 -0
- package/dist/lib/ioc/CircularDependencyDetector.js.map +1 -0
- package/dist/lib/ioc/Container.d.ts +9 -0
- package/dist/lib/ioc/Container.js +42 -11
- package/dist/lib/ioc/Container.js.map +1 -1
- package/dist/lib/ioc/CoreContainer.d.ts +78 -0
- package/dist/lib/ioc/CoreContainer.js +135 -0
- package/dist/lib/ioc/CoreContainer.js.map +1 -0
- package/dist/lib/ioc/IocEngine.d.ts +16 -6
- package/dist/lib/ioc/IocEngine.js +35 -7
- package/dist/lib/ioc/IocEngine.js.map +1 -1
- package/dist/lib/ioc/component/index.d.ts +1 -1
- package/dist/lib/ioc/component/index.js +1 -1
- package/dist/lib/ioc/component/index.js.map +1 -1
- package/dist/lib/ioc/constants/ComponentConstants.d.ts +27 -18
- package/dist/lib/ioc/constants/ComponentConstants.js +34 -20
- package/dist/lib/ioc/constants/ComponentConstants.js.map +1 -1
- package/dist/lib/ioc/decorators/CoreService.d.ts +8 -0
- package/dist/lib/ioc/decorators/CoreService.js +27 -0
- package/dist/lib/ioc/decorators/CoreService.js.map +1 -0
- package/dist/lib/ioc/decorators/index.d.ts +1 -0
- package/dist/lib/ioc/decorators/index.js +2 -0
- package/dist/lib/ioc/decorators/index.js.map +1 -0
- package/dist/lib/ioc/index.d.ts +5 -0
- package/dist/lib/ioc/index.js +5 -0
- package/dist/lib/ioc/index.js.map +1 -1
- package/dist/lib/ioc/types/CoreBootstrapPhase.d.ts +15 -0
- package/dist/lib/ioc/types/CoreBootstrapPhase.js +17 -0
- package/dist/lib/ioc/types/CoreBootstrapPhase.js.map +1 -0
- package/dist/lib/ioc/types/ICoreService.d.ts +9 -0
- package/dist/lib/ioc/types/ICoreService.js +2 -0
- package/dist/lib/ioc/types/ICoreService.js.map +1 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.d.ts +18 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js +23 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js.map +1 -0
- package/dist/lib/ioc/types/decorators/ControllerParams.d.ts +1 -1
- package/dist/lib/ioc/types/index.d.ts +3 -0
- package/dist/lib/ioc/types/index.js +3 -0
- package/dist/lib/ioc/types/index.js.map +1 -1
- package/dist/lib/server/AsenaServer.d.ts +85 -14
- package/dist/lib/server/AsenaServer.js +169 -61
- package/dist/lib/server/AsenaServer.js.map +1 -1
- package/dist/lib/server/AsenaServerFactory.d.ts +26 -0
- package/dist/lib/server/AsenaServerFactory.js +58 -0
- package/dist/lib/server/AsenaServerFactory.js.map +1 -0
- package/dist/lib/server/config/AsenaConfig.d.ts +91 -18
- package/dist/lib/server/decorators/Override.js +1 -1
- package/dist/lib/server/decorators/Override.js.map +1 -1
- package/dist/lib/server/decorators/components/Config.d.ts +1 -1
- package/dist/lib/server/decorators/components/Config.js +1 -1
- package/dist/lib/server/decorators/components/Config.js.map +1 -1
- package/dist/lib/server/decorators/components/Controller.d.ts +1 -1
- package/dist/lib/server/decorators/components/Controller.js +2 -2
- package/dist/lib/server/decorators/components/Controller.js.map +1 -1
- package/dist/lib/server/decorators/components/Middleware.js +2 -2
- package/dist/lib/server/decorators/components/Middleware.js.map +1 -1
- package/dist/lib/server/decorators/components/Schedule.d.ts +1 -1
- package/dist/lib/server/decorators/components/Schedule.js +2 -2
- package/dist/lib/server/decorators/components/Schedule.js.map +1 -1
- package/dist/lib/server/decorators/components/WebSocket.d.ts +1 -1
- package/dist/lib/server/decorators/components/WebSocket.js +2 -2
- package/dist/lib/server/decorators/components/WebSocket.js.map +1 -1
- package/dist/lib/server/decorators/index.d.ts +2 -0
- package/dist/lib/server/decorators/index.js +2 -0
- package/dist/lib/server/decorators/index.js.map +1 -1
- package/dist/lib/server/index.d.ts +2 -0
- package/dist/lib/server/index.js +2 -0
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/src/services/PrepareConfigService.d.ts +9 -5
- package/dist/lib/server/src/services/PrepareConfigService.js +32 -7
- package/dist/lib/server/src/services/PrepareConfigService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareMiddlewareService.d.ts +8 -5
- package/dist/lib/server/src/services/PrepareMiddlewareService.js +28 -7
- package/dist/lib/server/src/services/PrepareMiddlewareService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareStaticServeConfigService.d.ts +8 -5
- package/dist/lib/server/src/services/PrepareStaticServeConfigService.js +27 -6
- package/dist/lib/server/src/services/PrepareStaticServeConfigService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareValidatorService.d.ts +8 -5
- package/dist/lib/server/src/services/PrepareValidatorService.js +27 -6
- package/dist/lib/server/src/services/PrepareValidatorService.js.map +1 -1
- package/dist/lib/server/src/services/PrepareWebsocketService.d.ts +8 -5
- package/dist/lib/server/src/services/PrepareWebsocketService.js +28 -9
- package/dist/lib/server/src/services/PrepareWebsocketService.js.map +1 -1
- package/dist/lib/server/web/decorators/http.base.d.ts +1 -1
- package/dist/lib/server/web/decorators/http.base.js.map +1 -1
- package/dist/lib/server/web/decorators/methods/Connect.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Delete.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Get.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Head.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Options.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Patch.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Post.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Put.d.ts +1 -1
- package/dist/lib/server/web/decorators/methods/Trace.d.ts +1 -1
- package/dist/lib/server/web/websocket/AsenaSocket.js.map +1 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.d.ts +1 -1
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.js.map +1 -1
- package/dist/lib/server/web/websocket/index.d.ts +1 -1
- package/dist/lib/server/web/websocket/index.js +1 -1
- package/dist/lib/server/web/websocket/index.js.map +1 -1
- package/dist/lib/utils/patternMatcher.d.ts +41 -0
- package/dist/lib/utils/patternMatcher.js +99 -0
- package/dist/lib/utils/patternMatcher.js.map +1 -0
- package/dist/lib/utils/typedMetadata.d.ts +3 -3
- package/dist/lib/utils/typedMetadata.js.map +1 -1
- package/package.json +12 -7
- package/dist/lib/server/src/PrepareService.d.ts +0 -8
- package/dist/lib/server/src/PrepareService.js +0 -9
- package/dist/lib/server/src/PrepareService.js.map +0 -1
|
@@ -1,92 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { ComponentType, CoreBootstrapPhase, CoreService, ICoreServiceNames, } from '../ioc';
|
|
4
11
|
import * as path from 'node:path';
|
|
5
12
|
import { ComponentConstants } from '../ioc/constants';
|
|
6
13
|
import * as bun from 'bun';
|
|
7
14
|
import { green, yellow } from '../logger';
|
|
8
15
|
import { getOwnTypedMetadata, getTypedMetadata } from '../utils/typedMetadata';
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
_components = [];
|
|
18
|
-
_ioc;
|
|
19
|
-
_logger;
|
|
16
|
+
import { Inject } from '../ioc/component';
|
|
17
|
+
/**
|
|
18
|
+
* @description AsenaServer - Main server class for Asena framework
|
|
19
|
+
* Now a core service managed by IoC container with field injection
|
|
20
|
+
*/
|
|
21
|
+
let AsenaServer = class AsenaServer {
|
|
22
|
+
serviceName = 'AsenaServer';
|
|
23
|
+
_coreContainer;
|
|
20
24
|
_adapter;
|
|
25
|
+
_logger;
|
|
21
26
|
prepareMiddleware;
|
|
22
27
|
prepareConfigService;
|
|
23
28
|
prepareWebsocketService;
|
|
24
29
|
prepareValidatorService;
|
|
25
30
|
prepareStaticServeConfigService;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
31
|
+
// Instance state
|
|
32
|
+
_port;
|
|
33
|
+
_gc = false;
|
|
34
|
+
controllers = [];
|
|
35
|
+
/**
|
|
36
|
+
* @description Lifecycle hook - called after dependencies are injected
|
|
37
|
+
* @returns {void}
|
|
38
|
+
*/
|
|
39
|
+
onInit() {
|
|
29
40
|
this._logger.info(`
|
|
30
41
|
___ _____ ______ _ __ ___
|
|
31
42
|
/ | / ___/ / ____// | / // |
|
|
32
43
|
/ /| | \\__ \\ / __/ / |/ // /| |
|
|
33
44
|
/ ___ | ___/ // /___ / /| // ___ |
|
|
34
45
|
/_/ |_|/____//_____//_/ |_//_/ |_|
|
|
35
|
-
|
|
46
|
+
`);
|
|
36
47
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
await this._ioc.searchAndRegister(this._components);
|
|
44
|
-
this.prepareMiddleware = new PrepareMiddlewareService(this._ioc.container, this._logger);
|
|
45
|
-
this.prepareConfigService = new PrepareConfigService(this._ioc.container, this._logger);
|
|
46
|
-
this.prepareWebsocketService = new PrepareWebsocketService(this._ioc.container, this._logger);
|
|
47
|
-
this.prepareValidatorService = new PrepareValidatorService(this._ioc.container, this._logger);
|
|
48
|
-
this.prepareStaticServeConfigService = new PrepareStaticServeConfigService(this._ioc.container, this._logger);
|
|
49
|
-
return this._ioc.container;
|
|
50
|
-
}
|
|
51
|
-
async start(gc = false) {
|
|
52
|
-
await this.initialize();
|
|
48
|
+
/**
|
|
49
|
+
* @description Start the server
|
|
50
|
+
* Main entry point after factory creation
|
|
51
|
+
* @returns {Promise<void>}
|
|
52
|
+
*/
|
|
53
|
+
async start() {
|
|
53
54
|
this._logger.info(`Adapter: ${green(this._adapter.name)} implemented`);
|
|
54
55
|
this._adapter.setPort(this._port);
|
|
55
56
|
this._logger.info('All components registered and ready to use');
|
|
57
|
+
// Phase 7: Application setup
|
|
58
|
+
this._coreContainer.setPhase(CoreBootstrapPhase.APPLICATION_SETUP);
|
|
56
59
|
await this.prepareConfigs();
|
|
57
60
|
await this.initializeControllers();
|
|
58
61
|
await this.prepareWebSocket();
|
|
59
|
-
|
|
62
|
+
// Phase 8: Server ready
|
|
63
|
+
this._coreContainer.setPhase(CoreBootstrapPhase.SERVER_READY);
|
|
60
64
|
await this._adapter.start();
|
|
61
|
-
|
|
62
|
-
if (gc) {
|
|
65
|
+
if (this._gc) {
|
|
63
66
|
bun.gc(true);
|
|
64
67
|
}
|
|
65
68
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
};
|
|
73
|
-
return component;
|
|
74
|
-
});
|
|
75
|
-
return this;
|
|
76
|
-
}
|
|
69
|
+
/**
|
|
70
|
+
* @description Configure server port
|
|
71
|
+
* Builder pattern for API compatibility
|
|
72
|
+
* @param {number} port - Port number
|
|
73
|
+
* @returns {this}
|
|
74
|
+
*/
|
|
77
75
|
port(port) {
|
|
78
76
|
this._port = port;
|
|
79
77
|
return this;
|
|
80
78
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
/**
|
|
80
|
+
* @description Get current CoreContainer instance
|
|
81
|
+
* @returns {CoreContainer}
|
|
82
|
+
*/
|
|
83
|
+
get coreContainer() {
|
|
84
|
+
return this._coreContainer;
|
|
84
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* @description Initialize and register all controllers
|
|
88
|
+
* @returns {Promise<void>}
|
|
89
|
+
*/
|
|
85
90
|
async initializeControllers() {
|
|
86
91
|
await this.validateAndSetControllers();
|
|
87
92
|
for (const controller of this.controllers) {
|
|
88
|
-
const name = getTypedMetadata(ComponentConstants.NameKey, controller.constructor);
|
|
89
|
-
this._logger.info(`Controller: ${green(name)} found:`);
|
|
90
93
|
const routes = getOwnTypedMetadata(ComponentConstants.RouteKey, controller.constructor) || {};
|
|
91
94
|
const routePath = getOwnTypedMetadata(ComponentConstants.PathKey, controller.constructor) || '';
|
|
92
95
|
await this.prepareTopMiddlewares({ controller, routePath });
|
|
@@ -101,13 +104,18 @@ export class AsenaServer {
|
|
|
101
104
|
handler: controller[name].bind(controller),
|
|
102
105
|
staticServe: await this.prepareStaticServeConfig(params.staticServe),
|
|
103
106
|
validator: validatorInstance,
|
|
107
|
+
controllerName: getTypedMetadata(ComponentConstants.NameKey, controller.constructor),
|
|
108
|
+
controllerBasePath: routePath,
|
|
104
109
|
});
|
|
105
110
|
}
|
|
106
|
-
this._logger.info(`Controller: ${green(name)} successfully registered.`);
|
|
107
111
|
}
|
|
108
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* @description Validate and set controllers from container
|
|
115
|
+
* @returns {Promise<void>}
|
|
116
|
+
*/
|
|
109
117
|
async validateAndSetControllers() {
|
|
110
|
-
const controllers = await this.
|
|
118
|
+
const controllers = await this._coreContainer.container.resolveAll(ComponentType.CONTROLLER);
|
|
111
119
|
if (controllers !== null) {
|
|
112
120
|
// check if any controller is array or not
|
|
113
121
|
if (controllers.find((controller) => Array.isArray(controller))) {
|
|
@@ -116,29 +124,62 @@ export class AsenaServer {
|
|
|
116
124
|
this.controllers = controllers;
|
|
117
125
|
}
|
|
118
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* @description Prepare static serve configuration
|
|
129
|
+
* @param {StaticServeClass} staticServeClass - Static serve class
|
|
130
|
+
* @returns {Promise<BaseStaticServeParams>}
|
|
131
|
+
*/
|
|
119
132
|
async prepareStaticServeConfig(staticServeClass) {
|
|
120
133
|
return await this.prepareStaticServeConfigService.prepare(staticServeClass);
|
|
121
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* @description Prepare top-level middlewares for controller or websocket
|
|
137
|
+
* @param {PrepareMiddlewareParams} params - Middleware parameters
|
|
138
|
+
* @param {boolean} websocket - Whether this is for websocket
|
|
139
|
+
* @returns {Promise<BaseMiddleware[]>}
|
|
140
|
+
*/
|
|
122
141
|
async prepareTopMiddlewares({ controller, routePath }, websocket = false) {
|
|
123
142
|
const topMiddlewares = getTypedMetadata(ComponentConstants.MiddlewaresKey, controller.constructor) || [];
|
|
124
143
|
const middlewares = await this.prepareMiddlewares(topMiddlewares);
|
|
125
144
|
if (websocket) {
|
|
126
145
|
return middlewares;
|
|
127
146
|
}
|
|
147
|
+
// Register controller-level middlewares with pattern matching
|
|
148
|
+
// Convert routePath to pattern: /api → /api/*
|
|
149
|
+
const routePattern = routePath ? `${routePath}/*` : undefined;
|
|
128
150
|
for (const middleware of middlewares) {
|
|
129
|
-
await this._adapter.use(middleware,
|
|
151
|
+
await this._adapter.use(middleware, routePattern ? { include: [routePattern] } : undefined);
|
|
130
152
|
}
|
|
131
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* @description Prepare validator instance
|
|
156
|
+
* @param {ValidatorClass<any>} Validator - Validator class
|
|
157
|
+
* @returns {Promise<BaseValidator>}
|
|
158
|
+
*/
|
|
132
159
|
async prepareValidator(Validator) {
|
|
133
160
|
return await this.prepareValidatorService.prepare(Validator);
|
|
134
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* @description Prepare route-level middlewares
|
|
164
|
+
* @param {ApiParams} middlewareParams - Middleware parameters
|
|
165
|
+
* @returns {Promise<BaseMiddleware[]>}
|
|
166
|
+
*/
|
|
135
167
|
async prepareRouteMiddleware(middlewareParams) {
|
|
136
168
|
const routeMiddlewares = middlewareParams?.middlewares || [];
|
|
137
169
|
return this.prepareMiddlewares(routeMiddlewares);
|
|
138
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* @description Prepare middlewares from classes
|
|
173
|
+
* @param {MiddlewareClass[]} middlewares - Middleware classes
|
|
174
|
+
* @returns {Promise<BaseMiddleware[]>}
|
|
175
|
+
*/
|
|
139
176
|
async prepareMiddlewares(middlewares) {
|
|
140
177
|
return this.prepareMiddleware.prepare(middlewares);
|
|
141
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* @description Prepare and register WebSocket routes
|
|
181
|
+
* @returns {Promise<void>}
|
|
182
|
+
*/
|
|
142
183
|
async prepareWebSocket() {
|
|
143
184
|
const websockets = await this.prepareWebsocketService.prepare();
|
|
144
185
|
if (!websockets) {
|
|
@@ -151,9 +192,33 @@ export class AsenaServer {
|
|
|
151
192
|
path: path,
|
|
152
193
|
middlewares: middlewares,
|
|
153
194
|
websocketService: websocket,
|
|
195
|
+
controllerName: getTypedMetadata(ComponentConstants.NameKey, websocket.constructor),
|
|
154
196
|
});
|
|
155
197
|
}
|
|
156
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* @description Normalizes global middleware entry to config format
|
|
201
|
+
* Handles backward compatibility (MiddlewareClass → GlobalMiddlewareConfig)
|
|
202
|
+
*
|
|
203
|
+
* @param entry - Middleware entry (class or config object)
|
|
204
|
+
* @returns Normalized config object
|
|
205
|
+
*/
|
|
206
|
+
normalizeMiddlewareEntry(entry) {
|
|
207
|
+
// If it's already a config object, return as-is
|
|
208
|
+
if (typeof entry === 'object' && 'middleware' in entry) {
|
|
209
|
+
return entry;
|
|
210
|
+
}
|
|
211
|
+
// If it's a class (old format), convert to config format
|
|
212
|
+
return {
|
|
213
|
+
middleware: entry,
|
|
214
|
+
routes: undefined, // No route config = apply to all routes
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* @description Prepare and apply configuration
|
|
219
|
+
* Updated to support pattern-based global middlewares
|
|
220
|
+
* @returns {Promise<void>}
|
|
221
|
+
*/
|
|
157
222
|
async prepareConfigs() {
|
|
158
223
|
const configInstance = await this.prepareConfigService.prepare();
|
|
159
224
|
if (!configInstance) {
|
|
@@ -165,15 +230,58 @@ export class AsenaServer {
|
|
|
165
230
|
if (typeof configInstance.onError === 'function') {
|
|
166
231
|
await this._adapter.onError(configInstance.onError.bind(configInstance));
|
|
167
232
|
}
|
|
233
|
+
// Pattern-based global middleware registration
|
|
168
234
|
if (typeof configInstance.globalMiddlewares === 'function') {
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
235
|
+
const middlewareEntries = await configInstance.globalMiddlewares();
|
|
236
|
+
for (const entry of middlewareEntries) {
|
|
237
|
+
// Normalize entry to config format (handles backward compatibility)
|
|
238
|
+
const config = this.normalizeMiddlewareEntry(entry);
|
|
239
|
+
// Prepare middleware instances
|
|
240
|
+
const preparedMiddlewares = await this.prepareMiddlewares([config.middleware]);
|
|
241
|
+
// Register with adapter (pass route config)
|
|
242
|
+
for (const middleware of preparedMiddlewares) {
|
|
243
|
+
await this._adapter.use(middleware, config.routes);
|
|
244
|
+
}
|
|
173
245
|
}
|
|
174
246
|
}
|
|
175
247
|
const name = getOwnTypedMetadata(ComponentConstants.NameKey, configInstance.constructor);
|
|
176
248
|
this._logger.info(`Config ${yellow(name)} applied`);
|
|
177
249
|
}
|
|
178
|
-
}
|
|
250
|
+
};
|
|
251
|
+
__decorate([
|
|
252
|
+
Inject(ICoreServiceNames.CORE_CONTAINER),
|
|
253
|
+
__metadata("design:type", Function)
|
|
254
|
+
], AsenaServer.prototype, "_coreContainer", void 0);
|
|
255
|
+
__decorate([
|
|
256
|
+
Inject(ICoreServiceNames.ASENA_ADAPTER),
|
|
257
|
+
__metadata("design:type", Object)
|
|
258
|
+
], AsenaServer.prototype, "_adapter", void 0);
|
|
259
|
+
__decorate([
|
|
260
|
+
Inject(ICoreServiceNames.SERVER_LOGGER),
|
|
261
|
+
__metadata("design:type", Object)
|
|
262
|
+
], AsenaServer.prototype, "_logger", void 0);
|
|
263
|
+
__decorate([
|
|
264
|
+
Inject(ICoreServiceNames.PREPARE_MIDDLEWARE_SERVICE),
|
|
265
|
+
__metadata("design:type", Function)
|
|
266
|
+
], AsenaServer.prototype, "prepareMiddleware", void 0);
|
|
267
|
+
__decorate([
|
|
268
|
+
Inject(ICoreServiceNames.PREPARE_CONFIG_SERVICE),
|
|
269
|
+
__metadata("design:type", Function)
|
|
270
|
+
], AsenaServer.prototype, "prepareConfigService", void 0);
|
|
271
|
+
__decorate([
|
|
272
|
+
Inject(ICoreServiceNames.PREPARE_WEBSOCKET_SERVICE),
|
|
273
|
+
__metadata("design:type", Function)
|
|
274
|
+
], AsenaServer.prototype, "prepareWebsocketService", void 0);
|
|
275
|
+
__decorate([
|
|
276
|
+
Inject(ICoreServiceNames.PREPARE_VALIDATOR_SERVICE),
|
|
277
|
+
__metadata("design:type", Function)
|
|
278
|
+
], AsenaServer.prototype, "prepareValidatorService", void 0);
|
|
279
|
+
__decorate([
|
|
280
|
+
Inject(ICoreServiceNames.PREPARE_STATIC_SERVE_CONFIG_SERVICE),
|
|
281
|
+
__metadata("design:type", Function)
|
|
282
|
+
], AsenaServer.prototype, "prepareStaticServeConfigService", void 0);
|
|
283
|
+
AsenaServer = __decorate([
|
|
284
|
+
CoreService(ICoreServiceNames.ASENA_SERVER)
|
|
285
|
+
], AsenaServer);
|
|
286
|
+
export { AsenaServer };
|
|
179
287
|
//# sourceMappingURL=AsenaServer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsenaServer.js","sourceRoot":"","sources":["../../../lib/server/AsenaServer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AsenaServer.js","sourceRoot":"","sources":["../../../lib/server/AsenaServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { AsenaServer } from './AsenaServer';
|
|
2
|
+
import type { AsenaAdapter } from '../adapter';
|
|
3
|
+
import type { ServerLogger } from '../logger';
|
|
4
|
+
import type { Class } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* @description Configuration options for AsenaServer creation
|
|
7
|
+
*/
|
|
8
|
+
export interface AsenaServerOptions<A extends AsenaAdapter<any, any>> {
|
|
9
|
+
adapter: A;
|
|
10
|
+
logger: ServerLogger;
|
|
11
|
+
port?: number;
|
|
12
|
+
components?: Class[];
|
|
13
|
+
gc?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @description Factory for creating AsenaServer instances
|
|
17
|
+
* Handles IoC bootstrap and dependency injection
|
|
18
|
+
*/
|
|
19
|
+
export declare class AsenaServerFactory {
|
|
20
|
+
/**
|
|
21
|
+
* @description Create and configure AsenaServer instance
|
|
22
|
+
* @param {AsenaServerOptions<A>} options - Server configuration options
|
|
23
|
+
* @returns {Promise<AsenaServer<A>>} Fully configured AsenaServer instance
|
|
24
|
+
*/
|
|
25
|
+
static create<A extends AsenaAdapter<any, any>>(options: AsenaServerOptions<A>): Promise<AsenaServer<A>>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CoreBootstrapPhase, CoreContainer, ICoreServiceNames } from '../ioc';
|
|
2
|
+
import { readConfigFile } from '../ioc/helper/fileHelper';
|
|
3
|
+
import { ComponentConstants } from '../ioc/constants';
|
|
4
|
+
import { getTypedMetadata } from '../utils/typedMetadata';
|
|
5
|
+
/**
|
|
6
|
+
* @description Factory for creating AsenaServer instances
|
|
7
|
+
* Handles IoC bootstrap and dependency injection
|
|
8
|
+
*/
|
|
9
|
+
export class AsenaServerFactory {
|
|
10
|
+
/**
|
|
11
|
+
* @description Create and configure AsenaServer instance
|
|
12
|
+
* @param {AsenaServerOptions<A>} options - Server configuration options
|
|
13
|
+
* @returns {Promise<AsenaServer<A>>} Fully configured AsenaServer instance
|
|
14
|
+
*/
|
|
15
|
+
static async create(options) {
|
|
16
|
+
const { adapter, logger, port, components, gc } = options;
|
|
17
|
+
// Read config file
|
|
18
|
+
const config = await readConfigFile();
|
|
19
|
+
if (!config) {
|
|
20
|
+
logger.warn('asena-config file not found');
|
|
21
|
+
}
|
|
22
|
+
// Create CoreContainer
|
|
23
|
+
const coreContainer = new CoreContainer();
|
|
24
|
+
// Phase 1-5: Bootstrap core services
|
|
25
|
+
await coreContainer.bootstrap(adapter, logger);
|
|
26
|
+
// Register CoreContainer itself for AsenaServer injection
|
|
27
|
+
await coreContainer.container.registerInstance(ICoreServiceNames.CORE_CONTAINER, coreContainer);
|
|
28
|
+
// Phase 6: Register user components
|
|
29
|
+
const iocEngine = await coreContainer.resolve(ICoreServiceNames.IOC_ENGINE);
|
|
30
|
+
iocEngine.setConfig(config);
|
|
31
|
+
if (components?.length) {
|
|
32
|
+
const injectableComponents = components.map((comp) => {
|
|
33
|
+
const face = getTypedMetadata(ComponentConstants.InterfaceKey, comp);
|
|
34
|
+
return {
|
|
35
|
+
Class: comp,
|
|
36
|
+
interface: face,
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
await iocEngine.searchAndRegister(injectableComponents);
|
|
40
|
+
}
|
|
41
|
+
else if (config) {
|
|
42
|
+
await iocEngine.searchAndRegister();
|
|
43
|
+
}
|
|
44
|
+
coreContainer.setPhase(CoreBootstrapPhase.USER_COMPONENTS_INIT);
|
|
45
|
+
// Register AsenaServer as core service
|
|
46
|
+
const { AsenaServer } = await import('./AsenaServer');
|
|
47
|
+
await coreContainer.container.register(ICoreServiceNames.ASENA_SERVER, AsenaServer, true);
|
|
48
|
+
// Resolve AsenaServer (with all dependencies injected)
|
|
49
|
+
const server = await coreContainer.resolve(ICoreServiceNames.ASENA_SERVER);
|
|
50
|
+
// Configure server
|
|
51
|
+
if (port)
|
|
52
|
+
server.port(port);
|
|
53
|
+
if (gc !== undefined)
|
|
54
|
+
server._gc = gc;
|
|
55
|
+
return server;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=AsenaServerFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsenaServerFactory.js","sourceRoot":"","sources":["../../../lib/server/AsenaServerFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAK9E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAa1D;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAE7B;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,OAA8B;QAE9B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;QAE1D,mBAAmB;QACnB,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC7C,CAAC;QAED,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;QAE1C,qCAAqC;QACrC,MAAM,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE/C,0DAA0D;QAC1D,MAAM,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAEhG,oCAAoC;QACpC,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAAY,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAEvF,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE5B,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC;YACvB,MAAM,oBAAoB,GAA0B,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC1E,MAAM,IAAI,GAAW,gBAAgB,CAAS,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAErF,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,SAAS,EAAE,IAAI;iBAChB,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,SAAS,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,MAAM,SAAS,CAAC,iBAAiB,EAAE,CAAC;QACtC,CAAC;QAED,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;QAEhE,uCAAuC;QACvC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAEtD,MAAM,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAE1F,uDAAuD;QACvD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAiB,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE3F,mBAAmB;QACnB,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,IAAI,EAAE,KAAK,SAAS;YAAG,MAAc,CAAC,GAAG,GAAG,EAAE,CAAC;QAE/C,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF"}
|
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
import type { AsenaContext, AsenaServeOptions } from '../../adapter';
|
|
2
|
-
import type { MiddlewareClass } from
|
|
2
|
+
import type { MiddlewareClass } from '../web/middleware';
|
|
3
|
+
/**
|
|
4
|
+
* Route configuration for global middleware
|
|
5
|
+
*/
|
|
6
|
+
export interface GlobalMiddlewareRouteConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Paths to include. Supports glob patterns.
|
|
9
|
+
* Default: ['*'] (all routes)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* include: ['/api/*', '/admin/*']
|
|
13
|
+
* include: ['/users/:id', '/posts/:id']
|
|
14
|
+
*/
|
|
15
|
+
include?: string[];
|
|
16
|
+
/**
|
|
17
|
+
* Paths to exclude. Supports glob patterns.
|
|
18
|
+
* Exclusions take precedence over inclusions.
|
|
19
|
+
* Default: []
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* exclude: ['/health', '/metrics']
|
|
23
|
+
* exclude: ['/api/public/*']
|
|
24
|
+
*/
|
|
25
|
+
exclude?: string[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Global middleware configuration
|
|
29
|
+
*/
|
|
30
|
+
export interface GlobalMiddlewareConfig {
|
|
31
|
+
/**
|
|
32
|
+
* Middleware class to apply
|
|
33
|
+
*/
|
|
34
|
+
middleware: MiddlewareClass;
|
|
35
|
+
/**
|
|
36
|
+
* Route configuration for this middleware
|
|
37
|
+
* If not specified, middleware applies to all routes
|
|
38
|
+
*/
|
|
39
|
+
routes?: GlobalMiddlewareRouteConfig;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Union type for backward compatibility
|
|
43
|
+
* - MiddlewareClass: Apply to all routes (old behavior)
|
|
44
|
+
* - GlobalMiddlewareConfig: Apply with pattern matching (new behavior)
|
|
45
|
+
*/
|
|
46
|
+
export type GlobalMiddlewareEntry = MiddlewareClass | GlobalMiddlewareConfig;
|
|
3
47
|
/**
|
|
4
48
|
* Configuration interface for Asena framework
|
|
5
49
|
* @template C - Extends AsenaContext type with generic parameters
|
|
@@ -18,26 +62,55 @@ export interface AsenaConfig<C extends AsenaContext<any, any> = AsenaContext<any
|
|
|
18
62
|
*/
|
|
19
63
|
serveOptions?(): AsenaServeOptions;
|
|
20
64
|
/**
|
|
21
|
-
* Global middleware configuration for applying middleware across
|
|
22
|
-
*
|
|
65
|
+
* Global middleware configuration for applying middleware across routes.
|
|
66
|
+
*
|
|
67
|
+
* Supports two formats:
|
|
68
|
+
* 1. Simple: MiddlewareClass (applies to all routes)
|
|
69
|
+
* 2. Advanced: GlobalMiddlewareConfig (pattern-based filtering)
|
|
70
|
+
*
|
|
23
71
|
* @example
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
72
|
+
* ```typescript
|
|
73
|
+
* // Simple format (backward compatible)
|
|
74
|
+
* globalMiddlewares() {
|
|
75
|
+
* return [LoggerMiddleware, CorsMiddleware];
|
|
76
|
+
* }
|
|
77
|
+
*
|
|
78
|
+
* // Advanced format with pattern matching
|
|
79
|
+
* globalMiddlewares() {
|
|
80
|
+
* return [
|
|
81
|
+
* // Apply to all routes
|
|
82
|
+
* LoggerMiddleware,
|
|
83
|
+
*
|
|
84
|
+
* // Apply only to /api/* and /admin/*
|
|
85
|
+
* {
|
|
86
|
+
* middleware: AuthMiddleware,
|
|
87
|
+
* routes: {
|
|
88
|
+
* include: ['/api/*', '/admin/*']
|
|
89
|
+
* }
|
|
90
|
+
* },
|
|
91
|
+
*
|
|
92
|
+
* // Apply to all routes except /health
|
|
93
|
+
* {
|
|
94
|
+
* middleware: RateLimitMiddleware,
|
|
95
|
+
* routes: {
|
|
96
|
+
* exclude: ['/health', '/metrics']
|
|
97
|
+
* }
|
|
98
|
+
* },
|
|
99
|
+
*
|
|
100
|
+
* // Advanced: include + exclude
|
|
101
|
+
* {
|
|
102
|
+
* middleware: AuditMiddleware,
|
|
103
|
+
* routes: {
|
|
104
|
+
* include: ['/api/*'],
|
|
105
|
+
* exclude: ['/api/health']
|
|
106
|
+
* }
|
|
107
|
+
* }
|
|
108
|
+
* ];
|
|
37
109
|
* }
|
|
110
|
+
* ```
|
|
38
111
|
*
|
|
39
|
-
* @returns Array of middleware
|
|
112
|
+
* @returns Array of middleware configurations
|
|
40
113
|
*/
|
|
41
|
-
globalMiddlewares?(): Promise<
|
|
114
|
+
globalMiddlewares?(): Promise<GlobalMiddlewareEntry[]> | GlobalMiddlewareEntry[];
|
|
42
115
|
}
|
|
43
116
|
export type AsenaConfigFunctions = 'onError' | 'serveOptions' | 'globalMiddlewares';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Override.js","sourceRoot":"","sources":["../../../../lib/server/decorators/Override.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Override.js","sourceRoot":"","sources":["../../../../lib/server/decorators/Override.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAsB,EAAE;IAC9C,OAAO,CAAC,MAAc,EAAE,WAAmB,EAAE,EAAE;QAC7C,MAAM,SAAS,GAAa,mBAAmB,CAAW,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAExG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACrC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;QAED,mBAAmB,CAAW,kBAAkB,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../../../../lib/server/decorators/components/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Config.js","sourceRoot":"","sources":["../../../../../lib/server/decorators/components/Config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAiC,EAAkB,EAAE;IAC1E,OAAO,eAAe,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ComponentType } from '../../../ioc
|
|
1
|
+
import { ComponentType } from '../../../ioc';
|
|
2
2
|
import { defineComponent } from '../../../ioc/component';
|
|
3
|
-
import { ComponentConstants } from '../../../ioc
|
|
3
|
+
import { ComponentConstants } from '../../../ioc';
|
|
4
4
|
import { defineMiddleware } from '../../web/helper';
|
|
5
5
|
import { defineTypedMetadata } from '../../../utils/typedMetadata';
|
|
6
6
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controller.js","sourceRoot":"","sources":["../../../../../lib/server/decorators/components/Controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAyB,MAAM,
|
|
1
|
+
{"version":3,"file":"Controller.js","sourceRoot":"","sources":["../../../../../lib/server/decorators/components/Controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAyB,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAInE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAkC,EAAkB,EAAE;IAC/E,MAAM,OAAO,GACX,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAE3G,OAAO,eAAe,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;QACnE,mBAAmB,CACjB,kBAAkB,CAAC,OAAO,EACzB,OAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,EAC9D,MAAM,CACP,CAAC;QAEF,gBAAgB,CAAC,MAAM,EAAG,OAA4B,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAE1E,mBAAmB,CACjB,kBAAkB,CAAC,cAAc,EAChC,OAA4B,CAAC,WAAW,IAAK,EAAwB,EACtE,MAAM,CACP,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|