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 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.11
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
- astOrString = parse(astOrString, options);
3995
+ ast = parse(astOrString, options);
3914
3996
  }
3915
- return new Evaluator(data, options).evalute(astOrString);
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 declare function parse(input: string, options?: ParserOptions): any;
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "amis-formula",
3
- "version": "1.3.11",
3
+ "version": "1.3.12-beta.0",
4
4
  "description": "负责 amis 里面的表达式实现,内置公式,编辑器等",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {