chanjs 2.5.9 → 2.6.1
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/App.js +26 -77
- package/README.md +304 -60
- package/base/AOP.MD +318 -0
- package/base/Aop.js +178 -0
- package/base/Container.js +81 -0
- package/base/Controller.js +5 -2
- package/base/Event.js +49 -0
- package/base/Service.js +20 -6
- package/helper/index.js +1 -1
- package/helper/loader.js +18 -40
- package/index.js +13 -2
- package/package.json +1 -1
package/helper/loader.js
CHANGED
|
@@ -29,9 +29,6 @@ export function loaderSort(modules = []) {
|
|
|
29
29
|
* @description
|
|
30
30
|
* 从 config/index.js 加载配置,支持缓存机制
|
|
31
31
|
* 如果存在缓存且未过期,则直接返回缓存值
|
|
32
|
-
* @example
|
|
33
|
-
* const config = await loadConfig();
|
|
34
|
-
* console.log(config.APP_NAME);
|
|
35
32
|
*/
|
|
36
33
|
export async function loadConfig() {
|
|
37
34
|
const cacheKey = 'chanjs:config';
|
|
@@ -70,41 +67,6 @@ export function clearConfigCache() {
|
|
|
70
67
|
}
|
|
71
68
|
}
|
|
72
69
|
|
|
73
|
-
/**
|
|
74
|
-
* 绑定实例的所有方法到实例本身
|
|
75
|
-
* @param {Object} instance - 需要绑定的实例对象
|
|
76
|
-
* @returns {Object} 绑定后的实例
|
|
77
|
-
* @description
|
|
78
|
-
* 遍历实例原型链上的所有方法,将它们绑定到实例本身
|
|
79
|
-
* 这样可以确保方法中的 this 始终指向正确的实例
|
|
80
|
-
* @example
|
|
81
|
-
* class MyController {
|
|
82
|
-
* constructor() {
|
|
83
|
-
* this.name = 'test';
|
|
84
|
-
* }
|
|
85
|
-
* getName() {
|
|
86
|
-
* return this.name;
|
|
87
|
-
* }
|
|
88
|
-
* }
|
|
89
|
-
* const controller = new MyController();
|
|
90
|
-
* const bound = bindInstance(controller);
|
|
91
|
-
* const getName = bound.getName;
|
|
92
|
-
* console.log(getName()); // 正确输出 'test'
|
|
93
|
-
*/
|
|
94
|
-
export function bindInstance(instance) {
|
|
95
|
-
Object.getOwnPropertyNames(Object.getPrototypeOf(instance)).forEach(
|
|
96
|
-
(methodName) => {
|
|
97
|
-
if (
|
|
98
|
-
methodName !== "constructor" &&
|
|
99
|
-
typeof instance[methodName] === "function"
|
|
100
|
-
) {
|
|
101
|
-
instance[methodName] = instance[methodName].bind(instance);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
);
|
|
105
|
-
return instance;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
70
|
/**
|
|
109
71
|
* 加载指定模块的所有控制器
|
|
110
72
|
* @async
|
|
@@ -135,8 +97,24 @@ export async function loadController(moduleName) {
|
|
|
135
97
|
|
|
136
98
|
try {
|
|
137
99
|
const module = await import(`file://${filePath}`);
|
|
138
|
-
let
|
|
139
|
-
|
|
100
|
+
let instance = module?.default || module;
|
|
101
|
+
|
|
102
|
+
// 绑定实例的所有方法
|
|
103
|
+
if (instance && typeof instance === 'object') {
|
|
104
|
+
const proto = Object.getPrototypeOf(instance);
|
|
105
|
+
if (proto) {
|
|
106
|
+
Object.getOwnPropertyNames(proto).forEach((methodName) => {
|
|
107
|
+
if (
|
|
108
|
+
methodName !== "constructor" &&
|
|
109
|
+
typeof instance[methodName] === "function"
|
|
110
|
+
) {
|
|
111
|
+
instance[methodName] = instance[methodName].bind(instance);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
controller[name] = instance;
|
|
140
118
|
} catch (e) {
|
|
141
119
|
console.error(`加载控制器失败: ${filePath}`, e);
|
|
142
120
|
}
|
package/index.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
// 核心基础类导出
|
|
2
2
|
export { default as Controller } from "./base/Controller.js";
|
|
3
3
|
export { default as Service } from "./base/Service.js";
|
|
4
|
-
export { default as
|
|
4
|
+
export { default as DB } from "./base/Database.js";
|
|
5
|
+
export { Container } from "./base/Container.js";
|
|
6
|
+
export { Aop, aop } from "./base/Aop.js";
|
|
7
|
+
export { Event, event } from "./base/Event.js";
|
|
5
8
|
|
|
9
|
+
// 工具模块导出
|
|
6
10
|
export * as helper from "./helper/index.js";
|
|
7
11
|
export * as utils from "./utils/index.js";
|
|
8
12
|
export * as middleware from "./middleware/index.js";
|
|
@@ -10,5 +14,12 @@ export * as config from "./config/index.js";
|
|
|
10
14
|
export * as common from "./common/index.js";
|
|
11
15
|
export * as extend from "./extend/index.js";
|
|
12
16
|
|
|
17
|
+
// 常用工具函数直接导出
|
|
18
|
+
export { loadConfig, loaderSort, loadController } from "./helper/index.js";
|
|
19
|
+
|
|
20
|
+
// 路径配置
|
|
21
|
+
export { Paths } from "./config/paths.js";
|
|
22
|
+
|
|
23
|
+
// 默认导出应用主类
|
|
13
24
|
import Chan from "./App.js";
|
|
14
25
|
export default Chan;
|