efront 4.27.0 → 4.28.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.
@@ -1,13 +1,23 @@
1
- module.exports = function (p) {
1
+ var split = function (reg, p) {
2
2
  var s = [];
3
+ reg.lastIndex = 0;
4
+ var lastIndex = 0;
3
5
  while (p) {
4
- var reg = /[\$\/\\]/g;
5
- reg.lastIndex = 1;
6
+ reg.lastIndex++;
6
7
  var m = reg.exec(p);
7
- var i = m ? m.index : p.length;
8
- s.push(p.slice(0, i));
9
- p = p.slice(i + 1);
8
+ if (!m) {
9
+ s.push(p.slice(lastIndex, p.length));
10
+ break;
11
+ }
12
+ s.push(p.slice(lastIndex, m.index));
13
+ lastIndex = m.index + m.length;
10
14
  }
11
15
  if (m) s.push('');
12
16
  return s;
17
+
18
+ }
19
+ module.exports = function (p) {
20
+ var s = split(/[\\\/]/g, p);
21
+ if (s.length > 1) return s;
22
+ return split(/\$/g, p);
13
23
  }
@@ -7,4 +7,5 @@ function removeFromList(list, item) {
7
7
  cx = list.indexOf(item, cx);
8
8
  }
9
9
  return count;
10
- }
10
+ }
11
+ module.exports = removeFromList;
@@ -63,4 +63,4 @@ function recode(s) {
63
63
  s = encode(s);
64
64
  return s;
65
65
  }
66
- module.exports = { encode, decode, recode, kicode, uncode };
66
+ export { encode, decode, recode, kicode, uncode };
@@ -3,6 +3,8 @@ var strings = require("../basic/strings");
3
3
  var Program = require("./Program");
4
4
  var backEach = require("../basic/backEach");
5
5
  var parseNumber = require('../basic/parseNumber');
