datafolder 1.0.8 → 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.
Files changed (82) hide show
  1. package/README.md +4 -2
  2. package/SSD.md +60 -0
  3. package/index.js +1 -0
  4. package/package.json +1 -1
  5. package/sample.js +4 -4
  6. package/scripts/airbnb.js +1 -0
  7. package/scripts/airbnb2.js +1 -0
  8. package/scripts/convertBinFiles.js +1 -0
  9. package/scripts/express.js +2 -1
  10. package/scripts/fastify.js +3 -2
  11. package/scripts/flights.js +1 -0
  12. package/scripts/flights2.js +1 -0
  13. package/scripts/flights_queries.js +1 -0
  14. package/src/QyAcl.d.ts +3 -3
  15. package/src/QyAcl.js +7 -7
  16. package/src/QyAclSaver_Worker.d.ts +1 -0
  17. package/src/QyAclSaver_Worker.js +1 -0
  18. package/src/QyAclWriter.d.ts +2 -1
  19. package/src/QyAclWriter.js +7 -6
  20. package/src/QyBatch.d.ts +29 -22
  21. package/src/QyBatch.js +85 -72
  22. package/src/QyBinWriter.d.ts +9 -4
  23. package/src/QyBinWriter.js +83 -70
  24. package/src/QyCD.d.ts +19 -19
  25. package/src/QyCD.js +2 -2
  26. package/src/QyCache.d.ts +22 -23
  27. package/src/QyCache.js +47 -36
  28. package/src/QyCompressor_Worker.js +2 -2
  29. package/src/QyDB.d.ts +6 -9
  30. package/src/QyDB.js +1 -1
  31. package/src/QyFile.d.ts +2 -0
  32. package/src/QyFile.js +42 -40
  33. package/src/QyFileContentUtils.d.ts +1 -4
  34. package/src/QyFileLogger.d.ts +4 -0
  35. package/src/QyFileLogger.js +30 -26
  36. package/src/QyIndex.d.ts +2 -2
  37. package/src/QyIndex.js +84 -80
  38. package/src/QyIndexPropTree.d.ts +4 -0
  39. package/src/QyIndexPropTree.js +19 -10
  40. package/src/QyIntersectNode.d.ts +1 -0
  41. package/src/QyIntersectNode.js +1 -0
  42. package/src/QyJsonSaver.d.ts +2 -2
  43. package/src/QyJsonSaver.js +4 -4
  44. package/src/QyKVData.d.ts +18 -1
  45. package/src/QyKVData.js +98 -78
  46. package/src/QyKVDataCleaner_Worker.d.ts +7 -1
  47. package/src/QyKVDataCleaner_Worker.js +69 -55
  48. package/src/QyKVDataLoader.d.ts +10 -2
  49. package/src/QyKVDataLoader.js +27 -21
  50. package/src/QyKVDataSaver_Worker.d.ts +10 -0
  51. package/src/QyKVDataSaver_Worker.js +23 -9
  52. package/src/QyLogFileSaver_Worker.d.ts +1 -0
  53. package/src/QyLogFileSaver_Worker.js +7 -6
  54. package/src/QyLogger.d.ts +20 -10
  55. package/src/QyLogger.js +110 -67
  56. package/src/QyMessageWorker.d.ts +1 -1
  57. package/src/QyMessageWorker.js +5 -5
  58. package/src/QyMessager.d.ts +5 -1
  59. package/src/QyMessager.js +6 -1
  60. package/src/QyMod.js +9 -8
  61. package/src/QyOpRunner.d.ts +5 -1
  62. package/src/QyOpRunner.js +7 -7
  63. package/src/QyQueue.d.ts +5 -1
  64. package/src/QyQueue.js +6 -7
  65. package/src/QySaver.d.ts +3 -0
  66. package/src/QySaver.js +26 -15
  67. package/src/QySnapshotCompactor_Worker.d.ts +7 -0
  68. package/src/QySnapshotCompactor_Worker.js +37 -26
  69. package/src/QySnapshotSaver_Worker.d.ts +8 -1
  70. package/src/QySnapshotSaver_Worker.js +21 -14
  71. package/src/QySnapshots.d.ts +19 -7
  72. package/src/QySnapshots.js +195 -172
  73. package/src/QyTrigger.d.ts +5 -1
  74. package/src/QyTrigger.js +44 -34
  75. package/src/QyUnionNode.d.ts +10 -1
  76. package/src/QyUnionNode.js +34 -36
  77. package/src/QyUtils.d.ts +2 -2
  78. package/src/QyUtils.js +116 -111
  79. package/src/simulate.js +34 -31
  80. package/src/simulate2.js +49 -46
  81. package/src/soc_pokec.js +17 -11
  82. package/static/codemirror.bundle/editor.bundle.js +31 -18
