vsn 0.1.144 → 0.1.146
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/demo/memory-leak-test.html +27 -5
- package/demo/resources/xhr-memory-leak-test.html +10 -0
- package/demo/vsn.js +2 -2
- package/dist/AST/FunctionCallNode.d.ts +1 -0
- package/dist/AST/FunctionCallNode.js +101 -131
- package/dist/AST/FunctionCallNode.js.map +1 -1
- package/dist/AST.d.ts +1 -1
- package/dist/AST.js +89 -45
- package/dist/AST.js.map +1 -1
- package/dist/Scope.js +1 -0
- package/dist/Scope.js.map +1 -1
- package/dist/attributes/RootAttribute.js +28 -14
- package/dist/attributes/RootAttribute.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vsn.js +4 -2
- package/dist/vsn.js.map +1 -1
- package/package.json +1 -1
- package/src/AST/FunctionCallNode.ts +43 -40
- package/src/AST.ts +17 -9
- package/src/Scope.ts +1 -0
- package/src/attributes/RootAttribute.ts +1 -1
- package/src/version.ts +1 -1
- package/src/vsn.ts +2 -1
|
@@ -9,5 +9,6 @@ export declare class FunctionCallNode<T = any> extends Node implements TreeNode
|
|
|
9
9
|
readonly args: FunctionArgumentNode<any[]>;
|
|
10
10
|
constructor(fnc: TreeNode<(...args: any[]) => any>, args: FunctionArgumentNode<any[]>);
|
|
11
11
|
protected _getChildNodes(): Node[];
|
|
12
|
+
protected callFunction(func: any, functionScope: any, dom: any, tag: any, ...values: any[]): Promise<[any, boolean]>;
|
|
12
13
|
protected _evaluate(scope: Scope, dom: DOM, tag?: Tag): Promise<any>;
|
|
13
14
|
}
|
|
@@ -50,17 +50,6 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
50
50
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
51
|
}
|
|
52
52
|
};
|
|
53
|
-
var __values = (this && this.__values) || function(o) {
|
|
54
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
55
|
-
if (m) return m.call(o);
|
|
56
|
-
if (o && typeof o.length === "number") return {
|
|
57
|
-
next: function () {
|
|
58
|
-
if (o && i >= o.length) o = void 0;
|
|
59
|
-
return { value: o && o[i++], done: !o };
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
63
|
-
};
|
|
64
53
|
var __read = (this && this.__read) || function (o, n) {
|
|
65
54
|
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
66
55
|
if (!m) return o;
|
|
@@ -82,15 +71,24 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
|
82
71
|
to[j] = from[i];
|
|
83
72
|
return to;
|
|
84
73
|
};
|
|
74
|
+
var __values = (this && this.__values) || function(o) {
|
|
75
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
76
|
+
if (m) return m.call(o);
|
|
77
|
+
if (o && typeof o.length === "number") return {
|
|
78
|
+
next: function () {
|
|
79
|
+
if (o && i >= o.length) o = void 0;
|
|
80
|
+
return { value: o && o[i++], done: !o };
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
84
|
+
};
|
|
85
85
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
86
86
|
exports.FunctionCallNode = void 0;
|
|
87
87
|
var Tag_1 = require("../Tag");
|
|
88
88
|
var Node_1 = require("./Node");
|
|
89
89
|
var ScopeMemberNode_1 = require("./ScopeMemberNode");
|
|
90
90
|
var FunctionNode_1 = require("./FunctionNode");
|
|
91
|
-
var Registry_1 = require("../Registry");
|
|
92
91
|
var ElementQueryNode_1 = require("./ElementQueryNode");
|
|
93
|
-
var ClassNode_1 = require("./ClassNode");
|
|
94
92
|
var FunctionCallNode = /** @class */ (function (_super) {
|
|
95
93
|
__extends(FunctionCallNode, _super);
|
|
96
94
|
function FunctionCallNode(fnc, args) {
|
|
@@ -105,162 +103,134 @@ var FunctionCallNode = /** @class */ (function (_super) {
|
|
|
105
103
|
this.args
|
|
106
104
|
];
|
|
107
105
|
};
|
|
106
|
+
FunctionCallNode.prototype.callFunction = function (func, functionScope, dom, tag) {
|
|
107
|
+
var values = [];
|
|
108
|
+
for (var _i = 4; _i < arguments.length; _i++) {
|
|
109
|
+
values[_i - 4] = arguments[_i];
|
|
110
|
+
}
|
|
111
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
112
|
+
var r;
|
|
113
|
+
return __generator(this, function (_a) {
|
|
114
|
+
switch (_a.label) {
|
|
115
|
+
case 0:
|
|
116
|
+
if (!(func instanceof FunctionNode_1.FunctionNode)) return [3 /*break*/, 4];
|
|
117
|
+
return [4 /*yield*/, func.evaluate(functionScope, dom, tag)];
|
|
118
|
+
case 1: return [4 /*yield*/, (_a.sent()).apply(void 0, __spreadArray([], __read(values)))];
|
|
119
|
+
case 2:
|
|
120
|
+
r = _a.sent();
|
|
121
|
+
return [4 /*yield*/, func.collectGarbage()];
|
|
122
|
+
case 3:
|
|
123
|
+
_a.sent();
|
|
124
|
+
return [2 /*return*/, [r, true]];
|
|
125
|
+
case 4:
|
|
126
|
+
if (typeof func === 'function') {
|
|
127
|
+
return [2 /*return*/, [func.call.apply(func, __spreadArray([functionScope.wrapped || functionScope], __read(values))), true]];
|
|
128
|
+
}
|
|
129
|
+
_a.label = 5;
|
|
130
|
+
case 5: return [2 /*return*/, [null, false]];
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
};
|
|
108
135
|
FunctionCallNode.prototype._evaluate = function (scope, dom, tag) {
|
|
109
136
|
if (tag === void 0) { tag = null; }
|
|
110
137
|
return __awaiter(this, void 0, void 0, function () {
|
|
111
|
-
var tags, functionScope,
|
|
112
|
-
var
|
|
113
|
-
return __generator(this, function (
|
|
114
|
-
switch (
|
|
138
|
+
var tags, functionScope, _tags, values, functionName, returnValues, calls, func, _functionScope, tags_1, tags_1_1, _tag, _a, result, success, e_1_1;
|
|
139
|
+
var e_1, _b;
|
|
140
|
+
return __generator(this, function (_c) {
|
|
141
|
+
switch (_c.label) {
|
|
115
142
|
case 0:
|
|
116
143
|
tags = [];
|
|
117
144
|
functionScope = scope;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (!(this.fnc instanceof ScopeMemberNode_1.ScopeMemberNode)) return [3 /*break*/, 5];
|
|
121
|
-
instanceOfScopeMemberNode = true;
|
|
145
|
+
if (!(this.fnc instanceof ScopeMemberNode_1.ScopeMemberNode)) return [3 /*break*/, 4];
|
|
146
|
+
if (!(this.fnc.scope instanceof ElementQueryNode_1.ElementQueryNode)) return [3 /*break*/, 2];
|
|
122
147
|
return [4 /*yield*/, this.fnc.scope.evaluate(scope, dom, tag)];
|
|
123
148
|
case 1:
|
|
124
|
-
|
|
125
|
-
return [4 /*yield*/, this.fnc.name.evaluate(scope, dom, tag)];
|
|
126
|
-
case 2:
|
|
127
|
-
functionName = _h.sent();
|
|
128
|
-
if (!(this.fnc.scope instanceof ElementQueryNode_1.ElementQueryNode)) return [3 /*break*/, 4];
|
|
129
|
-
return [4 /*yield*/, this.fnc.scope.evaluate(scope, dom, tag)];
|
|
130
|
-
case 3:
|
|
131
|
-
_tags = _h.sent();
|
|
149
|
+
_tags = _c.sent();
|
|
132
150
|
if (_tags instanceof Array) {
|
|
133
151
|
tags = _tags;
|
|
134
152
|
}
|
|
135
153
|
else if (_tags instanceof Tag_1.Tag) {
|
|
136
154
|
tags = [_tags];
|
|
155
|
+
functionScope = _tags.scope;
|
|
137
156
|
}
|
|
138
157
|
else {
|
|
139
158
|
throw new Error('Invalid element query result');
|
|
140
159
|
}
|
|
141
|
-
return [3 /*break*/,
|
|
160
|
+
return [3 /*break*/, 4];
|
|
161
|
+
case 2: return [4 /*yield*/, this.fnc.scope.evaluate(scope, dom, tag)];
|
|
162
|
+
case 3:
|
|
163
|
+
functionScope = _c.sent();
|
|
164
|
+
_c.label = 4;
|
|
142
165
|
case 4:
|
|
143
|
-
tags
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
case
|
|
147
|
-
values =
|
|
148
|
-
return [4 /*yield*/, this.fnc.evaluate(scope, dom, tag)];
|
|
149
|
-
case 7:
|
|
150
|
-
func = _h.sent();
|
|
151
|
-
if (!(!func || func instanceof Array)) return [3 /*break*/, 31];
|
|
166
|
+
if (tags.length === 0)
|
|
167
|
+
tags.push(tag);
|
|
168
|
+
return [4 /*yield*/, this.args.evaluate(scope, dom, tag)];
|
|
169
|
+
case 5:
|
|
170
|
+
values = _c.sent();
|
|
152
171
|
return [4 /*yield*/, this.fnc.name.evaluate(scope, dom, tag)];
|
|
153
|
-
case
|
|
154
|
-
|
|
172
|
+
case 6:
|
|
173
|
+
functionName = _c.sent();
|
|
155
174
|
returnValues = [];
|
|
156
|
-
toCleanup = [];
|
|
157
175
|
calls = 0;
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
176
|
+
_functionScope = functionScope;
|
|
177
|
+
_c.label = 7;
|
|
178
|
+
case 7:
|
|
179
|
+
_c.trys.push([7, 15, 16, 17]);
|
|
161
180
|
tags_1 = __values(tags), tags_1_1 = tags_1.next();
|
|
162
|
-
|
|
163
|
-
case
|
|
164
|
-
if (!!tags_1_1.done) return [3 /*break*/,
|
|
181
|
+
_c.label = 8;
|
|
182
|
+
case 8:
|
|
183
|
+
if (!!tags_1_1.done) return [3 /*break*/, 14];
|
|
165
184
|
_tag = tags_1_1.value;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
185
|
+
if (_tag === null) {
|
|
186
|
+
_functionScope = functionScope;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
_functionScope = _tag.scope;
|
|
190
|
+
}
|
|
191
|
+
if (!_functionScope.has(functionName)) return [3 /*break*/, 9];
|
|
192
|
+
func = _functionScope.get(functionName);
|
|
193
|
+
return [3 /*break*/, 11];
|
|
194
|
+
case 9: return [4 /*yield*/, this.fnc.evaluate(scope, dom, _tag)];
|
|
195
|
+
case 10:
|
|
196
|
+
func = _c.sent();
|
|
197
|
+
_c.label = 11;
|
|
198
|
+
case 11: return [4 /*yield*/, this.callFunction.apply(this, __spreadArray([func, _functionScope, dom, _tag], __read(values)))];
|
|
172
199
|
case 12:
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
calls++;
|
|
187
|
-
_h.label = 15;
|
|
200
|
+
_a = __read.apply(void 0, [_c.sent(), 2]), result = _a[0], success = _a[1];
|
|
201
|
+
if (success) {
|
|
202
|
+
returnValues.push(result);
|
|
203
|
+
calls++;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
console.warn("Function " + functionName + " was not found in current scope.");
|
|
207
|
+
}
|
|
208
|
+
_c.label = 13;
|
|
209
|
+
case 13:
|
|
210
|
+
tags_1_1 = tags_1.next();
|
|
211
|
+
return [3 /*break*/, 8];
|
|
212
|
+
case 14: return [3 /*break*/, 17];
|
|
188
213
|
case 15:
|
|
189
|
-
|
|
190
|
-
return [3 /*break*/, 12];
|
|
191
|
-
case 16: return [3 /*break*/, 19];
|
|
192
|
-
case 17:
|
|
193
|
-
e_1_1 = _h.sent();
|
|
214
|
+
e_1_1 = _c.sent();
|
|
194
215
|
e_1 = { error: e_1_1 };
|
|
195
|
-
return [3 /*break*/,
|
|
196
|
-
case
|
|
216
|
+
return [3 /*break*/, 17];
|
|
217
|
+
case 16:
|
|
197
218
|
try {
|
|
198
|
-
if (
|
|
219
|
+
if (tags_1_1 && !tags_1_1.done && (_b = tags_1.return)) _b.call(tags_1);
|
|
199
220
|
}
|
|
200
221
|
finally { if (e_1) throw e_1.error; }
|
|
201
222
|
return [7 /*endfinally*/];
|
|
202
|
-
case
|
|
203
|
-
tags_1_1 = tags_1.next();
|
|
204
|
-
return [3 /*break*/, 10];
|
|
205
|
-
case 20: return [3 /*break*/, 23];
|
|
206
|
-
case 21:
|
|
207
|
-
e_2_1 = _h.sent();
|
|
208
|
-
e_2 = { error: e_2_1 };
|
|
209
|
-
return [3 /*break*/, 23];
|
|
210
|
-
case 22:
|
|
211
|
-
try {
|
|
212
|
-
if (tags_1_1 && !tags_1_1.done && (_e = tags_1.return)) _e.call(tags_1);
|
|
213
|
-
}
|
|
214
|
-
finally { if (e_2) throw e_2.error; }
|
|
215
|
-
return [7 /*endfinally*/];
|
|
216
|
-
case 23:
|
|
217
|
-
_h.trys.push([23, 28, 29, 30]);
|
|
218
|
-
toCleanup_1 = __values(toCleanup), toCleanup_1_1 = toCleanup_1.next();
|
|
219
|
-
_h.label = 24;
|
|
220
|
-
case 24:
|
|
221
|
-
if (!!toCleanup_1_1.done) return [3 /*break*/, 27];
|
|
222
|
-
fnc = toCleanup_1_1.value;
|
|
223
|
-
return [4 /*yield*/, fnc.collectGarbage()];
|
|
224
|
-
case 25:
|
|
225
|
-
_h.sent();
|
|
226
|
-
_h.label = 26;
|
|
227
|
-
case 26:
|
|
228
|
-
toCleanup_1_1 = toCleanup_1.next();
|
|
229
|
-
return [3 /*break*/, 24];
|
|
230
|
-
case 27: return [3 /*break*/, 30];
|
|
231
|
-
case 28:
|
|
232
|
-
e_3_1 = _h.sent();
|
|
233
|
-
e_3 = { error: e_3_1 };
|
|
234
|
-
return [3 /*break*/, 30];
|
|
235
|
-
case 29:
|
|
236
|
-
try {
|
|
237
|
-
if (toCleanup_1_1 && !toCleanup_1_1.done && (_g = toCleanup_1.return)) _g.call(toCleanup_1);
|
|
238
|
-
}
|
|
239
|
-
finally { if (e_3) throw e_3.error; }
|
|
240
|
-
return [7 /*endfinally*/];
|
|
241
|
-
case 30:
|
|
223
|
+
case 17:
|
|
242
224
|
if (calls === 1) {
|
|
243
225
|
return [2 /*return*/, returnValues[0]];
|
|
244
226
|
}
|
|
245
227
|
else if (calls === 0) {
|
|
246
|
-
throw new Error("Function " +
|
|
228
|
+
throw new Error("Function " + functionName + " not found");
|
|
247
229
|
}
|
|
248
230
|
else {
|
|
249
231
|
return [2 /*return*/, returnValues];
|
|
250
232
|
}
|
|
251
|
-
return [
|
|
252
|
-
case 31:
|
|
253
|
-
if (!(func instanceof FunctionNode_1.FunctionNode)) return [3 /*break*/, 35];
|
|
254
|
-
return [4 /*yield*/, func.evaluate(functionScope, dom, tag)];
|
|
255
|
-
case 32: return [4 /*yield*/, (_h.sent()).apply(void 0, __spreadArray([], __read(values)))];
|
|
256
|
-
case 33:
|
|
257
|
-
r = _h.sent();
|
|
258
|
-
return [4 /*yield*/, func.collectGarbage()];
|
|
259
|
-
case 34:
|
|
260
|
-
_h.sent();
|
|
261
|
-
return [2 /*return*/, r];
|
|
262
|
-
case 35: return [2 /*return*/, func.call.apply(func, __spreadArray([functionScope.wrapped || functionScope], __read(values)))];
|
|
263
|
-
case 36: return [2 /*return*/];
|
|
233
|
+
return [2 /*return*/];
|
|
264
234
|
}
|
|
265
235
|
});
|
|
266
236
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FunctionCallNode.js","sourceRoot":"","sources":["../../src/AST/FunctionCallNode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,8BAA2B;AAE3B,+BAA4B;AAE5B,qDAAkD;AAClD,+CAA4C;AAC5C,
|
|
1
|
+
{"version":3,"file":"FunctionCallNode.js","sourceRoot":"","sources":["../../src/AST/FunctionCallNode.ts"],"names":[],"mappings":"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"}
|
package/dist/AST.d.ts
CHANGED
|
@@ -146,7 +146,7 @@ export declare class Tree {
|
|
|
146
146
|
evaluate(scope: Scope, dom: DOM, tag?: Tag): Promise<any>;
|
|
147
147
|
prepare(scope: Scope, dom: DOM, tag?: Tag): Promise<void>;
|
|
148
148
|
bindToScopeChanges(scope: any, fnc: any, dom: DOM, tag?: Tag): Promise<void>;
|
|
149
|
-
static reprepareExecutingTrees(): void
|
|
149
|
+
static reprepareExecutingTrees(): Promise<void>;
|
|
150
150
|
static tokenize(code: string): Token[];
|
|
151
151
|
static stripWhiteSpace(tokens: Token[]): Token[];
|
|
152
152
|
static processTokens(tokens: Token[], _node?: Node, _lastBlock?: Node): BlockNode;
|
package/dist/AST.js
CHANGED
|
@@ -71,6 +71,7 @@ var _a, _b, _c;
|
|
|
71
71
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
72
|
exports.Tree = exports.TreeCache = exports.AttributableNodes = exports.tokenIsBlockCloser = exports.tokenIsBlockOpener = exports.getTokenBlockOpenerConfig = exports.BlockCloseToTypeMap = exports.BlockOpenToTypeMap = exports.BlockTypeConfigurations = exports.TokenType = exports.BlockType = void 0;
|
|
73
73
|
var DOM_1 = require("./DOM");
|
|
74
|
+
var Tag_1 = require("./Tag");
|
|
74
75
|
var RootScopeMemberNode_1 = require("./AST/RootScopeMemberNode");
|
|
75
76
|
var ScopeMemberNode_1 = require("./AST/ScopeMemberNode");
|
|
76
77
|
var ElementAttributeNode_1 = require("./AST/ElementAttributeNode");
|
|
@@ -606,68 +607,111 @@ var Tree = /** @class */ (function () {
|
|
|
606
607
|
Tree.prototype.bindToScopeChanges = function (scope, fnc, dom, tag) {
|
|
607
608
|
if (tag === void 0) { tag = null; }
|
|
608
609
|
return __awaiter(this, void 0, void 0, function () {
|
|
609
|
-
var _a, _b, node, _scope, name_1, e_2_1;
|
|
610
|
-
var e_2, _c;
|
|
611
|
-
return __generator(this, function (
|
|
612
|
-
switch (
|
|
610
|
+
var _a, _b, node, _scope, name_1, ref, ref_1, ref_1_1, tag_1, e_2_1;
|
|
611
|
+
var e_2, _c, e_3, _d;
|
|
612
|
+
return __generator(this, function (_e) {
|
|
613
|
+
switch (_e.label) {
|
|
613
614
|
case 0:
|
|
614
|
-
|
|
615
|
+
_e.trys.push([0, 8, 9, 10]);
|
|
615
616
|
_a = __values(this._root.findChildrenByTypes([RootScopeMemberNode_1.RootScopeMemberNode, ScopeMemberNode_1.ScopeMemberNode, ElementAttributeNode_1.ElementAttributeNode], 'ScopeMemberNodes')), _b = _a.next();
|
|
616
|
-
|
|
617
|
+
_e.label = 1;
|
|
617
618
|
case 1:
|
|
618
|
-
if (!!_b.done) return [3 /*break*/,
|
|
619
|
+
if (!!_b.done) return [3 /*break*/, 7];
|
|
619
620
|
node = _b.value;
|
|
620
621
|
_scope = scope;
|
|
621
|
-
|
|
622
|
-
return [4 /*yield*/, node.scope.evaluate(scope, dom)];
|
|
622
|
+
return [4 /*yield*/, node.name.evaluate(scope, dom, tag)];
|
|
623
623
|
case 2:
|
|
624
|
-
|
|
625
|
-
return [3 /*break*/,
|
|
624
|
+
name_1 = _e.sent();
|
|
625
|
+
if (!(node instanceof ScopeMemberNode_1.ScopeMemberNode)) return [3 /*break*/, 4];
|
|
626
|
+
return [4 /*yield*/, node.scope.evaluate(scope, dom)];
|
|
626
627
|
case 3:
|
|
627
|
-
|
|
628
|
-
|
|
628
|
+
_scope = _e.sent();
|
|
629
|
+
_scope.on("change:" + name_1, fnc);
|
|
630
|
+
return [3 /*break*/, 6];
|
|
629
631
|
case 4:
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
case 5:
|
|
632
|
+
if (!(node instanceof ElementAttributeNode_1.ElementAttributeNode && node.elementRef)) return [3 /*break*/, 6];
|
|
633
|
+
return [4 /*yield*/, node.elementRef.evaluate(scope, dom, tag)];
|
|
634
|
+
case 5:
|
|
635
|
+
ref = _e.sent();
|
|
636
|
+
if (ref instanceof Tag_1.Tag) {
|
|
637
|
+
ref.scope.on("change:" + name_1, fnc);
|
|
638
|
+
}
|
|
639
|
+
else if (ref instanceof Array) {
|
|
640
|
+
try {
|
|
641
|
+
for (ref_1 = (e_3 = void 0, __values(ref)), ref_1_1 = ref_1.next(); !ref_1_1.done; ref_1_1 = ref_1.next()) {
|
|
642
|
+
tag_1 = ref_1_1.value;
|
|
643
|
+
tag_1.scope.on("change:" + name_1, fnc);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
647
|
+
finally {
|
|
648
|
+
try {
|
|
649
|
+
if (ref_1_1 && !ref_1_1.done && (_d = ref_1.return)) _d.call(ref_1);
|
|
650
|
+
}
|
|
651
|
+
finally { if (e_3) throw e_3.error; }
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
console.warn("Cannot bind to changes for " + name_1 + ".");
|
|
656
|
+
}
|
|
657
|
+
_e.label = 6;
|
|
633
658
|
case 6:
|
|
634
|
-
name_1 = _d.sent();
|
|
635
|
-
_scope.on("change:" + name_1, fnc);
|
|
636
|
-
_d.label = 7;
|
|
637
|
-
case 7:
|
|
638
659
|
_b = _a.next();
|
|
639
660
|
return [3 /*break*/, 1];
|
|
640
|
-
case
|
|
641
|
-
case
|
|
642
|
-
e_2_1 =
|
|
661
|
+
case 7: return [3 /*break*/, 10];
|
|
662
|
+
case 8:
|
|
663
|
+
e_2_1 = _e.sent();
|
|
643
664
|
e_2 = { error: e_2_1 };
|
|
644
|
-
return [3 /*break*/,
|
|
645
|
-
case
|
|
665
|
+
return [3 /*break*/, 10];
|
|
666
|
+
case 9:
|
|
646
667
|
try {
|
|
647
668
|
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
648
669
|
}
|
|
649
670
|
finally { if (e_2) throw e_2.error; }
|
|
650
671
|
return [7 /*endfinally*/];
|
|
651
|
-
case
|
|
672
|
+
case 10: return [2 /*return*/];
|
|
652
673
|
}
|
|
653
674
|
});
|
|
654
675
|
});
|
|
655
676
|
};
|
|
656
677
|
Tree.reprepareExecutingTrees = function () {
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
678
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
679
|
+
var _a, _b, context, e_4_1;
|
|
680
|
+
var e_4, _c;
|
|
681
|
+
return __generator(this, function (_d) {
|
|
682
|
+
switch (_d.label) {
|
|
683
|
+
case 0:
|
|
684
|
+
_d.trys.push([0, 5, 6, 7]);
|
|
685
|
+
_a = __values(this.executing), _b = _a.next();
|
|
686
|
+
_d.label = 1;
|
|
662
687
|
case 1:
|
|
663
|
-
|
|
664
|
-
|
|
688
|
+
if (!!_b.done) return [3 /*break*/, 4];
|
|
689
|
+
context = _b.value;
|
|
690
|
+
return [4 /*yield*/, context.tree.prepare(context.scope, context.dom, context.tag)];
|
|
691
|
+
case 2:
|
|
692
|
+
_d.sent();
|
|
693
|
+
_d.label = 3;
|
|
694
|
+
case 3:
|
|
695
|
+
_b = _a.next();
|
|
696
|
+
return [3 /*break*/, 1];
|
|
697
|
+
case 4: return [3 /*break*/, 7];
|
|
698
|
+
case 5:
|
|
699
|
+
e_4_1 = _d.sent();
|
|
700
|
+
e_4 = { error: e_4_1 };
|
|
701
|
+
return [3 /*break*/, 7];
|
|
702
|
+
case 6:
|
|
703
|
+
try {
|
|
704
|
+
if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
|
|
705
|
+
}
|
|
706
|
+
finally { if (e_4) throw e_4.error; }
|
|
707
|
+
return [7 /*endfinally*/];
|
|
708
|
+
case 7: return [2 /*return*/];
|
|
665
709
|
}
|
|
666
710
|
});
|
|
667
|
-
});
|
|
711
|
+
});
|
|
668
712
|
};
|
|
669
713
|
Tree.tokenize = function (code) {
|
|
670
|
-
var
|
|
714
|
+
var e_5, _a;
|
|
671
715
|
var tokens = [];
|
|
672
716
|
if (!code || code.length === 0)
|
|
673
717
|
return tokens;
|
|
@@ -675,7 +719,7 @@ var Tree = /** @class */ (function () {
|
|
|
675
719
|
do {
|
|
676
720
|
foundToken = false;
|
|
677
721
|
try {
|
|
678
|
-
for (var TOKEN_PATTERNS_1 = (
|
|
722
|
+
for (var TOKEN_PATTERNS_1 = (e_5 = void 0, __values(TOKEN_PATTERNS)), TOKEN_PATTERNS_1_1 = TOKEN_PATTERNS_1.next(); !TOKEN_PATTERNS_1_1.done; TOKEN_PATTERNS_1_1 = TOKEN_PATTERNS_1.next()) {
|
|
679
723
|
var tp = TOKEN_PATTERNS_1_1.value;
|
|
680
724
|
var match = tp.pattern.exec(code);
|
|
681
725
|
if (match) {
|
|
@@ -691,12 +735,12 @@ var Tree = /** @class */ (function () {
|
|
|
691
735
|
}
|
|
692
736
|
}
|
|
693
737
|
}
|
|
694
|
-
catch (
|
|
738
|
+
catch (e_5_1) { e_5 = { error: e_5_1 }; }
|
|
695
739
|
finally {
|
|
696
740
|
try {
|
|
697
741
|
if (TOKEN_PATTERNS_1_1 && !TOKEN_PATTERNS_1_1.done && (_a = TOKEN_PATTERNS_1.return)) _a.call(TOKEN_PATTERNS_1);
|
|
698
742
|
}
|
|
699
|
-
finally { if (
|
|
743
|
+
finally { if (e_5) throw e_5.error; }
|
|
700
744
|
}
|
|
701
745
|
} while (code.length > 0 && foundToken);
|
|
702
746
|
return tokens;
|
|
@@ -711,7 +755,7 @@ var Tree = /** @class */ (function () {
|
|
|
711
755
|
return tokens;
|
|
712
756
|
};
|
|
713
757
|
Tree.processTokens = function (tokens, _node, _lastBlock) {
|
|
714
|
-
var
|
|
758
|
+
var e_6, _a;
|
|
715
759
|
if (_node === void 0) { _node = null; }
|
|
716
760
|
if (_lastBlock === void 0) { _lastBlock = null; }
|
|
717
761
|
var blockNodes = [];
|
|
@@ -832,17 +876,17 @@ var Tree = /** @class */ (function () {
|
|
|
832
876
|
var funcArgs = Tree.getBlockTokens(tokens);
|
|
833
877
|
var nodes = [];
|
|
834
878
|
try {
|
|
835
|
-
for (var funcArgs_1 = (
|
|
879
|
+
for (var funcArgs_1 = (e_6 = void 0, __values(funcArgs)), funcArgs_1_1 = funcArgs_1.next(); !funcArgs_1_1.done; funcArgs_1_1 = funcArgs_1.next()) {
|
|
836
880
|
var arg = funcArgs_1_1.value;
|
|
837
881
|
nodes.push(Tree.processTokens(arg));
|
|
838
882
|
}
|
|
839
883
|
}
|
|
840
|
-
catch (
|
|
884
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
841
885
|
finally {
|
|
842
886
|
try {
|
|
843
887
|
if (funcArgs_1_1 && !funcArgs_1_1.done && (_a = funcArgs_1.return)) _a.call(funcArgs_1);
|
|
844
888
|
}
|
|
845
|
-
finally { if (
|
|
889
|
+
finally { if (e_6) throw e_6.error; }
|
|
846
890
|
}
|
|
847
891
|
if (node) {
|
|
848
892
|
node = new FunctionCallNode_1.FunctionCallNode(node, // Previous node should be a NAME
|
|
@@ -1068,7 +1112,7 @@ var Tree = /** @class */ (function () {
|
|
|
1068
1112
|
return statementTokens;
|
|
1069
1113
|
};
|
|
1070
1114
|
Tree.consumeTypes = function (tokens, types) {
|
|
1071
|
-
var
|
|
1115
|
+
var e_7, _a;
|
|
1072
1116
|
var matching = [];
|
|
1073
1117
|
try {
|
|
1074
1118
|
for (var tokens_1 = __values(tokens), tokens_1_1 = tokens_1.next(); !tokens_1_1.done; tokens_1_1 = tokens_1.next()) {
|
|
@@ -1081,12 +1125,12 @@ var Tree = /** @class */ (function () {
|
|
|
1081
1125
|
}
|
|
1082
1126
|
}
|
|
1083
1127
|
}
|
|
1084
|
-
catch (
|
|
1128
|
+
catch (e_7_1) { e_7 = { error: e_7_1 }; }
|
|
1085
1129
|
finally {
|
|
1086
1130
|
try {
|
|
1087
1131
|
if (tokens_1_1 && !tokens_1_1.done && (_a = tokens_1.return)) _a.call(tokens_1);
|
|
1088
1132
|
}
|
|
1089
|
-
finally { if (
|
|
1133
|
+
finally { if (e_7) throw e_7.error; }
|
|
1090
1134
|
}
|
|
1091
1135
|
tokens.splice(0, matching.length);
|
|
1092
1136
|
return matching;
|