efront 3.34.12 → 3.35.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.
Files changed (81) hide show
  1. package/apps/moue/content//344/275/240/345/245/275/344/270/226/347/225/214.vue +21 -0
  2. package/apps/moue/content//344/275/240/345/245/275/345/274/200/345/217/221/350/200/205.html +1 -0
  3. package/apps/moue/{home/index.js → content//344/275/240/345/245/275/345/274/200/345/217/221/350/200/205.js} +4 -2
  4. package/apps/moue/content//344/275/240/345/245/275/345/274/200/345/217/221/350/200/205.less +4 -0
  5. package/apps/moue/home/index2.vue +97 -18
  6. package/apps/moue/index.html +1 -1
  7. package/coms/basic/ArrayFill.md +9 -0
  8. package/coms/basic/awaitable.md +10 -0
  9. package/coms/basic/backEach.md +7 -0
  10. package/coms/basic/combine.md +23 -0
  11. package/coms/basic/renderExpress.js +3 -2
  12. package/coms/basic/wait.js +5 -0
  13. package/coms/basic_/readme.md +5 -4
  14. package/coms/compile/#/350/257/264/346/230/216.md +1 -0
  15. package/coms/compile/Html.js +263 -0
  16. package/coms/compile/Html_test.js +5 -0
  17. package/coms/compile/Javascript.js +627 -0
  18. package/coms/compile/Program.js +666 -0
  19. package/coms/compile/autoenum.js +179 -0
  20. package/coms/compile/autoenum_test.js +17 -0
  21. package/coms/compile/autoeval.js +50 -0
  22. package/coms/compile/autoeval_test.js +28 -0
  23. package/coms/compile/autoiota.js +121 -0
  24. package/coms/compile/breakcode.js +83 -0
  25. package/coms/compile/common.js +1063 -0
  26. package/coms/compile/downLevel.js +901 -0
  27. package/coms/compile/downLevel_test.js +111 -0
  28. package/coms/compile/formatcode.js +57 -0
  29. package/coms/compile/iso8859.js +9 -0
  30. package/coms/compile/iso8859_test.js +2 -0
  31. package/coms/compile/keywords.js +6 -0
  32. package/coms/compile/namelist.js +154 -0
  33. package/coms/compile/namelist_test.js +7 -0
  34. package/coms/compile/polyfill.js +31 -0
  35. package/coms/compile/required.js +20 -0
  36. package/coms/compile/richcss.js +237 -0
  37. package/coms/compile/richcss_test.js +7 -0
  38. package/coms/compile/scanner.js +653 -0
  39. package/coms/compile/scanner2.js +202 -0
  40. package/coms/compile/scanner2_test.js +110 -0
  41. package/coms/compile/scanner_test.js +10 -0
  42. package/coms/compile/unstruct.js +712 -0
  43. package/coms/compile/unstruct_test.js +54 -0
  44. package/coms/compile/washcode.js +237 -0
  45. package/coms/compile/washcode_test.js +17 -0
  46. package/coms/docs/helps.js +71 -0
  47. package/coms/docs/markdown.js +248 -0
  48. package/coms/frame/route.js +1 -1
  49. package/coms/reptile/colored_console.js +2 -1
  50. package/coms/zimoli/cless.js +1 -0
  51. package/coms/zimoli/css.js +1 -9
  52. package/coms/zimoli/html.js +1 -1
  53. package/coms/zimoli/menu.js +1 -1
  54. package/coms/zimoli/menuItem.html +1 -1
  55. package/coms/zimoli/menuItem.js +1 -1
  56. package/coms/zimoli/render.js +14 -3
  57. package/coms/zimoli/text.js +1 -1
  58. package/coms/zimoli/tree.js +2 -4
  59. package/coms/zimoli/zimoli.js +39 -12
  60. package/docs/compare.md +5 -5
  61. package/docs/components.jsp +24 -0
  62. package/docs/index.html +18 -26
  63. package/docs/main.xht +207 -0
  64. package/docs/mark.xht +171 -0
  65. package/docs/version.jsp +3 -0
  66. package/docs/welcome.jsp +8 -0
  67. package/docs//345/221/275/344/273/244.xht +100 -0
  68. package/docs//347/211/210/346/234/254/350/257/264/346/230/216.md +9 -0
  69. package/docs//347/273/204/344/273/266.xht +111 -0
  70. package/package.json +1 -1
  71. package/public/efront.js +1 -1
  72. package/readme.md +8 -11
  73. package/apis/docs/getAllComponents.js +0 -69
  74. package/apps/moue/home/index.html +0 -1
  75. package/apps/moue/home/index.less +0 -0
  76. package/docs/data/iconfont-kugou.eot +0 -0
  77. package/docs/data/iconfont-kugou.otf +0 -0
  78. package/docs/data/iconfont-kugou.ttf +0 -0
  79. package/docs/data/iconfont-kugou.woff +0 -0
  80. package/docs/data/web.xml +0 -4742
  81. package/docs/main.js +0 -17
@@ -0,0 +1,901 @@
1
+ var scanner2 = require("./scanner2");
2
+ var strings = require("../basic/strings");
3
+ var Program = scanner2.Program;
4
+ var { STAMP, SCOPED, STRAP, EXPRESS, COMMENT, SPACE, PROPERTY, VALUE, QUOTED, number_reg, rename, getDeclared, skipAssignment, createString } = require("./common");
5
+ var link = function (a, b) {
6
+ if (a) a.next = b;
7
+ if (b) b.prev = a;
8
+ };
9
+ var splice1 = function (q, from, to, ...a) {
10
+ var index1 = from ? q.indexOf(from) : q.length;
11
+ var index2 = to ? q.indexOf(to) : q.length;
12
+ if (index1 > index2) index2 = index1;
13
+ if (a.length) {
14
+ link(q[index1 - 1], a[0]);
15
+ link(a[a.length - 1], q[index2]);
16
+ }
17
+ else if (index1 !== index2) {
18
+ link(q[index1 - 1], q[index2]);
19
+ }
20
+ var res = q.splice(index1, index2 - index1, ...a);
21
+ if (res[0]) delete res[0].prev, res.first = res[0];
22
+ if (res[res.length - 1]) delete res[res.length - 1].next;
23
+ q.first = q.find(o => o.type !== COMMENT && o.type !== SPACE);
24
+ return res;
25
+ };
26
+ var insert1 = function (q, r, ...a) {
27
+ splice1(q, r, r, ...a);
28
+ };
29
+ // 解构赋值
30
+ var killdec = function (queue, o, getobjname, _var = 'var', killobj, islet) {
31
+ var tmpname = '';
32
+ var index = 0;
33
+ var deep = 0;
34
+ var dec = function (d, i) {
35
+ var previx = tmpname;
36
+ var [k, v] = d;
37
+ var dp = 0;
38
+ if (typeof k === 'number' && k < 0) {
39
+ dp = 1;
40
+ k = `${tmpname}.length>${doged - k - 1}?${tmpname}[${tmpname}.length - ${-k}]:undefined`;
41
+ } else {
42
+ k = tmpname + k;
43
+ }
44
+ if (v.attributes) {
45
+ tmpname = k;
46
+ if (d.length === 2) {
47
+ if (dp) {
48
+ deep += dp;
49
+ var n = getobjname(deep);
50
+ insert1(queue, o, ...scanner2(`${index > 0 ? ',' : ''}${n}=${k}`));
51
+ index++;
52
+ k = tmpname = n;
53
+ }
54
+ dog(v);
55
+ deep -= dp;
56
+ }
57
+ else {
58
+ deep++;
59
+ var n = getobjname(deep)
60
+ insert1(queue, o, ...scanner2(`${index > 0 ? "," : ''}${n}=${tmpname}!==undefined?${tmpname}:`));
61
+ var skiped = splice1(d[2], d[3], d[4]);
62
+ killobj(skiped);
63
+ insert1(queue, o, ...skiped);
64
+ k = tmpname = n;
65
+ index++;
66
+ dog(v);
67
+ deep--;
68
+ }
69
+ if (tmpname === k) tmpname = previx;
70
+ return;
71
+ }
72
+
73
+ if (!tmpname) {
74
+ write(v, null, i < total - 1);
75
+ }
76
+ else if (d.length === 2) {
77
+ write(v, k, i < total - 1);
78
+ }
79
+ else {
80
+ write(v, `{k}!==undefined?${k}:`, i < total - 1);
81
+ var skiped = splice1(d[2], d[3], d[4]);
82
+ killobj(skiped);
83
+ insert1(queue, o, ...skiped);
84
+ }
85
+ index++;
86
+ };
87
+ var doged, total;
88
+ var write = function (name, value, hasnext) {
89
+ if (name === tmpname && hasnext) {
90
+ tmpname = getobjname(deep++);
91
+ insert1(queue, o, ...scanner2(`${index > 0 ? "," : ""}${tmpname}=${name}`));
92
+ index++;
93
+ }
94
+ if (!value && islet) value = 'undefined';
95
+ var text = `${index > 0 ? "," : ''}${name}${value ? '=' + value : ''}`;
96
+ insert1(queue, o, ...scanner2(text));
97
+ index++;
98
+ };
99
+ var dog = function (d) {
100
+ var _d = doged, _t = total;
101
+ total = d.attributes.length;
102
+ var at = total;
103
+ if (d["..."]) at = d["..."][1], total += 1;
104
+ else {
105
+ d.attributes.slice(0, at).forEach(dec);
106
+ return;
107
+ }
108
+ var rest = d.attributes.slice(at);
109
+ var head = d.attributes.slice(0, at);
110
+ for (var r of rest) if (r[1] === name) return d.attributes.forEach(dec);
111
+ var [name, at, a] = d["..."];
112
+ var dp = 0;
113
+ if (d.entry === '{') {
114
+ var map = Object.create(null);
115
+ d.attributes.forEach((b, i) => {
116
+ var a = b[0];
117
+ if (/^\./.test(a)) a = JSON.stringify(a.slice(1));
118
+ else if (/^\[[\s\S]*\]$/.test(a)) {
119
+ var t = scanner2(a)[0].first;
120
+ if (!t.next && (t.type === EXPRESS || t.type === QUOTED || t.type === VALUE)) {
121
+ a = t.text;
122
+ } else {
123
+ var n = getobjname(deep + dp++);
124
+ a = `${n}=(${a.slice(1, a.length - 1)})`;
125
+ b[0] = `[${n}]`;
126
+ a = n;
127
+ }
128
+ }
129
+ map[a] = a;
130
+ });
131
+ d.attributes.forEach(dec);
132
+ write(name, `rest_(${tmpname},[${Object.keys(map)}])`, false);
133
+ }
134
+ else {
135
+ doged = at + 1;
136
+ head.forEach(dec);
137
+ write(name, `Array.prototype.slice.call(${tmpname},${at}${a > at ? `,${at - a}` : ''})`, rest.length > 0);
138
+ doged = at + 1;
139
+ total = rest.length;
140
+ rest.forEach(dec);
141
+ }
142
+ doged = _d;
143
+ total = _t;
144
+ };
145
+ var single = function (d, p) {
146
+ if (d.attributes.length !== 1 || d["..."]) return;
147
+ var [k, v] = d.attributes[0];
148
+ p += k;
149
+ if (!v.attributes) return [p, v];
150
+ return single(v, p);
151
+ };
152
+ if (_var) insert1(queue, o, { type: STRAP, text: _var });
153
+ loop: while (o) {
154
+ var next = o.next;
155
+ tmpname = '';
156
+ if (!next || next.type !== STAMP || next.text !== '=') {
157
+ var hasnext = next && next.type === STAMP && next.text === ',';
158
+ if (o.type === SCOPED) {
159
+ var [o0] = splice1(queue, o, o = hasnext ? next.next : next);
160
+ var [[d]] = getDeclared(o0);
161
+ dog(d);
162
+ if (hasnext) continue loop;
163
+ }
164
+ else if (hasnext) {
165
+ if (islet) insert1(queue, next, ...scanner2('=undefined'));
166
+ o = next.next;
167
+ index++;
168
+ continue;
169
+ } else if (islet) insert1(queue, next, ...scanner2('=undefined'));
170
+ o = next;
171
+ break;
172
+ }
173
+ var objs = [];
174
+ do {
175
+ var next = o.next;
176
+ if (!next || next.type !== STAMP || next.text !== "=") {
177
+ if (tmpname) {
178
+ o = skipAssignment(o);
179
+ break;
180
+ }
181
+ if (!next || next.type === STAMP && /^[,;]$/.test(next.text)) {
182
+ if (o.type === EXPRESS && !/\./.test(o.text)) {
183
+ tmpname = o.text;
184
+ splice1(queue, o, o = next && next.text === ',' ? next.next : next);
185
+ }
186
+ }
187
+ break;
188
+ }
189
+ if (o.type === SCOPED) {
190
+ var [o0] = splice1(queue, o, o = next.next);
191
+ delete o0.next;
192
+ if (o0.length && getDeclared(o0).length > 0) objs.push(o0);
193
+ }
194
+ else if (o.type === EXPRESS && !/\.\[/.test(o.text)) {
195
+ if (!tmpname) tmpname = o.text, index++;
196
+ o = next.next;
197
+ }
198
+ else {
199
+ o = next.next;
200
+ }
201
+ } while (o);
202
+ if (!tmpname) {
203
+ if (objs.length === 1) {
204
+ var [[d]] = getDeclared(objs[0]);
205
+ var a = single(d, '');
206
+ if (a) {
207
+ insert1(queue, o, { type: EXPRESS, text: a[1] });
208
+ insert1(queue, o, { type: STAMP, text: "=" });
209
+ o = skipAssignment(o);
210
+ insert1(queue, o, ...scanner2(a[0]));
211
+ index++;
212
+ continue;
213
+ }
214
+ }
215
+ tmpname = getobjname();
216
+ insert1(queue, o, { type: EXPRESS, text: tmpname });
217
+ insert1(queue, o, { type: STAMP, text: "=" });
218
+ o = skipAssignment(o);
219
+ index++;
220
+ }
221
+ for (var o0 of objs) {
222
+ var [[d]] = getDeclared(o0);
223
+ dog(d);
224
+ }
225
+ }
226
+ return o;
227
+ };
228
+ // 键值对重组
229
+ var killmap = function (body, o, _getobjname, killobj) {
230
+ if (!o.length) return o.next;
231
+ var m = o.first;
232
+ var s = m;
233
+ while (m) {
234
+ if (m.type === EXPRESS) break;
235
+ s = m;
236
+ while (m && (m.type === STRAP || m.type === STAMP)) m = m.next;
237
+ if (m.isprop && (m.type === SCOPED || m.type === PROPERTY && /\[/.test(m.text) || m.short || m.next && m.next.type === SCOPED)) {
238
+ break;
239
+ }
240
+ m = m.next;
241
+ m = skipAssignment(m);
242
+ }
243
+ if (!m) return o.next;
244
+ m = s;
245
+ if (m.prev && m.prev.type === STAMP && m.prev.text === ',') {
246
+ splice1(body, m.prev, m);
247
+ }
248
+ var q, qf = o;
249
+ var next = o.next;
250
+
251
+ var initq = function () {
252
+ q = scanner2(`(${_getobjname()}=)`)[0];
253
+ var qo = splice1(body, qf, next, q);
254
+ insert1(q, null, ...qo);
255
+ insert1(q, null, { type: STAMP, text: ',' });
256
+ }
257
+ var define_ = Object.create(null);
258
+ var t;
259
+ while (m) {
260
+ if (m.type === EXPRESS) {
261
+ var s = m;
262
+ m = skipAssignment(m);
263
+ if (/^\.\.\./.test(s.text)) {
264
+ s.text = s.text.replace(/^\.\.\./, '');
265
+ if (q) {
266
+ t = scanner2(`extend(${_getobjname()},)`);
267
+ insert1(q, null, ...t);
268
+ }
269
+ else {
270
+ if (!t) {
271
+ t = scanner2(`extend()`);
272
+ var [o0] = splice1(body, o, next, t);
273
+ insert1(t[1], null, o0);
274
+ qf = t[0];
275
+ insert1(body, next, ...t);
276
+ }
277
+ insert1(t[1], null, { type: STAMP, text: "," });
278
+ }
279
+ var e = splice1(o, s, m);
280
+ insert1(t[1], null, ...e);
281
+ if (q) {
282
+ if (m) {
283
+ e = splice1(body, m, m = m.next);
284
+ killobj(e);
285
+ insert1(q, null, ...e);
286
+ }
287
+ }
288
+ if (m && m.type === STAMP && m.text === ',') splice1(o, m, m = m.next);
289
+ }
290
+ continue;
291
+ }
292
+ if (!q) initq();
293
+ var [prop, m] = getprop(o, m);
294
+ if (!prop.value.length) insert1(prop.value, null, { type: EXPRESS, text: prop.name })
295
+ else killobj(prop.value);
296
+ setprop(prop, _getobjname(), define_, q);
297
+ }
298
+ if (q) insert1(q, null, ...scanner2(',' + _getobjname()));
299
+ return next;
300
+ };
301
+ var getprop = function (o, m) {
302
+ var prop = {};
303
+ var s = m;
304
+ while (m && (m.type === STRAP || m.type === STAMP)) {
305
+ prop[m.text] = true;
306
+ m = m.next;
307
+ }
308
+ if (m && (m.type === PROPERTY || m.isprop)) {
309
+ prop.name = createString([m]);
310
+ if (m.short) {
311
+ prop.short = true;
312
+ prop.value = scanner2(prop.name);
313
+ if (m.next) insert1(prop.value, null, { type: STAMP, text: ',' });
314
+ }
315
+ if (prop.get || prop.set) {
316
+ if (!/^[\d\.'"\[]/.test(prop.name)) prop.name = strings.encode(prop.name);
317
+ }
318
+ else if (/^['"`\d\.]/.test(prop.name)) {
319
+ prop.name = `[${prop.name}]`;
320
+ }
321
+ else if (!/^[\[]/.test(prop.name)) {
322
+ prop.name = "." + prop.name.trim();
323
+ }
324
+ m = m.next;
325
+ }
326
+ if (m && m.type === SCOPED && m.entry === '(') {
327
+ prop.sfunc = true;
328
+ }
329
+ else {
330
+ prop.sfunc = false;
331
+ if (m && /[\=\:]/.test(m.text)) m = m.next;
332
+ }
333
+ splice1(o, s, m);
334
+ var s = m;
335
+ if (m && prop.sfunc !== false && m.type === SCOPED && m.entry === '(') {
336
+ m = m.next;
337
+ if (m && m.type === SCOPED && m.entry === "{") m = m.next;
338
+ }
339
+ else m = skipAssignment(m);
340
+ if (m && !m.isprop) m = m.next;
341
+ if (!prop.short) prop.value = splice1(o, s, m);
342
+ else splice1(o, s, m);
343
+ return [prop, m];
344
+ };
345
+ var setprop = function (prop, k, d, q) {
346
+ if (prop.sfunc !== false) insert1(prop.value, prop.value[0], ...scanner2(`${prop.async ? "async " : ""}function${prop["*"] ? "*" : ''}`));
347
+ if (prop.get || prop.set) {
348
+ let end = prop.value[prop.value.length - 1];
349
+ if (end.type === STAMP && /[,;]/.test(end.text)) prop.value.pop();
350
+ if (!d[prop.name]) {
351
+ let tmp = scanner2(`Object.defineProperty(${k},${prop.name},{})`);
352
+ insert1(q, null, ...tmp);
353
+ if (end.type === STAMP && /^[,;]/.test(end.text)) insert1(q, null, end);
354
+ d[prop.name] = tmp[1][4];
355
+ }
356
+ if (d[prop.name].length) insert1(d[prop.name], null, { type: STAMP, text: ',' });
357
+ insert1(d[prop.name], null, { type: PROPERTY, text: prop.get ? "get" : "set" });
358
+ insert1(d[prop.name], null, { type: STAMP, text: ":" });
359
+ insert1(d[prop.name], null, ...prop.value);
360
+ }
361
+ else {
362
+ insert1(q, null, ...scanner2(`${k}${prop.name}=`));
363
+ insert1(q, null, ...prop.value);
364
+ }
365
+ }
366
+ var killcls = function (body, o, getname_) {
367
+ var extends_ = [];
368
+ var start = o;
369
+ var decName = !o.isExpress && o.next.type === EXPRESS && o.next.text;
370
+ while (o) {
371
+ o = o.next;
372
+ if (!o) break;
373
+ var name = '';
374
+ if (o.type === EXPRESS) {
375
+ name = o.text;
376
+ o = o.next;
377
+ }
378
+ else {
379
+ name = '';
380
+ }
381
+ extends_.push(name);
382
+ if (o.type === STRAP && o.text === 'extends') {
383
+ o = o.next;
384
+ if (!o) break;
385
+ }
386
+ if (o.type !== STRAP || o.text !== 'class') break;
387
+ }
388
+ var func = scanner2("function(){}()");
389
+ var [, head, defines, invokes] = func;
390
+ var foot = [];
391
+ var base = '';
392
+ if (o) {
393
+ var next = o;
394
+ while (next && !next.isClass) next = next.next;
395
+ base = createString(splice1(body, o, o = next));
396
+ }
397
+ if (base === 'Array') base = 'Array2';
398
+ var index = 0;
399
+ while (o && o.isClass) {
400
+ var m = o.first;
401
+ var name = extends_.pop();
402
+ if (!name && (base || extends_.length)) name = getname_('class' + index);
403
+ var assign = [];
404
+ var constructor = scanner2('(){}');
405
+ var define_ = Object.create(null);
406
+ var static_ = Object.create(null);
407
+ var clz = { name };
408
+ while (m) {
409
+ var [prop, m] = getprop(o, m);
410
+ if (!prop.value.length) prop.value = scanner2('undefined;');
411
+ var k = prop.static ? clz.name : `${clz.name}.prototype`;
412
+ var d = prop.static ? static_ : define_;
413
+ if (prop.get || prop.set || prop.sfunc !== false) {
414
+ setprop(prop, k, d, defines);
415
+ }
416
+ else if (/^(?:constructor|(['"`])constructor\1)/.test(prop.name)) {
417
+ constructor = prop.value;
418
+ }
419
+ else {
420
+ insert1(assign, null, ...scanner2(`this${prop.name}=`));
421
+ insert1(assign, null, ...prop.value);
422
+ }
423
+ }
424
+ if (invokes.length) insert1(invokes, null, { type: STAMP, text: ',' });
425
+ insert1(invokes, null, ...scanner2('function ' + name));
426
+ insert1(constructor[1], constructor[1][0], ...assign);
427
+ insert1(invokes, null, ...constructor);
428
+ o = o.next;
429
+ if (base) insert1(foot, null, ...scanner2(`${foot.length ? ";" : ""}extends_(${clz.name},${base})`));
430
+ base = clz.name;
431
+ if (clz.name) insert1(head, null, ...scanner2(`${head.length ? ',' : ''}${clz.name}`));
432
+ index++;
433
+ }
434
+ insert1(defines, null, ...foot);
435
+ if (head.length > 1 || start.isExpress) {
436
+ insert1(defines, null, ...scanner2(`; return ${clz.name}`))
437
+ if (decName) insert1(func, func[0], ...scanner2(`var ${decName}=`));
438
+ splice1(body, start, o, ...func);
439
+ }
440
+ else {
441
+ splice1(body, start, o, ...invokes);
442
+ if (defines.length) {
443
+ insert1(body, o, { text: ';', type: STAMP });
444
+ insert1(body, o, ...defines);
445
+ }
446
+ }
447
+ return o;
448
+ };
449
+ var prevInvoke = function (o) {
450
+ while (o) {
451
+ var prev = o.prev;
452
+ if (!prev) break;
453
+ if (o.type === EXPRESS) {
454
+ if (prev.type === STRAP && /^(class|function|new|extends)$/.test(prev.text));
455
+ else if (!/^\.|\[/.test(o.text) || /^\.\.\./.test(o.text)) break;
456
+ }
457
+ else if (o.type === VALUE || o.type === QUOTED) break;
458
+ else if (prev.type === STAMP) {
459
+ if (prev.text === '*') {
460
+ if (prev.prev && prev.prev.type !== STRAP) break;
461
+ }
462
+ else if (prev.text !== "=>" || o.type !== SCOPED || o.entry !== '{') {
463
+ break;
464
+ }
465
+ }
466
+ else if (prev.type === STRAP) break;
467
+ o = prev;
468
+ }
469
+ return o;
470
+ };
471
+ // 数组或参数展开
472
+ var killspr = function (body, o, _getobjname, setsolid, killobj) {
473
+ var m = o.first;
474
+ if (!m) return o.next;
475
+ var index = 0;
476
+ var spr = function () {
477
+ var s = m;
478
+ s.text = s.text.replace(/^\.\.\./, '');
479
+ m = skipAssignment(m);
480
+ var q = scanner2(`Array.prototype.slice.call()`);
481
+ var v = splice1(o, s, m);
482
+ if (m) splice1(o, m, m = m.next);
483
+ killobj(v);
484
+ insert1(q[1], null, ...v);
485
+ setsolid(q, q[0]);
486
+ return q;
487
+ };
488
+ var killnext = function (m) {
489
+ while (m && (m.type !== STAMP || m.text !== ',')) {
490
+ if (m.length) killobj(m);
491
+ m = m.next;
492
+ }
493
+ return m;
494
+ }
495
+ while (m) {
496
+ if (m.type === EXPRESS && /^\.\.\./.test(m.text)) break;
497
+ m = killnext(m);
498
+ if (m) m = m.next;
499
+ index++;
500
+ }
501
+ if (!m) return o.next;
502
+ var c = scanner2('.concat()');
503
+ var next = o.next;
504
+ if (o.entry === '(') {
505
+ var r = prevInvoke(o);
506
+ if (r === o);
507
+ else if (r === o.prev && r.type === EXPRESS && !/\.[\s\S]*\./.test(r.text)) {
508
+ var p = r;
509
+ var n = /\./.test(p.text) && p.text.replace(/\.[^\.]*$/, '') || "null";
510
+ insert1(o, o.first, ...scanner2(n + ","));
511
+ }
512
+ else {
513
+ var p = o.prev;
514
+ if (p.type === EXPRESS) {
515
+ var n = p.text.replace(/^[\s\S]*?(\.[^\.]*)$/, "$1");
516
+ p.text = p.text.replace(/\.[^\.]*$/, "");
517
+ insert1(body, o, { type: EXPRESS, text: n });
518
+ }
519
+ else {
520
+ // p = p.prev;
521
+ }
522
+ insert1(o, o.first, ...scanner2(`${_getobjname()},`));
523
+ var h = scanner2(`(${_getobjname()}=)`);
524
+ insert1(h[0], null, ...splice1(body, r, p));
525
+ insert1(body, p, ...h);
526
+ if (!p.text) {
527
+ splice1(body, p, p.next);
528
+ }
529
+ }
530
+ insert1(body, o, ...scanner2('.apply'));
531
+ var m1 = skipAssignment(m);
532
+ if (index > 0 || m1 && m1.next) {
533
+ var h = splice1(o, o.first.next.next, null);
534
+ var c = scanner2(`[]`);
535
+ insert1(c[0], null, ...h);
536
+ killobj(c);
537
+ insert1(o, null, ...c);
538
+ return next;
539
+ };
540
+ killnext(m);
541
+ m.text = m.text.replace(/^\.\.\./, '');
542
+ return next;
543
+ }
544
+ if (index > 0) {
545
+ if (m) splice1(o, m.prev, m);
546
+ insert1(body, next, ...c);
547
+ insert1(c[1], null, ...spr());
548
+ }
549
+ else {
550
+ splice1(body, o, next, ...spr());
551
+ if (m) insert1(body, next, ...c);
552
+ }
553
+ var d;
554
+ while (m) {
555
+ if (m.type === EXPRESS && /^\.\.\./.test(m.text)) {
556
+ if (c[1].length) insert1(c[1], null, { type: STAMP, text: "," });
557
+ insert1(c[1], null, ...spr());
558
+ d = null;
559
+ continue;
560
+ }
561
+ var s = m;
562
+ m = killnext(m);
563
+ if (!d) {
564
+ d = scanner2('[]');
565
+ if (c[1].length) insert1(c[1], null, { type: STAMP, text: "," });
566
+ insert1(c[1], null, ...d);
567
+ }
568
+ if (d[0].length) insert1(d[0], null, { type: STAMP, text: "," });
569
+ insert1(d[0], null, ...splice1(o, s, m));
570
+ if (m) splice1(o, m, m = m.next);
571
+ }
572
+ return next;
573
+ };
574
+
575
+ var killobj = function (body, getobjname, getname_, setsolid, deep = 0) {
576
+ var o = body.first;
577
+ var _getdeep = function () {
578
+ deep++;
579
+ _getdeep = function () {
580
+ return deep;
581
+ }
582
+ return deep;
583
+ };
584
+ var _getobjname = function () {
585
+ return getobjname(_getdeep());
586
+ };
587
+ var _getdeepname = function (i) {
588
+ return getobjname(deep + i);
589
+ };
590
+ var deepkill = function (o) {
591
+ killobj(o, getobjname, getname_, setsolid, deep);
592
+ };
593
+ while (o) {
594
+ var islet = false;
595
+ if (o.type === STRAP) {
596
+ switch (o.text) {
597
+ case "await":
598
+ body.await = true;
599
+ o = o.next;
600
+ break;
601
+ case "let":
602
+ case "const":
603
+ islet = body.keeplet !== false;
604
+ case "var":
605
+ splice1(body, o, o = o.next);
606
+ o = killdec(body, o, _getdeepname, 'var', deepkill, islet);
607
+ break;
608
+ case "class":
609
+ o = killcls(body, o, getname_);
610
+ break;
611
+ case "function":
612
+ o = o.next;
613
+ if (o && o.type === STAMP) o = o.next;
614
+ if (o && o.type === EXPRESS) o = o.next;
615
+ if (o && o.type === SCOPED) o = o.next;// ()
616
+ if (o && o.type === SCOPED) o = o.next;// {}
617
+ break;
618
+ default:
619
+ o = o.next;
620
+ }
621
+ continue;
622
+ }
623
+ else if (o.type === SCOPED) {
624
+ if (o.isObject) {
625
+ if (o.next && o.next.type === STAMP && o.next.text === '=') {
626
+ o = killdec(body, o, _getdeepname, '', deepkill);
627
+ continue;
628
+ }
629
+ else {
630
+ o = killmap(body, o, _getobjname, deepkill);
631
+ continue;
632
+ }
633
+ }
634
+ else if (o.entry === '[') {
635
+ if (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') {
636
+ o = killdec(body, o, _getdeepname, '', deepkill);
637
+ }
638
+ else {
639
+ o = killspr(body, o, _getobjname, setsolid, deepkill);
640
+ }
641
+ continue;
642
+ }
643
+ else if (o.entry === '(') {
644
+ if (o.next && o.next.type === STAMP && o.next.text === '=>');
645
+ else if (o.prev && o.prev.type === STRAP);
646
+ else if (!o.prev || o.prev.type === STAMP || o.prev.type === STRAP) {
647
+ deepkill(o);
648
+ }
649
+ else {
650
+ o = killspr(body, o, _getobjname, setsolid, deepkill);
651
+ continue;
652
+ }
653
+ }
654
+ }
655
+ else if (o.type === STAMP) {
656
+ if (o.text === "=>") {
657
+ o = unarrow(body, o, killobj, getname_);
658
+ continue;
659
+ }
660
+ }
661
+ o = o.next;
662
+ }
663
+ };
664
+ var import_ = function () { };
665
+ var export_ = function () { };
666
+
667
+ // 字面量 false|true|null|Infinity|NaN|undefined|arguments|this|eval|super
668
+ var unfalse = function () { };
669
+ var unyield = function () { };
670
+ var unawait = function (body, awaits, getname_) {
671
+ };
672
+ var unforof = function (o, gettempname_, getnextname_) {
673
+ var m = o.first;
674
+ var hasdeclare = false;
675
+ if (m.type === STRAP) {
676
+ m = m.next;
677
+ hasdeclare = true;
678
+ }
679
+
680
+ var n = m.next;
681
+ if (n.type !== STRAP || n.text !== 'of') {
682
+ return o.next;
683
+ }
684
+ var f = n.next;
685
+ var p = splice1(o, m, m = n)[0];
686
+ if (hasdeclare) {
687
+ var [d] = getDeclared(p);
688
+ insert1(o, m, ...scanner2(d.map(a => a.text).join(",")));
689
+ }
690
+ splice1(o, m);
691
+ var iname = gettempname_();
692
+ insert1(o, null, ...scanner2(`${iname}=0`));
693
+ var oname;
694
+ if (f.type === EXPRESS && !/\./.test(oname)) {
695
+ oname = f.text;
696
+ }
697
+ else {
698
+ oname = getnextname_();
699
+ insert1(o, null, ...scanner2(`,${oname}=`));
700
+ insert1(o, null, ...splice1(o, f));
701
+ }
702
+ insert1(o, null, ...scanner2(`;${iname}<${oname}.length&&`));
703
+ var q = scanner2(`(=${oname}[${iname}],true)`)[0];
704
+ insert1(q, q[0], p);
705
+ insert1(o, null, q);
706
+ insert1(o, null, ...scanner2(`;${iname}++`));
707
+
708
+ };
709
+ var unarrow = function (body, o, killobj, getname_) {
710
+ var p = o.prev;
711
+ var n = o.next;
712
+ var b = n, h = p;
713
+ insert1(body, p || o, ...scanner2("function"));
714
+ if (p && p.type !== SCOPED || p.entry !== "(") {
715
+ h = scanner2("()");
716
+ insert1(h[0], null, ...splice1(body, p, o));
717
+ h = h[0];
718
+ insert1(body, o, h);
719
+ }
720
+ if (n.type !== SCOPED || n.text !== "{") {
721
+ var nn = skipAssignment(n);
722
+ b = scanner2('{}');
723
+ b = b[0];
724
+ killarg(h, b, getname_);
725
+ insert1(b, null, { type: STRAP, text: "return" });
726
+ insert1(b, null, ...splice1(body, n, nn));
727
+ insert1(body, o, b);
728
+ killobj(b);
729
+ }
730
+ splice1(body, o, o = o && o.next);
731
+ return o;
732
+ };
733
+ var getname = function (vars, envs, k) {
734
+ if (!(k in vars) && !(k in envs)) return vars[k] = true, k;
735
+ var inc = /\d+$/.exec(k);
736
+ if (inc) k = k.slice(0, k.length - inc[0].length), inc = 1 + +inc[0];
737
+ else inc = 0;
738
+ while ((k + inc) in vars) inc++;
739
+ vars[k + inc] = true;
740
+ return k + inc;
741
+ };
742
+ var killarg = function (head, body, _getname) {
743
+ var argcodes = [];
744
+ var o = head.first;
745
+ var index = 0;
746
+ var collect = 0, cname, anames = [];
747
+ while (o) {
748
+ var aname;
749
+ if (o.type === SCOPED) {
750
+ aname = _getname(head.length > 1 ? 'arg' + index : 'arg');
751
+ var dec = splice1(head, o, o = o.next, { type: EXPRESS, text: aname });
752
+ dec = `${createString(dec)}=${aname}`;
753
+ if (/^var\s/.test(argcodes[argcodes.length - 1])) argcodes[argcodes.length - 1] += ',' + dec;
754
+ else argcodes.push(`var ` + dec);
755
+ }
756
+ else if (o.type === EXPRESS) {
757
+ aname = o.text;
758
+ if (/^\.\.\./.test(aname)) {
759
+ cname = aname.replace(/^\.\.\./, '');
760
+ splice1(head, o.prev ? o.prev : o, o = o.next);
761
+ collect = index + 1;
762
+ continue;
763
+ }
764
+ o = o.next;
765
+ if (collect) {
766
+ anames.push(aname);
767
+ }
768
+ index++;
769
+ }
770
+ if (o && o.type === STAMP) {
771
+ if (o.text === ',') {
772
+ o = o.next; continue;
773
+ }
774
+ var start = o;
775
+ while (o && (o.type !== STAMP || o.text !== ',')) o = o.next;
776
+ var assign = splice1(head, start, o);
777
+ argcodes.push(`if(${aname}===undefined)${aname}${createString(assign)}`);
778
+ }
779
+
780
+ }
781
+ if (collect > 0) {
782
+ collect--;
783
+ argcodes.unshift.apply(argcodes, anames.map((a, i) => {
784
+ if (a === cname) cname = '';
785
+ var n = anames.length - i;
786
+ return `${a}=arguments.length>${collect + n - 1}?arguments[arguments.length - ${n}]:undefined`;
787
+ }));
788
+
789
+ if (cname) argcodes.unshift(`var ${cname}=Array.prototype.slice.call(arguments,${collect}${index > collect ? `,${collect - index}` : ""})`);
790
+ }
791
+ if (argcodes.length) insert1(body, null, ...scanner2(argcodes.join(";") + ";"));
792
+ };
793
+
794
+ var down = function (scoped) {
795
+ var vars = Object.assign(Object.create(null), scoped.vars);
796
+ var objnames = [];
797
+
798
+ var _getname = getname.bind(null, vars, scoped.envs);
799
+ var gettmpname = function (i = 0) {
800
+ if (!objnames[i]) objnames[i] = _getname("_");
801
+ return objnames[i];
802
+ };
803
+ var killvar = function (scoped) {
804
+ if (!scoped.body) return;
805
+ };
806
+ // let 转 var
807
+ var killlet = function (scoped) {
808
+ for (var k in scoped.lets) {
809
+ var nk = _getname(k);
810
+ if (nk !== k) rename(scoped.used, k, nk);
811
+ }
812
+ };
813
+ var precode = function (text) {
814
+ var codelist = typeof text === 'string' ? scanner2(text) : text;
815
+ var first = codelist[0];
816
+ var last = codelist[codelist.length - 1];
817
+ var top = scoped.first;
818
+ if (top) top.prev = last;
819
+ if (last) last.next = top;
820
+ if (first) delete first.prev;
821
+ scoped.body.first = first || top;
822
+ scoped.body.unshift.apply(scoped.body, codelist);
823
+ };
824
+
825
+ var argcodes = [];
826
+ var solidmap = {};
827
+ var setsolid = function (q, o) {
828
+ var k = o.text;
829
+ if (!/\.[\s\S]+\./.test(k)) return;
830
+ var c = k.replace(/^[\s\S]*?(\.[^\.]*$)/, '$1');
831
+ k = k.replace(/^([\s\S]*?)\.[^\.]*$/, '$1');
832
+ if (!solidmap[k]) {
833
+ solidmap[k] = [q, o];
834
+ return;
835
+ }
836
+ if (typeof solidmap[k] !== 'string') {
837
+ var n = k.replace(/^[\s\S]*?([^\.]*)$/, "$1");
838
+ n = _getname(n + "_");
839
+ var [q, b] = solidmap[k];
840
+ b.text = `(${n} = ${k})${c}`;
841
+ solidmap[k] = n;
842
+ }
843
+ o.text = solidmap[k] + c;
844
+ };
845
+ if (scoped.used.this) {
846
+ let tn = _getname("this_");
847
+ rename(scoped.used, "this", tn);
848
+ argcodes.push(`var ${tn}=this;`);
849
+ }
850
+ if (scoped.used.arguments) {
851
+ let an = _getname("arguments_");
852
+ rename(scoped.used, "arguments", an);
853
+ argcodes.push(`var ${an}=arguments;`);
854
+ }
855
+ var fordeep = 0;
856
+ var kill = function (scoped) {
857
+ if (scoped.isfunc) return down(scoped);
858
+ killlet(scoped);
859
+ var saveddeep = fordeep;
860
+ var _getlocal = getname.bind(null, scoped.lets, scoped.envs);
861
+ var getdeepname = function () {
862
+ return gettmpname(--fordeep);
863
+ };
864
+ a: if (scoped.head) {
865
+ var hp = scoped.head.prev;
866
+ if (hp && hp.type === STRAP) {
867
+ if (hp.text === 'for') {
868
+ unforof(scoped.head, getdeepname, getdeepname);
869
+ }
870
+ else if (hp.text === 'catch') {
871
+ killarg(scoped.head, scoped.body, _getname);
872
+ break a;
873
+ }
874
+ }
875
+ killobj(scoped.head, gettmpname, _getlocal, setsolid);
876
+ }
877
+ if (scoped.body) killobj(scoped.body, gettmpname, _getlocal, setsolid);
878
+ if (scoped.length) scoped.forEach(kill);
879
+ fordeep = saveddeep;
880
+ };
881
+ if (scoped.isfunc) {
882
+ killlet(scoped);
883
+ if (scoped.head) killarg(scoped.head, scoped.body, _getname);
884
+ if (argcodes.length) precode(argcodes.join(";") + ";");
885
+ if (scoped.body) scoped.body.keeplet = false, killobj(scoped.body, gettmpname, _getname, setsolid);
886
+ scoped.forEach(kill);
887
+ }
888
+ else {
889
+ kill(scoped);
890
+ }
891
+ Program.prototype.relink(scoped.body);
892
+ };
893
+ /**
894
+ * @param {Program} code
895
+ */
896
+ function downLevel(data) {
897
+ var code = scanner2(data);
898
+ down(code.scoped);
899
+ return code.toString();
900
+ }
901
+ module.exports = downLevel;