datafolder 1.0.2 → 1.0.4
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 +34 -31
- package/index.js +1 -3
- package/package.json +5 -3
- package/sample.js +37 -37
- package/scripts/airbnb.js +10 -11
- package/scripts/airbnb2.js +10 -11
- package/scripts/airbnb2_queries.js +20 -22
- package/scripts/airbnb_queries.js +23 -22
- package/scripts/downloadFile.js +29 -31
- package/scripts/express.js +7 -5
- package/scripts/fastify.js +12 -11
- package/scripts/flights.js +9 -9
- package/scripts/flights2.js +9 -9
- package/scripts/flights2_queries.js +107 -105
- package/scripts/flights_queries.js +113 -109
- 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 +67 -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 +264 -242
- 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 +12 -28
- package/src/rpc/queryFiles.js +2 -25
- 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/query-editor.js +6 -1
- package/static/datafolderui/querySelectorShadowRoot.js +15 -19
- package/static/datafolderui/resizable-input.js +18 -18
|
@@ -1,37 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} = require("./QyUtils.js"), qyCompressor = require("./QyCompressor.js");
|
|
1
|
+
import {
|
|
2
|
+
join as c
|
|
3
|
+
} from "node:path";
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
import {
|
|
6
|
+
rm as m,
|
|
7
|
+
rename as r,
|
|
8
|
+
readdir as d
|
|
9
|
+
} from "node:fs/promises";
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
getDefaultOptions as o
|
|
13
|
+
} from "./QyDefaultOptions.js";
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
QyMessageWorker as e
|
|
17
|
+
} from "./QyMessageWorker.js";
|
|
18
|
+
|
|
19
|
+
import {
|
|
20
|
+
folderOrFileExists as f,
|
|
21
|
+
ensureDir as h
|
|
22
|
+
} from "./QyUtils.js";
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
compressFile as t,
|
|
26
|
+
Zip_File_Extension as i
|
|
27
|
+
} from "./QyCompressor.js";
|
|
28
|
+
|
|
29
|
+
class s extends e {
|
|
7
30
|
constructor({
|
|
8
31
|
kvFolder: e,
|
|
9
32
|
options: s
|
|
10
33
|
}) {
|
|
11
34
|
super(s = {
|
|
12
|
-
...
|
|
35
|
+
...o("QyKVDataCleaner_Worker"),
|
|
13
36
|
...s
|
|
14
37
|
}, [ "start", "stop" ], [ "cleanAclFiles", "cleanPMFiles", "cleanVLFiles", "removeSnapshotsFiles" ]);
|
|
15
|
-
var s =
|
|
38
|
+
var s = c(e, "history"), a = c(e, "snapshot");
|
|
16
39
|
Object.assign(this, {
|
|
17
40
|
kvFolder: e,
|
|
18
41
|
snapshotFolder: a,
|
|
19
|
-
snapshotInfoFolder:
|
|
20
|
-
aclFolder:
|
|
21
|
-
historyAclFolder:
|
|
22
|
-
historySnapshotFolder:
|
|
42
|
+
snapshotInfoFolder: c(a, "info"),
|
|
43
|
+
aclFolder: c(e, "acl"),
|
|
44
|
+
historyAclFolder: c(s, "acl"),
|
|
45
|
+
historySnapshotFolder: c(s, "snapshot")
|
|
23
46
|
});
|
|
24
47
|
}
|
|
25
48
|
_op_start() {}
|
|
26
49
|
_op_stop() {}
|
|
27
50
|
async _op_cleanAclFiles(e) {
|
|
28
|
-
|
|
51
|
+
var s = this, a = e, e = s.aclFolder;
|
|
52
|
+
if (await f(e)) {
|
|
53
|
+
var o, r = [];
|
|
54
|
+
for (o of (await d(e)).filter(e => /^[1-9]/.test(e))) parseInt(o) <= a && r.push((async (e, s) => {
|
|
55
|
+
var {
|
|
56
|
+
aclFolder: a,
|
|
57
|
+
historyAclFolder: o
|
|
58
|
+
} = e;
|
|
59
|
+
return await h(o), F(e, s, a, o);
|
|
60
|
+
})(s, o));
|
|
61
|
+
0 < r.length && await Promise.allSettled(r);
|
|
62
|
+
}
|
|
29
63
|
}
|
|
30
64
|
async _op_cleanPMFiles(e) {
|
|
31
|
-
await Promise.allSettled(e.map(([ e, s ]) =>
|
|
65
|
+
await Promise.allSettled(e.map(([ e, s ]) => {
|
|
66
|
+
return a = this, o = e, r = s, Promise.all([ "pM", "prefixPM" ].map(e => l(a, o, r, e)));
|
|
67
|
+
var a, o, r;
|
|
68
|
+
}));
|
|
32
69
|
}
|
|
33
70
|
async _op_cleanVLFiles(e, s) {
|
|
34
|
-
await this
|
|
71
|
+
await l(this, e, s, "vL");
|
|
35
72
|
}
|
|
36
73
|
async _op_removeSnapshotsFiles(e) {
|
|
37
74
|
let {
|
|
@@ -39,56 +76,37 @@ class QyKVDataCleaner_Worker extends QyMessageWorker {
|
|
|
39
76
|
snapshotInfoFolder: a
|
|
40
77
|
} = this;
|
|
41
78
|
await Promise.all(e.map(async e => {
|
|
42
|
-
await
|
|
79
|
+
await m(c(a, e + ".json")), await m(c(s, "" + e), {
|
|
43
80
|
recursive: !0
|
|
44
81
|
});
|
|
45
82
|
}));
|
|
46
83
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
var n = new RegExp("^([0-9]+)_" + t).exec(o);
|
|
71
|
-
n && (n = parseInt(n[1])) < a && (1 == n ? (e || (e = path.join(r, "" + s),
|
|
72
|
-
await ensureDir(e)), l.push(this._cleanOutdatedFile(o, i, e))) : (n = path.join(i, o),
|
|
73
|
-
logger.info("Removing " + n), l.push(fsPromises.rm(n))));
|
|
74
|
-
}
|
|
75
|
-
0 < l.length && await Promise.allSettled(l);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function F(e, s, a, o) {
|
|
87
|
+
a = c(a, s), o = c(o, s);
|
|
88
|
+
return e.options.compressRedundantFile ? t(a, o + i, {
|
|
89
|
+
override: !0,
|
|
90
|
+
removeSrcAfterSuccess: !0
|
|
91
|
+
}) : (logger.info(`rename ${a} to ` + o), r(a, o));
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function l(s, a, o, r) {
|
|
95
|
+
var {
|
|
96
|
+
snapshotFolder: e,
|
|
97
|
+
historySnapshotFolder: t
|
|
98
|
+
} = s, i = c(e, "" + a);
|
|
99
|
+
if (await f(i)) {
|
|
100
|
+
let e;
|
|
101
|
+
var l, n = [];
|
|
102
|
+
for (l of await d(i)) {
|
|
103
|
+
var p = new RegExp("^([0-9]+)_" + r).exec(l);
|
|
104
|
+
p && (p = parseInt(p[1])) < o && (1 == p ? (e || (e = c(t, "" + a),
|
|
105
|
+
await h(e)), n.push(F(s, l, i, e))) : (p = c(i, l), logger.info("Removing " + p),
|
|
106
|
+
n.push(m(p))));
|
|
76
107
|
}
|
|
77
|
-
|
|
78
|
-
async _cleanOutdatedAclFile(e) {
|
|
79
|
-
var {
|
|
80
|
-
aclFolder: s,
|
|
81
|
-
historyAclFolder: a
|
|
82
|
-
} = this;
|
|
83
|
-
return await ensureDir(a), this._cleanOutdatedFile(e, s, a);
|
|
84
|
-
}
|
|
85
|
-
_cleanOutdatedFile(e, s, a) {
|
|
86
|
-
s = path.join(s, e), a = path.join(a, e);
|
|
87
|
-
return this.options.compressRedundantFile ? qyCompressor.compressFile(s, a + qyCompressor.Zip_File_Extension, {
|
|
88
|
-
override: !0,
|
|
89
|
-
removeSrcAfterSuccess: !0
|
|
90
|
-
}) : (logger.info(`rename ${s} to ` + a), fsPromises.rename(s, a));
|
|
108
|
+
0 < n.length && await Promise.allSettled(n);
|
|
91
109
|
}
|
|
92
110
|
}
|
|
93
111
|
|
|
94
|
-
|
|
112
|
+
export default s;
|
package/src/QyKVDataLoader.js
CHANGED
|
@@ -1,65 +1,86 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
readFile as u,
|
|
3
|
+
readdir as x
|
|
4
|
+
} from "node:fs/promises";
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
import {
|
|
7
|
+
join as o
|
|
8
|
+
} from "node:path";
|
|
9
|
+
|
|
10
|
+
import {
|
|
11
|
+
folderOrFileExists as g
|
|
12
|
+
} from "./QyUtils.js";
|
|
13
|
+
|
|
14
|
+
import {
|
|
15
|
+
readAclBuffer as M
|
|
16
|
+
} from "./QyAcl.js";
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
QySnapshots as e
|
|
20
|
+
} from "./QySnapshots.js";
|
|
21
|
+
|
|
22
|
+
import {
|
|
23
|
+
getDefaultOptions as r
|
|
24
|
+
} from "./QyDefaultOptions.js";
|
|
25
|
+
|
|
26
|
+
class a {
|
|
27
|
+
constructor(a, s) {
|
|
28
|
+
s = {
|
|
29
|
+
...r("QyKVDataLoader"),
|
|
30
|
+
...s
|
|
8
31
|
};
|
|
9
|
-
var
|
|
32
|
+
var t = o(a, "snapshot");
|
|
10
33
|
Object.assign(this, {
|
|
11
34
|
kvFolder: a,
|
|
12
|
-
options:
|
|
13
|
-
aclFolder:
|
|
14
|
-
snapshotFolder:
|
|
35
|
+
options: s,
|
|
36
|
+
aclFolder: o(a, "acl"),
|
|
37
|
+
snapshotFolder: t,
|
|
15
38
|
loadedMaxAclNum: 0,
|
|
16
39
|
aclKeyValueMap: {},
|
|
17
|
-
qySnapshots: new
|
|
40
|
+
qySnapshots: new e(t, s)
|
|
18
41
|
});
|
|
19
42
|
}
|
|
20
43
|
async load() {
|
|
21
|
-
var a = this.qySnapshots, [
|
|
44
|
+
var a = this.qySnapshots, [ s ] = await Promise.all([ (async a => {
|
|
45
|
+
if (a = a.aclFolder, await g(a)) return (await x(a)).filter(a => /^[1-9]/.test(a)).map(a => parseInt(a));
|
|
46
|
+
})(this), a.loadSnapshotInfos() ]);
|
|
22
47
|
let {
|
|
23
|
-
maxSnapshotNum:
|
|
24
|
-
snapshotMaxChangeId:
|
|
48
|
+
maxSnapshotNum: t,
|
|
49
|
+
snapshotMaxChangeId: o
|
|
25
50
|
} = a;
|
|
26
|
-
this.maxChangeId =
|
|
51
|
+
if (this.maxChangeId = o, s) {
|
|
52
|
+
var e = this, r = s.filter(a => a > t), {
|
|
53
|
+
aclKeyValueMap: l,
|
|
54
|
+
qySnapshots: i,
|
|
55
|
+
options: s
|
|
56
|
+
} = (r.sort((a, s) => a - s), e), n = s.autoRepairAclFile, p = await Promise.all(r.map(async a => u(F(e, a))));
|
|
57
|
+
for (let a = 0; a < r.length; ++a) {
|
|
58
|
+
var d = r[a], m = F(e, d), m = await M(m, p[a], n, e.maxChangeId);
|
|
59
|
+
if (0 < m.length) {
|
|
60
|
+
for (var [ h, c ] of m) i.applyCmdObj(c, l), e.maxChangeId = h;
|
|
61
|
+
e.loadedMaxAclNum = d;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
await 0;
|
|
65
|
+
}
|
|
27
66
|
var {
|
|
28
|
-
maxChangeId:
|
|
29
|
-
loadedMaxAclNum:
|
|
30
|
-
aclKeyValueMap:
|
|
67
|
+
maxChangeId: s,
|
|
68
|
+
loadedMaxAclNum: f,
|
|
69
|
+
aclKeyValueMap: y
|
|
31
70
|
} = this;
|
|
32
71
|
return {
|
|
33
|
-
maxChangeId:
|
|
34
|
-
loadedMaxAclNum:
|
|
72
|
+
maxChangeId: s,
|
|
73
|
+
loadedMaxAclNum: f,
|
|
35
74
|
qySnapshots: a,
|
|
36
|
-
aclKeyValueMap:
|
|
75
|
+
aclKeyValueMap: y
|
|
37
76
|
};
|
|
38
77
|
}
|
|
39
|
-
async _loadAclFiles(e) {
|
|
40
|
-
e.sort((a, e) => a - e);
|
|
41
|
-
var {
|
|
42
|
-
aclKeyValueMap: s,
|
|
43
|
-
qySnapshots: t,
|
|
44
|
-
options: a
|
|
45
|
-
} = this, l = a.autoRepairAclFile, i = await Promise.all(e.map(async a => fsPromises.readFile(this._getAclFilePath(a))));
|
|
46
|
-
for (let a = 0; a < e.length; ++a) {
|
|
47
|
-
var r = e[a], o = this._getAclFilePath(r), o = await readAclBuffer(o, i[a], l, this.maxChangeId);
|
|
48
|
-
if (0 < o.length) {
|
|
49
|
-
for (var [ n, h ] of o) t.applyCmdObj(h, s), this.maxChangeId = n;
|
|
50
|
-
this.loadedMaxAclNum = r;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async _listAclFiles() {
|
|
55
|
-
var a = this.aclFolder;
|
|
56
|
-
if (await folderOrFileExists(a)) return (await fsPromises.readdir(a)).filter(a => /^[1-9]/.test(a)).map(a => parseInt(a));
|
|
57
|
-
}
|
|
58
|
-
_getAclFilePath(a) {
|
|
59
|
-
return path.join(this.aclFolder, a + "_acl.txt");
|
|
60
|
-
}
|
|
61
78
|
}
|
|
62
79
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
80
|
+
function F(a, s) {
|
|
81
|
+
return o(a.aclFolder, s + "_acl.txt");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export {
|
|
85
|
+
a as QyKVDataLoader
|
|
86
|
+
};
|
package/src/QyKVDataSaver.js
CHANGED
|
@@ -1,17 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
QyMessager as a
|
|
3
|
+
} from "./QyMessager.js";
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import {
|
|
6
|
+
getDefaultOptions as r
|
|
7
|
+
} from "./QyDefaultOptions.js";
|
|
8
|
+
|
|
9
|
+
class e extends a {
|
|
10
|
+
constructor(a, e, s) {
|
|
11
|
+
super(a, "QyKVDataSaver_Worker.js", {
|
|
12
|
+
kvFolder: e,
|
|
7
13
|
options: s = {
|
|
8
|
-
...
|
|
14
|
+
...r("QyKVDataSaver"),
|
|
9
15
|
...s
|
|
10
16
|
}
|
|
11
17
|
}, s, [ "callSave" ], [ "castSave", "releaseSnapshot" ]);
|
|
12
18
|
}
|
|
13
19
|
}
|
|
14
20
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
21
|
+
export {
|
|
22
|
+
e as QyKVDataSaver
|
|
23
|
+
};
|
|
@@ -1,81 +1,104 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
join as t
|
|
3
|
+
} from "node:path";
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
import {
|
|
6
|
+
getDefaultOptions as e
|
|
7
|
+
} from "./QyDefaultOptions.js";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
QyAclSaver as n
|
|
11
|
+
} from "./QyAclSaver.js";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
QyMessageWorker as a
|
|
15
|
+
} from "./QyMessageWorker.js";
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
QySnapshotSaver as o
|
|
19
|
+
} from "./QySnapshotSaver.js";
|
|
20
|
+
|
|
21
|
+
import {
|
|
22
|
+
delCmdKey as m
|
|
23
|
+
} from "./QyAcl.js";
|
|
24
|
+
|
|
25
|
+
class s extends a {
|
|
4
26
|
constructor({
|
|
5
|
-
kvFolder:
|
|
6
|
-
options:
|
|
27
|
+
kvFolder: a,
|
|
28
|
+
options: s
|
|
7
29
|
}) {
|
|
8
|
-
super(
|
|
9
|
-
...
|
|
10
|
-
...
|
|
30
|
+
super(s = {
|
|
31
|
+
...e("QyKVDataSaver_Worker"),
|
|
32
|
+
...s
|
|
11
33
|
}), Object.assign(this, {
|
|
12
|
-
kvFolder:
|
|
13
|
-
aclFolder:
|
|
14
|
-
qyAclSaver: new
|
|
15
|
-
qySnapshotSaver: new
|
|
34
|
+
kvFolder: a,
|
|
35
|
+
aclFolder: t(a, "acl"),
|
|
36
|
+
qyAclSaver: new n(this, s),
|
|
37
|
+
qySnapshotSaver: new o(this, a, s)
|
|
16
38
|
});
|
|
17
39
|
}
|
|
18
|
-
start(
|
|
40
|
+
start(a, s, t, e) {
|
|
19
41
|
var {
|
|
20
|
-
qyAclSaver:
|
|
21
|
-
qySnapshotSaver:
|
|
42
|
+
qyAclSaver: n,
|
|
43
|
+
qySnapshotSaver: o
|
|
22
44
|
} = this;
|
|
23
45
|
Object.assign(this, {
|
|
24
|
-
maxChangeId:
|
|
25
|
-
snapshotMaxChangeId:
|
|
26
|
-
currentAclNum: (
|
|
27
|
-
}),
|
|
46
|
+
maxChangeId: a,
|
|
47
|
+
snapshotMaxChangeId: a,
|
|
48
|
+
currentAclNum: (t || s) + 1
|
|
49
|
+
}), n.start(u(this)), o.start(a, t, e);
|
|
28
50
|
}
|
|
29
51
|
async stop() {
|
|
30
52
|
var {
|
|
31
|
-
qyAclSaver:
|
|
32
|
-
options:
|
|
33
|
-
qySnapshotSaver:
|
|
34
|
-
currentAclNum:
|
|
35
|
-
maxChangeId:
|
|
36
|
-
snapshotMaxChangeId:
|
|
53
|
+
qyAclSaver: a,
|
|
54
|
+
options: s,
|
|
55
|
+
qySnapshotSaver: t,
|
|
56
|
+
currentAclNum: e,
|
|
57
|
+
maxChangeId: n,
|
|
58
|
+
snapshotMaxChangeId: o
|
|
37
59
|
} = this;
|
|
38
|
-
this.isStopping = !0, await
|
|
39
|
-
logger.log(`Saving snapshot ${
|
|
60
|
+
this.isStopping = !0, await a.stop(), s.saveSnapshotAtStop && o < n && (this.isSavingSnapshot && await new Promise(a => this.saveSnapshotResolve = a),
|
|
61
|
+
logger.log(`Saving snapshot ${e} at stop.`), t.saveSnapshot(e)), await t.stop();
|
|
40
62
|
}
|
|
41
|
-
callSave(
|
|
42
|
-
return this
|
|
63
|
+
callSave(a, s, t) {
|
|
64
|
+
return r(this, a, s, t, !0);
|
|
43
65
|
}
|
|
44
|
-
castSave(
|
|
45
|
-
return this
|
|
66
|
+
castSave(a, s, t) {
|
|
67
|
+
return r(this, a, s, t);
|
|
46
68
|
}
|
|
47
|
-
releaseSnapshot(
|
|
48
|
-
this.qySnapshotSaver.releaseSnapshot(
|
|
69
|
+
releaseSnapshot(a) {
|
|
70
|
+
this.qySnapshotSaver.releaseSnapshot(a);
|
|
49
71
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
qyAclSaver: r,
|
|
53
|
-
qySnapshotSaver: n,
|
|
54
|
-
options: o,
|
|
55
|
-
snapshotMaxChangeId: h,
|
|
56
|
-
currentAclNum: i,
|
|
57
|
-
isSavingSnapshot: S
|
|
58
|
-
} = this;
|
|
59
|
-
let l;
|
|
60
|
-
return t ? l = r.callSave(e, a) : r.castSave(e, a), this._removeSyncedKeys(a, s),
|
|
61
|
-
n.castSave(e, a, s), this.maxChangeId = e, !S && e - h >= o.snapshotMaxChangeCount && (++this.currentAclNum,
|
|
62
|
-
r.switch(this._getAclFilePath()), n.saveSnapshot(i), Object.assign(this, {
|
|
63
|
-
snapshotMaxChangeId: e,
|
|
64
|
-
isSavingSnapshot: !0
|
|
65
|
-
})), l;
|
|
72
|
+
onSnapshotSavedChangeId(a, s) {
|
|
73
|
+
this.isSavingSnapshot = !1, this.saveSnapshotResolve ? this.saveSnapshotResolve() : this.isStopping || this.castParent("onSnapshotSavedChangeId", a, s);
|
|
66
74
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function r(a, s, t, e, n) {
|
|
78
|
+
var {
|
|
79
|
+
qyAclSaver: o,
|
|
80
|
+
qySnapshotSaver: r,
|
|
81
|
+
options: h,
|
|
82
|
+
snapshotMaxChangeId: i,
|
|
83
|
+
currentAclNum: p,
|
|
84
|
+
isSavingSnapshot: S
|
|
85
|
+
} = a;
|
|
86
|
+
let v;
|
|
87
|
+
n ? v = o.callSave(s, t) : o.castSave(s, t);
|
|
88
|
+
var l = t, c = e;
|
|
89
|
+
if (c) {
|
|
90
|
+
var g = c.length;
|
|
91
|
+
for (let a = 0; a < g; a += 2) m(l, c[a]);
|
|
78
92
|
}
|
|
93
|
+
return r.castSave(s, t, e), a.maxChangeId = s, !S && s - i >= h.snapshotMaxChangeCount && (++a.currentAclNum,
|
|
94
|
+
o.switch(u(a)), r.saveSnapshot(p), Object.assign(a, {
|
|
95
|
+
snapshotMaxChangeId: s,
|
|
96
|
+
isSavingSnapshot: !0
|
|
97
|
+
})), v;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function u(a) {
|
|
101
|
+
return t(a.aclFolder, a.currentAclNum + "_acl.txt");
|
|
79
102
|
}
|
|
80
103
|
|
|
81
|
-
|
|
104
|
+
export default s;
|
package/src/QyLogFileSaver.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
QyMessager as e
|
|
3
|
+
} from "./QyMessager.js";
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
import {
|
|
6
|
+
getDefaultOptions as r
|
|
7
|
+
} from "./QyDefaultOptions.js";
|
|
8
|
+
|
|
9
|
+
class s extends e {
|
|
4
10
|
constructor(e, s) {
|
|
5
11
|
super(e, "QyLogFileSaver_Worker.js", s = {
|
|
6
|
-
...
|
|
12
|
+
...r("QyLogFileSaver"),
|
|
7
13
|
...s
|
|
8
14
|
}, s, [ "switch" ], [ "save" ]);
|
|
9
15
|
}
|
|
10
16
|
}
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
18
|
+
export {
|
|
19
|
+
s as QyLogFileSaver
|
|
20
|
+
};
|
|
@@ -1,26 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
import {
|
|
2
|
+
getDefaultOptions as s
|
|
3
|
+
} from "./QyDefaultOptions.js";
|
|
2
4
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import {
|
|
6
|
+
QyMessageWorker as t
|
|
7
|
+
} from "./QyMessageWorker.js";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
QyBinWriter as r
|
|
11
|
+
} from "./QyBinWriter.js";
|
|
12
|
+
|
|
13
|
+
class i extends t {
|
|
14
|
+
constructor(t) {
|
|
15
|
+
super(t = {
|
|
16
|
+
...s("QyLogFileSaver_Worker"),
|
|
17
|
+
...t
|
|
8
18
|
}), Object.assign(this, {
|
|
9
|
-
qyBinWriter: new
|
|
19
|
+
qyBinWriter: new r(t)
|
|
10
20
|
});
|
|
11
21
|
}
|
|
12
|
-
async start(
|
|
13
|
-
await this.qyBinWriter.start(
|
|
22
|
+
async start(t) {
|
|
23
|
+
await this.qyBinWriter.start(t);
|
|
14
24
|
}
|
|
15
25
|
async stop() {
|
|
16
26
|
await this.qyBinWriter.stop();
|
|
17
27
|
}
|
|
18
|
-
async switch(
|
|
19
|
-
await this.qyBinWriter.switch(
|
|
28
|
+
async switch(t) {
|
|
29
|
+
await this.qyBinWriter.switch(t);
|
|
20
30
|
}
|
|
21
|
-
save(
|
|
22
|
-
this.qyBinWriter.save(
|
|
31
|
+
save(t, s) {
|
|
32
|
+
this.qyBinWriter.save(t, s);
|
|
23
33
|
}
|
|
24
34
|
}
|
|
25
35
|
|
|
26
|
-
|
|
36
|
+
export default i;
|