datafolder 1.0.1 → 1.0.3
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 +9 -3
- package/index.js +2 -3
- package/package.json +5 -4
- package/sample.js +37 -37
- package/scripts/airbnb.js +10 -11
- package/scripts/airbnb2.js +10 -11
- package/scripts/airbnb2_queries.js +11 -11
- package/scripts/airbnb_queries.js +15 -14
- package/scripts/downloadFile.js +29 -31
- package/scripts/express.js +5 -4
- package/scripts/fastify.js +12 -11
- package/scripts/flights.js +8 -8
- package/scripts/flights2.js +9 -9
- package/scripts/flights2_queries.js +19 -16
- package/scripts/flights_queries.js +18 -13
- package/src/QyAcl.js +153 -152
- package/src/QyAclSaver.js +16 -10
- package/src/QyAclSaver_Worker.js +21 -15
- package/src/QyAclWriter.js +23 -13
- package/src/QyBatch.js +298 -263
- package/src/QyBinWriter.js +49 -37
- package/src/QyCD.js +13 -14
- package/src/QyCache.js +177 -140
- package/src/QyCompressor.js +71 -45
- package/src/QyCompressor_Worker.js +17 -9
- package/src/QyDB.js +41 -12
- package/src/QyDefaultOptions.js +13 -10
- package/src/QyDir.js +89 -53
- package/src/QyFetch.js +27 -24
- package/src/QyFile.js +89 -77
- package/src/QyFileContentUtils.js +129 -132
- package/src/QyFileLogger.js +63 -41
- package/src/QyIndex.js +175 -197
- package/src/QyIndexPropTree.js +25 -25
- package/src/QyIntersectNode.js +34 -31
- package/src/QyItem.js +54 -52
- package/src/QyJsonSaver.js +12 -6
- package/src/QyKVData.js +279 -245
- package/src/QyKVDataCleaner.js +12 -6
- package/src/QyKVDataCleaner_Worker.js +77 -59
- package/src/QyKVDataLoader.js +67 -46
- package/src/QyKVDataSaver.js +15 -9
- package/src/QyKVDataSaver_Worker.js +83 -60
- package/src/QyLogFileSaver.js +12 -6
- package/src/QyLogFileSaver_Worker.js +24 -14
- package/src/QyLogger.js +51 -40
- package/src/QyMessageWorker.js +43 -29
- package/src/QyMessager.js +74 -54
- package/src/QyMessager_Run.js +20 -7
- package/src/QyMod.js +15 -11
- package/src/QyOpRunner.js +58 -41
- package/src/QyQueue.js +35 -30
- package/src/QySaver.js +52 -29
- package/src/QySnapshotCompactor.js +15 -9
- package/src/QySnapshotCompactor_Worker.js +131 -110
- package/src/QySnapshotSaver.js +15 -9
- package/src/QySnapshotSaver_Worker.js +125 -110
- package/src/QySnapshots.js +260 -241
- package/src/QyStructure.js +35 -27
- package/src/QyTrigger.js +62 -55
- package/src/QyUnionNode.js +54 -56
- package/src/QyUtils.js +170 -158
- package/src/QyWorker.js +34 -20
- package/src/hackernews.js +63 -71
- package/src/rpc/getFileContent.js +7 -7
- package/src/rpc/getSubItems.js +22 -22
- package/src/simulate.js +85 -80
- package/src/simulate2.js +77 -78
- package/src/soc_pokec.js +44 -32
- package/static/datafolderui/QyStyledElement.js +12 -12
- package/static/datafolderui/QyUIFolderTree.js +20 -20
- package/static/datafolderui/QyUIUtils.js +8 -8
- package/static/datafolderui/explore-tree.js +31 -31
- package/static/datafolderui/folder-tree.js +2 -2
- package/static/datafolderui/hscrpt.js +9 -17
- package/static/datafolderui/json-view.js +3 -5
- package/static/datafolderui/kv-input.js +15 -15
- package/static/datafolderui/list-input.js +17 -17
- package/static/datafolderui/main-page.js +18 -18
- package/static/datafolderui/num-input.js +5 -5
- package/static/datafolderui/querySelectorShadowRoot.js +15 -19
- package/static/datafolderui/resizable-input.js +18 -18
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { deepEqual } from "node:assert/strict";
|
|
2
2
|
|
|
3
3
|
// Return the names of all airports one can reach
|
|
4
4
|
// directly (1 step) from Los Angeles International
|
|
@@ -10,7 +10,7 @@ function query1(qyDB) {
|
|
|
10
10
|
for (const x of qyDB.queryFiles("flights/**", { _from: "airports/LAX" })) {
|
|
11
11
|
resultMap[x.fileContent._to] = 1;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
deepEqual(Object.keys(resultMap), [
|
|
14
14
|
"airports/CVG",
|
|
15
15
|
"airports/SMF",
|
|
16
16
|
"airports/ATL",
|
|
@@ -111,24 +111,25 @@ function query1(qyDB) {
|
|
|
111
111
|
|
|
112
112
|
function query2(qyDB) {
|
|
113
113
|
console.time("query2");
|
|
114
|
-
|
|
114
|
+
deepEqual(
|
|
115
115
|
qyDB
|
|
116
116
|
.queryFiles(["flights", "*", 1, (x) => x >= 5 && x <= 7], {
|
|
117
117
|
$or: [{ _from: "airports/BIS" }, { _to: "airports/BIS" }],
|
|
118
118
|
})
|
|
119
|
-
.map((x) => x.fileContent.FlightNum)
|
|
119
|
+
.map((x) => x.fileContent.FlightNum)
|
|
120
|
+
.sort((x, y) => x - y),
|
|
120
121
|
[
|
|
121
122
|
6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
|
|
122
123
|
6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
|
|
123
124
|
5650, 6636, 6678, 1087,
|
|
124
|
-
],
|
|
125
|
+
].sort((x, y) => x - y),
|
|
125
126
|
);
|
|
126
127
|
console.timeEnd("query2");
|
|
127
128
|
}
|
|
128
129
|
|
|
129
130
|
function query3(qyDB) {
|
|
130
131
|
console.time("query3");
|
|
131
|
-
|
|
132
|
+
deepEqual(
|
|
132
133
|
qyDB
|
|
133
134
|
.queryFiles(["flights", "*", 1, (x) => x >= 1 && x <= 7], {
|
|
134
135
|
$or: [
|
|
@@ -136,7 +137,8 @@ function query3(qyDB) {
|
|
|
136
137
|
{ _from: "airports/MSP", _to: "airports/BOI" },
|
|
137
138
|
],
|
|
138
139
|
})
|
|
139
|
-
.map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
|
|
140
|
+
.map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
|
|
141
|
+
.sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
|
|
140
142
|
[
|
|
141
143
|
{
|
|
142
144
|
_from: "airports/BOI",
|
|
@@ -333,7 +335,7 @@ function query3(qyDB) {
|
|
|
333
335
|
_to: "airports/BOI",
|
|
334
336
|
ArrTimeUTC: "2008-01-08T06:29:00.000Z",
|
|
335
337
|
},
|
|
336
|
-
],
|
|
338
|
+
].sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
|
|
337
339
|
);
|
|
338
340
|
|
|
339
341
|
console.timeEnd("query3");
|
|
@@ -350,7 +352,7 @@ function query3(qyDB) {
|
|
|
350
352
|
|
|
351
353
|
function query4(qyDB) {
|
|
352
354
|
console.time("query4");
|
|
353
|
-
|
|
355
|
+
deepEqual(
|
|
354
356
|
qyDB.queryFiles(["flights", "*", 1, 5], { FlightNum: 860 }).map((x) => x.view(["_from", "_to"])),
|
|
355
357
|
[
|
|
356
358
|
{ _from: "airports/IAD", _to: "airports/BOS" },
|
|
@@ -365,7 +367,7 @@ function query4(qyDB) {
|
|
|
365
367
|
|
|
366
368
|
function query5(qyDB) {
|
|
367
369
|
console.time("query5");
|
|
368
|
-
|
|
370
|
+
deepEqual(
|
|
369
371
|
qyDB
|
|
370
372
|
.queryFiles("**", { vip: true })
|
|
371
373
|
.map((x) => x.fileContent.name)
|
|
@@ -390,7 +392,7 @@ function query5(qyDB) {
|
|
|
390
392
|
|
|
391
393
|
function query6(qyDB) {
|
|
392
394
|
console.time("query6");
|
|
393
|
-
|
|
395
|
+
deepEqual(
|
|
394
396
|
qyDB
|
|
395
397
|
.queryFiles("flights/**", {
|
|
396
398
|
FlightNum: { $or: [859, 860] },
|
|
@@ -407,24 +409,25 @@ function query6(qyDB) {
|
|
|
407
409
|
|
|
408
410
|
function query7(qyDB) {
|
|
409
411
|
console.time("query7");
|
|
410
|
-
|
|
412
|
+
deepEqual(
|
|
411
413
|
qyDB
|
|
412
414
|
.queryFiles(["flights", "*", { $or: [1] }, [5, 6, 7]], {
|
|
413
415
|
$or: [{ _from: "airports/BIS" }, { _to: "airports/BIS" }],
|
|
414
416
|
})
|
|
415
|
-
.map((x) => x.fileContent.FlightNum)
|
|
417
|
+
.map((x) => x.fileContent.FlightNum)
|
|
418
|
+
.sort((x, y) => x - y),
|
|
416
419
|
[
|
|
417
420
|
6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
|
|
418
421
|
6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
|
|
419
422
|
5650, 6636, 6678, 1087,
|
|
420
|
-
],
|
|
423
|
+
].sort((x, y) => x - y),
|
|
421
424
|
);
|
|
422
425
|
console.timeEnd("query7");
|
|
423
426
|
}
|
|
424
427
|
|
|
425
428
|
function query8(qyDB) {
|
|
426
429
|
console.time("query8");
|
|
427
|
-
|
|
430
|
+
deepEqual(
|
|
428
431
|
qyDB.queryFiles("**", { name: "Thigpen " }).map((x) => x.fileContent.name),
|
|
429
432
|
["Thigpen "],
|
|
430
433
|
);
|
|
@@ -450,4 +453,4 @@ function runQueries(qyDB) {
|
|
|
450
453
|
query8(qyDB);
|
|
451
454
|
}
|
|
452
455
|
|
|
453
|
-
|
|
456
|
+
export { runQueries };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { deepEqual } from "node:assert/strict";
|
|
2
2
|
|
|
3
3
|
// Return the names of all airports one can reach
|
|
4
4
|
// directly (1 step) from Los Angeles International
|
|
@@ -10,7 +10,7 @@ function query1(qyDB) {
|
|
|
10
10
|
for (const x of qyDB.queryFiles("flights", { _from: "airports/LAX" })) {
|
|
11
11
|
resultMap[x.fileContent._to] = 1;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
deepEqual(Object.keys(resultMap), [
|
|
14
14
|
"airports/CVG",
|
|
15
15
|
"airports/SMF",
|
|
16
16
|
"airports/ATL",
|
|
@@ -111,7 +111,7 @@ function query1(qyDB) {
|
|
|
111
111
|
|
|
112
112
|
function query2(qyDB) {
|
|
113
113
|
console.time("query2");
|
|
114
|
-
|
|
114
|
+
deepEqual(
|
|
115
115
|
qyDB
|
|
116
116
|
.queryFiles("flights", {
|
|
117
117
|
$and: [
|
|
@@ -120,19 +120,20 @@ function query2(qyDB) {
|
|
|
120
120
|
{ Day: (x) => x >= 5 && x <= 7 },
|
|
121
121
|
],
|
|
122
122
|
})
|
|
123
|
-
.map((x) => x.fileContent.FlightNum)
|
|
123
|
+
.map((x) => x.fileContent.FlightNum)
|
|
124
|
+
.sort((x, y) => x - y),
|
|
124
125
|
[
|
|
125
126
|
6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
|
|
126
127
|
6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
|
|
127
128
|
5650, 6636, 6678, 1087,
|
|
128
|
-
],
|
|
129
|
+
].sort((x, y) => x - y),
|
|
129
130
|
);
|
|
130
131
|
console.timeEnd("query2");
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
function query3(qyDB) {
|
|
134
135
|
console.time("query3");
|
|
135
|
-
|
|
136
|
+
deepEqual(
|
|
136
137
|
qyDB
|
|
137
138
|
.queryFiles("flights", {
|
|
138
139
|
$or: [
|
|
@@ -142,7 +143,8 @@ function query3(qyDB) {
|
|
|
142
143
|
Month: 1,
|
|
143
144
|
Day: (x) => x >= 1 && x <= 7,
|
|
144
145
|
})
|
|
145
|
-
.map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
|
|
146
|
+
.map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
|
|
147
|
+
.sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
|
|
146
148
|
[
|
|
147
149
|
{
|
|
148
150
|
_from: "airports/BOI",
|
|
@@ -339,7 +341,7 @@ function query3(qyDB) {
|
|
|
339
341
|
_to: "airports/BOI",
|
|
340
342
|
ArrTimeUTC: "2008-01-08T06:29:00.000Z",
|
|
341
343
|
},
|
|
342
|
-
],
|
|
344
|
+
].sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
|
|
343
345
|
);
|
|
344
346
|
|
|
345
347
|
console.timeEnd("query3");
|
|
@@ -359,7 +361,7 @@ function query4(qyDB) {
|
|
|
359
361
|
const result = qyDB
|
|
360
362
|
.queryFiles("flights", { Month: 1, Day: 5, FlightNum: 860 })
|
|
361
363
|
.map((x) => x.view(["_from", "_to"]));
|
|
362
|
-
|
|
364
|
+
deepEqual(result, [
|
|
363
365
|
{ _from: "airports/IAD", _to: "airports/BOS" },
|
|
364
366
|
{ _from: "airports/PBI", _to: "airports/JFK" },
|
|
365
367
|
{ _from: "airports/ORD", _to: "airports/DTW" },
|
|
@@ -372,8 +374,11 @@ function query4(qyDB) {
|
|
|
372
374
|
function query5(qyDB) {
|
|
373
375
|
logger.info("Query begins");
|
|
374
376
|
console.time("query5");
|
|
375
|
-
|
|
376
|
-
qyDB
|
|
377
|
+
deepEqual(
|
|
378
|
+
qyDB
|
|
379
|
+
.queryFiles("airports", { vip: true })
|
|
380
|
+
.map((x) => x.view(["name"]).name)
|
|
381
|
+
.sort(),
|
|
377
382
|
[
|
|
378
383
|
"Amarillo International",
|
|
379
384
|
"William B Hartsfield-Atlanta Intl",
|
|
@@ -382,7 +387,7 @@ function query5(qyDB) {
|
|
|
382
387
|
"Los Angeles International",
|
|
383
388
|
"Chicago O'Hare International",
|
|
384
389
|
"San Francisco International",
|
|
385
|
-
],
|
|
390
|
+
].sort(),
|
|
386
391
|
);
|
|
387
392
|
console.timeEnd("query5");
|
|
388
393
|
}
|
|
@@ -400,4 +405,4 @@ function runQueries(qyDB) {
|
|
|
400
405
|
query5(qyDB);
|
|
401
406
|
}
|
|
402
407
|
|
|
403
|
-
|
|
408
|
+
export { runQueries };
|
package/src/QyAcl.js
CHANGED
|
@@ -1,59 +1,67 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import u from "node:fs/promises";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
mergeContent as m,
|
|
5
|
+
mergeContentChanges as s,
|
|
6
|
+
setValByNamePath as a
|
|
7
|
+
} from "./QyFileContentUtils.js";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
isEmptyObj as g,
|
|
11
|
+
arrayLast as n
|
|
12
|
+
} from "./QyUtils.js";
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
logger as d
|
|
16
|
+
} from "./QyLogger.js";
|
|
17
|
+
|
|
18
|
+
function r(r, e) {
|
|
11
19
|
var {
|
|
12
|
-
A:
|
|
20
|
+
A: r,
|
|
13
21
|
R: t,
|
|
14
22
|
M: a,
|
|
15
23
|
D: n
|
|
16
|
-
} =
|
|
17
|
-
n && delete n[
|
|
18
|
-
t && delete t[
|
|
24
|
+
} = r;
|
|
25
|
+
n && delete n[e], e.startsWith("c") ? a && delete a[e] : (r && delete r[e],
|
|
26
|
+
t && delete t[e]);
|
|
19
27
|
}
|
|
20
28
|
|
|
21
|
-
function
|
|
29
|
+
function e(r, e) {
|
|
22
30
|
var t, a, n, s, {
|
|
23
|
-
D:
|
|
31
|
+
D: e,
|
|
24
32
|
A: i,
|
|
25
33
|
R: o,
|
|
26
|
-
M:
|
|
27
|
-
} =
|
|
28
|
-
for (t in
|
|
34
|
+
M: f
|
|
35
|
+
} = e;
|
|
36
|
+
for (t in e) null != r[t] && (r[t] = void 0);
|
|
29
37
|
for (a in i) {
|
|
30
|
-
var
|
|
31
|
-
for (
|
|
38
|
+
var c, l = r[a] || (r[a] = {});
|
|
39
|
+
for (c of i[a]) l[c] = 1;
|
|
32
40
|
}
|
|
33
41
|
for (n in o) {
|
|
34
|
-
var
|
|
35
|
-
if (
|
|
36
|
-
var
|
|
37
|
-
if (
|
|
38
|
-
for (var
|
|
39
|
-
|
|
42
|
+
var u = r[n];
|
|
43
|
+
if (u) {
|
|
44
|
+
var d = o[n];
|
|
45
|
+
if (d) {
|
|
46
|
+
for (var h of d) delete u[h];
|
|
47
|
+
g(u) && (r[n] = void 0);
|
|
40
48
|
}
|
|
41
49
|
}
|
|
42
50
|
}
|
|
43
|
-
for (s in
|
|
51
|
+
for (s in f) r[s] = m(r[s], f[s]);
|
|
44
52
|
}
|
|
45
53
|
|
|
46
|
-
function
|
|
54
|
+
function t(r, e) {
|
|
47
55
|
var t, {
|
|
48
|
-
D:
|
|
56
|
+
D: r,
|
|
49
57
|
A: a,
|
|
50
58
|
R: n,
|
|
51
59
|
M: s
|
|
52
|
-
} =
|
|
53
|
-
for (t of [
|
|
60
|
+
} = r;
|
|
61
|
+
for (t of [ r, a, n, s ]) for (var i in t) e(i);
|
|
54
62
|
}
|
|
55
63
|
|
|
56
|
-
class
|
|
64
|
+
class i {
|
|
57
65
|
constructor() {
|
|
58
66
|
Object.assign(this, {
|
|
59
67
|
cmdArgAsMapObj: {},
|
|
@@ -61,192 +69,185 @@ class QyAclCmdGenerator {
|
|
|
61
69
|
batchSize: 0
|
|
62
70
|
});
|
|
63
71
|
}
|
|
64
|
-
pushCmd(
|
|
65
|
-
switch (++this.cmdCount,
|
|
72
|
+
pushCmd(r, e, t) {
|
|
73
|
+
switch (++this.cmdCount, r) {
|
|
66
74
|
case "A":
|
|
67
|
-
this
|
|
75
|
+
o(this, [ "A", e, t ]), f(this, [ "R", e, t ]);
|
|
68
76
|
break;
|
|
69
77
|
|
|
70
78
|
case "R":
|
|
71
|
-
this
|
|
79
|
+
o(this, [ "R", e, t ]), f(this, [ "A", e, t ]);
|
|
72
80
|
break;
|
|
73
81
|
|
|
74
82
|
case "D":
|
|
75
|
-
if (this
|
|
83
|
+
if (o(this, [ "D", e ]), e.startsWith("c")) f(this, [ "M", e ]); else for (var a of [ "A", "R" ]) f(this, [ a, e ]);
|
|
76
84
|
break;
|
|
77
85
|
|
|
78
86
|
case "M":
|
|
79
87
|
{
|
|
80
88
|
var n = this.cmdArgAsMapObj;
|
|
81
|
-
let
|
|
82
|
-
n = (
|
|
83
|
-
e
|
|
89
|
+
let r = n.M;
|
|
90
|
+
n = (r = null == r ? n.M = {} : r)[e];
|
|
91
|
+
r[e] = null != n ? s(n, t) : t;
|
|
84
92
|
break;
|
|
85
93
|
}
|
|
86
94
|
|
|
87
95
|
default:
|
|
88
|
-
|
|
96
|
+
d.error(`unsupported cmdName:${r}, called with ${e} ` + t), --this.cmdCount;
|
|
89
97
|
}
|
|
90
98
|
}
|
|
91
|
-
pushCmdArgAsListObj(
|
|
92
|
-
if (
|
|
99
|
+
pushCmdArgAsListObj(r) {
|
|
100
|
+
if (r) {
|
|
93
101
|
++this.batchSize;
|
|
94
|
-
var
|
|
102
|
+
var e, t, a, {
|
|
95
103
|
D: n,
|
|
96
104
|
M: s
|
|
97
|
-
} =
|
|
98
|
-
for (
|
|
105
|
+
} = r;
|
|
106
|
+
for (e in n) this.pushCmd("D", e);
|
|
99
107
|
for (t of [ "A", "R" ]) {
|
|
100
|
-
var i, o =
|
|
101
|
-
for (i in o) for (var
|
|
108
|
+
var i, o = r[t];
|
|
109
|
+
for (i in o) for (var f of o[i]) this.pushCmd(t, i, f);
|
|
102
110
|
}
|
|
103
111
|
for (a in s) this.pushCmd("M", a, s[a]);
|
|
104
112
|
}
|
|
105
113
|
return this;
|
|
106
114
|
}
|
|
107
115
|
takeCmdArgAsListObj() {
|
|
108
|
-
var
|
|
116
|
+
var r, e = this.cmdArgAsMapObj;
|
|
109
117
|
Object.assign(this, {
|
|
110
118
|
cmdArgAsMapObj: {},
|
|
111
119
|
cmdCount: 0,
|
|
112
120
|
batchSize: 0
|
|
113
121
|
});
|
|
114
|
-
for (
|
|
115
|
-
var t, a = r
|
|
122
|
+
for (r of [ "A", "R" ]) {
|
|
123
|
+
var t, a = e[r];
|
|
116
124
|
for (t in a) {
|
|
117
125
|
var n = Object.keys(a[t]);
|
|
118
126
|
0 < n.length ? a[t] = n : delete a[t];
|
|
119
127
|
}
|
|
120
|
-
|
|
128
|
+
g(a) && delete e[r];
|
|
121
129
|
}
|
|
122
130
|
var {
|
|
123
131
|
D: s,
|
|
124
132
|
M: i
|
|
125
|
-
} =
|
|
126
|
-
return s &&
|
|
127
|
-
r;
|
|
128
|
-
}
|
|
129
|
-
toAclBuffer(e) {
|
|
130
|
-
var r = this.batchSize;
|
|
131
|
-
if (0 < r) return _toAclBuffer(e, r, this.takeCmdArgAsListObj());
|
|
133
|
+
} = e;
|
|
134
|
+
return s && g(s) && delete e.D, i && g(i) && delete e.M, e;
|
|
132
135
|
}
|
|
133
|
-
|
|
134
|
-
|
|
136
|
+
toAclBuffer(r) {
|
|
137
|
+
var e, t = this.batchSize;
|
|
138
|
+
if (0 < t) return r = r, t = t, e = this.takeCmdArgAsListObj(), e = Buffer.from(JSON.stringify(e) + "\n"),
|
|
139
|
+
Buffer.concat([ l([ r, t, e.length ]), e ]);
|
|
135
140
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function o(r, e, t = 1) {
|
|
144
|
+
a(r.cmdArgAsMapObj, e, t);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function f(r, e) {
|
|
148
|
+
let t = r.cmdArgAsMapObj;
|
|
149
|
+
if (t && e && !(e.length <= 1)) {
|
|
150
|
+
for (let r = 0; r < e.length - 1; ++r) if (null == (t = t[e[r]])) return;
|
|
151
|
+
delete t[n(e)];
|
|
142
152
|
}
|
|
143
153
|
}
|
|
144
154
|
|
|
145
|
-
async function
|
|
155
|
+
async function c(e, r = !1, t = 0) {
|
|
146
156
|
try {
|
|
147
|
-
return await
|
|
148
|
-
} catch (
|
|
149
|
-
throw
|
|
157
|
+
return await v(e, await u.readFile(e), r, t);
|
|
158
|
+
} catch (r) {
|
|
159
|
+
throw d.error(`Reading ${e} failed:`, r), r;
|
|
150
160
|
}
|
|
151
161
|
}
|
|
152
162
|
|
|
153
|
-
let
|
|
163
|
+
let A = [ 1, 2, 4, 8 ];
|
|
154
164
|
|
|
155
|
-
function
|
|
156
|
-
var t =
|
|
165
|
+
function l(e) {
|
|
166
|
+
var t = e.length, a = new Array(t), n = new Array(t);
|
|
157
167
|
let s = t << 6, i = 1;
|
|
158
|
-
for (let
|
|
159
|
-
var o = a[
|
|
168
|
+
for (let r = 0; r < t; ++r) {
|
|
169
|
+
var o = a[r] = (o = e[r]) <= 255 ? 0 : o <= 65535 ? 1 : o <= 4294967295 ? 2 : 3, o = (s |= o << (r << 1),
|
|
170
|
+
n[r] = A[o]);
|
|
160
171
|
i += o;
|
|
161
172
|
}
|
|
162
|
-
var
|
|
163
|
-
|
|
164
|
-
let
|
|
165
|
-
for (let
|
|
166
|
-
|
|
167
|
-
|
|
173
|
+
var f = Buffer.allocUnsafe(i);
|
|
174
|
+
f.writeUInt8(s);
|
|
175
|
+
let c = 1;
|
|
176
|
+
for (let r = 0; r < t; ++r) {
|
|
177
|
+
h = d = u = l = void 0;
|
|
178
|
+
var [ l, u, d, h = 0 ] = [ f, e[r], n[r], c ];
|
|
179
|
+
switch (d) {
|
|
180
|
+
case 1:
|
|
181
|
+
l.writeUInt8(u, h);
|
|
182
|
+
break;
|
|
168
183
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
var i = ByteCountList[n >> (e << 1) & 3];
|
|
173
|
-
a[e] = _readNum(r, i, t), t += i;
|
|
174
|
-
}
|
|
175
|
-
return t;
|
|
176
|
-
}
|
|
184
|
+
case 2:
|
|
185
|
+
l.writeUInt16BE(u, h);
|
|
186
|
+
break;
|
|
177
187
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
188
|
+
case 4:
|
|
189
|
+
l.writeUInt32BE(u, h);
|
|
190
|
+
break;
|
|
182
191
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
for (let r = 0; r < e.length; ) {
|
|
186
|
-
var i = [], o = bufferToNums(e, r, i), [ i, l, f ] = i;
|
|
187
|
-
if (i <= n) logger.warn(`changeId ${i} <= currentChangeId ${n} at ${t}:${r}. Ignored.`),
|
|
188
|
-
r = o + f; else {
|
|
189
|
-
n + l != i && logger.warn(`currentChangeId ${n} + batchSize ${l} != changeId ` + i);
|
|
190
|
-
try {
|
|
191
|
-
var u = JSON.parse(e.subarray(o, o + f));
|
|
192
|
-
s.push([ i, u ]), n = i, r = o + f;
|
|
193
|
-
} catch (e) {
|
|
194
|
-
if (logger.error(`Parse ${t} failed at ${r}:`, e), a) return logger.warn(`Autorepair by truncating ${t} to ` + r),
|
|
195
|
-
null == (l = await fsPromises.truncate(t, r)) ? logger.log("truncate success") : logger.error("truncate failed:", l),
|
|
196
|
-
s;
|
|
197
|
-
throw e;
|
|
198
|
-
}
|
|
192
|
+
default:
|
|
193
|
+
l.writeBigUInt64BE(BigInt(u), h);
|
|
199
194
|
}
|
|
195
|
+
c += n[r];
|
|
200
196
|
}
|
|
201
|
-
return
|
|
197
|
+
return f;
|
|
202
198
|
}
|
|
203
199
|
|
|
204
|
-
function
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
200
|
+
function h(e, t, a) {
|
|
201
|
+
var n = e.readUInt8(t), s = (++t, n >> 6 & 3);
|
|
202
|
+
for (let r = 0; r < s; ++r) {
|
|
203
|
+
var i = A[n >> (r << 1) & 3];
|
|
204
|
+
a[r] = ((r, e, t = 0) => {
|
|
205
|
+
switch (e) {
|
|
206
|
+
case 1:
|
|
207
|
+
return r.readUInt8(t);
|
|
209
208
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
break;
|
|
209
|
+
case 2:
|
|
210
|
+
return r.readUInt16BE(t);
|
|
213
211
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
break;
|
|
212
|
+
case 4:
|
|
213
|
+
return r.readUInt32BE(t);
|
|
217
214
|
|
|
218
|
-
|
|
219
|
-
|
|
215
|
+
default:
|
|
216
|
+
return Number(r.readBigUInt64BE(t));
|
|
217
|
+
}
|
|
218
|
+
})(e, i, t), t += i;
|
|
220
219
|
}
|
|
220
|
+
return t;
|
|
221
221
|
}
|
|
222
222
|
|
|
223
|
-
function
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
223
|
+
async function v(t, r, a, n) {
|
|
224
|
+
var s = [];
|
|
225
|
+
for (let e = 0; e < r.length; ) {
|
|
226
|
+
var i = [], o = h(r, e, i), [ i, f, c ] = i;
|
|
227
|
+
if (i <= n) d.warn(`changeId ${i} <= currentChangeId ${n} at ${t}:${e}. Ignored.`),
|
|
228
|
+
e = o + c; else {
|
|
229
|
+
n + f != i && d.warn(`currentChangeId ${n} + batchSize ${f} != changeId ` + i);
|
|
230
|
+
try {
|
|
231
|
+
var l = JSON.parse(r.subarray(o, o + c));
|
|
232
|
+
s.push([ i, l ]), n = i, e = o + c;
|
|
233
|
+
} catch (r) {
|
|
234
|
+
if (d.error(`Parse ${t} failed at ${e}:`, r), a) return d.warn(`Autorepair by truncating ${t} to ` + e),
|
|
235
|
+
null == (f = await u.truncate(t, e)) ? d.log("truncate success") : d.error("truncate failed:", f),
|
|
236
|
+
s;
|
|
237
|
+
throw r;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
236
240
|
}
|
|
241
|
+
return s;
|
|
237
242
|
}
|
|
238
243
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
numsToBuffer: numsToBuffer,
|
|
250
|
-
bufferToNums: bufferToNums,
|
|
251
|
-
delCmdKey: delCmdKey
|
|
252
|
-
});
|
|
244
|
+
export {
|
|
245
|
+
i as QyAclCmdGenerator,
|
|
246
|
+
e as applyAclChange,
|
|
247
|
+
t as iterCmdKeys,
|
|
248
|
+
c as readAclFile,
|
|
249
|
+
v as readAclBuffer,
|
|
250
|
+
l as numsToBuffer,
|
|
251
|
+
h as bufferToNums,
|
|
252
|
+
r as delCmdKey
|
|
253
|
+
};
|
package/src/QyAclSaver.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
QyMessager as s
|
|
3
|
+
} from "./QyMessager.js";
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import {
|
|
6
|
+
getDefaultOptions as a
|
|
7
|
+
} from "./QyDefaultOptions.js";
|
|
8
|
+
|
|
9
|
+
class e extends s {
|
|
10
|
+
constructor(s, e) {
|
|
11
|
+
super(s, "QyAclSaver_Worker.js", e = {
|
|
12
|
+
...a("QyAclSaver"),
|
|
13
|
+
...e
|
|
14
|
+
}, e, [ "callSave" ], [ "switch", "castSave" ]);
|
|
9
15
|
}
|
|
10
16
|
}
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
18
|
+
export {
|
|
19
|
+
e as QyAclSaver
|
|
20
|
+
};
|