efront 3.13.4 → 3.14.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.
@@ -0,0 +1,313 @@
1
+ const {
2
+ /*-1 */COMMENT,
3
+ /* 0 */SPACE,
4
+ /* 1 */STRAP,
5
+ /* 2 */STAMP,
6
+ /* 3 */VALUE,
7
+ /* 4 */QUOTED,
8
+ /* 5 */PIECE,
9
+ /* 6 */EXPRESS,
10
+ /* 7 */SCOPED,
11
+ /* 8 */LABEL,
12
+ /* 9 */PROPERTY,
13
+ skipAssignment,
14
+ getDeclared,
15
+ createScoped,
16
+ createString,
17
+ } = require("./common");
18
+ var strings = require("../basic/strings");
19
+
20
+ /**
21
+ * 按语句分割代码
22
+ */
23
+ var createExpressList = function (parsed) {
24
+ var list = [];
25
+ for (var cx = 0, dx = parsed.length; cx < dx; cx++) {
26
+ var o = parsed[cx];
27
+ switch (o.type) {
28
+ case LABEL:
29
+ var exp = [o];
30
+ exp.first = exp[0];
31
+ list.push(exp);
32
+ break;
33
+ case STRAP:
34
+ case SCOPED:
35
+ case EXPRESS:
36
+ case VALUE:
37
+ case QUOTED:
38
+ var o0 = skipAssignment(o);
39
+ var exp = [];
40
+ do {
41
+ exp.push(o);
42
+ o = parsed[++cx];
43
+ } while (o0 !== o);
44
+ cx--;
45
+ patchExpress(exp);
46
+ list.push(exp);
47
+ break;
48
+ case COMMENT:
49
+ case SPACE:
50
+ case STAMP:
51
+ list.push([o]);
52
+ break;
53
+ default:
54
+ console.log(o.type, 'type');
55
+ }
56
+ }
57
+ return list;
58
+ };
59
+ var getFunctionEnd = function (first) {
60
+ if (!first) return false;
61
+ var o = first.next;
62
+ if (!o) return false;
63
+ if (first.type === STRAP && first.text === 'function') {
64
+ if (o.type === EXPRESS) o = o.next;
65
+ if (!o) return false;
66
+ if (o.next && !o.next.next) return o.next;
67
+ }
68
+ return false;
69
+ }
70
+ var patchExpress = function (exp) {
71
+ if (!exp.first) {
72
+ exp.first = exp[0];
73
+ }
74
+ if (!exp.lastUncomment) {
75
+ exp.lastUncomment = exp[exp.length - 1];
76
+ }
77
+ if (exp.first) {
78
+ delete exp.first.prev;
79
+ }
80
+ if (exp.lastUncomment) {
81
+ delete exp.lastUncomment.next;
82
+ }
83
+ var first = exp.first;
84
+ if (first && first.type === QUOTED && /^(['"`])use strict\1/i.test(first.text)) {
85
+ exp.saved = true;
86
+ }
87
+ if (first && first.type === SCOPED && first.entry === '(') {
88
+ var ff = first.first;
89
+ var fn = first.next;
90
+ if (fn && fn.type === SCOPED && fn.entry === '(') {
91
+ var fe = getFunctionEnd(ff);
92
+ if (fe) {
93
+ first.push(fn);
94
+ var fnn = fn.next;
95
+ if (fnn) {
96
+ first.next = fnn;
97
+ fnn.prev = first;
98
+ }
99
+ fn.prev = fe;
100
+ fe.next = fn;
101
+ delete fn.next;
102
+ exp.splice(1, 1);
103
+ }
104
+ }
105
+ }
106
+ };
107
+
108
+ function createExpressKey(exp) {
109
+ var keys = [];
110
+ for (var e of exp) {
111
+ if (e.type === EXPRESS) {
112
+ var t = e.text;
113
+ while (t.length > 0) {
114
+ if (/^\./.test(t)) {
115
+ if (!keys.length) keys.push('');
116
+ t = t.slice(1);
117
+ }
118
+ var m = /[^\.\[]+/.exec(t);
119
+ if (m) {
120
+ m = m[0];
121
+ keys.push(m);
122
+ t = t.slice(m.length);
123
+ continue;
124
+ }
125
+ var m = /^\[(['"`])([\s\S]*?)\1\]/.exec(t)
126
+ if (m) {
127
+ m = m[0];
128
+ t = t.slice(m.length);
129
+ m = m.slice(1, m.length - 1);
130
+ m = strings.decode(m);
131
+ keys.push(m);
132
+ continue;
133
+ }
134
+ break;
135
+ }
136
+ }
137
+ }
138
+ return keys.join('.');
139
+ }
140
+ function needLeft(o) {
141
+ if (o.type === EXPRESS && /^[\.\[]/.test(o.text)) return true;
142
+ if (o.type === SCOPED && o.entry === '[') return true;
143
+ return false;
144
+ }
145
+ function needRight(o) {
146
+ if (o.type === EXPRESS && /[\.\]]$/.test(o.text)) return true;
147
+ if (o.type === SCOPED && o.entry === '[') return true;
148
+ return false;
149
+ }
150
+ function renameId(id, amap) {
151
+ var m = /^[^\.]+/.exec(id);
152
+ if (m) {
153
+ var id0 = m[0];
154
+ var w = amap[id0];
155
+ if (w) return w + id.slice(id0.length);
156
+ }
157
+ };
158
+ function checkRefered(scope) {
159
+ var { used } = scope;
160
+ var map = Object.create(null);
161
+ for (var k in used) {
162
+ var u = used[k];
163
+ for (var o of u) {
164
+ var right = [];
165
+ var e = o;
166
+ while (e) {
167
+ if (right.length) {
168
+ if (!needRight(right[right.length - 1]) && !needLeft(e)) break;
169
+ }
170
+ right.push(e);
171
+ e = e.next;
172
+ }
173
+ if (right.length) {
174
+ var key = createExpressKey(right);
175
+ var iswrite = false;
176
+ iswrite = !!o.kind || !!e && e.type === STAMP && /=$/.test(e.text);
177
+ if (key) map[key] = map[key] | 1 + iswrite;
178
+ }
179
+ }
180
+ }
181
+ var readed, writed;
182
+ for (var k in map) {
183
+ if (map[k] >> 1) {
184
+ if (!writed) writed = Object.create(null);
185
+ writed[k] = true;
186
+ }
187
+ if (map[k] & 1) {
188
+ if (!readed) readed = Object.create(null);
189
+ readed[k] = true;
190
+ }
191
+ }
192
+ for (var s of scope) {
193
+ if (s.isfunc && s.pass) {
194
+ var [writed0, readed0] = checkRefered(s);
195
+ var { pass, args } = s;
196
+ var amap = {};
197
+ for (var cx = 0, dx = pass.length; cx < dx; cx++) {
198
+ amap[args[cx]] = pass[cx];
199
+ }
200
+ for (var w in writed0) {
201
+ var id = renameId(w, amap);
202
+ if (id) writed[id] = true;
203
+ }
204
+ for (var r in readed0) {
205
+ var id = renameId(r, amap);
206
+ if (id) readed[id] = true;
207
+ }
208
+ }
209
+ }
210
+
211
+ return [writed, readed];
212
+ }
213
+
214
+ var getroot = function (pick) {
215
+ if (pick) {
216
+ var match = /^[^\.]+/.exec(pick);
217
+ if (match) match = match[0];
218
+ return match;
219
+ }
220
+ }
221
+
222
+ function washcode(code, pick) {
223
+ var avoid = getroot(pick);
224
+ var needs = Object.assign(Object.create(null), pick ? { [pick]: true } : code.envs);
225
+ var explist = createExpressList(code);
226
+ var maped = Object.create(null);
227
+ for (var exp of explist) {
228
+ exp.scoped = createScoped(exp, true);
229
+ if (avoid && avoid in exp.scoped.used) {
230
+ if (code.vars[avoid] && !code.envs[avoid] && !maped[avoid]) {
231
+ exp.saved = true;
232
+ maped[avoid] = true;
233
+ }
234
+ }
235
+ var [writed, readed] = checkRefered(exp.scoped);
236
+ exp.writed = writed;
237
+ exp.readed = readed;
238
+ }
239
+ var count = 0;
240
+ while (count < explist.length) {
241
+ var saved_count = count;
242
+ for (var exp of explist) {
243
+ if (exp.saved) continue;
244
+ if (!exp.first) {
245
+ exp.saved = true;
246
+ count++;
247
+ break;
248
+ }
249
+ var { writed, readed } = exp;
250
+ for (var w in writed) {
251
+ if (w === avoid) continue;
252
+ if (needs[w] || getroot(w) in code.envs) {
253
+ exp.saved = true;
254
+ for (var r in readed) {
255
+
256
+ var rs = r.split('.');
257
+ while (rs.length) {
258
+ needs[rs.join('.')] = true;
259
+ rs.pop();
260
+ }
261
+ }
262
+ count++;
263
+ break;
264
+ }
265
+ }
266
+ }
267
+ if (saved_count === count) break;
268
+ }
269
+ for (var cx = 0, dx = explist.length; cx < dx; cx++) {
270
+ var exp = explist[cx];
271
+ var prev = explist[cx - 1], next = explist[cx + 1];
272
+ if (!exp.first) {
273
+ if (!exp.saved) continue;
274
+ if (exp.length !== 1 || !prev && !next) continue;
275
+ if (exp[0].type === STAMP) {
276
+ if (prev && !prev.saved || next && !next.saved) {
277
+ exp.saved = false;
278
+ }
279
+ continue;
280
+ }
281
+ if (next && !next.saved) {
282
+ exp.saved = false;
283
+ }
284
+ continue;
285
+ }
286
+ if (!exp.saved) {
287
+ if (exp[0].type === STRAP && /^(let|var|const)$/.test(exp[0].text)) {
288
+ var save = false, inc = 2;
289
+ while (next && next[0].type === STAMP && /^,$/.test(next[0].text)) {
290
+ next.saved = false;
291
+ next = explist[cx + inc++];
292
+ if (!next) break;
293
+ if (next.saved) {
294
+ save = true;
295
+ break;
296
+ }
297
+ next = explist[cx + inc++];
298
+ }
299
+ exp.saved = save;
300
+ if (exp.saved) {
301
+ if (!prev.saved) prev.saved = true;
302
+ exp.splice(1, exp.length - 1, ' ');
303
+ patchExpress(exp);
304
+ }
305
+ }
306
+ }
307
+ }
308
+ explist = explist.filter(e => e.saved);
309
+ var text = explist.map(createString).join("");
310
+ return text;
311
+ }
312
+
313
+ module.exports = washcode;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * typescript:classPrivateFieldIn
3
+ * 这个文件由工具生成,请不要手动修改
4
+ *
5
+ * Efront Authors
6
+ * 2022-02-04T17:45:54.577Z
7
+ */
8
+ var __classPrivateFieldIn = (this && this.__classPrivateFieldIn) || function(state, receiver) {
9
+ if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
10
+ return typeof state === "function" ? receiver === state : state.has(receiver);
11
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "3.13.4",
3
+ "version": "3.14.0",
4
4
  "description": "一个开发工具,开放源代码,自带组件库和编译环境,可以用来开发web组件,web应用或nodejs模块,或做为已有代码的加密工具,也可以做为静态页面服务器或跨域中转服务器使用",
5
5
  "main": "public/efront.js",
6
6
  "directories": {