@asenajs/asena 0.3.3 → 0.5.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 +16 -0
- package/dist/lib/ioc/Container.js +61 -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 +139 -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/decorators/Inject.d.ts +24 -4
- package/dist/lib/ioc/component/decorators/Inject.js +44 -7
- package/dist/lib/ioc/component/decorators/Inject.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 +19 -0
- package/dist/lib/ioc/types/ICoreServiceNamesType.js +25 -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 +176 -68
- package/dist/lib/server/AsenaServer.js.map +1 -1
- package/dist/lib/server/AsenaServerFactory.d.ts +26 -0
- package/dist/lib/server/AsenaServerFactory.js +66 -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 +1 -2
- package/dist/lib/server/decorators/components/Controller.js.map +1 -1
- package/dist/lib/server/decorators/components/Middleware.js +1 -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 +1 -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 +1 -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 +3 -0
- package/dist/lib/server/index.js +4 -0
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/messaging/Ulak.d.ts +224 -0
- package/dist/lib/server/messaging/Ulak.js +351 -0
- package/dist/lib/server/messaging/Ulak.js.map +1 -0
- package/dist/lib/server/messaging/index.d.ts +8 -0
- package/dist/lib/server/messaging/index.js +9 -0
- package/dist/lib/server/messaging/index.js.map +1 -0
- package/dist/lib/server/messaging/types.d.ts +73 -0
- package/dist/lib/server/messaging/types.js +35 -0
- package/dist/lib/server/messaging/types.js.map +1 -0
- 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 +27 -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 +9 -5
- package/dist/lib/server/src/services/PrepareWebsocketService.js +35 -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 +3 -16
- package/dist/lib/server/web/websocket/AsenaWebSocketServer.js +3 -20
- 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 +19 -8
- 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
|
@@ -2,10 +2,19 @@ import type { Class } from '../server/types';
|
|
|
2
2
|
import type { ComponentType, ContainerService } from './types';
|
|
3
3
|
export declare class Container {
|
|
4
4
|
private _services;
|
|
5
|
+
private circularDetector;
|
|
5
6
|
constructor(services?: {
|
|
6
7
|
[key: string]: ContainerService | ContainerService[];
|
|
7
8
|
});
|
|
8
9
|
register(key: string, Class: Class, singleton: boolean): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* @description Register an already-created instance directly
|
|
12
|
+
* Useful for external dependencies like Logger, Adapter
|
|
13
|
+
* @param {string} key - Service identifier
|
|
14
|
+
* @param {T} instance - Pre-created instance
|
|
15
|
+
* @returns {Promise<void>}
|
|
16
|
+
*/
|
|
17
|
+
registerInstance<T>(key: string, instance: T): Promise<void>;
|
|
9
18
|
resolve<T>(key: string): Promise<(T | T[]) | null>;
|
|
10
19
|
resolveStrategy<T>(key: string): Promise<T[] | null>;
|
|
11
20
|
/**
|
|
@@ -27,6 +36,13 @@ export declare class Container {
|
|
|
27
36
|
private executePostConstructs;
|
|
28
37
|
private injectStrategies;
|
|
29
38
|
private injectDependencies;
|
|
39
|
+
/**
|
|
40
|
+
* @description Checks if a class is a framework class (CoreService)
|
|
41
|
+
* Framework classes can traverse the prototype chain even if they contain native code patterns
|
|
42
|
+
* @param {any} cls - The class to check
|
|
43
|
+
* @returns {boolean} True if the class is a framework class
|
|
44
|
+
*/
|
|
45
|
+
private isFrameworkClass;
|
|
30
46
|
private getPrototypeChain;
|
|
31
47
|
get services(): {
|
|
32
48
|
[p: string]: ContainerService | ContainerService[];
|
|
@@ -1,33 +1,61 @@
|
|
|
1
1
|
import { ComponentConstants } from './constants';
|
|
2
2
|
import { getOwnTypedMetadata, getTypedMetadata } from '../utils/typedMetadata';
|
|
3
|
+
import { CircularDependencyDetector } from './CircularDependencyDetector';
|
|
4
|
+
import { CORE_SERVICE } from './decorators/CoreService';
|
|
3
5
|
export class Container {
|
|
4
6
|
_services = {};
|
|
7
|
+
circularDetector = new CircularDependencyDetector();
|
|
5
8
|
constructor(services) {
|
|
6
9
|
this._services = services || {};
|
|
7
10
|
}
|
|
8
11
|
async register(key, Class, singleton) {
|
|
9
12
|
if (this._services[key]) {
|
|
10
13
|
if (Array.isArray(this._services[key])) {
|
|
11
|
-
this._services[key].push({ Class, instance: singleton ?
|
|
14
|
+
this._services[key].push({ Class, instance: singleton ? await this.prepareInstance(Class) : null, singleton });
|
|
12
15
|
return;
|
|
13
16
|
}
|
|
14
17
|
this._services[key] = [
|
|
15
18
|
this._services[key],
|
|
16
|
-
{ Class, instance: singleton ?
|
|
19
|
+
{ Class, instance: singleton ? await this.prepareInstance(Class) : null, singleton },
|
|
17
20
|
];
|
|
18
21
|
return;
|
|
19
22
|
}
|
|
20
|
-
this._services[key] = { Class, instance: singleton ?
|
|
23
|
+
this._services[key] = { Class, instance: singleton ? await this.prepareInstance(Class) : null, singleton };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @description Register an already-created instance directly
|
|
27
|
+
* Useful for external dependencies like Logger, Adapter
|
|
28
|
+
* @param {string} key - Service identifier
|
|
29
|
+
* @param {T} instance - Pre-created instance
|
|
30
|
+
* @returns {Promise<void>}
|
|
31
|
+
*/
|
|
32
|
+
async registerInstance(key, instance) {
|
|
33
|
+
if (this._services[key]) {
|
|
34
|
+
throw new Error(`Service '${key}' is already registered`);
|
|
35
|
+
}
|
|
36
|
+
this._services[key] = {
|
|
37
|
+
Class: instance.constructor,
|
|
38
|
+
instance: instance,
|
|
39
|
+
singleton: true,
|
|
40
|
+
};
|
|
21
41
|
}
|
|
22
42
|
async resolve(key) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
43
|
+
// Check circular dependency
|
|
44
|
+
this.circularDetector.checkCircular(key);
|
|
45
|
+
this.circularDetector.push(key);
|
|
46
|
+
try {
|
|
47
|
+
const service = this._services[key];
|
|
48
|
+
if (!service) {
|
|
49
|
+
throw new Error(key + ' is not registered');
|
|
50
|
+
}
|
|
51
|
+
if (Array.isArray(service)) {
|
|
52
|
+
return await this.resolveMultipleContainerService(service);
|
|
53
|
+
}
|
|
54
|
+
return await this.resolveContainerService(service);
|
|
26
55
|
}
|
|
27
|
-
|
|
28
|
-
|
|
56
|
+
finally {
|
|
57
|
+
this.circularDetector.pop(key);
|
|
29
58
|
}
|
|
30
|
-
return await this.resolveContainerService(service);
|
|
31
59
|
}
|
|
32
60
|
resolveStrategy(key) {
|
|
33
61
|
return this.resolve(key);
|
|
@@ -149,8 +177,10 @@ export class Container {
|
|
|
149
177
|
const deps = getOwnTypedMetadata(ComponentConstants.DependencyKey, classInChain);
|
|
150
178
|
if (!deps)
|
|
151
179
|
continue;
|
|
180
|
+
let property;
|
|
152
181
|
for (const [k, name] of Object.entries(deps)) {
|
|
153
|
-
|
|
182
|
+
property = Object.getOwnPropertyDescriptor(newInstance, k);
|
|
183
|
+
if (property && property.value !== undefined)
|
|
154
184
|
continue;
|
|
155
185
|
const instance = await this.resolve(name);
|
|
156
186
|
if (instance === null) {
|
|
@@ -170,10 +200,30 @@ export class Container {
|
|
|
170
200
|
}
|
|
171
201
|
}
|
|
172
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* @description Checks if a class is a framework class (CoreService)
|
|
205
|
+
* Framework classes can traverse the prototype chain even if they contain native code patterns
|
|
206
|
+
* @param {any} cls - The class to check
|
|
207
|
+
* @returns {boolean} True if the class is a framework class
|
|
208
|
+
*/
|
|
209
|
+
isFrameworkClass(cls) {
|
|
210
|
+
if (!cls || cls === Object.prototype) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
// Check if class is marked as a CoreService
|
|
214
|
+
const isCoreService = getTypedMetadata(CORE_SERVICE, cls);
|
|
215
|
+
return Boolean(isCoreService);
|
|
216
|
+
}
|
|
173
217
|
getPrototypeChain(Class) {
|
|
174
218
|
const chain = [];
|
|
175
219
|
let currentClass = Class;
|
|
176
|
-
while (currentClass && currentClass !== Object.prototype
|
|
220
|
+
while (currentClass && currentClass !== Object.prototype) {
|
|
221
|
+
const classSource = currentClass.toString();
|
|
222
|
+
const isNativeCode = classSource.includes('[native code]');
|
|
223
|
+
// Stop at native code unless it's a framework class
|
|
224
|
+
if (isNativeCode && !this.isFrameworkClass(currentClass)) {
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
177
227
|
chain.push(currentClass);
|
|
178
228
|
currentClass = Object.getPrototypeOf(currentClass);
|
|
179
229
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../../../lib/ioc/Container.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Container.js","sourceRoot":"","sources":["../../../lib/ioc/Container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Container } from './Container';
|
|
2
|
+
import type { AsenaAdapter } from '../adapter';
|
|
3
|
+
import type { ServerLogger } from '../logger';
|
|
4
|
+
import { CoreBootstrapPhase } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* @description CoreContainer manages framework-level services
|
|
7
|
+
* Handles the bootstrap sequence for core services and user components
|
|
8
|
+
*/
|
|
9
|
+
export declare class CoreContainer {
|
|
10
|
+
private readonly _container;
|
|
11
|
+
private _initialized;
|
|
12
|
+
private _phase;
|
|
13
|
+
constructor();
|
|
14
|
+
/**
|
|
15
|
+
* @description Bootstrap core framework services
|
|
16
|
+
* Executes Phase 1-5: System-level services
|
|
17
|
+
* @param {AsenaAdapter} adapter - HTTP adapter instance
|
|
18
|
+
* @param {ServerLogger} logger - Logger instance
|
|
19
|
+
* @returns {Promise<void>}
|
|
20
|
+
*/
|
|
21
|
+
bootstrap(adapter: AsenaAdapter<any, any>, logger: ServerLogger): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* @description Resolve a service from container
|
|
24
|
+
* @param {string} key - Service identifier
|
|
25
|
+
* @returns {Promise<T>}
|
|
26
|
+
*/
|
|
27
|
+
resolve<T>(key: string): Promise<T>;
|
|
28
|
+
/**
|
|
29
|
+
* @description Update current phase (called by AsenaServer)
|
|
30
|
+
* @param {CoreBootstrapPhase} phase - New phase
|
|
31
|
+
* @returns {void}
|
|
32
|
+
*/
|
|
33
|
+
setPhase(phase: CoreBootstrapPhase): void;
|
|
34
|
+
/**
|
|
35
|
+
* @description Phase 1: Register Container itself
|
|
36
|
+
* @returns {Promise<void>}
|
|
37
|
+
*/
|
|
38
|
+
private registerContainer;
|
|
39
|
+
/**
|
|
40
|
+
* @description Phase 2: Register Logger instance
|
|
41
|
+
* @param {ServerLogger} logger - Logger instance
|
|
42
|
+
* @returns {Promise<void>}
|
|
43
|
+
*/
|
|
44
|
+
private registerLogger;
|
|
45
|
+
/**
|
|
46
|
+
* @description Phase 3: Register IocEngine
|
|
47
|
+
* IocEngine will inject Container automatically
|
|
48
|
+
* @returns {Promise<void>}
|
|
49
|
+
*/
|
|
50
|
+
private registerIocEngine;
|
|
51
|
+
/**
|
|
52
|
+
* @description Phase 4: Register HTTP Adapter
|
|
53
|
+
* @param {AsenaAdapter} adapter - HTTP adapter instance
|
|
54
|
+
* @returns {Promise<void>}
|
|
55
|
+
*/
|
|
56
|
+
private registerAdapters;
|
|
57
|
+
/**
|
|
58
|
+
* @description Phase 5: Register all Prepare Services and Internal Services
|
|
59
|
+
* They will inject Container and Logger automatically
|
|
60
|
+
* @returns {Promise<void>}
|
|
61
|
+
*/
|
|
62
|
+
private registerPrepareServices;
|
|
63
|
+
/**
|
|
64
|
+
* @description Get container instance
|
|
65
|
+
* @returns {Container}
|
|
66
|
+
*/
|
|
67
|
+
get container(): Container;
|
|
68
|
+
/**
|
|
69
|
+
* @description Get current bootstrap phase
|
|
70
|
+
* @returns {CoreBootstrapPhase}
|
|
71
|
+
*/
|
|
72
|
+
get currentPhase(): CoreBootstrapPhase;
|
|
73
|
+
/**
|
|
74
|
+
* @description Check if CoreContainer is initialized
|
|
75
|
+
* @returns {boolean}
|
|
76
|
+
*/
|
|
77
|
+
get isInitialized(): boolean;
|
|
78
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Container } from './Container';
|
|
2
|
+
import { IocEngine } from './IocEngine';
|
|
3
|
+
import { CoreBootstrapPhase, ICoreServiceNames } from './types';
|
|
4
|
+
import { PrepareMiddlewareService } from '../server/src/services/PrepareMiddlewareService';
|
|
5
|
+
import { PrepareConfigService } from '../server/src/services/PrepareConfigService';
|
|
6
|
+
import { PrepareWebsocketService } from '../server/src/services/PrepareWebsocketService';
|
|
7
|
+
import { PrepareValidatorService } from '../server/src/services/PrepareValidatorService';
|
|
8
|
+
import { PrepareStaticServeConfigService } from '../server/src/services/PrepareStaticServeConfigService';
|
|
9
|
+
import { Ulak } from '../server/messaging/Ulak';
|
|
10
|
+
/**
|
|
11
|
+
* @description CoreContainer manages framework-level services
|
|
12
|
+
* Handles the bootstrap sequence for core services and user components
|
|
13
|
+
*/
|
|
14
|
+
export class CoreContainer {
|
|
15
|
+
_container;
|
|
16
|
+
_initialized = false;
|
|
17
|
+
_phase;
|
|
18
|
+
constructor() {
|
|
19
|
+
this._container = new Container();
|
|
20
|
+
this._phase = CoreBootstrapPhase.CONTAINER_INIT;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @description Bootstrap core framework services
|
|
24
|
+
* Executes Phase 1-5: System-level services
|
|
25
|
+
* @param {AsenaAdapter} adapter - HTTP adapter instance
|
|
26
|
+
* @param {ServerLogger} logger - Logger instance
|
|
27
|
+
* @returns {Promise<void>}
|
|
28
|
+
*/
|
|
29
|
+
async bootstrap(adapter, logger) {
|
|
30
|
+
if (this._initialized) {
|
|
31
|
+
throw new Error('CoreContainer already initialized');
|
|
32
|
+
}
|
|
33
|
+
// Phase 1: Container self-registration
|
|
34
|
+
await this.registerContainer();
|
|
35
|
+
// Phase 2: Logger registration
|
|
36
|
+
await this.registerLogger(logger);
|
|
37
|
+
// Phase 3: IocEngine registration
|
|
38
|
+
await this.registerIocEngine();
|
|
39
|
+
// Phase 4: Adapter registration
|
|
40
|
+
await this.registerAdapters(adapter);
|
|
41
|
+
// Phase 5: Prepare Services registration
|
|
42
|
+
await this.registerPrepareServices();
|
|
43
|
+
this._initialized = true;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description Resolve a service from container
|
|
47
|
+
* @param {string} key - Service identifier
|
|
48
|
+
* @returns {Promise<T>}
|
|
49
|
+
*/
|
|
50
|
+
async resolve(key) {
|
|
51
|
+
return (await this._container.resolve(key));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Update current phase (called by AsenaServer)
|
|
55
|
+
* @param {CoreBootstrapPhase} phase - New phase
|
|
56
|
+
* @returns {void}
|
|
57
|
+
*/
|
|
58
|
+
setPhase(phase) {
|
|
59
|
+
this._phase = phase;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @description Phase 1: Register Container itself
|
|
63
|
+
* @returns {Promise<void>}
|
|
64
|
+
*/
|
|
65
|
+
async registerContainer() {
|
|
66
|
+
await this._container.registerInstance(ICoreServiceNames.CONTAINER, this._container);
|
|
67
|
+
this._phase = CoreBootstrapPhase.LOGGER_INIT;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* @description Phase 2: Register Logger instance
|
|
71
|
+
* @param {ServerLogger} logger - Logger instance
|
|
72
|
+
* @returns {Promise<void>}
|
|
73
|
+
*/
|
|
74
|
+
async registerLogger(logger) {
|
|
75
|
+
await this._container.registerInstance(ICoreServiceNames.SERVER_LOGGER, logger);
|
|
76
|
+
this._phase = CoreBootstrapPhase.IOC_ENGINE_INIT;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @description Phase 3: Register IocEngine
|
|
80
|
+
* IocEngine will inject Container automatically
|
|
81
|
+
* @returns {Promise<void>}
|
|
82
|
+
*/
|
|
83
|
+
async registerIocEngine() {
|
|
84
|
+
await this._container.register(ICoreServiceNames.IOC_ENGINE, IocEngine, true);
|
|
85
|
+
this._phase = CoreBootstrapPhase.HTTP_ADAPTER_INIT;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* @description Phase 4: Register HTTP Adapter
|
|
89
|
+
* @param {AsenaAdapter} adapter - HTTP adapter instance
|
|
90
|
+
* @returns {Promise<void>}
|
|
91
|
+
*/
|
|
92
|
+
async registerAdapters(adapter) {
|
|
93
|
+
await this._container.registerInstance(ICoreServiceNames.ASENA_ADAPTER, adapter);
|
|
94
|
+
this._phase = CoreBootstrapPhase.PREPARE_SERVICES_INIT;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* @description Phase 5: Register all Prepare Services and Internal Services
|
|
98
|
+
* They will inject Container and Logger automatically
|
|
99
|
+
* @returns {Promise<void>}
|
|
100
|
+
*/
|
|
101
|
+
async registerPrepareServices() {
|
|
102
|
+
const services = [
|
|
103
|
+
// Internal messaging system (must be registered before prepare services)
|
|
104
|
+
{ name: ICoreServiceNames.__ULAK__, Class: Ulak },
|
|
105
|
+
// Prepare services
|
|
106
|
+
{ name: ICoreServiceNames.PREPARE_MIDDLEWARE_SERVICE, Class: PrepareMiddlewareService },
|
|
107
|
+
{ name: ICoreServiceNames.PREPARE_CONFIG_SERVICE, Class: PrepareConfigService },
|
|
108
|
+
{ name: ICoreServiceNames.PREPARE_WEBSOCKET_SERVICE, Class: PrepareWebsocketService },
|
|
109
|
+
{ name: ICoreServiceNames.PREPARE_VALIDATOR_SERVICE, Class: PrepareValidatorService },
|
|
110
|
+
{ name: ICoreServiceNames.PREPARE_STATIC_SERVE_CONFIG_SERVICE, Class: PrepareStaticServeConfigService },
|
|
111
|
+
];
|
|
112
|
+
for (const service of services) {
|
|
113
|
+
await this._container.register(service.name, service.Class, true);
|
|
114
|
+
}
|
|
115
|
+
this._phase = CoreBootstrapPhase.USER_COMPONENTS_SCAN;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @description Get container instance
|
|
119
|
+
* @returns {Container}
|
|
120
|
+
*/
|
|
121
|
+
get container() {
|
|
122
|
+
return this._container;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* @description Get current bootstrap phase
|
|
126
|
+
* @returns {CoreBootstrapPhase}
|
|
127
|
+
*/
|
|
128
|
+
get currentPhase() {
|
|
129
|
+
return this._phase;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* @description Check if CoreContainer is initialized
|
|
133
|
+
* @returns {boolean}
|
|
134
|
+
*/
|
|
135
|
+
get isInitialized() {
|
|
136
|
+
return this._initialized;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=CoreContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoreContainer.js","sourceRoot":"","sources":["../../../lib/ioc/CoreContainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { Container } from './Container';
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { type ICoreService, type InjectableComponent, type IocConfig } from './types';
|
|
2
|
+
import type { Container } from './Container';
|
|
3
|
+
/**
|
|
4
|
+
* @description IoC Engine - Manages component registration and dependency injection
|
|
5
|
+
* Core service that handles automatic component discovery and registration
|
|
6
|
+
*/
|
|
7
|
+
export declare class IocEngine implements ICoreService {
|
|
8
|
+
serviceName: string;
|
|
9
|
+
private _container;
|
|
5
10
|
private injectables;
|
|
6
|
-
private
|
|
7
|
-
|
|
11
|
+
private config?;
|
|
12
|
+
/**
|
|
13
|
+
* @description Set IoC configuration
|
|
14
|
+
* @param {IocConfig} config - IoC configuration object
|
|
15
|
+
* @returns {void}
|
|
16
|
+
*/
|
|
17
|
+
setConfig(config?: IocConfig): void;
|
|
8
18
|
searchAndRegister(components?: InjectableComponent[]): Promise<void>;
|
|
9
19
|
private loadComponents;
|
|
10
20
|
private validateAndRegisterComponents;
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
|
|
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 { ICoreServiceNames, } from './types';
|
|
2
11
|
import { getAllFiles } from './helper/fileHelper';
|
|
3
12
|
import * as path from 'node:path';
|
|
4
13
|
import { ComponentConstants } from './constants';
|
|
@@ -6,13 +15,24 @@ import * as process from 'node:process';
|
|
|
6
15
|
import * as console from 'node:console';
|
|
7
16
|
import { getStrategyClass } from './helper/iocHelper';
|
|
8
17
|
import { getOwnTypedMetadata, getTypedMetadata } from '../utils/typedMetadata';
|
|
9
|
-
import { Scope } from './component';
|
|
10
|
-
|
|
18
|
+
import { Inject, Scope } from './component';
|
|
19
|
+
import { CoreService } from './decorators';
|
|
20
|
+
import { CircularDependencyError } from './CircularDependencyDetector';
|
|
21
|
+
/**
|
|
22
|
+
* @description IoC Engine - Manages component registration and dependency injection
|
|
23
|
+
* Core service that handles automatic component discovery and registration
|
|
24
|
+
*/
|
|
25
|
+
let IocEngine = class IocEngine {
|
|
26
|
+
serviceName = 'IocEngine';
|
|
11
27
|
_container;
|
|
12
28
|
injectables = [];
|
|
13
29
|
config;
|
|
14
|
-
|
|
15
|
-
|
|
30
|
+
/**
|
|
31
|
+
* @description Set IoC configuration
|
|
32
|
+
* @param {IocConfig} config - IoC configuration object
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
setConfig(config) {
|
|
16
36
|
this.config = config;
|
|
17
37
|
}
|
|
18
38
|
async searchAndRegister(components) {
|
|
@@ -129,7 +149,7 @@ export class IocEngine {
|
|
|
129
149
|
}
|
|
130
150
|
if (visitedCount !== inDegree.size) {
|
|
131
151
|
const cycle = this.findCycle(adjacencyList);
|
|
132
|
-
throw new
|
|
152
|
+
throw new CircularDependencyError(`Circular dependency detected: ${cycle.join(' -> ')}`);
|
|
133
153
|
}
|
|
134
154
|
return sorted.reverse();
|
|
135
155
|
}
|
|
@@ -228,5 +248,13 @@ export class IocEngine {
|
|
|
228
248
|
get container() {
|
|
229
249
|
return this._container;
|
|
230
250
|
}
|
|
231
|
-
}
|
|
251
|
+
};
|
|
252
|
+
__decorate([
|
|
253
|
+
Inject('Container'),
|
|
254
|
+
__metadata("design:type", Function)
|
|
255
|
+
], IocEngine.prototype, "_container", void 0);
|
|
256
|
+
IocEngine = __decorate([
|
|
257
|
+
CoreService(ICoreServiceNames.IOC_ENGINE)
|
|
258
|
+
], IocEngine);
|
|
259
|
+
export { IocEngine };
|
|
232
260
|
//# sourceMappingURL=IocEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IocEngine.js","sourceRoot":"","sources":["../../../lib/ioc/IocEngine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"IocEngine.js","sourceRoot":"","sources":["../../../lib/ioc/IocEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,28 @@ import type { Class } from '../../../server/types';
|
|
|
2
2
|
/**
|
|
3
3
|
* Property decorator to inject a dependency.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Supports three syntaxes:
|
|
6
|
+
* 1. Class injection: `@Inject(UserService)`
|
|
7
|
+
* 2. String injection with expression: `@Inject('UserService', (s) => s.getUsers())`
|
|
8
|
+
* 3. Tuple injection (helper pattern): `@Inject(ulak('/chat'))` where ulak() returns [serviceName, expression]
|
|
9
|
+
*
|
|
10
|
+
* @param {Class | string | readonly [string, (injectedClass: any) => any]} Injection - The dependency to inject
|
|
11
|
+
* @param expression - Optional expression to evaluate on the injected class (only used with Class or string)
|
|
12
|
+
* @returns {PropertyDecorator} - The property decorator function
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Class injection
|
|
17
|
+
* @Inject(UserService)
|
|
18
|
+
* private userService: UserService;
|
|
19
|
+
*
|
|
20
|
+
* // String injection with expression
|
|
21
|
+
* @Inject('UserService', (s) => s.getAllUsers())
|
|
22
|
+
* private users: User[];
|
|
23
|
+
*
|
|
24
|
+
* // Tuple injection (helper pattern)
|
|
25
|
+
* @Inject(ulak('/chat'))
|
|
26
|
+
* private chat: Ulak.NameSpace<'/chat'>;
|
|
27
|
+
* ```
|
|
8
28
|
*/
|
|
9
|
-
export declare const Inject: (Injection: Class | string, expression?: (injectedClass: any) => any) => PropertyDecorator;
|
|
29
|
+
export declare const Inject: (Injection: Class | string | readonly [string | Class, (injectedClass: any) => any], expression?: (injectedClass: any) => any) => PropertyDecorator;
|
|
@@ -3,22 +3,59 @@ import { defineTypedMetadata, getOwnTypedMetadata, getTypedMetadata } from '../.
|
|
|
3
3
|
/**
|
|
4
4
|
* Property decorator to inject a dependency.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Supports three syntaxes:
|
|
7
|
+
* 1. Class injection: `@Inject(UserService)`
|
|
8
|
+
* 2. String injection with expression: `@Inject('UserService', (s) => s.getUsers())`
|
|
9
|
+
* 3. Tuple injection (helper pattern): `@Inject(ulak('/chat'))` where ulak() returns [serviceName, expression]
|
|
10
|
+
*
|
|
11
|
+
* @param {Class | string | readonly [string, (injectedClass: any) => any]} Injection - The dependency to inject
|
|
12
|
+
* @param expression - Optional expression to evaluate on the injected class (only used with Class or string)
|
|
13
|
+
* @returns {PropertyDecorator} - The property decorator function
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Class injection
|
|
18
|
+
* @Inject(UserService)
|
|
19
|
+
* private userService: UserService;
|
|
20
|
+
*
|
|
21
|
+
* // String injection with expression
|
|
22
|
+
* @Inject('UserService', (s) => s.getAllUsers())
|
|
23
|
+
* private users: User[];
|
|
24
|
+
*
|
|
25
|
+
* // Tuple injection (helper pattern)
|
|
26
|
+
* @Inject(ulak('/chat'))
|
|
27
|
+
* private chat: Ulak.NameSpace<'/chat'>;
|
|
28
|
+
* ```
|
|
9
29
|
*/
|
|
10
30
|
export const Inject = (Injection, expression) => {
|
|
11
31
|
return (target, propertyKey) => {
|
|
32
|
+
let dependencyName;
|
|
33
|
+
let resolvedExpression = expression;
|
|
34
|
+
// Check if Injection is a tuple [serviceName, expression]
|
|
35
|
+
if (Array.isArray(Injection) && Injection.length === 2) {
|
|
36
|
+
const [name, tupleExpression] = Injection;
|
|
37
|
+
// Check Name type, it can be a Class or String
|
|
38
|
+
dependencyName = typeof name === 'string' ? name : getTypedMetadata(ComponentConstants.NameKey, name);
|
|
39
|
+
resolvedExpression = tupleExpression;
|
|
40
|
+
}
|
|
41
|
+
else if (typeof Injection === 'string') {
|
|
42
|
+
dependencyName = Injection;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Injection is a Class
|
|
46
|
+
dependencyName = getTypedMetadata(ComponentConstants.NameKey, Injection);
|
|
47
|
+
}
|
|
48
|
+
// Store dependency
|
|
12
49
|
const dependencies = getOwnTypedMetadata(ComponentConstants.DependencyKey, target.constructor) || {};
|
|
13
50
|
if (!dependencies[propertyKey]) {
|
|
14
|
-
dependencies[propertyKey] =
|
|
15
|
-
typeof Injection === 'string' ? Injection : getTypedMetadata(ComponentConstants.NameKey, Injection);
|
|
51
|
+
dependencies[propertyKey] = dependencyName;
|
|
16
52
|
}
|
|
17
53
|
defineTypedMetadata(ComponentConstants.DependencyKey, dependencies, target.constructor);
|
|
18
|
-
|
|
54
|
+
// Store expression if provided
|
|
55
|
+
if (resolvedExpression) {
|
|
19
56
|
const expressions = getOwnTypedMetadata(ComponentConstants.ExpressionKey, target.constructor) || {};
|
|
20
57
|
if (!expressions[propertyKey]) {
|
|
21
|
-
expressions[propertyKey] =
|
|
58
|
+
expressions[propertyKey] = resolvedExpression;
|
|
22
59
|
}
|
|
23
60
|
defineTypedMetadata(ComponentConstants.ExpressionKey, expressions, target.constructor);
|
|
24
61
|
}
|