efront 4.10.1 → 4.11.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.
@@ -30,7 +30,7 @@ var unslice = function (arr) {
30
30
  continue;
31
31
  }
32
32
  var p = o.prev;
33
- if (p && p.type === EXPRESS && p.text === '...') {
33
+ if (p?.type && (STAMP | EXPRESS) && p.text === '...') {
34
34
  var px = arr.lastIndexOf(p, cx);
35
35
  splice(arr, px, cx - px + 1, ...o);
36
36
  cx += o.length - 1;
@@ -370,13 +370,13 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj, islet) {
370
370
  // 键值对重组
371
371
  var killmap = function (body, i, _getobjname, _getnewname, killobj) {
372
372
  var o = body[i];
373
- if (!o.length) return indexof(body, o.next, i);
373
+ if (!o.length) return i + 1;
374
374
  var m = o.first;
375
375
  var s = m, p;
376
376
 
377
377
  loop: while (m) {
378
378
  s = m, p = m.prev;
379
- if (m.type === EXPRESS) break;
379
+ if (m.type === STAMP && m.text === '...' || m.type === EXPRESS) break;
380
380
  while (m && (m.type === STRAP || m.type === STAMP)) m = m.next;
381
381
  if (!m || m.type & (PROPERTY | QUOTED | EXPRESS) && /^\[/.test(m.text) || m.isprop && (m.type === SCOPED || m.short || m.next && m.next.type === SCOPED)) {
382
382
  break;
@@ -425,7 +425,7 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
425
425
  }
426
426
  if (m && m.type === STAMP && /^[,;]$/.test(m.text)) m = m.next;
427
427
  }
428
- if (!m) return indexof(body, o.next, i);
428
+ if (!m) return i + 1;
429
429
  m = s;
430
430
  if (p && p.type === STAMP && p.text === ',') {
431
431
  var mi = o.indexOf(m);
@@ -433,7 +433,6 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
433
433
  if (pi > 0) splice(o, pi, mi - pi);
434
434
  }
435
435
  var q;
436
- var next = o.next;
437
436
  var l = 1;
438
437
  var initq = function () {
439
438
  q = scanner2(`(${_getobjname()} =)`)[0];
@@ -445,7 +444,7 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
445
444
  var tempname = null;
446
445
  var t;
447
446
  while (m) {
448
- if (m.type === EXPRESS) {
447
+ if (m.type === EXPRESS || m.type === STAMP && m.text === '...') {
449
448
  var s = m;
450
449
  m = skipAssignment(m);
451
450
  if (/^\.\.\./.test(s.text)) {
@@ -501,7 +500,7 @@ var killmap = function (body, i, _getobjname, _getnewname, killobj) {
501
500
  q.push(...scanner2(_getobjname()));
502
501
  relink(q);
503
502
  }
504
- return indexof(body, next, i);
503
+ return i + 1;
505
504
  };
506
505
  var getprop = function (o, m) {
507
506
  var prop = {};
@@ -733,6 +732,9 @@ var indexof = function (list, o, i) {
733
732
  else i = list.length;
734
733
  return i;
735
734
  };
735
+ var is3dots = function (m) {
736
+ return m.type === STAMP && m.text === '...' || m.type === EXPRESS && /^\.\.\./.test(m.text);
737
+ };
736
738
  // 数组或参数展开
737
739
  var killspr = function (body, i, _getobjname, killobj) {
738
740
  var o = body[i];
@@ -747,6 +749,7 @@ var killspr = function (body, i, _getobjname, killobj) {
747
749
  m = skipAssignment(m);
748
750
  s.text = s.text.replace(/^\.\.\./, '');
749
751
  var v = splice2(o, s, m);
752
+ if (!s.text) v.shift();
750
753
  if (m) splice2(o, m, m = m.next);
751
754
  killobj(v);
752
755
  var q = scanner2(`slice_["call"]()`);
@@ -761,14 +764,13 @@ var killspr = function (body, i, _getobjname, killobj) {
761
764
  return m;
762
765
  }
763
766
  while (m) {
764
- if (m.type === EXPRESS && /^\.\.\./.test(m.text)) break;
767
+ if (is3dots(m)) break;
765
768
  m = killnext(m);
766
769
  if (m) m = m.next;
767
770
  index++;
768
771
  }
769
772
  if (!m) return i + 1;
770
773
  var c = scanner2('["concat"]()');
771
- var next = o.next;
772
774
  if (o.entry === '(') {
773
775
  var r = snapExpressHead(o);
774
776
  if (r.type === STRAP && r.text === "new") {
@@ -788,20 +790,37 @@ var killspr = function (body, i, _getobjname, killobj) {
788
790
  relink(qt)
789
791
  return b;
790
792
  }
791
- var rt = r.type === EXPRESS && r.text.replace(/^\.\.\./, '');
793
+ var rt = (r.type & (EXPRESS | STAMP)) && r.text.replace(/^\.\.\./, '');
792
794
  var p = o.prev;
793
- if (r === o);
794
- else if (
795
- r === o.prev && r.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
796
- var p = r;
797
- var n = /\.|\[/.test(rt) ? rt.replace(/\.[^\.]*|\[[^\]]*\]$/, '') : "null";
798
- splice(o, 0, 0, ...scanner2(n + ","));
795
+ var pp = p?.prev;
796
+ var done = false;
797
+ var hasdot = false;
798
+ if (r === o) done = true;
799
+ else if (r === p) {
800
+ if (r.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
801
+ var p = r;
802
+ hasdot = r.text.length !== rt.length;
803
+ var n = /\.|\[/.test(rt) ? rt.replace(/\.[^\.]*|\[[^\]]*\]$/, '') : "null";
804
+ splice(o, 0, 0, ...scanner2(n + ","));
805
+ done = true;
806
+ }
807
+ }
808
+ else if (r === pp) {
809
+ if (p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
810
+ splice(o, 0, 0, ...scanner2(rt + ","));
811
+ p = r;
812
+ done = true;
813
+ }
799
814
  }
800
- else if (p && r === p.prev && p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
801
- splice(o, 0, 0, ...scanner2(rt + ","));
802
- p = r;
815
+ else if (r === pp.prev) {
816
+ var ppp = pp.prev;
817
+ if (pp.text === '.' && p.type === EXPRESS && !/[\.\[]/.test(p.text) && ppp.type === EXPRESS && !/[\.\[]]/.test(ppp.text)) {
818
+ splice(o, 0, 0, ...scanner2(ppp.text + ','));
819
+ p = pp.prev;
820
+ done = true;
821
+ }
803
822
  }
804
- else {
823
+ if (!done) {
805
824
  var n = null, hasdot = false;
806
825
  var pt = p.type === EXPRESS && p.text.replace(/^\.\.\./, '');
807
826
  if (p.type === EXPRESS && (n = /^(?:[\s\S]*[^\.])?(\.[^\.]*|\[[^\]]*\])$/.exec(pt))) {
@@ -810,6 +829,9 @@ var killspr = function (body, i, _getobjname, killobj) {
810
829
  p.text = pt.slice(0, pt.length - n.length);
811
830
  splice(body, i++, 0, { type: EXPRESS, text: n });
812
831
  }
832
+ else if (pp && /\.$/.test(pp.text) && !/[\.\[]/.test(p.text)) {
833
+ p = pp.prev;
834
+ }
813
835
  else if (p.type === SCOPED && p.entry === '[') {
814
836
  p = p.prev;
815
837
  }
@@ -827,7 +849,7 @@ var killspr = function (body, i, _getobjname, killobj) {
827
849
  }
828
850
  splice(h1, h1.length, 0, ...splice(body, cx, dx - cx, ...h));
829
851
  i += cx - dx + h.length;
830
- if (p.type === EXPRESS && !p.text) {
852
+ if (p.type & (EXPRESS | STAMP) && !p.text) {
831
853
  var cx = h0.lastIndexOf(p);
832
854
  if (cx >= 0) splice(h1, cx, 1);
833
855
  }
@@ -835,16 +857,16 @@ var killspr = function (body, i, _getobjname, killobj) {
835
857
  splice(body, i++, 0, ...scanner2('["apply"]'));
836
858
  var m1 = skipAssignment(m);
837
859
  if (index > 0 || m1 && m1.next) {
838
- var h = splice(o, 2, o.length);
860
+ var h = splice(o, 2, o.length - 2);
839
861
  var c = scanner2(`[]`);
840
862
  splice(c[0], 0, 0, ...h);
841
863
  killobj(c);
842
864
  splice(o, o.length, 0, ...c);
843
- return indexof(body, next, i);
865
+ return i + 1;
844
866
  };
845
- killnext(m);
846
867
  m.text = m.text.replace(/^\.\.\./, '');
847
- return indexof(body, next, i);
868
+ if (!m.text) splice2(o, m, m.next);
869
+ return i + 1;
848
870
  }
849
871
  if (index > 0) {
850
872
  if (m) splice2(o, m.prev, m);
@@ -856,7 +878,7 @@ var killspr = function (body, i, _getobjname, killobj) {
856
878
  }
857
879
  var d;
858
880
  while (m) {
859
- if (m.type === EXPRESS && /^\.\.\./.test(m.text)) {
881
+ if (is3dots(m)) {
860
882
  if (c[1].length) insert1(c[1], null, { type: STAMP, text: "," });
861
883
  insert1(c[1], null, ...spr());
862
884
  d = null;
@@ -873,7 +895,7 @@ var killspr = function (body, i, _getobjname, killobj) {
873
895
  insert1(d[0], null, ...splice2(o, s, m));
874
896
  if (m) splice2(o, m, m = m.next);
875
897
  }
876
- return indexof(body, next, i);
898
+ return i + 1;
877
899
  };
878
900
 
879
901
  var killobj = function (body, getobjname, getletname, getname_, letname_, deep = 0) {
@@ -918,9 +940,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
918
940
  var name = getname_("_");
919
941
  var y = scanner2(`for await(var ${name} of)yield ${name}`, innerJs);
920
942
  splice(y[2], y[2].length, 0, ...splice(body, i, n - i));
921
- splice.debug = true;
922
943
  splice(body, i - 1, 1, ...y);
923
- splice.debug = false;
924
944
  innerJs.setType(y[1]);
925
945
  if (y[1].type === EXPRESS) splice(body, i, 1);
926
946
  unforof(y[0], getname_.bind(null, '_'), y.used, deepkill);
@@ -963,6 +983,14 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
963
983
  case "async":
964
984
  splice(body, i, 1);
965
985
  break;
986
+ case "new":
987
+ if (o.next?.needle) {
988
+ o.text = 'undefined';
989
+ o = o.next;
990
+ var e = snapExpressFoot(o).next;
991
+ splice2(o.queue, o, e);
992
+ break;
993
+ }
966
994
  default:
967
995
  i++;
968
996
  }
@@ -982,6 +1010,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
982
1010
  }
983
1011
  else if (o.entry === '[') {
984
1012
  var a = snapExpressHead(o);
1013
+
985
1014
  if (a === o && o.next && o.next.type === STAMP && o.next.text === '=' || o.next && o.next.type === STRAP && /^(in|of)$/.test(o.next.type) && body.entry === '(' && body.prev && body.prev.type === STRAP && body.prev.text === 'for') {
986
1015
  i = killdec(body, i, _getdeepname, '', deepkill);
987
1016
  }
@@ -1258,6 +1287,12 @@ var killarg = function (head, body, _getname, setarg = true) {
1258
1287
  var namemap = Object.create(null);
1259
1288
  while (o) {
1260
1289
  var aname = null;
1290
+ var is3darg = false;
1291
+ var a = o;
1292
+ if (o.type === STAMP && o.text === '...') {
1293
+ o = o.next;
1294
+ is3darg = true;
1295
+ }
1261
1296
  if (o.type === SCOPED) {
1262
1297
  aname = _getname(head.length > 1 ? 'arg' + index : 'arg');
1263
1298
  var dec = splice2(head, o, o = o.next, { type: EXPRESS, text: aname });
@@ -1266,10 +1301,11 @@ var killarg = function (head, body, _getname, setarg = true) {
1266
1301
  else argcodes.push(`var ` + dec);
1267
1302
  }
1268
1303
  else if (o.type & (EXPRESS | VALUE)) {
1304
+ if (!is3darg) is3darg = is3dots(o);
1269
1305
  aname = o.text;
1270
- if (/^\.\.\./.test(aname)) {
1306
+ if (is3darg) {
1271
1307
  cname = aname.replace(/^\.\.\./, '');
1272
- splice2(head, o.prev ? o.prev : o, o = o.next);
1308
+ splice2(head, a.prev || a, o = skipAssignment(o));
1273
1309
  collect = index + 1;
1274
1310
  }
1275
1311
  else {
@@ -1280,7 +1316,13 @@ var killarg = function (head, body, _getname, setarg = true) {
1280
1316
  index++;
1281
1317
  }
1282
1318
  }
1283
- else throw i18n`参数声明异常!`
1319
+ else if (is3darg) {
1320
+ splice2(head, a.prev || a, o = skipAssignment(o));
1321
+ aname = '...';
1322
+ cname = '';
1323
+ collect = index + 1;
1324
+ }
1325
+ else throw i18n`参数声明异常!`;
1284
1326
  if (o && o.type === STAMP) {
1285
1327
  if (o.text === ',') {
1286
1328
  o = o.next; continue;
@@ -1443,6 +1485,27 @@ var killret = function (body, labels = Object.create(null), gettmpname) {
1443
1485
  }
1444
1486
  return breakmap;
1445
1487
  }
1488
+ var puncLeft = function (o) {
1489
+ var s = snapExpressHead(o.prev);
1490
+ var p = Infinity;
1491
+ while (o && o.prev) {
1492
+ if (o.type !== STAMP || !(o.text in powermap) || powermap[o.text] < p) return s;
1493
+ s = snapExpressHead(o.prev);
1494
+ o = s.prev;
1495
+ }
1496
+ return s;
1497
+ }
1498
+ var puncRight = function (o) {
1499
+ var s = snapExpressFoot(o.next);
1500
+ var p = 0;
1501
+ while (o && o.next) {
1502
+ if (o.type !== STAMP || !(o.text in powermap) || powermap[o.text] <= p) return s;
1503
+ s = snapExpressFoot(o.next);
1504
+ o = s.next;
1505
+ }
1506
+ return s;
1507
+ }
1508
+
1446
1509
 
1447
1510
  var newpunc = function (body, i, newname) {
1448
1511
  var o = body[i];
@@ -1465,29 +1528,44 @@ var newpunc = function (body, i, newname) {
1465
1528
  if (!h) return;
1466
1529
  var rt = h.type === EXPRESS && h.text;
1467
1530
  var p = o.prev;
1531
+ var done = false;
1468
1532
  var hi = body.lastIndexOf(h, i);
1469
- if (
1470
- h === p && h.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
1471
- splice(sentence, 0, 0, ...scanner2(rt + punc));
1472
- hi = i;
1473
- }
1474
- else if (p && h === p.prev && p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
1475
- if (canbeTemp(p)) {
1476
- var name = p.first.text;
1533
+ var pp = p?.prev;
1534
+ if (h === p) {
1535
+ if (h.type === EXPRESS && !/\.[\s\S]*\./.test(rt) && !/\[[^\]]*\]\[[^\]]*\]/.test(rt)) {
1536
+ splice(sentence, 0, 0, ...scanner2(rt + punc));
1537
+ hi = i;
1538
+ done = true;
1477
1539
  }
1478
- else {
1479
- var name = newname();
1480
- splice(p, 0, 0, ...scanner2(`${name}=`));
1540
+ }
1541
+ else if (h === pp) {
1542
+ if (p.type === SCOPED && p.entry === "[" && !/[\.\[]/.test(rt)) {
1543
+ if (canbeTemp(p)) {
1544
+ var name = p.first.text;
1545
+ }
1546
+ else {
1547
+ var name = newname();
1548
+ splice(p, 0, 0, ...scanner2(`${name}=`));
1549
+ }
1550
+ splice(sentence, 0, 0, ...scanner2(`${rt}[${name}]` + punc));
1551
+ hi = i;
1552
+ done = true;
1481
1553
  }
1482
- splice(sentence, 0, 0, ...scanner2(`${rt}[${name}]` + punc));
1483
- hi = i;
1484
1554
  }
1485
- else {
1555
+ else if (h === pp.prev) {
1556
+ var ppp = pp.prev;
1557
+ if (pp.text === '.' && p.type === EXPRESS && ppp.type === EXPRESS && !/[\.\[]/.test(p.text) && !/[\.\[]/.test(ppp.text)) {
1558
+ splice(sentence, 0, 0, ...scanner2(`${ppp.text}.${pp.text}+${punc}`));
1559
+ hi = i;
1560
+ done = true;
1561
+ }
1562
+ }
1563
+ if (!done) {
1486
1564
  var n = null;
1487
1565
  var name = newname();
1488
1566
  var pt = p.type === EXPRESS && p.text;
1489
1567
  var hp = h.prev;
1490
- splice(body, i - 1, 1);
1568
+ splice(body, i -= 1, 1);
1491
1569
  if (p.type === EXPRESS && (n = /^(?:[\s\S]*[^\.])?(\.[^\.]*|\[[^\]]*\])$/.exec(pt))) {
1492
1570
  var n = n[1];
1493
1571
  p.text = pt.slice(0, pt.length - n.length);
@@ -1501,14 +1579,17 @@ var newpunc = function (body, i, newname) {
1501
1579
  var name2 = newname();
1502
1580
  splice(p, 0, 0, ...scanner2(`${name2}=`));
1503
1581
  }
1504
- splice(body, i - 2, 1);
1582
+ splice(body, i -= 1, 1);
1505
1583
  splice(sentence, 0, 0, ...scanner2(`,${name}`), p, ...scanner2(`=${name}[${name2}]${punc}`));
1506
1584
  p = p.prev;
1507
1585
  }
1508
1586
  else {
1509
1587
  var n = p.text.replace(/^\./, '');
1510
1588
  var pp = p.prev;
1511
- if (pp.type === EXPRESS) pp.text = pp.text.replace(/\.$/, '');
1589
+ if (n === p.text) {
1590
+ if (pp.text === '.') pp = pp.prev, splice(body, i -= 2, 2);
1591
+ else if (pp.type & EXPRESS) pp.text = pp.text.replace(/\.$/, ''), splice(body, i -= 1, 1);
1592
+ }
1512
1593
  splice(sentence, 0, 0, ...scanner2(`,${name}.${n}=${name}.${n}${punc}`));
1513
1594
  }
1514
1595
  splice(sentence, 0, 0, ...scanner2(`${name}=`), ...splice(body, hi, i));
@@ -1524,8 +1605,8 @@ var newpunc = function (body, i, newname) {
1524
1605
  else {
1525
1606
  hi = i;
1526
1607
  if (/^(\?\?|\*\*)$/.test(t)) {
1527
- var l = powermap.puncLeft(o);
1528
- var r = powermap.puncRight(o);
1608
+ var l = puncLeft(o);
1609
+ var r = puncRight(o);
1529
1610
  var li = body.lastIndexOf(l, i);
1530
1611
  var ri = body.indexOf(r, i);
1531
1612
  var name = t === '??' ? 'nullish_' : "power_";
@@ -430,9 +430,16 @@ function () {
430
430
  _0 = a; return [_0, 1]
431
431
  })
432
432
  var a, _0 }`)
433
-
434
433
  assert(downLevel(`function(a=b=>b,c){c}`), 'function (a, c) { if (a === undefined) a = function (b) { return b }; c }')
435
434
  assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `Object.defineProperty(dis, f.key, (_ = {},
436
435
  _.get = function () {},
437
436
  _.set = function (v) {}, _))
438
- var _`)
437
+ var _`);
438
+ downLevel.debug = true; i++;
439
+ assert(downLevel(`var restq = splice(queue, i, i2 - i, ...a[1], { type: STAMP, text: "=" });`), `var slice_ = Array["prototype"]["slice"];
440
+ var restq = splice["apply"](null, [queue, i, i2 - i]["concat"](slice_["call"](a[1]), [{ type: STAMP, text: "=" }]));`)
441
+ var c = scanner2(`\r\n if (search.length) return null;\r\n return path.join(...pathlist);\r\n`);
442
+ c.fix();
443
+ c.break();
444
+ assert(c.toString(), `\r\n if (search["length"]) return null;\r\n return path["join"](...pathlist);\r\n`)
445
+ assert(downLevel.code(c).toString(), `\r\n if (search["length"]) return null;\r\n return path["join"]["apply"](path, pathlist);\r\n`);
@@ -1,25 +1,4 @@
1
- var { STAMP, snapExpressHead, snapExpressFoot } = require("./common");
2
- var powermap = new class {
3
- puncLeft(o) {
4
- var s = snapExpressHead(o.prev);
5
- var p = Infinity;
6
- while (o && o.prev) {
7
- if (o.type !== STAMP || !(o.text in this) || this[o.text] < p) return s;
8
- s = snapExpressHead(o.prev);
9
- o = s.prev;
10
- }
11
- return s;
12
- }
13
- puncRight(o) {
14
- var s = snapExpressFoot(o.next);
15
- var p = 0;
16
- while (o && o.next) {
17
- if (o.type !== STAMP || !(o.text in this) || this[o.text] <= p) return s;
18
- s = snapExpressFoot(o.next);
19
- o = s.next;
20
- }
21
- return s;
22
- }
1
+ var powermap = {
23
2
  };
24
3
 
25
4
  [
@@ -27,9 +6,13 @@ var powermap = new class {
27
6
  '&&,||,^^,??'/* 4 */, '&,|,^'/* 5 */,
28
7
  'instanceof,in,==,>=,<=,>,<,!=,!==,===,!in,!instanceof'/* 6 */,
29
8
  '>>,>>>,<<'/* 7 */, '+,-'/* 8 */, '*,/,%'/* 9 */, '**'/* 10 */,
30
- 'typeof,await,yield,new,delete,void,!,~'/* 11 */, '++,--'/* 12 */,
9
+ '++,--'/* 11 */,
10
+ "typeof,await,yield,new,delete,void,..."/*12*/,
11
+ '!,~'/* 13 */,
12
+ "::,?.,->,."/*14*/,
31
13
  ].forEach((pp, i) => {
32
14
  pp.split(",").forEach(p => {
33
15
  powermap[p] = i + 1;
34
16
  })
35
17
  });
18
+ module.exports = powermap;
@@ -24,10 +24,12 @@ function rescan(strs, ...args) {
24
24
  var dist = [];
25
25
  var i = 0;
26
26
  for (var s of strs) {
27
- dist.push(s, '#\\' + i++);
27
+ if (s) dist.push(s, ' ');
28
+ dist.push('#\\' + i++, " ");
28
29
  }
30
+ dist.pop();
29
31
  if (i > args.length) dist.pop();
30
- dist = scanner2(dist.join(' '));
32
+ dist = scanner2(dist.join(''));
31
33
  patchObject(dist, args);
32
34
  return dist;
33
35
  }
@@ -541,7 +541,6 @@ var _invoke = function (t, getname) {
541
541
  continue;
542
542
  }
543
543
  if (needbreak(o)) {
544
-
545
544
  var s = splice(t, bx, cx + 1 - bx);
546
545
  if (cx > 0) s.name = [cloneNode(s[0])];
547
546
  else s.name = qname;
@@ -642,8 +641,8 @@ var _invoke = function (t, getname) {
642
641
  else if (t.length) {
643
642
  if (!isAequalA(t)) {
644
643
  var t0 = t[0];
645
- if (t0.type === EXPRESS && /^[\.\[]/.test(t0.text) || t0.type & (STAMP | STRAP) && powermap[t0.text] < powermap.new) {
646
- t.unshift(...rescan(`${qname}=${qname}`));
644
+ if ((t0.type === EXPRESS && /^[\.\[]/.test(t0.text) || t0.type & (STAMP | STRAP) && powermap[t0.text] < powermap.new) && result.length) {
645
+ t.unshift(...rescan`${qname}=${qname}`);
647
646
  relink(t);
648
647
  }
649
648
  t = uncurve(t);
@@ -784,8 +783,7 @@ var ternary = function (body, getname, ret) {
784
783
  b = ternary(b, getnextname, true);
785
784
  for (var b of b) pushstep(explist, b);
786
785
  return b;
787
- }, true)
788
- }) return [1, 0]`);
786
+ }, true)}) return [1, 0]`);
789
787
  var q = explist[explist.length - 1];
790
788
  var qi = explist.length - 1;
791
789
  var qe = q[q.length - 1];
@@ -872,6 +870,7 @@ var ternary = function (body, getname, ret) {
872
870
  an = q2.name;
873
871
  asn = cloneNode(an);
874
872
  }
873
+
875
874
  for (var e of explist2) pushstep(explist, e);
876
875
  eq.text = "=";
877
876
  }
@@ -970,6 +969,10 @@ var _express = function (body, getname, ret) {
970
969
  continue;
971
970
  }
972
971
  if (o.type & (STRAP | STAMP)) {
972
+ if (o.needle) {
973
+ exps.push(o);
974
+ continue;
975
+ }
973
976
  var p = 0;
974
977
  if (o.unary) p = powermap["!"];
975
978
  else p = powermap[o.text];
@@ -96,9 +96,9 @@ test("if(1) function a(){}", 'if (false) return [1, 0]; a = function () {}; retu
96
96
  test("if(1) {function a(){}}", 'if (false) return [1, 0]; a = function () {}; return [1, 0]', true);
97
97
  test("if(a) a = 1;function a(){}", "a = function () {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
98
98
  test("if(a) a = 1;async function a(){}", "a = async function () {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
99
- test("if(a) a = 1;async function* a(){}", "a = async function* () {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
99
+ test("if(a) a = 1;async function* a(){}", "a = async function *() {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
100
100
  test("if(a) a = 1;class a{}", "a = class {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
101
- test("if(a) a = 1;function* a(){}", "a = function* () {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
101
+ test("if(a) a = 1;function* a(){}", "a = function *() {}; if (!a) return [1, 0]; a = 1; return [1, 0]", true);
102
102
  test("await new Promise(function(){})", '_ = function () {}; _ = new Promise(_); return [_, 1]', true);
103
103
  test(`onerror({ status: xhr.status, response: "Cookie解析异常!", toString: toResponse })`, '_ = { status: xhr.status, response: "Cookie解析异常!", toString: toResponse }; onerror(_)', true);
104
104
  test(`if (!/^https\\:\\/\\/|^s\\/\\//.test(url)) console.warn("请使用https访问如下路径:" + url)`, '_ = /^https\\:\\/\\/|^s\\/\\//.test(url); if (_) return [1, 0]; _ = "请使用https访问如下路径:" + url; _ = console.warn(_); return [1, 0]', true);
@@ -10,6 +10,26 @@ var codecolor = function (c, encode) {
10
10
  var envs = c.envs;
11
11
  var deep = 0;
12
12
  var used = c.used;
13
+ var scoped = c.scoped;
14
+ var setdefs = function (scoped) {
15
+ var { used } = scoped;
16
+ for (var k in used) {
17
+ var isdef = false;
18
+ for (var o of used[k]) {
19
+ if (o.next?.needle) {
20
+ isdef = true;
21
+ break;
22
+ }
23
+ }
24
+ if (isdef) {
25
+ for (var o of used[k]) {
26
+ o.isdef = true;
27
+ }
28
+ }
29
+ }
30
+ scoped.forEach(setdefs);
31
+ };
32
+ setdefs(scoped);
13
33
  var isConstValue = () => false;
14
34
  if (c.program) {
15
35
  var { strap_reg, value_reg } = c.program;
@@ -19,6 +39,7 @@ var codecolor = function (c, encode) {
19
39
  var o = o.next;
20
40
  if (o?.type === EXPRESS && needhead_reg.test(o.text)) o = o.next;
21
41
  if (o?.type === ELEMENT && o.istype) o = o.next;
42
+ if (o?.type === STAMP && o.needle) o = o.next;
22
43
  if (o?.type === SCOPED && o.entry === "(") return true;
23
44
  return false;
24
45
  }
@@ -30,7 +51,7 @@ var codecolor = function (c, encode) {
30
51
  }
31
52
  var [name] = keys;
32
53
  if (/^[\<\?]/.test(name) || !name);
33
- else if (!o.isprop && isConstValue(name)) name = `<strap>${name}</strap>`;
54
+ else if (!o.isprop && o.text !== name && isConstValue(name)) name = `<strap>${name}</strap>`;
34
55
  else name = `<${label}>${name}</${label}>`;
35
56
  keys[0] = name;
36
57
  o.text = keys.map(k => /^[\<\?]/.test(k) || !k ? k : `<express>${k}</express>`).join(".");
@@ -113,7 +134,7 @@ var codecolor = function (c, encode) {
113
134
 
114
135
  break;
115
136
  case EXPRESS:
116
- setExpress(o, o.istype ? 'predef' : 'express');
137
+ setExpress(o, o.istype || o.isdef || o.next?.needle ? 'predef' : 'express');
117
138
  break;
118
139
  case STRAP:
119
140
  if (control_reg?.test(text)) o.text = `<flow>${o.text}</flow>`;
@@ -11,6 +11,7 @@
11
11
  font-family: Consolas, "Courier New", monospace;
12
12
  vertical-align: top;
13
13
  text-decoration-line: none;
14
+ tab-size: 4;
14
15
  }
15
16
 
16
17
  stamp {
@@ -124,7 +125,11 @@
124
125
  "step", "smoothstep",
125
126
  "mix", "clamp"
126
127
  );
127
- var struct_reg = /^(while|do|for|with|switch|case|default|if|else|try|catch|finally)$/;
128
+ var rust = new compile$Javascript;
129
+ rust.powermap = Object.assign({}, rust.powermap);
130
+ rust.powermap["->"] = 0;
131
+ rust.straps = ["let", 'use', 'mut', 'fn', 'if', 'else', 'loop', 'while', 'for', 'in', 'break', 'true', 'false', 'struct', 'enum', 'impl', 'self', 'match', 'pub', 'mod', 'trait'];
132
+ var struct_reg = /^(while|do|for|with|switch|case|default|if|else|try|catch|finally|loop|import|export)$/;
128
133
 
129
134
  gl.setType = function (o) {
130
135
  var { type } = o;
@@ -160,6 +165,11 @@
160
165
  codecolor(c, encode);
161
166
  return c.toString();
162
167
  },
168
+ rs(a) {
169
+ var c = compile$scanner2(a, rust);
170
+ codecolor(c, encode);
171
+ return c.toString();
172
+ },
163
173
  glsl(a) {
164
174
  var c = compile$scanner2(a, gl);
165
175
  codecolor(c, encode);
@@ -200,7 +210,7 @@
200
210
  };
201
211
  codesupports.gl = codesupports.glsl;
202
212
  codesupports.cmd = codesupports.bat;
203
- codesupports.jsx = codesupports.js = codesupports.javascript;
213
+ codesupports.cjs = codesupports.mjs = codesupports.jsx = codesupports.js = codesupports.javascript;
204
214
  codesupports.tsx = codesupports.ts = codesupports.typescript;
205
215
  codesupports.jsp = codesupports.asp = codesupports.php = codesupports.xml = codesupports.html;
206
216
  var { SCOPED, QUOTED, SPACE, STRAP, EXPRESS, PROPERTY } = compile$common;
@@ -271,14 +281,18 @@
271
281
  }
272
282
  else text = encode(text);
273
283
  var codes = text.split(/\r\n|\r|\n/);
274
- var minSpace = 0;
284
+ var minSpace = Infinity;
275
285
  for (var c of codes) {
276
- var m = /^\s*/.exec(c);
277
- if (m && m[0].length < minSpace) {
286
+ var m = /^\s+/.exec(c);
287
+ if (!m) {
288
+ minSpace = 0;
289
+ break;
290
+ }
291
+ if (m[0].length < minSpace) {
278
292
  minSpace = m[0].length;
279
293
  }
280
294
  }
281
- if (minSpace > 0) codes = codes.map(c => /^\s+/.test(c) ? c.slice(minSpace) : c);
295
+ if (minSpace > 0 && minSpace < Infinity) codes = codes.map(c => /^\s+/.test(c) ? c.slice(minSpace) : c);
282
296
  return codes;
283
297
  }
284
298
  function codetext(type, text, blink) {
@@ -1,3 +1,3 @@
1
1
  return {
2
- url:'http://webst04.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
2
+ url:'http://webst0{1-4}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
3
3
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.10.1",
3
+ "version": "4.11.0",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {