datafolder 1.0.9 → 1.0.10
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 +3 -1
- package/SSD.md +60 -0
- package/index.js +1 -0
- package/package.json +1 -1
- package/sample.js +4 -4
- package/scripts/airbnb.js +1 -0
- package/scripts/airbnb2.js +1 -0
- package/scripts/convertBinFiles.js +1 -0
- package/scripts/express.js +2 -1
- package/scripts/fastify.js +1 -0
- package/scripts/flights.js +1 -0
- package/scripts/flights2.js +1 -0
- package/scripts/flights_queries.js +1 -0
- package/src/QyAcl.d.ts +3 -3
- package/src/QyAcl.js +7 -7
- package/src/QyAclSaver_Worker.d.ts +1 -0
- package/src/QyAclSaver_Worker.js +1 -0
- package/src/QyAclWriter.d.ts +2 -1
- package/src/QyAclWriter.js +7 -6
- package/src/QyBatch.d.ts +29 -22
- package/src/QyBatch.js +85 -72
- package/src/QyBinWriter.d.ts +9 -4
- package/src/QyBinWriter.js +83 -70
- package/src/QyCD.d.ts +19 -19
- package/src/QyCD.js +2 -2
- package/src/QyCache.d.ts +22 -23
- package/src/QyCache.js +47 -36
- package/src/QyCompressor_Worker.js +2 -2
- package/src/QyDB.d.ts +6 -9
- package/src/QyDB.js +1 -1
- package/src/QyFile.d.ts +2 -0
- package/src/QyFile.js +42 -40
- package/src/QyFileContentUtils.d.ts +1 -4
- package/src/QyFileLogger.d.ts +4 -0
- package/src/QyFileLogger.js +30 -26
- package/src/QyIndex.d.ts +2 -2
- package/src/QyIndex.js +84 -80
- package/src/QyIndexPropTree.d.ts +4 -0
- package/src/QyIndexPropTree.js +19 -10
- package/src/QyIntersectNode.d.ts +1 -0
- package/src/QyIntersectNode.js +1 -0
- package/src/QyJsonSaver.d.ts +2 -2
- package/src/QyJsonSaver.js +4 -4
- package/src/QyKVData.d.ts +18 -1
- package/src/QyKVData.js +98 -78
- package/src/QyKVDataCleaner_Worker.d.ts +7 -1
- package/src/QyKVDataCleaner_Worker.js +69 -55
- package/src/QyKVDataLoader.d.ts +10 -2
- package/src/QyKVDataLoader.js +27 -21
- package/src/QyKVDataSaver_Worker.d.ts +10 -0
- package/src/QyKVDataSaver_Worker.js +23 -9
- package/src/QyLogFileSaver_Worker.d.ts +1 -0
- package/src/QyLogFileSaver_Worker.js +7 -6
- package/src/QyLogger.d.ts +20 -10
- package/src/QyLogger.js +110 -67
- package/src/QyMessageWorker.d.ts +1 -1
- package/src/QyMessageWorker.js +5 -5
- package/src/QyMessager.d.ts +5 -1
- package/src/QyMessager.js +6 -1
- package/src/QyMod.js +9 -8
- package/src/QyOpRunner.d.ts +5 -1
- package/src/QyOpRunner.js +7 -7
- package/src/QyQueue.d.ts +5 -1
- package/src/QyQueue.js +6 -7
- package/src/QySaver.d.ts +3 -0
- package/src/QySaver.js +26 -15
- package/src/QySnapshotCompactor_Worker.d.ts +7 -0
- package/src/QySnapshotCompactor_Worker.js +37 -26
- package/src/QySnapshotSaver_Worker.d.ts +8 -1
- package/src/QySnapshotSaver_Worker.js +21 -14
- package/src/QySnapshots.d.ts +19 -7
- package/src/QySnapshots.js +195 -172
- package/src/QyTrigger.d.ts +5 -1
- package/src/QyTrigger.js +44 -34
- package/src/QyUnionNode.d.ts +10 -1
- package/src/QyUnionNode.js +34 -36
- package/src/QyUtils.d.ts +2 -2
- package/src/QyUtils.js +116 -111
- package/src/simulate.js +34 -31
- package/src/simulate2.js +49 -46
- package/src/soc_pokec.js +17 -11
- package/static/codemirror.bundle/editor.bundle.js +2 -0
|
@@ -19,10 +19,24 @@ import {
|
|
|
19
19
|
} from "./QySnapshotSaver.js";
|
|
20
20
|
|
|
21
21
|
import {
|
|
22
|
-
delCmdKey as
|
|
22
|
+
delCmdKey as m
|
|
23
23
|
} from "./QyAcl.js";
|
|
24
24
|
|
|
25
|
+
import {
|
|
26
|
+
logger as r
|
|
27
|
+
} from "./QyLogger.js";
|
|
28
|
+
|
|
25
29
|
export default class extends a {
|
|
30
|
+
kvFolder;
|
|
31
|
+
aclFolder;
|
|
32
|
+
qyAclSaver;
|
|
33
|
+
qySnapshotSaver;
|
|
34
|
+
isStopping;
|
|
35
|
+
currentAclNum;
|
|
36
|
+
maxChangeId;
|
|
37
|
+
snapshotMaxChangeId;
|
|
38
|
+
isSavingSnapshot;
|
|
39
|
+
saveSnapshotResolve;
|
|
26
40
|
constructor({
|
|
27
41
|
kvFolder: a,
|
|
28
42
|
options: s
|
|
@@ -46,7 +60,7 @@ export default class extends a {
|
|
|
46
60
|
maxChangeId: a,
|
|
47
61
|
snapshotMaxChangeId: a,
|
|
48
62
|
currentAclNum: (t || s) + 1
|
|
49
|
-
}), o && o.start(
|
|
63
|
+
}), o && o.start(d(this)), n.start(a, t, e);
|
|
50
64
|
}
|
|
51
65
|
async _op_stop() {
|
|
52
66
|
var {
|
|
@@ -58,13 +72,13 @@ export default class extends a {
|
|
|
58
72
|
snapshotMaxChangeId: n
|
|
59
73
|
} = this;
|
|
60
74
|
return this.isStopping = !0, a && await a.stop(), s.saveSnapshotAtStop && n < o && (this.isSavingSnapshot && await new Promise(a => this.saveSnapshotResolve = a),
|
|
61
|
-
|
|
75
|
+
r.log(`Saving snapshot ${e} at stop.`), t.saveSnapshot(e)), t.stop();
|
|
62
76
|
}
|
|
63
77
|
callSave(a, s, t) {
|
|
64
|
-
return
|
|
78
|
+
return h(this, a, s, t, !0);
|
|
65
79
|
}
|
|
66
80
|
castSave(a, s, t) {
|
|
67
|
-
return
|
|
81
|
+
return h(this, a, s, t);
|
|
68
82
|
}
|
|
69
83
|
releaseSnapshot(a) {
|
|
70
84
|
this.qySnapshotSaver.releaseSnapshot(a);
|
|
@@ -74,7 +88,7 @@ export default class extends a {
|
|
|
74
88
|
}
|
|
75
89
|
}
|
|
76
90
|
|
|
77
|
-
function
|
|
91
|
+
function h(a, s, t, e, o = !1) {
|
|
78
92
|
var {
|
|
79
93
|
qyAclSaver: n,
|
|
80
94
|
qySnapshotSaver: r,
|
|
@@ -88,15 +102,15 @@ function r(a, s, t, e, o) {
|
|
|
88
102
|
var l = t, c = e;
|
|
89
103
|
if (c) {
|
|
90
104
|
var g = c.length;
|
|
91
|
-
for (let a = 0; a < g; a += 2)
|
|
105
|
+
for (let a = 0; a < g; a += 2) m(l, c[a]);
|
|
92
106
|
}
|
|
93
107
|
return r.castSave(s, t, e), a.maxChangeId = s, !S && s - i >= h.snapshotMaxChangeCount && (++a.currentAclNum,
|
|
94
|
-
n && n.switch(
|
|
108
|
+
n && n.switch(d(a)), r.saveSnapshot(p), Object.assign(a, {
|
|
95
109
|
snapshotMaxChangeId: s,
|
|
96
110
|
isSavingSnapshot: !0
|
|
97
111
|
})), v;
|
|
98
112
|
}
|
|
99
113
|
|
|
100
|
-
function
|
|
114
|
+
function d(a) {
|
|
101
115
|
return t(a.aclFolder, a.currentAclNum + "_acl.txt");
|
|
102
116
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
getDefaultOptions as
|
|
2
|
+
getDefaultOptions as r
|
|
3
3
|
} from "./QyDefaultOptions.js";
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -7,16 +7,17 @@ import {
|
|
|
7
7
|
} from "./QyMessageWorker.js";
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
|
-
QyBinWriter as
|
|
10
|
+
QyBinWriter as s
|
|
11
11
|
} from "./QyBinWriter.js";
|
|
12
12
|
|
|
13
13
|
export default class extends t {
|
|
14
|
+
qyBinWriter;
|
|
14
15
|
constructor(t) {
|
|
15
16
|
super(t = {
|
|
16
|
-
...
|
|
17
|
+
...r("QyLogFileSaver_Worker"),
|
|
17
18
|
...t
|
|
18
19
|
}), Object.assign(this, {
|
|
19
|
-
qyBinWriter: new
|
|
20
|
+
qyBinWriter: new s(t)
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
async _op_start(t) {
|
|
@@ -28,7 +29,7 @@ export default class extends t {
|
|
|
28
29
|
async switch(t) {
|
|
29
30
|
await this.qyBinWriter.switch(t);
|
|
30
31
|
}
|
|
31
|
-
save(t,
|
|
32
|
-
this.qyBinWriter.save(t,
|
|
32
|
+
save(t, r) {
|
|
33
|
+
this.qyBinWriter.save(t, r);
|
|
33
34
|
}
|
|
34
35
|
}
|
package/src/QyLogger.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
declare class QyLogger {
|
|
2
|
+
_level: number;
|
|
3
|
+
fileConsole: any;
|
|
4
|
+
stdout: any;
|
|
5
|
+
stderr: any;
|
|
6
|
+
constructor();
|
|
7
|
+
get level(): string;
|
|
8
|
+
set level(val: string);
|
|
9
|
+
info(...args: any[]): void;
|
|
10
|
+
log(...args: any[]): void;
|
|
11
|
+
debug(...args: any[]): void;
|
|
12
|
+
warn(...args: any[]): void;
|
|
13
|
+
error(...args: any[]): void;
|
|
14
|
+
handleOutMsg(msg: any): void;
|
|
15
|
+
handleErrMsg(msg: any): void;
|
|
16
|
+
closeFileConsole(): void;
|
|
17
|
+
setFileConsoleDateDirPath(dateDirPath: string, clearLogAtStart?: boolean): void;
|
|
18
|
+
}
|
|
19
|
+
export declare const logger: QyLogger;
|
|
20
|
+
export {};
|
package/src/QyLogger.js
CHANGED
|
@@ -1,87 +1,130 @@
|
|
|
1
1
|
import o from "node:fs";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import r from "node:path";
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
|
-
Console as
|
|
6
|
+
Console as i
|
|
7
7
|
} from "node:console";
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
parentPort as n,
|
|
11
|
+
isMainThread as l,
|
|
12
|
+
threadId as e
|
|
12
13
|
} from "node:worker_threads";
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
l.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
15
|
+
import {
|
|
16
|
+
Writable as t
|
|
17
|
+
} from "node:stream";
|
|
18
|
+
|
|
19
|
+
let a = l ? "" : `W${e}:`, d = {
|
|
20
|
+
info: 1,
|
|
21
|
+
debug: 2,
|
|
22
|
+
log: 3,
|
|
23
|
+
warn: 4,
|
|
24
|
+
error: 5,
|
|
25
|
+
none: 6
|
|
26
|
+
}, s = Object.fromEntries(Object.entries(d).map(([ e, t ]) => [ t, e ]));
|
|
27
|
+
|
|
28
|
+
class h {
|
|
29
|
+
_level = d.debug;
|
|
30
|
+
fileConsole;
|
|
31
|
+
stdout;
|
|
32
|
+
stderr;
|
|
33
|
+
constructor() {
|
|
34
|
+
var e, t;
|
|
35
|
+
l || (e = this.stdout = p("%o_"), t = this.stderr = p("%e_"), this.fileConsole = new i({
|
|
36
|
+
stdout: e,
|
|
37
|
+
stderr: t,
|
|
38
|
+
inspectOptions: {
|
|
39
|
+
depth: 3,
|
|
40
|
+
colors: !1
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
}
|
|
44
|
+
get level() {
|
|
45
|
+
return s[this._level];
|
|
46
|
+
}
|
|
47
|
+
set level(e) {
|
|
48
|
+
this._level = d[e];
|
|
49
|
+
}
|
|
50
|
+
info(...e) {
|
|
51
|
+
c(this, "info", e);
|
|
52
|
+
}
|
|
53
|
+
log(...e) {
|
|
54
|
+
c(this, "log", e);
|
|
55
|
+
}
|
|
56
|
+
debug(...e) {
|
|
57
|
+
c(this, "debug", e);
|
|
58
|
+
}
|
|
59
|
+
warn(...e) {
|
|
60
|
+
c(this, "warn", e);
|
|
61
|
+
}
|
|
62
|
+
error(...e) {
|
|
63
|
+
c(this, "error", e);
|
|
44
64
|
}
|
|
45
|
-
|
|
65
|
+
handleOutMsg(e) {
|
|
66
|
+
l ? u(this.stdout, e) : n?.postMessage(e);
|
|
67
|
+
}
|
|
68
|
+
handleErrMsg(e) {
|
|
69
|
+
l ? u(this.stderr, e) : n?.postMessage(e);
|
|
70
|
+
}
|
|
71
|
+
closeFileConsole() {
|
|
72
|
+
l && (this.fileConsole = void 0, this.stdout && (this.stdout.close(), this.stdout = void 0),
|
|
73
|
+
this.stderr) && (this.stderr.close(), this.stderr = void 0);
|
|
74
|
+
}
|
|
75
|
+
setFileConsoleDateDirPath(e, t = !1) {
|
|
76
|
+
var s;
|
|
77
|
+
l && (this.closeFileConsole(), t = {
|
|
78
|
+
flags: t ? "w" : "a",
|
|
79
|
+
flush: !0,
|
|
80
|
+
autoClose: !1
|
|
81
|
+
}, s = this.stdout = o.createWriteStream(r.join(e, "stdout.txt"), t), e = this.stderr = o.createWriteStream(r.join(e, "stderr.txt"), t),
|
|
82
|
+
this.fileConsole = new i({
|
|
83
|
+
stdout: s,
|
|
84
|
+
stderr: e,
|
|
85
|
+
inspectOptions: {
|
|
86
|
+
depth: 3,
|
|
87
|
+
colors: !1
|
|
88
|
+
}
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
}
|
|
46
92
|
|
|
47
|
-
function
|
|
48
|
-
|
|
93
|
+
function u(e, t) {
|
|
94
|
+
var s, o;
|
|
95
|
+
e && ({
|
|
96
|
+
chunks: t,
|
|
97
|
+
chunk: s,
|
|
98
|
+
encoding: o
|
|
99
|
+
} = t, t ? e.writev(t) : e.write(s, o));
|
|
49
100
|
}
|
|
50
101
|
|
|
51
|
-
function
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
flush: !0,
|
|
56
|
-
autoClose: !1
|
|
57
|
-
};
|
|
58
|
-
g = o.createWriteStream(n.join(e, "stdout.txt"), r), f = o.createWriteStream(n.join(e, "stderr.txt"), r),
|
|
59
|
-
a = new t({
|
|
60
|
-
stdout: g,
|
|
61
|
-
stderr: f,
|
|
62
|
-
inspectOptions: {
|
|
63
|
-
depth: 3,
|
|
64
|
-
colors: !1
|
|
65
|
-
}
|
|
66
|
-
});
|
|
102
|
+
function c(e, t, s) {
|
|
103
|
+
var o;
|
|
104
|
+
e._level <= d[t] && (o = ((o = (o = new Error().stack?.split("\n")) && /([^/\\()]+)\)?$/.exec(o[3] ?? "")) && o[1]) ?? "",
|
|
105
|
+
o = `${new Date().toISOString()} ${a}${o}:${t}:`, console[t](o, ...s), e.fileConsole) && e.fileConsole[t](o, ...s);
|
|
67
106
|
}
|
|
68
107
|
|
|
69
|
-
function
|
|
70
|
-
|
|
71
|
-
|
|
108
|
+
function p(o) {
|
|
109
|
+
return new t({
|
|
110
|
+
write(e, t, s) {
|
|
111
|
+
return n?.postMessage({
|
|
112
|
+
opName: o,
|
|
113
|
+
chunk: e,
|
|
114
|
+
encoding: t
|
|
115
|
+
}), s && s(), !0;
|
|
116
|
+
},
|
|
117
|
+
writev(e, t) {
|
|
118
|
+
return n?.postMessage({
|
|
119
|
+
opName: o,
|
|
120
|
+
chunks: e
|
|
121
|
+
}), t && t(), !0;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
72
124
|
}
|
|
73
125
|
|
|
74
|
-
|
|
75
|
-
get() {
|
|
76
|
-
return s[l.currentLogLevel];
|
|
77
|
-
},
|
|
78
|
-
set(e) {
|
|
79
|
-
l.currentLogLevel = c[e];
|
|
80
|
-
}
|
|
81
|
-
}), globalThis.logger = l;
|
|
126
|
+
var f = new h();
|
|
82
127
|
|
|
83
128
|
export {
|
|
84
|
-
|
|
85
|
-
d as closeFileConsole,
|
|
86
|
-
L as setFileConsoleDateDirPath
|
|
129
|
+
f as logger
|
|
87
130
|
};
|
package/src/QyMessageWorker.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { QyOpRunner } from "./QyOpRunner.ts";
|
|
2
2
|
export declare class QyMessageWorker extends QyOpRunner {
|
|
3
|
-
constructor(options: any, callOpNameList
|
|
3
|
+
constructor(options: any, callOpNameList?: any[], castOpNameList?: any[]);
|
|
4
4
|
castParent(opName: any, ...args: any[]): void;
|
|
5
5
|
}
|
package/src/QyMessageWorker.js
CHANGED
|
@@ -15,11 +15,11 @@ import {
|
|
|
15
15
|
} from "./QyOpRunner.js";
|
|
16
16
|
|
|
17
17
|
class e extends s {
|
|
18
|
-
constructor(s, e, r) {
|
|
18
|
+
constructor(s, e = [], r = []) {
|
|
19
19
|
super(s = {
|
|
20
20
|
...a("QyMessageWorker"),
|
|
21
21
|
...s
|
|
22
|
-
}, e, r), o
|
|
22
|
+
}, e, r), o?.on("message", async s => {
|
|
23
23
|
var {
|
|
24
24
|
opName: e,
|
|
25
25
|
_cast: r
|
|
@@ -28,12 +28,12 @@ class e extends s {
|
|
|
28
28
|
var a = s.args || [];
|
|
29
29
|
try {
|
|
30
30
|
var t = await this[e](...a);
|
|
31
|
-
r || o
|
|
31
|
+
r || o?.postMessage({
|
|
32
32
|
ack: e,
|
|
33
33
|
result: t
|
|
34
34
|
}), "stop" == e && process.exit();
|
|
35
35
|
} catch (s) {
|
|
36
|
-
n.error(`Running ${e} failed:`, s), r || o
|
|
36
|
+
n.error(`Running ${e} failed:`, s), r || o?.postMessage({
|
|
37
37
|
ack: e,
|
|
38
38
|
exception: s
|
|
39
39
|
});
|
|
@@ -42,7 +42,7 @@ class e extends s {
|
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
castParent(s, ...e) {
|
|
45
|
-
o
|
|
45
|
+
o?.postMessage({
|
|
46
46
|
opName: s,
|
|
47
47
|
args: e,
|
|
48
48
|
_cast: !0
|
package/src/QyMessager.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export declare class QyMessager {
|
|
2
|
-
|
|
2
|
+
started: any;
|
|
3
|
+
worker: any;
|
|
4
|
+
receiverQueueMap: any;
|
|
5
|
+
options: any;
|
|
6
|
+
constructor(parent: any, workerTypeFileName: any, initArgMap: any, options: any, callOpNameList?: any[], castOpNameList?: any[]);
|
|
3
7
|
start(...args: any[]): any;
|
|
4
8
|
stop(...args: any[]): any;
|
|
5
9
|
castWorker(opName: any, args: any): void;
|
package/src/QyMessager.js
CHANGED
|
@@ -28,6 +28,10 @@ import {
|
|
|
28
28
|
let k = e(import.meta.filename);
|
|
29
29
|
|
|
30
30
|
class r {
|
|
31
|
+
started;
|
|
32
|
+
worker;
|
|
33
|
+
receiverQueueMap;
|
|
34
|
+
options;
|
|
31
35
|
constructor(e, r, t, s, o = [], a = []) {
|
|
32
36
|
s = {
|
|
33
37
|
...i("QyMessager"),
|
|
@@ -66,7 +70,8 @@ class r {
|
|
|
66
70
|
ack: t,
|
|
67
71
|
result: s
|
|
68
72
|
} = e;
|
|
69
|
-
r ? (e
|
|
73
|
+
r ? "%o_" == r ? n.handleOutMsg(e) : "%e_" == r ? n.handleErrMsg(e) : (e = e.args || [],
|
|
74
|
+
(i.parent || i)[r](...e)) : o[t]?.shift().resolve(s);
|
|
70
75
|
}), a.on("exit", e => {
|
|
71
76
|
for (var r in a.removeAllListeners(), 0 != e ? n.warn(`Worker ${s} stopped with exitCode ` + e) : n.info(`Worker ${s} stopped.`),
|
|
72
77
|
o) for (var t = o[r]; !t.isEmpty; ) t.shift()?.resolve();
|
package/src/QyMod.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import
|
|
1
|
+
import d from "node:module";
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
logger as
|
|
4
|
+
logger as s
|
|
5
5
|
} from "./QyLogger.js";
|
|
6
6
|
|
|
7
|
-
function o(
|
|
8
|
-
if (
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
function o(e, r, l, o) {
|
|
8
|
+
if (l) try {
|
|
9
|
+
var t = e + "_" + r, g = `_${t}_qydb`, i = `_${t}_logger`, a = (globalThis[g] = o,
|
|
10
|
+
globalThis[i] = s, new d(r));
|
|
11
|
+
return a._compile(`(function(dataFolder, logger){${l}})(${g},${i});`, t + ".ts"),
|
|
12
|
+
delete globalThis[g], delete globalThis[i], a.exports;
|
|
12
13
|
} catch (o) {
|
|
13
|
-
|
|
14
|
+
s.error("requireFromModCode failed:", e, r, l, o);
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
|
package/src/QyOpRunner.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import EventEmitter from "node:events";
|
|
2
2
|
export declare class QyOpRunner extends EventEmitter {
|
|
3
|
-
|
|
3
|
+
running: boolean;
|
|
4
|
+
opQueue: any;
|
|
5
|
+
options: any;
|
|
6
|
+
runningOp: any;
|
|
7
|
+
constructor(options: any, callOpNameList?: any[], castOpNameList?: any[]);
|
|
4
8
|
get firstOp(): any;
|
|
5
9
|
get lastOp(): any;
|
|
6
10
|
finish(): any;
|
package/src/QyOpRunner.js
CHANGED
|
@@ -17,15 +17,15 @@ import {
|
|
|
17
17
|
} from "./QyQueue.js";
|
|
18
18
|
|
|
19
19
|
class e extends t {
|
|
20
|
+
running = !1;
|
|
21
|
+
opQueue;
|
|
22
|
+
options;
|
|
23
|
+
runningOp;
|
|
20
24
|
constructor(t, s = [], e = []) {
|
|
21
|
-
super(), t = {
|
|
25
|
+
super(), t = this.options = {
|
|
22
26
|
...i("QyOpRunner"),
|
|
23
27
|
...t
|
|
24
|
-
},
|
|
25
|
-
options: t,
|
|
26
|
-
running: !1,
|
|
27
|
-
opQueue: new r(t)
|
|
28
|
-
}), n(this, s, !0), n(this, e), n(this, [ "start", "stop" ], !0);
|
|
28
|
+
}, this.opQueue = new r(t), n(this, s, !0), n(this, e), n(this, [ "start", "stop" ], !0);
|
|
29
29
|
}
|
|
30
30
|
get firstOp() {
|
|
31
31
|
return this.opQueue.first;
|
|
@@ -70,7 +70,7 @@ class e extends t {
|
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
function n(i, t, r) {
|
|
73
|
+
function n(i, t, r = !1) {
|
|
74
74
|
for (let e of t) {
|
|
75
75
|
let s = "_op_" + e;
|
|
76
76
|
if (i[e] || (i[e] = r ? (...t) => i.pushAndRunWithPromise({
|
package/src/QyQueue.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
export declare class QyQueue {
|
|
2
|
+
options: any;
|
|
3
|
+
queue: any[];
|
|
4
|
+
firstIdx: number;
|
|
5
|
+
_waterMark: number;
|
|
2
6
|
constructor(options: any);
|
|
3
7
|
get first(): any;
|
|
4
8
|
get last(): any;
|
|
5
9
|
get isEmpty(): boolean;
|
|
6
|
-
get waterMark():
|
|
10
|
+
get waterMark(): number;
|
|
7
11
|
pop(): any;
|
|
8
12
|
reset(): void;
|
|
9
13
|
push(...args: any[]): void;
|
package/src/QyQueue.js
CHANGED
|
@@ -7,16 +7,15 @@ import {
|
|
|
7
7
|
} from "./QyDefaultOptions.js";
|
|
8
8
|
|
|
9
9
|
class s {
|
|
10
|
+
options;
|
|
11
|
+
queue = [];
|
|
12
|
+
firstIdx = 0;
|
|
13
|
+
_waterMark = 0;
|
|
10
14
|
constructor(t) {
|
|
11
|
-
|
|
15
|
+
this.options = {
|
|
12
16
|
...e("QyQueue"),
|
|
13
17
|
...t
|
|
14
|
-
}
|
|
15
|
-
options: t,
|
|
16
|
-
queue: [],
|
|
17
|
-
firstIdx: 0,
|
|
18
|
-
_waterMark: 0
|
|
19
|
-
});
|
|
18
|
+
};
|
|
20
19
|
}
|
|
21
20
|
get first() {
|
|
22
21
|
return this.queue[this.firstIdx];
|
package/src/QySaver.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
export declare class QySaver {
|
|
2
|
+
dataFolder: any;
|
|
3
|
+
options: any;
|
|
2
4
|
constructor(dataFolder: any, options: any);
|
|
3
5
|
setDataFolder(dataFolder: any): this;
|
|
4
6
|
processAfterLoad(data: any): any;
|
|
5
7
|
processBeforeSave(data: any): Buffer<any>;
|
|
8
|
+
removeFile(fileName: any): Promise<void>;
|
|
6
9
|
loadFromFile(fileName: any, defaultValue: any): Promise<any>;
|
|
7
10
|
saveToFile(data: any, fileName: any, override?: boolean): Promise<boolean>;
|
|
8
11
|
_saveTmpFileAndRename(contentBuffer: any, tmpFilePath: any, targetFilePath: any): Promise<boolean>;
|
package/src/QySaver.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import s, {
|
|
2
|
-
readFile as
|
|
2
|
+
readFile as a,
|
|
3
|
+
rm as e
|
|
3
4
|
} from "node:fs/promises";
|
|
4
5
|
|
|
5
6
|
import {
|
|
6
|
-
join as
|
|
7
|
+
join as f
|
|
7
8
|
} from "node:path";
|
|
8
9
|
|
|
9
10
|
import {
|
|
@@ -23,7 +24,9 @@ import {
|
|
|
23
24
|
getDefaultOptions as t
|
|
24
25
|
} from "./QyDefaultOptions.js";
|
|
25
26
|
|
|
26
|
-
class
|
|
27
|
+
class i {
|
|
28
|
+
dataFolder;
|
|
29
|
+
options;
|
|
27
30
|
constructor(e, r) {
|
|
28
31
|
Object.assign(this, {
|
|
29
32
|
dataFolder: e,
|
|
@@ -42,32 +45,40 @@ class e {
|
|
|
42
45
|
processBeforeSave(e) {
|
|
43
46
|
return r(e);
|
|
44
47
|
}
|
|
45
|
-
async
|
|
46
|
-
|
|
47
|
-
if (null != r && !await u(t)) return r;
|
|
48
|
+
async removeFile(r) {
|
|
49
|
+
r = f(this.dataFolder, r);
|
|
48
50
|
try {
|
|
49
|
-
|
|
50
|
-
return m.info(`Loading "${t}" succeeded. Total size:${o(a.length)}.`),
|
|
51
|
-
this.processAfterLoad(a, e);
|
|
51
|
+
await e(r);
|
|
52
52
|
} catch (e) {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
m.warn(`Deleting ${r} failed:`, e);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async loadFromFile(r, t) {
|
|
57
|
+
r = f(this.dataFolder, r);
|
|
58
|
+
if (null != t && !await u(r)) return t;
|
|
59
|
+
try {
|
|
60
|
+
var e = await a(r);
|
|
61
|
+
return m.info(`Loading "${r}" succeeded. Total size:${o(e.length)}.`),
|
|
62
|
+
this.processAfterLoad(e);
|
|
63
|
+
} catch (e) {
|
|
64
|
+
if (null != t) return t;
|
|
65
|
+
m.error(`Loading "${r}" failed:`, e);
|
|
55
66
|
}
|
|
56
67
|
}
|
|
57
68
|
async saveToFile(e, t, r = !1) {
|
|
58
69
|
var {
|
|
59
70
|
dataFolder: a,
|
|
60
71
|
options: i
|
|
61
|
-
} = this, s =
|
|
72
|
+
} = this, s = f(a, t);
|
|
62
73
|
if (!r && await u(s)) m.error(s + " already exists."); else {
|
|
63
74
|
var {
|
|
64
75
|
retryTimes: o,
|
|
65
76
|
retryIntervalFactor: n,
|
|
66
77
|
maxRetryInterval: l
|
|
67
|
-
} = i, d =
|
|
78
|
+
} = i, d = f(a, ".tmp", t), c = this.processBeforeSave(e);
|
|
68
79
|
let r;
|
|
69
80
|
for (let e = 0; e < o; ++e) {
|
|
70
|
-
if (await this._saveTmpFileAndRename(
|
|
81
|
+
if (await this._saveTmpFileAndRename(c, d, s)) return !0;
|
|
71
82
|
r = r ? Math.min(l, r * n) : 1, m.warn(`Retrying to create ${s} in ${r} seconds.`),
|
|
72
83
|
await g(r);
|
|
73
84
|
}
|
|
@@ -102,5 +113,5 @@ class e {
|
|
|
102
113
|
}
|
|
103
114
|
|
|
104
115
|
export {
|
|
105
|
-
|
|
116
|
+
i as QySaver
|
|
106
117
|
};
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { QyMessageWorker } from "./QyMessageWorker.ts";
|
|
2
2
|
export default class QySnapshotCompactor_Worker extends QyMessageWorker {
|
|
3
|
+
kvFolder: any;
|
|
4
|
+
snapshotFolder: any;
|
|
5
|
+
qySnapshots: any;
|
|
6
|
+
qyKVDataCleaner: any;
|
|
7
|
+
pMInfoMap: any;
|
|
8
|
+
vLInfoMap: any;
|
|
9
|
+
combinedSnapshotNumVersionList: any[];
|
|
3
10
|
constructor({ kvFolder, options }: {
|
|
4
11
|
kvFolder: any;
|
|
5
12
|
options: any;
|