amis-formula 1.3.11 → 1.3.12-beta.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/dist/index.d.ts +2 -2
- package/dist/index.js +110 -28
- package/dist/parser.d.ts +9 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Evaluator, EvaluatorOptions } from './evalutor';
|
|
2
|
-
import { parse, ParserOptions } from './parser';
|
|
2
|
+
import { ASTNode, parse, ParserOptions } from './parser';
|
|
3
3
|
import { lexer } from './lexer';
|
|
4
4
|
import { registerFilter, filters, getFilters } from './filter';
|
|
5
5
|
export { parse, lexer, Evaluator, filters, getFilters, registerFilter };
|
|
6
6
|
export * from './util';
|
|
7
|
-
export declare function evaluate(astOrString: string, data: any, options?: ParserOptions & EvaluatorOptions): any;
|
|
7
|
+
export declare function evaluate(astOrString: string | ASTNode, data: any, options?: ParserOptions & EvaluatorOptions): any;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* amis-formula v1.3.
|
|
2
|
+
* amis-formula v1.3.12-beta.0
|
|
3
3
|
* Copyright 2021-2022 fex
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -879,7 +879,9 @@ function parse(input, options) {
|
|
|
879
879
|
ast = {
|
|
880
880
|
type: 'filter',
|
|
881
881
|
input: ast,
|
|
882
|
-
filters: filters
|
|
882
|
+
filters: filters,
|
|
883
|
+
start: ast.start,
|
|
884
|
+
end: filters[filters.length - 1].end
|
|
883
885
|
};
|
|
884
886
|
}
|
|
885
887
|
return ast;
|
|
@@ -887,10 +889,13 @@ function parse(input, options) {
|
|
|
887
889
|
function arrowFunction() {
|
|
888
890
|
var ast = argList() || variable();
|
|
889
891
|
var args = [];
|
|
892
|
+
var start;
|
|
890
893
|
if ((ast === null || ast === void 0 ? void 0 : ast.type) === 'variable') {
|
|
891
894
|
args = [ast];
|
|
895
|
+
start = ast.start;
|
|
892
896
|
}
|
|
893
897
|
else if ((ast === null || ast === void 0 ? void 0 : ast.type) === 'arg-list') {
|
|
898
|
+
start = ast.start;
|
|
894
899
|
args = ast.body;
|
|
895
900
|
}
|
|
896
901
|
if (Array.isArray(args) && matchPunctuator('=')) {
|
|
@@ -901,7 +906,9 @@ function parse(input, options) {
|
|
|
901
906
|
return {
|
|
902
907
|
type: 'anonymous_function',
|
|
903
908
|
args: args,
|
|
904
|
-
return: body
|
|
909
|
+
return: body,
|
|
910
|
+
start: start,
|
|
911
|
+
end: body.end
|
|
905
912
|
};
|
|
906
913
|
}
|
|
907
914
|
else {
|
|
@@ -927,7 +934,9 @@ function parse(input, options) {
|
|
|
927
934
|
type: 'conditional',
|
|
928
935
|
test: ast,
|
|
929
936
|
consequent: consequent,
|
|
930
|
-
alternate: alternate
|
|
937
|
+
alternate: alternate,
|
|
938
|
+
start: ast.start,
|
|
939
|
+
end: alternate.end
|
|
931
940
|
};
|
|
932
941
|
}
|
|
933
942
|
return ast;
|
|
@@ -951,6 +960,8 @@ function parse(input, options) {
|
|
|
951
960
|
},
|
|
952
961
|
_a[leftKey] = ast,
|
|
953
962
|
_a[rightKey] = right,
|
|
963
|
+
_a.start = ast.start,
|
|
964
|
+
_a.end = right.end,
|
|
954
965
|
_a);
|
|
955
966
|
}
|
|
956
967
|
}
|
|
@@ -1025,7 +1036,9 @@ function parse(input, options) {
|
|
|
1025
1036
|
ast = {
|
|
1026
1037
|
type: 'unary',
|
|
1027
1038
|
op: op.value,
|
|
1028
|
-
value: ast
|
|
1039
|
+
value: ast,
|
|
1040
|
+
start: op.start,
|
|
1041
|
+
end: op.end,
|
|
1029
1042
|
};
|
|
1030
1043
|
}
|
|
1031
1044
|
return ast;
|
|
@@ -1047,7 +1060,9 @@ function parse(input, options) {
|
|
|
1047
1060
|
ast = {
|
|
1048
1061
|
type: 'getter',
|
|
1049
1062
|
host: ast,
|
|
1050
|
-
key: right
|
|
1063
|
+
key: right,
|
|
1064
|
+
start: ast.start,
|
|
1065
|
+
end: right.end
|
|
1051
1066
|
};
|
|
1052
1067
|
}
|
|
1053
1068
|
return ast;
|
|
@@ -1079,7 +1094,9 @@ function parse(input, options) {
|
|
|
1079
1094
|
next();
|
|
1080
1095
|
return {
|
|
1081
1096
|
type: 'string',
|
|
1082
|
-
value: cToken.value
|
|
1097
|
+
value: cToken.value,
|
|
1098
|
+
start: cToken.start,
|
|
1099
|
+
end: cToken.end
|
|
1083
1100
|
};
|
|
1084
1101
|
}
|
|
1085
1102
|
return null;
|
|
@@ -1087,21 +1104,28 @@ function parse(input, options) {
|
|
|
1087
1104
|
function numberLiteral() {
|
|
1088
1105
|
if (token.type === TokenName[TokenEnum.NumericLiteral]) {
|
|
1089
1106
|
var value = token.value;
|
|
1107
|
+
var cToken = token;
|
|
1090
1108
|
next();
|
|
1091
1109
|
return {
|
|
1092
1110
|
type: 'literal',
|
|
1093
|
-
value: value
|
|
1111
|
+
value: value,
|
|
1112
|
+
start: cToken.start,
|
|
1113
|
+
end: cToken.end
|
|
1094
1114
|
};
|
|
1095
1115
|
}
|
|
1096
1116
|
return null;
|
|
1097
1117
|
}
|
|
1098
1118
|
function template() {
|
|
1099
1119
|
if (matchPunctuator('`')) {
|
|
1120
|
+
var start = token;
|
|
1121
|
+
var end = start;
|
|
1100
1122
|
next();
|
|
1101
1123
|
var state = tempalteStates.START;
|
|
1102
1124
|
var ast_1 = {
|
|
1103
1125
|
type: 'template',
|
|
1104
|
-
body: []
|
|
1126
|
+
body: [],
|
|
1127
|
+
start: start.start,
|
|
1128
|
+
end: start.end
|
|
1105
1129
|
};
|
|
1106
1130
|
while (true) {
|
|
1107
1131
|
if (state === tempalteStates.SCRIPTING) {
|
|
@@ -1113,6 +1137,7 @@ function parse(input, options) {
|
|
|
1113
1137
|
}
|
|
1114
1138
|
else {
|
|
1115
1139
|
if (matchPunctuator('`')) {
|
|
1140
|
+
end = token;
|
|
1116
1141
|
next();
|
|
1117
1142
|
break;
|
|
1118
1143
|
}
|
|
@@ -1123,7 +1148,9 @@ function parse(input, options) {
|
|
|
1123
1148
|
else if (token.type === TokenName[TokenEnum.TemplateRaw]) {
|
|
1124
1149
|
ast_1.body.push({
|
|
1125
1150
|
type: 'template_raw',
|
|
1126
|
-
value: token.value
|
|
1151
|
+
value: token.value,
|
|
1152
|
+
start: token.start,
|
|
1153
|
+
end: token.end
|
|
1127
1154
|
});
|
|
1128
1155
|
next();
|
|
1129
1156
|
}
|
|
@@ -1132,6 +1159,7 @@ function parse(input, options) {
|
|
|
1132
1159
|
}
|
|
1133
1160
|
}
|
|
1134
1161
|
}
|
|
1162
|
+
ast_1.end = end.end;
|
|
1135
1163
|
return ast_1;
|
|
1136
1164
|
}
|
|
1137
1165
|
return null;
|
|
@@ -1142,7 +1170,9 @@ function parse(input, options) {
|
|
|
1142
1170
|
next();
|
|
1143
1171
|
return {
|
|
1144
1172
|
type: 'identifier',
|
|
1145
|
-
name: cToken.value
|
|
1173
|
+
name: cToken.value,
|
|
1174
|
+
start: cToken.start,
|
|
1175
|
+
end: cToken.end
|
|
1146
1176
|
};
|
|
1147
1177
|
}
|
|
1148
1178
|
return null;
|
|
@@ -1168,10 +1198,13 @@ function parse(input, options) {
|
|
|
1168
1198
|
if (token.type === TokenName[TokenEnum.Literal] ||
|
|
1169
1199
|
token.type === TokenName[TokenEnum.BooleanLiteral]) {
|
|
1170
1200
|
var value = token.value;
|
|
1201
|
+
var cToken = token;
|
|
1171
1202
|
next();
|
|
1172
1203
|
return {
|
|
1173
1204
|
type: 'literal',
|
|
1174
|
-
value: value
|
|
1205
|
+
value: value,
|
|
1206
|
+
start: cToken.start,
|
|
1207
|
+
end: cToken.end
|
|
1175
1208
|
};
|
|
1176
1209
|
}
|
|
1177
1210
|
return null;
|
|
@@ -1182,10 +1215,13 @@ function parse(input, options) {
|
|
|
1182
1215
|
next();
|
|
1183
1216
|
if (matchPunctuator('(')) {
|
|
1184
1217
|
var argList_1 = expressionList();
|
|
1218
|
+
assert(argList_1);
|
|
1185
1219
|
return {
|
|
1186
1220
|
type: 'func_call',
|
|
1187
1221
|
identifier: id.value,
|
|
1188
|
-
args: argList_1 === null || argList_1 === void 0 ? void 0 : argList_1.body
|
|
1222
|
+
args: argList_1 === null || argList_1 === void 0 ? void 0 : argList_1.body,
|
|
1223
|
+
start: id.start,
|
|
1224
|
+
end: argList_1.end
|
|
1189
1225
|
};
|
|
1190
1226
|
}
|
|
1191
1227
|
else {
|
|
@@ -1197,9 +1233,12 @@ function parse(input, options) {
|
|
|
1197
1233
|
function arrayLiteral() {
|
|
1198
1234
|
if (matchPunctuator('[')) {
|
|
1199
1235
|
var argList_2 = expressionList('[', ']');
|
|
1236
|
+
assert(argList_2);
|
|
1200
1237
|
return {
|
|
1201
1238
|
type: 'array',
|
|
1202
|
-
members: argList_2 === null || argList_2 === void 0 ? void 0 : argList_2.body
|
|
1239
|
+
members: argList_2 === null || argList_2 === void 0 ? void 0 : argList_2.body,
|
|
1240
|
+
start: argList_2.start,
|
|
1241
|
+
end: argList_2.end
|
|
1203
1242
|
};
|
|
1204
1243
|
}
|
|
1205
1244
|
return null;
|
|
@@ -1208,6 +1247,8 @@ function parse(input, options) {
|
|
|
1208
1247
|
if (startOP === void 0) { startOP = '('; }
|
|
1209
1248
|
if (endOp === void 0) { endOp = ')'; }
|
|
1210
1249
|
if (matchPunctuator(startOP)) {
|
|
1250
|
+
var start = token;
|
|
1251
|
+
var end = void 0;
|
|
1211
1252
|
next();
|
|
1212
1253
|
var args = [];
|
|
1213
1254
|
var state = argListStates.START;
|
|
@@ -1222,13 +1263,16 @@ function parse(input, options) {
|
|
|
1222
1263
|
}
|
|
1223
1264
|
}
|
|
1224
1265
|
else if (matchPunctuator(endOp)) {
|
|
1266
|
+
end = token;
|
|
1225
1267
|
next();
|
|
1226
1268
|
break;
|
|
1227
1269
|
}
|
|
1228
1270
|
}
|
|
1229
1271
|
return {
|
|
1230
1272
|
type: 'expression-list',
|
|
1231
|
-
body: args
|
|
1273
|
+
body: args,
|
|
1274
|
+
start: start.start,
|
|
1275
|
+
end: end.end
|
|
1232
1276
|
};
|
|
1233
1277
|
}
|
|
1234
1278
|
return null;
|
|
@@ -1244,6 +1288,8 @@ function parse(input, options) {
|
|
|
1244
1288
|
return null;
|
|
1245
1289
|
};
|
|
1246
1290
|
if (matchPunctuator(startOP)) {
|
|
1291
|
+
var start = token;
|
|
1292
|
+
var end = start;
|
|
1247
1293
|
next();
|
|
1248
1294
|
count++;
|
|
1249
1295
|
var args = [];
|
|
@@ -1268,10 +1314,13 @@ function parse(input, options) {
|
|
|
1268
1314
|
}
|
|
1269
1315
|
}
|
|
1270
1316
|
if (matchPunctuator(endOp)) {
|
|
1317
|
+
end = token;
|
|
1271
1318
|
next();
|
|
1272
1319
|
return {
|
|
1273
1320
|
type: 'arg-list',
|
|
1274
|
-
body: args
|
|
1321
|
+
body: args,
|
|
1322
|
+
start: start.start,
|
|
1323
|
+
end: end.end
|
|
1275
1324
|
};
|
|
1276
1325
|
}
|
|
1277
1326
|
else {
|
|
@@ -1282,10 +1331,14 @@ function parse(input, options) {
|
|
|
1282
1331
|
}
|
|
1283
1332
|
function objectLiteral() {
|
|
1284
1333
|
if (matchPunctuator('{')) {
|
|
1334
|
+
var start = token;
|
|
1335
|
+
var end = start;
|
|
1285
1336
|
next();
|
|
1286
1337
|
var ast_2 = {
|
|
1287
1338
|
type: 'object',
|
|
1288
|
-
members: []
|
|
1339
|
+
members: [],
|
|
1340
|
+
start: start.start,
|
|
1341
|
+
end: start.end
|
|
1289
1342
|
};
|
|
1290
1343
|
var state = objectStates.START;
|
|
1291
1344
|
var key = void 0, value = void 0;
|
|
@@ -1309,6 +1362,7 @@ function parse(input, options) {
|
|
|
1309
1362
|
state = objectStates.COMMA;
|
|
1310
1363
|
}
|
|
1311
1364
|
else if (matchPunctuator('}')) {
|
|
1365
|
+
end = token;
|
|
1312
1366
|
next();
|
|
1313
1367
|
break;
|
|
1314
1368
|
}
|
|
@@ -1318,6 +1372,7 @@ function parse(input, options) {
|
|
|
1318
1372
|
}
|
|
1319
1373
|
else {
|
|
1320
1374
|
if (state != objectStates.COMMA && matchPunctuator('}')) {
|
|
1375
|
+
end = token;
|
|
1321
1376
|
next();
|
|
1322
1377
|
break;
|
|
1323
1378
|
}
|
|
@@ -1325,6 +1380,7 @@ function parse(input, options) {
|
|
|
1325
1380
|
state = objectStates.KEY;
|
|
1326
1381
|
}
|
|
1327
1382
|
}
|
|
1383
|
+
ast_2.end = end.end;
|
|
1328
1384
|
return ast_2;
|
|
1329
1385
|
}
|
|
1330
1386
|
return null;
|
|
@@ -1335,7 +1391,9 @@ function parse(input, options) {
|
|
|
1335
1391
|
function contents() {
|
|
1336
1392
|
var node = {
|
|
1337
1393
|
type: 'document',
|
|
1338
|
-
body: []
|
|
1394
|
+
body: [],
|
|
1395
|
+
start: token.start,
|
|
1396
|
+
end: token.end
|
|
1339
1397
|
};
|
|
1340
1398
|
while (token.type !== TokenName[TokenEnum.EOF]) {
|
|
1341
1399
|
var ast_3 = raw() || rawScript() || oldVariable();
|
|
@@ -1344,6 +1402,9 @@ function parse(input, options) {
|
|
|
1344
1402
|
}
|
|
1345
1403
|
node.body.push(ast_3);
|
|
1346
1404
|
}
|
|
1405
|
+
if (node.body.length) {
|
|
1406
|
+
node.end = node.body[node.body.length - 1].end;
|
|
1407
|
+
}
|
|
1347
1408
|
return node;
|
|
1348
1409
|
}
|
|
1349
1410
|
function raw() {
|
|
@@ -1354,20 +1415,27 @@ function parse(input, options) {
|
|
|
1354
1415
|
next();
|
|
1355
1416
|
return {
|
|
1356
1417
|
type: 'raw',
|
|
1357
|
-
value: cToken.value
|
|
1418
|
+
value: cToken.value,
|
|
1419
|
+
start: cToken.start,
|
|
1420
|
+
end: cToken.end
|
|
1358
1421
|
};
|
|
1359
1422
|
}
|
|
1360
1423
|
function rawScript() {
|
|
1361
1424
|
if (token.type !== TokenName[TokenEnum.OpenScript]) {
|
|
1362
1425
|
return null;
|
|
1363
1426
|
}
|
|
1427
|
+
var start = token;
|
|
1428
|
+
var end = start;
|
|
1364
1429
|
next();
|
|
1365
1430
|
var exp = assert(complexExpression());
|
|
1366
1431
|
assert(token.type === TokenName[TokenEnum.CloseScript]);
|
|
1432
|
+
end = token;
|
|
1367
1433
|
next();
|
|
1368
1434
|
return {
|
|
1369
1435
|
type: 'script',
|
|
1370
|
-
body: exp
|
|
1436
|
+
body: exp,
|
|
1437
|
+
start: start.start,
|
|
1438
|
+
end: end.end
|
|
1371
1439
|
};
|
|
1372
1440
|
}
|
|
1373
1441
|
function variable(allowNameSpace) {
|
|
@@ -1383,19 +1451,26 @@ function parse(input, options) {
|
|
|
1383
1451
|
return {
|
|
1384
1452
|
type: 'ns-variable',
|
|
1385
1453
|
namespace: cToken.value,
|
|
1386
|
-
body: body
|
|
1454
|
+
body: body,
|
|
1455
|
+
start: cToken.start,
|
|
1456
|
+
end: body.end
|
|
1387
1457
|
};
|
|
1388
1458
|
}
|
|
1389
1459
|
return {
|
|
1390
1460
|
type: 'variable',
|
|
1391
|
-
name: cToken.value
|
|
1461
|
+
name: cToken.value,
|
|
1462
|
+
start: cToken.start,
|
|
1463
|
+
end: cToken.end
|
|
1392
1464
|
};
|
|
1393
1465
|
}
|
|
1394
1466
|
else if (matchPunctuator('&')) {
|
|
1467
|
+
var v = token;
|
|
1395
1468
|
next();
|
|
1396
1469
|
return {
|
|
1397
1470
|
type: 'variable',
|
|
1398
|
-
name: '&'
|
|
1471
|
+
name: '&',
|
|
1472
|
+
start: v.start,
|
|
1473
|
+
end: v.end
|
|
1399
1474
|
};
|
|
1400
1475
|
}
|
|
1401
1476
|
return null;
|
|
@@ -1413,13 +1488,19 @@ function parse(input, options) {
|
|
|
1413
1488
|
? {
|
|
1414
1489
|
type: 'getter',
|
|
1415
1490
|
host: prev,
|
|
1416
|
-
key: key
|
|
1491
|
+
key: key,
|
|
1492
|
+
start: prevToken.start,
|
|
1493
|
+
end: prevToken.end
|
|
1417
1494
|
}
|
|
1418
1495
|
: {
|
|
1419
1496
|
type: 'variable',
|
|
1420
|
-
name: key
|
|
1497
|
+
name: key,
|
|
1498
|
+
start: prevToken.start,
|
|
1499
|
+
end: prevToken.end
|
|
1421
1500
|
};
|
|
1422
|
-
}, null)
|
|
1501
|
+
}, null),
|
|
1502
|
+
start: prevToken.start,
|
|
1503
|
+
end: prevToken.end
|
|
1423
1504
|
};
|
|
1424
1505
|
}
|
|
1425
1506
|
next();
|
|
@@ -3909,10 +3990,11 @@ function getFilters() {
|
|
|
3909
3990
|
}
|
|
3910
3991
|
|
|
3911
3992
|
function evaluate(astOrString, data, options) {
|
|
3993
|
+
var ast = astOrString;
|
|
3912
3994
|
if (typeof astOrString === 'string') {
|
|
3913
|
-
|
|
3995
|
+
ast = parse(astOrString, options);
|
|
3914
3996
|
}
|
|
3915
|
-
return new Evaluator(data, options).evalute(
|
|
3997
|
+
return new Evaluator(data, options).evalute(ast);
|
|
3916
3998
|
}
|
|
3917
3999
|
Evaluator.setDefaultFilters(getFilters());
|
|
3918
4000
|
|
package/dist/parser.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Position } from './lexer';
|
|
1
2
|
export declare type NodeType = 'content' | 'raw' | 'conditional';
|
|
2
3
|
export interface ParserOptions {
|
|
3
4
|
/**
|
|
@@ -16,4 +17,11 @@ export interface ParserOptions {
|
|
|
16
17
|
allowFilter?: boolean;
|
|
17
18
|
variableNamespaces?: Array<string>;
|
|
18
19
|
}
|
|
19
|
-
export
|
|
20
|
+
export interface ASTNode {
|
|
21
|
+
type: string;
|
|
22
|
+
start: Position;
|
|
23
|
+
end: Position;
|
|
24
|
+
[propname: string]: any;
|
|
25
|
+
}
|
|
26
|
+
export declare type ASTNodeOrNull = ASTNode | null;
|
|
27
|
+
export declare function parse(input: string, options?: ParserOptions): ASTNode;
|