mm_tpl 2.4.3 → 2.4.5
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 +217 -211
- package/cache/test.cache.html +5 -4
- package/hook.js +173 -89
- package/index.js +138 -126
- package/package.json +2 -2
- package/template/diy/ad.html +4 -3
- package/template/game/bar.html +1 -1
- package/test.js +10 -9
- package/tpl_rule.js +38 -8
package/hook.js
CHANGED
|
@@ -2,30 +2,39 @@ const {
|
|
|
2
2
|
types
|
|
3
3
|
} = require("util");
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* 钩子管理类
|
|
7
|
+
* @class
|
|
8
|
+
*/
|
|
5
9
|
class Hook {
|
|
10
|
+
/**
|
|
11
|
+
* 创建钩子实例
|
|
12
|
+
*/
|
|
6
13
|
constructor() {
|
|
7
|
-
this.
|
|
8
|
-
this.
|
|
9
|
-
this.
|
|
14
|
+
this._func = {};
|
|
15
|
+
this._action = {};
|
|
16
|
+
this._filter = {};
|
|
10
17
|
}
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
/**
|
|
14
|
-
*
|
|
15
|
-
* @param {Array} list 钩子列表
|
|
21
|
+
* 排序钩子列表
|
|
22
|
+
* @param {Array} list - 钩子列表
|
|
23
|
+
* @returns {Array} 排序后的列表
|
|
16
24
|
*/
|
|
17
|
-
Hook.prototype.sort = function(list) {
|
|
25
|
+
Hook.prototype.sort = function (list) {
|
|
18
26
|
return list.sort((o1, o2) => {
|
|
19
27
|
return o2.sort - o1.sort
|
|
20
28
|
});
|
|
21
29
|
}
|
|
22
30
|
|
|
23
31
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @param {Function} func 钩子函数
|
|
26
|
-
* @param {
|
|
32
|
+
* 获取函数别名
|
|
33
|
+
* @param {Function} func - 钩子函数
|
|
34
|
+
* @param {string} alias - 别名
|
|
35
|
+
* @returns {string} 函数别名
|
|
27
36
|
*/
|
|
28
|
-
Hook.prototype.
|
|
37
|
+
Hook.prototype._getName = function (func, alias) {
|
|
29
38
|
if (!alias) {
|
|
30
39
|
var str = func.toString();
|
|
31
40
|
var name = str.between('function ', "(").trim();
|
|
@@ -40,70 +49,73 @@ Hook.prototype.getName = function(func, alias) {
|
|
|
40
49
|
|
|
41
50
|
/**
|
|
42
51
|
* 添加函数钩子
|
|
43
|
-
* @param {
|
|
44
|
-
* @param {Function} func 钩子函数
|
|
45
|
-
* @param {
|
|
46
|
-
* @param {
|
|
52
|
+
* @param {string} name - 钩子名称
|
|
53
|
+
* @param {Function} func - 钩子函数
|
|
54
|
+
* @param {number} sort - 执行顺序
|
|
55
|
+
* @param {string} alias - 函数别名
|
|
56
|
+
* @returns {string} 函数别名
|
|
47
57
|
*/
|
|
48
|
-
Hook.prototype.addFunc = function(name, func, sort, alias) {
|
|
49
|
-
alias = this.
|
|
58
|
+
Hook.prototype.addFunc = function (name, func, sort, alias) {
|
|
59
|
+
alias = this._getName(func, alias);
|
|
50
60
|
var obj = {
|
|
51
61
|
func,
|
|
52
62
|
sort,
|
|
53
63
|
alias
|
|
54
64
|
}
|
|
55
|
-
var arr = this.
|
|
65
|
+
var arr = this._func[name];
|
|
56
66
|
if (!arr) {
|
|
57
67
|
arr = [];
|
|
58
68
|
}
|
|
59
69
|
arr.push(obj);
|
|
60
|
-
this.
|
|
70
|
+
this._func[name] = this.sort(arr);
|
|
61
71
|
return alias;
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
/**
|
|
65
75
|
* 添加动作钩子
|
|
66
|
-
* @param {
|
|
67
|
-
* @param {Function} func 钩子函数
|
|
68
|
-
* @param {
|
|
69
|
-
* @param {
|
|
76
|
+
* @param {string} name - 钩子名称
|
|
77
|
+
* @param {Function} func - 钩子函数
|
|
78
|
+
* @param {number} sort - 执行顺序
|
|
79
|
+
* @param {string} alias - 函数别名
|
|
80
|
+
* @returns {string} 函数别名
|
|
70
81
|
*/
|
|
71
|
-
Hook.prototype.addAction = function(name, func, sort, alias) {
|
|
72
|
-
alias = this.
|
|
82
|
+
Hook.prototype.addAction = function (name, func, sort, alias) {
|
|
83
|
+
alias = this._getName(func, alias);
|
|
73
84
|
var obj = {
|
|
74
85
|
func,
|
|
75
86
|
sort,
|
|
76
87
|
alias
|
|
77
88
|
}
|
|
78
|
-
var arr = this.
|
|
89
|
+
var arr = this._action[name];
|
|
79
90
|
if (!arr) {
|
|
80
91
|
arr = [];
|
|
81
92
|
}
|
|
82
93
|
arr.push(obj);
|
|
83
|
-
this.
|
|
94
|
+
this._action[name] = this.sort(arr);
|
|
84
95
|
return alias;
|
|
85
96
|
}
|
|
86
97
|
|
|
87
98
|
/**
|
|
88
99
|
* 添加过滤钩子
|
|
89
|
-
* @param {
|
|
90
|
-
* @param {Function} func 钩子函数
|
|
91
|
-
* @param {
|
|
92
|
-
* @param {
|
|
100
|
+
* @param {string} name - 钩子名称
|
|
101
|
+
* @param {Function} func - 钩子函数
|
|
102
|
+
* @param {number} sort - 执行顺序
|
|
103
|
+
* @param {string} alias - 函数别名
|
|
104
|
+
* @returns {string} 函数别名
|
|
93
105
|
*/
|
|
94
|
-
Hook.prototype.addFilter = function(name, func, sort, alias) {
|
|
95
|
-
alias = this.
|
|
106
|
+
Hook.prototype.addFilter = function (name, func, sort, alias) {
|
|
107
|
+
alias = this._getName(func, alias);
|
|
96
108
|
var obj = {
|
|
97
109
|
func,
|
|
98
110
|
sort,
|
|
99
111
|
alias
|
|
100
112
|
}
|
|
101
|
-
var arr = this.
|
|
113
|
+
var arr = this._filter[name];
|
|
102
114
|
if (!arr) {
|
|
103
115
|
arr = [];
|
|
104
116
|
}
|
|
105
117
|
arr.push(obj);
|
|
106
|
-
this.
|
|
118
|
+
this._filter[name] = this.sort(arr);
|
|
107
119
|
return alias;
|
|
108
120
|
}
|
|
109
121
|
|
|
@@ -112,12 +124,17 @@ Hook.prototype.addFilter = function(name, func, sort, alias) {
|
|
|
112
124
|
* @param {String} name 钩子名称
|
|
113
125
|
* @param {String} alias 函数别名
|
|
114
126
|
*/
|
|
115
|
-
Hook.prototype.delFunc = function(name, alias) {
|
|
116
|
-
var arr = this.
|
|
127
|
+
Hook.prototype.delFunc = function (name, alias) {
|
|
128
|
+
var arr = this._func[name];
|
|
117
129
|
if (arr) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
130
|
+
var list = [];
|
|
131
|
+
for (var i = 0; i < arr.length; i++) {
|
|
132
|
+
var item = arr[i];
|
|
133
|
+
if (item.alias !== alias) {
|
|
134
|
+
list.push(item);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
this._func[name] = list;
|
|
121
138
|
}
|
|
122
139
|
}
|
|
123
140
|
|
|
@@ -126,12 +143,17 @@ Hook.prototype.delFunc = function(name, alias) {
|
|
|
126
143
|
* @param {String} name 钩子名称
|
|
127
144
|
* @param {String} alias 函数别名
|
|
128
145
|
*/
|
|
129
|
-
Hook.prototype.delAction = function(name, alias) {
|
|
130
|
-
var arr = this.
|
|
146
|
+
Hook.prototype.delAction = function (name, alias) {
|
|
147
|
+
var arr = this._action[name];
|
|
131
148
|
if (arr) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
149
|
+
var list = [];
|
|
150
|
+
for (var i = 0; i < arr.length; i++) {
|
|
151
|
+
var item = arr[i];
|
|
152
|
+
if (item.alias !== alias) {
|
|
153
|
+
list.push(item);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
this._action[name] = list;
|
|
135
157
|
}
|
|
136
158
|
}
|
|
137
159
|
|
|
@@ -140,32 +162,40 @@ Hook.prototype.delAction = function(name, alias) {
|
|
|
140
162
|
* @param {String} name 钩子名称
|
|
141
163
|
* @param {String} alias 函数别名
|
|
142
164
|
*/
|
|
143
|
-
Hook.prototype.delFilter = function(name, alias = "") {
|
|
144
|
-
var arr = this.
|
|
165
|
+
Hook.prototype.delFilter = function (name, alias = "") {
|
|
166
|
+
var arr = this._filter[name];
|
|
145
167
|
if (arr) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
168
|
+
var list = [];
|
|
169
|
+
for (var i = 0; i < arr.length; i++) {
|
|
170
|
+
var item = arr[i];
|
|
171
|
+
if (item.alias !== alias) {
|
|
172
|
+
list.push(item);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
this._filter[name] = list;
|
|
149
176
|
}
|
|
150
177
|
}
|
|
151
178
|
|
|
152
179
|
/**
|
|
153
|
-
*
|
|
154
|
-
* @param {
|
|
155
|
-
* @param {Object}
|
|
156
|
-
* @param {
|
|
180
|
+
* 执行函数钩子
|
|
181
|
+
* @param {string} name - 钩子名称
|
|
182
|
+
* @param {Object} param - 参数
|
|
183
|
+
* @param {Function} func - 钩子函数
|
|
157
184
|
*/
|
|
158
|
-
Hook.prototype.
|
|
159
|
-
var ret
|
|
160
|
-
var
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
for (var i = 0; i <
|
|
164
|
-
var
|
|
185
|
+
Hook.prototype.runFunc = async function (name, model, req, ...args) {
|
|
186
|
+
var ret;
|
|
187
|
+
var list = this._func[name];
|
|
188
|
+
if (!list) {
|
|
189
|
+
var len = list.length;
|
|
190
|
+
for (var i = 0; i < len; i++) {
|
|
191
|
+
var item = list[i];
|
|
165
192
|
try {
|
|
166
|
-
ret
|
|
193
|
+
ret = item.func(model, req, ...args);
|
|
194
|
+
if (ret) {
|
|
195
|
+
ret = await ret;
|
|
196
|
+
}
|
|
167
197
|
} catch (err) {
|
|
168
|
-
|
|
198
|
+
$.log.error(`[${this.constructor.name}] 执行函数钩子失败 ${item.alias}`, err);
|
|
169
199
|
}
|
|
170
200
|
}
|
|
171
201
|
}
|
|
@@ -173,22 +203,22 @@ Hook.prototype.runAction = function(name, model, ...args) {
|
|
|
173
203
|
}
|
|
174
204
|
|
|
175
205
|
/**
|
|
176
|
-
*
|
|
177
|
-
* @param {
|
|
178
|
-
* @param {Object} model
|
|
179
|
-
* @param {
|
|
180
|
-
* @
|
|
206
|
+
* 执行动作钩子
|
|
207
|
+
* @param {string} name - 钩子名称
|
|
208
|
+
* @param {Object} model - 模型对象
|
|
209
|
+
* @param {...any} args - 附加参数
|
|
210
|
+
* @returns {Object} 执行结果
|
|
181
211
|
*/
|
|
182
|
-
Hook.prototype.
|
|
183
|
-
var
|
|
184
|
-
var list =
|
|
212
|
+
Hook.prototype.runAction = function (name, model, ...args) {
|
|
213
|
+
var ret = '';
|
|
214
|
+
var list = this._action[name];
|
|
185
215
|
if (list) {
|
|
186
216
|
for (var i = 0; i < list.length; i++) {
|
|
187
217
|
var o = list[i];
|
|
188
218
|
try {
|
|
189
|
-
ret
|
|
219
|
+
ret += o.func(model, ...args);
|
|
190
220
|
} catch (err) {
|
|
191
|
-
|
|
221
|
+
$.log.error(`[${this.constructor.name}] 执行动作钩子失败 ${o.alias}`, err);
|
|
192
222
|
}
|
|
193
223
|
}
|
|
194
224
|
}
|
|
@@ -196,30 +226,84 @@ Hook.prototype.runFilter = function(name, model, ret, ...args) {
|
|
|
196
226
|
}
|
|
197
227
|
|
|
198
228
|
/**
|
|
199
|
-
*
|
|
200
|
-
* @param {
|
|
201
|
-
* @param {Object} model
|
|
202
|
-
* @param {Object}
|
|
203
|
-
* @param {
|
|
229
|
+
* 执行过滤钩子
|
|
230
|
+
* @param {string} name - 钩子名称
|
|
231
|
+
* @param {Object} model - 模型对象
|
|
232
|
+
* @param {Object} ret - 返回值
|
|
233
|
+
* @param {...any} args - 附加参数
|
|
234
|
+
* @returns {Object} 过滤后的参数
|
|
204
235
|
*/
|
|
205
|
-
Hook.prototype.
|
|
206
|
-
var
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
var o = list[i];
|
|
236
|
+
Hook.prototype.runFilter = function (name, model, ret, ...args) {
|
|
237
|
+
var list = this._filter[name];
|
|
238
|
+
if (!list) {
|
|
239
|
+
var len = list.length;
|
|
240
|
+
for (var i = 0; i < len; i++) {
|
|
241
|
+
var item = list[i];
|
|
212
242
|
try {
|
|
213
|
-
ret =
|
|
214
|
-
if (ret) {
|
|
215
|
-
ret = await ret;
|
|
216
|
-
}
|
|
243
|
+
ret = item.func(model, ret, ...args) || ret;
|
|
217
244
|
} catch (err) {
|
|
218
|
-
|
|
245
|
+
$.log.error(`[${this.constructor.name}] 执行过滤钩子失败 ${item.alias}`, err);
|
|
219
246
|
}
|
|
220
247
|
}
|
|
221
248
|
}
|
|
222
249
|
return ret;
|
|
223
250
|
}
|
|
224
251
|
|
|
252
|
+
/**
|
|
253
|
+
* 删除钩子
|
|
254
|
+
* @param {string} name - 钩子名称
|
|
255
|
+
* @param {string} alias - 函数别名
|
|
256
|
+
*/
|
|
257
|
+
Hook.prototype.del = function (name, alias) {
|
|
258
|
+
var arr = this._func[name];
|
|
259
|
+
if (arr) {
|
|
260
|
+
var list = [];
|
|
261
|
+
for (var i = 0; i < arr.length; i++) {
|
|
262
|
+
var item = arr[i];
|
|
263
|
+
if (item.alias !== alias) {
|
|
264
|
+
list.push(item);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
this._func[name] = list;
|
|
268
|
+
}
|
|
269
|
+
arr = this._action[name];
|
|
270
|
+
if (arr) {
|
|
271
|
+
var list = [];
|
|
272
|
+
for (var i = 0; i < arr.length; i++) {
|
|
273
|
+
var item = arr[i];
|
|
274
|
+
if (item.alias !== alias) {
|
|
275
|
+
list.push(item);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
this._action[name] = list;
|
|
279
|
+
}
|
|
280
|
+
arr = this._filter[name];
|
|
281
|
+
if (arr) {
|
|
282
|
+
var list = [];
|
|
283
|
+
for (var i = 0; i < arr.length; i++) {
|
|
284
|
+
var item = arr[i];
|
|
285
|
+
if (item.alias !== alias) {
|
|
286
|
+
list.push(item);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
this._filter[name] = list;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* 清空钩子
|
|
295
|
+
* @param {string} name - 钩子名称
|
|
296
|
+
*/
|
|
297
|
+
Hook.prototype.clear = function (name) {
|
|
298
|
+
if (name) {
|
|
299
|
+
delete this._func[name];
|
|
300
|
+
delete this._action[name];
|
|
301
|
+
delete this._filter[name];
|
|
302
|
+
} else {
|
|
303
|
+
this._func = {};
|
|
304
|
+
this._action = {};
|
|
305
|
+
this._filter = {};
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
225
309
|
module.exports = Hook;
|