efront 4.14.3 → 4.15.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,3 +1,18 @@
1
+ - zh-CN: 无法找到可用的$1支持库
2
+ en: Unable to find available $1 support library
3
+
4
+ - zh-CN: 无扩展名的
5
+ en: without an extension
6
+
7
+ - zh-CN: 扩展名为$1的
8
+ en: whose extension is $1
9
+
10
+ - zh-CN: 不支持编译$1文件
11
+ en: Does not support compiling files $1
12
+
13
+ - zh-CN: 文件$1使用了不存在的模块$2
14
+ en: File $1 used a non-existent module $2
15
+
1
16
  - zh-CN: 未知错误!
2
17
  en: Unknown error!
3
18
 
@@ -243,6 +243,7 @@ var killCircle = function () {
243
243
  for (var k of module_keys) flushTree(tree, k);
244
244
  }
245
245
  };
246
+ var multiModules = Object.create(null);
246
247
  // -->
247
248
  var hasOwnProperty = {}.hasOwnProperty;
248
249
  var loadModule = function (url, then, prebuilds = {}) {
@@ -509,7 +510,7 @@ var createModule = function (exec, originNames, compiledNames, prebuilds = {}) {
509
510
  });
510
511
  };
511
512
 
512
- var init = function (url, then, prebuilds) {
513
+ var init = function (url, then, prebuilds, keeppage) {
513
514
  // then = bindthen(then);
514
515
  var key = keyprefix + url;
515
516
  if (prebuilds) {
@@ -626,7 +627,16 @@ var init = function (url, then, prebuilds) {
626
627
  }
627
628
  var filteredArgs = prebuilds ? args.filter(a => !hasOwnProperty.call(prebuilds, a)) : args;
628
629
 
629
- var saveAsModule = filteredArgs.length === args.length;
630
+ var saveAsModule = keeppage || filteredArgs.length === args.length;
631
+ if (saveAsModule) {
632
+ if (penddings[key]) {
633
+ penddings[key].then(then);
634
+ return;
635
+ }
636
+ }
637
+ //<!--
638
+ else if (!multiModules[key]) multiModules[key] = args.filter(k => hasOwnProperty.call(prebuilds, k)).join("、"), console.info(`${key}%c引用了非单例的%c${multiModules[key]}%c,无法存储为单例`, 'color:gray', 'color:green', 'color:gray')
639
+ //-->
630
640
  if (!filteredArgs.length) {
631
641
  var argValues = args.map(a => prebuilds[a]).concat(module.strs);
632
642
  argValues.push(module.argNames || []);
@@ -634,12 +644,6 @@ var init = function (url, then, prebuilds) {
634
644
  then(created);
635
645
  return;
636
646
  }
637
- if (saveAsModule) {
638
- if (penddings[key]) {
639
- penddings[key].then(then);
640
- return;
641
- }
642
- }
643
647
  var created = createModule(module, args, module.argNames, prebuilds);
644
648
  if (isThenable(created)) {
645
649
  if (saveAsModule) {
@@ -1,3 +1,4 @@
1
+ Promise.resolve(init("pinyin")).then(py =>mark.setPinyin(py));
1
2
 
2
3
  function minusPower(a, b) {
3
4
  return a.$power - b.$power >= 0;
@@ -1,5 +1,4 @@
1
1
  var _pinyin = null;
2
- Promise.resolve(init("pinyin")).then(py => _pinyin = py);
3
2
  var isABC = a => /^[a-zA-Z]$/.test(a);
4
3
  var couple = function (source, marker, pinyin) {
5
4
  var isLike = function () {
@@ -213,6 +212,9 @@ mark.setTag1 = setTag1;
213
212
  mark.setTag2 = setTag2;
214
213
  mark.power = power;
215
214
  mark.power2 = power2;
215
+ mark.setPinyin = function (py) {
216
+ _pinyin = py;
217
+ };
216
218
  mark.compare = function (a, b) {
217
219
  var c = compare(a, b);
218
220
  c.power = c.pop();
@@ -1,4 +1,5 @@
1
1
  function readCSV(data) {
2
+ data = String(data);
2
3
  var reg = /""?|,|\r\n|\r|\n|\u2028|\u2029/g;
3
4
  var str = [];
4
5
  var instr = false;
@@ -11,32 +11,46 @@ var scan_string = function (str, start) {
11
11
  return false;
12
12
  if (match[0] === "\"") break;
13
13
  }
14
+ data = strings.decode(str.slice(start, reg.lastIndex));
14
15
  return reg.lastIndex;
15
16
  };
16
17
  var scan_number = function (str, start) {
17
- if (str.charAt(start) === "-")
18
- start++;
19
- var reg = /(?:0|[1-9]\d*)(?:\.\d*)?(e\-?\d+)?/g;
18
+ var reg = /[\+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(e[\-\+]?\d+)?/g;
20
19
  reg.lastIndex = start;
21
20
  var match = reg.exec(str);
22
- if (!match)
23
- return false;
24
- return reg.lastIndex;
21
+ if (match && match.index === start) {
22
+ data = +match[0];
23
+ return reg.lastIndex;
24
+ }
25
+ return false;
25
26
  };
26
27
  var scan_null = function (str, start) {
27
28
  var reg = /null|false|true/g;
28
29
  reg.lastIndex = start;
29
30
  var match = reg.exec(str);
30
- if (match && match.index === start)
31
+ if (match && match.index === start) {
32
+ switch (match[0].charAt(0)) {
33
+ case "n":
34
+ data = null;
35
+ break;
36
+ case "f":
37
+ data = false;
38
+ break;
39
+ case "t":
40
+ data = true;
41
+ }
31
42
  return reg.lastIndex;
43
+ }
32
44
  return false;
33
45
  };
34
46
  var scan_blank = function (str, start) {
35
- var reg = /[^\s]/g;
47
+ var reg = /\/\/[\s\S]*?([\r\n\u2028\u2029]|$)|\/\*[\s\S]*?\*\/|[^\s]/g;
36
48
  reg.lastIndex = start;
37
- var match = reg.exec(str);
38
- if (match)
39
- return match.index;
49
+ while (reg.lastIndex < str.length) {
50
+ var match = reg.exec(str);
51
+ if (!match) return str.length;
52
+ if (match[0].length === 1) return match.index;
53
+ }
40
54
  return str.length;
41
55
  };
42
56
  var _safeparse = function (str, start) {
@@ -52,6 +66,8 @@ var _safeparse = function (str, start) {
52
66
  var end = str.length;
53
67
  start++;
54
68
  if (start >= end) return false;
69
+ var prop;
70
+ var data1 = {};
55
71
  while (start < end) {
56
72
  start = _safeparse(str, start);
57
73
  if (start === false)
@@ -61,10 +77,12 @@ var _safeparse = function (str, start) {
61
77
  if (str.charAt(start) !== ":")
62
78
  return false;
63
79
  start++;
80
+ prop = data;
64
81
  start = _safeparse(str, start);
65
82
  if (start === false)
66
83
  return start;
67
84
  start = scan_blank(str, start);
85
+ data1[prop] = data;
68
86
  if (str.charAt(start) === ",") {
69
87
  start++;
70
88
  continue;
@@ -75,16 +93,19 @@ var _safeparse = function (str, start) {
75
93
  start++;
76
94
  break;
77
95
  }
96
+ data = data1;
78
97
  break;
79
98
  case "[":
80
99
  var end = str.length;
81
100
  start++;
82
101
  if (start >= end) return false;
102
+ var data1 = [];
83
103
  while (start < end) {
84
104
  start = _safeparse(str, start);
85
105
  if (start === false)
86
106
  return start;
87
107
  start = scan_blank(str, start);
108
+ data1.push(data);
88
109
  if (str.charAt(start) === ",") {
89
110
  start++;
90
111
  continue;
@@ -95,6 +116,7 @@ var _safeparse = function (str, start) {
95
116
  start++;
96
117
  break;
97
118
  }
119
+ data = data1;
98
120
  break;
99
121
  case "n":
100
122
  case "f":
@@ -108,11 +130,14 @@ var _safeparse = function (str, start) {
108
130
  return start;
109
131
  return scan_blank(str, start);
110
132
  };
133
+ var data = null;
111
134
  var parse = function (string) {
112
135
  string = String(string);
113
136
  var parsed = _safeparse(string, 0);
114
137
  if (parsed === string.length) {
115
- return new Function("return " + string)();
138
+ var result = data;
139
+ data = null;
140
+ return result;
116
141
  } else {
117
142
  throw parse_failed_error_message;
118
143
  }
@@ -162,6 +162,15 @@ var test2 = function (JSON) {
162
162
  return { name: o.name };
163
163
  }
164
164
  assert(unicode(JSON.stringify(data, filter, 4)), JSON0.stringify(data, filter, 4));
165
+ assert(unicode(JSON.stringify(JSON.parse(JSON.stringify(data)))), unicode(JSON0.stringify(data)))
166
+ assert(JSON.parse(`/**/1`), 1)
167
+ assert(JSON.parse(`/**/"1"`), "1")
168
+ assert(JSON.parse(`"1"//`), "1")
169
+ assert(JSON.parse(`["1"//\r\n,2]`), ["1", 2])
170
+ assert(JSON.parse(`{"1"/*a*/:\r\n2}`), { "1": 2 })
171
+ assert(JSON.parse(`{"1":\r\n/*a*/2}`), { "1": 2 })
172
+ assert(JSON.parse(`{/*a*/"1":\r\n2}`), { "1": 2 })
173
+ assert(JSON.parse(`{"1/*a*/":\r\n2}`), { "1/*a*/": 2 })
165
174
  }
166
175
  function JSON_test() {
167
176
  window.JSON0 = JSON0;
@@ -204,7 +204,9 @@ var fixType = function (o) {
204
204
  break;
205
205
  }
206
206
  if (last.type & (PROPERTY | EXPRESS | VALUE)
207
+ || last.type === STRAP && last.text === 'default'
207
208
  || last.type === STAMP && last.text === "*" && last.prev && (STRAP | STAMP) & last.prev.type) {
209
+ type = STRAP;
208
210
  } else {
209
211
  type = EXPRESS;
210
212
  }
@@ -303,7 +305,8 @@ var detectLabel = function (o) {
303
305
  case ",":
304
306
  if (queue.isObject) {
305
307
  if (last.type === PROPERTY) {
306
- last.short = true;
308
+ var lp = last.prev;
309
+ if (!lp || lp.type === STAMP && lp.text === ',') last.short = true;
307
310
  }
308
311
  }
309
312
  inExpress = true;
@@ -760,16 +763,8 @@ var removeImport = function (c, i, code) {
760
763
  }
761
764
  }
762
765
  if (!n || n.type !== QUOTED) throw new Error(i18n`缺少导入路径!`);
763
- var ns = skipAssignment(n);
764
- var nsi = ns ? code.indexOf(ns, i) : code.length;
765
- var q = scan(`require()`);
766
- if (!used.require) used.require = [], envs.require = true;
767
- used.require.push(q[0]);
766
+ var q = wrapRequire(n, i, code);
768
767
  Object.assign(q[0], t);
769
- var cs = code.splice(oi + 1, nsi - oi - 1, ...q);
770
- q[1].push.apply(q[1], cs);
771
- relink(q[1]);
772
- setqueue(q[1]);
773
768
  if (!dec) return;
774
769
  var name = null;
775
770
  var na = dec.attributes[0];
@@ -795,16 +790,7 @@ var removeImport = function (c, i, code) {
795
790
  }
796
791
  })
797
792
  if (!name) {
798
- name = strings.decode(q[1].last.text)
799
- .replace(/\.[^\.\/\\]+$/, '')
800
- .split(/[\/\\\:\{\}\[\]\.\+\-\*\/\!\~\|\:;,'"`\(\)\>\<\?\^%&\s]+/)
801
- .filter(a => !!a).pop();
802
- if (!this.express_reg.test(name)) name = "imported";
803
- var id = 0;
804
- while (this.strap_reg.test(name) || name in used) {
805
- name = name.replace(/\d+$/, '') + ++id;
806
- }
807
- used[name] = [];
793
+ name = this.newVar(used, q[1].last.text);
808
794
  }
809
795
  dec.forEach(function (d) {
810
796
  if (d instanceof Array) d.forEach((dn, i) => {
@@ -834,10 +820,27 @@ var removeExport = function (c, i, code) {
834
820
  return;
835
821
  }
836
822
  if (n.type === SCOPED) {
823
+ var m = n.next;
824
+ var from = m?.type === STRAP && m.text === 'from';
825
+ if (from) {
826
+ var q = wrapRequire(m.next, i, code);
827
+ m.type = STAMP;
828
+ m.text = '=';
829
+ c.text = 'var';
830
+ from = this.newVar(used, q[1].last.text);
831
+ }
837
832
  var o = n.first;
838
833
  var allexports = [];
839
834
  while (o) {
840
835
  var name = o, prop = o.text;
836
+ if (from) {
837
+ var tack = o.tack || o.text;
838
+ if (used[tack]) {
839
+ removeFromList(used[tack], o);
840
+ if (!used[tack].length) delete envs[tack];
841
+ }
842
+ name.text = from + '.' + name.text, used[from].push(o), o.tack = from;
843
+ }
841
844
  var n = o.next;
842
845
  if (n && n.type === STRAP && n.text === 'as') {
843
846
  var nn = n.next;
@@ -853,10 +856,17 @@ var removeExport = function (c, i, code) {
853
856
  allexports.push(exp);
854
857
  }
855
858
  var ni = skipAssignment(code, i);
856
- code.splice(i, ni - i);
859
+ if (from) {
860
+ replace(m.prev, { type: EXPRESS, text: from })
861
+ i = ni;
862
+ }
863
+ else {
864
+ code.splice(i, ni - i);
865
+ }
857
866
  for (var exp of allexports) {
858
867
  code.splice(i, 0, ...exp);
859
868
  }
869
+ if (!allexports.length) code.exportEmpty = true;
860
870
  return;
861
871
  }
862
872
  if (n.type !== STRAP) throw new Error(i18n`代码结构异常!`);
@@ -871,6 +881,10 @@ var removeExport = function (c, i, code) {
871
881
  }
872
882
  var [dec, map, o] = getDeclared(n.next, 'export');
873
883
  if (/^(class|function)$/.test(n.text)) {
884
+ var exports = used.exports;
885
+ if (!exports) {
886
+ exports = used.exports = [];
887
+ }
874
888
  var e = skipAssignment(code, i + 1);
875
889
  if (code[e] && code[e].type !== STAMP) {
876
890
  code.splice(e, 0, { type: STAMP, text: ';' });
@@ -883,6 +897,8 @@ var removeExport = function (c, i, code) {
883
897
  var d = nn.text;
884
898
  if (used[d]) used[d].forEach(a => {
885
899
  if (!a.kind) {
900
+ a.tack = 'exports';
901
+ exports.push(a);
886
902
  patchname('exports.', a);
887
903
  }
888
904
  });
@@ -914,6 +930,36 @@ var removeExport = function (c, i, code) {
914
930
  code.splice(i, oi - i);
915
931
  };
916
932
 
933
+ var wrapRequire = function (n, i, code) {
934
+ var used = code.used;
935
+ var envs = code.envs;
936
+ var ni = code.indexOf(n, i);
937
+ var ns = skipAssignment(n);
938
+ var nsi = ns ? code.indexOf(ns, ni) : code.length;
939
+ var q = scan(`require()`);
940
+ if (!used.require) used.require = [], envs.require = true;
941
+ used.require.push(q[0]);
942
+ var cs = code.splice(ni, nsi - ni, ...q);
943
+ q[1].push.apply(q[1], cs);
944
+ relink(q[1]);
945
+ setqueue(q[1]);
946
+ return q;
947
+ };
948
+
949
+ Javascript.prototype.newVar = function (used, string_template) {
950
+ var name = strings.decode(string_template)
951
+ .replace(/\.[^\.\/\\]+$/, '')
952
+ .replace(/[\-\s]+([\s\S])/, (_, a) => a.toUpperCase())
953
+ .split(/[\/\\\:\{\}\[\]\.\+\-\*\/\!\~\|\:;,'"`\(\)\>\<\?\^%&\s]+/)
954
+ .filter(a => !!a).pop();
955
+ if (!this.express_reg.test(name)) name = "imported";
956
+ var id = 0;
957
+ while (this.strap_reg.test(name) || name in used) {
958
+ name = name.replace(/\d+$/, '') + ++id;
959
+ }
960
+ used[name] = [];
961
+ return name;
962
+ }
917
963
  Javascript.prototype.fix = function (code) {
918
964
  backEach(code, function (o, i) {
919
965
  if (o.type !== STRAP) return;
@@ -962,8 +1008,22 @@ Javascript.prototype.fix = function (code) {
962
1008
  if (code.exportDecs) {
963
1009
  var exportDecs = code.exportDecs;
964
1010
  delete code.exportDecs;
1011
+ var exports = code.used.exports;
1012
+ var used = code.used;
1013
+ var envs = code.envs;
1014
+ if (!exports) {
1015
+ exports = code.used.exports = [];
1016
+ }
965
1017
  exportDecs.forEach(e => {
966
1018
  e.text = 'exports.' + e.text;
1019
+ exports.push(e);
1020
+ removeFromList(used[e.tack], e);
1021
+ if (!used[e.tack].length) {
1022
+ delete used[e.tack];
1023
+ delete envs[e.tack];
1024
+ }
1025
+ e.origin = e.tack;
1026
+ e.tack = 'exports';
967
1027
  if (e.needEqual) {
968
1028
  var n = e.next;
969
1029
  if (!n || n.type !== STAMP || n.text !== '=') {
@@ -7,6 +7,8 @@ var testFix = function (a, e) {
7
7
  }
8
8
  js.debug = true;
9
9
  assert(scanner2("/a/g", js)[0].type, common.QUOTED);
10
+ testFix(`export * from "a";`, 'var a = require("a");\r\nexports.default = undefined\r\nextendIfNeeded(exports, a)');
11
+ testFix(`export {A} from "a";`, 'var a = require("a")\r\nexports.A = a.A;');
10
12
  testFix(`import a from "a";console.log(a)`, 'var a = require("a"); console.log(a.default)');
11
13
  testFix(`import {a} from "a";console.log(a)`, 'var a1 = require("a"); console.log(a1.a)');
12
14
  testFix(`import a,{a as b} from "a";console.log(a,b)`, 'var a = require("a"); console.log(a.default, a.a)');
@@ -891,7 +891,8 @@ class Program {
891
891
  }
892
892
  if (this.scope_leave[m] && queue.entry === this.scope_leave[m]) {
893
893
  if (last?.type === PROPERTY) {
894
- last.short = true;
894
+ var lp = last.prev;
895
+ if (!lp || lp.type === STAMP && lp.text === ',') last.short = true;
895
896
  }
896
897
 
897
898
  queue.end = end;
@@ -1078,7 +1078,7 @@ var getDeclared = function (o, kind, queue) {
1078
1078
  o = f.next;
1079
1079
  break;
1080
1080
  default:
1081
- console.log(o);
1081
+ console.log(createString(pickSentence(o)));
1082
1082
  throw new Error(i18n`代码结构异常`);
1083
1083
  }
1084
1084
  if (!o) break;
@@ -1103,6 +1103,10 @@ var getDeclared = function (o, kind, queue) {
1103
1103
  o = o0;
1104
1104
  break;
1105
1105
  }
1106
+ if (o.text === '*') {
1107
+ o = o.next;
1108
+ break;
1109
+ }
1106
1110
  break;
1107
1111
  case EXPRESS:
1108
1112
  if (o.text === '?') o = o.next;
@@ -1,12 +1,12 @@
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, 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, pickSentence, snapExpressHead, needBreakBetween } = require("./common");
5
5
  var splice2 = function (q, from, to, ...a) {
6
6
  var cx = q.indexOf(from);
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(q)), i18n`结构异常`;
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`结构异常`;
8
8
  var dx = to ? q.indexOf(to, cx) : q.length;
9
- if (dx < 0) throw console.log(splice2.caller, console.format(`\r\n<yellow>${i18n`自`}</yellow>`), from && createString([from]), console.format(`\r\n<red2>${i18n`至`}</red2>`), to && createString([to]), console.format(`\r\n<cyan>${i18n`码列`}</cyan>`), createString(q)), i18n`结构异常`;
9
+ if (dx < 0) throw console.log(splice2.caller, console.format(`\r\n<yellow>${i18n`自`}</yellow>`), from && createString([from]), console.format(`\r\n<red2>${i18n`至`}</red2>`), to && createString([to]), console.format(`\r\n<cyan>${i18n`码列`}</cyan>`), createString(pickSentence(from))), i18n`结构异常`;
10
10
  return splice(q, cx, dx - cx, ...a);
11
11
  };
12
12
  var insert1 = function (q, r, ...a) {
@@ -295,7 +295,7 @@ var killdec = function (queue, i, getobjname, _var = 'var', killobj, islet) {
295
295
  }
296
296
  break;
297
297
  }
298
- if (o.type === SCOPED) {
298
+ if (o.type === SCOPED && o.entry !== '(') {
299
299
  var n = indexof(queue, next.next, i);
300
300
  var prev = o.prev;
301
301
  if (prev && prev.type === STAMP && prev.text === ',') i = queue.lastIndexOf(prev, i), index = 1;
@@ -720,8 +720,8 @@ var killcls = function (body, i, letname_, getname_) {
720
720
  splice(invokes, invokes.length, 0, { text: ';', type: STAMP }, ...defines);
721
721
  }
722
722
  splice(body, s, i - s, ...invokes);
723
- if (o && o.type & ~(SPACE | STAMP) && invokes.length) insert1(body, o, { type: SPACE, text: '\r\n' });
724
723
  }
724
+ if (o && needBreakBetween(o.prev, o)) insert1(o.queue, o, { type: SPACE, text: '\r\n' });
725
725
  return i;
726
726
  };
727
727
  var indexof = function (list, o, i) {
@@ -1184,7 +1184,7 @@ var unforof = function (o, getnewname, used, killobj) {
1184
1184
  var gname = getnewname();
1185
1185
  var oname;
1186
1186
  var useSimpleLoop = !(rootHyper || used.Symbol) && !hasawait;
1187
- if (!f.next && f.type === EXPRESS && !/\./.test(f.text) && used[f.origin || f.text.replace(/[\.\[][\s\S]*$/, '')].length === 1) {
1187
+ if (!f.next && f.type === EXPRESS && !/\./.test(f.text) && used[f.origin || f.tack].length === 1) {
1188
1188
  splice2(o, m);
1189
1189
  oname = f.text;
1190
1190
  }
@@ -435,11 +435,12 @@ assert(downLevel(`Object.defineProperty(dis, f.key, {get() {}, set(v) {}})`), `O
435
435
  _.get = function () {},
436
436
  _.set = function (v) {}, _))
437
437
  var _`);
438
- downLevel.debug = true; i++;
439
438
  assert(downLevel(`var restq = splice(queue, i, i2 - i, ...a[1], { type: STAMP, text: "=" });`), `var slice_ = Array["prototype"]["slice"];
440
439
  var restq = splice["apply"](null, [queue, i, i2 - i]["concat"](slice_["call"](a[1]), [{ type: STAMP, text: "=" }]));`)
441
440
  var c = scanner2(`\r\n if (search.length) return null;\r\n return path.join(...pathlist);\r\n`);
442
441
  c.fix();
443
442
  c.break();
444
443
  assert(c.toString(), `\r\n if (search["length"]) return null;\r\n return path["join"](...pathlist);\r\n`)
445
- assert(downLevel.code(c).toString(), `\r\n if (search["length"]) return null;\r\n return path["join"]["apply"](path, pathlist);\r\n`);
444
+ assert(downLevel.code(c).toString(), `\r\n if (search["length"]) return null;\r\n return path["join"]["apply"](path, pathlist);\r\n`);
445
+ downLevel.debug = true; i++;
446
+ assert(downLevel(`Symbol;var c = (a.data || (a.data = {})).transition = no(this);`), 'Symbol; var c = (a.data || (a.data = {})).transition = no(this);', true);
@@ -29,7 +29,7 @@ async function detectWithExtension(filenames, extensions = [""], folders = [""])
29
29
  f = await fs.realpath(f);
30
30
  return f + params;
31
31
  }
32
- if (!findedFolder) findedFolder = f + params;
32
+ if (!findedFolder) findedFolder = f + path.sep + params;
33
33
  } catch { }
34
34
  }
35
35
  if (!findedFolder) throw new Error(`路径${filenames.map(f => colors.FgYellow + f[0] + colors.Reset).join(', ')}不存在`);
@@ -67,6 +67,7 @@ function slider() {
67
67
  moving = 0,
68
68
  direction,
69
69
  _speed = speed(1);
70
+ var origin_index = null;
70
71
  var reshape = function (index, ising, emit) {
71
72
  if (!isFinite(index)) return;
72
73
  index = +index;
@@ -92,7 +93,10 @@ function slider() {
92
93
  generator(indexLeft + 2, 1);
93
94
  generator(indexLeft + 3, 1);
94
95
  generator(indexLeft + 4, 1);
95
- if (emit !== false) dispatch(outter, 'changed');
96
+ if (origin_index !== index) {
97
+ origin_index = index;
98
+ if (emit !== false) dispatch(outter, 'changed');
99
+ }
96
100
  }
97
101
  var childNodes = outter.childNodes;
98
102
  for (var dx = childNodes.length - 1; dx >= 0; dx--) {
@@ -296,11 +296,7 @@ function prepare(pgpath, ok) {
296
296
  }
297
297
  return url;
298
298
  };
299
- state.init = function () {
300
- var [a] = arguments;
301
- a = state.path(a);
302
- return init.apply(this, [a].concat([].slice.call(arguments, 1)));
303
- };
299
+
304
300
  state.go = function (url, args, _history_name) {
305
301
  // if (arguments.length === 1 && isFinite(url)) return window_history.go(url | 0);
306
302
  var to = function (_url, args, _history_name) {
@@ -382,7 +378,7 @@ function prepare(pgpath, ok) {
382
378
  extendIfNeeded(pg, state);
383
379
  if (roles) return prepare(user.loginPath, () => emit(pg));
384
380
  emit(pg);
385
- }, state);
381
+ }, state, true);
386
382
  }
387
383
  function create(pagepath, args, from, needroles) {
388
384
  if (typeof pagepath === 'string') {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.14.3",
3
+ "version": "4.15.1",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {