efront 4.22.14 → 4.22.17
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.
- package/#/345/233/275/351/231/205/345/214/226.yml +3 -0
- package/apps/pivot/cert/main.xht +1 -1
- package/apps/pivot/db/config.xht +4 -2
- package/apps/pivot/db/list.xht +1 -0
- package/coms/basic/JSAM.js +197 -261
- package/coms/basic/JSAM_test.js +27 -0
- package/coms/basic/data.js +17 -4
- package/coms/basic/isArrayLike.js +3 -2
- package/coms/compile//347/264/240/351/246/250.js +19 -8
- package/coms/compile//347/264/240/351/246/250_test.js +2 -2
- package/coms/reptile/colored_console.js +1 -0
- package/coms/zimoli/alert.js +17 -5
- package/coms/zimoli/list.js +20 -8
- package/coms/zimoli/popup.js +17 -11
- package/coms/zimoli/render.js +115 -29
- package/coms/zimoli/transition.js +0 -2
- package/coms/zimoli/tree.js +16 -25
- package/coms/zimoli/zIndex.js +1 -0
- package/docs/main.xht +14 -14
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/apps/pivot/cert/main.xht
CHANGED
package/apps/pivot/db/config.xht
CHANGED
|
@@ -72,8 +72,10 @@
|
|
|
72
72
|
(用户互访/visit/,open=false) swap // 不公开时检查此项`;
|
|
73
73
|
var [db] = arguments;
|
|
74
74
|
if (!db.fields) {
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
try {
|
|
76
|
+
var [da1] = await data.from('dbfind', { dbid: db.name, size: 1 });
|
|
77
|
+
db.fields = da1 ? Object.keys(da1).map(k => ({ key: k })) : [];
|
|
78
|
+
} catch { }
|
|
77
79
|
}
|
|
78
80
|
var editAction = function (a) {
|
|
79
81
|
popup('#/db/act', [db, a]);
|
package/apps/pivot/db/list.xht
CHANGED
package/coms/basic/JSAM.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
1
|
+
var strings = require("./strings");
|
|
2
|
+
var spaces = require("./spaces");
|
|
3
|
+
var isArrayLike = require("./isArrayLike");
|
|
4
4
|
var check = function (o) {
|
|
5
|
-
return o === null ||
|
|
5
|
+
return o === null || o === false || o === true || o === Infinity || o !== o;
|
|
6
6
|
};
|
|
7
7
|
var string = function (a) {
|
|
8
|
-
return
|
|
8
|
+
return strings.encode(a, '"', false);
|
|
9
9
|
};
|
|
10
10
|
var symbol = function (a) {
|
|
11
|
-
return
|
|
11
|
+
return strings.encode(String(a).replace(/^\w*\(([\s\S]*)\)$/, '$1'), "'");
|
|
12
12
|
};
|
|
13
13
|
var date = function (d) {
|
|
14
14
|
return d.toISOString();
|
|
@@ -17,288 +17,224 @@ var regrep = a => a === '/' ? "\\/" : a;
|
|
|
17
17
|
var regexp = function (r) {
|
|
18
18
|
return '/' + r.source.replace(/\\[\s\S]|\//g, regrep) + '/' + r.flags;
|
|
19
19
|
};
|
|
20
|
-
var
|
|
21
|
-
|
|
22
|
-
if (check(o)) return String(o);
|
|
23
|
-
if (typeof o === 'symbol' || o instanceof Symbol) return symbol(o);
|
|
24
|
-
if (typeof o !== 'object') return string(o);
|
|
25
|
-
if (o instanceof Date) return date(o);
|
|
26
|
-
if (o instanceof RegExp) return regexp(o);
|
|
27
|
-
var arr = o[""];
|
|
28
|
-
delete o[""];
|
|
29
|
-
var typeid = o._;
|
|
30
|
-
delete o._;
|
|
31
|
-
var pairs = [].concat(arr);
|
|
32
|
-
for (var k in o) {
|
|
33
|
-
pairs.push(k + ':' + o[k]);
|
|
34
|
-
}
|
|
35
|
-
var s;
|
|
36
|
-
if (o instanceof Array) {
|
|
37
|
-
s = `[${pairs.join(',')}]`;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
s = `{${pairs.join(',')}}`;
|
|
41
|
-
}
|
|
42
|
-
if (typeid > 0) s = typeid + s;
|
|
43
|
-
return s;
|
|
20
|
+
var isValidK = function (k) {
|
|
21
|
+
return k.length < 16 && !/^\d|[,:'"\\\/`\-\[\]\{\}\(\)\.\+\#\@\&^]/.test(k) && spaces.trim(k) === k;
|
|
44
22
|
};
|
|
45
|
-
function
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
23
|
+
var extractK = function (k) {
|
|
24
|
+
return k.length < 16 && isFinite(k);
|
|
25
|
+
};
|
|
26
|
+
var noDulp = false, plength = 0;
|
|
27
|
+
function _tostring(memery, preload, dist) {
|
|
51
28
|
if (memery === undefined) return '';
|
|
52
29
|
if (check(memery)) return String(memery);
|
|
53
|
-
if (typeof memery === '
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
30
|
+
if (typeof memery === 'number') {
|
|
31
|
+
if (memery < 0) return String(memery);
|
|
32
|
+
return "+" + String(memery);
|
|
33
|
+
}
|
|
34
|
+
if (typeof memery === 'string') return string(memery);
|
|
35
|
+
if (typeof memery === 'symbol' || memery instanceof Symbol) return symbol(memery);
|
|
36
|
+
if (typeof memery === 'bigint' || memery instanceof BigInt) return String(memery) + "n";
|
|
57
37
|
m: if (typeof memery === 'function') {
|
|
58
38
|
for (var k in memery) break m;
|
|
59
39
|
return '';
|
|
60
40
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
var
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
for (var k in m) break f;
|
|
78
|
-
if (dist.indexOf(m) >= 0) {
|
|
79
|
-
preload_used = true;
|
|
80
|
-
break f;
|
|
81
|
-
}
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
if (inc === +k && k !== '') {
|
|
85
|
-
var kindex = "";
|
|
86
|
-
inc++;
|
|
87
|
-
} else {
|
|
88
|
-
var kindex = dist.indexOf(k);
|
|
89
|
-
if (!~kindex) {
|
|
90
|
-
kindex = dist.length;
|
|
91
|
-
dist.push(k);
|
|
92
|
-
trimed.push(k);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
var index = dist.indexOf(m);
|
|
96
|
-
if (!~index) {
|
|
97
|
-
index = dist.length;
|
|
98
|
-
dist.push(m);
|
|
99
|
-
if (m !== null) {
|
|
100
|
-
if (m instanceof Date) {
|
|
101
|
-
trimed.push(m);
|
|
102
|
-
}
|
|
103
|
-
else if (m instanceof RegExp) {
|
|
104
|
-
trimed.push(m);
|
|
105
|
-
}
|
|
106
|
-
else if (convertReg.test(typeof m)) {
|
|
107
|
-
rest.push(m);
|
|
108
|
-
var t = m instanceof Array ? [] : {};
|
|
109
|
-
trimed.push(t);
|
|
110
|
-
objects.push(t);
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
trimed.push(m);
|
|
114
|
-
}
|
|
115
|
-
} else {
|
|
116
|
-
trimed.push(m);
|
|
117
|
-
}
|
|
41
|
+
if (memery instanceof Date) return date(memery);
|
|
42
|
+
if (memery instanceof RegExp) return regexp(memery);
|
|
43
|
+
var d = preload.indexOf(memery.constructor);
|
|
44
|
+
var pre = memery instanceof Array ? "[" : "{";
|
|
45
|
+
var aft = pre === "{" ? "}" : "]"
|
|
46
|
+
if (d >= 0) pre = d + pre;
|
|
47
|
+
var inc = 0, arr = [];
|
|
48
|
+
var index = dist.length;
|
|
49
|
+
dist.push(undefined);
|
|
50
|
+
for (var k in memery) {
|
|
51
|
+
var v = memery[k];
|
|
52
|
+
if (v && typeof v === 'object' || typeof v === 'function') {
|
|
53
|
+
var i = preload.indexOf(v);
|
|
54
|
+
if (i >= 0) {
|
|
55
|
+
if (noDulp) throw new Error(i18n`数据异常`);
|
|
56
|
+
v = i;
|
|
118
57
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
58
|
+
else {
|
|
59
|
+
i = plength;
|
|
60
|
+
preload.push(v);
|
|
61
|
+
plength++;
|
|
62
|
+
_tostring(v, preload, dist);
|
|
63
|
+
if (noDulp) preload.pop();
|
|
64
|
+
v = i;
|
|
123
65
|
}
|
|
124
66
|
}
|
|
67
|
+
else {
|
|
68
|
+
v = _tostring(v, preload);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (k && +k === inc) {
|
|
72
|
+
arr.push(v);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (extractK(k)) k = "+" + k;
|
|
76
|
+
else if (!isValidK(k)) k = string(String(k));
|
|
77
|
+
arr.push(k + ":" + v);
|
|
78
|
+
}
|
|
79
|
+
inc++;
|
|
125
80
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return result;
|
|
81
|
+
dist[index] = pre + arr.join(',') + aft;
|
|
82
|
+
return dist[index];
|
|
129
83
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
var
|
|
137
|
-
if (
|
|
138
|
-
|
|
139
|
-
} else {
|
|
140
|
-
dst[k] = +v;
|
|
141
|
-
}
|
|
84
|
+
|
|
85
|
+
function stringify(memery, preload, hasDulp = true) {
|
|
86
|
+
noDulp = preload === false || hasDulp === false;
|
|
87
|
+
if (isArrayLike(hasDulp)) preload = hasDulp;
|
|
88
|
+
if (isArrayLike(preload)) {
|
|
89
|
+
preload = Array.apply(null, preload);
|
|
90
|
+
var i = preload.indexOf(memery) + 1;
|
|
91
|
+
if (i > 0) return i + ',';
|
|
92
|
+
preload.unshift(memery);
|
|
142
93
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
94
|
+
else preload = [memery];
|
|
95
|
+
var dist = [];
|
|
96
|
+
plength = preload.length;
|
|
97
|
+
dist[0] = _tostring(memery, preload, dist);
|
|
98
|
+
return dist.join(',');
|
|
99
|
+
}
|
|
100
|
+
function parseValue(v) {
|
|
101
|
+
if (/^"/.test(v)) return strings.decode(v);
|
|
102
|
+
if (/^[\+\-]?\d+n$/.test(v)) return BigInt(v.slice(0, v.length - 1));
|
|
103
|
+
if (/^[\+\-]\d/.test(v)) return parseFloat(v);
|
|
104
|
+
if (/^\d+[\-\/]/.test(v)) return new Date(v);
|
|
105
|
+
if (/^\d/.test(v)) return parseFloat(v);
|
|
106
|
+
switch (v) {
|
|
107
|
+
case "true": return true;
|
|
108
|
+
case "false": return false;
|
|
109
|
+
case "null": return null;
|
|
110
|
+
case "": return undefined;
|
|
111
|
+
case "Infinity": return Infinity;
|
|
112
|
+
case "NaN": return NaN;
|
|
113
|
+
}
|
|
114
|
+
if (/^\//.test(v)) {
|
|
115
|
+
var flag = /\/(\w*)$/.exec(v);
|
|
116
|
+
return new RegExp(v.slice(1, flag.index), flag[1]);
|
|
117
|
+
}
|
|
118
|
+
if (/^'/.test(v)) return Symbol(strings.decode(v));
|
|
119
|
+
return v;
|
|
120
|
+
}
|
|
121
|
+
function setkd([obj, kds]) {
|
|
122
|
+
if (!isjsam) return kds.forEach(setkv, obj);
|
|
123
|
+
for (var [k, d] of kds) {
|
|
124
|
+
if (typeof k === 'number');
|
|
125
|
+
else if (/^\d+$/.test(k)) k = this[k];
|
|
126
|
+
else k = parseValue(k);
|
|
127
|
+
if (d instanceof Object);
|
|
128
|
+
else if (d.length <= 16 && /^\d+$/.test(d)) d = this[d];
|
|
129
|
+
else d = parseValue(d);
|
|
130
|
+
obj[k] = d;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function setkv([k, v]) {
|
|
134
|
+
if (typeof k === 'number');
|
|
135
|
+
else if (/^\d+$/.test(k));
|
|
136
|
+
else k = parseValue(k);
|
|
137
|
+
if (v instanceof Object);
|
|
138
|
+
else v = parseValue(v);
|
|
139
|
+
this[k] = v;
|
|
140
|
+
}
|
|
141
|
+
var blocks = [];
|
|
142
|
+
var isjsam = false;
|
|
143
|
+
function scanblock(string, index, preload, obj) {
|
|
144
|
+
var reg = /\\[\s\S]|[\:,'"\}\]\{\[\/]/g;
|
|
145
|
+
reg.lastIndex = index;
|
|
146
|
+
var instr = false;
|
|
147
|
+
var inc = index === 0 ? preload.length : 1, k = 0, d = null;
|
|
148
|
+
var start = index;
|
|
149
|
+
var kds = [];
|
|
150
|
+
a: while (index < string.length) {
|
|
151
|
+
var match = reg.exec(string);
|
|
152
|
+
if (!match) {
|
|
153
|
+
index = string.length;
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
var m = match[0];
|
|
157
|
+
index = match.index + m.length;
|
|
158
|
+
if (/^['"\/]$/.test(m)) {
|
|
159
|
+
if (instr === m) {
|
|
160
|
+
instr = false;
|
|
169
161
|
}
|
|
162
|
+
else if (instr) continue;
|
|
163
|
+
else instr = m;
|
|
170
164
|
}
|
|
171
|
-
|
|
165
|
+
else if (instr) continue;
|
|
166
|
+
switch (m) {
|
|
167
|
+
case ":":
|
|
168
|
+
if (index > start + 10 && /^\d+[\/\-]/.test(string.slice(start, start + 10))) {
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
k = spaces.trim(string.slice(start, match.index));
|
|
172
|
+
start = index;
|
|
173
|
+
continue;
|
|
172
174
|
case ",":
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
d = spaces.trim(string.slice(start, match.index));
|
|
176
|
+
if (preload === obj) isjsam = true;
|
|
177
|
+
if (!d && typeof k === 'number') {
|
|
178
|
+
start = index;
|
|
179
|
+
k = inc++;
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (preload === obj) {
|
|
183
|
+
preload[k] = parseValue(d);
|
|
184
|
+
}
|
|
185
|
+
else kds.push([k, d]);
|
|
186
|
+
k = inc++;
|
|
187
|
+
start = index;
|
|
188
|
+
continue;
|
|
175
189
|
case "{":
|
|
176
|
-
|
|
177
|
-
o = {};
|
|
190
|
+
var o = {};
|
|
178
191
|
case "[":
|
|
179
|
-
o = o || [];
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
marked.push(trimed.length);
|
|
187
|
-
trimed.push(o);
|
|
188
|
-
cx = reg.lastIndex;
|
|
189
|
-
if (typeid) {
|
|
190
|
-
o._ = typeid;
|
|
192
|
+
var o = o || [];
|
|
193
|
+
d = spaces.trim(string.slice(start, match.index));
|
|
194
|
+
if (d) {
|
|
195
|
+
d = preload[d];
|
|
196
|
+
if (!d) throw new Error('数据异常!');
|
|
197
|
+
if (Object.setPrototypeOf) Object.setPrototypeOf(o, d.prototype);
|
|
198
|
+
else o = Object.create(d.prototype);
|
|
191
199
|
}
|
|
192
|
-
if (
|
|
193
|
-
|
|
194
|
-
var m = reg4.exec(string);
|
|
195
|
-
o._ = typeid || string.slice(cx, m.index);
|
|
196
|
-
cx = m.index;
|
|
200
|
+
if (preload === obj) {
|
|
201
|
+
preload[k] = o;
|
|
197
202
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
reg = reg5;
|
|
201
|
-
o = 1;
|
|
202
|
-
case "'":
|
|
203
|
-
reg = reg || reg6;
|
|
204
|
-
o = o || 2;
|
|
205
|
-
case "\"":
|
|
206
|
-
reg = reg || reg3;
|
|
207
|
-
reg.lastIndex = cx + 1;
|
|
208
|
-
do {
|
|
209
|
-
var s = reg.exec(string);
|
|
210
|
-
} while (s && s[0].length === 2);
|
|
211
|
-
var index = reg.lastIndex;
|
|
212
|
-
s = string.slice(cx + 1, index - 1).replace(/\\([\s\S])/g, '$1');
|
|
213
|
-
cx = index;
|
|
214
|
-
if (o == 2) {
|
|
215
|
-
s = Symbol(s);
|
|
216
|
-
} else if (o == 1) {
|
|
217
|
-
reg4.lastIndex = index;
|
|
218
|
-
var m = reg4.exec(string);
|
|
219
|
-
index = m.index;
|
|
220
|
-
var flag = string.slice(cx, index);
|
|
221
|
-
cx = index;
|
|
222
|
-
s = new RegExp(s, flag);
|
|
203
|
+
else {
|
|
204
|
+
kds.push([k, o]);
|
|
223
205
|
}
|
|
224
|
-
|
|
206
|
+
index = start = scanblock(string, index, preload, o, isjsam);
|
|
207
|
+
o = null;
|
|
208
|
+
k = inc;
|
|
209
|
+
reg.lastIndex = index;
|
|
225
210
|
break;
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
var index = match.index;
|
|
230
|
-
var s = string.slice(cx, index);
|
|
231
|
-
switch (s) {
|
|
232
|
-
case "null":
|
|
233
|
-
s = null;
|
|
234
|
-
break;
|
|
235
|
-
case "true":
|
|
236
|
-
s = true;
|
|
237
|
-
break;
|
|
238
|
-
case "false":
|
|
239
|
-
s = false;
|
|
240
|
-
break;
|
|
241
|
-
default:
|
|
242
|
-
if (/^\d+[\/\-]/i.test(s)) {
|
|
243
|
-
s = new Date(s);
|
|
244
|
-
}
|
|
245
|
-
else if (/^\-?\d+$/.test(s)) {
|
|
246
|
-
if (s.length > 15) {
|
|
247
|
-
s = BigInt(s);
|
|
248
|
-
} else {
|
|
249
|
-
s = parseInt(s);
|
|
250
|
-
}
|
|
251
|
-
} else {
|
|
252
|
-
s = parseFloat(s);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
trimed.push(s);
|
|
257
|
-
cx = index;
|
|
211
|
+
case "}": case "]":
|
|
212
|
+
index = match.index;
|
|
213
|
+
break a;
|
|
258
214
|
}
|
|
259
215
|
}
|
|
260
|
-
if (
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
for (var cx = 0, dx = marked.length; cx < dx; cx++) {
|
|
267
|
-
var index = marked[cx];
|
|
268
|
-
var o = trimed[index];
|
|
269
|
-
if (index > 0) index += preloads_length;
|
|
270
|
-
if (o._ > 0) dist[index] = Object.create(dist[o._].prototype);
|
|
271
|
-
else dist[index] = o instanceof Array ? [] : {};
|
|
272
|
-
}
|
|
273
|
-
for (var cx = 0, dx = marked.length; cx < dx; cx++) {
|
|
274
|
-
var index = marked[cx];
|
|
275
|
-
var o = trimed[index];
|
|
276
|
-
if (index > 0) index += preloads_length;
|
|
277
|
-
var t = dist[index];
|
|
278
|
-
var arr = o[""];
|
|
279
|
-
delete o[""];
|
|
280
|
-
delete o._;
|
|
281
|
-
if (arr) for (var k in arr) {
|
|
282
|
-
if (hasOwnProperty.call(arr, k)) t[k] = dist[arr[k]];
|
|
216
|
+
if (start < index) {
|
|
217
|
+
var d = spaces.trim(string.slice(start, index));
|
|
218
|
+
if (typeof k !== 'number' || d) {
|
|
219
|
+
if (obj === preload) preload[k] = parseValue(d);
|
|
220
|
+
else kds.push([k, d]);
|
|
283
221
|
}
|
|
284
|
-
for (var k in o) {
|
|
285
|
-
if (hasOwnProperty.call(o, k)) {
|
|
286
|
-
var v = o[k];
|
|
287
|
-
t[dist[k]] = dist[v];
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
if (trimed.length > 1 && typeof trimed[0] === 'number') {
|
|
292
|
-
return dist[trimed[0]];
|
|
293
222
|
}
|
|
294
|
-
|
|
223
|
+
blocks.push([obj, kds]);
|
|
224
|
+
return reg.lastIndex;
|
|
225
|
+
}
|
|
226
|
+
function parse(string, preload) {
|
|
227
|
+
if (isArrayLike(preload)) preload = Array.apply(null, preload);
|
|
228
|
+
else preload = [];
|
|
229
|
+
isjsam = false;
|
|
230
|
+
preload.unshift(void 0);
|
|
231
|
+
string = String(string);
|
|
232
|
+
scanblock(string, 0, preload, preload);
|
|
233
|
+
blocks.forEach(setkd, preload);
|
|
234
|
+
blocks = [];
|
|
235
|
+
return preload[0];
|
|
295
236
|
}
|
|
296
237
|
module.exports = {
|
|
297
238
|
stringify,
|
|
298
|
-
parse
|
|
299
|
-
if (/^\s*[^\{\[\s]|^\s*(?:\[\s*\]|\{\s*\}|)\s*$/.test(data)) return parse(data, preload);
|
|
300
|
-
if (/^\s*\{[\d\,\:\s]*\}\s*,/.test(data)) return parse(data, preload);
|
|
301
|
-
if (/^\s*\[[\d\,\:\s]*\]\s*,/.test(data)) return parse(data, preload);
|
|
302
|
-
return JSON.parse(data);
|
|
303
|
-
}
|
|
239
|
+
parse,
|
|
304
240
|
};
|
package/coms/basic/JSAM_test.js
CHANGED
|
@@ -37,6 +37,8 @@ var test_self = function () {
|
|
|
37
37
|
test({ a: false }) // {1:2},"a",false
|
|
38
38
|
test({ a: null }) // {1:2},"a",null
|
|
39
39
|
test({ a: 0 }) // {1:2},"a",0
|
|
40
|
+
test({ a: [0] }) // {a:2},"a",0
|
|
41
|
+
test({ 2: [0] }) // {a:2},"a",0
|
|
40
42
|
test({ a: NaN }) // {1:2},"a",NaN
|
|
41
43
|
test({ a: { b: { c: [3], d: [2] } } }) // {1:2},"a",{3:4},"b",{5:6,7:8},"c",[9],"d",[10],3,2
|
|
42
44
|
test({ a: { b: { c: [3, o], d: [2] } } }) // {1:2},"a",{3:4},"b",{5:6,7:8},"c",[9,10],"d",[11],3,{12:10},2,"o"
|
|
@@ -46,6 +48,8 @@ var test_self = function () {
|
|
|
46
48
|
d = { c };
|
|
47
49
|
a.d = d;
|
|
48
50
|
test(a); // {1:2},"d",{3:4},"c",[5],{6:0},"a"
|
|
51
|
+
test([{ "name": "用户", "open": true }, { "name": "导航", "open": true }, { "name": "商品", "open": true },]);
|
|
52
|
+
console.log(JSAM.parse(`[1:2,3:2,4:5,6:7,8:2,9:2,10:2,11:2,12:13,14:13,15:16],"is_errored",null,"error_message","is_loading",false,"is_loaded",true,"is_readonly","loading","loading_promise","data","appid",,"sign","smap",{17:7,18:7},"zh","en"`))
|
|
49
53
|
};
|
|
50
54
|
function test2(obj) {
|
|
51
55
|
var data = JSAM.parse(JSON.stringify(obj));
|
|
@@ -55,8 +59,31 @@ function test_json() {
|
|
|
55
59
|
test2({ 1: 2 });
|
|
56
60
|
test2({ "adfasdf": 22 });
|
|
57
61
|
test2([12, 23]);
|
|
62
|
+
test2({ "uptime": 15.602063, "memery": [22244769792, 38478614528], "arch": "x64", "platform": "win32", "nodeVersion": "v22.14.0", "version": "4.22.13", "machine": "x86_64" });
|
|
63
|
+
test2([{ "name": "用户", "open": true }, { "name": "导航", "open": true }, { "name": "商品", "open": true },]);
|
|
64
|
+
}
|
|
65
|
+
function gettime(f) {
|
|
66
|
+
var timestart = Date.now();
|
|
67
|
+
f();
|
|
68
|
+
return Date.now() - timestart;
|
|
69
|
+
}
|
|
70
|
+
function test_time() {
|
|
71
|
+
var data = Array(10000).fill(0).map((a, i) => (
|
|
72
|
+
{ obj: { obj: { [i >>> 6]: i }, obj2: ["您好,这是速度测试"], obj3: { key2: {} } }, key: 'asad' }
|
|
73
|
+
));
|
|
74
|
+
var t1 = gettime(() => basic_$JSON.stringify(data));
|
|
75
|
+
console.log(t1);
|
|
76
|
+
var t2 = gettime(() => JSON.stringify(data));
|
|
77
|
+
console.log(t2);
|
|
78
|
+
var t3 = gettime(() => JSAM.stringify(data));
|
|
79
|
+
console.log(t1, t2, t3);
|
|
80
|
+
var t4 = gettime(() => JSAM.stringify(data, false));
|
|
81
|
+
console.log(t1, t2, t3, t4);
|
|
58
82
|
}
|
|
59
83
|
function JSAM_test() {
|
|
84
|
+
JSAM.debug = true;
|
|
60
85
|
test_self();
|
|
61
86
|
test_json();
|
|
87
|
+
JSAM.debug = false;
|
|
88
|
+
test_time();
|
|
62
89
|
}
|
package/coms/basic/data.js
CHANGED
|
@@ -375,7 +375,7 @@ var parseData = function (sourceText) {
|
|
|
375
375
|
sourceText = sourceText.replace(/^[^\(]+\(([\s\S]*)\)[^\)]*$/, "$1");
|
|
376
376
|
}
|
|
377
377
|
try {
|
|
378
|
-
if (/^[\[\{][\d
|
|
378
|
+
if (/^[\[\{]|^[+\-]\d|^\d+[\/\-]|\dn$|^(Infinity|''|NaN|\d+|)$|^\/[\s\S]*?\/\w*$/.test(sourceText)) {
|
|
379
379
|
sourceText = JSAM.parse(sourceText);
|
|
380
380
|
} else {
|
|
381
381
|
sourceText = parseYML(sourceText);
|
|
@@ -1061,6 +1061,12 @@ var data = {
|
|
|
1061
1061
|
fireListener(instanceId, data);
|
|
1062
1062
|
return instanceDataMap[instanceId];
|
|
1063
1063
|
},
|
|
1064
|
+
wetInstance(instanceId, data, rememberWithStorage) {
|
|
1065
|
+
instanceHasDulpData = false;
|
|
1066
|
+
var res = this.setInstance(instanceId, data, rememberWithStorage);
|
|
1067
|
+
instanceHasDulpData = true;
|
|
1068
|
+
return res;
|
|
1069
|
+
},
|
|
1064
1070
|
patchInstance(instanceId, data, rememberWithStorage = 0) {
|
|
1065
1071
|
var instance = this.getInstance(instanceId);
|
|
1066
1072
|
extend(instance, data);
|
|
@@ -1136,14 +1142,21 @@ var data = {
|
|
|
1136
1142
|
extend(instance, data);
|
|
1137
1143
|
}
|
|
1138
1144
|
};
|
|
1139
|
-
|
|
1145
|
+
var instanceHasDulpData = true;
|
|
1140
1146
|
function setItem(instanceId, data, rememberWithStorage = 0) {
|
|
1141
1147
|
const storageId = userPrefix + instanceId + pagePathName;
|
|
1148
|
+
var buff = null;
|
|
1142
1149
|
if (rememberWithStorage !== false) {
|
|
1143
|
-
|
|
1150
|
+
try {
|
|
1151
|
+
sessionStorage.setItem(storageId, buff = JSAM.stringify(data, instanceHasDulpData));
|
|
1152
|
+
} catch (e) { console.error(i18n`无法存入数据到${"sessionStorage"}`, instanceId, e) }
|
|
1144
1153
|
}
|
|
1145
1154
|
if (rememberWithStorage) {
|
|
1146
|
-
|
|
1155
|
+
try {
|
|
1156
|
+
localStorage.setItem(storageId, buff || JSAM.stringify(data, instanceHasDulpData));
|
|
1157
|
+
} catch (e) {
|
|
1158
|
+
console.error(i18n`无法存入数据到${"localStorage"}`, instanceId, e)
|
|
1159
|
+
}
|
|
1147
1160
|
}
|
|
1148
1161
|
}
|
|
1149
1162
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var window = this;
|
|
2
2
|
function isArrayLike(a) {
|
|
3
|
-
if (a
|
|
3
|
+
if (a == null || typeof a !== 'object' || a.window === a || isNode(a)) return false;
|
|
4
4
|
if (isFinite(a.length)) {
|
|
5
5
|
if (a.length > 0) {
|
|
6
6
|
return a.length - 1 in a;
|
|
@@ -8,4 +8,5 @@ function isArrayLike(a) {
|
|
|
8
8
|
return true;
|
|
9
9
|
}
|
|
10
10
|
return false;
|
|
11
|
-
}
|
|
11
|
+
}
|
|
12
|
+
module.exports = isArrayLike;
|