@byteluck-fe/model-driven-engine 2.23.0-beta.26-zt → 2.23.0-beta.26-chrome86
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/package.json +2 -2
- package/dist/esm/common/ActionManager.js +0 -274
- package/dist/esm/common/DataManager.js +0 -213
- package/dist/esm/common/Engine.js +0 -1792
- package/dist/esm/common/OkWorker.js +0 -134
- package/dist/esm/common/Plugin.js +0 -10
- package/dist/esm/common/Runtime.js +0 -458
- package/dist/esm/common/Store.js +0 -444
- package/dist/esm/common/checkerValue.js +0 -609
- package/dist/esm/common/index.js +0 -2
- package/dist/esm/common/proxyState.js +0 -321
- package/dist/esm/index.js +0 -3
- package/dist/esm/plugins/CalcPlugin.js +0 -500
- package/dist/esm/plugins/ControlsEventPlugin.js +0 -325
- package/dist/esm/plugins/ES6ModulePlugin.js +0 -210
- package/dist/esm/plugins/LifecycleEventPlugin.js +0 -321
- package/dist/esm/plugins/StylePlugin.js +0 -73
- package/dist/esm/plugins/index.js +0 -5
- package/dist/esm/utils/index.js +0 -1
- package/dist/esm/utils/runtimeUtils.js +0 -45
- package/dist/index.umd.js +0 -22
- package/dist/types/common/Engine.d.ts +0 -201
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
function _array_like_to_array(arr, len) {
|
|
2
|
-
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
-
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
-
return arr2;
|
|
5
|
-
}
|
|
6
|
-
function _array_without_holes(arr) {
|
|
7
|
-
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
8
|
-
}
|
|
9
|
-
function _iterable_to_array(iter) {
|
|
10
|
-
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
11
|
-
}
|
|
12
|
-
function _non_iterable_spread() {
|
|
13
|
-
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
14
|
-
}
|
|
15
|
-
function _to_consumable_array(arr) {
|
|
16
|
-
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
17
|
-
}
|
|
18
|
-
function _type_of(obj) {
|
|
19
|
-
"@swc/helpers - typeof";
|
|
20
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
21
|
-
}
|
|
22
|
-
function _unsupported_iterable_to_array(o, minLen) {
|
|
23
|
-
if (!o) return;
|
|
24
|
-
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
25
|
-
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
26
|
-
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
27
|
-
if (n === "Map" || n === "Set") return Array.from(n);
|
|
28
|
-
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
29
|
-
}
|
|
30
|
-
var cc = console;
|
|
31
|
-
import { CONTROL_BASE_TYPE, error, logerror, JSONCopy } from '@byteluck-fe/model-driven-shared';
|
|
32
|
-
var proxyArrayApi = [
|
|
33
|
-
'splice',
|
|
34
|
-
'push',
|
|
35
|
-
'shift',
|
|
36
|
-
'pop',
|
|
37
|
-
'unshift',
|
|
38
|
-
'reverse'
|
|
39
|
-
];
|
|
40
|
-
export var engineProxyFlag = Symbol('__engineProxy__');
|
|
41
|
-
export var engineTargetKey = Symbol('__engineTarget__');
|
|
42
|
-
export var engineArrayBeforeSetCallbackFlag = Symbol('__engineArrayBeforeSetCallbackFlag__');
|
|
43
|
-
export var engineProxyThisKey = Symbol('__engineProxyThisKey__');
|
|
44
|
-
var currentHandlerState = {
|
|
45
|
-
type: '',
|
|
46
|
-
args: [],
|
|
47
|
-
callback: emptyFn
|
|
48
|
-
};
|
|
49
|
-
function emptyFn() {}
|
|
50
|
-
hijackArrayProperty();
|
|
51
|
-
// TODO 数组拦截操作需要重构,优化现有逻辑
|
|
52
|
-
function ArrayHandler(target, propertyKey, value, thisKey, callback) {
|
|
53
|
-
if (currentHandlerState.type) {
|
|
54
|
-
currentHandlerState.callback = callback.bind(null, target, thisKey);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
// currentHandlerState.type为空的时候,说明不是操作数组api进行的修改,
|
|
58
|
-
var index = Number(propertyKey);
|
|
59
|
-
// 操作下标
|
|
60
|
-
// Number(propertyKey) > target.length 说明当前操作的下标已经超过了安全范围(数组的运行长度,比如[1,2,3],它的长度为3,可操作的下标为0,1,2,3,如果操作4将会产生一个empty index)
|
|
61
|
-
if (index > target.length) {
|
|
62
|
-
error("Wrong array operations may cause unknown errors. It is recommended to use APIs such as ".concat(proxyArrayApi.join(','), " for array operations"));
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
// 不是操作下标,而是直接操作length或者自定义属性等
|
|
66
|
-
var isNotHandlerIndex = Number.isNaN(index);
|
|
67
|
-
if (isNotHandlerIndex && propertyKey !== 'length') {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
// 直接操作length
|
|
71
|
-
if (propertyKey === 'length') {
|
|
72
|
-
var newLength = value;
|
|
73
|
-
var oldLength = target.length;
|
|
74
|
-
if (newLength > target.length) {
|
|
75
|
-
error("Do not directly modify the length of the array data, please add new rows");
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (newLength === target.length) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
// 通过操作length删除旧的行
|
|
82
|
-
return function() {
|
|
83
|
-
return callback.call(null, target, thisKey, 'splice', [
|
|
84
|
-
newLength,
|
|
85
|
-
oldLength - newLength
|
|
86
|
-
]);
|
|
87
|
-
};
|
|
88
|
-
// 直接操作下标
|
|
89
|
-
} else {
|
|
90
|
-
// 正常操作
|
|
91
|
-
if (index === target.length) {
|
|
92
|
-
return function() {
|
|
93
|
-
return callback.call(null, target, thisKey, 'push', [
|
|
94
|
-
value
|
|
95
|
-
]);
|
|
96
|
-
};
|
|
97
|
-
} else {
|
|
98
|
-
return function() {
|
|
99
|
-
return callback.call(null, target, thisKey, 'splice', [
|
|
100
|
-
index,
|
|
101
|
-
1,
|
|
102
|
-
value
|
|
103
|
-
]);
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* 返回proxy操作对象
|
|
110
|
-
* @param thisKey 当前对象在上级中的key
|
|
111
|
-
* @param callback 需要在修改的时候,触发的回调函数
|
|
112
|
-
* @param beforeSetCallback 需要在修改之前触发的回调函数,可以进行校验和对值的修改等等,最终的返回值不为undefined就会使用
|
|
113
|
-
* */ function handler(thisKey, callback, beforeSetCallback) {
|
|
114
|
-
return {
|
|
115
|
-
__engineProxy__: true,
|
|
116
|
-
get: function get(target, propertyKey, receiver) {
|
|
117
|
-
if (propertyKey === engineProxyFlag) {
|
|
118
|
-
return true;
|
|
119
|
-
}
|
|
120
|
-
if (propertyKey === engineTargetKey) {
|
|
121
|
-
return target;
|
|
122
|
-
}
|
|
123
|
-
if (Array.isArray(target) && propertyKey === engineArrayBeforeSetCallbackFlag) {
|
|
124
|
-
return beforeSetCallback;
|
|
125
|
-
}
|
|
126
|
-
if (propertyKey === engineProxyThisKey) {
|
|
127
|
-
return thisKey;
|
|
128
|
-
}
|
|
129
|
-
return Reflect.get(target, propertyKey, receiver);
|
|
130
|
-
},
|
|
131
|
-
set: function set(target, propertyKey, value, receiver) {
|
|
132
|
-
var newValue = JSONCopy(value);
|
|
133
|
-
// @ts-ignore
|
|
134
|
-
var oldValue = target[propertyKey];
|
|
135
|
-
var concatKey = thisKey === '' ? propertyKey : thisKey + '.' + propertyKey;
|
|
136
|
-
function reProxyState(value) {
|
|
137
|
-
if ((typeof value === "undefined" ? "undefined" : _type_of(value)) === 'object' && value !== null) {
|
|
138
|
-
// @ts-ignore
|
|
139
|
-
if (value[engineProxyFlag] !== true) {
|
|
140
|
-
return proxyState(value, callback, beforeSetCallback, concatKey);
|
|
141
|
-
} else {
|
|
142
|
-
// 已经被代理过的数据,key可能发生了改变,所以需要重新代理一遍
|
|
143
|
-
return proxyState(// @ts-ignore
|
|
144
|
-
value[engineTargetKey], callback, beforeSetCallback, concatKey);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
var _reProxyState;
|
|
149
|
-
newValue = (_reProxyState = reProxyState(newValue)) !== null && _reProxyState !== void 0 ? _reProxyState : newValue;
|
|
150
|
-
// 先设置值,然后再进行触发回调,确保回调内拿到的是最新的值
|
|
151
|
-
var setResult;
|
|
152
|
-
// TODO 数组拦截操作需要重构,优化现有逻辑
|
|
153
|
-
// TODO 直接操作下标改动明细表时,没有对行数据进行checker
|
|
154
|
-
if (Array.isArray(target)) {
|
|
155
|
-
// 操作数组的时候,不需要使用拼接的thisKey,先判断执行的是否是违规操作,违规操作的话会报错,不允许继续执行,正常操作的话,返回一个回调函数,用于在值修改完之后触发
|
|
156
|
-
var nextHandler = ArrayHandler(target, propertyKey, newValue, thisKey, callback);
|
|
157
|
-
setResult = Reflect.set(target, propertyKey, newValue, receiver);
|
|
158
|
-
if (nextHandler) {
|
|
159
|
-
nextHandler();
|
|
160
|
-
}
|
|
161
|
-
} else {
|
|
162
|
-
try {
|
|
163
|
-
var oldNewValue = newValue;
|
|
164
|
-
newValue = beforeSetCallback.call(null, target, concatKey, newValue, oldValue);
|
|
165
|
-
// 值发生改变了,并且是一个对象的情况,需要重新代理
|
|
166
|
-
if (oldNewValue !== newValue) {
|
|
167
|
-
var result = reProxyState(newValue);
|
|
168
|
-
if (result !== undefined) {
|
|
169
|
-
newValue = result;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
} catch (e) {
|
|
173
|
-
// 不允许设置的情况下,直接返回true,返回false会引起报错
|
|
174
|
-
logerror("".concat(concatKey, " set error ").concat(e));
|
|
175
|
-
return true;
|
|
176
|
-
}
|
|
177
|
-
setResult = Reflect.set(target, propertyKey, newValue, receiver);
|
|
178
|
-
callback.call(null, target, concatKey, newValue, oldValue);
|
|
179
|
-
}
|
|
180
|
-
// 不返回falsy 值(即 false、0、null、undefined、空字符串等)
|
|
181
|
-
//fix: TypeError: Proxy object's 'set' trap returned falsy value for property 'length'
|
|
182
|
-
return setResult ? setResult : true;
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* 代理state数据
|
|
188
|
-
* @param state 数据对象
|
|
189
|
-
* @param callback 触发set时候的回调函数
|
|
190
|
-
* @param beforeSetCallback
|
|
191
|
-
* @param prevKey 递归对象的key
|
|
192
|
-
* */ export function proxyState(state, callback, beforeSetCallback) {
|
|
193
|
-
var prevKey = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : '';
|
|
194
|
-
// 冻结的对象不需要再执行proxy,否则会报错
|
|
195
|
-
if (Object.isFrozen(state)) {
|
|
196
|
-
return state;
|
|
197
|
-
}
|
|
198
|
-
for(var key in state){
|
|
199
|
-
var concatKey = prevKey === '' ? key : prevKey + '.' + key;
|
|
200
|
-
var obj = state[key];
|
|
201
|
-
if ((typeof obj === "undefined" ? "undefined" : _type_of(obj)) === 'object' && obj !== null) {
|
|
202
|
-
// @ts-ignore
|
|
203
|
-
state[key] = proxyState(obj, callback, beforeSetCallback, concatKey);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
return new Proxy(state, handler(prevKey, callback, beforeSetCallback));
|
|
207
|
-
}
|
|
208
|
-
function flatInstanceForChildren(controls) {
|
|
209
|
-
var result = [];
|
|
210
|
-
controls.forEach(function(item) {
|
|
211
|
-
result.push(item);
|
|
212
|
-
if (item.controlType === 'layout' || item.controlType === 'wrap') {
|
|
213
|
-
var _result;
|
|
214
|
-
(_result = result).push.apply(_result, _to_consumable_array(flatInstanceForChildren(item.children)));
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
return result;
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* 在flatInstance中通过key查找出对应的instance
|
|
221
|
-
* @param flatInstance 拍平的instance数组
|
|
222
|
-
* @param key 操作的数据在state的key - 可以是深层次的 subtable.0.input等
|
|
223
|
-
* */ export function findItem(flatInstance, key, instanceMap) {
|
|
224
|
-
if (key === '') return undefined;
|
|
225
|
-
var keys = key.split('.');
|
|
226
|
-
if (keys.length === 0) return undefined;
|
|
227
|
-
var oneKey = keys[0];
|
|
228
|
-
var otherKeys = keys.slice(1);
|
|
229
|
-
// 3.4.1 优化速度,读取instanceMap
|
|
230
|
-
// cc.time('findItem flatInstance find')
|
|
231
|
-
// const initInstance = flatInstance.find((item) => item.id === oneKey)
|
|
232
|
-
// cc.log('🏠 findItem flatInstance find result', initInstance)
|
|
233
|
-
// cc.timeEnd('findItem flatInstance find')
|
|
234
|
-
// cc.time('findItem instanceMap match')
|
|
235
|
-
var initInstance = instanceMap[oneKey] ? instanceMap[oneKey][0] : undefined;
|
|
236
|
-
// cc.log('🏠 findItem instanceMap match result', initInstance)
|
|
237
|
-
// cc.timeEnd('findItem instanceMap match')
|
|
238
|
-
if (otherKeys.length === 0) return initInstance;
|
|
239
|
-
// @ts-ignore
|
|
240
|
-
return otherKeys.reduce(function(prevItem, key) {
|
|
241
|
-
var index = Number(key);
|
|
242
|
-
var isNotIndex = Number.isNaN(index);
|
|
243
|
-
if (isNotIndex && prevItem) {
|
|
244
|
-
var flatChildren = (prevItem === null || prevItem === void 0 ? void 0 : prevItem.children) ? flatInstanceForChildren(prevItem.children) : undefined;
|
|
245
|
-
var findEndItem = flatChildren === null || flatChildren === void 0 ? void 0 : flatChildren.find(function(item) {
|
|
246
|
-
return item.id === key;
|
|
247
|
-
});
|
|
248
|
-
// 最后一个key可能是值对象上边的key,比如金额的amount和currency,计算公式的result和unit,所以需要判断前一个控件是不是一个表单控件,是的话就返回最后一个表单控件
|
|
249
|
-
return findEndItem ? findEndItem : prevItem.controlType === CONTROL_BASE_TYPE.FORM ? prevItem : undefined;
|
|
250
|
-
} else {
|
|
251
|
-
var _prevItem_children;
|
|
252
|
-
var _prevItem_children_index;
|
|
253
|
-
// 如果有children,则取children中对应的下标,没有的话一直返回prevItem
|
|
254
|
-
return (_prevItem_children_index = prevItem === null || prevItem === void 0 ? void 0 : (_prevItem_children = prevItem.children) === null || _prevItem_children === void 0 ? void 0 : _prevItem_children[index]) !== null && _prevItem_children_index !== void 0 ? _prevItem_children_index : prevItem;
|
|
255
|
-
}
|
|
256
|
-
}, initInstance);
|
|
257
|
-
}
|
|
258
|
-
function getArrayNewValue(type, args) {
|
|
259
|
-
if ([
|
|
260
|
-
'push',
|
|
261
|
-
'unshift'
|
|
262
|
-
].includes(type)) {
|
|
263
|
-
return args;
|
|
264
|
-
} else if (type === 'splice') {
|
|
265
|
-
return args.slice(2);
|
|
266
|
-
}
|
|
267
|
-
return [];
|
|
268
|
-
}
|
|
269
|
-
function getArrayNewArgs(type, args, value) {
|
|
270
|
-
if ([
|
|
271
|
-
'push',
|
|
272
|
-
'unshift'
|
|
273
|
-
].includes(type)) {
|
|
274
|
-
return value;
|
|
275
|
-
} else if (type === 'splice') {
|
|
276
|
-
return args.slice(0, 2).concat(value);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
/**
|
|
280
|
-
* TODO 数组劫持操作需要模仿vue3进行重构,不再直接劫持原生property
|
|
281
|
-
* 劫持数组api,达到操作数组api的时候,可以同步操作instance
|
|
282
|
-
* */ function hijackArrayProperty() {
|
|
283
|
-
proxyArrayApi.forEach(function(key) {
|
|
284
|
-
var oldApiHandler = Array.prototype[key];
|
|
285
|
-
Array.prototype[key] = function() {
|
|
286
|
-
for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
|
|
287
|
-
args[_key] = arguments[_key];
|
|
288
|
-
}
|
|
289
|
-
// @ts-ignore
|
|
290
|
-
if (this[engineProxyFlag]) {
|
|
291
|
-
var result;
|
|
292
|
-
var addValue = getArrayNewValue(key, args);
|
|
293
|
-
if (addValue.length) {
|
|
294
|
-
var _this_engineArrayBeforeSetCallbackFlag, _this;
|
|
295
|
-
// @ts-ignore
|
|
296
|
-
var newValue = (_this_engineArrayBeforeSetCallbackFlag = (_this = this)[engineArrayBeforeSetCallbackFlag]) === null || _this_engineArrayBeforeSetCallbackFlag === void 0 ? void 0 : _this_engineArrayBeforeSetCallbackFlag.call(_this, // @ts-ignore
|
|
297
|
-
this[engineTargetKey], // @ts-ignore
|
|
298
|
-
this[engineProxyThisKey], addValue);
|
|
299
|
-
var newArgs = getArrayNewArgs(key, args, newValue);
|
|
300
|
-
currentHandlerState.type = key;
|
|
301
|
-
currentHandlerState.args = newArgs;
|
|
302
|
-
// @ts-ignore
|
|
303
|
-
result = oldApiHandler.apply(this, newArgs);
|
|
304
|
-
} else {
|
|
305
|
-
currentHandlerState.type = key;
|
|
306
|
-
currentHandlerState.args = args;
|
|
307
|
-
// @ts-ignore
|
|
308
|
-
result = oldApiHandler.apply(this, args);
|
|
309
|
-
}
|
|
310
|
-
typeof currentHandlerState.callback === 'function' && currentHandlerState.callback(key, args, result);
|
|
311
|
-
currentHandlerState.type = '';
|
|
312
|
-
currentHandlerState.args = [];
|
|
313
|
-
currentHandlerState.callback = emptyFn;
|
|
314
|
-
return result;
|
|
315
|
-
} else {
|
|
316
|
-
// @ts-ignore
|
|
317
|
-
return oldApiHandler.apply(this, args);
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
});
|
|
321
|
-
}
|
package/dist/esm/index.js
DELETED