@panpanzhao/component-ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/component-ui.common.js +5689 -0
- package/lib/components/crud.js +2276 -0
- package/lib/components/form-dialog.js +1198 -0
- package/lib/components/form-group.js +883 -0
- package/lib/components/form-input.js +1571 -0
- package/lib/components/form-item.js +284 -0
- package/lib/components/form-view-dialog.js +963 -0
- package/lib/components/form-view-group.js +687 -0
- package/lib/components/form-view.js +409 -0
- package/lib/components/form.js +495 -0
- package/lib/components/table-column.js +1053 -0
- package/lib/components/table-editable.js +954 -0
- package/lib/components/table-search.js +407 -0
- package/lib/components/table.js +659 -0
- package/lib/index.js +1 -0
- package/lib/styles/component-ui.css +1 -0
- package/lib/styles/fonts/element-icons.ttf +0 -0
- package/lib/styles/fonts/element-icons.woff +0 -0
- package/lib/styles/form.css +1 -0
- package/lib/styles/index.css +1 -0
- package/lib/styles/table-editable.css +1 -0
- package/lib/styles/table.css +1 -0
- package/lib/utils/formula/evalutor.js +1883 -0
- package/lib/utils/formula/filter.js +48 -0
- package/lib/utils/formula/function.js +12 -0
- package/lib/utils/formula/index.js +25 -0
- package/lib/utils/formula/lexer.js +590 -0
- package/lib/utils/formula/parser.js +734 -0
- package/package.json +67 -0
|
@@ -0,0 +1,734 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.parse = parse;
|
|
5
|
+
var _lexer = require("./lexer");
|
|
6
|
+
var argListStates = {
|
|
7
|
+
START: 0,
|
|
8
|
+
COMMA: 1,
|
|
9
|
+
SET: 2
|
|
10
|
+
};
|
|
11
|
+
var tempalteStates = {
|
|
12
|
+
START: 0,
|
|
13
|
+
SCRIPTING: 1
|
|
14
|
+
};
|
|
15
|
+
var objectStates = {
|
|
16
|
+
START: 0,
|
|
17
|
+
KEY: 1,
|
|
18
|
+
COLON: 2,
|
|
19
|
+
VALUE: 3,
|
|
20
|
+
COMMA: 4
|
|
21
|
+
};
|
|
22
|
+
function parse(input, options) {
|
|
23
|
+
var _a;
|
|
24
|
+
var token;
|
|
25
|
+
var lexer = (0, _lexer.lexer)(input, options);
|
|
26
|
+
var tokens = [];
|
|
27
|
+
var tokenChunk = [];
|
|
28
|
+
// 允许的变量名字空间
|
|
29
|
+
var variableNamespaces = (_a = options === null || options === void 0 ? void 0 : options.variableNamespaces) !== null && _a !== void 0 ? _a : ['window', 'cookie', 'ls', 'ss'];
|
|
30
|
+
if (!Array.isArray(variableNamespaces)) {
|
|
31
|
+
variableNamespaces = [];
|
|
32
|
+
}
|
|
33
|
+
function next() {
|
|
34
|
+
token = tokenChunk.length ? tokenChunk.shift() : lexer.next();
|
|
35
|
+
if (!token) {
|
|
36
|
+
throw new TypeError('next token is undefined');
|
|
37
|
+
}
|
|
38
|
+
tokens.push(token);
|
|
39
|
+
}
|
|
40
|
+
function back() {
|
|
41
|
+
tokenChunk.unshift(tokens.pop());
|
|
42
|
+
token = tokens[tokens.length - 1];
|
|
43
|
+
}
|
|
44
|
+
function matchPunctuator(operator) {
|
|
45
|
+
return token.type === _lexer.TokenName[10 /* Punctuator */] && (Array.isArray(operator) ? ~operator.indexOf(token.value) : token.value === operator);
|
|
46
|
+
}
|
|
47
|
+
function fatal() {
|
|
48
|
+
throw TypeError("Unexpected token " + token.value + " in " + token.start.line + ":" + token.start.column);
|
|
49
|
+
}
|
|
50
|
+
function assert(result) {
|
|
51
|
+
if (!result) {
|
|
52
|
+
fatal();
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
function expression() {
|
|
57
|
+
return assignmentExpression();
|
|
58
|
+
}
|
|
59
|
+
function skipWhiteSpaceChar() {
|
|
60
|
+
while (token.type === _lexer.TokenName[17 /* Char */] && /^\s+$/m.test(token.value)) {
|
|
61
|
+
next();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function collectFilterArg() {
|
|
65
|
+
var arg = [];
|
|
66
|
+
while (!matchPunctuator(':') && token.type !== _lexer.TokenName[16 /* OpenFilter */] && token.type !== _lexer.TokenName[5 /* CloseScript */]) {
|
|
67
|
+
var item = literal() || numberLiteral() || stringLiteral() || template() || arrayLiteral() || rawScript() || objectLiteral();
|
|
68
|
+
if (item) {
|
|
69
|
+
arg.push(item);
|
|
70
|
+
} else {
|
|
71
|
+
assert(~[_lexer.TokenName[7 /* Identifier */], _lexer.TokenName[10 /* Punctuator */], _lexer.TokenName[17 /* Char */]].indexOf(token.type));
|
|
72
|
+
// 其他的都当字符处理
|
|
73
|
+
if (arg.length && typeof arg[arg.length - 1] === 'string') {
|
|
74
|
+
arg[arg.length - 1] += token.raw || token.value;
|
|
75
|
+
} else {
|
|
76
|
+
arg.push(token.raw || token.value);
|
|
77
|
+
}
|
|
78
|
+
next();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (arg.length && typeof arg[arg.length - 1] === 'string') {
|
|
82
|
+
arg[arg.length - 1] = arg[arg.length - 1].replace(/\s+$/, '');
|
|
83
|
+
if (!arg[arg.length - 1]) {
|
|
84
|
+
arg.pop();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return arg;
|
|
88
|
+
}
|
|
89
|
+
function complexExpression() {
|
|
90
|
+
var ast = expression();
|
|
91
|
+
var filters = [];
|
|
92
|
+
while (token.type === _lexer.TokenName[16 /* OpenFilter */]) {
|
|
93
|
+
next();
|
|
94
|
+
skipWhiteSpaceChar();
|
|
95
|
+
var name = assert(identifier());
|
|
96
|
+
var fnName = name.name;
|
|
97
|
+
var args = [];
|
|
98
|
+
skipWhiteSpaceChar();
|
|
99
|
+
while (matchPunctuator(':')) {
|
|
100
|
+
next();
|
|
101
|
+
skipWhiteSpaceChar();
|
|
102
|
+
var argContents = collectFilterArg();
|
|
103
|
+
if (argContents.length === 1) {
|
|
104
|
+
argContents = argContents[0];
|
|
105
|
+
} else if (!argContents.length) {
|
|
106
|
+
argContents = '';
|
|
107
|
+
}
|
|
108
|
+
args.push(Array.isArray(argContents) ? {
|
|
109
|
+
type: 'mixed',
|
|
110
|
+
body: argContents
|
|
111
|
+
} : argContents);
|
|
112
|
+
}
|
|
113
|
+
filters.push({
|
|
114
|
+
name: fnName,
|
|
115
|
+
args: args
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (filters.length) {
|
|
119
|
+
ast = {
|
|
120
|
+
type: 'filter',
|
|
121
|
+
input: ast,
|
|
122
|
+
filters: filters,
|
|
123
|
+
start: ast.start,
|
|
124
|
+
end: filters[filters.length - 1].end
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return ast;
|
|
128
|
+
}
|
|
129
|
+
function arrowFunction() {
|
|
130
|
+
var ast = argList() || variable();
|
|
131
|
+
var args = [];
|
|
132
|
+
var start;
|
|
133
|
+
if ((ast === null || ast === void 0 ? void 0 : ast.type) === 'variable') {
|
|
134
|
+
args = [ast];
|
|
135
|
+
start = ast.start;
|
|
136
|
+
} else if ((ast === null || ast === void 0 ? void 0 : ast.type) === 'arg-list') {
|
|
137
|
+
start = ast.start;
|
|
138
|
+
args = ast.body;
|
|
139
|
+
}
|
|
140
|
+
if (Array.isArray(args) && matchPunctuator('=')) {
|
|
141
|
+
next();
|
|
142
|
+
if (matchPunctuator('>')) {
|
|
143
|
+
next();
|
|
144
|
+
var body = assert(expression());
|
|
145
|
+
return {
|
|
146
|
+
type: 'anonymous_function',
|
|
147
|
+
args: args,
|
|
148
|
+
return: body,
|
|
149
|
+
start: start,
|
|
150
|
+
end: body.end
|
|
151
|
+
};
|
|
152
|
+
} else {
|
|
153
|
+
back();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return ast;
|
|
157
|
+
}
|
|
158
|
+
function conditionalExpression() {
|
|
159
|
+
var ast = logicalOrExpression();
|
|
160
|
+
if (!ast) {
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
if (matchPunctuator('?')) {
|
|
164
|
+
next();
|
|
165
|
+
var consequent = assignmentExpression();
|
|
166
|
+
assert(consequent);
|
|
167
|
+
assert(matchPunctuator(':'));
|
|
168
|
+
next();
|
|
169
|
+
var alternate = assignmentExpression();
|
|
170
|
+
assert(alternate);
|
|
171
|
+
return {
|
|
172
|
+
type: 'conditional',
|
|
173
|
+
test: ast,
|
|
174
|
+
consequent: consequent,
|
|
175
|
+
alternate: alternate,
|
|
176
|
+
start: ast.start,
|
|
177
|
+
end: alternate.end
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return ast;
|
|
181
|
+
}
|
|
182
|
+
function binaryExpressionParser(type, operator, parseFunction, rightParseFunction, leftKey, rightKey) {
|
|
183
|
+
if (rightParseFunction === void 0) {
|
|
184
|
+
rightParseFunction = parseFunction;
|
|
185
|
+
}
|
|
186
|
+
if (leftKey === void 0) {
|
|
187
|
+
leftKey = 'left';
|
|
188
|
+
}
|
|
189
|
+
if (rightKey === void 0) {
|
|
190
|
+
rightKey = 'right';
|
|
191
|
+
}
|
|
192
|
+
var ast = parseFunction();
|
|
193
|
+
if (!ast) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
if (matchPunctuator(operator)) {
|
|
197
|
+
while (matchPunctuator(operator)) {
|
|
198
|
+
var _ast;
|
|
199
|
+
next();
|
|
200
|
+
var right = assert(rightParseFunction());
|
|
201
|
+
ast = (_ast = {
|
|
202
|
+
type: type,
|
|
203
|
+
op: operator
|
|
204
|
+
}, _ast[leftKey] = ast, _ast[rightKey] = right, _ast.start = ast.start, _ast.end = right.end, _ast);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return ast;
|
|
208
|
+
}
|
|
209
|
+
function logicalOrExpression() {
|
|
210
|
+
return binaryExpressionParser('or', '||', logicalAndExpression);
|
|
211
|
+
}
|
|
212
|
+
function logicalAndExpression() {
|
|
213
|
+
return binaryExpressionParser('and', '&&', bitwiseOrExpression);
|
|
214
|
+
}
|
|
215
|
+
function bitwiseOrExpression() {
|
|
216
|
+
return binaryExpressionParser('binary', '|', bitwiseXOrExpression);
|
|
217
|
+
}
|
|
218
|
+
function bitwiseXOrExpression() {
|
|
219
|
+
return binaryExpressionParser('binary', '^', bitwiseAndExpression);
|
|
220
|
+
}
|
|
221
|
+
function bitwiseAndExpression() {
|
|
222
|
+
return binaryExpressionParser('binary', '&', equalityExpression);
|
|
223
|
+
}
|
|
224
|
+
function equalityExpression() {
|
|
225
|
+
return binaryExpressionParser('eq', '==', function () {
|
|
226
|
+
return binaryExpressionParser('ne', '!=', function () {
|
|
227
|
+
return binaryExpressionParser('streq', '===', function () {
|
|
228
|
+
return binaryExpressionParser('strneq', '!==', relationalExpression);
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
function relationalExpression() {
|
|
234
|
+
return binaryExpressionParser('lt', '<', function () {
|
|
235
|
+
return binaryExpressionParser('gt', '>', function () {
|
|
236
|
+
return binaryExpressionParser('le', '<=', function () {
|
|
237
|
+
return binaryExpressionParser('ge', '>=', shiftExpression);
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
function shiftExpression() {
|
|
243
|
+
return binaryExpressionParser('shift', '<<', function () {
|
|
244
|
+
return binaryExpressionParser('shift', '>>', function () {
|
|
245
|
+
return binaryExpressionParser('shift', '>>>', additiveExpression);
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
function additiveExpression() {
|
|
250
|
+
return binaryExpressionParser('add', '+', function () {
|
|
251
|
+
return binaryExpressionParser('minus', '-', multiplicativeExpression);
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
function multiplicativeExpression() {
|
|
255
|
+
return binaryExpressionParser('multiply', '*', function () {
|
|
256
|
+
return binaryExpressionParser('divide', '/', function () {
|
|
257
|
+
return binaryExpressionParser('remainder', '%', powerExpression);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
function powerExpression() {
|
|
262
|
+
return binaryExpressionParser('power', '**', unaryExpression);
|
|
263
|
+
}
|
|
264
|
+
function unaryExpression() {
|
|
265
|
+
var unaryOperators = ['+', '-', '~', '!'];
|
|
266
|
+
var stack = [];
|
|
267
|
+
while (matchPunctuator(unaryOperators)) {
|
|
268
|
+
stack.push(token);
|
|
269
|
+
next();
|
|
270
|
+
}
|
|
271
|
+
var ast = postfixExpression();
|
|
272
|
+
assert(!stack.length || ast);
|
|
273
|
+
while (stack.length) {
|
|
274
|
+
var op = stack.pop();
|
|
275
|
+
ast = {
|
|
276
|
+
type: 'unary',
|
|
277
|
+
op: op.value,
|
|
278
|
+
value: ast,
|
|
279
|
+
start: op.start,
|
|
280
|
+
end: op.end
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
return ast;
|
|
284
|
+
}
|
|
285
|
+
function postfixExpression(parseFunction) {
|
|
286
|
+
if (parseFunction === void 0) {
|
|
287
|
+
parseFunction = leftHandSideExpression;
|
|
288
|
+
}
|
|
289
|
+
var ast = parseFunction();
|
|
290
|
+
if (!ast) {
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
while (matchPunctuator('[') || matchPunctuator('.')) {
|
|
294
|
+
var isDot = matchPunctuator('.');
|
|
295
|
+
next();
|
|
296
|
+
var right = assert(isDot ? identifier() || numberLiteral() || rawScript() : expression());
|
|
297
|
+
if (!isDot) {
|
|
298
|
+
assert(matchPunctuator(']'));
|
|
299
|
+
next();
|
|
300
|
+
}
|
|
301
|
+
ast = {
|
|
302
|
+
type: 'getter',
|
|
303
|
+
host: ast,
|
|
304
|
+
key: right,
|
|
305
|
+
start: ast.start,
|
|
306
|
+
end: right.end
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
return ast;
|
|
310
|
+
}
|
|
311
|
+
function leftHandSideExpression() {
|
|
312
|
+
return functionCall() || arrowFunction() || primaryExpression();
|
|
313
|
+
}
|
|
314
|
+
function varibleKey(allowVariable, inObject) {
|
|
315
|
+
if (allowVariable === void 0) {
|
|
316
|
+
allowVariable = false;
|
|
317
|
+
}
|
|
318
|
+
if (inObject === void 0) {
|
|
319
|
+
inObject = false;
|
|
320
|
+
}
|
|
321
|
+
return (allowVariable ? variable() : identifier()) || stringLiteral() || numberLiteral() || (inObject ? objectTemplateKey() : template());
|
|
322
|
+
}
|
|
323
|
+
function objectTemplateKey() {
|
|
324
|
+
if (matchPunctuator('[')) {
|
|
325
|
+
next();
|
|
326
|
+
var key = assert(template());
|
|
327
|
+
assert(matchPunctuator(']'));
|
|
328
|
+
next();
|
|
329
|
+
return key;
|
|
330
|
+
}
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
function stringLiteral() {
|
|
334
|
+
if (token.type === _lexer.TokenName[11 /* StringLiteral */]) {
|
|
335
|
+
var cToken = token;
|
|
336
|
+
next();
|
|
337
|
+
return {
|
|
338
|
+
type: 'string',
|
|
339
|
+
value: cToken.value,
|
|
340
|
+
start: cToken.start,
|
|
341
|
+
end: cToken.end
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
return null;
|
|
345
|
+
}
|
|
346
|
+
function numberLiteral() {
|
|
347
|
+
if (token.type === _lexer.TokenName[9 /* NumericLiteral */]) {
|
|
348
|
+
var value = token.value;
|
|
349
|
+
var cToken = token;
|
|
350
|
+
next();
|
|
351
|
+
return {
|
|
352
|
+
type: 'literal',
|
|
353
|
+
value: value,
|
|
354
|
+
start: cToken.start,
|
|
355
|
+
end: cToken.end
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
function template() {
|
|
361
|
+
if (matchPunctuator('`')) {
|
|
362
|
+
var start = token;
|
|
363
|
+
var end = start;
|
|
364
|
+
next();
|
|
365
|
+
var state = tempalteStates.START;
|
|
366
|
+
var _ast2 = {
|
|
367
|
+
type: 'template',
|
|
368
|
+
body: [],
|
|
369
|
+
start: start.start,
|
|
370
|
+
end: start.end
|
|
371
|
+
};
|
|
372
|
+
while (true) {
|
|
373
|
+
if (state === tempalteStates.SCRIPTING) {
|
|
374
|
+
var exp = assert(expression());
|
|
375
|
+
_ast2.body.push(exp);
|
|
376
|
+
assert(token.type === _lexer.TokenName[15 /* TemplateRightBrace */]);
|
|
377
|
+
next();
|
|
378
|
+
state = tempalteStates.START;
|
|
379
|
+
} else {
|
|
380
|
+
if (matchPunctuator('`')) {
|
|
381
|
+
end = token;
|
|
382
|
+
next();
|
|
383
|
+
break;
|
|
384
|
+
} else if (token.type === _lexer.TokenName[14 /* TemplateLeftBrace */]) {
|
|
385
|
+
next();
|
|
386
|
+
state = tempalteStates.SCRIPTING;
|
|
387
|
+
} else if (token.type === _lexer.TokenName[13 /* TemplateRaw */]) {
|
|
388
|
+
_ast2.body.push({
|
|
389
|
+
type: 'template_raw',
|
|
390
|
+
value: token.value,
|
|
391
|
+
start: token.start,
|
|
392
|
+
end: token.end
|
|
393
|
+
});
|
|
394
|
+
next();
|
|
395
|
+
} else {
|
|
396
|
+
fatal();
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
_ast2.end = end.end;
|
|
401
|
+
return _ast2;
|
|
402
|
+
}
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
function identifier() {
|
|
406
|
+
if (token.type === _lexer.TokenName[7 /* Identifier */]) {
|
|
407
|
+
var cToken = token;
|
|
408
|
+
next();
|
|
409
|
+
return {
|
|
410
|
+
type: 'identifier',
|
|
411
|
+
name: cToken.value,
|
|
412
|
+
start: cToken.start,
|
|
413
|
+
end: cToken.end
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
function primaryExpression() {
|
|
419
|
+
return variable() || literal() || numberLiteral() || stringLiteral() || template() || arrayLiteral() || objectLiteral() || function () {
|
|
420
|
+
var ast = expressionList();
|
|
421
|
+
if ((ast === null || ast === void 0 ? void 0 : ast.body.length) === 1) {
|
|
422
|
+
return ast.body[0];
|
|
423
|
+
}
|
|
424
|
+
return ast;
|
|
425
|
+
}() || rawScript();
|
|
426
|
+
}
|
|
427
|
+
function literal() {
|
|
428
|
+
if (token.type === _lexer.TokenName[8 /* Literal */] || token.type === _lexer.TokenName[1 /* BooleanLiteral */]) {
|
|
429
|
+
var value = token.value;
|
|
430
|
+
var cToken = token;
|
|
431
|
+
next();
|
|
432
|
+
return {
|
|
433
|
+
type: 'literal',
|
|
434
|
+
value: value,
|
|
435
|
+
start: cToken.start,
|
|
436
|
+
end: cToken.end
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
return null;
|
|
440
|
+
}
|
|
441
|
+
function functionCall() {
|
|
442
|
+
if (token.type === _lexer.TokenName[7 /* Identifier */]) {
|
|
443
|
+
var id = token;
|
|
444
|
+
next();
|
|
445
|
+
if (matchPunctuator('(')) {
|
|
446
|
+
var _argList = expressionList();
|
|
447
|
+
assert(_argList);
|
|
448
|
+
return {
|
|
449
|
+
type: 'func_call',
|
|
450
|
+
identifier: id.value,
|
|
451
|
+
args: _argList === null || _argList === void 0 ? void 0 : _argList.body,
|
|
452
|
+
start: id.start,
|
|
453
|
+
end: _argList.end
|
|
454
|
+
};
|
|
455
|
+
} else {
|
|
456
|
+
back();
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
return null;
|
|
460
|
+
}
|
|
461
|
+
function arrayLiteral() {
|
|
462
|
+
if (matchPunctuator('[')) {
|
|
463
|
+
var _argList2 = expressionList('[', ']');
|
|
464
|
+
assert(_argList2);
|
|
465
|
+
return {
|
|
466
|
+
type: 'array',
|
|
467
|
+
members: _argList2 === null || _argList2 === void 0 ? void 0 : _argList2.body,
|
|
468
|
+
start: _argList2.start,
|
|
469
|
+
end: _argList2.end
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
function expressionList(startOP, endOp) {
|
|
475
|
+
if (startOP === void 0) {
|
|
476
|
+
startOP = '(';
|
|
477
|
+
}
|
|
478
|
+
if (endOp === void 0) {
|
|
479
|
+
endOp = ')';
|
|
480
|
+
}
|
|
481
|
+
if (matchPunctuator(startOP)) {
|
|
482
|
+
var start = token;
|
|
483
|
+
var end;
|
|
484
|
+
next();
|
|
485
|
+
var args = [];
|
|
486
|
+
var state = argListStates.START;
|
|
487
|
+
while (true) {
|
|
488
|
+
if (state === argListStates.COMMA || !matchPunctuator(endOp)) {
|
|
489
|
+
var arg = assert(expression());
|
|
490
|
+
args.push(arg);
|
|
491
|
+
state = argListStates.START;
|
|
492
|
+
if (matchPunctuator(',')) {
|
|
493
|
+
next();
|
|
494
|
+
state = argListStates.COMMA;
|
|
495
|
+
}
|
|
496
|
+
} else if (matchPunctuator(endOp)) {
|
|
497
|
+
end = token;
|
|
498
|
+
next();
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
return {
|
|
503
|
+
type: 'expression-list',
|
|
504
|
+
body: args,
|
|
505
|
+
start: start.start,
|
|
506
|
+
end: end.end
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
return null;
|
|
510
|
+
}
|
|
511
|
+
function argList(startOP, endOp) {
|
|
512
|
+
if (startOP === void 0) {
|
|
513
|
+
startOP = '(';
|
|
514
|
+
}
|
|
515
|
+
if (endOp === void 0) {
|
|
516
|
+
endOp = ')';
|
|
517
|
+
}
|
|
518
|
+
var count = 0;
|
|
519
|
+
var rollback = function rollback() {
|
|
520
|
+
while (count-- > 0) {
|
|
521
|
+
back();
|
|
522
|
+
}
|
|
523
|
+
return null;
|
|
524
|
+
};
|
|
525
|
+
if (matchPunctuator(startOP)) {
|
|
526
|
+
var start = token;
|
|
527
|
+
var end = start;
|
|
528
|
+
next();
|
|
529
|
+
count++;
|
|
530
|
+
var args = [];
|
|
531
|
+
var state = argListStates.START;
|
|
532
|
+
while (!matchPunctuator(endOp)) {
|
|
533
|
+
if (state === argListStates.COMMA || state === argListStates.START) {
|
|
534
|
+
var arg = variable(false);
|
|
535
|
+
if (!arg) {
|
|
536
|
+
return rollback();
|
|
537
|
+
}
|
|
538
|
+
count++;
|
|
539
|
+
args.push(arg);
|
|
540
|
+
state = argListStates.SET;
|
|
541
|
+
} else if (state === argListStates.SET && matchPunctuator(',')) {
|
|
542
|
+
next();
|
|
543
|
+
count++;
|
|
544
|
+
state = argListStates.COMMA;
|
|
545
|
+
} else {
|
|
546
|
+
return rollback();
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
if (matchPunctuator(endOp)) {
|
|
550
|
+
end = token;
|
|
551
|
+
next();
|
|
552
|
+
return {
|
|
553
|
+
type: 'arg-list',
|
|
554
|
+
body: args,
|
|
555
|
+
start: start.start,
|
|
556
|
+
end: end.end
|
|
557
|
+
};
|
|
558
|
+
} else {
|
|
559
|
+
return rollback();
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
return null;
|
|
563
|
+
}
|
|
564
|
+
function objectLiteral() {
|
|
565
|
+
if (matchPunctuator('{')) {
|
|
566
|
+
var start = token;
|
|
567
|
+
var end = start;
|
|
568
|
+
next();
|
|
569
|
+
var _ast3 = {
|
|
570
|
+
type: 'object',
|
|
571
|
+
members: [],
|
|
572
|
+
start: start.start,
|
|
573
|
+
end: start.end
|
|
574
|
+
};
|
|
575
|
+
var state = objectStates.START;
|
|
576
|
+
var key, value;
|
|
577
|
+
while (true) {
|
|
578
|
+
if (state === objectStates.KEY) {
|
|
579
|
+
assert(matchPunctuator(':'));
|
|
580
|
+
next();
|
|
581
|
+
state = objectStates.COLON;
|
|
582
|
+
} else if (state === objectStates.COLON) {
|
|
583
|
+
value = assert(expression());
|
|
584
|
+
_ast3.members.push({
|
|
585
|
+
key: key,
|
|
586
|
+
value: value
|
|
587
|
+
});
|
|
588
|
+
state = objectStates.VALUE;
|
|
589
|
+
} else if (state === objectStates.VALUE) {
|
|
590
|
+
if (matchPunctuator(',')) {
|
|
591
|
+
next();
|
|
592
|
+
state = objectStates.COMMA;
|
|
593
|
+
} else if (matchPunctuator('}')) {
|
|
594
|
+
end = token;
|
|
595
|
+
next();
|
|
596
|
+
break;
|
|
597
|
+
} else {
|
|
598
|
+
fatal();
|
|
599
|
+
}
|
|
600
|
+
} else {
|
|
601
|
+
if (state != objectStates.COMMA && matchPunctuator('}')) {
|
|
602
|
+
end = token;
|
|
603
|
+
next();
|
|
604
|
+
break;
|
|
605
|
+
}
|
|
606
|
+
key = assert(varibleKey(false, true));
|
|
607
|
+
state = objectStates.KEY;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
_ast3.end = end.end;
|
|
611
|
+
return _ast3;
|
|
612
|
+
}
|
|
613
|
+
return null;
|
|
614
|
+
}
|
|
615
|
+
function assignmentExpression() {
|
|
616
|
+
return conditionalExpression();
|
|
617
|
+
}
|
|
618
|
+
function contents() {
|
|
619
|
+
var node = {
|
|
620
|
+
type: 'document',
|
|
621
|
+
body: [],
|
|
622
|
+
start: token.start,
|
|
623
|
+
end: token.end
|
|
624
|
+
};
|
|
625
|
+
while (token.type !== _lexer.TokenName[6 /* EOF */]) {
|
|
626
|
+
var _ast4 = raw() || rawScript() || oldVariable();
|
|
627
|
+
if (!_ast4) {
|
|
628
|
+
break;
|
|
629
|
+
}
|
|
630
|
+
node.body.push(_ast4);
|
|
631
|
+
}
|
|
632
|
+
if (node.body.length) {
|
|
633
|
+
node.end = node.body[node.body.length - 1].end;
|
|
634
|
+
}
|
|
635
|
+
return node;
|
|
636
|
+
}
|
|
637
|
+
function raw() {
|
|
638
|
+
if (token.type !== _lexer.TokenName[2 /* RAW */]) {
|
|
639
|
+
return null;
|
|
640
|
+
}
|
|
641
|
+
var cToken = token;
|
|
642
|
+
next();
|
|
643
|
+
return {
|
|
644
|
+
type: 'raw',
|
|
645
|
+
value: cToken.value,
|
|
646
|
+
start: cToken.start,
|
|
647
|
+
end: cToken.end
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
function rawScript() {
|
|
651
|
+
if (token.type !== _lexer.TokenName[4 /* OpenScript */]) {
|
|
652
|
+
return null;
|
|
653
|
+
}
|
|
654
|
+
var start = token;
|
|
655
|
+
var end = start;
|
|
656
|
+
next();
|
|
657
|
+
var exp = assert(complexExpression());
|
|
658
|
+
assert(token.type === _lexer.TokenName[5 /* CloseScript */]);
|
|
659
|
+
end = token;
|
|
660
|
+
next();
|
|
661
|
+
return {
|
|
662
|
+
type: 'script',
|
|
663
|
+
body: exp,
|
|
664
|
+
start: start.start,
|
|
665
|
+
end: end.end
|
|
666
|
+
};
|
|
667
|
+
}
|
|
668
|
+
function variable(allowNameSpace) {
|
|
669
|
+
if (allowNameSpace === void 0) {
|
|
670
|
+
allowNameSpace = true;
|
|
671
|
+
}
|
|
672
|
+
if (token.type === _lexer.TokenName[7 /* Identifier */]) {
|
|
673
|
+
var cToken = token;
|
|
674
|
+
next();
|
|
675
|
+
if (allowNameSpace && matchPunctuator(':') && ~variableNamespaces.indexOf(cToken.value)) {
|
|
676
|
+
next();
|
|
677
|
+
var body = assert(postfixExpression());
|
|
678
|
+
return {
|
|
679
|
+
type: 'ns-variable',
|
|
680
|
+
namespace: cToken.value,
|
|
681
|
+
body: body,
|
|
682
|
+
start: cToken.start,
|
|
683
|
+
end: body.end
|
|
684
|
+
};
|
|
685
|
+
}
|
|
686
|
+
return {
|
|
687
|
+
type: 'variable',
|
|
688
|
+
name: cToken.value,
|
|
689
|
+
start: cToken.start,
|
|
690
|
+
end: cToken.end
|
|
691
|
+
};
|
|
692
|
+
} else if (matchPunctuator('&')) {
|
|
693
|
+
var v = token;
|
|
694
|
+
next();
|
|
695
|
+
return {
|
|
696
|
+
type: 'variable',
|
|
697
|
+
name: '&',
|
|
698
|
+
start: v.start,
|
|
699
|
+
end: v.end
|
|
700
|
+
};
|
|
701
|
+
}
|
|
702
|
+
return null;
|
|
703
|
+
}
|
|
704
|
+
function oldVariable() {
|
|
705
|
+
if (token.type !== _lexer.TokenName[3 /* Variable */]) {
|
|
706
|
+
return null;
|
|
707
|
+
}
|
|
708
|
+
var prevToken = token;
|
|
709
|
+
next();
|
|
710
|
+
return {
|
|
711
|
+
type: 'script',
|
|
712
|
+
body: prevToken.value.split('.').reduce(function (prev, key) {
|
|
713
|
+
return prev ? {
|
|
714
|
+
type: 'getter',
|
|
715
|
+
host: prev,
|
|
716
|
+
key: key,
|
|
717
|
+
start: prevToken.start,
|
|
718
|
+
end: prevToken.end
|
|
719
|
+
} : {
|
|
720
|
+
type: 'variable',
|
|
721
|
+
name: key,
|
|
722
|
+
start: prevToken.start,
|
|
723
|
+
end: prevToken.end
|
|
724
|
+
};
|
|
725
|
+
}, null),
|
|
726
|
+
start: prevToken.start,
|
|
727
|
+
end: prevToken.end
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
next();
|
|
731
|
+
var ast = (options === null || options === void 0 ? void 0 : options.variableMode) ? postfixExpression(variable) : (options === null || options === void 0 ? void 0 : options.evalMode) ? expression() : contents();
|
|
732
|
+
assert((token === null || token === void 0 ? void 0 : token.type) === _lexer.TokenName[6 /* EOF */]);
|
|
733
|
+
return ast;
|
|
734
|
+
}
|