efront 4.0.25 → 4.0.29

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.
@@ -9,7 +9,6 @@ var {
9
9
  Error,
10
10
  Function,
11
11
  Array,
12
- localStorage,
13
12
  Promise,
14
13
  setTimeout,
15
14
  clearTimeout,
@@ -164,7 +163,7 @@ var readFile = function (names, then) {
164
163
 
165
164
  };
166
165
  var createFunction = function (name, body, args, isAsync, isYield) {
167
- return window.eval(`[${isAsync ? 'async ' : ''}function${isYield ? "*" : ""}/*${name}*/(${args || ''}){\r\n${body}\r\n}][0]`, name);
166
+ return window.eval(`[${isAsync ? 'async ' : ''}function${isYield ? "*" : ""}/*${name}*/(${args || ''}){${body}\r\n}][0]`, name);
168
167
  };
169
168
 
170
169
  var FILE_NAME_REG = /^https?\:|\.(html?|css|asp|jsp|php)$/i;
@@ -248,7 +247,7 @@ var hasOwnProperty = {}.hasOwnProperty;
248
247
  var loadModule = function (url, then, prebuilds = {}) {
249
248
  var name = url.replace(/[\*~][\s\S]*$/, '');
250
249
  if (/^(?:module|exports|define|require|window|global|undefined)$/.test(name)) return then();
251
- if ((hasOwnProperty.call(prebuilds, url)) || hasOwnProperty.call(modules, url) || (!/^on/.test(name) && window[name] !== null && window[name] !== void 0 && !hasOwnProperty.call(forceRequest, name))
250
+ if ((hasOwnProperty.call(prebuilds, url)) || hasOwnProperty.call(modules, url) || (!hasOwnProperty.call(forceRequest, name) && !/^on/.test(name) && window[name] !== null && window[name] !== void 0)
252
251
  ) return then();
253
252
  preLoad(url);
254
253
  var key = keyprefix + url;
@@ -512,10 +511,17 @@ var init = function (url, then, prebuilds) {
512
511
  return modules[url];
513
512
  }
514
513
  var name = url.replace(/[\*~][\s\S]*$/, '');
515
- if (!/^on/.test(name) && window[name] !== null && window[name] !== void 0 && !hasOwnProperty.call(forceRequest, name)) {
516
- modules[name] = window[name]
517
- if (then) then(modules[name]);
518
- return modules[name];
514
+ if (!hasOwnProperty.call(forceRequest, name) && name in window && !/^on/.test(name)) {
515
+ try {
516
+ var value = window[name];
517
+ if (value !== null && value !== void 0) {
518
+ modules[name] = value;
519
+ if (then) then(value);
520
+ return value;
521
+ }
522
+ } catch {
523
+ window.alert(name);
524
+ }
519
525
  }
520
526
  var oks = [];
521
527
  if (then) oks.push(then);
@@ -764,52 +770,6 @@ var initPixelDecoder = function () {
764
770
  modules.pt2offset = modules.freeOffset;
765
771
 
766
772
  };
767
- var flush_to_storage_timer = 0,
768
- responseTree_storageKey = "zimoliAutoSavedResponseTree" + location.pathname;
769
- var saveResponseTreeToStorage = preventCodeStorage ? function () { } : function () {
770
- var responseTextArray = [];
771
- for (var k in versionTree) {
772
- if (hasOwnProperty.call(responseTree, k)) responseTextArray.push(
773
- k + ":" + versionTree[k] + ":" + responseTree[k]
774
- );
775
- }
776
- var data = responseTextArray.join(",");
777
- localStorage && localStorage.setItem(responseTree_storageKey, data);
778
- };
779
- var loadResponseTreeFromStorage = preventCodeStorage ? function () { } : function () {
780
- "use ./crc.js";
781
- var load = function (name) {
782
- var data = localStorage.getItem(responseTree_storageKey);
783
- if (!data) return;
784
- var responseTextArray = data.split(",");
785
- for (var cx = 0, dx = responseTextArray.length; cx < dx; cx++) {
786
- var kv = responseTextArray[cx].split(":");
787
- var [responseName, version, responseText] = kv;
788
- preLoadVersionTree[responseName] = version;
789
- preLoadResponseTree[responseName] = responseText;
790
- }
791
- };
792
- var preLoadResponseTree = {};
793
- var preLoadVersionTree = {};
794
- if (localStorage) load();
795
- else init("localStorage", function (_localStorage) {
796
- localStorage = _localStorage;
797
- load();
798
- });
799
- preLoad = function (responseName) {
800
- if (hasOwnProperty.call(responseTree, responseName)) return;
801
- var version = preLoadVersionTree[responseName];
802
- if (!version) return;
803
- var responseText = preLoadResponseTree[responseName];
804
- var sum = [];
805
- for (var i in responseText) sum[i] = responseText.charCodeAt(i);
806
- var sum = crc(sum).toString(36);
807
- if (sum + version.slice(sum.length) === versionTree[responseName])
808
- responseTree[responseName] = responseText;
809
- // else window.console.log(responseName, sum, version, versionTree[responseName]);
810
- };
811
- };
812
- var preLoad = function () { };
813
773
  var start_time = efront_time / 1000 | 0;
814
774
  var errored = {};
815
775
  // modules 的代码不可出现多层
@@ -871,8 +831,52 @@ var initIfNotDefined = function (defined, path, onload) {
871
831
  if (defined === void 0) init(path, a => onload(a) | hook(--requires_count));
872
832
  else hook(--requires_count);
873
833
  };
834
+ try { var localStorage = window.localStorage; } catch { forceRequest.localStorage = forceRequest.sessionStorage = true }
835
+ var flush_to_storage_timer = 0,
836
+ responseTree_storageKey = "zimoliAutoSavedResponseTree" + location.pathname;
837
+ var loadResponseTreeFromStorage = preventCodeStorage ? function () { } : function () {
838
+ "use ./crc.js";
839
+ var load = function (name) {
840
+ var data = localStorage.getItem(responseTree_storageKey);
841
+ if (!data) return;
842
+ var responseTextArray = data.split(",");
843
+ for (var cx = 0, dx = responseTextArray.length; cx < dx; cx++) {
844
+ var kv = responseTextArray[cx].split(":");
845
+ var [responseName, version, responseText] = kv;
846
+ preLoadVersionTree[responseName] = version;
847
+ preLoadResponseTree[responseName] = responseText;
848
+ }
849
+ };
850
+ var preLoadResponseTree = {};
851
+ var preLoadVersionTree = {};
852
+ load();
853
+ preLoad = function (responseName) {
854
+ if (hasOwnProperty.call(responseTree, responseName)) return;
855
+ var version = preLoadVersionTree[responseName];
856
+ if (!version) return;
857
+ var responseText = preLoadResponseTree[responseName];
858
+ var sum = [];
859
+ for (var i in responseText) sum[i] = responseText.charCodeAt(i);
860
+ var sum = crc(sum).toString(36);
861
+ if (sum + version.slice(sum.length) === versionTree[responseName])
862
+ responseTree[responseName] = responseText;
863
+ // else window.console.log(responseName, sum, version, versionTree[responseName]);
864
+ };
865
+ };
866
+ var preLoad = function () { };
874
867
 
875
868
  if (localStorage) loadResponseTreeFromStorage();
869
+ var saveResponseTreeToStorage = preventCodeStorage || !localStorage ? function () { } : function () {
870
+ var responseTextArray = [];
871
+ for (var k in versionTree) {
872
+ if (hasOwnProperty.call(responseTree, k)) responseTextArray.push(
873
+ k + ":" + versionTree[k] + ":" + responseTree[k]
874
+ );
875
+ }
876
+ var data = responseTextArray.join(",");
877
+ localStorage.setItem(responseTree_storageKey, data);
878
+ };
879
+
876
880
  initIfNotDefined([].map, "[]map", map => map);
877
881
  "use ../basic_/#checkPromise.js";
878
882
  initIfNotDefined(Promise, "Promise", promise => Promise = promise);
@@ -613,7 +613,7 @@ var removeExport = function (c, i, code) {
613
613
  var nn = n.next;
614
614
  var d = nn.text;
615
615
  if (used[d]) used[d].forEach(a => {
616
- if (!a.kind) a.text = `exports.${d}`;
616
+ if (!a.kind) a.text = `exports.` + a.text;
617
617
  });
618
618
  delete used[d];
619
619
  delete envs[d];
@@ -535,7 +535,7 @@ class Program {
535
535
  if (!this.classstrap_reg.test(m)) queue.inExpress = this.transive_reg.test(m);
536
536
  else {
537
537
  var last = queue.last;
538
- if (!last) queue.inExpress = false;
538
+ if (!last);
539
539
  else if (last.type === STAMP) {
540
540
  queue.inExpress = !/^(;|\+\+|\-\-)$/.test(last.text);
541
541
  }
@@ -344,11 +344,12 @@ var snapExpressHead = function (o) {
344
344
  var snapExpressFoot = function (o) {
345
345
  while (o && o.next) {
346
346
  var n = null;
347
+ var isExpress = o.isExpress;
347
348
  if (o.type & STRAP) {
348
349
  n = o;
349
350
  if (n.text === 'new') n = n.next;
350
351
  if (n.text === 'function') {
351
- while (n && n.type !== SCOPED || n.entry !== '{') n = n.next;
352
+ while (n && (n.type !== SCOPED || n.entry !== '{')) n = n.next;
352
353
  }
353
354
  else if (n.text === 'class') {
354
355
  var n = o;
@@ -357,12 +358,13 @@ var snapExpressFoot = function (o) {
357
358
  }
358
359
  else break;
359
360
  o = n;
361
+ n = o && o.next;
360
362
  }
361
363
  else if (o.type & (EXPRESS | QUOTED | VALUE | SCOPED)) {
362
364
  n = o.next;
363
365
  }
364
366
  if (!n) break;
365
- if (n.type === SCOPED && (o.entry !== '{' || o.isObject)
367
+ if (n.type === SCOPED && (o.entry !== '{' || isExpress)
366
368
  || /\.$/.test(o.text) && !o.isdigit
367
369
  || n.type === EXPRESS && /^\??\.[^\.]/.test(n.text)
368
370
  || n.type === QUOTED && (n.length || /^\`/.test(n.text))
@@ -1028,7 +1030,7 @@ var createString = function (parsed) {
1028
1030
  tmp = tmp.replace(/^\/[\/\*]\s*\<\!--\s*/, '');
1029
1031
  cacheresult = [];
1030
1032
  result = cacheresult;
1031
- result.push("/* <!-- 开发辅助代码: */");
1033
+ result.push("/* [[ 开发辅助代码: */");
1032
1034
  }
1033
1035
  if (/--\!?\>\s*(?:\*\/)?$/.test(tmp) && result !== finalresult) {
1034
1036
  if (!opentmp) tmp = tmp.replace(/^\/[\/\*]\s*/, '');
@@ -1036,7 +1038,7 @@ var createString = function (parsed) {
1036
1038
  if (tmp) {
1037
1039
  result.push(tmp);
1038
1040
  }
1039
- result.push("/* --> */");
1041
+ result.push("/* ]] */");
1040
1042
  opentmp = true;
1041
1043
  if (helpcode && cacheresult) finalresult = finalresult.concat(cacheresult), cacheresult = [];
1042
1044
  result = finalresult;
@@ -571,6 +571,7 @@ var killcls = function (body, i, getname_) {
571
571
  var extends_ = [];
572
572
  var o = body[i];
573
573
  var ishalf = isHalfSentence(body, i - 1);
574
+ var hasnew = o.prev && o.prev.type === STRAP && o.prev.text === 'new';
574
575
  var start = o;
575
576
  var decName = !o.isExpress && o.next.type === EXPRESS && o.next.text;
576
577
  var isExpress = o.isExpress;
@@ -592,7 +593,7 @@ var killcls = function (body, i, getname_) {
592
593
  }
593
594
  if (o.type !== STRAP || o.text !== 'class') break;
594
595
  }
595
- var func = scanner2("function(){}()");
596
+ var func = scanner2("(function(){}())")[0];
596
597
  var [, head, defines, invokes] = func;
597
598
  var foot = [];
598
599
  var base = '';
@@ -699,7 +700,8 @@ var killcls = function (body, i, getname_) {
699
700
  if (head.length > 1 || start.isExpress && (defines.length) || ishalf && defines.length) {
700
701
  splice(defines, defines.length, 0, ...scanner2(`\r\nreturn ${clz.name}`))
701
702
  if (decName) splice(func, 0, 0, ...scanner2(`var ${decName}=`));
702
- splice(body, s, i - s, ...func);
703
+ if (hasnew) splice(body, s, i - s, func);
704
+ else splice(body, s, i - s, ...func);
703
705
  }
704
706
  else {
705
707
  if (defines.length) {
@@ -21,13 +21,49 @@ if (globalStorage) {
21
21
  };
22
22
  documentElement.addBehavior('#default#userdata');
23
23
  } else {
24
- localStorage = window.localStorage || {
25
- setItem() {
26
- },
27
- getItem() {
28
- return null;
29
- },
30
- removeItem() {
24
+ try {
25
+
26
+ localStorage = window.localStorage
27
+ }
28
+ catch { }
29
+ var _localStorageKeys = [];
30
+ var _values = Object.create(null);
31
+
32
+ if (!localStorage) localStorage = new class Storage {
33
+ setItem(key, value) {
34
+ value = String(value);
35
+ key = String(key);
36
+ if (!(key in _values)) {
37
+ if (!(key in this)) Object.defineProperty(this, key, {
38
+ get() {
39
+ return _values[key];
40
+ }, configurable: true
41
+ });
42
+ _localStorageKeys.push(key);
43
+ }
44
+ _values[key] = value;
45
+ }
46
+ getItem(key) {
47
+ return key in _values ? _values[key] : null;
48
+ }
49
+ clear() {
50
+ _localStorageKeys.forEach(k => {
51
+ delete this[k];
52
+ delete _values[k];
53
+ });
54
+ _localStorageKeys.splice(0, _localStorageKeys.length);
55
+ }
56
+ key(i) {
57
+ return _localStorageKeys[i] || null;
58
+ }
59
+ get length() {
60
+ return _localStorageKeys.length;
61
+ }
62
+ removeItem(key) {
63
+ if (delete _values[key]) {
64
+ delete this[key];
65
+ removeFromList(_localStorageKeys, key);
66
+ }
31
67
  }
32
68
  };
33
69
  }
@@ -2,7 +2,7 @@
2
2
  * ie5-7专享,不兼容多选项卡的浏览器
3
3
  */
4
4
  var session_storage_prefix = "_zimoli_session_prefix";
5
- var _sessionStorage = {};
5
+ var _sessionStorage = Object.create(null);
6
6
  var clear = function () {
7
7
  for (var cx = 0, dx = localStorage.length; cx < dx; cx++) {
8
8
  var key = localStorage.key(cx);
@@ -21,28 +21,41 @@ var read = function () {
21
21
  var save = function () {
22
22
  clear();
23
23
  for (var k in _sessionStorage) {
24
- if (_sessionStorage.hasOwnProperty(k)) {
25
- var key = session_storage_prefix + k;
26
- localStorage.setItem(key, _sessionStorage[key]);
27
- }
24
+ var key = session_storage_prefix + k;
25
+ localStorage.setItem(key, _sessionStorage[key]);
28
26
  }
29
27
  };
30
- var sessionStorage = window.sessionStorage || {
31
- length: 0,
32
- removeItem: function (key) {
33
- if (_sessionStorage.hasOwnProperty(key))
34
- sessionStorage.length--;
28
+ try { var sessionStorage = window.sessionStorage } catch { }
29
+ var _sessionStorageKeys = [];
30
+ if (!sessionStorage) sessionStorage = new class Storage {
31
+ get length() {
32
+ return _sessionStorageKeys.length;
33
+ };
34
+ removeItem(key) {
35
+ if (key in _sessionStorage) removeFromList(_sessionStorageKeys, key);
36
+ delete this[key];
35
37
  delete _sessionStorage[key];
36
- },
37
- setItem: function (key, data) {
38
- if (!_sessionStorage.hasOwnProperty(key))
39
- sessionStorage.length++;
40
- _sessionStorage[key] = Object.prototype.toString.call(data);
41
- },
42
- getItem: function (key) {
43
- return _sessionStorage[key];
44
- },
45
- clear: function () {
38
+ }
39
+ setItem(key, data) {
40
+ key = String(key);
41
+ data = String(data);
42
+ if (!(key in _sessionStorage)) {
43
+ _sessionStorageKeys.push(key);
44
+ Object.defineProperty(this, key, {
45
+ get() {
46
+ return _sessionStorage[key];
47
+ }
48
+ })
49
+ }
50
+ _sessionStorage[key] = data;
51
+ }
52
+ getItem(key) {
53
+ return key in _sessionStorage ? _sessionStorage[key] : null;
54
+ }
55
+ key(i) {
56
+ return _sessionStorageKeys[i];
57
+ }
58
+ clear() {
46
59
  _sessionStorage = {};
47
60
  }
48
61
  };
@@ -51,5 +64,4 @@ if (!document.cookie) {
51
64
  } else {
52
65
  read();
53
66
  }
54
-
55
- window.onbeforeunload = save;
67
+ on("beforeunload")(window, save);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efront",
3
- "version": "4.0.25",
3
+ "version": "4.0.29",
4
4
  "description": "简化前端开发,优化web性能",
5
5
  "main": "public/efront.js",
6
6
  "directories": {