efront 4.0.40 → 4.0.41

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.
@@ -55,11 +55,24 @@ var ex = [
55
55
  ];
56
56
  var map = [];
57
57
  var inc = 0, codeindex = 0;
58
+ var pam = Object.create(null);
58
59
  while (ex.length) {
59
60
  inc += ex.shift();
60
61
  var tmp = inc + ex.shift();
61
- while (inc <= tmp) map[inc++] = txt[codeindex++];
62
+ while (inc <= tmp) pam[map[inc] = txt[codeindex++]] = inc++;
62
63
  }
64
+ decodeGBK.codeFor = function (string) {
65
+ var dist = [];
66
+ for (var cx = 0, dx = string.length; cx < dx; cx++) {
67
+ var c = pam[string.charAt(cx)] || string.charCodeAt(cx);
68
+ if (c > 0x7f) {
69
+ dist.push(c >> 8, c & 0xff);
70
+ } else {
71
+ dist.push(c);
72
+ }
73
+ }
74
+ return dist;
75
+ };
63
76
 
64
77
  function decodeGBK(buff) {
65
78
  var temp = 0;
@@ -52,4 +52,5 @@ function encodeUTF8(string) {
52
52
  }
53
53
  return dist;
54
54
  }
55
+ encodeUTF8.number = numberUTF8;
55
56
  module.exports = encodeUTF8
@@ -504,7 +504,7 @@ var removeImport = function (c, i, code) {
504
504
  var { used, envs, vars } = code;
505
505
  if (next && next.type !== QUOTED) {
506
506
  var [dec, map, o] = getDeclared(c.next);
507
- if (dec.length !== 1 || !o) throw new Error("代码结构异常!");
507
+ if (!o) throw new Error("代码结构异常!");
508
508
  if (o.type !== STRAP || o.text !== 'from') throw new Error("缺少from语句");
509
509
  var oi = code.indexOf(o, i);
510
510
  }
@@ -534,20 +534,31 @@ var removeImport = function (c, i, code) {
534
534
  relink(q[1]);
535
535
  setqueue(q[1]);
536
536
  if (!dec) return;
537
- var name = dec[0];
537
+ var name = null;
538
538
  var na = dec.attributes[0];
539
539
  o.type = STAMP;
540
540
  o.text = '=';
541
541
  c.text = 'var';
542
- if (typeof name === 'string' && name !== '*') {
543
- if (na[0] !== '*') {
544
- used[name].forEach(u => {
545
- u.text = u.text.replace(/^[^\.\[]+/g, '$&.default');
546
- });
542
+ dec.forEach(function (name1, i) {
543
+ if (typeof name1 === 'string' && name1 !== '*') {
544
+ if (na[i] === '*') {
545
+ if (name) {
546
+ used[name1].forEach(u => {
547
+ u.text = u.text.replace(/^[^\.\[]+/, name);
548
+ });
549
+ }
550
+ else name = name1;
551
+ }
552
+ else {
553
+ if (!name) name = name1;
554
+ used[name1].forEach(u => {
555
+ compile$patchname(name, u, ".default");
556
+ });
557
+ }
547
558
  }
548
- }
549
- else {
550
- var name = strings.decode(q[1].last.text)
559
+ })
560
+ if (!name) {
561
+ name = strings.decode(q[1].last.text)
551
562
  .replace(/\.[^\.\/\\]+$/, '')
552
563
  .split(/[\/\\\:\{\}\[\]\.\+\-\*\/\!\~\|\:;,'"`\(\)\>\<\?\^%&\s]+/)
553
564
  .filter(a => !!a).pop();
@@ -557,16 +568,19 @@ var removeImport = function (c, i, code) {
557
568
  name = name.replace(/\d+$/, '') + ++id;
558
569
  }
559
570
  used[name] = [];
560
- if (dec[0] !== "*") dec[0].forEach((dn, i) => {
561
- var da = dec[0].attributes[i];
571
+ }
572
+ dec.forEach(function (d) {
573
+ if (d instanceof Array) d.forEach((dn, i) => {
574
+ var da = d.attributes[i][0];
562
575
  if (used[dn]) used[dn].forEach(u => {
563
- u.text = name + da[0];
576
+ if (used[name].indexOf(u) >= 0) return;
577
+ patchname(name, u, da);
564
578
  used[name].push(u);
565
579
  });
566
580
  delete used[dn];
567
581
  delete vars[dn];
568
582
  });
569
- }
583
+ });
570
584
  var u = { type: EXPRESS, text: name };
571
585
  code.splice(i + 1, oi - i - 1, u);
572
586
  used[name].push(u);
@@ -628,7 +642,9 @@ var removeExport = function (c, i, code) {
628
642
  var nn = n.next;
629
643
  var d = nn.text;
630
644
  if (used[d]) used[d].forEach(a => {
631
- if (!a.kind) a.text = `exports.` + a.text;
645
+ if (!a.kind) {
646
+ patchname('exports.', a);
647
+ }
632
648
  });
633
649
  delete used[d];
634
650
  delete envs[d];
@@ -6,6 +6,9 @@ var testFix = function (a, e) {
6
6
  }
7
7
  testFix(`import a from "a";console.log(a)`, 'var a = require("a"); console.log(a.default)');
8
8
  testFix(`import {a} from "a";console.log(a)`, 'var a1 = require("a"); console.log(a1.a)');
9
+ testFix(`import a,{a as b} from "a";console.log(a,b)`, 'var a = require("a"); console.log(a.default, a.a)');
10
+ testFix(`import * as a,{a as b},c from "a";console.log(a,b,c)`, 'var a = require("a"); console.log(a, a.a, a.default)');
11
+ testFix(`import * as a,{a as b},c from "a";console.log(a,...b,...c)`, 'var a = require("a"); console.log(a, ...a.a, ...a.default)');
9
12
  testFix(`console.log(import("a"))`, 'console.log(require("a"))');
10
13
  testFix(`import("a")`, 'require("a")');
11
14
  testFix(`import "windows.inc"`, 'require("windows.inc")');
@@ -1265,7 +1265,6 @@ var canbeTemp = function (body, strip = false) {
1265
1265
  return o.type === EXPRESS && (strip || !/[\.\[]/.test(o.text)) || o.type === VALUE || o.type === QUOTED && !o.length;
1266
1266
  };
1267
1267
 
1268
-
1269
1268
  module.exports = {
1270
1269
  /* 1 */COMMENT,
1271
1270
  /* 2 */SPACE,
@@ -0,0 +1,5 @@
1
+ var patchlist = function (prefix, list, alias) {
2
+ for (var o of list) {
3
+ patchname(prefix, o, alias);
4
+ }
5
+ };
@@ -0,0 +1,9 @@
1
+ var patchname = function (prefix, node, alias) {
2
+ var t = node.text;
3
+ var hasdot = /^\.\.\./.test(t);
4
+ if (hasdot) t = t.slice(3);
5
+ if (alias) t = t.replace(/^[^\.\[]+/, alias);
6
+ t = prefix + t;
7
+ if (hasdot) t = "..." + t;
8
+ node.text = t;
9
+ };
@@ -10,9 +10,16 @@
10
10
  display: inline-block;
11
11
  position: relative;
12
12
  vertical-align: top;
13
+ padding-bottom: 44px;
14
+ }
15
+
16
+ field:nth-child(n+2) [textarea] {
17
+ border: 1px solid #999;
18
+ outline: none;
13
19
  }
14
20
 
15
21
  label {
22
+ margin-top: -44px;
16
23
  padding: 0 20px;
17
24
  }
18
25
 
@@ -25,7 +32,7 @@
25
32
 
26
33
  [textarea] {
27
34
  width: 100%;
28
- height: 200px;
35
+ height: 100%;
29
36
  display: block;
30
37
  border: 1.2px solid;
31
38
  overflow-x: hidden;
@@ -50,25 +57,46 @@
50
57
 
51
58
  button {
52
59
  padding: 0 20px;
60
+ margin-left: 20px;
53
61
  }
54
62
  </style>
55
63
  <h2>${i18n`字符集检查工具`}</h2>
56
- <div style="text-align: right;padding: 0 20px;">
57
- <button @click="check">${i18n`检查`}</button>
64
+ <div style="text-align: right;padding: 0 20px;margin-top: -30px;">
65
+ <button @click="encode=utf8;check()">${i18n`检查utf8`}</button>
66
+ <button @click="encode=gbk;check()">${i18n`检查gbk`}</button>
58
67
  </div>
59
68
  <div>
60
69
  <field>
61
- <label>${i18n`要检查的字符集区间`}(unicode)</label>
70
+ <label>${i18n`要检查的字符集区间(双字节以内)`}</label>
62
71
  <padding>
63
72
  <div textarea contenteditable="true" -model="ranges"></div>
64
73
  </padding>
65
74
  </field>
66
75
  <field>
67
- <label>${i18n`当前浏览器支持的字符集区间`}(unicode)</label>
76
+ <label>${i18n`当前浏览器支持的字符集区间`}</label>
68
77
  <padding>
69
78
  <div textarea contenteditable="true" -model="result"></div>
70
79
  </padding>
71
80
  </field>
81
+ <field style="width: 100%;">
82
+ <label><span -bind="encode.name"></span>${i18n`编码`}</label>
83
+ <padding>
84
+ <div textarea contenteditable="true" -model="result8"></div>
85
+ </padding>
86
+ </field>
87
+ <field>
88
+ <label>${i18n`识别为unicode后的字符`}</label>
89
+ <padding>
90
+ <div textarea contenteditable="true" -model="resultu"></div>
91
+ </padding>
92
+ </field>
93
+ <field>
94
+ <label>${i18n`识别为gbk后的字符`}</label>
95
+ <padding>
96
+ <div textarea contenteditable="true" -model="resultk"></div>
97
+ </padding>
98
+ </field>
99
+
72
100
  </div>
73
101
  <script>
74
102
  var checkOne = function (one) {
@@ -95,9 +123,9 @@
95
123
  var str = hex.replace(/^[xu]/, '').replace(/^\{([\s\S]+)\}$/, '$1');
96
124
  return parseInt(str, 16);
97
125
  }
126
+ var reg = /\\(x[0-9a-f]{2}|u[0-9a-f]{4}|u\{[0-9a-f]+\})/ig;
98
127
  var check = async function () {
99
128
  var elem = alert(i18n`正在检查`, false);
100
- var reg = /\\(x[0-9a-f]{2}|u[0-9a-f]{4}|u\{[0-9a-f]+\})/ig;
101
129
  var dist0 = [];
102
130
  ranges.replace(/<\/?\w+\/?>/g, '').replace(new RegExp(`${reg.source}(?:-${reg.source})?|${/[\s\S]/.source}`, 'ig'), function (_, a, b) {
103
131
  dist0.push([_, a, b]);
@@ -142,16 +170,46 @@
142
170
  }
143
171
  dist.push(temp.join(''))
144
172
  }
145
- dist = dist.map((a, i) => {
146
- if (a.toUpperCase() === dist1[i][0].toUpperCase()) return a;
147
- dist1[i][0] = `<a>${dist1[i][0]}</a>`;
148
- return `<w>${a}</w>`;
149
- })
150
- elem.setText(i18n`检查完成`, 600);
173
+ var w = a => `<a>${a}</a>`;
174
+ var n = a => a;
175
+ var marks = dist.map((a, i) => a.toUpperCase() === dist1[i][0].toUpperCase() ? n : w);
176
+ result = dist.map((a, i) => {
177
+ if (marks[i] === n) return a;
178
+ dist1[i][0] = `<w>${dist1[i][0]}</w>`;
179
+ return `<a>${a}</a>`;
180
+ }).join('')
181
+ elem.setText(i18n`正在生成报告`);
151
182
  ranges = dist1.map(a => a[0]).join("");
152
- result = dist.join("");
183
+ var hex = a => a ? a < 0xf ? "0" + a.toString(16) : a.toString(16) : '';
184
+ var utf8 = [];
185
+ var gbk = [];
186
+ var unc = [];
187
+ dist.forEach((a, i) => {
188
+ var [start, end = start] = a.split('-');
189
+ var m = marks[i];
190
+ for (var cx = fromHex(start.slice(1)), dx = fromHex(end.slice(1)); cx <= dx; cx++) {
191
+ var u = encode.do(String.fromCharCode(cx));
192
+ utf8.push(m(u.map(hex).join('')));
193
+ gbk.push(m(decodeGBK(u)));
194
+ try {
195
+ unc.push(m(decodeUTF8(u)));
196
+ } catch (e) { }
197
+ }
198
+ });
199
+ result8 = utf8.join(" ").toUpperCase();
200
+ resultu = unc.join(' ');
201
+ resultk = gbk.join(' ');
202
+ elem.setText(i18n`检查完成`, 600);
153
203
  }
154
- var ranges = /\xAA\xB5\xBA\xC0-\xD5\xD8-\xF2\xF8-\u02af\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA/.source
204
+ var utf8 = { name: 'utf8', do: encodeUTF8 };
205
+ var gbk = { name: 'gbk', do: decodeGBK.codeFor };
206
+ var encode = {};
207
+ var target = 'utf8';
208
+ var results = '';
209
+ var result8 = '';
210
+ var resultk = '';
211
+ var resultu = '';
212
+ var ranges = "我要这铁棒有何用" + /\xAA\xB5\xBA\xC0-\xD5\xD8-\xF2\xF8-\u02af\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052f\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA/.source
155
213
  var result = '';
156
214
 
157
215
  </script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.0.40",
3
+ "version": "4.0.41",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {