efront 4.25.1 → 4.25.3

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.
@@ -1,7 +1,7 @@
1
1
  var scanner2 = require("./scanner2");
2
2
  var strings = require("../basic/strings");
3
3
  var Program = scanner2.Program;
4
- var { STAMP, SCOPED, STRAP, EXPRESS, pickAssignment, COMMENT, SPACE, PROPERTY, VALUE, LABEL, QUOTED, snapExpressFoot, isEval, canbeTemp, rename, isHalfSentence, skipFunction, getDeclared, skipAssignment, skipSentenceQueue, createScoped, createString, splice, relink, pickSentence, snapExpressHead, needBreakBetween } = require("./common");
4
+ var { STAMP, SCOPED, STRAP, EXPRESS, pickAssignment, COMMENT, SPACE, PROPERTY, VALUE, LABEL, QUOTED, snapExpressFoot, isEval, canbeTemp, rename, isHalfSentence, skipFunction, getDeclared, skipAssignment, skipSentenceQueue, createScoped, createString, splice, relink, rolink, pickSentence, snapExpressHead, needBreakBetween } = require("./common");
5
5
  var splice2 = function (q, from, to, ...a) {
6
6
  var cx = q.indexOf(from);
7
7
  if (cx < 0) throw console.log(splice2.caller, console.format(`\r\n<red2>${i18n`自`}</red2>`), from && createString([from]), console.format(`\r\n<yellow>${i18n`至`}</yellow>`), to && createString([to]), console.format(`\r\n<cyan>${i18n`码列`}</cyan>`), createString(pickSentence(from))), i18n`结构异常`;
@@ -1009,6 +1009,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
1009
1009
  break;
1010
1010
  case "async":
1011
1011
  splice(body, i, 1);
1012
+ if (o.next) o.next.async = true;
1012
1013
  break;
1013
1014
  case "new":
1014
1015
  if (o.next?.needle) {
@@ -1068,7 +1069,7 @@ var killobj = function (body, getobjname, getletname, getname_, letname_, deep =
1068
1069
  }
1069
1070
  else if (o.type === STAMP) {
1070
1071
  if (o.text === "=>") {
1071
- i = unarrow(body, i, deepkill, letname_);
1072
+ i = unarrow(body, i);
1072
1073
  continue;
1073
1074
  }
1074
1075
  else i = newpunc(body, i, _getnewname);
@@ -1255,7 +1256,7 @@ var unforof = function (o, getnewname, used, killobj) {
1255
1256
  splice(tf[1], 0, 0, ...splice2(r.queue, r, n, ...tf));
1256
1257
  }
1257
1258
  };
1258
- var unarrow = function (body, i, killobj, letname_) {
1259
+ var unarrow = function (body, i) {
1259
1260
  var o = body[i];
1260
1261
  var p = o.prev;
1261
1262
  var n = o.next;
@@ -1273,12 +1274,19 @@ var unarrow = function (body, i, killobj, letname_) {
1273
1274
  if (n.type !== SCOPED || !n.brace) {
1274
1275
  var nni = skipAssignment(body, ni);
1275
1276
  b = scanner2('{}')[0];
1276
- splice(b, 0, 0, { type: STRAP, transive: true, text: "return" }, ...splice(body, ni, nni - ni, b));
1277
- killarg(h, b, letname_);
1278
- killobj(b);
1277
+ var q = splice(body, ni, nni - ni, b);
1278
+ if (q.length === 1 && q.entry === '(') {
1279
+ q = q[0];
1280
+ }
1281
+ splice(b, 0, 0, { type: STRAP, transive: true, text: "return" }, ...q);
1282
+ relink(b);
1279
1283
  nni = indexof(body, b, ni) + 1;
1280
1284
  }
1281
1285
  else nni = ni + 1;
1286
+ var bd = body.slice(pi, nni);
1287
+ if (p?.async) bd.unshift({ type: STRAP, text: 'async' });
1288
+ relink(bd);
1289
+ down(createScoped(bd));
1282
1290
  return nni;
1283
1291
  };
1284
1292
  var getname = function (vars, envs, k) {
@@ -1653,8 +1661,8 @@ var newpunc = function (body, i, newname) {
1653
1661
  }
1654
1662
  return hi;
1655
1663
  }
1656
-
1657
1664
  var down = function (scoped) {
1665
+ if (scoped.isArraw) return;
1658
1666
  var inAsync = scoped.async;
1659
1667
  var inAster = scoped.yield;
1660
1668
  var funcMark = [, "aster", "async", "asyncAster"][inAsync << 1 | inAster];
@@ -1787,13 +1795,13 @@ var down = function (scoped) {
1787
1795
  };
1788
1796
 
1789
1797
  var markcodes = [];
1790
- if (scoped.isfunc && scoped.caps.this && (funcMark && !scoped.isArrow || scoped.insett)) {
1798
+ if (scoped.isfunc && scoped.caps.this && (funcMark || scoped.insett)) {
1791
1799
  let tn = _getname("this_");
1792
1800
  rename(scoped.caps, "this", tn);
1793
1801
  scoped.caps.this.forEach(o => o.origin = 'this');
1794
1802
  markcodes.push(`${tn}=this`);
1795
1803
  }
1796
- if (scoped.isfunc && scoped.caps.arguments && (funcMark && !scoped.isArrow || scoped.inseta)) {
1804
+ if (scoped.isfunc && scoped.caps.arguments && (funcMark || scoped.inseta)) {
1797
1805
  let an = _getname("arguments_");
1798
1806
  scoped.caps.arguments.forEach(o => o.origin = 'arguments');
1799
1807
  rename(scoped.caps, "arguments", an);
@@ -1803,7 +1811,7 @@ var down = function (scoped) {
1803
1811
  var _killobj = function (_getlocal, o) {
1804
1812
  return killobj(o, gettmpname, getletname, _getlocal, _letname);
1805
1813
  };
1806
- var kill = function (scoped, _, parentScope) {
1814
+ var kill = function (scoped) {
1807
1815
  if (scoped.isfunc) return down(scoped);
1808
1816
  killlet(scoped);
1809
1817
  var saveddeep = fordeep;
@@ -160,16 +160,15 @@ textSpan: highlightSpan.textSpan,
160
160
  isWriteAccess: highlightSpan.kind === "writtenReference" /* writtenReference */ }, highlightSpan.isInString && { isInString: true }, highlightSpan.contextSpan && { contextSpan: highlightSpan.contextSpan })) }`);
161
161
  assert(downLevel(`async()=>({ [argitem.sort ? argitem.sort : 'date']: "desc" })`), `function () { return &async(
162
162
  function () {
163
- _ = {}; if (!argitem.sort) return [1, 0]; _1 = argitem.sort; return [2, 0]
163
+ _ = {}; if (!argitem.sort) return [1, 0]; _2 = argitem.sort; return [2, 0]
164
164
  },
165
165
  function () {
166
- _1 = 'date'; return [1, 0]
166
+ _2 = 'date'; return [1, 0]
167
167
  },
168
168
  function () {
169
- _[_1] = "desc"; _0 = _; return [_0, 2]
169
+ _[_2] = "desc"; _1 = _; return [_1, 2]
170
170
  })
171
- var _0, _1 }
172
- var _`);
171
+ var _, _1, _2 }`);
173
172
  assert(downLevel(`={...{a:1}}`), `= &extend({}, { a: 1 })`);
174
173
  assert(downLevel(`={...a,...c}`), `= &extend({}, a, c)`);
175
174
  assert(downLevel(`={a:a,...b,c}`), `= (_ = &extend({ a: a }, b),\r\n_.c = c, _)\r\nvar _`);
@@ -451,11 +450,14 @@ function (_) {
451
450
  _0 = _; _0 = _0.a; a = _0
452
451
  })
453
452
  var a, _0`)
454
- assert(downLevel(`async a=>await a`), `function (a) { return return &async(
453
+ assert(downLevel(`async a=>await a`), `function (a) { return &async(
455
454
  function () {
456
455
  _0 = a; return [_0, 1]
456
+ },
457
+ function (_) {
458
+ _0 = _; return [_0, 2]
457
459
  })
458
- var a, _0 }`)
460
+ var _0 }`)
459
461
  assert(downLevel(`function(a=b=>b,c){c}`), 'function (a, c) { if (a === undefined) a = function (b) { return b }; c }')
460
462
  assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `Object.defineProperty(dis, f.key, (_ = {},
461
463
  _.get = function () {},
@@ -533,4 +535,6 @@ return cls0 }(function () {})`);
533
535
  assert(downLevel(`a=class{ static{[...a]}}`), `var &slice = Array["prototype"]["slice"];
534
536
  a = function (cls0) { (function () { &slice["call"](a) }())
535
537
  return cls0 }(function () {})`);
536
-
538
+ assert(downLevel(`geta=()=>({[a]:1})`), `geta = function () { return ((_ = {},
539
+ _[a] = 1, _))
540
+ var _ }`);
@@ -163,6 +163,7 @@ function translate([imap, supports], code) {
163
163
  var a = scanner2(`[]`);
164
164
  v.map(function (o) {
165
165
  var name = o.name;
166
+ if (!name) return o;
166
167
  if (!name) return scanner2(`(${JSON.stringify(o)})`)[0];
167
168
  delete o.name;
168
169
  name = ctn('i18n' + getm(name, t.nodup, t.warn), t);
@@ -181,7 +182,7 @@ function translate([imap, supports], code) {
181
182
  v = a;
182
183
  }
183
184
  }
184
- else if (/^(name|holder|comment)$/.test(k)) v = ctn('i18n' + getm(v, t.nodup, t.warn), t);
185
+ else if (/^(name|holder|comment)$/.test(k)) v = v ? ctn('i18n' + getm(v, t.nodup, t.warn), t) : [{ type: QUOTED, text: `""` }];
185
186
  else v = scanner2(`(${JSON.stringify(v)})`)[0];
186
187
  o.push({
187
188
  type: PROPERTY,
@@ -1,4 +1,14 @@
1
- var { SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL, canbeTemp: _canbeTemp, isEval, createString, skipAssignment, pickSentence, skipSentenceQueue, splice, relink, createExpressList, snapExpressHead, snapExpressFoot } = require("./common");
1
+ var {
2
+ SPACE, COMMENT, EXPRESS, STRAP, QUOTED, STAMP, SCOPED, VALUE, LABEL,
3
+ canbeTemp: _canbeTemp, isEval,
4
+ createString, createScoped,
5
+ skipAssignment,
6
+ pickSentence,
7
+ skipSentenceQueue,
8
+ splice, relink,
9
+ createExpressList,
10
+ snapExpressHead, snapExpressFoot
11
+ } = require("./common");
2
12
  var scanner2 = require("./scanner2");
3
13
  var returnText = function () { return this.text };
4
14
  var NodeNotClone = o => Object.assign(Object.create(null), o, { toString: returnText });
@@ -560,6 +570,7 @@ var _invoke = function (t, getname) {
560
570
  remove_end_comma(o);
561
571
  var iseval = o.iseval = isEval(o);
562
572
  var constStart = 0;
573
+ var constNames = Object.create(null);
563
574
  if (!iseval) {
564
575
  for (var cy = 0; cy < o.length; cy++) {
565
576
  while (cy < o.length && o[cy].type & (SPACE | COMMENT)) cy++;
@@ -567,10 +578,19 @@ var _invoke = function (t, getname) {
567
578
  cy = skipAssignment(o, cy);
568
579
  if (cy === ay || ay >= o.length) continue;
569
580
  var m = o[ay];
570
- if (cy === ay + 1 && (m.type === EXPRESS && (strip || !/[\.\[]/.test(m.text)) || m.type === VALUE || m.type === QUOTED && !m.length)) {
581
+ var isexp = m.type === EXPRESS && (strip || !/[\.\[]/.test(m.text));
582
+ if (cy === ay + 1 && (isexp || m.type === VALUE || m.type === QUOTED && !m.length)) {
583
+ if (isexp) constNames[m.text] = true;
571
584
  continue;
572
585
  }
573
- constStart = cy + 1;
586
+ var s = createScoped(cloneNode(o.slice(ay, cy)));
587
+ for (var k in s.used) {
588
+ if (k in constNames) {
589
+ constStart = cy + 1;
590
+ break;
591
+ }
592
+ constNames[k] = true;
593
+ }
574
594
  }
575
595
  }
576
596
  for (var cy = 0; cy < o.length; cy++) {
@@ -581,9 +601,13 @@ var _invoke = function (t, getname) {
581
601
  var ey = cy;
582
602
  if (ay === ey || ay >= o.length) continue;
583
603
  var m = o.slice(ay, ey);
584
- if (m.length === 1 && (m[0].type === EXPRESS && !/[\.\[]/.test(m[0].text) && ay >= constStart || m[0].type === VALUE || m[0].type === QUOTED && !m[0].length)) {
585
- continue;
586
- }
604
+ var isexp = m.length === 1 && (
605
+ m[0].type === EXPRESS && !/[\.\[]/.test(m[0].text)
606
+ && ay >= constStart// 防止变量的值被后文修改
607
+ || m[0].type === QUOTED && !m[0].length
608
+ || m[0].type === VALUE
609
+ );
610
+ if (isexp) continue;
587
611
  if (!iseval || m[m.length - 1] === o.last) {
588
612
  var q = toqueue(m, getdeepname, 1);
589
613
  if (q.length > 1 && queue.length) {
@@ -820,7 +844,7 @@ var ternary = function (body, getname, ret) {
820
844
  else if (ret === 1 && !equcount && canbeOnce(bd)) {
821
845
  var name = getnextname(0);
822
846
  var r = [{ type: EXPRESS, text: name }, { type: STAMP, text: '=' }, ...bd]
823
- r.name = name;
847
+ r.name = [r[0]];
824
848
  explist = [r];
825
849
  }
826
850
  else {
@@ -863,7 +887,7 @@ var ternary = function (body, getname, ret) {
863
887
  var punc = eq.text.slice(0, eq.text.length - 1);
864
888
  var bdtmp = [...ass.map(cloneNode), { type: STAMP, text: punc }, ...asn];
865
889
  relink(bdtmp);
866
- eqused++;
890
+ if (eqused) eqused++;
867
891
  var explist2 = _express(bdtmp, getnextname, true);
868
892
  if (isSimpleAssign) {
869
893
  [asn, an = cloneNode(ass)] = popexp(explist2);
@@ -165,9 +165,10 @@ test(`while (a && b);`, '_ = a; if (!_) return [1, 0]; _ = b;\r\n if (!_) return
165
165
  test(`while (a < b);`, '_ = a < b; if (!_) return [1, 0]; return [0, 0]', true);
166
166
  test(`if (a() > a+b);`, '_ = a(), _0 = a + b, _ = _ > _0; if (!_) return [1, 0]; return [1, 0]', true);
167
167
  test(`index > start && result.length < pageSize`, '_ = index > start; if (!_) return [1, 0]; _ = result.length, _ < pageSize', true);
168
- test(`menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = str__v_; _1 = version[0]; _2 = str__v_1; _0 = [_0, _1, _2]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1`);
169
- test(`a.b.c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = str__v_; _1 = version[0]; _2 = str__v_1; _0 = [_0, _1, _2]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1; _2 = a.b.c, _2 = _2 + _1; a.b.c = _2`);
170
- test(`menus[0].c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = menus[0]; _1 = str__v_; _2 = version[0]; _3 = str__v_1; _1 = [_1, _2, _3]; _1 = _1[str_join](""); _2 = _0[str_name], _2 = _2 + _1; _0[str_name] = _2; _3 = _.c, _3 = _3 + _2; _.c = _3`);
171
- unstruct.debug = true; r++;
168
+ test(`menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = version[0]; _0 = [str__v_, _0, str__v_1]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1`);
169
+ test(`a.b.c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = version[0]; _0 = [str__v_, _0, str__v_1]; _0 = _0[str_join](""); _1 = _[str_name], _1 = _1 + _0; _[str_name] = _1; _2 = a.b.c, _2 = _2 + _1; a.b.c = _2`);
170
+ test(`menus[0].c += menus[0][str_name] += [str__v_, version[0], str__v_1][str_join]("")`, `_ = menus[0]; _0 = menus[0]; _1 = version[0]; _1 = [str__v_, _1, str__v_1]; _1 = _1[str_join](""); _2 = _0[str_name], _2 = _2 + _1; _0[str_name] = _2; _3 = _.c, _3 = _3 + _2; _.c = _3`);
172
171
  test(`new Array(2).join("") + 1`, `_0 = new Array(2); _ = _0.join(""), _ + 1`);
173
- test(`new window.Array(2).join("") + 1`, `_0 = new window.Array(2); _ = _0.join(""), _ + 1`);
172
+ test(`new window.Array(2).join("") + 1`, `_0 = new window.Array(2); _ = _0.join(""), _ + 1`);
173
+ unstruct.debug = true; r++;
174
+ test(`readbuff(h, offset += 2, length)`, `_ = offset + 2; offset = _; readbuff(h, _, length)`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.25.1",
3
+ "version": "4.25.3",
4
4
  "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
5
  "main": "public/efront.js",
6
6
  "directories": {