@@ -19,10 +19,24 @@ import {
19
19
  } from "./QySnapshotSaver.js";
20
20
 
21
21
  import {
22
- delCmdKey as u
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(m(this)), n.start(a, t, e);
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
- logger.log(`Saving snapshot ${e} at stop.`), t.saveSnapshot(e)), t.stop();
75
+ r.log(`Saving snapshot ${e} at stop.`), t.saveSnapshot(e)), t.stop();
62
76
  }
63
77
  callSave(a, s, t) {
64
- return r(this, a, s, t, !0);
78
+ return h(this, a, s, t, !0);
65
79
  }
66
80
  castSave(a, s, t) {
67
- return r(this, a, s, t);
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 r(a, s, t, e, o) {
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) u(l, c[a]);
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(m(a)), r.saveSnapshot(p), Object.assign(a, {
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 m(a) {
114
+ function d(a) {
101
115
  return t(a.aclFolder, a.currentAclNum + "_acl.txt");
102
116
  }
@@ -1,5 +1,6 @@
1
1
  import { QyMessageWorker } from "./QyMessageWorker.ts";
2
2
  export default class QyLogFileSaver_Worker extends QyMessageWorker {
3
+ qyBinWriter: any;
3
4
  constructor(options: any);
4
5
  _op_start(logFilePath: any): Promise<void>;
5
6
  _op_stop(): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import {
2
- getDefaultOptions as s
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 r
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
- ...s("QyLogFileSaver_Worker"),
17
+ ...r("QyLogFileSaver_Worker"),
17
18
  ...t
18
19
  }), Object.assign(this, {
19
- qyBinWriter: new r(t)
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, s) {
32
- this.qyBinWriter.save(t, s);
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
- export declare const logger: {
2
- currentLogLevel: number;
3
- info: (...args: any[]) => void;
4
- log: (...args: any[]) => void;
5
- debug: (...args: any[]) => void;
6
- warn: (...args: any[]) => void;
7
- error: (...args: any[]) => void;
8
- };
9
- export declare function closeFileConsole(): void;
10
- export declare function setFileConsoleDateDirPath(dateDirPath: any, clearLogAtStart: any): void;
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 n from "node:path";
3
+ import r from "node:path";
4
4
 
5
5
  import {
6
- Console as t
6
+ Console as i
7
7
  } from "node:console";
8
8
 
9
9
  import {
10
- isMainThread as e,
11
- threadId as r
10
+ parentPort as n,
11
+ isMainThread as l,
12
+ threadId as e
12
13
  } from "node:worker_threads";
13
14
 
14
- let i = e ? "" : `W${r}:`, u = {
15
- Info: 0,
16
- Debug: 1,
17
- Warn: 2,
18
- Error: 3,
19
- None: 4
20
- }, c = {
21
- verbose: u.Info,
22
- info: u.Info,
23
- log: u.Debug,
24
- debug: u.Debug,
25
- warn: u.Warn,
26
- error: u.Error,
27
- none: u.None
28
- }, s = Object.fromEntries(Object.entries(c).map(([ e, r ]) => [ r, e ])), l = {
29
- currentLogLevel: u.Debug,
30
- info: function(...e) {
31
- l.currentLogLevel == u.Info && b("info", e);
32
- },
33
- log: function(...e) {
34
- l.currentLogLevel <= u.Debug && b("log", e);
35
- },
36
- debug: function(...e) {
37
- l.currentLogLevel <= u.Debug && b("debug", e);
38
- },
39
- warn: function(...e) {
40
- l.currentLogLevel <= u.Warn && b("warn", e);
41
- },
42
- error: function(...e) {
43
- l.currentLogLevel <= u.Error && b("error", e);
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
- }, a, g, f;
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 d() {
48
- a = void 0, g && (g.close(), g = void 0), f && (f.close(), f = void 0);
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 L(e, r) {
52
- d();
53
- r = {
54
- flags: r ? "w" : "a",
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 b(e, r) {
70
- var o = new Error().stack?.split("\n"), o = o && /([^/\\()]+)\)?$/.exec(o[3] ?? ""), o = (o && o[1]) ?? "", o = `${new Date().toISOString()} ${i}${o}:${e}:`;
71
- console[e](o, ...r), a && a[e](o, ...r);
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
- Object.defineProperty(l, "level", {
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
- l as logger,
85
- d as closeFileConsole,
86
- L as setFileConsoleDateDirPath
129
+ f as logger
87
130
  };
@@ -1,5 +1,5 @@
1
1
  import { QyOpRunner } from "./QyOpRunner.ts";
2
2
  export declare class QyMessageWorker extends QyOpRunner {
3
- constructor(options: any, callOpNameList: any, castOpNameList: any);
3
+ constructor(options: any, callOpNameList?: any[], castOpNameList?: any[]);
4
4
  castParent(opName: any, ...args: any[]): void;
5
5
  }
@@ -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.on("message", async s => {
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.postMessage({
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.postMessage({
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.postMessage({
45
+ o?.postMessage({
46
46
  opName: s,
47
47
  args: e,
48
48
  _cast: !0
@@ -1,5 +1,9 @@
1
1
  export declare class QyMessager {
2
- constructor(parent: any, workerTypeFileName: any, initArgMap: any, options: any, callOpNameList?: never[], castOpNameList?: never[]);
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 = e.args || [], (i.parent || i)[r](...e)) : o[t]?.shift().resolve(s);
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 a from "node:module";
1
+ import d from "node:module";
2
2
 
3
3
  import {
4
- logger as m
4
+ logger as s
5
5
  } from "./QyLogger.js";
6
6
 
7
- function o(r, e, t, o) {
8
- if (t) try {
9
- var i = r + "_" + e, l = `_${i}_qydb`, d = (globalThis[l] = o, new a(e));
10
- return d._compile(`(function(dataFolder){${t}})(${l});`, i + ".ts"), delete globalThis[l],
11
- d.exports;
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
- m.error("requireFromModCode failed:", r, e, t, o);
14
+ s.error("requireFromModCode failed:", e, r, l, o);
14
15
  }
15
16
  }
16
17
 
@@ -1,6 +1,10 @@
1
1
  import EventEmitter from "node:events";
2
2
  export declare class QyOpRunner extends EventEmitter {
3
- constructor(options: any, callOpNameList?: never[], castOpNameList?: never[]);
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
- }, Object.assign(this, {
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(): any;
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
- t = {
15
+ this.options = {
12
16
  ...e("QyQueue"),
13
17
  ...t
14
- }, Object.assign(this, {
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 i
2
+ readFile as a,
3
+ rm as e
3
4
  } from "node:fs/promises";
4
5
 
5
6
  import {
6
- join as c
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 e {
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 loadFromFile(e, r) {
46
- var t = c(this.dataFolder, e);
47
- if (null != r && !await u(t)) return r;
48
+ async removeFile(r) {
49
+ r = f(this.dataFolder, r);
48
50
  try {
49
- var a = await i(t);
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
- if (null != r) return r;
54
- m.error(`Loading "${t}" failed:`, e);
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 = c(a, t);
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 = c(a, ".tmp", t), f = this.processBeforeSave(e, t);
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(f, d, s)) return !0;
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
- e as QySaver
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;