@linyjs/server-module-interface 0.0.5 → 0.0.7
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/dist/application.d.ts +17 -0
- package/dist/application.d.ts.map +1 -0
- package/dist/application.js +6 -0
- package/dist/application.js.map +1 -0
- package/dist/di.d.ts +100 -0
- package/dist/di.d.ts.map +1 -0
- package/dist/di.js +15 -0
- package/dist/di.js.map +1 -0
- package/dist/domain.d.ts +62 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/domain.js +6 -0
- package/dist/domain.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/{src/interfaces.ts → dist/interfaces.d.ts} +14 -31
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +6 -0
- package/dist/interfaces.js.map +1 -0
- package/package.json +5 -1
- package/src/application.ts +0 -21
- package/src/di.ts +0 -127
- package/src/domain.ts +0 -75
- package/src/index.ts +0 -55
- package/tsconfig.json +0 -8
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 服务端应用接口
|
|
3
|
+
* 详见 [服务端插件式架构设计](../../spec/服务端插件式架构设计.md)
|
|
4
|
+
*/
|
|
5
|
+
import type { IModule, IModuleHandler } from './di.js';
|
|
6
|
+
/** 服务端应用接口 */
|
|
7
|
+
export interface IServerApplication {
|
|
8
|
+
/** 设置模块生命周期处理器 */
|
|
9
|
+
setHandler(handler: IModuleHandler): void;
|
|
10
|
+
/** 加载一组模块,按依赖拓扑排序后由容器实例化服务 */
|
|
11
|
+
loadModules(modules: IModule[]): Promise<void>;
|
|
12
|
+
/** 获取服务实例 */
|
|
13
|
+
getService<T>(moduleName: string, serviceTag: string): T;
|
|
14
|
+
/** 销毁所有已加载模块(逆序调用 handler.onModuleUnloaded) */
|
|
15
|
+
destroyAll(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAoB,MAAM,SAAS,CAAA;AAExE,cAAc;AACd,MAAM,WAAW,kBAAkB;IACjC,kBAAkB;IAClB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAA;IAEzC,8BAA8B;IAC9B,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9C,aAAa;IACb,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAAA;IAExD,+CAA+C;IAC/C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/di.d.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基础依赖注入类型定义
|
|
3
|
+
* 详见 [依赖注入机制设计](../../spec/依赖注入机制设计.md)
|
|
4
|
+
*/
|
|
5
|
+
/** 所有服务的基础类型 */
|
|
6
|
+
export type IService = object;
|
|
7
|
+
/** 服务类构造器类型 */
|
|
8
|
+
export interface IServiceConstructor<S extends IService> {
|
|
9
|
+
new (...args: any[]): S;
|
|
10
|
+
}
|
|
11
|
+
/** 服务工厂函数类型 */
|
|
12
|
+
export type IServiceFactory<S extends IService> = (...args: any[]) => S;
|
|
13
|
+
/** 服务实现类型(类或工厂函数) */
|
|
14
|
+
export type IServiceMaker<S extends IService> = IServiceConstructor<S> | IServiceFactory<S>;
|
|
15
|
+
/** 服务元数据基础类型 */
|
|
16
|
+
export type IServiceMetadata = Record<string, any>;
|
|
17
|
+
/** 服务定义 */
|
|
18
|
+
export interface IServiceDef<S extends IService = IService, M extends IServiceMetadata = IServiceMetadata> {
|
|
19
|
+
/** 服务唯一标识(模块内唯一) */
|
|
20
|
+
serviceTag: string;
|
|
21
|
+
/** 服务实现,可以是类或工厂函数 */
|
|
22
|
+
serviceImpl: IServiceMaker<S>;
|
|
23
|
+
/** 依赖的其他服务列表,支持 'serviceTag' 或 'moduleName.serviceTag' 格式 */
|
|
24
|
+
dependencies?: string[];
|
|
25
|
+
/** 元数据 */
|
|
26
|
+
meta?: M;
|
|
27
|
+
}
|
|
28
|
+
/** 模块定义 */
|
|
29
|
+
export interface IModule {
|
|
30
|
+
/** 模块名称 */
|
|
31
|
+
name: string;
|
|
32
|
+
/** 依赖的其他模块名称 */
|
|
33
|
+
moduleDependencies?: string[];
|
|
34
|
+
/** 服务定义列表 */
|
|
35
|
+
serviceDefs: IServiceDef[];
|
|
36
|
+
}
|
|
37
|
+
/** 模块状态枚举 */
|
|
38
|
+
export declare enum ModuleState {
|
|
39
|
+
Unloaded = "unloaded",
|
|
40
|
+
Loading = "loading",
|
|
41
|
+
Loaded = "loaded",
|
|
42
|
+
Error = "error",
|
|
43
|
+
Unloading = "unloading"
|
|
44
|
+
}
|
|
45
|
+
/** 模块事件类型 */
|
|
46
|
+
export type ModuleEventType = 'module_loaded' | 'module_unloaded' | 'module_error' | 'module_state_changed';
|
|
47
|
+
/** 模块事件 */
|
|
48
|
+
export interface IModuleEvent {
|
|
49
|
+
type: ModuleEventType;
|
|
50
|
+
moduleName: string;
|
|
51
|
+
module?: ILoadedModule;
|
|
52
|
+
error?: Error;
|
|
53
|
+
timestamp: number;
|
|
54
|
+
}
|
|
55
|
+
/** 已加载模块的运行时表示 */
|
|
56
|
+
export interface ILoadedModule {
|
|
57
|
+
/** 模块名称 */
|
|
58
|
+
name: string;
|
|
59
|
+
/** 模块状态 */
|
|
60
|
+
state: ModuleState;
|
|
61
|
+
/** 服务实例映射表 */
|
|
62
|
+
services: Map<string, IService>;
|
|
63
|
+
/** 源模块定义 */
|
|
64
|
+
sourceModule?: IModule;
|
|
65
|
+
/** 加载时间戳 */
|
|
66
|
+
loadedAt?: number;
|
|
67
|
+
}
|
|
68
|
+
/** 模块生命周期处理器 */
|
|
69
|
+
export interface IModuleHandler {
|
|
70
|
+
/** 模块加载完成后执行 */
|
|
71
|
+
onModuleLoaded?(module: ILoadedModule): void | Promise<void>;
|
|
72
|
+
/** 模块卸载后执行 */
|
|
73
|
+
onModuleUnloaded?(module: ILoadedModule): void | Promise<void>;
|
|
74
|
+
/** 模块加载错误时执行 */
|
|
75
|
+
onModuleError?(moduleName: string, error: Error): void | Promise<void>;
|
|
76
|
+
}
|
|
77
|
+
/** 模块容器接口 */
|
|
78
|
+
export interface IModuleContainer {
|
|
79
|
+
/** 设置模块生命周期处理器 */
|
|
80
|
+
setModuleHandler(handler: IModuleHandler): void;
|
|
81
|
+
/** 加载模块 */
|
|
82
|
+
loadModules(modules: IModule[]): Promise<void>;
|
|
83
|
+
/** 卸载模块 */
|
|
84
|
+
unloadModule(moduleName: string): Promise<void>;
|
|
85
|
+
/** 重新加载模块 */
|
|
86
|
+
reloadModule(moduleName: string, newModule?: IModule): Promise<void>;
|
|
87
|
+
/** 检查模块是否已加载 */
|
|
88
|
+
isModuleLoaded(moduleName: string): boolean;
|
|
89
|
+
/** 获取已加载模块 */
|
|
90
|
+
getLoadedModule(moduleName: string): ILoadedModule | undefined;
|
|
91
|
+
/** 获取模块状态 */
|
|
92
|
+
getModuleState(moduleName: string): ModuleState;
|
|
93
|
+
/** 获取服务实例 */
|
|
94
|
+
getService<T>(moduleName: string, serviceTag: string): T;
|
|
95
|
+
/** 监听模块事件 */
|
|
96
|
+
on(event: ModuleEventType, listener: (event: IModuleEvent) => void): void;
|
|
97
|
+
/** 取消监听模块事件 */
|
|
98
|
+
off(event: ModuleEventType, listener: (event: IModuleEvent) => void): void;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=di.d.ts.map
|
package/dist/di.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"di.d.ts","sourceRoot":"","sources":["../src/di.ts"],"names":[],"mappings":"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"}
|
package/dist/di.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 基础依赖注入类型定义
|
|
3
|
+
* 详见 [依赖注入机制设计](../../spec/依赖注入机制设计.md)
|
|
4
|
+
*/
|
|
5
|
+
// ==================== 模块状态与事件 ====================
|
|
6
|
+
/** 模块状态枚举 */
|
|
7
|
+
export var ModuleState;
|
|
8
|
+
(function (ModuleState) {
|
|
9
|
+
ModuleState["Unloaded"] = "unloaded";
|
|
10
|
+
ModuleState["Loading"] = "loading";
|
|
11
|
+
ModuleState["Loaded"] = "loaded";
|
|
12
|
+
ModuleState["Error"] = "error";
|
|
13
|
+
ModuleState["Unloading"] = "unloading";
|
|
14
|
+
})(ModuleState || (ModuleState = {}));
|
|
15
|
+
//# sourceMappingURL=di.js.map
|
package/dist/di.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"di.js","sourceRoot":"","sources":["../src/di.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA8CH,oDAAoD;AAEpD,aAAa;AACb,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;IACf,sCAAuB,CAAA;AACzB,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB"}
|
package/dist/domain.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 服务端领域类型
|
|
3
|
+
* 详见 [服务端模块接口设计](../../spec/服务端模块接口设计.md)
|
|
4
|
+
*/
|
|
5
|
+
/** 路由上下文 — 由中间件逐步填充的可变上下文 */
|
|
6
|
+
export interface IRouteContext {
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
/** 中间件 next 函数 */
|
|
10
|
+
export type INextFunction = () => void | Promise<void>;
|
|
11
|
+
/** 路由处理函数返回值 - 根据 responseType 自动推断 */
|
|
12
|
+
export type IRouteHandlerResult = any | string | {
|
|
13
|
+
filePath: string;
|
|
14
|
+
filename?: string;
|
|
15
|
+
contentType?: string;
|
|
16
|
+
} | NodeJS.ReadableStream | {
|
|
17
|
+
data: any;
|
|
18
|
+
status?: number;
|
|
19
|
+
} | void;
|
|
20
|
+
/** 路由处理函数 */
|
|
21
|
+
export type IRouteHandler = (params: Record<string, any>, ctx: IRouteContext) => IRouteHandlerResult | Promise<IRouteHandlerResult>;
|
|
22
|
+
/** 中间件处理函数 */
|
|
23
|
+
export type IMiddlewareHandler = (params: Record<string, any>, ctx: IRouteContext, next: INextFunction) => void | Promise<void>;
|
|
24
|
+
/** 路由 */
|
|
25
|
+
export interface IRoute {
|
|
26
|
+
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
27
|
+
path: string;
|
|
28
|
+
/**
|
|
29
|
+
* 中间件引用列表,元素为 IMiddleware.middlewareId。
|
|
30
|
+
* 解析规则:
|
|
31
|
+
* - 裸 ID(如 'auth'):优先在当前模块内查找,找不到则按模块依赖顺序向外查找
|
|
32
|
+
* - 跨模块引用(如 'security.auth'):显式指定 moduleName,格式为 "moduleName.middlewareId"
|
|
33
|
+
* - 引用的 middlewareId 不存在时,Handler 应在加载阶段抛出错误,拒绝注册该路由
|
|
34
|
+
* - 数组顺序即执行顺序,按从前到后依次调用
|
|
35
|
+
*/
|
|
36
|
+
middlewares: string[];
|
|
37
|
+
handler: IRouteHandler;
|
|
38
|
+
/**
|
|
39
|
+
* 响应类型声明(可选),用于框架层自动处理响应格式化
|
|
40
|
+
* - 'json': 自动序列化为 JSON,设置 Content-Type: application/json
|
|
41
|
+
* - 'file': 自动发送文件,支持断点续传
|
|
42
|
+
* - 'video_stream': 流式传输视频,支持 range 请求
|
|
43
|
+
*
|
|
44
|
+
* 如果未指定,框架会根据 handler 返回值的 type 字段自动推断
|
|
45
|
+
*/
|
|
46
|
+
responseType?: 'json' | 'file' | 'video_stream';
|
|
47
|
+
meta?: Record<string, any>;
|
|
48
|
+
}
|
|
49
|
+
/** 中间件 */
|
|
50
|
+
export interface IMiddleware {
|
|
51
|
+
/** 中间件唯一标识,模块内唯一。跨模块引用时通过 "moduleName.middlewareId" 定位 */
|
|
52
|
+
middlewareId: string;
|
|
53
|
+
handler: IMiddlewareHandler;
|
|
54
|
+
}
|
|
55
|
+
/** 定时任务 */
|
|
56
|
+
export interface ICronJob {
|
|
57
|
+
name: string;
|
|
58
|
+
/** cron 表达式 */
|
|
59
|
+
schedule: string;
|
|
60
|
+
run(): Promise<void>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=domain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,kBAAkB;AAClB,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEtD,uCAAuC;AACvC,MAAM,MAAM,mBAAmB,GAC3B,GAAG,GACH,MAAM,GACN;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,MAAM,CAAC,cAAc,GACrB;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,IAAI,CAAA;AAER,aAAa;AACb,MAAM,MAAM,aAAa,GAAG,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,GAAG,EAAE,aAAa,KACf,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;AAEvD,cAAc;AACd,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa,KAChB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,SAAS;AACT,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAA;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;OAOG;IACH,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,OAAO,EAAE,aAAa,CAAA;IACtB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,cAAc,CAAA;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC3B;AAED,UAAU;AACV,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,kBAAkB,CAAA;CAC5B;AAED,WAAW;AACX,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACrB"}
|
package/dist/domain.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @linyjs/server-module-interface
|
|
3
|
+
*
|
|
4
|
+
* 服务端模块接口定义
|
|
5
|
+
* 详见 [服务端模块接口设计](../../spec/服务端模块接口设计.md)
|
|
6
|
+
* 详见 [服务端插件式架构设计](../../spec/服务端插件式架构设计.md)
|
|
7
|
+
*/
|
|
8
|
+
export type { IService, IServiceConstructor, IServiceFactory, IServiceMaker, IServiceMetadata, IServiceDef, IModule, ILoadedModule, IModuleHandler, IModuleContainer, ModuleEventType, IModuleEvent, } from './di.js';
|
|
9
|
+
export { ModuleState } from './di.js';
|
|
10
|
+
export type { IRouteContext, INextFunction, IRouteHandler, IMiddlewareHandler, IRoute, IMiddleware, ICronJob, } from './domain.js';
|
|
11
|
+
export type { IControllerService, IMiddlewareService, ICronService, IServerServiceUsageType, IControllerMetadata, IMiddlewareMetadata, ICronMetadata, IControllerServiceDef, IMiddlewareServiceDef, ICronServiceDef, IServerServiceDef, } from './interfaces.js';
|
|
12
|
+
export type { IServerApplication } from './application.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,QAAQ,EACR,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAGrC,YAAY,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,QAAQ,GACT,MAAM,aAAa,CAAA;AAGpB,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,GAClB,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -2,57 +2,40 @@
|
|
|
2
2
|
* 服务端服务接口、元数据类型、ServiceDef 组合类型
|
|
3
3
|
* 详见 [服务端模块接口设计](../../spec/服务端模块接口设计.md)
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
import type {
|
|
7
|
-
import type { IRoute, IMiddleware, ICronJob } from './domain.js'
|
|
8
|
-
|
|
9
|
-
// ==================== 服务接口 ====================
|
|
10
|
-
|
|
5
|
+
import type { IServiceDef, IServiceMetadata } from './di.js';
|
|
6
|
+
import type { IRoute, IMiddleware, ICronJob } from './domain.js';
|
|
11
7
|
/** 控制器服务 */
|
|
12
8
|
export interface IControllerService {
|
|
13
|
-
|
|
9
|
+
getRoutes(): IRoute[];
|
|
14
10
|
}
|
|
15
|
-
|
|
16
11
|
/** 中间件服务 */
|
|
17
12
|
export interface IMiddlewareService {
|
|
18
|
-
|
|
13
|
+
getMiddlewares(): IMiddleware[];
|
|
19
14
|
}
|
|
20
|
-
|
|
21
15
|
/** 定时任务服务 */
|
|
22
16
|
export interface ICronService {
|
|
23
|
-
|
|
17
|
+
getCronJobs(): ICronJob[];
|
|
24
18
|
}
|
|
25
|
-
|
|
26
|
-
// ==================== 元数据类型 ====================
|
|
27
|
-
|
|
28
19
|
/** 服务端服务用途类型 */
|
|
29
|
-
export type IServerServiceUsageType = 'controller' | 'middleware' | 'cron'
|
|
30
|
-
|
|
20
|
+
export type IServerServiceUsageType = 'controller' | 'middleware' | 'cron';
|
|
31
21
|
/** 路由元数据 */
|
|
32
22
|
export interface IControllerMetadata extends IServiceMetadata {
|
|
33
|
-
|
|
23
|
+
usageType: 'controller';
|
|
34
24
|
}
|
|
35
|
-
|
|
36
25
|
/** 中间件元数据 */
|
|
37
26
|
export interface IMiddlewareMetadata extends IServiceMetadata {
|
|
38
|
-
|
|
27
|
+
usageType: 'middleware';
|
|
39
28
|
}
|
|
40
|
-
|
|
41
29
|
/** 定时任务元数据 */
|
|
42
30
|
export interface ICronMetadata extends IServiceMetadata {
|
|
43
|
-
|
|
31
|
+
usageType: 'cron';
|
|
44
32
|
}
|
|
45
|
-
|
|
46
|
-
// ==================== ServiceDef 组合类型 ====================
|
|
47
|
-
|
|
48
33
|
/** 控制器服务定义 */
|
|
49
|
-
export type IControllerServiceDef = IServiceDef<IControllerService, IControllerMetadata
|
|
50
|
-
|
|
34
|
+
export type IControllerServiceDef = IServiceDef<IControllerService, IControllerMetadata>;
|
|
51
35
|
/** 中间件服务定义 */
|
|
52
|
-
export type IMiddlewareServiceDef = IServiceDef<IMiddlewareService, IMiddlewareMetadata
|
|
53
|
-
|
|
36
|
+
export type IMiddlewareServiceDef = IServiceDef<IMiddlewareService, IMiddlewareMetadata>;
|
|
54
37
|
/** 定时任务服务定义 */
|
|
55
|
-
export type ICronServiceDef = IServiceDef<ICronService, ICronMetadata
|
|
56
|
-
|
|
38
|
+
export type ICronServiceDef = IServiceDef<ICronService, ICronMetadata>;
|
|
57
39
|
/** 服务端 ServiceDef 联合类型 */
|
|
58
|
-
export type IServerServiceDef = IControllerServiceDef | IMiddlewareServiceDef | ICronServiceDef
|
|
40
|
+
export type IServerServiceDef = IControllerServiceDef | IMiddlewareServiceDef | ICronServiceDef;
|
|
41
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAIhE,YAAY;AACZ,MAAM,WAAW,kBAAkB;IACjC,SAAS,IAAI,MAAM,EAAE,CAAA;CACtB;AAED,YAAY;AACZ,MAAM,WAAW,kBAAkB;IACjC,cAAc,IAAI,WAAW,EAAE,CAAA;CAChC;AAED,aAAa;AACb,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,QAAQ,EAAE,CAAA;CAC1B;AAID,gBAAgB;AAChB,MAAM,MAAM,uBAAuB,GAAG,YAAY,GAAG,YAAY,GAAG,MAAM,CAAA;AAE1E,YAAY;AACZ,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,SAAS,EAAE,YAAY,CAAA;CACxB;AAED,aAAa;AACb,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,SAAS,EAAE,YAAY,CAAA;CACxB;AAED,cAAc;AACd,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,SAAS,EAAE,MAAM,CAAA;CAClB;AAID,cAAc;AACd,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAA;AAExF,cAAc;AACd,MAAM,MAAM,qBAAqB,GAAG,WAAW,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAA;AAExF,eAAe;AACf,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;AAEtE,0BAA0B;AAC1B,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,GAAG,qBAAqB,GAAG,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@linyjs/server-module-interface",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
"default": "./dist/index.js"
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
14
18
|
"scripts": {
|
|
15
19
|
"build": "tsc -b",
|
|
16
20
|
"clean": "rm -rf dist *.tsbuildinfo"
|
package/src/application.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 服务端应用接口
|
|
3
|
-
* 详见 [服务端插件式架构设计](../../spec/服务端插件式架构设计.md)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import type { IModule, IModuleHandler, IModuleContainer } from './di.js'
|
|
7
|
-
|
|
8
|
-
/** 服务端应用接口 */
|
|
9
|
-
export interface IServerApplication {
|
|
10
|
-
/** 设置模块生命周期处理器 */
|
|
11
|
-
setHandler(handler: IModuleHandler): void
|
|
12
|
-
|
|
13
|
-
/** 加载一组模块,按依赖拓扑排序后由容器实例化服务 */
|
|
14
|
-
loadModules(modules: IModule[]): Promise<void>
|
|
15
|
-
|
|
16
|
-
/** 获取服务实例 */
|
|
17
|
-
getService<T>(moduleName: string, serviceTag: string): T
|
|
18
|
-
|
|
19
|
-
/** 销毁所有已加载模块(逆序调用 handler.onModuleUnloaded) */
|
|
20
|
-
destroyAll(): Promise<void>
|
|
21
|
-
}
|
package/src/di.ts
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 基础依赖注入类型定义
|
|
3
|
-
* 详见 [依赖注入机制设计](../../spec/依赖注入机制设计.md)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/** 所有服务的基础类型 */
|
|
7
|
-
export type IService = object
|
|
8
|
-
|
|
9
|
-
/** 服务类构造器类型 */
|
|
10
|
-
export interface IServiceConstructor<S extends IService> {
|
|
11
|
-
new (...args: any[]): S
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** 服务工厂函数类型 */
|
|
15
|
-
export type IServiceFactory<S extends IService> = (...args: any[]) => S
|
|
16
|
-
|
|
17
|
-
/** 服务实现类型(类或工厂函数) */
|
|
18
|
-
export type IServiceMaker<S extends IService> =
|
|
19
|
-
| IServiceConstructor<S>
|
|
20
|
-
| IServiceFactory<S>
|
|
21
|
-
|
|
22
|
-
/** 服务元数据基础类型 */
|
|
23
|
-
export type IServiceMetadata = Record<string, any>
|
|
24
|
-
|
|
25
|
-
/** 服务定义 */
|
|
26
|
-
export interface IServiceDef<
|
|
27
|
-
S extends IService = IService,
|
|
28
|
-
M extends IServiceMetadata = IServiceMetadata
|
|
29
|
-
> {
|
|
30
|
-
/** 服务唯一标识(模块内唯一) */
|
|
31
|
-
serviceTag: string
|
|
32
|
-
/** 服务实现,可以是类或工厂函数 */
|
|
33
|
-
serviceImpl: IServiceMaker<S>
|
|
34
|
-
/** 依赖的其他服务列表,支持 'serviceTag' 或 'moduleName.serviceTag' 格式 */
|
|
35
|
-
dependencies?: string[]
|
|
36
|
-
/** 元数据 */
|
|
37
|
-
meta?: M
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/** 模块定义 */
|
|
41
|
-
export interface IModule {
|
|
42
|
-
/** 模块名称 */
|
|
43
|
-
name: string
|
|
44
|
-
/** 依赖的其他模块名称 */
|
|
45
|
-
moduleDependencies?: string[]
|
|
46
|
-
/** 服务定义列表 */
|
|
47
|
-
serviceDefs: IServiceDef[]
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// ==================== 模块状态与事件 ====================
|
|
51
|
-
|
|
52
|
-
/** 模块状态枚举 */
|
|
53
|
-
export enum ModuleState {
|
|
54
|
-
Unloaded = 'unloaded',
|
|
55
|
-
Loading = 'loading',
|
|
56
|
-
Loaded = 'loaded',
|
|
57
|
-
Error = 'error',
|
|
58
|
-
Unloading = 'unloading',
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** 模块事件类型 */
|
|
62
|
-
export type ModuleEventType =
|
|
63
|
-
| 'module_loaded'
|
|
64
|
-
| 'module_unloaded'
|
|
65
|
-
| 'module_error'
|
|
66
|
-
| 'module_state_changed'
|
|
67
|
-
|
|
68
|
-
/** 模块事件 */
|
|
69
|
-
export interface IModuleEvent {
|
|
70
|
-
type: ModuleEventType
|
|
71
|
-
moduleName: string
|
|
72
|
-
module?: ILoadedModule
|
|
73
|
-
error?: Error
|
|
74
|
-
timestamp: number
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/** 已加载模块的运行时表示 */
|
|
78
|
-
export interface ILoadedModule {
|
|
79
|
-
/** 模块名称 */
|
|
80
|
-
name: string
|
|
81
|
-
/** 模块状态 */
|
|
82
|
-
state: ModuleState
|
|
83
|
-
/** 服务实例映射表 */
|
|
84
|
-
services: Map<string, IService>
|
|
85
|
-
/** 源模块定义 */
|
|
86
|
-
sourceModule?: IModule
|
|
87
|
-
/** 加载时间戳 */
|
|
88
|
-
loadedAt?: number
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/** 模块生命周期处理器 */
|
|
92
|
-
export interface IModuleHandler {
|
|
93
|
-
/** 模块加载完成后执行 */
|
|
94
|
-
onModuleLoaded?(module: ILoadedModule): void | Promise<void>
|
|
95
|
-
/** 模块卸载后执行 */
|
|
96
|
-
onModuleUnloaded?(module: ILoadedModule): void | Promise<void>
|
|
97
|
-
/** 模块加载错误时执行 */
|
|
98
|
-
onModuleError?(moduleName: string, error: Error): void | Promise<void>
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/** 模块容器接口 */
|
|
102
|
-
export interface IModuleContainer {
|
|
103
|
-
/** 设置模块生命周期处理器 */
|
|
104
|
-
setModuleHandler(handler: IModuleHandler): void
|
|
105
|
-
|
|
106
|
-
/** 加载模块 */
|
|
107
|
-
loadModules(modules: IModule[]): Promise<void>
|
|
108
|
-
|
|
109
|
-
/** 卸载模块 */
|
|
110
|
-
unloadModule(moduleName: string): Promise<void>
|
|
111
|
-
/** 重新加载模块 */
|
|
112
|
-
reloadModule(moduleName: string, newModule?: IModule): Promise<void>
|
|
113
|
-
|
|
114
|
-
/** 检查模块是否已加载 */
|
|
115
|
-
isModuleLoaded(moduleName: string): boolean
|
|
116
|
-
/** 获取已加载模块 */
|
|
117
|
-
getLoadedModule(moduleName: string): ILoadedModule | undefined
|
|
118
|
-
/** 获取模块状态 */
|
|
119
|
-
getModuleState(moduleName: string): ModuleState
|
|
120
|
-
/** 获取服务实例 */
|
|
121
|
-
getService<T>(moduleName: string, serviceTag: string): T
|
|
122
|
-
|
|
123
|
-
/** 监听模块事件 */
|
|
124
|
-
on(event: ModuleEventType, listener: (event: IModuleEvent) => void): void
|
|
125
|
-
/** 取消监听模块事件 */
|
|
126
|
-
off(event: ModuleEventType, listener: (event: IModuleEvent) => void): void
|
|
127
|
-
}
|
package/src/domain.ts
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 服务端领域类型
|
|
3
|
-
* 详见 [服务端模块接口设计](../../spec/服务端模块接口设计.md)
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/** 路由上下文 — 由中间件逐步填充的可变上下文 */
|
|
7
|
-
export interface IRouteContext {
|
|
8
|
-
[key: string]: unknown
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** 中间件 next 函数 */
|
|
12
|
-
export type INextFunction = () => void | Promise<void>
|
|
13
|
-
|
|
14
|
-
/** 路由处理函数返回值 - 根据 responseType 自动推断 */
|
|
15
|
-
export type IRouteHandlerResult =
|
|
16
|
-
| any // responseType='json': 直接返回任意数据
|
|
17
|
-
| string // responseType='file': 返回文件路径(简单场景)
|
|
18
|
-
| { filePath: string; filename?: string; contentType?: string } // responseType='file': 完整配置
|
|
19
|
-
| NodeJS.ReadableStream // responseType='video_stream': 返回流对象
|
|
20
|
-
| { data: any; status?: number } // responseType='json': 带状态码的响应
|
|
21
|
-
| void // 无返回值
|
|
22
|
-
|
|
23
|
-
/** 路由处理函数 */
|
|
24
|
-
export type IRouteHandler = (
|
|
25
|
-
params: Record<string, any>,
|
|
26
|
-
ctx: IRouteContext
|
|
27
|
-
) => IRouteHandlerResult | Promise<IRouteHandlerResult>
|
|
28
|
-
|
|
29
|
-
/** 中间件处理函数 */
|
|
30
|
-
export type IMiddlewareHandler = (
|
|
31
|
-
params: Record<string, any>,
|
|
32
|
-
ctx: IRouteContext,
|
|
33
|
-
next: INextFunction
|
|
34
|
-
) => void | Promise<void>
|
|
35
|
-
|
|
36
|
-
/** 路由 */
|
|
37
|
-
export interface IRoute {
|
|
38
|
-
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'
|
|
39
|
-
path: string
|
|
40
|
-
/**
|
|
41
|
-
* 中间件引用列表,元素为 IMiddleware.middlewareId。
|
|
42
|
-
* 解析规则:
|
|
43
|
-
* - 裸 ID(如 'auth'):优先在当前模块内查找,找不到则按模块依赖顺序向外查找
|
|
44
|
-
* - 跨模块引用(如 'security.auth'):显式指定 moduleName,格式为 "moduleName.middlewareId"
|
|
45
|
-
* - 引用的 middlewareId 不存在时,Handler 应在加载阶段抛出错误,拒绝注册该路由
|
|
46
|
-
* - 数组顺序即执行顺序,按从前到后依次调用
|
|
47
|
-
*/
|
|
48
|
-
middlewares: string[]
|
|
49
|
-
handler: IRouteHandler
|
|
50
|
-
/**
|
|
51
|
-
* 响应类型声明(可选),用于框架层自动处理响应格式化
|
|
52
|
-
* - 'json': 自动序列化为 JSON,设置 Content-Type: application/json
|
|
53
|
-
* - 'file': 自动发送文件,支持断点续传
|
|
54
|
-
* - 'video_stream': 流式传输视频,支持 range 请求
|
|
55
|
-
*
|
|
56
|
-
* 如果未指定,框架会根据 handler 返回值的 type 字段自动推断
|
|
57
|
-
*/
|
|
58
|
-
responseType?: 'json' | 'file' | 'video_stream'
|
|
59
|
-
meta?: Record<string, any>
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/** 中间件 */
|
|
63
|
-
export interface IMiddleware {
|
|
64
|
-
/** 中间件唯一标识,模块内唯一。跨模块引用时通过 "moduleName.middlewareId" 定位 */
|
|
65
|
-
middlewareId: string
|
|
66
|
-
handler: IMiddlewareHandler
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/** 定时任务 */
|
|
70
|
-
export interface ICronJob {
|
|
71
|
-
name: string
|
|
72
|
-
/** cron 表达式 */
|
|
73
|
-
schedule: string
|
|
74
|
-
run(): Promise<void>
|
|
75
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @linyjs/server-module-interface
|
|
3
|
-
*
|
|
4
|
-
* 服务端模块接口定义
|
|
5
|
-
* 详见 [服务端模块接口设计](../../spec/服务端模块接口设计.md)
|
|
6
|
-
* 详见 [服务端插件式架构设计](../../spec/服务端插件式架构设计.md)
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
// 基础依赖注入类型
|
|
10
|
-
export type {
|
|
11
|
-
IService,
|
|
12
|
-
IServiceConstructor,
|
|
13
|
-
IServiceFactory,
|
|
14
|
-
IServiceMaker,
|
|
15
|
-
IServiceMetadata,
|
|
16
|
-
IServiceDef,
|
|
17
|
-
IModule,
|
|
18
|
-
ILoadedModule,
|
|
19
|
-
IModuleHandler,
|
|
20
|
-
IModuleContainer,
|
|
21
|
-
ModuleEventType,
|
|
22
|
-
IModuleEvent,
|
|
23
|
-
} from './di.js'
|
|
24
|
-
|
|
25
|
-
// 模块状态枚举(运行时值)
|
|
26
|
-
export { ModuleState } from './di.js'
|
|
27
|
-
|
|
28
|
-
// 服务端领域类型
|
|
29
|
-
export type {
|
|
30
|
-
IRouteContext,
|
|
31
|
-
INextFunction,
|
|
32
|
-
IRouteHandler,
|
|
33
|
-
IMiddlewareHandler,
|
|
34
|
-
IRoute,
|
|
35
|
-
IMiddleware,
|
|
36
|
-
ICronJob,
|
|
37
|
-
} from './domain.js'
|
|
38
|
-
|
|
39
|
-
// 服务接口、元数据、ServiceDef 组合类型
|
|
40
|
-
export type {
|
|
41
|
-
IControllerService,
|
|
42
|
-
IMiddlewareService,
|
|
43
|
-
ICronService,
|
|
44
|
-
IServerServiceUsageType,
|
|
45
|
-
IControllerMetadata,
|
|
46
|
-
IMiddlewareMetadata,
|
|
47
|
-
ICronMetadata,
|
|
48
|
-
IControllerServiceDef,
|
|
49
|
-
IMiddlewareServiceDef,
|
|
50
|
-
ICronServiceDef,
|
|
51
|
-
IServerServiceDef,
|
|
52
|
-
} from './interfaces.js'
|
|
53
|
-
|
|
54
|
-
// 服务端应用接口
|
|
55
|
-
export type { IServerApplication } from './application.js'
|