datafolder 1.0.14 → 1.0.15

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 CHANGED
@@ -4,6 +4,8 @@ datafolder is a lightning fluid JSON database for high speed SSDs, featuring an
4
4
 
5
5
  ### Changelog
6
6
 
7
+ 1.0.15 Use [Workers](https://nodejs.org/docs/latest/api/worker_threads.html) to implement snapshot compactor, expire service, outdated data cleaner etc.
8
+
7
9
  1.0.14 Expire supports specifying milliseconds.
8
10
 
9
11
  1.0.13 Added expire support to delete a dir in a specific future time.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datafolder",
3
- "version": "1.0.14",
3
+ "version": "1.0.15",
4
4
  "author": {
5
5
  "name": "lysh",
6
6
  "email": "datafolderdev@outlook.com"
package/src/QyAcl.d.ts CHANGED
@@ -4,20 +4,20 @@ export declare const CmdNames: {
4
4
  R: number;
5
5
  D: number;
6
6
  };
7
- export declare function delCmdKey(cmdArgAsListChanges: any, key: string): void;
8
- export declare function applyAclChange(aclKeyValueMap: any, cmdArgAsListChanges: any): void;
9
- export declare function iterCmdKeys(cmdArgAsListChanges: any, fun: any): void;
7
+ export declare function applyAclChange(aclKeyValueMap: any, cmdArgAsListObj: any): void;
8
+ export declare function iterCmdKeys(cmdArgAsListObj: any, fun: any): void;
10
9
  export declare class QyAclCmdGenerator {
11
10
  cmdArgAsMapChanges: any[];
12
11
  cmdCount: number;
13
12
  batchSize: number;
14
13
  constructor();
15
14
  pushCmd(cmdName: number, cmdHashKey: string, cmdArg?: any): void;
16
- pushCmdArgAsListObj(cmdArgAsListChanges: any): this;
15
+ pushCmdArgAsListObj(cmdArgAsListObj: any): this;
17
16
  takeCmdArgAsListObj(): any[];
18
17
  toAclBuffer(changeId: any): Buffer<ArrayBuffer> | undefined;
19
18
  }
20
19
  export declare function readAclFile(aclFilePath: any, autoRepairAclFile?: boolean, currentChangeId?: number): Promise<any[]>;
21
20
  export declare function numsToBuffer(nums: any): Buffer<ArrayBuffer>;
22
21
  export declare function bufferToNums(buffer: any, offset: any, nums: any): any;
22
+ export declare function toAclBuffer(changeId: any, batchSize: any, cmdArgAsListObjStr: any): Buffer<ArrayBuffer>;
23
23
  export declare function readAclBuffer(aclFilePath: any, contentBuffer: any, autoRepairAclFile: any, currentChangeId: any): Promise<any[]>;
package/src/QyAcl.js CHANGED
@@ -1,4 +1,4 @@
1
- import l from "node:fs/promises";
1
+ import h from "node:fs/promises";
2
2
 
3
3
  import {
4
4
  mergeContent as g,
@@ -7,11 +7,12 @@ import {
7
7
  } from "./QyFileContentUtils.js";
8
8
 
9
9
  import {
10
- isEmptyObj as m
10
+ isEmptyObj as m,
11
+ toBuffer as n
11
12
  } from "./QyUtils.js";
12
13
 
13
14
  import {
14
- logger as u
15
+ logger as l
15
16
  } from "./QyLogger.js";
16
17
 
17
18
  let f = {
@@ -21,74 +22,68 @@ let f = {
21
22
  D: 3
22
23
  };
23
24
 
24
- function r(r, e) {
25
- var [ r, t, a, n ] = r;
26
- n && delete n[e], e.startsWith("c") ? r && delete r[e] : (t && delete t[e],
27
- a && delete a[e]);
28
- }
29
-
30
- function e(r, e) {
31
- var t, a, n, s, [ i, o, f, e ] = e;
32
- for (t in e) null != r[t] && (r[t] = void 0);
25
+ function r(r, t) {
26
+ var e, a, n, s, [ i, o, f, t ] = t;
27
+ for (e in t) null != r[e] && (r[e] = void 0);
33
28
  for (a in o) {
34
- var c, h = r[a] || (r[a] = {});
35
- for (c of o[a]) h[c] = 1;
29
+ var c, u = r[a] || (r[a] = {});
30
+ for (c of o[a]) u[c] = 1;
36
31
  }
37
32
  for (n in f) {
38
- var l = r[n];
39
- if (l) {
40
- var u = f[n];
41
- if (u) {
42
- for (var d of u) delete l[d];
43
- m(l) && (r[n] = void 0);
33
+ var h = r[n];
34
+ if (h) {
35
+ var l = f[n];
36
+ if (l) {
37
+ for (var d of l) delete h[d];
38
+ m(h) && (r[n] = void 0);
44
39
  }
45
40
  }
46
41
  }
47
42
  for (s in i) r[s] = g(r[s], i[s]);
48
43
  }
49
44
 
50
- function t(r, e) {
51
- for (var t of r) for (var a in t) e(a);
45
+ function t(r, t) {
46
+ for (var e of r) for (var a in e) t(a);
52
47
  }
53
48
 
54
- class n {
49
+ class e {
55
50
  cmdArgAsMapChanges = [];
56
51
  cmdCount = 0;
57
52
  batchSize = 0;
58
53
  constructor() {}
59
- pushCmd(r, e, t = void 0) {
54
+ pushCmd(r, t, e = void 0) {
60
55
  switch (++this.cmdCount, r) {
61
56
  case f.A:
62
- i(this, [ f.A, e, t ]), o(this, [ f.R, e, t ]);
57
+ i(this, [ f.A, t, e ]), o(this, [ f.R, t, e ]);
63
58
  break;
64
59
 
65
60
  case f.R:
66
- i(this, [ f.R, e, t ]), o(this, [ f.A, e, t ]);
61
+ i(this, [ f.R, t, e ]), o(this, [ f.A, t, e ]);
67
62
  break;
68
63
 
69
64
  case f.D:
70
- if (i(this, [ f.D, e ]), e.startsWith("c")) o(this, [ f.M, e ]); else for (var a of [ f.A, f.R ]) o(this, [ a, e ]);
65
+ if (i(this, [ f.D, t ]), t.startsWith("c")) o(this, [ f.M, t ]); else for (var a of [ f.A, f.R ]) o(this, [ a, t ]);
71
66
  break;
72
67
 
73
68
  case f.M:
74
69
  {
75
70
  var n = this.cmdArgAsMapChanges;
76
71
  let [ r ] = n;
77
- n = (r = null == r ? n[f.M] = {} : r)[e];
78
- r[e] = null != n ? s(n, t) : t;
72
+ n = (r = null == r ? n[f.M] = {} : r)[t];
73
+ r[t] = null != n ? s(n, e) : e;
79
74
  break;
80
75
  }
81
76
 
82
77
  default:
83
- u.error(`unsupported cmdName:${r}, called with ${e} ` + t), --this.cmdCount;
78
+ l.error(`unsupported cmdName:${r}, called with ${t} ` + e), --this.cmdCount;
84
79
  }
85
80
  }
86
81
  pushCmdArgAsListObj(r) {
87
82
  if (r) {
88
- for (var e in ++this.batchSize, r[f.D]) this.pushCmd(f.D, e);
89
- for (var t of [ f.A, f.R ]) {
90
- var a, n = r[t];
91
- for (a in n) for (var s of n[a]) this.pushCmd(t, a, s);
83
+ for (var t in ++this.batchSize, r[f.D]) this.pushCmd(f.D, t);
84
+ for (var e of [ f.A, f.R ]) {
85
+ var a, n = r[e];
86
+ for (a in n) for (var s of n[a]) this.pushCmd(e, a, s);
92
87
  }
93
88
  var i, [ o ] = r;
94
89
  for (i in o) this.pushCmd(f.M, i, o[i]);
@@ -96,123 +91,127 @@ class n {
96
91
  return this;
97
92
  }
98
93
  takeCmdArgAsListObj() {
99
- var r, e = this.cmdArgAsMapChanges;
94
+ var r, t = this.cmdArgAsMapChanges;
100
95
  Object.assign(this, {
101
96
  cmdArgAsMapChanges: [],
102
97
  cmdCount: 0,
103
98
  batchSize: 0
104
99
  });
105
100
  for (r of [ f.A, f.R ]) {
106
- var t, a = e[r];
107
- for (t in a) {
108
- var n = Object.keys(a[t]);
109
- 0 < n.length ? a[t] = n : delete a[t];
101
+ var e, a = t[r];
102
+ for (e in a) {
103
+ var n = Object.keys(a[e]);
104
+ 0 < n.length ? a[e] = n : delete a[e];
110
105
  }
111
- m(a) && delete e[r];
106
+ m(a) && delete t[r];
112
107
  }
113
- var s = e[f.D], s = (s && m(s) && delete e[f.D], e[f.M]);
114
- return s && m(s) && delete e[f.M], e;
108
+ var s = t[f.D], s = (s && m(s) && delete t[f.D], t[f.M]);
109
+ return s && m(s) && delete t[f.M], t;
115
110
  }
116
111
  toAclBuffer(r) {
117
- var e, t = this.batchSize;
118
- if (0 < t) return r = r, t = t, e = this.takeCmdArgAsListObj(), e = Buffer.from(JSON.stringify(e)),
119
- Buffer.concat([ h([ r, t, e.length ]), e ]);
112
+ var t = this.batchSize;
113
+ if (0 < t) return A(r, t, JSON.stringify(this.takeCmdArgAsListObj()));
120
114
  }
121
115
  }
122
116
 
123
- function i(r, e, t = 1) {
124
- a(r.cmdArgAsMapChanges, e, t);
117
+ function i(r, t, e = 1) {
118
+ a(r.cmdArgAsMapChanges, t, e);
125
119
  }
126
120
 
127
- function o(r, e) {
128
- let t = r.cmdArgAsMapChanges;
129
- if (t && e && !(e.length <= 1)) {
130
- for (let r = 0; r < e.length - 1; ++r) if (null == (t = t[e[r]])) return;
131
- delete t[e.at(-1)];
121
+ function o(r, t) {
122
+ let e = r.cmdArgAsMapChanges;
123
+ if (e && t && !(t.length <= 1)) {
124
+ for (let r = 0; r < t.length - 1; ++r) if (null == (e = e[t[r]])) return;
125
+ delete e[t.at(-1)];
132
126
  }
133
127
  }
134
128
 
135
- async function c(e, r = !1, t = 0) {
129
+ async function c(t, r = !1, e = 0) {
136
130
  try {
137
- return await A(e, await l.readFile(e), r, t);
131
+ return await p(t, await h.readFile(t), r, e);
138
132
  } catch (r) {
139
- throw u.error(`Reading ${e} failed:`, r), r;
133
+ throw l.error(`Reading ${t} failed:`, r), r;
140
134
  }
141
135
  }
142
136
 
143
137
  let v = [ 1, 2, 4, 8 ];
144
138
 
145
- function h(e) {
146
- var t = e.length, a = new Array(t), n = new Array(t);
147
- let s = t << 6, i = 1;
148
- for (let r = 0; r < t; ++r) {
149
- var o = a[r] = (o = e[r]) <= 255 ? 0 : o <= 65535 ? 1 : o <= 4294967295 ? 2 : 3, o = (s |= o << (r << 1),
139
+ function u(t) {
140
+ var e = t.length, a = new Array(e), n = new Array(e);
141
+ let s = e << 6, i = 1;
142
+ for (let r = 0; r < e; ++r) {
143
+ var o = a[r] = (o = t[r]) <= 255 ? 0 : o <= 65535 ? 1 : o <= 4294967295 ? 2 : 3, o = (s |= o << (r << 1),
150
144
  n[r] = v[o]);
151
145
  i += o;
152
146
  }
153
147
  var f = Buffer.allocUnsafe(i);
154
148
  f.writeUInt8(s);
155
149
  let c = 1;
156
- for (let r = 0; r < t; ++r) {
157
- d = u = l = h = void 0;
158
- var [ h, l, u, d = 0 ] = [ f, e[r], n[r], c ];
159
- switch (u) {
150
+ for (let r = 0; r < e; ++r) {
151
+ d = l = h = u = void 0;
152
+ var [ u, h, l, d = 0 ] = [ f, t[r], n[r], c ];
153
+ switch (l) {
160
154
  case 1:
161
- h.writeUInt8(l, d);
155
+ u.writeUInt8(h, d);
162
156
  break;
163
157
 
164
158
  case 2:
165
- h.writeUInt16BE(l, d);
159
+ u.writeUInt16BE(h, d);
166
160
  break;
167
161
 
168
162
  case 4:
169
- h.writeUInt32BE(l, d);
163
+ u.writeUInt32BE(h, d);
170
164
  break;
171
165
 
172
166
  default:
173
- h.writeBigUInt64BE(BigInt(l), d);
167
+ u.writeBigUInt64BE(BigInt(h), d);
174
168
  }
175
169
  c += n[r];
176
170
  }
177
171
  return f;
178
172
  }
179
173
 
180
- function d(e, t, a) {
181
- var n = e.readUInt8(t), s = (++t, n >> 6 & 3);
174
+ function d(t, e, a) {
175
+ var n = t.readUInt8(e), s = (++e, n >> 6 & 3);
182
176
  for (let r = 0; r < s; ++r) {
183
177
  var i = v[n >> (r << 1) & 3];
184
- a[r] = ((r, e, t = 0) => {
185
- switch (e) {
178
+ a[r] = ((r, t, e = 0) => {
179
+ switch (t) {
186
180
  case 1:
187
- return r.readUInt8(t);
181
+ return r.readUInt8(e);
188
182
 
189
183
  case 2:
190
- return r.readUInt16BE(t);
184
+ return r.readUInt16BE(e);
191
185
 
192
186
  case 4:
193
- return r.readUInt32BE(t);
187
+ return r.readUInt32BE(e);
194
188
 
195
189
  default:
196
- return Number(r.readBigUInt64BE(t));
190
+ return Number(r.readBigUInt64BE(e));
197
191
  }
198
- })(e, i, t), t += i;
192
+ })(t, i, e), e += i;
199
193
  }
200
- return t;
194
+ return e;
195
+ }
196
+
197
+ function A(r, t, e) {
198
+ e = n(e);
199
+ return Buffer.concat([ u([ r, t, e.length ]), e ]);
201
200
  }
202
201
 
203
- async function A(t, r, a, n) {
202
+ async function p(e, r, a, n) {
204
203
  var s = [];
205
- for (let e = 0; e < r.length; ) {
206
- var i = [], o = d(r, e, i), [ i, f, c ] = i;
207
- if (i <= n) u.warn(`changeId ${i} <= currentChangeId ${n} at ${t}:${e}. Ignored.`),
208
- e = o + c; else {
209
- n + f != i && u.warn(`currentChangeId ${n} + batchSize ${f} != changeId ` + i);
204
+ for (let t = 0; t < r.length; ) {
205
+ var i = [], o = d(r, t, i), [ i, f, c ] = i;
206
+ if (i <= n) l.warn(`changeId ${i} <= currentChangeId ${n} at ${e}:${t}. Ignored.`),
207
+ t = o + c; else {
208
+ n + f != i && l.warn(`currentChangeId ${n} + batchSize ${f} != changeId ` + i);
210
209
  try {
211
- var h = JSON.parse(r.subarray(o, o + c));
212
- s.push([ i, h ]), n = i, e = o + c;
210
+ var u = JSON.parse(r.subarray(o, o + c));
211
+ s.push([ i, u ]), n = i, t = o + c;
213
212
  } catch (r) {
214
- if (u.error(`Parse ${t} failed at ${e}:`, r), a) return u.warn(`Autorepair by truncating ${t} to ` + e),
215
- null == (f = await l.truncate(t, e)) ? u.log("truncate success") : u.error("truncate failed:", f),
213
+ if (l.error(`Parse ${e} failed at ${t}:`, r), a) return l.warn(`Autorepair by truncating ${e} to ` + t),
214
+ null == (f = await h.truncate(e, t)) ? l.log("truncate success") : l.error("truncate failed:", f),
216
215
  s;
217
216
  throw r;
218
217
  }
@@ -223,12 +222,12 @@ async function A(t, r, a, n) {
223
222
 
224
223
  export {
225
224
  f as CmdNames,
226
- r as delCmdKey,
227
- e as applyAclChange,
225
+ r as applyAclChange,
228
226
  t as iterCmdKeys,
229
- n as QyAclCmdGenerator,
227
+ e as QyAclCmdGenerator,
230
228
  c as readAclFile,
231
- h as numsToBuffer,
229
+ u as numsToBuffer,
232
230
  d as bufferToNums,
233
- A as readAclBuffer
231
+ A as toAclBuffer,
232
+ p as readAclBuffer
234
233
  };
@@ -5,6 +5,6 @@ export default class QyAclSaver_Worker extends QyMessageWorker {
5
5
  _op_start(aclFilePath: any): Promise<void>;
6
6
  _op_stop(): Promise<void>;
7
7
  switch(aclFilePath: any): void;
8
- callSave(changeId: any, cmdArgAsListChanges: any): Promise<void>;
9
- castSave(changeId: any, cmdArgAsListChanges: any): void;
8
+ callSave(changeId: any, cmdArgAsListObjStr: any): Promise<void>;
9
+ castSave(changeId: any, cmdArgAsListObjStr: any): void;
10
10
  }
@@ -1,6 +1,7 @@
1
1
  import { QyBinWriter } from "./QyBinWriter.ts";
2
+ import { QyAclCmdGenerator } from "./QyAcl.ts";
2
3
  export declare class QyAclWriter extends QyBinWriter {
3
- qyAclCmdGenerator: any;
4
+ qyAclCmdGenerator: QyAclCmdGenerator;
4
5
  constructor(options: any, filePath?: any);
5
- getBinData(dataQueue: any, changeId: any): any;
6
+ getBinData(dataQueue: any, changeId: any): Buffer<ArrayBuffer> | undefined;
6
7
  }
@@ -3,7 +3,8 @@ import {
3
3
  } from "./QyBinWriter.js";
4
4
 
5
5
  import {
6
- QyAclCmdGenerator as e
6
+ QyAclCmdGenerator as e,
7
+ toAclBuffer as f
7
8
  } from "./QyAcl.js";
8
9
 
9
10
  import {
@@ -18,10 +19,18 @@ class t extends r {
18
19
  ...r
19
20
  }, t), this.qyAclCmdGenerator = new e();
20
21
  }
21
- getBinData(r, t) {
22
- var e, o = this.qyAclCmdGenerator;
23
- for (e of r) o.pushCmdArgAsListObj(e);
24
- return o.toAclBuffer(t);
22
+ getBinData(t, r) {
23
+ var e, {
24
+ qyAclCmdGenerator: o,
25
+ options: s
26
+ } = this, a = t.length;
27
+ if (a < s.minBatchSize) {
28
+ var i = new Array(a), n = r - a + 1;
29
+ for (let r = 0; r < a; ++r) i[r] = f(n + r, 1, t[r]);
30
+ return Buffer.concat(i);
31
+ }
32
+ for (e of t) o.pushCmdArgAsListObj(JSON.parse(e));
33
+ return o.toAclBuffer(r);
25
34
  }
26
35
  }
27
36
 
package/src/QyBatch.js CHANGED
@@ -46,8 +46,6 @@ import {
46
46
  logger as _
47
47
  } from "./QyLogger.js";
48
48
 
49
- import "node:process";
50
-
51
49
  let D = Array.isArray, x = e.$del, O = t.IndexPropPathsFileName, F = {
52
50
  none: 0,
53
51
  basic: 1,
@@ -23,8 +23,6 @@ import {
23
23
  logger as g
24
24
  } from "./QyLogger.js";
25
25
 
26
- var {} = Array;
27
-
28
26
  class e extends t {
29
27
  _filePath;
30
28
  _totalSavedSize = 0;
package/src/QyCD.d.ts CHANGED
@@ -17,7 +17,7 @@ export declare class QyCD {
17
17
  get triggerFileList(): any;
18
18
  rpcFile(rpcName: any): any;
19
19
  get rpcFileList(): any;
20
- view(namePath: any, spec?: undefined, parentDir?: any): any;
20
+ view(namePath: any, spec?: any, parentDir?: any): any;
21
21
  viewP(namePath: any, spec: any, parentDir?: any): any;
22
22
  queryFiles(indexHostDirNamePath: any, queryObj: any, limit?: number | undefined, cursor?: number | undefined, parentDir?: any): any;
23
23
  queryFilesMulti(indexHostDirNamePathMulti: any, limit: any, cursor: any, parentDir?: any): any;
package/src/QyCache.d.ts CHANGED
@@ -21,7 +21,7 @@ export declare class QyCache extends EventEmitter {
21
21
  stop(): Promise<this>;
22
22
  increaseChangeId(): any;
23
23
  decreaseChangeId(): void;
24
- save(changeId: any, cmdArgAsListChanges: any, logText: any, syncList: any, needPromise: any): any;
24
+ save(changeId: any, cmdArgAsListObj: any, logText: any, syncList: any, needPromise: any): any;
25
25
  getFile(namePath: QyFile | string | string[], parentDir?: any): QyFile | undefined;
26
26
  getDir(namePath: QyDir | string | string[], parentDir?: any): QyDir | undefined;
27
27
  getOrCreateFile(namePath: QyFile | string | string[], parentDir?: any): QyFile;
package/src/QyCache.js CHANGED
@@ -50,7 +50,7 @@ import {
50
50
  } from "./QyUnionNode.js";
51
51
 
52
52
  import {
53
- QyKVDataLoader as Q
53
+ QyKVDataLoader as O
54
54
  } from "./QyKVDataLoader.js";
55
55
 
56
56
  import {
@@ -58,7 +58,7 @@ import {
58
58
  } from "./QyMod.js";
59
59
 
60
60
  import {
61
- logger as O
61
+ logger as Q
62
62
  } from "./QyLogger.js";
63
63
 
64
64
  let {
@@ -89,24 +89,26 @@ class o extends r {
89
89
  super(), e = {
90
90
  ...h("QyCache"),
91
91
  ...e
92
- };
93
- var i = v(r, "qykv"), o = m.at(-1), a = F.at(-1), s = new p("", !0, void 0, this), n = new p(D, !0, s), g = new p(o, !0, n), l = new p(a, !0, n);
94
- s._subdirMap = {
95
- [D]: n
96
- }, n._subdirMap = {
97
- [o]: g,
98
- [a]: l
99
- }, Object.assign(this, {
92
+ }, o = new p("", !0, void 0, i = this), a = m.at(-1), s = F.at(-1), l = new p(D, !0, o),
93
+ n = new p(a, !0, l), g = new p(s, !0, l), o._subdirMap = {
94
+ [D]: l
95
+ }, l._subdirMap = {
96
+ [a]: n,
97
+ [s]: g
98
+ }, Object.assign(i, {
99
+ rootDir: o,
100
+ expireRootDir: n,
101
+ indexRootDir: g
102
+ });
103
+ var i, o, a, s, n, g, l = v(r, "qykv");
104
+ Object.assign(this, {
100
105
  rootFolder: r,
101
106
  options: e,
102
107
  qyDB: t,
103
- kvFolder: i,
104
- rootDir: s,
105
- expireRootDir: g,
106
- indexRootDir: l,
108
+ kvFolder: l,
107
109
  rpcFolder: v(r, "rpc"),
108
110
  exclusiveFilePath: v(r, ".opened"),
109
- qyKVData: new d(i, e, this),
111
+ qyKVData: new d(l, e, this),
110
112
  qyFileLogger: new u(v(r, "qylog"), e)
111
113
  });
112
114
  }
@@ -120,7 +122,7 @@ class o extends r {
120
122
  exclusiveFilePath: a,
121
123
  rootDir: s
122
124
  } = this;
123
- O.log(`Starting at ${r}...`);
125
+ Q.log(`Starting at ${r}...`);
124
126
  try {
125
127
  await R(e), o.start();
126
128
  var [ {
@@ -128,7 +130,7 @@ class o extends r {
128
130
  loadedMaxAclNum: g,
129
131
  qySnapshots: l,
130
132
  aclKeyValueMap: p
131
- } ] = await Promise.all([ ((r, e) => (r = new Q(r, e)).load())(e, t), C(a) ]);
133
+ } ] = await Promise.all([ ((r, e) => (r = new O(r, e)).load())(e, t), C(a) ]);
132
134
  i.start(n, g, l, p);
133
135
  } catch (r) {
134
136
  throw o.stop(), r;
@@ -158,17 +160,17 @@ class o extends r {
158
160
  } = m;
159
161
  x(y) && F.insertRpc(m, y);
160
162
  }
161
- return t.dumpStructureAtStart && await q(v(r, "qystruct"), s), O.log("Started."),
163
+ return t.dumpStructureAtStart && await q(v(r, "qystruct"), s), Q.log("Started."),
162
164
  this;
163
165
  }
164
166
  async stop() {
165
- O.log("Stopping...");
167
+ Q.log("Stopping...");
166
168
  var {
167
169
  qyKVData: r,
168
170
  qyFileLogger: e,
169
171
  exclusiveFilePath: t
170
172
  } = this;
171
- return await r.stop(), O.log("QyFileLogger stopped."), await e.stop(), i(t),
173
+ return await r.stop(), Q.log("QyFileLogger stopped."), await e.stop(), i(t),
172
174
  Object.assign(this, {
173
175
  rootDir: void 0,
174
176
  indexRootDir: void 0,
@@ -179,7 +181,7 @@ class o extends r {
179
181
  rpcFunMap: void 0,
180
182
  qyDB: void 0,
181
183
  qyFileLogger: void 0
182
- }), O.log("Stopped."), this;
184
+ }), Q.log("Stopped."), this;
183
185
  }
184
186
  increaseChangeId() {
185
187
  return this.qyKVData.increaseChangeId();
@@ -271,11 +273,11 @@ class o extends r {
271
273
  }
272
274
  async callRpc(e, r, t) {
273
275
  var i, o = this.rpcFunMap[e];
274
- if (!o) return O.warn(i = `RPC ${e} not implemented.`), new Error(i);
276
+ if (!o) return Q.warn(i = `RPC ${e} not implemented.`), new Error(i);
275
277
  try {
276
278
  return await o(r, t);
277
279
  } catch (r) {
278
- return O.error(`Calling RPC ${e} failed:`, r), r;
280
+ return Q.error(`Calling RPC ${e} failed:`, r), r;
279
281
  }
280
282
  }
281
283
  monitorItemExpire(r, e) {
@@ -1,5 +1,3 @@
1
- import "./QyExpire.js";
2
-
3
1
  var e = {
4
2
  append: !1,
5
3
  retryIntervalFactor: 2,
@@ -56,6 +54,9 @@ let t = {
56
54
  },
57
55
  QyKVDataSaver_Worker: {
58
56
  noAcl: !1
57
+ },
58
+ QyAclWriter: {
59
+ minBatchSize: 2
59
60
  }
60
61
  };
61
62
 
@@ -31,8 +31,7 @@ class a extends t {
31
31
  (e = {
32
32
  ...i("QyFileLogger"),
33
33
  ...e
34
- }).append = !e.clearLogAtStart, super(e, [], [ "startFileConsole", "switchFileConsole" ]),
35
- Object.assign(this, {
34
+ }).append = !e.clearLogAtStart, super(e), Object.assign(this, {
36
35
  logFileFolder: t,
37
36
  qyLogFileSaver: new s(this, e)
38
37
  });
@@ -44,12 +43,12 @@ class a extends t {
44
43
  return this.dateDirPath;
45
44
  }
46
45
  async _op_start() {
47
- var t = new Date(), t = (this.timeoutRef = setTimeout(this.switch.bind(this), h(t)),
46
+ var t = new Date(), t = (this.timeoutRef = setTimeout(this.switch.bind(this), l(t)),
48
47
  this.dateDirPath = n(this, t));
49
48
  this.qyLogFileSaver.start(r(t, "change.txt")), await this.startFileConsole(t);
50
49
  }
51
50
  switch() {
52
- var t = new Date(), t = (this.timeoutRef = setTimeout(this.switch.bind(this), h(t)),
51
+ var t = new Date(), t = (this.timeoutRef = setTimeout(this.switch.bind(this), l(t)),
53
52
  n(this, t));
54
53
  return this.dateDirPath != t && (this.dateDirPath = t, this.qyLogFileSaver.switch(r(t, "change.txt")),
55
54
  this.switchFileConsole(t)), this;
@@ -68,14 +67,14 @@ class a extends t {
68
67
 
69
68
  function n(t, e) {
70
69
  var i = e.getUTCFullYear(), s = e.getUTCMonth() + 1, o = e.getUTCDate(), e = e.getUTCHours();
71
- return r(t.logFileFolder, i.toString(), l(s), l(o), l(e));
70
+ return r(t.logFileFolder, i.toString(), h(s), h(o), h(e));
72
71
  }
73
72
 
74
- function l(t) {
73
+ function h(t) {
75
74
  return t.toString().padStart(2, "0");
76
75
  }
77
76
 
78
- function h(t) {
77
+ function l(t) {
79
78
  return 1e3 * (60 * (60 - t.getUTCMinutes()) - t.getUTCSeconds());
80
79
  }
81
80
 
package/src/QyItem.js CHANGED
@@ -11,7 +11,7 @@ class e {
11
11
  flagInt;
12
12
  constructor(t, e = !1, a) {
13
13
  this.name = t.toString(), this.parentDir = a, this.flagInt = 0, this._created = e,
14
- (t == r || a && (a.name == r || a.underHiddenFolder)) && (this.flagInt |= 2);
14
+ (t == r || a && (a.name == r || a.underHiddenFolder)) && s(this, 2, !0);
15
15
  }
16
16
  get qyCache() {
17
17
  var t = this.parentDir;
package/src/QyKVData.d.ts CHANGED
@@ -17,10 +17,10 @@ export declare class QyKVData {
17
17
  compactInterval: any;
18
18
  unloadInterval: any;
19
19
  qyExpire: any;
20
- constructor(kvFolder: any, options: any, qyCache: any);
20
+ constructor(kvFolder: any, options?: any, qyCache?: any);
21
21
  start(maxChangeId: any, loadedMaxAclNum: any, qySnapshots: any, aclKeyValueMap: any): this;
22
22
  stop(): Promise<void>;
23
- save(changeId: any, cmdArgAsListChanges: any, syncList: any, needPromise: any): any;
23
+ save(changeId: any, cmdArgAsListObj: any, syncList: any, needPromise: any): any;
24
24
  increaseChangeId(): number;
25
25
  decreaseChangeId(): void;
26
26
  getValueSync(key: any): any;