efront 4.27.0 → 4.28.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.
- package/coms/basic/$split.js +16 -6
- package/coms/basic/removeFromList.js +2 -1
- package/coms/basic/strings.js +1 -1
- package/coms/compile/Javascript.js +30 -13
- package/coms/compile/auto-const.js +212 -0
- package/coms/compile/autoenum.js +3 -1
- package/coms/compile/autoiota.js +7 -10
- package/coms/compile/common.js +35 -13
- package/coms/compile/const.js +14 -0
- package/coms/compile/const_test.js +1 -0
- package/coms/compile/getMaped.js +36 -0
- package/coms/compile/patchname.js +2 -1
- package/coms/zimoli/alert.js +6 -0
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/coms/basic/$split.js
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
var split = function (reg, p) {
|
|
2
2
|
var s = [];
|
|
3
|
+
reg.lastIndex = 0;
|
|
4
|
+
var lastIndex = 0;
|
|
3
5
|
while (p) {
|
|
4
|
-
|
|
5
|
-
reg.lastIndex = 1;
|
|
6
|
+
reg.lastIndex++;
|
|
6
7
|
var m = reg.exec(p);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
if (!m) {
|
|
9
|
+
s.push(p.slice(lastIndex, p.length));
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
s.push(p.slice(lastIndex, m.index));
|
|
13
|
+
lastIndex = m.index + m.length;
|
|
10
14
|
}
|
|
11
15
|
if (m) s.push('');
|
|
12
16
|
return s;
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
module.exports = function (p) {
|
|
20
|
+
var s = split(/[\\\/]/g, p);
|
|
21
|
+
if (s.length > 1) return s;
|
|
22
|
+
return split(/\$/g, p);
|
|
13
23
|
}
|
package/coms/basic/strings.js
CHANGED
|
@@ -3,6 +3,8 @@ var strings = require("../basic/strings");
|
|
|
3
3
|
var Program = require("./Program");
|
|
4
4
|
var backEach = require("../basic/backEach");
|
|
5
5
|
var parseNumber = require('../basic/parseNumber');
|
|
6
|
+
var removeFromList = require("../basic/removeFromList");
|
|
7
|
+
var patchname = require("./patchname");
|
|
6
8
|
const {
|
|
7
9
|
/* 1 */COMMENT,
|
|
8
10
|
/* 2 */SPACE,
|
|
@@ -713,6 +715,7 @@ var removeExport = function (c, i, code) {
|
|
|
713
715
|
}
|
|
714
716
|
var o = n.first;
|
|
715
717
|
var allexports = [];
|
|
718
|
+
var exports = used.exports;
|
|
716
719
|
while (o) {
|
|
717
720
|
var name = o, prop = o.text;
|
|
718
721
|
if (from) {
|
|
@@ -734,6 +737,15 @@ var removeExport = function (c, i, code) {
|
|
|
734
737
|
o = n && n.next;
|
|
735
738
|
var exp = scan(`\r\nexports.${prop}=`);
|
|
736
739
|
exp.push(name);
|
|
740
|
+
var exported = exp.first;
|
|
741
|
+
var u0 = used[name.tack][0];
|
|
742
|
+
var kind = u0.kind;
|
|
743
|
+
exports.push(exported);
|
|
744
|
+
if (kind === "const") {
|
|
745
|
+
exported.tack = 'exports';
|
|
746
|
+
exported.origin = name.tack;
|
|
747
|
+
exported.kind = kind;;
|
|
748
|
+
}
|
|
737
749
|
name.isExpress = true;
|
|
738
750
|
allexports.push(exp);
|
|
739
751
|
}
|
|
@@ -743,10 +755,11 @@ var removeExport = function (c, i, code) {
|
|
|
743
755
|
i = ni;
|
|
744
756
|
}
|
|
745
757
|
else {
|
|
746
|
-
|
|
758
|
+
splice(code, i, ni - i);
|
|
747
759
|
}
|
|
748
760
|
for (var exp of allexports) {
|
|
749
|
-
|
|
761
|
+
splice(code, i, 0, ...exp);
|
|
762
|
+
i += exp.length;
|
|
750
763
|
}
|
|
751
764
|
if (!allexports.length) code.exportEmpty = true;
|
|
752
765
|
return;
|
|
@@ -809,14 +822,17 @@ var removeExport = function (c, i, code) {
|
|
|
809
822
|
}
|
|
810
823
|
}
|
|
811
824
|
var oi = code.indexOf(nn, i);
|
|
812
|
-
|
|
813
|
-
|
|
825
|
+
var exportDecs = code.exportDecs;
|
|
826
|
+
if (!exportDecs) {
|
|
827
|
+
exportDecs = code.exportDecs = [];
|
|
814
828
|
}
|
|
829
|
+
var kind = n.text;
|
|
815
830
|
dec.forEach(function rm(d) {
|
|
816
831
|
if (d instanceof Array) return d.forEach(rm);
|
|
817
832
|
for (var a of used[d]) {
|
|
818
833
|
if (a.kind && a.kind !== 'export') continue;
|
|
819
|
-
|
|
834
|
+
a.kind = kind;
|
|
835
|
+
if (!a.export) exportDecs.push(a), a.export = true;
|
|
820
836
|
}
|
|
821
837
|
});
|
|
822
838
|
dec.forEach(d => {
|
|
@@ -906,22 +922,23 @@ Javascript.prototype.fix = function (code) {
|
|
|
906
922
|
}
|
|
907
923
|
if (code.exportDecs) {
|
|
908
924
|
var exportDecs = code.exportDecs;
|
|
909
|
-
delete code.exportDecs;
|
|
910
|
-
var exports = code.used.exports;
|
|
911
925
|
var used = code.used;
|
|
926
|
+
var exports = used.exports;
|
|
912
927
|
var envs = code.envs;
|
|
913
928
|
if (!exports) {
|
|
914
|
-
exports =
|
|
929
|
+
exports = used.exports = [];
|
|
915
930
|
}
|
|
916
931
|
exportDecs.forEach(e => {
|
|
917
932
|
e.text = 'exports.' + e.text;
|
|
918
933
|
exports.push(e);
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
934
|
+
var tack = e.tack;
|
|
935
|
+
var ud = used[tack];
|
|
936
|
+
removeFromList(ud, e);
|
|
937
|
+
if (!ud.length) {
|
|
938
|
+
delete used[tack];
|
|
939
|
+
delete envs[tack];
|
|
923
940
|
}
|
|
924
|
-
e.origin =
|
|
941
|
+
e.origin = tack;
|
|
925
942
|
e.tack = 'exports';
|
|
926
943
|
if (e.needEqual) {
|
|
927
944
|
var n = e.next;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
var isConst = a => a.kind === 'const';
|
|
2
|
+
var autoiota = require("./autoiota");
|
|
3
|
+
var removeFromList = require("../basic/removeFromList");
|
|
4
|
+
var scanner2 = require("./scanner2");
|
|
5
|
+
var strings = require("../basic/strings");
|
|
6
|
+
var split = require("../basic/$split");
|
|
7
|
+
var path = require("path");
|
|
8
|
+
var fs = require('fs');
|
|
9
|
+
var { STAMP, QUOTED, SCOPED, EXPRESS, COMMENT, pickArgument, remove, splice, insertBefore, VALUE, pickAssignment, createString } = require("./common");
|
|
10
|
+
var getExported = function (code) {
|
|
11
|
+
var used = code.used;
|
|
12
|
+
var exports = used.exports;
|
|
13
|
+
if (!exports) {
|
|
14
|
+
if (used.module || code.return) return;
|
|
15
|
+
var consts = [];
|
|
16
|
+
for (var k in used) {
|
|
17
|
+
var u = used[k];
|
|
18
|
+
var o = u[0];
|
|
19
|
+
if (isConst(o)) {
|
|
20
|
+
o.name = o.text;
|
|
21
|
+
consts.push(o);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return consts;
|
|
25
|
+
}
|
|
26
|
+
var consts = [];
|
|
27
|
+
for (var a of exports) {
|
|
28
|
+
if (isConst(a)) {
|
|
29
|
+
a.name = a.origin;
|
|
30
|
+
consts.push(a);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return consts;
|
|
34
|
+
};
|
|
35
|
+
var getAssignedConst = function (a, used) {
|
|
36
|
+
var exp = pickAssignment(a);
|
|
37
|
+
var n = a.next;
|
|
38
|
+
if (!n || n.type !== STAMP || n.text !== "=") return;
|
|
39
|
+
var nn = n.next;
|
|
40
|
+
if (!nn) return;
|
|
41
|
+
if (nn !== exp[exp.length - 1]) return;
|
|
42
|
+
if (nn.type === EXPRESS) {
|
|
43
|
+
var a = nn.text;
|
|
44
|
+
if (/[\.\[]/.test(a)) return;
|
|
45
|
+
var u0 = used[a][0];
|
|
46
|
+
if (u0.kind === 'const') {
|
|
47
|
+
return getAssignedConst(u0, used);
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (nn.type !== QUOTED && !nn.isdigit) return;
|
|
52
|
+
return nn;
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
var findConsts = function (text) {
|
|
56
|
+
var code = scanner2(text);
|
|
57
|
+
code.fix();
|
|
58
|
+
var consts = getExported(code);
|
|
59
|
+
if (!consts) return;
|
|
60
|
+
autoiota(code);
|
|
61
|
+
var used = code.used;
|
|
62
|
+
var vmap = Object.create(null);
|
|
63
|
+
for (var a of consts) {
|
|
64
|
+
var name = a.name;
|
|
65
|
+
if (/[\.\[]/.test(name)) continue;
|
|
66
|
+
var c = getAssignedConst(a, used);
|
|
67
|
+
if (c) vmap[name] = c;
|
|
68
|
+
}
|
|
69
|
+
return vmap;
|
|
70
|
+
};
|
|
71
|
+
var setEnvDefinedConsts = function (used, k, v) {
|
|
72
|
+
var uk = used[k];
|
|
73
|
+
for (var a of uk) {
|
|
74
|
+
var t = a.text;
|
|
75
|
+
var dots = /^\.+/.exec(t);
|
|
76
|
+
if (dots) t = t.slice(dots[0].length);
|
|
77
|
+
t = t.slice(a.tack.length);
|
|
78
|
+
var comment = { type: COMMENT, text: `/*${k}*/` };
|
|
79
|
+
if (t) {
|
|
80
|
+
insertBefore(a, comment, { type: EXPRESS, text: t });
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
insertBefore(a, comment);
|
|
84
|
+
}
|
|
85
|
+
removeFromList(uk, a);
|
|
86
|
+
a.type = v.type;
|
|
87
|
+
a.text = v.text;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
var setMapDefinedConsts = function (u, m) {
|
|
91
|
+
|
|
92
|
+
};
|
|
93
|
+
var getMaped = require("./getMaped");
|
|
94
|
+
var maped = Object.create(null);
|
|
95
|
+
var loadConsts = function (fullpath) {
|
|
96
|
+
if (fullpath in maped) return maped[fullpath];
|
|
97
|
+
var data = fs.readFileSync(fullpath);
|
|
98
|
+
var consts = findConsts(String(data));
|
|
99
|
+
maped[fullpath] = consts;
|
|
100
|
+
return consts;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
var getOnlyString = function (q) {
|
|
105
|
+
var f = q.first;
|
|
106
|
+
if (f !== q.last || f?.type !== QUOTED || f.length) return;
|
|
107
|
+
var t = strings.decode(f.text);
|
|
108
|
+
return t;
|
|
109
|
+
};
|
|
110
|
+
var getCopy = function (o) {
|
|
111
|
+
var a = { type: o.type, text: o.text };
|
|
112
|
+
if (o.isdigit) a.isdigit = true;
|
|
113
|
+
return a;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
var setRequiredConsts = function (code, fullpath, commap) {
|
|
117
|
+
var mmap = commap["?"]
|
|
118
|
+
if (!mmap) return code;
|
|
119
|
+
var url = mmap[fullpath];
|
|
120
|
+
var upath = split(url);
|
|
121
|
+
var requires = code.used.require;
|
|
122
|
+
if (!requires) return code;
|
|
123
|
+
var used = code.used;
|
|
124
|
+
for (var r of requires) {
|
|
125
|
+
var q = r.next;
|
|
126
|
+
if (q?.type !== SCOPED || q.entry !== '(') continue;
|
|
127
|
+
var t = getOnlyString(q);
|
|
128
|
+
if (!t) continue;
|
|
129
|
+
var p = getMaped(upath, commap, t);
|
|
130
|
+
if (!p) continue;
|
|
131
|
+
var consts = loadConsts(p);
|
|
132
|
+
if (!consts) continue;
|
|
133
|
+
var exp = pickAssignment(r);
|
|
134
|
+
var e = exp[exp.length - 1];
|
|
135
|
+
if (e !== q) {
|
|
136
|
+
if (e.prev !== q) continue;
|
|
137
|
+
var t = null;
|
|
138
|
+
switch (e.type) {
|
|
139
|
+
default: continue;
|
|
140
|
+
case EXPRESS:
|
|
141
|
+
t = e.text;
|
|
142
|
+
t = t.replace(/^\./, '');
|
|
143
|
+
if (/[\.\[]/.test(t)) continue;
|
|
144
|
+
break;
|
|
145
|
+
case SCOPED:
|
|
146
|
+
if (e.entry !== "[" || e.first !== e.last) continue;
|
|
147
|
+
var t = getOnlyString(e);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
if (!t || !(t in consts)) continue;
|
|
151
|
+
insertBefore(r, getCopy(consts[t]), { type: STAMP, text: ',' });
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
var f = exp[0];
|
|
155
|
+
if (f.type === EXPRESS) {
|
|
156
|
+
setMapDefinedConsts(f.text, consts);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (f.type === SCOPED && f.entry === "{") {
|
|
160
|
+
var o = f.first;
|
|
161
|
+
var collected = [];
|
|
162
|
+
while (o) {
|
|
163
|
+
var exp = pickArgument(o);
|
|
164
|
+
var e = exp[exp.length - 1].next;
|
|
165
|
+
if (exp.length === 1) a: {
|
|
166
|
+
var t = o.text;
|
|
167
|
+
if (/[\.\[]/.test(t)) break a;
|
|
168
|
+
if (!(t in consts)) break a;
|
|
169
|
+
remove(o, e);
|
|
170
|
+
o.kind = 'const';
|
|
171
|
+
var eq = { type: STAMP, text: '=' };
|
|
172
|
+
o.equal = eq;
|
|
173
|
+
o.type = EXPRESS;
|
|
174
|
+
delete o.short;
|
|
175
|
+
collected.push(o, eq, getCopy(consts[t]), { type: STAMP, text: ',' });
|
|
176
|
+
var name = o.origin || o.tack;
|
|
177
|
+
var u = used[name];
|
|
178
|
+
removeFromList(u, o);
|
|
179
|
+
u.unshift(o);
|
|
180
|
+
}
|
|
181
|
+
if (e?.type === STAMP && e.text === ',') e = e.next;
|
|
182
|
+
o = e;
|
|
183
|
+
}
|
|
184
|
+
insertBefore(f, ...collected);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return code;
|
|
188
|
+
}
|
|
189
|
+
var autoConst = function (code, fullpath, ignoreImported) {
|
|
190
|
+
var vmap = this?.["&"];
|
|
191
|
+
var { envs, used, envs } = code;
|
|
192
|
+
if (!vmap) {
|
|
193
|
+
if (!ignoreImported) return setRequiredConsts(code, fullpath, this);
|
|
194
|
+
return code;
|
|
195
|
+
}
|
|
196
|
+
var p = path.dirname(fullpath);
|
|
197
|
+
var mp = vmap[p];
|
|
198
|
+
if (!mp) {
|
|
199
|
+
if (!ignoreImported) return setRequiredConsts(code, fullpath, this);
|
|
200
|
+
return code;
|
|
201
|
+
}
|
|
202
|
+
for (var k in envs) {
|
|
203
|
+
if (k === 'require') {
|
|
204
|
+
if (!ignoreImported) setRequiredConsts(code, fullpath, this);
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
if (k in mp) setEnvDefinedConsts(used, k, mp[k]), delete envs[k];
|
|
208
|
+
}
|
|
209
|
+
return code;
|
|
210
|
+
};
|
|
211
|
+
autoConst.findConsts = findConsts;
|
|
212
|
+
module.exports = autoConst;
|
package/coms/compile/autoenum.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var { skipAssignment, snapSentenceHead, snapExpressFoot, EXPRESS, SPACE, SCOPED, QUOTED, VALUE, STRAP, STAMP, number_reg, createString } = require("./common");
|
|
1
|
+
var { skipAssignment, snapSentenceHead, snapExpressFoot, pickAssignment, EXPRESS, SPACE, SCOPED, QUOTED, VALUE, STRAP, STAMP, number_reg, createString } = require("./common");
|
|
2
2
|
var strings = require("../basic/strings");
|
|
3
3
|
|
|
4
4
|
var createRefId = function (o) {
|
|
@@ -59,6 +59,8 @@ var ignore = Symbol("ignore");
|
|
|
59
59
|
var maplist = function (u) {
|
|
60
60
|
var map = Object.create(null);
|
|
61
61
|
for (var o of u) {
|
|
62
|
+
if (o.maped) continue;
|
|
63
|
+
o.maped = true;
|
|
62
64
|
var r = createRefId(o);
|
|
63
65
|
if (!map[r]) {
|
|
64
66
|
map[r] = [];
|
package/coms/compile/autoiota.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var { skipAssignment, createString, createScoped, relink, STRAP, STAMP, SCOPED, EXPRESS, VALUE, SPACE, COMMENT } = require("./common");
|
|
1
|
+
var { skipAssignment, createString, createScoped, splice, relink, STRAP, STAMP, SCOPED, EXPRESS, VALUE, SPACE, COMMENT } = require("./common");
|
|
2
2
|
var backEach = require("../basic/backEach");
|
|
3
3
|
var scanner2 = require("./scanner2");
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ var removeNew = function (a, ai) {
|
|
|
6
6
|
var p = a.prev;
|
|
7
7
|
if (p && p.type === STRAP && p.text === 'new') {
|
|
8
8
|
ai = a.queue.lastIndexOf(p, ai);
|
|
9
|
-
a.queue
|
|
9
|
+
splice(a.queue, ai, 1);
|
|
10
10
|
}
|
|
11
11
|
return ai;
|
|
12
12
|
};
|
|
@@ -60,6 +60,7 @@ var assignIota = function (v) {
|
|
|
60
60
|
ppmap.forEach((ppm, i) => {
|
|
61
61
|
if (!ppm) return;
|
|
62
62
|
var eq = { type: STAMP, text: '=' };
|
|
63
|
+
ppm[0].equal = eq;
|
|
63
64
|
if (vmap[i]) res.push(...ppm, eq, ...vmap[i]);
|
|
64
65
|
else if (ppval[i]) res.push(...ppm, eq, ...ppval[i]);
|
|
65
66
|
else res.push(...ppm);
|
|
@@ -68,8 +69,7 @@ var assignIota = function (v) {
|
|
|
68
69
|
res.pop();
|
|
69
70
|
var ppi = p.queue.indexOf(pp);
|
|
70
71
|
var vi = p.queue.indexOf(v, ppi);
|
|
71
|
-
p.queue
|
|
72
|
-
relink(p.queue);
|
|
72
|
+
splice(p.queue, ppi, vi - ppi + 1, ...res);
|
|
73
73
|
}
|
|
74
74
|
var arrayFillMap = function (a, i, as) {
|
|
75
75
|
if (a.text !== 'Array' || !a.next) return;
|
|
@@ -89,20 +89,17 @@ var arrayFillMap = function (a, i, as) {
|
|
|
89
89
|
var ni = a.queue.indexOf(n);
|
|
90
90
|
var nnni = a.queue.indexOf(nnn, ni);
|
|
91
91
|
if (!f) {
|
|
92
|
-
a.queue
|
|
93
|
-
relink(a.queue);
|
|
92
|
+
splice(a.queue, n + 1, nnni - ni);
|
|
94
93
|
return;
|
|
95
94
|
}
|
|
96
|
-
a.queue
|
|
95
|
+
splice(a.queue, ni, nnni - ni);
|
|
97
96
|
nnn.unshift({ type: STAMP, text: ',' });
|
|
98
97
|
nnn.unshift.apply(nnn, n);
|
|
99
98
|
a.text = "ArrayFill";
|
|
100
|
-
|
|
99
|
+
splice(as, i, 1);
|
|
101
100
|
if (!this.envs.ArrayFill) this.envs.ArrayFill = true;
|
|
102
101
|
if (!this.used.ArrayFill) this.used.ArrayFill = [];
|
|
103
102
|
this.used.ArrayFill.push(a);
|
|
104
|
-
relink(nnn);
|
|
105
|
-
relink(a.queue);
|
|
106
103
|
return;
|
|
107
104
|
}
|
|
108
105
|
var ai = a.queue.indexOf(a);
|
package/coms/compile/common.js
CHANGED
|
@@ -299,7 +299,7 @@ var getFunctionHeadBeforeScoped = function (p) {
|
|
|
299
299
|
}
|
|
300
300
|
if (p.isprop) return p;
|
|
301
301
|
}
|
|
302
|
-
function
|
|
302
|
+
function snapAssignmentHead(o) {
|
|
303
303
|
// 只检查一级
|
|
304
304
|
while (o && getprev(o)) {
|
|
305
305
|
var p = getprev(o);
|
|
@@ -358,7 +358,7 @@ function snapSentenceHead(o) {
|
|
|
358
358
|
break;
|
|
359
359
|
}
|
|
360
360
|
if (p.type === STRAP) {
|
|
361
|
-
if (/^(?:new|void|typeof|delete|await|
|
|
361
|
+
if (/^(?:new|void|typeof|delete|await|class|function|async)$/.test(p.text)) {
|
|
362
362
|
o = p;
|
|
363
363
|
continue;
|
|
364
364
|
}
|
|
@@ -383,7 +383,7 @@ function snapSentenceHead(o) {
|
|
|
383
383
|
break;
|
|
384
384
|
}
|
|
385
385
|
if (p.type === STAMP) {
|
|
386
|
-
if (
|
|
386
|
+
if (/^(=>|;|,)$/.test(p.text)) {
|
|
387
387
|
break;
|
|
388
388
|
}
|
|
389
389
|
if (/^[\?\:]$/.test(p.text)) {
|
|
@@ -408,11 +408,6 @@ function snapSentenceHead(o) {
|
|
|
408
408
|
}
|
|
409
409
|
break;
|
|
410
410
|
}
|
|
411
|
-
while (o) {
|
|
412
|
-
var p = getprev(o);
|
|
413
|
-
if (!p || p.type !== LABEL) break;
|
|
414
|
-
o = p;
|
|
415
|
-
}
|
|
416
411
|
return o;
|
|
417
412
|
}
|
|
418
413
|
var getStrapHead = function (o) {
|
|
@@ -1228,7 +1223,7 @@ var mapDeclared = function (map, declared) {
|
|
|
1228
1223
|
}
|
|
1229
1224
|
return map;
|
|
1230
1225
|
};
|
|
1231
|
-
|
|
1226
|
+
import { uncode } from "../basic/strings.js";
|
|
1232
1227
|
var saveTo = function (used, k, o) {
|
|
1233
1228
|
k = uncode(k);
|
|
1234
1229
|
if (!(used[k] instanceof Array)) used[k] = [];
|
|
@@ -1593,7 +1588,7 @@ var createExpressList = function (code) {
|
|
|
1593
1588
|
if (/^[,;]$/.test(c.text)) {
|
|
1594
1589
|
ex++;
|
|
1595
1590
|
}
|
|
1596
|
-
else if (c.text === ':' && !c.isExpress && c
|
|
1591
|
+
else if (c.text === ':' && !c.isExpress && getprev(c)?.type !== PROPERTY) {
|
|
1597
1592
|
ex++;
|
|
1598
1593
|
}
|
|
1599
1594
|
}
|
|
@@ -1655,11 +1650,13 @@ var remove = function (o, end) {
|
|
|
1655
1650
|
var i = q.indexOf(o);
|
|
1656
1651
|
var length = 1;
|
|
1657
1652
|
if (arguments.length === 2) {
|
|
1658
|
-
|
|
1659
|
-
if (
|
|
1653
|
+
var e = q.indexOf(end, i);
|
|
1654
|
+
if (e < 0) end = end ? i : q.length;
|
|
1655
|
+
else end = e + 1;
|
|
1660
1656
|
length = end - i;
|
|
1661
1657
|
}
|
|
1662
1658
|
if (i >= 0) splice(q, i, length);
|
|
1659
|
+
return length;
|
|
1663
1660
|
};
|
|
1664
1661
|
var replace = function (o, ...args) {
|
|
1665
1662
|
var queue = o.queue;
|
|
@@ -1739,6 +1736,29 @@ var pickArgument = function (o) {
|
|
|
1739
1736
|
}
|
|
1740
1737
|
return res;
|
|
1741
1738
|
};
|
|
1739
|
+
var snapSentenceHead = function (o) {
|
|
1740
|
+
while (o) {
|
|
1741
|
+
o = snapAssignmentHead(o)
|
|
1742
|
+
var p = getprev(o);
|
|
1743
|
+
if (p?.type === STAMP && p.text === ',') {
|
|
1744
|
+
var pp = getprev(p);
|
|
1745
|
+
if (!pp) break;
|
|
1746
|
+
o = pp;
|
|
1747
|
+
continue;
|
|
1748
|
+
}
|
|
1749
|
+
break;
|
|
1750
|
+
}
|
|
1751
|
+
var p = getprev(o);
|
|
1752
|
+
if (p?.type === STRAP && /^(var|let|const)$/.test(p.text)) {
|
|
1753
|
+
o = p;
|
|
1754
|
+
}
|
|
1755
|
+
while (o) {
|
|
1756
|
+
var p = getprev(o);
|
|
1757
|
+
if (!p || p.type !== LABEL) break;
|
|
1758
|
+
o = p;
|
|
1759
|
+
}
|
|
1760
|
+
return o;
|
|
1761
|
+
};
|
|
1742
1762
|
var pickSentence = function (o) {
|
|
1743
1763
|
if (!o) return [];
|
|
1744
1764
|
if (o && o.type & (SPACE | COMMENT) && getprev(o)) o = getprev(o);
|
|
@@ -1775,6 +1795,7 @@ var pickExpress = function (o) {
|
|
|
1775
1795
|
return os;
|
|
1776
1796
|
};
|
|
1777
1797
|
var pickAssignment = function (n) {
|
|
1798
|
+
n = snapAssignmentHead(n);
|
|
1778
1799
|
var e = skipAssignment(n);
|
|
1779
1800
|
var values = [];
|
|
1780
1801
|
while (n && n !== e) {
|
|
@@ -1905,7 +1926,7 @@ var isDeclareOnly = function (o) {
|
|
|
1905
1926
|
return false;
|
|
1906
1927
|
}
|
|
1907
1928
|
|
|
1908
|
-
|
|
1929
|
+
export {
|
|
1909
1930
|
/* 1 */COMMENT,
|
|
1910
1931
|
/* 2 */SPACE,
|
|
1911
1932
|
/* 4 */STRAP,
|
|
@@ -1937,6 +1958,7 @@ module.exports = {
|
|
|
1937
1958
|
pickArgument,
|
|
1938
1959
|
pickSentence,
|
|
1939
1960
|
pickExpress,
|
|
1961
|
+
snapAssignmentHead,
|
|
1940
1962
|
pickAssignment,
|
|
1941
1963
|
snapExpressHead,
|
|
1942
1964
|
snapExpressFoot,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const [
|
|
2
|
+
/* 1 */COMMENT,
|
|
3
|
+
/* 2 */SPACE,
|
|
4
|
+
/* 4 */STRAP,
|
|
5
|
+
/* 8 */STAMP,
|
|
6
|
+
/* 16 */VALUE,
|
|
7
|
+
/* 32 */QUOTED,
|
|
8
|
+
/* 64 */PIECE,
|
|
9
|
+
/* 128 */EXPRESS,
|
|
10
|
+
/* 256 */SCOPED,
|
|
11
|
+
/* 512 */LABEL,
|
|
12
|
+
/*1024 */PROPERTY,
|
|
13
|
+
/*2048 */ELEMENT,
|
|
14
|
+
] = new Array(20).fill(0).map((_, a) => 1 << a);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
console.log(SPACE, COMMENT);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var split = require("../basic/$split");
|
|
2
|
+
function getMaped(refpath, mmap, m) {
|
|
3
|
+
var refs = refpath.slice();
|
|
4
|
+
refs.pop();
|
|
5
|
+
var a = split(m);
|
|
6
|
+
for (var cx = 0; cx < a.length; cx++) switch (a[cx]) {
|
|
7
|
+
case "..":
|
|
8
|
+
if (cx > 0) {
|
|
9
|
+
a.splice(cx - 1, 2);
|
|
10
|
+
cx -= 2;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
refs.pop();
|
|
14
|
+
}
|
|
15
|
+
break;
|
|
16
|
+
case ".":
|
|
17
|
+
case "":
|
|
18
|
+
a.splice(cx, 1);
|
|
19
|
+
cx--;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
while (refs.length) {
|
|
23
|
+
var tmp = refs.concat(a);
|
|
24
|
+
var r = tmp.join("$");
|
|
25
|
+
if (r in mmap) {
|
|
26
|
+
r = mmap[r];
|
|
27
|
+
return r;
|
|
28
|
+
}
|
|
29
|
+
refs.pop();
|
|
30
|
+
}
|
|
31
|
+
if (m in mmap) {
|
|
32
|
+
var r = mmap[m];
|
|
33
|
+
return r;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
module.exports = getMaped;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var { QUOTED, unshort } = common;
|
|
1
|
+
var { QUOTED, unshort } = require("./common");
|
|
2
2
|
var patchname = function (prefix, node, alias) {
|
|
3
3
|
if (node.isprop && node.short) {
|
|
4
4
|
unshort(node);
|
|
@@ -11,3 +11,4 @@ var patchname = function (prefix, node, alias) {
|
|
|
11
11
|
if (hasdot) t = "..." + t;
|
|
12
12
|
node.text = t;
|
|
13
13
|
};
|
|
14
|
+
module.exports = patchname;
|
package/coms/zimoli/alert.js
CHANGED