@lcap/nasl 2.18.0-beta.4 → 2.18.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/out/concepts/MatchExpression__.d.ts +97 -0
- package/out/concepts/MatchExpression__.js +281 -0
- package/out/concepts/MatchExpression__.js.map +1 -0
- package/out/concepts/Param__.js +1 -1
- package/out/concepts/Param__.js.map +1 -1
- package/out/concepts/Return__.js +1 -1
- package/out/concepts/Return__.js.map +1 -1
- package/out/concepts/Variable__.js +1 -1
- package/out/concepts/Variable__.js.map +1 -1
- package/out/server/naslServer.js +27 -31
- package/out/server/naslServer.js.map +1 -1
- package/out/templator/sql-parser/index.d.ts +1 -0
- package/out/templator/sql-parser/index.js +228 -0
- package/out/templator/sql-parser/index.js.map +1 -0
- package/out/templator/sql-parser/parser.js +26664 -0
- package/out/templator/sql-parser/parser.js.map +1 -0
- package/package.json +2 -2
- package/src/automate/engine/dist/index.dev.js +517 -0
- package/src/common/dist/BaseNode.js +1101 -0
- package/src/concepts/Param__.ts +1 -1
- package/src/concepts/Return__.ts +1 -1
- package/src/concepts/Variable__.ts +1 -1
- package/src/concepts/basics/stdlib/dist/reference2TypeAnnotationList.js +24 -0
- package/src/concepts/dist/Anchor__.js +179 -0
- package/src/concepts/dist/Assignment__.js +301 -0
- package/src/concepts/dist/CallFunction__.js +473 -0
- package/src/concepts/dist/CallInterface__.js +533 -0
- package/src/concepts/dist/CallLogic__.js +864 -0
- package/src/concepts/dist/ForEachStatement__.js +426 -0
- package/src/concepts/dist/MatchCase__.js +587 -0
- package/src/concepts/dist/MemberExpression__.js +348 -0
- package/src/concepts/dist/Param__.js +537 -0
- package/src/concepts/dist/Return__.js +493 -0
- package/src/generator/dist/genBundleFiles.js +414 -0
- package/src/server/dist/formatTsUtils.js +683 -0
- package/src/server/dist/naslServer.js +3396 -0
- package/src/server/naslServer.ts +28 -31
- package/src/service/storage/dist/init.js +541 -0
- package/ts-worker/dist/webpack.config.dev.js +104 -0
- package/ts-worker/lib/dist/tsserver.dev.js +22953 -0
- package/ts-worker/sources/lib/dist/tsserver.dev.js +22912 -0
- package/dist/bundle.js +0 -3962
- package/dist/bundle.js.LICENSE.txt +0 -16
- package/out/generator/release.d.ts +0 -1
- package/out/generator/release.js +0 -51
- package/out/generator/release.js.map +0 -1
|
@@ -0,0 +1,1101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
extendStatics(d, b);
|
|
11
|
+
function __() { this.constructor = d; }
|
|
12
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
13
|
+
};
|
|
14
|
+
})();
|
|
15
|
+
var __assign = (this && this.__assign) || function () {
|
|
16
|
+
__assign = Object.assign || function(t) {
|
|
17
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
18
|
+
s = arguments[i];
|
|
19
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
20
|
+
t[p] = s[p];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
return __assign.apply(this, arguments);
|
|
25
|
+
};
|
|
26
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
27
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
28
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
29
|
+
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;
|
|
30
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
31
|
+
};
|
|
32
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
33
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
34
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
35
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
36
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
37
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
38
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
42
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
43
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
44
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
45
|
+
function step(op) {
|
|
46
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
47
|
+
while (_) try {
|
|
48
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
49
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
50
|
+
switch (op[0]) {
|
|
51
|
+
case 0: case 1: t = op; break;
|
|
52
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
53
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
54
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
55
|
+
default:
|
|
56
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
57
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
58
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
59
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
60
|
+
if (t[2]) _.ops.pop();
|
|
61
|
+
_.trys.pop(); continue;
|
|
62
|
+
}
|
|
63
|
+
op = body.call(thisArg, _);
|
|
64
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
65
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
69
|
+
var t = {};
|
|
70
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
71
|
+
t[p] = s[p];
|
|
72
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
73
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
74
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
75
|
+
t[p[i]] = s[p[i]];
|
|
76
|
+
}
|
|
77
|
+
return t;
|
|
78
|
+
};
|
|
79
|
+
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
80
|
+
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
81
|
+
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
82
|
+
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
83
|
+
r[k] = a[j];
|
|
84
|
+
return r;
|
|
85
|
+
};
|
|
86
|
+
exports.__esModule = true;
|
|
87
|
+
exports.BaseNode = void 0;
|
|
88
|
+
var lodash_1 = require("lodash");
|
|
89
|
+
var uuid_1 = require("uuid");
|
|
90
|
+
var map_1 = require("../service/storage/map");
|
|
91
|
+
var EventEmitter_1 = require("./EventEmitter");
|
|
92
|
+
var utils = require("../utils");
|
|
93
|
+
var classMap_1 = require("../common/classMap");
|
|
94
|
+
var decorators_1 = require("../decorators");
|
|
95
|
+
var __1 = require("..");
|
|
96
|
+
/**
|
|
97
|
+
* 顶点类
|
|
98
|
+
* 属性均为只读,仅在初始化和 load 的情况下可以修改
|
|
99
|
+
*/
|
|
100
|
+
var BaseNode = /** @class */ (function (_super) {
|
|
101
|
+
__extends(BaseNode, _super);
|
|
102
|
+
/**
|
|
103
|
+
* @param source 需要合并的部分参数
|
|
104
|
+
*/
|
|
105
|
+
function BaseNode(source) {
|
|
106
|
+
var _this = _super.call(this) || this;
|
|
107
|
+
/**
|
|
108
|
+
* 可修改标志,内部属性
|
|
109
|
+
* 标记在构造函数结束后是否可修改
|
|
110
|
+
*/
|
|
111
|
+
_this._mutable = true;
|
|
112
|
+
/**
|
|
113
|
+
* 概念
|
|
114
|
+
*/
|
|
115
|
+
_this.concept = undefined;
|
|
116
|
+
/**
|
|
117
|
+
* 唯一 Id
|
|
118
|
+
*/
|
|
119
|
+
_this.id = uuid_1.v4().replace(/-/g, '');
|
|
120
|
+
/**
|
|
121
|
+
* 变动时间
|
|
122
|
+
*/
|
|
123
|
+
_this.changedTime = undefined;
|
|
124
|
+
/**
|
|
125
|
+
* 分支名称
|
|
126
|
+
*/
|
|
127
|
+
_this.branchName = undefined;
|
|
128
|
+
/**
|
|
129
|
+
* 合并代码相关
|
|
130
|
+
*/
|
|
131
|
+
_this.workingCopy = undefined;
|
|
132
|
+
_this.branch = undefined;
|
|
133
|
+
/**
|
|
134
|
+
* 父节点
|
|
135
|
+
*/
|
|
136
|
+
_this.parentNode = null;
|
|
137
|
+
_this.parentKey = '';
|
|
138
|
+
/**
|
|
139
|
+
* 是否正在编辑
|
|
140
|
+
* 前端 UI 状态
|
|
141
|
+
*/
|
|
142
|
+
_this.editable = undefined;
|
|
143
|
+
/**
|
|
144
|
+
* 是否可以删除
|
|
145
|
+
* 前端 UI 状态
|
|
146
|
+
*/
|
|
147
|
+
_this.removable = undefined;
|
|
148
|
+
/**
|
|
149
|
+
* 是否正在编辑
|
|
150
|
+
* 前端 UI 状态
|
|
151
|
+
*/
|
|
152
|
+
_this.editing = false;
|
|
153
|
+
/**
|
|
154
|
+
* 是否正在请求
|
|
155
|
+
* 前端 UI 状态
|
|
156
|
+
*/
|
|
157
|
+
_this.loading = false;
|
|
158
|
+
/**
|
|
159
|
+
* 节点是否为展开状态
|
|
160
|
+
* 前端 UI 状态
|
|
161
|
+
*/
|
|
162
|
+
_this.expanded = false;
|
|
163
|
+
/**
|
|
164
|
+
* 节点是否显示
|
|
165
|
+
* 前端 UI 状态
|
|
166
|
+
*/
|
|
167
|
+
_this.hidden = false;
|
|
168
|
+
/**
|
|
169
|
+
* 页面树节点是否显示
|
|
170
|
+
* 前端 UI 状态
|
|
171
|
+
*/
|
|
172
|
+
_this.pageTreeNodeHidden = false;
|
|
173
|
+
/**
|
|
174
|
+
* 逻辑树节点是否显示
|
|
175
|
+
* 前端 UI 状态
|
|
176
|
+
*/
|
|
177
|
+
_this.logicTreeNodeHidden = false;
|
|
178
|
+
/**
|
|
179
|
+
* 数据树节点是否显示
|
|
180
|
+
* 前端 UI 状态
|
|
181
|
+
*/
|
|
182
|
+
_this.dataTreeNodeHidden = false;
|
|
183
|
+
/**
|
|
184
|
+
* 数据树节点是否展开
|
|
185
|
+
* 前端 UI 状态
|
|
186
|
+
*/
|
|
187
|
+
_this.logicTreeNodeExpanded = false;
|
|
188
|
+
/**
|
|
189
|
+
* 用于挂 embeddedTS 的 sourceMap
|
|
190
|
+
*/
|
|
191
|
+
_this.sourceMap = undefined;
|
|
192
|
+
/**
|
|
193
|
+
* 是否为叶子节点
|
|
194
|
+
* 前端 UI 状态
|
|
195
|
+
*/
|
|
196
|
+
_this.isLeaf = false;
|
|
197
|
+
/**
|
|
198
|
+
* 当前节点上报错详细信息
|
|
199
|
+
*/
|
|
200
|
+
_this.tsErrorDetail = undefined;
|
|
201
|
+
_this.name = '';
|
|
202
|
+
/**
|
|
203
|
+
* 是否正在编辑
|
|
204
|
+
* 前端 UI 状态
|
|
205
|
+
*/
|
|
206
|
+
_this.__TypeAnnotation = undefined;
|
|
207
|
+
if (_this.hasOwnProperty('JSON_EXCLUDED_KEYS') && _this.JSON_EXCLUDED_KEYS === undefined)
|
|
208
|
+
delete _this.JSON_EXCLUDED_KEYS;
|
|
209
|
+
/**
|
|
210
|
+
* 监听action,delete,update事件
|
|
211
|
+
*/
|
|
212
|
+
_this.on('create', _this.genActionListener);
|
|
213
|
+
_this.on('delete', _this.genActionListener);
|
|
214
|
+
_this.on('update', _this.genActionListener);
|
|
215
|
+
return _this;
|
|
216
|
+
}
|
|
217
|
+
BaseNode.prototype.subConstructor = function (source) {
|
|
218
|
+
var _this = this;
|
|
219
|
+
var propertyMap = decorators_1.getConceptPropertyMap(this.constructor.name);
|
|
220
|
+
var properties = Array.from(new Set(__spreadArrays(Object.keys(this), Object.keys(source)))).filter(function (key) { return propertyMap.has(key); });
|
|
221
|
+
properties.forEach(function (key) {
|
|
222
|
+
var property = propertyMap.get(key);
|
|
223
|
+
var sourceItem = source[key] !== undefined ? source[key] : _this[key];
|
|
224
|
+
var objectRefCtor;
|
|
225
|
+
try {
|
|
226
|
+
if (property.objectRef) {
|
|
227
|
+
var arr = property.objectRef.split(' | ');
|
|
228
|
+
for (var i = 0; i < arr.length; i++) {
|
|
229
|
+
objectRefCtor = decorators_1.getConceptConstructor(arr[i]);
|
|
230
|
+
if (sourceItem instanceof objectRefCtor) {
|
|
231
|
+
sourceItem.parentNode = _this;
|
|
232
|
+
sourceItem.parentKey = key;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// 数组的情况也在这里做掉了
|
|
238
|
+
_this[key] = objectRefCtor && sourceItem && !(sourceItem instanceof objectRefCtor) ? _this.instantiateSub(sourceItem, key) : sourceItem;
|
|
239
|
+
}
|
|
240
|
+
catch (e) {
|
|
241
|
+
// Function has non-object prototype 'undefined' in instanceof check
|
|
242
|
+
if (!e.message.includes('Function has non-object prototype'))
|
|
243
|
+
throw e;
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
// if (config.storage.protocol === 'http' && loadThen[source.concept as 'App' | 'View']) {
|
|
247
|
+
// const { childNodes } = loadThen[source.concept as 'App' | 'View'] || {};
|
|
248
|
+
// const queryList = childNodes.map(({ field, concept }) => {
|
|
249
|
+
// const path = [this.nodePath, field].join('.');
|
|
250
|
+
// return {
|
|
251
|
+
// path,
|
|
252
|
+
// excludes: loadThen[concept as 'App' | 'View'].childNodes.map(({ field }) => field),
|
|
253
|
+
// };
|
|
254
|
+
// });
|
|
255
|
+
// storageService
|
|
256
|
+
// .batchQuery({
|
|
257
|
+
// body: queryList,
|
|
258
|
+
// headers: {
|
|
259
|
+
// appId: this.rootNode?.id || this.id,
|
|
260
|
+
// },
|
|
261
|
+
// })
|
|
262
|
+
// .then((data: any) =>
|
|
263
|
+
// data.forEach((sourceItem: any, index: number) => {
|
|
264
|
+
// const { field, concept } = childNodes[index];
|
|
265
|
+
// if (!sourceItem || (Array.isArray((this as any)[field]) && !Array.isArray(sourceItem))) {
|
|
266
|
+
// return;
|
|
267
|
+
// }
|
|
268
|
+
// const objectRefCtor = getConceptConstructor(concept);
|
|
269
|
+
// (this as any)[field] = objectRefCtor ? this.instantiateSub(sourceItem, field) : sourceItem;
|
|
270
|
+
// }));
|
|
271
|
+
// }
|
|
272
|
+
};
|
|
273
|
+
BaseNode.prototype.fixInstantiate = function () {
|
|
274
|
+
var _this = this;
|
|
275
|
+
var propertyMap = decorators_1.getConceptPropertyMap(this.constructor.name);
|
|
276
|
+
var properties = Object.keys(this).filter(function (key) { return propertyMap.has(key); });
|
|
277
|
+
properties.forEach(function (key) {
|
|
278
|
+
var property = propertyMap.get(key);
|
|
279
|
+
var sourceItem = _this[key];
|
|
280
|
+
var objectRefCtor = property.objectRef && decorators_1.getConceptConstructor(property.objectRef);
|
|
281
|
+
if (objectRefCtor) {
|
|
282
|
+
if (Array.isArray(sourceItem)) {
|
|
283
|
+
sourceItem.forEach(function (item, index) {
|
|
284
|
+
if (item instanceof objectRefCtor) {
|
|
285
|
+
item.parentNode = _this;
|
|
286
|
+
item.parentKey = key;
|
|
287
|
+
item.fixInstantiate();
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
sourceItem[index] = _this.instantiateSub(item instanceof BaseNode ? item.toJSON() : item, key);
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
if (sourceItem instanceof objectRefCtor) {
|
|
296
|
+
sourceItem.parentNode = _this;
|
|
297
|
+
sourceItem.parentKey = key;
|
|
298
|
+
sourceItem.fixInstantiate();
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
_this[key] = _this.instantiateSub(sourceItem instanceof BaseNode ? sourceItem.toJSON() : sourceItem, key);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
};
|
|
307
|
+
BaseNode.prototype.getIndexOfParent = function () {
|
|
308
|
+
var index = -1;
|
|
309
|
+
var parentNode = this.parentNode;
|
|
310
|
+
if (parentNode) {
|
|
311
|
+
var parentKey = this.parentKey;
|
|
312
|
+
var parentProperty = parentNode[parentKey];
|
|
313
|
+
if (Array.isArray(parentProperty)) {
|
|
314
|
+
index = parentProperty.indexOf(this);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
return index;
|
|
318
|
+
};
|
|
319
|
+
/**
|
|
320
|
+
* 为存储点生成行为监听器
|
|
321
|
+
* @param action
|
|
322
|
+
* @returns
|
|
323
|
+
*/
|
|
324
|
+
BaseNode.prototype.genActionListener = function ($event) {
|
|
325
|
+
var _a, _b;
|
|
326
|
+
// eventList是要被发送给后端的数据
|
|
327
|
+
if (!$event.eventList) {
|
|
328
|
+
$event.eventList = [];
|
|
329
|
+
}
|
|
330
|
+
if (!$event.eventStop) {
|
|
331
|
+
$event.eventList.push($event);
|
|
332
|
+
}
|
|
333
|
+
$event.originEvent = $event.originEvent || $event;
|
|
334
|
+
this.onChange($event);
|
|
335
|
+
if (this.concept === 'App') {
|
|
336
|
+
this.emit('storage', $event);
|
|
337
|
+
}
|
|
338
|
+
else if (this.parentNode && this.parentNode.emit) {
|
|
339
|
+
var event = {
|
|
340
|
+
action: 'update',
|
|
341
|
+
path: (_a = this.parentNode) === null || _a === void 0 ? void 0 : _a.getNodePath(false),
|
|
342
|
+
object: {},
|
|
343
|
+
oldObject: {},
|
|
344
|
+
originEvent: $event.originEvent,
|
|
345
|
+
eventList: $event.eventList,
|
|
346
|
+
// eventStop为true后,数据不再存入eventList,就不再会将冒泡数据发送给后端
|
|
347
|
+
eventStop: true
|
|
348
|
+
};
|
|
349
|
+
(_b = this.parentNode) === null || _b === void 0 ? void 0 : _b.emit('update', event);
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
BaseNode.prototype.createNode = function (_a) {
|
|
353
|
+
var parentNode = _a.parentNode, parentKey = _a.parentKey, index = _a.index;
|
|
354
|
+
if (parentNode) {
|
|
355
|
+
var property_1 = parentNode[parentKey];
|
|
356
|
+
if (Array.isArray(property_1) && index !== -1) {
|
|
357
|
+
property_1.splice(index, 0, this);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
parentNode[parentKey] = this;
|
|
361
|
+
}
|
|
362
|
+
this.parentNode = parentNode;
|
|
363
|
+
this.parentKey = parentKey;
|
|
364
|
+
this.create({
|
|
365
|
+
index: index,
|
|
366
|
+
parentKey: parentKey
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
BaseNode.prototype.toTemplateJSON = function () {
|
|
371
|
+
return this._toJSON(function (source) {
|
|
372
|
+
delete source.id;
|
|
373
|
+
return source;
|
|
374
|
+
});
|
|
375
|
+
};
|
|
376
|
+
/**
|
|
377
|
+
* 创建节点
|
|
378
|
+
*/
|
|
379
|
+
BaseNode.prototype.create = function (parentParams) {
|
|
380
|
+
this.emit('create', __assign(__assign({ action: 'create', path: this.getNodePath(true), object: this.toJSON() }, parentParams), { oldObject: null }));
|
|
381
|
+
};
|
|
382
|
+
/**
|
|
383
|
+
* 如果有父节点,则删除节点,在添加时调用
|
|
384
|
+
*/
|
|
385
|
+
BaseNode.prototype.ensureDelete = function () {
|
|
386
|
+
var _a, _b;
|
|
387
|
+
var _c;
|
|
388
|
+
// 批量赋值因为连线的问题需要特殊处理一下.
|
|
389
|
+
if (((_c = this.parentNode) === null || _c === void 0 ? void 0 : _c.concept) === 'SelectMembers') {
|
|
390
|
+
this.parentNode.ensureDelete();
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
if (this.parentNode && this.parentKey) {
|
|
394
|
+
var path = this.getNodePath(false);
|
|
395
|
+
var parentParams = this._delete();
|
|
396
|
+
if (parentParams && parentParams.index !== -1) {
|
|
397
|
+
if (Array.isArray(this.parentNode[this.parentKey])) {
|
|
398
|
+
this.emit('delete', __assign({ action: 'delete', path: path, object: null }, parentParams));
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
var parentPath = this.parentNode.getNodePath(false);
|
|
402
|
+
this.parentNode.emit('update', {
|
|
403
|
+
action: 'update',
|
|
404
|
+
path: parentPath,
|
|
405
|
+
object: (_a = {},
|
|
406
|
+
_a[this.parentKey] = null,
|
|
407
|
+
_a),
|
|
408
|
+
oldObject: (_b = {},
|
|
409
|
+
_b[this.parentKey] = this.toJSON(),
|
|
410
|
+
_b)
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
};
|
|
416
|
+
/**
|
|
417
|
+
* 删除节点
|
|
418
|
+
*/
|
|
419
|
+
BaseNode.prototype["delete"] = function () {
|
|
420
|
+
var _a, _b;
|
|
421
|
+
var _c, _d;
|
|
422
|
+
if (((_c = this.parentNode) === null || _c === void 0 ? void 0 : _c.concept) === 'Match' && this.parentKey === 'expression') {
|
|
423
|
+
this.parentNode.setExpressionWitchCase(null);
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
// 批量赋值因为连线的问题需要特殊处理一下.
|
|
427
|
+
if (((_d = this.parentNode) === null || _d === void 0 ? void 0 : _d.concept) === 'SelectMembers') {
|
|
428
|
+
var node = this.parentNode;
|
|
429
|
+
node["delete"]();
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
else if (this.concept === 'SelectMembers') {
|
|
433
|
+
var node = this.parentNode;
|
|
434
|
+
node.changeLinesLocation(this);
|
|
435
|
+
}
|
|
436
|
+
var useIndex = ['BindEvent', 'Identifier'].includes(this.concept);
|
|
437
|
+
var path = this.getNodePath(useIndex);
|
|
438
|
+
var parentParams = this._delete();
|
|
439
|
+
if (parentParams && parentParams.index !== -1) {
|
|
440
|
+
if (Array.isArray(this.parentNode[this.parentKey])) {
|
|
441
|
+
this.emit('delete', __assign({ action: 'delete', path: path, object: null }, parentParams));
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
var parentPath = this.parentNode.getNodePath(false);
|
|
445
|
+
this.parentNode.emit('update', {
|
|
446
|
+
action: 'update',
|
|
447
|
+
path: parentPath,
|
|
448
|
+
object: (_a = {},
|
|
449
|
+
_a[this.parentKey] = null,
|
|
450
|
+
_a),
|
|
451
|
+
oldObject: (_b = {},
|
|
452
|
+
_b[this.parentKey] = this.toJSON(),
|
|
453
|
+
_b)
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
/**
|
|
459
|
+
* 更新节点
|
|
460
|
+
*/
|
|
461
|
+
BaseNode.prototype.update = function (_a) {
|
|
462
|
+
var _this = this;
|
|
463
|
+
var _b, _c;
|
|
464
|
+
var field = _a.field, object = __rest(_a, ["field"]);
|
|
465
|
+
var path = this.getNodePath(false);
|
|
466
|
+
var oldObject = {};
|
|
467
|
+
var _loop_1 = function (key) {
|
|
468
|
+
if (Object.prototype.hasOwnProperty.call(object, key)) {
|
|
469
|
+
var oldProperty = (_b = this_1[key]) !== null && _b !== void 0 ? _b : null;
|
|
470
|
+
oldObject[key] = oldProperty;
|
|
471
|
+
if (Array.isArray(oldProperty)) {
|
|
472
|
+
oldObject[key] = oldProperty.map(function (item) {
|
|
473
|
+
var propertyItem = item !== null && item !== void 0 ? item : null;
|
|
474
|
+
if (item instanceof BaseNode) {
|
|
475
|
+
propertyItem = item.toJSON();
|
|
476
|
+
}
|
|
477
|
+
return propertyItem;
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
else if (oldProperty instanceof BaseNode) {
|
|
481
|
+
oldObject[key] = oldProperty.toJSON();
|
|
482
|
+
}
|
|
483
|
+
var property_2 = (_c = object[key]) !== null && _c !== void 0 ? _c : null;
|
|
484
|
+
this_1[key] = property_2;
|
|
485
|
+
var objectRefCtor = decorators_1.getConceptConstructor(property_2 === null || property_2 === void 0 ? void 0 : property_2.concept);
|
|
486
|
+
if (Array.isArray(property_2)) {
|
|
487
|
+
this_1[key] = property_2.map(function (item) {
|
|
488
|
+
var propertyItem = item !== null && item !== void 0 ? item : null;
|
|
489
|
+
var propertyObjectRefCtor = decorators_1.getConceptConstructor(item === null || item === void 0 ? void 0 : item.concept);
|
|
490
|
+
if (propertyObjectRefCtor === null || propertyObjectRefCtor === void 0 ? void 0 : propertyObjectRefCtor.from) {
|
|
491
|
+
propertyItem = propertyObjectRefCtor.from(item, _this, key);
|
|
492
|
+
}
|
|
493
|
+
return propertyItem;
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
else if (objectRefCtor === null || objectRefCtor === void 0 ? void 0 : objectRefCtor.from) {
|
|
497
|
+
this_1[key] = objectRefCtor.from(property_2, this_1, key);
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
};
|
|
501
|
+
var this_1 = this;
|
|
502
|
+
for (var key in object) {
|
|
503
|
+
_loop_1(key);
|
|
504
|
+
}
|
|
505
|
+
this.emit('update', {
|
|
506
|
+
action: 'update',
|
|
507
|
+
path: path,
|
|
508
|
+
object: object,
|
|
509
|
+
oldObject: oldObject,
|
|
510
|
+
field: field
|
|
511
|
+
});
|
|
512
|
+
};
|
|
513
|
+
BaseNode.prototype._delete = function () {
|
|
514
|
+
/* override */
|
|
515
|
+
return {
|
|
516
|
+
propertyName: '',
|
|
517
|
+
index: -1,
|
|
518
|
+
object: null,
|
|
519
|
+
oldObject: this
|
|
520
|
+
};
|
|
521
|
+
};
|
|
522
|
+
BaseNode.from = function (source, parentNode, parentKey) {
|
|
523
|
+
// 有一些继承的情况
|
|
524
|
+
var Ctor = classMap_1["default"][source.concept] || this;
|
|
525
|
+
if (Ctor && source instanceof Ctor) {
|
|
526
|
+
if (parentNode) {
|
|
527
|
+
source.parentNode = parentNode;
|
|
528
|
+
}
|
|
529
|
+
if (parentKey) {
|
|
530
|
+
source.parentKey = parentKey;
|
|
531
|
+
}
|
|
532
|
+
return source;
|
|
533
|
+
}
|
|
534
|
+
if (Ctor) {
|
|
535
|
+
var instance = new Ctor();
|
|
536
|
+
if (parentNode) {
|
|
537
|
+
instance.parentNode = parentNode;
|
|
538
|
+
}
|
|
539
|
+
if (parentKey) {
|
|
540
|
+
instance.parentKey = parentKey;
|
|
541
|
+
}
|
|
542
|
+
instance.subConstructor(__assign(__assign({}, source), { concept: source.concept || Ctor.name, parentNode: parentNode }));
|
|
543
|
+
return instance;
|
|
544
|
+
}
|
|
545
|
+
};
|
|
546
|
+
Object.defineProperty(BaseNode.prototype, "nodePath", {
|
|
547
|
+
get: function () {
|
|
548
|
+
return this.getNodePath(false);
|
|
549
|
+
},
|
|
550
|
+
enumerable: false,
|
|
551
|
+
configurable: true
|
|
552
|
+
});
|
|
553
|
+
BaseNode.prototype.getNodePath = function (useIndex) {
|
|
554
|
+
var node = this;
|
|
555
|
+
var isNodeSelf = true;
|
|
556
|
+
var pathArr = [];
|
|
557
|
+
while (node) {
|
|
558
|
+
var path = '';
|
|
559
|
+
var parentNode = node.parentNode;
|
|
560
|
+
if (parentNode) {
|
|
561
|
+
var parentKey = node.parentKey;
|
|
562
|
+
path = parentKey;
|
|
563
|
+
var parentProperty = parentNode[parentKey];
|
|
564
|
+
if (Array.isArray(parentProperty)) {
|
|
565
|
+
var name = node.name;
|
|
566
|
+
if (!name || (useIndex && isNodeSelf)) {
|
|
567
|
+
var index = parentProperty.indexOf(node);
|
|
568
|
+
path += "[" + index + "]";
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
path += "[name=" + name + "]";
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
pathArr.unshift(path);
|
|
575
|
+
}
|
|
576
|
+
node = parentNode;
|
|
577
|
+
isNodeSelf = false;
|
|
578
|
+
}
|
|
579
|
+
pathArr.unshift('app');
|
|
580
|
+
return pathArr.join('.');
|
|
581
|
+
};
|
|
582
|
+
Object.defineProperty(BaseNode.prototype, "upperNode", {
|
|
583
|
+
/**
|
|
584
|
+
* 上层节点
|
|
585
|
+
*/
|
|
586
|
+
get: function () {
|
|
587
|
+
// eslint-disable-next-line consistent-this
|
|
588
|
+
var _upperNode = this;
|
|
589
|
+
while (!!_upperNode && _upperNode.concept === this.concept) {
|
|
590
|
+
_upperNode = _upperNode.parentNode;
|
|
591
|
+
}
|
|
592
|
+
return _upperNode;
|
|
593
|
+
},
|
|
594
|
+
enumerable: false,
|
|
595
|
+
configurable: true
|
|
596
|
+
});
|
|
597
|
+
Object.defineProperty(BaseNode.prototype, "rootNode", {
|
|
598
|
+
/**
|
|
599
|
+
* 根节点
|
|
600
|
+
*/
|
|
601
|
+
get: function () {
|
|
602
|
+
return this.getAncestor('App');
|
|
603
|
+
},
|
|
604
|
+
enumerable: false,
|
|
605
|
+
configurable: true
|
|
606
|
+
});
|
|
607
|
+
/**
|
|
608
|
+
* 获取祖先节点
|
|
609
|
+
*/
|
|
610
|
+
BaseNode.prototype.getAncestor = function (concept) {
|
|
611
|
+
var upperNode = this.upperNode;
|
|
612
|
+
while (upperNode && upperNode.concept && upperNode.concept !== concept) {
|
|
613
|
+
upperNode = upperNode.upperNode;
|
|
614
|
+
}
|
|
615
|
+
return upperNode;
|
|
616
|
+
};
|
|
617
|
+
/**
|
|
618
|
+
*
|
|
619
|
+
* @param source
|
|
620
|
+
* @param Ctor
|
|
621
|
+
* @param completeList
|
|
622
|
+
* @param idsList
|
|
623
|
+
*/
|
|
624
|
+
BaseNode.prototype.handleSource = function (source, completeList) {
|
|
625
|
+
var _a = source || {}, id = _a.id, concept = _a.concept;
|
|
626
|
+
var actualSource = source instanceof BaseNode ? source : map_1.getSourceFromMap(id, concept);
|
|
627
|
+
completeList.push(actualSource || source);
|
|
628
|
+
};
|
|
629
|
+
Object.defineProperty(BaseNode.prototype, "tsName", {
|
|
630
|
+
/**
|
|
631
|
+
* 获取当前的TsName
|
|
632
|
+
*/
|
|
633
|
+
get: function () {
|
|
634
|
+
if (this.name) {
|
|
635
|
+
var tsName = this.name;
|
|
636
|
+
// 匹配所有特殊字符都转为_
|
|
637
|
+
tsName = tsName.replace(/\W/g, '_');
|
|
638
|
+
if (/^\d/.test(tsName)) {
|
|
639
|
+
tsName = '$' + tsName;
|
|
640
|
+
}
|
|
641
|
+
return tsName;
|
|
642
|
+
}
|
|
643
|
+
return '';
|
|
644
|
+
},
|
|
645
|
+
enumerable: false,
|
|
646
|
+
configurable: true
|
|
647
|
+
});
|
|
648
|
+
/**
|
|
649
|
+
* 生成json
|
|
650
|
+
* @param instance
|
|
651
|
+
* @param Ctor
|
|
652
|
+
*/
|
|
653
|
+
BaseNode.prototype.genSources = function (instance, filerFn) {
|
|
654
|
+
if (!instance) {
|
|
655
|
+
return instance;
|
|
656
|
+
}
|
|
657
|
+
if (Array.isArray(instance)) {
|
|
658
|
+
return instance.map(function (item) { return (item && item._toJSON ? item._toJSON(filerFn) : item); });
|
|
659
|
+
}
|
|
660
|
+
else {
|
|
661
|
+
return instance && instance._toJSON ? instance._toJSON(filerFn) : instance;
|
|
662
|
+
}
|
|
663
|
+
};
|
|
664
|
+
/**
|
|
665
|
+
* 实例化一个 JSON
|
|
666
|
+
* 由于有 from,只能先实例化父级,再实例化子级
|
|
667
|
+
* @param obj
|
|
668
|
+
* @param parentNode
|
|
669
|
+
* @returns
|
|
670
|
+
*/
|
|
671
|
+
BaseNode.prototype.instantiate = function (source, parentNode, parentKey) {
|
|
672
|
+
if (source instanceof BaseNode) {
|
|
673
|
+
if (!source.parentNode || !source.parentKey) {
|
|
674
|
+
source.parentNode = parentNode;
|
|
675
|
+
source.parentKey = parentKey;
|
|
676
|
+
}
|
|
677
|
+
return source;
|
|
678
|
+
}
|
|
679
|
+
else if (source && source.concept && classMap_1["default"][source.concept]) {
|
|
680
|
+
var Ctor = classMap_1["default"][source.concept];
|
|
681
|
+
var instance = Ctor.from(source, parentNode, parentKey);
|
|
682
|
+
if (instance && instance.toStorageJSON)
|
|
683
|
+
instance.storageJSON = instance.toStorageJSON();
|
|
684
|
+
return instance;
|
|
685
|
+
}
|
|
686
|
+
else {
|
|
687
|
+
return source;
|
|
688
|
+
}
|
|
689
|
+
};
|
|
690
|
+
/**
|
|
691
|
+
* 激活 JSON 内部实例
|
|
692
|
+
* @param source
|
|
693
|
+
*/
|
|
694
|
+
BaseNode.prototype.instantiateSub = function (source, parentKey) {
|
|
695
|
+
var _this = this;
|
|
696
|
+
if (!source) {
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
var completeList = [];
|
|
700
|
+
var isArray = false;
|
|
701
|
+
// 暂时通过是否有name判断数据是否全
|
|
702
|
+
if (Array.isArray(source)) {
|
|
703
|
+
isArray = true;
|
|
704
|
+
source.forEach(function (sourceItem) {
|
|
705
|
+
_this.handleSource(sourceItem, completeList);
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
else {
|
|
709
|
+
this.handleSource(source, completeList);
|
|
710
|
+
}
|
|
711
|
+
var instanceList = completeList.map(function (item) { return _this.instantiate(item, _this, parentKey); });
|
|
712
|
+
if (isArray) {
|
|
713
|
+
return instanceList;
|
|
714
|
+
}
|
|
715
|
+
else if (Array.isArray(instanceList) && instanceList.length) {
|
|
716
|
+
return instanceList[0];
|
|
717
|
+
}
|
|
718
|
+
};
|
|
719
|
+
BaseNode.prototype.plainAssign = function (source) {
|
|
720
|
+
var _this = this;
|
|
721
|
+
this._mutable = true;
|
|
722
|
+
var oldId = this.id;
|
|
723
|
+
Object.keys(source).forEach(function (key) {
|
|
724
|
+
var value = source[key];
|
|
725
|
+
if (typeof value !== 'object' && typeof value !== 'function')
|
|
726
|
+
_this[key] = value;
|
|
727
|
+
});
|
|
728
|
+
this._mutable = false;
|
|
729
|
+
};
|
|
730
|
+
BaseNode.prototype.pick = function (source, keys) {
|
|
731
|
+
if (keys === void 0) { keys = []; }
|
|
732
|
+
var obj = {};
|
|
733
|
+
keys.forEach(function (key) { return (obj[key] = source[key]); });
|
|
734
|
+
// 这里统一用 assign,集中处理 id 的问题
|
|
735
|
+
// this.assign(obj);
|
|
736
|
+
};
|
|
737
|
+
/**
|
|
738
|
+
* 从对象中深度获取
|
|
739
|
+
* @param source
|
|
740
|
+
* @param keys
|
|
741
|
+
* @example 比如一般后端返回只是添加了个 id
|
|
742
|
+
* ```
|
|
743
|
+
* this.deepPick(result, ['id'])
|
|
744
|
+
*/
|
|
745
|
+
BaseNode.prototype.deepPick = function (source, keys) {
|
|
746
|
+
var _this = this;
|
|
747
|
+
if (keys === void 0) { keys = []; }
|
|
748
|
+
utils.traverse(function (current) {
|
|
749
|
+
var subSource = current.jsonPath ? lodash_1.at(source, [current.jsonPath])[0] : source;
|
|
750
|
+
var target = current.jsonPath ? lodash_1.at(_this, [current.jsonPath])[0] : _this;
|
|
751
|
+
if (!target)
|
|
752
|
+
return;
|
|
753
|
+
var obj = {};
|
|
754
|
+
keys.forEach(function (key) {
|
|
755
|
+
if (subSource.hasOwnProperty(key)) {
|
|
756
|
+
obj[key] = subSource[key];
|
|
757
|
+
}
|
|
758
|
+
});
|
|
759
|
+
// 这里统一用 assign,集中处理 id 的问题
|
|
760
|
+
target.assign ? target.assign(obj) : Object.assign(target, obj);
|
|
761
|
+
}, { node: source }, { mode: 'anyObject' });
|
|
762
|
+
};
|
|
763
|
+
/**
|
|
764
|
+
* 去除循环依赖,转为纯 JSON
|
|
765
|
+
* @param parentKey 外面的 key,提供给 JSON.stringify 使用
|
|
766
|
+
* @param excludedKeys 需要额外排除的 keys
|
|
767
|
+
*/
|
|
768
|
+
BaseNode.prototype.toJSON = function () {
|
|
769
|
+
return this._toJSON();
|
|
770
|
+
};
|
|
771
|
+
BaseNode.prototype._toJSON = function (filerFn) {
|
|
772
|
+
var _this = this;
|
|
773
|
+
var propertyMap = decorators_1.getConceptPropertyMap(this.constructor.name);
|
|
774
|
+
var source = {};
|
|
775
|
+
propertyMap.forEach(function (property, key) {
|
|
776
|
+
if (property) {
|
|
777
|
+
var propertyObjectRef = property.objectRef;
|
|
778
|
+
if (!propertyObjectRef) {
|
|
779
|
+
source[key] = _this[key];
|
|
780
|
+
}
|
|
781
|
+
else {
|
|
782
|
+
var sources = _this.genSources(_this[key], filerFn);
|
|
783
|
+
source[key] = sources;
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
});
|
|
787
|
+
return filerFn ? filerFn(source) : source;
|
|
788
|
+
};
|
|
789
|
+
/**
|
|
790
|
+
* 转为单层的 JSON
|
|
791
|
+
* @param parentKey 外面的 key,提供给 JSON.stringify 使用
|
|
792
|
+
* @param excludedKeys 需要额外排除的 keys
|
|
793
|
+
*/
|
|
794
|
+
BaseNode.prototype.toPlainJSON = function (parentKey, excludedKeys) {
|
|
795
|
+
var _this = this;
|
|
796
|
+
if (excludedKeys === void 0) { excludedKeys = []; }
|
|
797
|
+
var JSON_EXCLUDED_KEYS = new Set(this.JSON_EXCLUDED_KEYS || []); // Object.getPrototypeOf(this).constructor.JSON_EXCLUDED_KEYS || [];
|
|
798
|
+
excludedKeys.forEach(function (key) { return JSON_EXCLUDED_KEYS.add(key); });
|
|
799
|
+
var temp = {};
|
|
800
|
+
Object.keys(this).forEach(function (key) {
|
|
801
|
+
var value = _this[key];
|
|
802
|
+
if (!JSON_EXCLUDED_KEYS.has(key) && typeof value !== 'object' && typeof value !== 'function')
|
|
803
|
+
temp[key] = value;
|
|
804
|
+
});
|
|
805
|
+
return JSON.parse(JSON.stringify(temp));
|
|
806
|
+
};
|
|
807
|
+
/**
|
|
808
|
+
* 查找引用
|
|
809
|
+
*/
|
|
810
|
+
BaseNode.prototype.findUsage = function () {
|
|
811
|
+
return __awaiter(this, void 0, Promise, function () {
|
|
812
|
+
return __generator(this, function (_a) {
|
|
813
|
+
return [2 /*return*/];
|
|
814
|
+
});
|
|
815
|
+
});
|
|
816
|
+
};
|
|
817
|
+
BaseNode.prototype.findReadOnlyLogicUsage = function () {
|
|
818
|
+
return __awaiter(this, void 0, Promise, function () {
|
|
819
|
+
return __generator(this, function (_a) {
|
|
820
|
+
return [2 /*return*/];
|
|
821
|
+
});
|
|
822
|
+
});
|
|
823
|
+
};
|
|
824
|
+
/**
|
|
825
|
+
* 重命名
|
|
826
|
+
*/
|
|
827
|
+
BaseNode.prototype.changeName = function (newValue) {
|
|
828
|
+
return __awaiter(this, void 0, Promise, function () {
|
|
829
|
+
return __generator(this, function (_a) {
|
|
830
|
+
return [2 /*return*/];
|
|
831
|
+
});
|
|
832
|
+
});
|
|
833
|
+
};
|
|
834
|
+
/**
|
|
835
|
+
* 准备删除
|
|
836
|
+
*/
|
|
837
|
+
BaseNode.prototype.prepareDelete = function () {
|
|
838
|
+
return __awaiter(this, void 0, Promise, function () {
|
|
839
|
+
return __generator(this, function (_a) {
|
|
840
|
+
return [2 /*return*/];
|
|
841
|
+
});
|
|
842
|
+
});
|
|
843
|
+
};
|
|
844
|
+
/**
|
|
845
|
+
* 添加参数准备
|
|
846
|
+
*/
|
|
847
|
+
BaseNode.prototype.addParamsPrepare = function () {
|
|
848
|
+
return __awaiter(this, void 0, Promise, function () {
|
|
849
|
+
return __generator(this, function (_a) {
|
|
850
|
+
return [2 /*return*/];
|
|
851
|
+
});
|
|
852
|
+
});
|
|
853
|
+
};
|
|
854
|
+
/**
|
|
855
|
+
* 获取当前节点类型
|
|
856
|
+
*/
|
|
857
|
+
BaseNode.prototype.getCurrentTypeAnnotation = function () {
|
|
858
|
+
return __awaiter(this, void 0, Promise, function () {
|
|
859
|
+
return __generator(this, function (_a) {
|
|
860
|
+
return [2 /*return*/];
|
|
861
|
+
});
|
|
862
|
+
});
|
|
863
|
+
};
|
|
864
|
+
/**
|
|
865
|
+
* 销毁
|
|
866
|
+
* 从 Map 中删除点和子节点
|
|
867
|
+
*/
|
|
868
|
+
BaseNode.prototype.destroy = function () {
|
|
869
|
+
// utils.traverse((current) => , { node: this }, {
|
|
870
|
+
// mode: 'anyObject',
|
|
871
|
+
// excludedKeySet: this.JSON_EXCLUDED_KEYS,
|
|
872
|
+
// });
|
|
873
|
+
};
|
|
874
|
+
BaseNode.prototype.onChange = function ($event) {
|
|
875
|
+
/* override */
|
|
876
|
+
};
|
|
877
|
+
BaseNode.prototype.onCreate = function ($event) {
|
|
878
|
+
/* override */
|
|
879
|
+
};
|
|
880
|
+
BaseNode.prototype.onDelete = function ($event) {
|
|
881
|
+
/* override */
|
|
882
|
+
};
|
|
883
|
+
/**
|
|
884
|
+
* 移动节点
|
|
885
|
+
* @param sourceNode
|
|
886
|
+
* @param position
|
|
887
|
+
*/
|
|
888
|
+
BaseNode.prototype.moveNode = function (options) {
|
|
889
|
+
var sourceNode = options.sourceNode, position = options.position;
|
|
890
|
+
if (this.concept === 'App') {
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
893
|
+
var actionMsg = "\u79FB\u52A8" + this.constructor.nodeTitle;
|
|
894
|
+
if (this.name) {
|
|
895
|
+
actionMsg += "\u201C" + this.name + "\u201D";
|
|
896
|
+
}
|
|
897
|
+
sourceNode.app.emit('collect:start', {
|
|
898
|
+
actionMsg: actionMsg
|
|
899
|
+
});
|
|
900
|
+
// 如果是兄弟节点之前的移动
|
|
901
|
+
if (position !== 'append' && this.concept !== sourceNode.concept) {
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
// 先删
|
|
905
|
+
this["delete"]();
|
|
906
|
+
if (position === 'append') {
|
|
907
|
+
var action_1 = options.action;
|
|
908
|
+
if (!action_1)
|
|
909
|
+
action_1 = "add" + this.concept;
|
|
910
|
+
var parentNode = sourceNode;
|
|
911
|
+
parentNode[action_1](this);
|
|
912
|
+
}
|
|
913
|
+
else {
|
|
914
|
+
var parentNode = sourceNode === null || sourceNode === void 0 ? void 0 : sourceNode.parentNode;
|
|
915
|
+
var parentKey = (sourceNode === null || sourceNode === void 0 ? void 0 : sourceNode.parentKey) || '';
|
|
916
|
+
var list = parentNode[parentKey];
|
|
917
|
+
if (Array.isArray(list)) {
|
|
918
|
+
var index = list.indexOf(sourceNode);
|
|
919
|
+
if (position === 'insertAfter') {
|
|
920
|
+
index += 1;
|
|
921
|
+
}
|
|
922
|
+
Object.assign(this, {
|
|
923
|
+
parentNode: parentNode,
|
|
924
|
+
parentKey: parentKey
|
|
925
|
+
});
|
|
926
|
+
if (this.concept === 'ViewElement')
|
|
927
|
+
this.name = this.getViewElementUniqueName(this.name);
|
|
928
|
+
list.splice(index, 0, this);
|
|
929
|
+
this.create({
|
|
930
|
+
index: index,
|
|
931
|
+
parentNode: parentNode,
|
|
932
|
+
parentKey: parentKey
|
|
933
|
+
});
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
sourceNode.app.emit('collect:end');
|
|
937
|
+
};
|
|
938
|
+
/**
|
|
939
|
+
* 获取添加时的默认选项
|
|
940
|
+
* @returns
|
|
941
|
+
*/
|
|
942
|
+
BaseNode.getDefaultOptions = function () {
|
|
943
|
+
return {};
|
|
944
|
+
};
|
|
945
|
+
BaseNode.prototype.traverseChildren = function (cb) {
|
|
946
|
+
function traverse(node) {
|
|
947
|
+
cb(node);
|
|
948
|
+
var propertyMap = decorators_1.getConceptPropertyMap(node === null || node === void 0 ? void 0 : node.concept);
|
|
949
|
+
if (!propertyMap)
|
|
950
|
+
return;
|
|
951
|
+
for (var _i = 0, _a = propertyMap.keys(); _i < _a.length; _i++) {
|
|
952
|
+
var property_3 = _a[_i];
|
|
953
|
+
var child = node[property_3];
|
|
954
|
+
if (!child)
|
|
955
|
+
continue;
|
|
956
|
+
else if (Array.isArray(child))
|
|
957
|
+
child.forEach(function (node) { return traverse(node); });
|
|
958
|
+
else
|
|
959
|
+
traverse(child);
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
traverse(this);
|
|
963
|
+
};
|
|
964
|
+
/**
|
|
965
|
+
* 获取当前节点在nasl标注节点上的节点
|
|
966
|
+
*/
|
|
967
|
+
BaseNode.prototype.getCurrentAnnotatedJSON = function () {
|
|
968
|
+
return this.__TypeAnnotation;
|
|
969
|
+
};
|
|
970
|
+
/**
|
|
971
|
+
* 获取
|
|
972
|
+
* 当前this上下文 的Source 和 父级文件级别的节点
|
|
973
|
+
*/
|
|
974
|
+
BaseNode.prototype.getCurrentSource = function () {
|
|
975
|
+
var node = this;
|
|
976
|
+
var sourceMap = node.sourceMap;
|
|
977
|
+
var fileNode = node;
|
|
978
|
+
// 如果没有sourceMap,就继续向上找 ,或者到module结束
|
|
979
|
+
// 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
|
|
980
|
+
// 如果当前节点是view就不要向上查找了
|
|
981
|
+
while (!sourceMap
|
|
982
|
+
&& fileNode
|
|
983
|
+
&& !(fileNode.parentNode instanceof __1.App)) {
|
|
984
|
+
fileNode = fileNode.parentNode;
|
|
985
|
+
sourceMap = fileNode === null || fileNode === void 0 ? void 0 : fileNode.sourceMap;
|
|
986
|
+
}
|
|
987
|
+
var currentSource = sourceMap && sourceMap.get(node);
|
|
988
|
+
if (currentSource) {
|
|
989
|
+
return { currentSource: currentSource, fileNode: fileNode };
|
|
990
|
+
}
|
|
991
|
+
return { fileNode: fileNode };
|
|
992
|
+
};
|
|
993
|
+
/**
|
|
994
|
+
* 获取
|
|
995
|
+
* 当前this上下文 的Source 和 父级文件级别的节点
|
|
996
|
+
*/
|
|
997
|
+
BaseNode.prototype.getFileConceptNode = function (concept) {
|
|
998
|
+
var node = this;
|
|
999
|
+
var sourceMap = node.sourceMap;
|
|
1000
|
+
var fileNode = node;
|
|
1001
|
+
// 如果没有sourceMap,就继续向上找 ,或者到module结束
|
|
1002
|
+
// 如果 节点找到 app 或者module 停止 或者entity找到DataSource为止
|
|
1003
|
+
// 如果当前节点是view就不要向上查找了
|
|
1004
|
+
while (!sourceMap
|
|
1005
|
+
&& fileNode
|
|
1006
|
+
&& !(fileNode.parentNode instanceof __1.App)) {
|
|
1007
|
+
fileNode = fileNode.parentNode;
|
|
1008
|
+
sourceMap = fileNode === null || fileNode === void 0 ? void 0 : fileNode.sourceMap;
|
|
1009
|
+
}
|
|
1010
|
+
var arr = [];
|
|
1011
|
+
sourceMap && sourceMap.forEach(function (value, key) {
|
|
1012
|
+
if (key.concept === concept)
|
|
1013
|
+
arr.push({ key: key, value: value });
|
|
1014
|
+
});
|
|
1015
|
+
return arr;
|
|
1016
|
+
};
|
|
1017
|
+
__decorate([
|
|
1018
|
+
decorators_1.excludedInJSON()
|
|
1019
|
+
], BaseNode.prototype, "_mutable");
|
|
1020
|
+
__decorate([
|
|
1021
|
+
decorators_1.property()
|
|
1022
|
+
], BaseNode.prototype, "concept");
|
|
1023
|
+
__decorate([
|
|
1024
|
+
decorators_1.property()
|
|
1025
|
+
], BaseNode.prototype, "changedTime");
|
|
1026
|
+
__decorate([
|
|
1027
|
+
decorators_1.property()
|
|
1028
|
+
], BaseNode.prototype, "branchName");
|
|
1029
|
+
__decorate([
|
|
1030
|
+
decorators_1.property()
|
|
1031
|
+
], BaseNode.prototype, "workingCopy");
|
|
1032
|
+
__decorate([
|
|
1033
|
+
decorators_1.property()
|
|
1034
|
+
], BaseNode.prototype, "branch");
|
|
1035
|
+
__decorate([
|
|
1036
|
+
decorators_1.circular()
|
|
1037
|
+
], BaseNode.prototype, "parentNode");
|
|
1038
|
+
__decorate([
|
|
1039
|
+
decorators_1.excludedInJSON()
|
|
1040
|
+
], BaseNode.prototype, "editable");
|
|
1041
|
+
__decorate([
|
|
1042
|
+
decorators_1.excludedInJSON()
|
|
1043
|
+
], BaseNode.prototype, "removable");
|
|
1044
|
+
__decorate([
|
|
1045
|
+
decorators_1.excludedInJSON()
|
|
1046
|
+
], BaseNode.prototype, "editing");
|
|
1047
|
+
__decorate([
|
|
1048
|
+
decorators_1.excludedInJSON()
|
|
1049
|
+
], BaseNode.prototype, "loading");
|
|
1050
|
+
__decorate([
|
|
1051
|
+
decorators_1.excludedInJSON()
|
|
1052
|
+
], BaseNode.prototype, "expanded");
|
|
1053
|
+
__decorate([
|
|
1054
|
+
decorators_1.excludedInJSON()
|
|
1055
|
+
], BaseNode.prototype, "hidden");
|
|
1056
|
+
__decorate([
|
|
1057
|
+
decorators_1.excludedInJSON()
|
|
1058
|
+
], BaseNode.prototype, "pageTreeNodeHidden");
|
|
1059
|
+
__decorate([
|
|
1060
|
+
decorators_1.excludedInJSON()
|
|
1061
|
+
], BaseNode.prototype, "logicTreeNodeHidden");
|
|
1062
|
+
__decorate([
|
|
1063
|
+
decorators_1.excludedInJSON()
|
|
1064
|
+
], BaseNode.prototype, "dataTreeNodeHidden");
|
|
1065
|
+
__decorate([
|
|
1066
|
+
decorators_1.excludedInJSON()
|
|
1067
|
+
], BaseNode.prototype, "logicTreeNodeExpanded");
|
|
1068
|
+
__decorate([
|
|
1069
|
+
decorators_1.excludedInJSON()
|
|
1070
|
+
], BaseNode.prototype, "sourceMap");
|
|
1071
|
+
__decorate([
|
|
1072
|
+
decorators_1.excludedInJSON()
|
|
1073
|
+
], BaseNode.prototype, "isLeaf");
|
|
1074
|
+
__decorate([
|
|
1075
|
+
decorators_1.excludedInJSON()
|
|
1076
|
+
], BaseNode.prototype, "storageJSON");
|
|
1077
|
+
__decorate([
|
|
1078
|
+
decorators_1.property()
|
|
1079
|
+
], BaseNode.prototype, "name");
|
|
1080
|
+
__decorate([
|
|
1081
|
+
decorators_1.excludedInJSON()
|
|
1082
|
+
], BaseNode.prototype, "__TypeAnnotation");
|
|
1083
|
+
__decorate([
|
|
1084
|
+
decorators_1.action('查找引用')
|
|
1085
|
+
], BaseNode.prototype, "findUsage");
|
|
1086
|
+
__decorate([
|
|
1087
|
+
decorators_1.action('重命名')
|
|
1088
|
+
], BaseNode.prototype, "changeName");
|
|
1089
|
+
__decorate([
|
|
1090
|
+
decorators_1.action('准备删除')
|
|
1091
|
+
], BaseNode.prototype, "prepareDelete");
|
|
1092
|
+
__decorate([
|
|
1093
|
+
decorators_1.action('添加参数准备')
|
|
1094
|
+
], BaseNode.prototype, "addParamsPrepare");
|
|
1095
|
+
__decorate([
|
|
1096
|
+
decorators_1.action('获取当前节点类型')
|
|
1097
|
+
], BaseNode.prototype, "getCurrentTypeAnnotation");
|
|
1098
|
+
return BaseNode;
|
|
1099
|
+
}(EventEmitter_1.EventEmitter));
|
|
1100
|
+
exports.BaseNode = BaseNode;
|
|
1101
|
+
exports["default"] = BaseNode;
|