datafolder 1.0.6 → 1.0.8
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/README.md +7 -2
- package/index.js +1 -1
- package/internal.md +121 -0
- package/package.json +8 -6
- package/scripts/airbnb.js +77 -72
- package/scripts/airbnb2.js +78 -73
- package/scripts/airbnb2_queries.js +181 -229
- package/scripts/airbnb_queries.js +214 -265
- package/scripts/convertBinFiles.js +47 -0
- package/scripts/downloadFile.js +41 -40
- package/scripts/express.js +44 -48
- package/scripts/fastify.js +71 -80
- package/scripts/flights.js +71 -75
- package/scripts/flights2.js +78 -81
- package/scripts/flights2_queries.js +417 -455
- package/scripts/flights_queries.js +381 -407
- package/src/QyAcl.d.ts +17 -0
- package/src/QyAcl.js +113 -116
- package/src/QyAclSaver.d.ts +4 -0
- package/src/QyAclSaver.js +3 -3
- package/src/QyAclSaver_Worker.d.ts +9 -0
- package/src/QyAclSaver_Worker.js +2 -4
- package/src/QyAclWriter.d.ts +5 -0
- package/src/QyBatch.d.ts +42 -0
- package/src/QyBatch.js +8 -8
- package/src/QyBinWriter.d.ts +15 -0
- package/src/QyCD.d.ts +37 -0
- package/src/QyCD.js +27 -16
- package/src/QyCache.d.ts +44 -0
- package/src/QyCache.js +71 -59
- package/src/QyCompressor.d.ts +9 -0
- package/src/QyCompressor.js +29 -29
- package/src/QyCompressor_Worker.d.ts +1 -0
- package/src/QyDB.d.ts +42 -0
- package/src/QyDB.js +13 -11
- package/src/QyDefaultOptions.d.ts +1 -0
- package/src/QyDefaultOptions.js +3 -0
- package/src/QyDir.d.ts +48 -0
- package/src/QyDir.js +41 -41
- package/src/QyFetch.d.ts +7 -0
- package/src/QyFetch.js +3 -4
- package/src/QyFile.d.ts +19 -0
- package/src/QyFile.js +35 -34
- package/src/QyFileContentUtils.d.ts +13 -0
- package/src/QyFileContentUtils.js +126 -126
- package/src/QyFileLogger.d.ts +11 -0
- package/src/QyIndex.d.ts +6 -0
- package/src/QyIndex.js +73 -75
- package/src/QyIndexPropTree.d.ts +7 -0
- package/src/QyIndexPropTree.js +24 -24
- package/src/QyIntersectNode.d.ts +7 -0
- package/src/QyIntersectNode.js +15 -15
- package/src/QyItem.d.ts +30 -0
- package/src/QyItem.js +32 -28
- package/src/QyJsonSaver.d.ts +6 -0
- package/src/QyKVData.d.ts +12 -0
- package/src/QyKVData.js +30 -20
- package/src/QyKVDataCleaner.d.ts +4 -0
- package/src/QyKVDataCleaner.js +1 -1
- package/src/QyKVDataCleaner_Worker.d.ts +13 -0
- package/src/QyKVDataCleaner_Worker.js +2 -4
- package/src/QyKVDataLoader.d.ts +9 -0
- package/src/QyKVDataLoader.js +11 -11
- package/src/QyKVDataSaver.d.ts +4 -0
- package/src/QyKVDataSaver.js +6 -6
- package/src/QyKVDataSaver_Worker.d.ts +13 -0
- package/src/QyKVDataSaver_Worker.js +11 -13
- package/src/QyLogFileSaver.d.ts +4 -0
- package/src/QyLogFileSaver.js +1 -1
- package/src/QyLogFileSaver_Worker.d.ts +8 -0
- package/src/QyLogFileSaver_Worker.js +2 -4
- package/src/QyLogger.d.ts +10 -0
- package/src/QyLogger.js +40 -40
- package/src/QyMessageWorker.d.ts +5 -0
- package/src/QyMessageWorker.js +7 -7
- package/src/QyMessager.d.ts +7 -0
- package/src/QyMessager.js +30 -27
- package/src/QyMessager_Run.d.ts +1 -0
- package/src/QyMessager_Run.js +11 -6
- package/src/QyMod.d.ts +1 -0
- package/src/QyMod.js +6 -6
- package/src/QyOpRunner.d.ts +10 -0
- package/src/QyOpRunner.js +39 -39
- package/src/QyQueue.d.ts +11 -0
- package/src/QySaver.d.ts +10 -0
- package/src/QySnapshotCompactor.d.ts +4 -0
- package/src/QySnapshotCompactor.js +1 -1
- package/src/QySnapshotCompactor_Worker.d.ts +11 -0
- package/src/QySnapshotCompactor_Worker.js +21 -22
- package/src/QySnapshotSaver.d.ts +4 -0
- package/src/QySnapshotSaver.js +1 -1
- package/src/QySnapshotSaver_Worker.d.ts +16 -0
- package/src/QySnapshotSaver_Worker.js +56 -53
- package/src/QySnapshots.d.ts +27 -0
- package/src/QySnapshots.js +74 -66
- package/src/QyStructure.d.ts +1 -0
- package/src/QyStructure.js +18 -18
- package/src/QyTrigger.d.ts +9 -0
- package/src/QyTrigger.js +30 -30
- package/src/QyUnionNode.d.ts +17 -0
- package/src/QyUnionNode.js +2 -2
- package/src/QyUtils.d.ts +53 -0
- package/src/QyUtils.js +140 -117
- package/src/QyWorker.d.ts +5 -0
- package/src/QyWorker.js +18 -18
- package/src/hackernews.d.ts +1 -0
- package/src/hackernews.js +59 -47
- package/src/rpc/getRpcFiles.js +1 -0
- package/src/rpc/getTriggerFiles.js +1 -0
- package/src/simulate.d.ts +1 -0
- package/src/simulate2.d.ts +1 -0
- package/src/soc_pokec.d.ts +1 -0
- package/src/soc_pokec.js +7 -7
- package/static/codemirror.bundle/editor.bundle.js +370 -166
- package/static/datafolderui/QyStyledElement.js +8 -17
- package/static/datafolderui/QyUIFolderViewer.js +230 -0
- package/static/datafolderui/QyUIUtils.js +5 -5
- package/static/datafolderui/code-mirror.js +7 -7
- package/static/datafolderui/display-tree.js +22 -58
- package/static/datafolderui/explore-tree.js +10 -10
- package/static/datafolderui/folder-tree.js +71 -2
- package/static/datafolderui/hscrpt.js +26 -7
- package/static/datafolderui/json-view.js +34 -3
- package/static/datafolderui/main-page.js +67 -36
- package/static/datafolderui/query-editor.js +9 -9
- package/static/datafolderui/rpc-editor.js +31 -0
- package/static/datafolderui/trigger-editor.js +33 -0
- package/data/sampleDataFolder/qykv/history/acl/1_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/2_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/3_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/4_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/5_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/1/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/1/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/1/1_vL.txt +0 -10
- package/data/sampleDataFolder/qykv/snapshot/2/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/2/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/2/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/3/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/3/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/3/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/4/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/4/2_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/2_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/2_vL.txt +0 -9
- package/data/sampleDataFolder/qykv/snapshot/5/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/5/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/5/1_vL.txt +0 -55
- package/data/sampleDataFolder/qykv/snapshot/info/1.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/2.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/3.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/4.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/5.json +0 -1
- package/data/sampleDataFolder/qylog/2026/02/15/08/change.txt +0 -58
- package/data/sampleDataFolder/qylog/2026/02/15/08/stderr.txt +0 -11
- package/data/sampleDataFolder/qylog/2026/02/15/08/stdout.txt +0 -36
- package/static/datafolderui/QyUIFolderTree.js +0 -179
package/src/QySnapshots.js
CHANGED
|
@@ -6,14 +6,14 @@ import {
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
readdir as l,
|
|
9
|
-
readFile as
|
|
9
|
+
readFile as r
|
|
10
10
|
} from "node:fs/promises";
|
|
11
11
|
|
|
12
12
|
import {
|
|
13
13
|
join as s
|
|
14
14
|
} from "node:path";
|
|
15
15
|
|
|
16
|
-
import
|
|
16
|
+
import m from "node:zlib";
|
|
17
17
|
|
|
18
18
|
import {
|
|
19
19
|
getDefaultOptions as n
|
|
@@ -21,21 +21,21 @@ import {
|
|
|
21
21
|
|
|
22
22
|
import {
|
|
23
23
|
Hash_Key_Length as u,
|
|
24
|
-
folderOrFileExists as
|
|
25
|
-
listToMap as
|
|
26
|
-
isEmptyObj as
|
|
27
|
-
isString as
|
|
24
|
+
folderOrFileExists as d,
|
|
25
|
+
listToMap as f,
|
|
26
|
+
isEmptyObj as h,
|
|
27
|
+
isString as v
|
|
28
28
|
} from "./QyUtils.js";
|
|
29
29
|
|
|
30
30
|
import {
|
|
31
|
-
QyBinWriter as
|
|
31
|
+
QyBinWriter as M
|
|
32
32
|
} from "./QyBinWriter.js";
|
|
33
33
|
|
|
34
34
|
import {
|
|
35
|
-
bufferToNums as
|
|
36
|
-
numsToBuffer as
|
|
37
|
-
applyAclChange as
|
|
38
|
-
iterCmdKeys as
|
|
35
|
+
bufferToNums as g,
|
|
36
|
+
numsToBuffer as y,
|
|
37
|
+
applyAclChange as c,
|
|
38
|
+
iterCmdKeys as S
|
|
39
39
|
} from "./QyAcl.js";
|
|
40
40
|
|
|
41
41
|
import {
|
|
@@ -72,38 +72,34 @@ class t {
|
|
|
72
72
|
async loadSnapshotInfos() {
|
|
73
73
|
let {
|
|
74
74
|
snapshotInfoFolder: t,
|
|
75
|
-
qyJsonSaver:
|
|
76
|
-
numToSnapshotMap:
|
|
75
|
+
qyJsonSaver: n,
|
|
76
|
+
numToSnapshotMap: r
|
|
77
77
|
} = this;
|
|
78
|
-
if (await
|
|
78
|
+
if (await d(t)) {
|
|
79
79
|
var a = (await l(t)).filter(t => /^[1-9]/.test(t)).map(t => parseInt(t)).sort((t, a) => t - a);
|
|
80
|
-
let
|
|
80
|
+
let e = 0, s = 0;
|
|
81
81
|
await Promise.all(a.map(async t => {
|
|
82
|
-
var a = await
|
|
82
|
+
var a = await n.loadFromFile(t + ".json"), o = r[t] = {
|
|
83
83
|
snapshotNum: t,
|
|
84
84
|
info: a,
|
|
85
85
|
posMap: {},
|
|
86
86
|
outdatedCount: 0
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
for (let t = 0; t < s; ) {
|
|
91
|
-
var r = t + k, i = e.toString("latin1", t, r), i = n[i] = [];
|
|
92
|
-
t = y(e, r, i);
|
|
93
|
-
}
|
|
87
|
+
}, t = (++this.snapshotCount, t > e && (e = t, s = a.maxChangeId),
|
|
88
|
+
this), a = o;
|
|
89
|
+
t = k(t, a), P.info("Loading " + t), a.prefixPM = await V(t);
|
|
94
90
|
})), Object.assign(this, {
|
|
95
|
-
maxSnapshotNum:
|
|
96
|
-
snapshotMaxChangeId:
|
|
91
|
+
maxSnapshotNum: e,
|
|
92
|
+
snapshotMaxChangeId: s
|
|
97
93
|
});
|
|
98
94
|
var {
|
|
99
95
|
numToSnapshotMap: o,
|
|
100
|
-
prefixMap:
|
|
96
|
+
prefixMap: i
|
|
101
97
|
} = this;
|
|
102
|
-
for (
|
|
103
|
-
var
|
|
104
|
-
for (
|
|
105
|
-
var
|
|
106
|
-
|
|
98
|
+
for (f of a) {
|
|
99
|
+
var p, u = o[f], f = u.prefixPM;
|
|
100
|
+
for (p in f) {
|
|
101
|
+
var h = i[p];
|
|
102
|
+
h ? h.push(u) : i[p] = [ u ];
|
|
107
103
|
}
|
|
108
104
|
}
|
|
109
105
|
}
|
|
@@ -116,14 +112,14 @@ class t {
|
|
|
116
112
|
var a, o = this.options.minLenToCompress, {
|
|
117
113
|
keyValueMap: e,
|
|
118
114
|
info: s
|
|
119
|
-
} = t, n = (++s.vLVersion, new
|
|
115
|
+
} = t, n = (++s.vLVersion, new M()), r = (n.start(this.getVLFilePath(t)),
|
|
120
116
|
Object.keys(e).sort()), i = {};
|
|
121
117
|
let p = 0, u = 0, f, h;
|
|
122
118
|
for (a of r) {
|
|
123
119
|
var l = e[a];
|
|
124
120
|
let t;
|
|
125
|
-
null == l ? t =
|
|
126
|
-
|
|
121
|
+
null == l ? t = K : (h = Buffer.isBuffer(l) ? (f = l, 0) : v(l) ? (f = l.length >= o ? (n.save(j),
|
|
122
|
+
m.zstdCompressSync(l)) : (n.save(F), Buffer.from(l)), 1) : (f = Buffer.from(JSON.stringify(Q(a) && !x(l) ? Object.keys(l) : l)),
|
|
127
123
|
0), n.save([ f, O ]), l = h + f.length, t = [ p, l ], p += l + 1), i[a] = t,
|
|
128
124
|
++u;
|
|
129
125
|
}
|
|
@@ -160,12 +156,12 @@ class t {
|
|
|
160
156
|
var e = o.length;
|
|
161
157
|
for (let t = 0; t < e; t += 2) {
|
|
162
158
|
var s = o[t], n = o[t + 1];
|
|
163
|
-
a[s] = null != n &&
|
|
159
|
+
a[s] = null != n && Q(s) ? f(n) : n;
|
|
164
160
|
}
|
|
165
161
|
}
|
|
166
|
-
|
|
162
|
+
S(t, t => {
|
|
167
163
|
t in a || (a[t] = this.getValueSync(t)), this.removeKey(t);
|
|
168
|
-
}),
|
|
164
|
+
}), c(a, t);
|
|
169
165
|
}
|
|
170
166
|
getValueSync(t) {
|
|
171
167
|
var a = ((t, a) => {
|
|
@@ -182,7 +178,7 @@ class t {
|
|
|
182
178
|
posMap: s,
|
|
183
179
|
prefixPM: n
|
|
184
180
|
} = a;
|
|
185
|
-
if (n = n[o]) return [ n, e ] = n, n =
|
|
181
|
+
if (n = n[o]) return [ n, e ] = n, n = T(t, t.getPMFilePath(a), n, e),
|
|
186
182
|
t.loadPartialPosMapBuffer(a, o, n), s;
|
|
187
183
|
})(t, s, n);
|
|
188
184
|
if (i && a in i) return s;
|
|
@@ -199,25 +195,18 @@ class t {
|
|
|
199
195
|
var [ e, o ] = o;
|
|
200
196
|
if (0 != o) {
|
|
201
197
|
var s = this;
|
|
202
|
-
if (a = s.getVLFilePath(a), s =
|
|
203
|
-
|
|
198
|
+
if (a = s.getVLFilePath(a), s = T(s, a, e, o)) return (a = s[0]) == L ? s.toString("utf8", 1) : a == b ? m.zstdDecompressSync(s.subarray(1)).toString() : (e = JSON.parse(s),
|
|
199
|
+
Q(t) ? f(e) : e);
|
|
204
200
|
}
|
|
205
201
|
}
|
|
206
202
|
}
|
|
207
203
|
}
|
|
208
|
-
iterPMBuffer(a, o) {
|
|
209
|
-
var e = a.length;
|
|
210
|
-
for (let t = 0; t < e; ) {
|
|
211
|
-
var s = t + u, n = a.toString("latin1", t, s), r = [];
|
|
212
|
-
t = y(a, s, r), o(n, r);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
204
|
loadPartialPosMapBuffer(o, t, a) {
|
|
216
205
|
let {
|
|
217
206
|
posMap: e,
|
|
218
207
|
prefixPM: s
|
|
219
208
|
} = o, n = (delete s[t], this).keyToSnapshotMap;
|
|
220
|
-
|
|
209
|
+
N(a, (t, a) => {
|
|
221
210
|
t in n ? ++o.outdatedCount : (e[t] = a, n[t] = o);
|
|
222
211
|
});
|
|
223
212
|
}
|
|
@@ -235,10 +224,10 @@ class t {
|
|
|
235
224
|
} = n;
|
|
236
225
|
for (t in r) {
|
|
237
226
|
var u, f = r[t];
|
|
238
|
-
f.isOut || (100 == (u =
|
|
239
|
-
f.info.totalCount < u.options.minSnapshotKeyCount &&
|
|
227
|
+
f.isOut || (100 == (u = D(f)) ? (this.delSnapshot(f), a.push(t)) : p < u ? (B(f) ? o : s).push(f) : Math.floor(f.outdatedCount / f.info.totalCount * 100) > i ? e.push(f) : (u = this,
|
|
228
|
+
f.info.totalCount < u.options.minSnapshotKeyCount && B(f) && o.push(f)));
|
|
240
229
|
}
|
|
241
|
-
return 1 == o.length &&
|
|
230
|
+
return 1 == o.length && D(o[0]) < p && (o.length = 0), 0 < e.length && P.log("pMCompacts:" + e.map(t => t.snapshotNum)),
|
|
242
231
|
0 < s.length && P.log("vLCompacts:" + s.map(t => t.snapshotNum)), 0 < o.length && P.log("combiningSnapshots:" + o.map(t => t.snapshotNum)),
|
|
243
232
|
{
|
|
244
233
|
emptySnapshotNumList: a,
|
|
@@ -274,7 +263,7 @@ class t {
|
|
|
274
263
|
outdatedCount: o,
|
|
275
264
|
totalCount: e
|
|
276
265
|
} = a;
|
|
277
|
-
return a.outdated = Math.
|
|
266
|
+
return a.outdated = Math.floor(100 * o / e) + "%", P.log("Saving snapshotInfo:" + t),
|
|
278
267
|
this.qyJsonSaver.saveToFile(a, t + ".json", !0);
|
|
279
268
|
}
|
|
280
269
|
savePosMap(t, a) {
|
|
@@ -282,18 +271,18 @@ class t {
|
|
|
282
271
|
outdatedCount: e,
|
|
283
272
|
info: s,
|
|
284
273
|
posMap: n
|
|
285
|
-
} = t, r = (s.outdatedCount += e, t.outdatedCount = 0, ++s.pMVersion, new
|
|
274
|
+
} = t, r = (s.outdatedCount += e, t.outdatedCount = 0, ++s.pMVersion, new M()), i = (r.start(this.getPMFilePath(t)),
|
|
286
275
|
t.prefixPM = {});
|
|
287
276
|
let p = 0, u = 0, f;
|
|
288
277
|
for (o of a = a || Object.keys(n).sort()) {
|
|
289
278
|
null == f ? f = I(o) : o.startsWith(f) || (i[f] = [ p, u ], f = I(o),
|
|
290
279
|
p += u, u = 0);
|
|
291
|
-
var h = Buffer.from(o), l =
|
|
280
|
+
var h = Buffer.from(o), l = y(n[o]);
|
|
292
281
|
r.save([ h, l ]), u += h.length + l.length;
|
|
293
282
|
}
|
|
294
283
|
return null != f && (i[f] = [ p, u ]), Promise.all([ r.stop(), ((t, a) => {
|
|
295
|
-
var o, e = new
|
|
296
|
-
for (o in s) e.save([ Buffer.from(o),
|
|
284
|
+
var o, e = new M(), s = (e.start(k(t, a)), a).prefixPM;
|
|
285
|
+
for (o in s) e.save([ Buffer.from(o), y(s[o]) ]);
|
|
297
286
|
return e.stop();
|
|
298
287
|
})(this, t) ]);
|
|
299
288
|
}
|
|
@@ -313,7 +302,24 @@ class t {
|
|
|
313
302
|
}
|
|
314
303
|
}
|
|
315
304
|
|
|
316
|
-
function
|
|
305
|
+
function N(a, o) {
|
|
306
|
+
var e = a.length;
|
|
307
|
+
for (let t = 0; t < e; ) {
|
|
308
|
+
var s = t + u, n = a.toString("latin1", t, s), r = [];
|
|
309
|
+
t = g(a, s, r), o(n, r);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
async function V(t) {
|
|
314
|
+
var a = await r(t), o = a.length, e = {};
|
|
315
|
+
for (let t = 0; t < o; ) {
|
|
316
|
+
var s = t + w, n = e[a.toString("latin1", t, s)] = [];
|
|
317
|
+
t = g(a, s, n);
|
|
318
|
+
}
|
|
319
|
+
return e;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
function T(t, a, o, e) {
|
|
317
323
|
var s = ((t, a) => {
|
|
318
324
|
let o = t.fDMap, e = o[a];
|
|
319
325
|
if (!e) {
|
|
@@ -334,15 +340,15 @@ function B(t, a, o, e) {
|
|
|
334
340
|
return n;
|
|
335
341
|
}
|
|
336
342
|
|
|
337
|
-
function
|
|
343
|
+
function B(t) {
|
|
338
344
|
var {
|
|
339
345
|
keyValueMap: a,
|
|
340
346
|
prefixPM: o
|
|
341
347
|
} = t;
|
|
342
|
-
return a || null == o ||
|
|
348
|
+
return a || null == o || h(t.prefixPM);
|
|
343
349
|
}
|
|
344
350
|
|
|
345
|
-
function
|
|
351
|
+
function k(t, a) {
|
|
346
352
|
var {
|
|
347
353
|
snapshotNum: a,
|
|
348
354
|
info: o
|
|
@@ -355,24 +361,26 @@ function a(t, a) {
|
|
|
355
361
|
null != o && (e(o), delete t[a]);
|
|
356
362
|
}
|
|
357
363
|
|
|
358
|
-
let
|
|
364
|
+
let K = [ 0, 0 ], w = 3;
|
|
359
365
|
|
|
360
366
|
function I(t) {
|
|
361
|
-
return t.substring(0,
|
|
367
|
+
return t.substring(0, w);
|
|
362
368
|
}
|
|
363
369
|
|
|
364
|
-
function
|
|
370
|
+
function Q(t) {
|
|
365
371
|
return !t.startsWith("c");
|
|
366
372
|
}
|
|
367
373
|
|
|
368
|
-
function
|
|
374
|
+
function D(t) {
|
|
369
375
|
var {
|
|
370
376
|
outdatedCount: t,
|
|
371
377
|
info: a
|
|
372
378
|
} = t, o = a.totalCount, t = t + a.outdatedCount;
|
|
373
|
-
return t == o ? 100 : Math.
|
|
379
|
+
return t == o ? 100 : Math.floor(t / o * 100);
|
|
374
380
|
}
|
|
375
381
|
|
|
376
382
|
export {
|
|
377
|
-
t as QySnapshots
|
|
383
|
+
t as QySnapshots,
|
|
384
|
+
N as iterPMBuffer,
|
|
385
|
+
V as loadPrefixPMFile
|
|
378
386
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function dumpStructure(parentFolderPath: any, dir: any): Promise<void>;
|
package/src/QyStructure.js
CHANGED
|
@@ -14,39 +14,39 @@ import {
|
|
|
14
14
|
} from "./QyUtils.js";
|
|
15
15
|
|
|
16
16
|
async function P(e, r) {
|
|
17
|
-
let
|
|
18
|
-
for (var
|
|
19
|
-
let e =
|
|
17
|
+
let i = {};
|
|
18
|
+
for (var o of r.subdirList) {
|
|
19
|
+
let e = o.name;
|
|
20
20
|
for (;r.getFile(e); ) e += "_d";
|
|
21
|
-
e = _(e),
|
|
22
|
-
x:
|
|
21
|
+
e = _(e), i[e] = {
|
|
22
|
+
x: o,
|
|
23
23
|
count: 0
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
await y(e);
|
|
27
|
-
var
|
|
27
|
+
var t, a = [], s = [];
|
|
28
28
|
let n = {};
|
|
29
|
-
for (
|
|
29
|
+
for (t of await w(e, {
|
|
30
30
|
withFileTypes: !0
|
|
31
31
|
})) {
|
|
32
|
-
var
|
|
33
|
-
|
|
32
|
+
var f = t.name;
|
|
33
|
+
t.isFile() ? a.push(f) : (s.push(f), n[f] = 1);
|
|
34
34
|
}
|
|
35
|
-
var
|
|
36
|
-
for (
|
|
37
|
-
|
|
35
|
+
var l, u, p, m, h, c = [];
|
|
36
|
+
for (l of s) i[l] || ((u = d((u = l) + "_d") || d(u.replace(/_d$/, ""))) ? (c.push(F(x(e, l), x(e, u))),
|
|
37
|
+
i[u].count = 1) : c.push(v(x(e, l), {
|
|
38
38
|
recursive: !0
|
|
39
39
|
})));
|
|
40
|
-
for (p of a) r.getFile(p) ||
|
|
41
|
-
await Promise.all(
|
|
42
|
-
for (m of r.fileList)
|
|
40
|
+
for (p of a) r.getFile(p) || c.push(v(x(e, p)));
|
|
41
|
+
await Promise.all(c), c.length = 0;
|
|
42
|
+
for (m of r.fileList) c.push(g(x(e, _(m.name)), m.contentAsText, {
|
|
43
43
|
flush: !0
|
|
44
44
|
}));
|
|
45
|
-
for (
|
|
45
|
+
for (h in await Promise.all(c), c.length = 0, i) c.push(P(x(e, h), i[h].x));
|
|
46
46
|
function d(e) {
|
|
47
|
-
return e && 0 ==
|
|
47
|
+
return e && 0 == i[e]?.count && !n[e] ? e : void 0;
|
|
48
48
|
}
|
|
49
|
-
await Promise.all(
|
|
49
|
+
await Promise.all(c);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
function _(e) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class QyTriggerNode {
|
|
2
|
+
constructor(name: any, parent: any);
|
|
3
|
+
insertTrigger(triggerName: any, fileNamePath: any, propNamePathList: any, fun: any): void;
|
|
4
|
+
removeTrigger(triggerName: any, fileNamePath: any): boolean;
|
|
5
|
+
get isEmpty(): boolean;
|
|
6
|
+
removeEmptyNodes(): void;
|
|
7
|
+
checkTrigger(file: any, delta: any): void;
|
|
8
|
+
}
|
|
9
|
+
export declare function updateTriggerNodes(rootDir: any, fileNamePath: any): void;
|
package/src/QyTrigger.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
|
-
isDeepStrictEqual as
|
|
2
|
+
isDeepStrictEqual as c
|
|
3
3
|
} from "node:util";
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
|
-
getValByNamePath as
|
|
6
|
+
getValByNamePath as p,
|
|
7
7
|
setValByNamePath as u
|
|
8
8
|
} from "./QyFileContentUtils.js";
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
11
|
isEmptyObj as e,
|
|
12
|
-
isMatchName as
|
|
12
|
+
isMatchName as g,
|
|
13
13
|
getMatchParam as d,
|
|
14
14
|
arrayLast as f,
|
|
15
|
-
propNameJoin as
|
|
15
|
+
propNameJoin as v
|
|
16
16
|
} from "./QyUtils.js";
|
|
17
17
|
|
|
18
|
-
let
|
|
18
|
+
let N = Array.isArray;
|
|
19
19
|
|
|
20
20
|
class h {
|
|
21
21
|
constructor(e, r) {
|
|
@@ -29,21 +29,21 @@ class h {
|
|
|
29
29
|
insertTrigger(e, r, t, a) {
|
|
30
30
|
let i = this;
|
|
31
31
|
for (var s of r) {
|
|
32
|
-
|
|
33
|
-
var
|
|
34
|
-
i =
|
|
32
|
+
g(s) && (s = "*");
|
|
33
|
+
var n = i.children;
|
|
34
|
+
i = n[s] || (n[s] = new h(s, i));
|
|
35
35
|
}
|
|
36
|
-
var
|
|
37
|
-
|
|
36
|
+
var o = i.triggerMap, l = o[e];
|
|
37
|
+
l ? Object.assign(l, {
|
|
38
38
|
triggerName: e,
|
|
39
39
|
fileNamePath: r,
|
|
40
40
|
propNamePathList: t,
|
|
41
41
|
fun: a
|
|
42
|
-
}) :
|
|
42
|
+
}) : o[e] = new m(e, r, t, a);
|
|
43
43
|
}
|
|
44
44
|
removeTrigger(e, r) {
|
|
45
45
|
let t = this;
|
|
46
|
-
for (var a of r) if (
|
|
46
|
+
for (var a of r) if (g(a) && (a = "*"), !(t = t.children[a])) return !1;
|
|
47
47
|
r = t.triggerMap;
|
|
48
48
|
return !!r[e] && (delete r[e], t.isEmpty && t.removeEmptyNodes(), !0);
|
|
49
49
|
}
|
|
@@ -82,32 +82,32 @@ class m {
|
|
|
82
82
|
triggerName: a,
|
|
83
83
|
fileNamePath: i,
|
|
84
84
|
propNamePathList: s,
|
|
85
|
-
fun:
|
|
86
|
-
} = this,
|
|
87
|
-
let
|
|
85
|
+
fun: n
|
|
86
|
+
} = this, o = e.fileContent;
|
|
87
|
+
let l;
|
|
88
88
|
for (t of s) {
|
|
89
|
-
var
|
|
90
|
-
|
|
91
|
-
oldValue:
|
|
89
|
+
var g = p(r.oldValue, t), f = p(r.newValue, t);
|
|
90
|
+
c(g, f) || (g = {
|
|
91
|
+
oldValue: g,
|
|
92
92
|
newValue: f
|
|
93
|
-
}, (
|
|
93
|
+
}, (N(f) || N(p(o, t))) && (g.isArrayDelta = !0), (l = l || {
|
|
94
94
|
_file: e,
|
|
95
|
-
_fileContent:
|
|
96
|
-
})[
|
|
95
|
+
_fileContent: o
|
|
96
|
+
})[v(t)] = g, u(l, t, g));
|
|
97
97
|
}
|
|
98
|
-
if (
|
|
98
|
+
if (l) {
|
|
99
99
|
var {
|
|
100
100
|
namePath: h,
|
|
101
101
|
qyCache: s
|
|
102
102
|
} = e;
|
|
103
103
|
for (let e = 0; e < h.length; ++e) {
|
|
104
104
|
var m = d(i[e]);
|
|
105
|
-
m && (
|
|
105
|
+
m && (l[m] = h[e]);
|
|
106
106
|
}
|
|
107
107
|
try {
|
|
108
|
-
|
|
108
|
+
n && n(l), s.emit(a, l);
|
|
109
109
|
} catch (e) {
|
|
110
|
-
logger.error(`Running trigger ${a} failed:`,
|
|
110
|
+
logger.error(`Running trigger ${a} failed:`, l, e);
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -116,7 +116,7 @@ class m {
|
|
|
116
116
|
let t = [];
|
|
117
117
|
|
|
118
118
|
function y(e, r) {
|
|
119
|
-
return e ?
|
|
119
|
+
return e ? g(r) ? Object.values(e) : (e = e[r]) ? [ e ] : t : t;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
function r(e, a) {
|
|
@@ -124,13 +124,13 @@ function r(e, a) {
|
|
|
124
124
|
let r = [ e ], t = [];
|
|
125
125
|
for (let e = 0; e < a.length - 1; ++e) {
|
|
126
126
|
var i, s = a[e];
|
|
127
|
-
for (i of r) for (var
|
|
128
|
-
t.push(
|
|
127
|
+
for (i of r) for (var n of y(i.subdirMap, s)) i.setChildTriggerNodes(n),
|
|
128
|
+
t.push(n);
|
|
129
129
|
if (0 == t.length) return;
|
|
130
130
|
[ r, t ] = [ t, r ], t.length = 0;
|
|
131
131
|
}
|
|
132
|
-
var
|
|
133
|
-
for (
|
|
132
|
+
var o, l = f(a);
|
|
133
|
+
for (o of r) for (var g of y(o.fileMap, l)) o.setChildTriggerNodes(g);
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
136
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class QueryCounter {
|
|
2
|
+
constructor(limit: any, cursor?: number);
|
|
3
|
+
get isFull(): boolean;
|
|
4
|
+
encounterOne(fileName: any): true | undefined;
|
|
5
|
+
countOne(): true | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare class QyQueryNode {
|
|
8
|
+
constructor();
|
|
9
|
+
encounterOne(resultMap: any, fileName: any, queryCounter: any): true | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare class QyUnionNode extends QyQueryNode {
|
|
12
|
+
constructor(dir: any);
|
|
13
|
+
containsFile(fileName: any): boolean;
|
|
14
|
+
getFiles(queryCounter: any, resultMap?: {}): Generator<any, void, any>;
|
|
15
|
+
addNode(node: any): void;
|
|
16
|
+
addDir(dir: any): void;
|
|
17
|
+
}
|
package/src/QyUnionNode.js
CHANGED
package/src/QyUtils.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export declare const __dirname: string;
|
|
2
|
+
export declare const SpecialOperators: {
|
|
3
|
+
[k: string]: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const SpecialFilePaths: {
|
|
6
|
+
HiddenFolderName: string;
|
|
7
|
+
TriggerDirPath: string[];
|
|
8
|
+
RpcDirPath: string[];
|
|
9
|
+
IndexDirPath: string[];
|
|
10
|
+
IndexPropPathsFileName: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function isMatchName(name: any): any;
|
|
13
|
+
export declare function getMatchParam(name: any): any;
|
|
14
|
+
export declare function getSizeStr(size: number): string;
|
|
15
|
+
export declare function calHash(str: any, len?: number): string;
|
|
16
|
+
export declare const Hash_Key_Length: number;
|
|
17
|
+
export declare function getSubdirMapKey(fullPathHash: any): string;
|
|
18
|
+
export declare function getFileMapKey(fullPathHash: any): string;
|
|
19
|
+
export declare function getContentKey(fullPathHash: any): string;
|
|
20
|
+
export declare function getRandomStr(byteCount?: number): string;
|
|
21
|
+
export declare function arrayLast(array: any): any;
|
|
22
|
+
export declare function isEmptyObj(obj: any): boolean;
|
|
23
|
+
export declare function isNotNullObj(item: any): boolean;
|
|
24
|
+
export declare function isString(item: any): item is string;
|
|
25
|
+
export declare function isNumber(item: any): item is number;
|
|
26
|
+
export declare function isBoolean(item: any): item is boolean;
|
|
27
|
+
export declare function isFunction(item: any): boolean;
|
|
28
|
+
export declare function isSimpleType(item: any): boolean;
|
|
29
|
+
export declare function trimArrayTail(arr: any): any;
|
|
30
|
+
export declare function setPromise(operation: any): any;
|
|
31
|
+
export declare function toBuffer(data: any): Buffer<any>;
|
|
32
|
+
export declare function getSuffix(num: any): "s" | "";
|
|
33
|
+
export declare function ensureDir(dirPath: any): Promise<string | undefined>;
|
|
34
|
+
export declare function ensureParentDir(filePath: any): Promise<string | undefined>;
|
|
35
|
+
export declare function getSize(filePath: any): Promise<number | false>;
|
|
36
|
+
export declare function folderOrFileExists(folderPath: any): Promise<boolean>;
|
|
37
|
+
export declare function sleep(seconds: any, signal: any): Promise<boolean>;
|
|
38
|
+
export declare function lockExclusiveFilePath(exclusiveFilePath: any): Promise<void>;
|
|
39
|
+
export declare function unlockExclusiveFilePath(exclusiveFilePath: any): void;
|
|
40
|
+
export declare function fromSingleName(name: any): any;
|
|
41
|
+
export declare function toSingleName(list: any): any;
|
|
42
|
+
export declare function pathSplit(itemPath: any): any;
|
|
43
|
+
export declare function propNameSplit(propNameStr: any): any;
|
|
44
|
+
export declare function propNameJoin(propName: any): any;
|
|
45
|
+
export declare function randomInt(max: any, min?: number): number;
|
|
46
|
+
export declare function listToMap(list: any): {};
|
|
47
|
+
export declare function readBufferAsync(filePath: any, fileHandle: any, start: any, length: any): Promise<Buffer<ArrayBuffer> | undefined>;
|
|
48
|
+
export declare function memoryPercent(): number;
|
|
49
|
+
export declare function loadFileList(fileList: any, preloadCount?: number): AsyncGenerator<{
|
|
50
|
+
filePath: any;
|
|
51
|
+
bin: any;
|
|
52
|
+
}, void, unknown>;
|
|
53
|
+
export * as default from "./QyUtils.ts";
|