6
+ var removeFromList = require("../basic/removeFromList");
7
+ var patchname = require("./patchname");
6
8
  const {
7
9
  /* 1 */COMMENT,
8
10
  /* 2 */SPACE,
@@ -713,6 +715,7 @@ var removeExport = function (c, i, code) {
713
715
  }
714
716
  var o = n.first;
715
717
  var allexports = [];
718
+ var exports = used.exports;
716
719
  while (o) {
717
720
  var name = o, prop = o.text;
718
721
  if (from) {
@@ -734,6 +737,15 @@ var removeExport = function (c, i, code) {
734
737
  o = n && n.next;
735
738
  var exp = scan(`\r\nexports.${prop}=`);
736
739
  exp.push(name);
740
+ var exported = exp.first;
741
+ var u0 = used[name.tack][0];
742
+ var kind = u0.kind;
743
+ exports.push(exported);
744
+ if (kind === "const") {
745
+ exported.tack = 'exports';
746
+ exported.origin = name.tack;
747
+ exported.kind = kind;;
748
+ }
737
749
  name.isExpress = true;
738
750
  allexports.push(exp);
739
751
  }
@@ -743,10 +755,11 @@ var removeExport = function (c, i, code) {
743
755
  i = ni;
744
756
  }
745
757
  else {
746
- code.splice(i, ni - i);
758
+ splice(code, i, ni - i);
747
759
  }
748
760
  for (var exp of allexports) {
749
- code.splice(i, 0, ...exp);
761
+ splice(code, i, 0, ...exp);
762
+ i += exp.length;
750
763
  }
751
764
  if (!allexports.length) code.exportEmpty = true;
752
765
  return;
@@ -809,14 +822,17 @@ var removeExport = function (c, i, code) {
809
822
  }
810
823
  }
811
824
  var oi = code.indexOf(nn, i);
812
- if (!code.exportDecs) {
813
- code.exportDecs = [];
825
+ var exportDecs = code.exportDecs;
826
+ if (!exportDecs) {
827
+ exportDecs = code.exportDecs = [];
814
828
  }
829
+ var kind = n.text;
815
830
  dec.forEach(function rm(d) {
816
831
  if (d instanceof Array) return d.forEach(rm);
817
832
  for (var a of used[d]) {
818
833
  if (a.kind && a.kind !== 'export') continue;
819
- if (!a.export) code.exportDecs.push(a), a.export = true;
834
+ a.kind = kind;
835
+ if (!a.export) exportDecs.push(a), a.export = true;
820
836
  }
821
837
  });
822
838
  dec.forEach(d => {
@@ -906,22 +922,23 @@ Javascript.prototype.fix = function (code) {
906
922
  }
907
923
  if (code.exportDecs) {
908
924
  var exportDecs = code.exportDecs;
909
- delete code.exportDecs;
910
- var exports = code.used.exports;
911
925
  var used = code.used;
926
+ var exports = used.exports;
912
927
  var envs = code.envs;
913
928
  if (!exports) {
914
- exports = code.used.exports = [];
929
+ exports = used.exports = [];
915
930
  }
916
931
  exportDecs.forEach(e => {
917
932
  e.text = 'exports.' + e.text;
918
933
  exports.push(e);
919
- removeFromList(used[e.tack], e);
920
- if (!used[e.tack].length) {
921
- delete used[e.tack];
922
- delete envs[e.tack];
934
+ var tack = e.tack;
935
+ var ud = used[tack];
936
+ removeFromList(ud, e);
937
+ if (!ud.length) {
938
+ delete used[tack];
939
+ delete envs[tack];
923
940
  }
924
- e.origin = e.tack;
941
+ e.origin = tack;
925
942
  e.tack = 'exports';
926
943
  if (e.needEqual) {
927
944
  var n = e.next;
@@ -0,0 +1,212 @@
1
+ var isConst = a => a.kind === 'const';
2
+ var autoiota = require("./autoiota");
3
+ var removeFromList = require("../basic/removeFromList");
4
+ var scanner2 = require("./scanner2");
5
+ var strings = require("../basic/strings");
6
+ var split = require("../basic/$split");
7
+ var path = require("path");
8
+ var fs = require('fs');
9
+ var { STAMP, QUOTED, SCOPED, EXPRESS, COMMENT, pickArgument, remove, splice, insertBefore, VALUE, pickAssignment, createString } = require("./common");
10
+ var getExported = function (code) {
11
+ var used = code.used;
12
+ var exports = used.exports;
13
+ if (!exports) {
14
+ if (used.module || code.return) return;
15
+ var consts = [];
16
+ for (var k in used) {
17
+ var u = used[k];
18
+ var o = u[0];
19
+ if (isConst(o)) {
20
+ o.name = o.text;
21
+ consts.push(o);
22
+ }
23
+ }
24
+ return consts;
25
+ }
26
+ var consts = [];
27
+ for (var a of exports) {
28
+ if (isConst(a)) {
29
+ a.name = a.origin;
30
+ consts.push(a);
31
+ }
32
+ }
33
+ return consts;
34
+ };
35
+ var getAssignedConst = function (a, used) {
36
+ var exp = pickAssignment(a);
37
+ var n = a.next;
38
+ if (!n || n.type !== STAMP || n.text !== "=") return;
39
+ var nn = n.next;
40
+ if (!nn) return;
41
+ if (nn !== exp[exp.length - 1]) return;
42
+ if (nn.type === EXPRESS) {
43
+ var a = nn.text;
44
+ if (/[\.\[]/.test(a)) return;
45
+ var u0 = used[a][0];
46
+ if (u0.kind === 'const') {
47
+ return getAssignedConst(u0, used);
48
+ }
49
+ return;
50
+ }
51
+ if (nn.type !== QUOTED && !nn.isdigit) return;
52
+ return nn;
53
+
54
+ }
55
+ var findConsts = function (text) {
56
+ var code = scanner2(text);
57
+ code.fix();
58
+ var consts = getExported(code);
59
+ if (!consts) return;
60
+ autoiota(code);
61
+ var used = code.used;
62
+ var vmap = Object.create(null);
63
+ for (var a of consts) {
64
+ var name = a.name;
65
+ if (/[\.\[]/.test(name)) continue;
66
+ var c = getAssignedConst(a, used);
67
+ if (c) vmap[name] = c;
68
+ }
69
+ return vmap;
70
+ };
71
+ var setEnvDefinedConsts = function (used, k, v) {
72
+ var uk = used[k];
73
+ for (var a of uk) {
74
+ var t = a.text;
75
+ var dots = /^\.+/.exec(t);
76
+ if (dots) t = t.slice(dots[0].length);
77
+ t = t.slice(a.tack.length);
78
+ var comment = { type: COMMENT, text: `/*${k}*/` };
79
+ if (t) {
80
+ insertBefore(a, comment, { type: EXPRESS, text: t });
81
+ }
82
+ else {
83
+ insertBefore(a, comment);
84
+ }
85
+ removeFromList(uk, a);
86
+ a.type = v.type;
87
+ a.text = v.text;
88
+ }
89
+ };
90
+ var setMapDefinedConsts = function (u, m) {
91
+
92
+ };
93
+ var getMaped = require("./getMaped");
94
+ var maped = Object.create(null);
95
+ var loadConsts = function (fullpath) {
96
+ if (fullpath in maped) return maped[fullpath];
97
+ var data = fs.readFileSync(fullpath);
98
+ var consts = findConsts(String(data));
99
+ maped[fullpath] = consts;
100
+ return consts;
101
+ };
102
+
103
+
104
+ var getOnlyString = function (q) {
105
+ var f = q.first;
106
+ if (f !== q.last || f?.type !== QUOTED || f.length) return;
107
+ var t = strings.decode(f.text);
108
+ return t;
109
+ };
110
+ var getCopy = function (o) {
111
+ var a = { type: o.type, text: o.text };
112
+ if (o.isdigit) a.isdigit = true;
113
+ return a;
114
+ }
115
+
116
+ var setRequiredConsts = function (code, fullpath, commap) {
117
+ var mmap = commap["?"]
118
+ if (!mmap) return code;
119
+ var url = mmap[fullpath];
120
+ var upath = split(url);
121
+ var requires = code.used.require;
122
+ if (!requires) return code;
123
+ var used = code.used;
124
+ for (var r of requires) {
125
+ var q = r.next;
126
+ if (q?.type !== SCOPED || q.entry !== '(') continue;
127
+ var t = getOnlyString(q);
128
+ if (!t) continue;
129
+ var p = getMaped(upath, commap, t);
130
+ if (!p) continue;
131
+ var consts = loadConsts(p);
132
+ if (!consts) continue;
133
+ var exp = pickAssignment(r);
134
+ var e = exp[exp.length - 1];
135
+ if (e !== q) {
136
+ if (e.prev !== q) continue;
137
+ var t = null;
138
+ switch (e.type) {
139
+ default: continue;
140
+ case EXPRESS:
141
+ t = e.text;
142
+ t = t.replace(/^\./, '');
143
+ if (/[\.\[]/.test(t)) continue;
144
+ break;
145
+ case SCOPED:
146
+ if (e.entry !== "[" || e.first !== e.last) continue;
147
+ var t = getOnlyString(e);
148
+ break;
149
+ }
150
+ if (!t || !(t in consts)) continue;
151
+ insertBefore(r, getCopy(consts[t]), { type: STAMP, text: ',' });
152
+ continue;
153
+ }
154
+ var f = exp[0];
155
+ if (f.type === EXPRESS) {
156
+ setMapDefinedConsts(f.text, consts);
157
+ continue;
158
+ }
159
+ if (f.type === SCOPED && f.entry === "{") {
160
+ var o = f.first;
161
+ var collected = [];
162
+ while (o) {
163
+ var exp = pickArgument(o);
164
+ var e = exp[exp.length - 1].next;
165
+ if (exp.length === 1) a: {
166
+ var t = o.text;
167
+ if (/[\.\[]/.test(t)) break a;
168
+ if (!(t in consts)) break a;
169
+ remove(o, e);
170
+ o.kind = 'const';
171
+ var eq = { type: STAMP, text: '=' };
172
+ o.equal = eq;
173
+ o.type = EXPRESS;
174
+ delete o.short;
175
+ collected.push(o, eq, getCopy(consts[t]), { type: STAMP, text: ',' });
176
+ var name = o.origin || o.tack;
177
+ var u = used[name];
178
+ removeFromList(u, o);
179
+ u.unshift(o);
180
+ }
181
+ if (e?.type === STAMP && e.text === ',') e = e.next;
182
+ o = e;
183
+ }
184
+ insertBefore(f, ...collected);
185
+ }
186
+ }
187
+ return code;
188
+ }
189
+ var autoConst = function (code, fullpath, ignoreImported) {
190
+ var vmap = this?.["&"];
191
+ var { envs, used, envs } = code;
192
+ if (!vmap) {
193
+ if (!ignoreImported) return setRequiredConsts(code, fullpath, this);
194
+ return code;
195
+ }
196
+ var p = path.dirname(fullpath);
197
+ var mp = vmap[p];
198
+ if (!mp) {
199
+ if (!ignoreImported) return setRequiredConsts(code, fullpath, this);
200
+ return code;
201
+ }
202
+ for (var k in envs) {
203
+ if (k === 'require') {
204
+ if (!ignoreImported) setRequiredConsts(code, fullpath, this);
205
+ continue;
206
+ }
207
+ if (k in mp) setEnvDefinedConsts(used, k, mp[k]), delete envs[k];
208
+ }
209
+ return code;
210
+ };
211
+ autoConst.findConsts = findConsts;
212
+ module.exports = autoConst;
@@ -1,4 +1,4 @@
1
- var { skipAssignment, snapSentenceHead, snapExpressFoot, EXPRESS, SPACE, SCOPED, QUOTED, VALUE, STRAP, STAMP, number_reg, createString } = require("./common");
1
+ var { skipAssignment, snapSentenceHead, snapExpressFoot, pickAssignment, EXPRESS, SPACE, SCOPED, QUOTED, VALUE, STRAP, STAMP, number_reg, createString } = require("./common");
2
2
  var strings = require("../basic/strings");
3
3
 
4
4
  var createRefId = function (o) {
@@ -59,6 +59,8 @@ var ignore = Symbol("ignore");
59
59
  var maplist = function (u) {
60
60
  var map = Object.create(null);
61
61
  for (var o of u) {
62
+ if (o.maped) continue;
63
+ o.maped = true;
62
64
  var r = createRefId(o);
63
65
  if (!map[r]) {
64
66
  map[r] = [];
@@ -1,4 +1,4 @@
1
- var { skipAssignment, createString, createScoped, relink, STRAP, STAMP, SCOPED, EXPRESS, VALUE, SPACE, COMMENT } = require("./common");
1
+ var { skipAssignment, createString, createScoped, splice, relink, STRAP, STAMP, SCOPED, EXPRESS, VALUE, SPACE, COMMENT } = require("./common");
2
2
  var backEach = require("../basic/backEach");
3
3
  var scanner2 = require("./scanner2");
4
4
 
@@ -6,7 +6,7 @@ var removeNew = function (a, ai) {
6
6
  var p = a.prev;
7
7
  if (p && p.type === STRAP && p.text === 'new') {
8
8
  ai = a.queue.lastIndexOf(p, ai);
9
- a.queue.splice(ai, 1);
9
+ splice(a.queue, ai, 1);
10
10
  }
11
11
  return ai;
12
12
  };
@@ -60,6 +60,7 @@ var assignIota = function (v) {
60
60
  ppmap.forEach((ppm, i) => {
61
61
  if (!ppm) return;
62
62
  var eq = { type: STAMP, text: '=' };
63
+ ppm[0].equal = eq;
63
64
  if (vmap[i]) res.push(...ppm, eq, ...vmap[i]);
64
65
  else if (ppval[i]) res.push(...ppm, eq, ...ppval[i]);
65
66
  else res.push(...ppm);
@@ -68,8 +69,7 @@ var assignIota = function (v) {
68
69
  res.pop();
69
70
  var ppi = p.queue.indexOf(pp);
70
71
  var vi = p.queue.indexOf(v, ppi);
71
- p.queue.splice(ppi, vi - ppi + 1, ...res);
72
- relink(p.queue);
72
+ splice(p.queue, ppi, vi - ppi + 1, ...res);
73
73
  }
74
74
  var arrayFillMap = function (a, i, as) {
75
75
  if (a.text !== 'Array' || !a.next) return;
@@ -89,20 +89,17 @@ var arrayFillMap = function (a, i, as) {
89
89
  var ni = a.queue.indexOf(n);
90
90
  var nnni = a.queue.indexOf(nnn, ni);
91
91
  if (!f) {
92
- a.queue.splice(n + 1, nnni - ni);
93
- relink(a.queue);
92
+ splice(a.queue, n + 1, nnni - ni);
94
93
  return;
95
94
  }
96
- a.queue.splice(ni, nnni - ni);
95
+ splice(a.queue, ni, nnni - ni);
97
96
  nnn.unshift({ type: STAMP, text: ',' });
98
97
  nnn.unshift.apply(nnn, n);
99
98
  a.text = "ArrayFill";
100
- as.splice(i, 1);
99
+ splice(as, i, 1);
101
100
  if (!this.envs.ArrayFill) this.envs.ArrayFill = true;
102
101
  if (!this.used.ArrayFill) this.used.ArrayFill = [];
103
102
  this.used.ArrayFill.push(a);
104
- relink(nnn);
105
- relink(a.queue);
106
103
  return;
107
104
  }
108
105
  var ai = a.queue.indexOf(a);
@@ -299,7 +299,7 @@ var getFunctionHeadBeforeScoped = function (p) {
299
299
  }
300
300
  if (p.isprop) return p;
301
301
  }
302
- function snapSentenceHead(o) {
302
+ function snapAssignmentHead(o) {
303
303
  // 只检查一级
304
304
  while (o && getprev(o)) {
305
305
  var p = getprev(o);
@@ -358,7 +358,7 @@ function snapSentenceHead(o) {
358
358
  break;
359
359
  }
360
360
  if (p.type === STRAP) {
361
- if (/^(?:new|void|typeof|delete|await|var|let|const|class|function|async)$/.test(p.text)) {
361
+ if (/^(?:new|void|typeof|delete|await|class|function|async)$/.test(p.text)) {
362
362
  o = p;
363
363
  continue;
364
364
  }
@@ -383,7 +383,7 @@ function snapSentenceHead(o) {
383
383
  break;
384
384
  }
385
385
  if (p.type === STAMP) {
386
- if (/=>|;/.test(p.text)) {
386
+ if (/^(=>|;|,)$/.test(p.text)) {
387
387
  break;
388
388
  }
389
389
  if (/^[\?\:]$/.test(p.text)) {
@@ -408,11 +408,6 @@ function snapSentenceHead(o) {
408
408
  }
409
409
  break;
410
410
  }
411
- while (o) {
412
- var p = getprev(o);
413
- if (!p || p.type !== LABEL) break;
414
- o = p;
415
- }
416
411
  return o;
417
412
  }
418
413
  var getStrapHead = function (o) {
@@ -1228,7 +1223,7 @@ var mapDeclared = function (map, declared) {
1228
1223
  }
1229
1224
  return map;
1230
1225
  };
1231
- var { uncode } = require("../basic/strings");
1226
+ import { uncode } from "../basic/strings.js";
1232
1227
  var saveTo = function (used, k, o) {
1233
1228
  k = uncode(k);
1234
1229
  if (!(used[k] instanceof Array)) used[k] = [];
@@ -1593,7 +1588,7 @@ var createExpressList = function (code) {
1593
1588
  if (/^[,;]$/.test(c.text)) {
1594
1589
  ex++;
1595
1590
  }
1596
- else if (c.text === ':' && !c.isExpress && c.prev?.type !== PROPERTY) {
1591
+ else if (c.text === ':' && !c.isExpress && getprev(c)?.type !== PROPERTY) {
1597
1592
  ex++;
1598
1593
  }
1599
1594
  }
@@ -1655,11 +1650,13 @@ var remove = function (o, end) {
1655
1650
  var i = q.indexOf(o);
1656
1651
  var length = 1;
1657
1652
  if (arguments.length === 2) {
1658
- end = q.indexOf(end, i) + 1;
1659
- if (end < 0) end = i;
1653
+ var e = q.indexOf(end, i);
1654
+ if (e < 0) end = end ? i : q.length;
1655
+ else end = e + 1;
1660
1656
  length = end - i;
1661
1657
  }
1662
1658
  if (i >= 0) splice(q, i, length);
1659
+ return length;
1663
1660
  };
1664
1661
  var replace = function (o, ...args) {
1665
1662
  var queue = o.queue;
@@ -1739,6 +1736,29 @@ var pickArgument = function (o) {
1739
1736
  }
1740
1737
  return res;
1741
1738
  };
1739
+ var snapSentenceHead = function (o) {
1740
+ while (o) {
1741
+ o = snapAssignmentHead(o)
1742
+ var p = getprev(o);
1743
+ if (p?.type === STAMP && p.text === ',') {
1744
+ var pp = getprev(p);
1745
+ if (!pp) break;
1746
+ o = pp;
1747
+ continue;
1748
+ }
1749
+ break;
1750
+ }
1751
+ var p = getprev(o);
1752
+ if (p?.type === STRAP && /^(var|let|const)$/.test(p.text)) {
1753
+ o = p;
1754
+ }
1755
+ while (o) {
1756
+ var p = getprev(o);
1757
+ if (!p || p.type !== LABEL) break;
1758
+ o = p;
1759
+ }
1760
+ return o;
1761
+ };
1742
1762
  var pickSentence = function (o) {
1743
1763
  if (!o) return [];
1744
1764
  if (o && o.type & (SPACE | COMMENT) && getprev(o)) o = getprev(o);
@@ -1775,6 +1795,7 @@ var pickExpress = function (o) {
1775
1795
  return os;
1776
1796
  };
1777
1797
  var pickAssignment = function (n) {
1798
+ n = snapAssignmentHead(n);
1778
1799
  var e = skipAssignment(n);
1779
1800
  var values = [];
1780
1801
  while (n && n !== e) {
@@ -1905,7 +1926,7 @@ var isDeclareOnly = function (o) {
1905
1926
  return false;
1906
1927
  }
1907
1928
 
1908
- module.exports = {
1929
+ export {
1909
1930
  /* 1 */COMMENT,
1910
1931
  /* 2 */SPACE,
1911
1932
  /* 4 */STRAP,
@@ -1937,6 +1958,7 @@ module.exports = {
1937
1958
  pickArgument,
1938
1959
  pickSentence,
1939
1960
  pickExpress,
1961
+ snapAssignmentHead,
1940
1962
  pickAssignment,
1941
1963
  snapExpressHead,
1942
1964
  snapExpressFoot,
@@ -0,0 +1,14 @@
1
+ export const [
2
+ /* 1 */COMMENT,
3
+ /* 2 */SPACE,
4
+ /* 4 */STRAP,
5
+ /* 8 */STAMP,
6
+ /* 16 */VALUE,
7
+ /* 32 */QUOTED,
8
+ /* 64 */PIECE,
9
+ /* 128 */EXPRESS,
10
+ /* 256 */SCOPED,
11
+ /* 512 */LABEL,
12
+ /*1024 */PROPERTY,
13
+ /*2048 */ELEMENT,
14
+ ] = new Array(20).fill(0).map((_, a) => 1 << a);
@@ -0,0 +1 @@
1
+ console.log(SPACE, COMMENT);
@@ -0,0 +1,36 @@
1
+ var split = require("../basic/$split");
2
+ function getMaped(refpath, mmap, m) {
3
+ var refs = refpath.slice();
4
+ refs.pop();
5
+ var a = split(m);
6
+ for (var cx = 0; cx < a.length; cx++) switch (a[cx]) {
7
+ case "..":
8
+ if (cx > 0) {
9
+ a.splice(cx - 1, 2);
10
+ cx -= 2;
11
+ }
12
+ else {
13
+ refs.pop();
14
+ }
15
+ break;
16
+ case ".":
17
+ case "":
18
+ a.splice(cx, 1);
19
+ cx--;
20
+ break;
21
+ }
22
+ while (refs.length) {
23
+ var tmp = refs.concat(a);
24
+ var r = tmp.join("$");
25
+ if (r in mmap) {
26
+ r = mmap[r];
27
+ return r;
28
+ }
29
+ refs.pop();
30
+ }
31
+ if (m in mmap) {
32
+ var r = mmap[m];
33
+ return r;
34
+ }
35
+ }
36
+ module.exports = getMaped;
@@ -1,4 +1,4 @@
1
- var { QUOTED, unshort } = common;
1
+ var { QUOTED, unshort } = require("./common");
2
2
  var patchname = function (prefix, node, alias) {
3
3
  if (node.isprop && node.short) {
4
4
  unshort(node);
@@ -11,3 +11,4 @@ var patchname = function (prefix, node, alias) {
11
11
  if (hasdot) t = "..." + t;
12
12
  node.text = t;
13
13
  };
14
+ module.exports = patchname;
@@ -1,3 +1,9 @@
1
+ // 早上梦到我的小学同学,我知道那不是真的她。
2
+ // 因为真的她长什么样,我已十分模糊了。
3
+ // 梦中的她只是集合了我所有喜欢过的人的优点,然后被扣上了她的身份和名字。
4
+ // 然而,当她没带手机充电线,我想要把充电线借给她时,看到她那厌恶的眼神。
5
+ // 我知道,那是真的厌恶,不是调皮。
6
+ // 离开时,她为了避开我,还故意将她的物品托付给另一个男的。
1
7
  var styles = {
2
8
  blue: "#2a83cd",
3
9
  green: "#228B22",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.27.0",
3
+ "version": "4.28.1",
4
4
  "description": "一个开发环境,提供一种自由的前端开发模式,也可作为辅助工具使用。",
5
5
  "main": "public/efront.js",
6
6
  "directories": {