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.
Files changed (84) hide show
  1. package/README.md +34 -31
  2. package/index.js +1 -3
  3. package/package.json +5 -3
  4. package/sample.js +37 -37
  5. package/scripts/airbnb.js +10 -11
  6. package/scripts/airbnb2.js +10 -11
  7. package/scripts/airbnb2_queries.js +20 -22
  8. package/scripts/airbnb_queries.js +23 -22
  9. package/scripts/downloadFile.js +29 -31
  10. package/scripts/express.js +7 -5
  11. package/scripts/fastify.js +12 -11
  12. package/scripts/flights.js +9 -9
  13. package/scripts/flights2.js +9 -9
  14. package/scripts/flights2_queries.js +107 -105
  15. package/scripts/flights_queries.js +113 -109
  16. package/src/QyAcl.js +153 -152
  17. package/src/QyAclSaver.js +16 -10
  18. package/src/QyAclSaver_Worker.js +21 -15
  19. package/src/QyAclWriter.js +23 -13
  20. package/src/QyBatch.js +298 -263
  21. package/src/QyBinWriter.js +49 -37
  22. package/src/QyCD.js +13 -14
  23. package/src/QyCache.js +177 -140
  24. package/src/QyCompressor.js +71 -45
  25. package/src/QyCompressor_Worker.js +17 -9
  26. package/src/QyDB.js +67 -12
  27. package/src/QyDefaultOptions.js +13 -10
  28. package/src/QyDir.js +89 -53
  29. package/src/QyFetch.js +27 -24
  30. package/src/QyFile.js +89 -77
  31. package/src/QyFileContentUtils.js +129 -132
  32. package/src/QyFileLogger.js +63 -41
  33. package/src/QyIndex.js +175 -197
  34. package/src/QyIndexPropTree.js +25 -25
  35. package/src/QyIntersectNode.js +34 -31
  36. package/src/QyItem.js +54 -52
  37. package/src/QyJsonSaver.js +12 -6
  38. package/src/QyKVData.js +279 -245
  39. package/src/QyKVDataCleaner.js +12 -6
  40. package/src/QyKVDataCleaner_Worker.js +77 -59
  41. package/src/QyKVDataLoader.js +67 -46
  42. package/src/QyKVDataSaver.js +15 -9
  43. package/src/QyKVDataSaver_Worker.js +83 -60
  44. package/src/QyLogFileSaver.js +12 -6
  45. package/src/QyLogFileSaver_Worker.js +24 -14
  46. package/src/QyLogger.js +51 -40
  47. package/src/QyMessageWorker.js +43 -29
  48. package/src/QyMessager.js +74 -54
  49. package/src/QyMessager_Run.js +20 -7
  50. package/src/QyMod.js +15 -11
  51. package/src/QyOpRunner.js +58 -41
  52. package/src/QyQueue.js +35 -30
  53. package/src/QySaver.js +52 -29
  54. package/src/QySnapshotCompactor.js +15 -9
  55. package/src/QySnapshotCompactor_Worker.js +131 -110
  56. package/src/QySnapshotSaver.js +15 -9
  57. package/src/QySnapshotSaver_Worker.js +125 -110
  58. package/src/QySnapshots.js +264 -242
  59. package/src/QyStructure.js +35 -27
  60. package/src/QyTrigger.js +62 -55
  61. package/src/QyUnionNode.js +54 -56
  62. package/src/QyUtils.js +170 -158
  63. package/src/QyWorker.js +34 -20
  64. package/src/hackernews.js +63 -71
  65. package/src/rpc/getFileContent.js +7 -7
  66. package/src/rpc/getSubItems.js +12 -28
  67. package/src/rpc/queryFiles.js +2 -25
  68. package/src/simulate.js +85 -80
  69. package/src/simulate2.js +77 -78
  70. package/src/soc_pokec.js +44 -32
  71. package/static/datafolderui/QyStyledElement.js +12 -12
  72. package/static/datafolderui/QyUIFolderTree.js +20 -20
  73. package/static/datafolderui/QyUIUtils.js +8 -8
  74. package/static/datafolderui/explore-tree.js +31 -31
  75. package/static/datafolderui/folder-tree.js +2 -2
  76. package/static/datafolderui/hscrpt.js +9 -17
  77. package/static/datafolderui/json-view.js +3 -5
  78. package/static/datafolderui/kv-input.js +15 -15
  79. package/static/datafolderui/list-input.js +17 -17
  80. package/static/datafolderui/main-page.js +18 -18
  81. package/static/datafolderui/num-input.js +5 -5
  82. package/static/datafolderui/query-editor.js +6 -1
  83. package/static/datafolderui/querySelectorShadowRoot.js +15 -19
  84. package/static/datafolderui/resizable-input.js +18 -18
@@ -1,27 +1,63 @@
1
- let fs = require("node:fs"), fsPromises = require("node:fs/promises"), path = require("node:path"), getDefaultOptions = require("./QyDefaultOptions.js").getDefaultOptions, {
2
- Hash_Key_Length,
3
- folderOrFileExists,
4
- listToMap,
5
- isEmptyObj
6
- } = require("./QyUtils.js"), QyBinWriter = require("./QyBinWriter.js").QyBinWriter, {
7
- bufferToNums,
8
- numsToBuffer,
9
- applyAclChange,
10
- iterCmdKeys
11
- } = require("./QyAcl.js"), QyJsonSaver = require("./QyJsonSaver.js").QyJsonSaver, logger = require("./QyLogger.js").logger, isArray = Array.isArray;
1
+ import {
2
+ close as o,
3
+ readSync as i,
4
+ openSync as p
5
+ } from "node:fs";
12
6
 
13
- class QySnapshots {
14
- constructor(t, e) {
15
- (e = {
16
- ...getDefaultOptions("QySnapshots"),
17
- ...e
18
- }).vLOutdatedPercent = 2 * e.pMOutdatedPercent;
19
- var a = path.join(t, "info");
7
+ import {
8
+ readdir as l,
9
+ readFile as d
10
+ } from "node:fs/promises";
11
+
12
+ import {
13
+ join as s
14
+ } from "node:path";
15
+
16
+ import {
17
+ getDefaultOptions as n
18
+ } from "./QyDefaultOptions.js";
19
+
20
+ import {
21
+ Hash_Key_Length as u,
22
+ folderOrFileExists as m,
23
+ listToMap as r,
24
+ isEmptyObj as h,
25
+ isString as v
26
+ } from "./QyUtils.js";
27
+
28
+ import {
29
+ QyBinWriter as M
30
+ } from "./QyBinWriter.js";
31
+
32
+ import {
33
+ bufferToNums as g,
34
+ numsToBuffer as y,
35
+ applyAclChange as f,
36
+ iterCmdKeys as S
37
+ } from "./QyAcl.js";
38
+
39
+ import {
40
+ QyJsonSaver as c
41
+ } from "./QyJsonSaver.js";
42
+
43
+ import {
44
+ logger as C
45
+ } from "./QyLogger.js";
46
+
47
+ let P = Array.isArray, x = Buffer.from("\n"), O = Buffer.from("'");
48
+
49
+ class t {
50
+ constructor(t, a) {
51
+ (a = {
52
+ ...n("QySnapshots"),
53
+ ...a
54
+ }).vLOutdatedPercent = 2 * a.pMOutdatedPercent;
55
+ var e = s(t, "info");
20
56
  Object.assign(this, {
21
57
  snapshotFolder: t,
22
- snapshotInfoFolder: a,
23
- options: e,
24
- qyJsonSaver: new QyJsonSaver(a, e),
58
+ snapshotInfoFolder: e,
59
+ options: a,
60
+ qyJsonSaver: new c(e, a),
25
61
  numToSnapshotMap: {},
26
62
  keyToSnapshotMap: {},
27
63
  fDMap: {},
@@ -34,321 +70,307 @@ class QySnapshots {
34
70
  async loadSnapshotInfos() {
35
71
  let {
36
72
  snapshotInfoFolder: t,
37
- qyJsonSaver: o,
38
- numToSnapshotMap: n
73
+ qyJsonSaver: h,
74
+ numToSnapshotMap: f
39
75
  } = this;
40
- if (await folderOrFileExists(t)) {
41
- var e = (await fsPromises.readdir(t)).filter(t => /^[1-9]/.test(t)).map(t => parseInt(t)).sort((t, e) => t - e);
42
- let r = 0, s = 0;
43
- await Promise.all(e.map(async t => {
44
- var e = await o.loadFromFile(t + ".json"), a = n[t] = {
76
+ if (await m(t)) {
77
+ var a = (await l(t)).filter(t => /^[1-9]/.test(t)).map(t => parseInt(t)).sort((t, a) => t - a);
78
+ let p = 0, u = 0;
79
+ await Promise.all(a.map(async t => {
80
+ var a = await h.loadFromFile(t + ".json"), e = f[t] = {
45
81
  snapshotNum: t,
46
- info: e,
82
+ info: a,
47
83
  posMap: {},
48
84
  outdatedCount: 0
49
85
  };
50
- ++this.snapshotCount, t > r && (r = t, s = e.maxChangeId), await this._loadPrefixPM(a);
86
+ ++this.snapshotCount, t > p && (p = t, u = a.maxChangeId);
87
+ var t = e, a = L(a = this, t), o = (C.info("Loading " + a), await d(a)), s = o.length, n = t.prefixPM = {};
88
+ for (let t = 0; t < s; ) {
89
+ var r = t + V, i = o.toString("latin1", t, r), i = n[i] = [];
90
+ t = g(o, r, i);
91
+ }
51
92
  })), Object.assign(this, {
52
- maxSnapshotNum: r,
53
- snapshotMaxChangeId: s
54
- }), this._setupPrefixMaps(e);
93
+ maxSnapshotNum: p,
94
+ snapshotMaxChangeId: u
95
+ });
96
+ var {
97
+ numToSnapshotMap: e,
98
+ prefixMap: o
99
+ } = this;
100
+ for (r of a) {
101
+ var s, n = e[r], r = n.prefixPM;
102
+ for (s in r) {
103
+ var i = o[s];
104
+ i ? i.push(n) : o[s] = [ n ];
105
+ }
106
+ }
55
107
  }
56
108
  }
57
109
  closeAllFDs() {
58
- var t, e = this.fDMap;
59
- for (t in e) fs.close(e[t]), delete e[t];
110
+ var t, a = this.fDMap;
111
+ for (t in a) o(a[t]), delete a[t];
60
112
  }
61
113
  saveKeyValueMap(t) {
62
- var e, {
63
- keyValueMap: a,
64
- info: r
65
- } = t, s = (++r.vLVersion, new QyBinWriter()), o = (s.start(this.getVLFilePath(t)),
66
- Object.keys(a).sort()), n = {};
67
- let i = 0, p = 0;
68
- for (e of o) {
69
- var u = a[e];
114
+ var a, {
115
+ keyValueMap: e,
116
+ info: o
117
+ } = t, s = (++o.vLVersion, new M()), n = (s.start(this.getVLFilePath(t)),
118
+ Object.keys(e).sort()), r = {};
119
+ let i = 0, p = 0, u;
120
+ for (a of n) {
121
+ var h, f = e[a];
70
122
  let t;
71
- null == u ? t = Undefined_Mark : (u = Buffer.isBuffer(u) ? u : _valueToBuffer(e, u),
72
- u = (s.save(u), u).length, t = [ i, u ], i += u), n[e] = t, ++p;
123
+ null == f ? t = N : (u = Buffer.isBuffer(f) ? (s.save(f), f.length) : v(f) ? (h = Buffer.from(f),
124
+ s.save(O), s.save(h), s.save(x), h.length + 2) : (h = Buffer.from(JSON.stringify(B(a) && !P(f) ? Object.keys(f) : f)),
125
+ s.save(h), s.save(x), h.length + 1), t = [ i, u ], i += u), r[a] = t,
126
+ ++p;
73
127
  }
74
128
  return Object.assign(t, {
75
- posMap: n,
129
+ posMap: r,
76
130
  outdatedCount: 0
77
- }), Object.assign(r, {
131
+ }), Object.assign(o, {
78
132
  totalCount: p,
79
133
  outdatedCount: 0
80
- }), Promise.all([ this.savePosMap(t, o), s.stop() ]);
134
+ }), Promise.all([ this.savePosMap(t, n), s.stop() ]);
81
135
  }
82
136
  addMaxSnapshot(t) {
83
- var e, {
84
- numToSnapshotMap: a,
85
- keyToSnapshotMap: r
137
+ var a, {
138
+ numToSnapshotMap: e,
139
+ keyToSnapshotMap: o
86
140
  } = this, {
87
141
  posMap: s,
88
- keyValueMap: o,
89
- snapshotNum: n,
142
+ keyValueMap: n,
143
+ snapshotNum: r,
90
144
  info: i
91
145
  } = t, i = i.maxChangeId, i = (Object.assign(this, {
92
- maxSnapshotNum: n,
146
+ maxSnapshotNum: r,
93
147
  snapshotMaxChangeId: i
94
- }), o || s);
95
- for (e in i) r[e] = t;
96
- a[n] = t, ++this.snapshotCount;
148
+ }), n || s);
149
+ for (a in i) o[a] = t;
150
+ e[r] = t, ++this.snapshotCount;
97
151
  }
98
152
  removeKey(t) {
99
- var e = this.keyToSnapshotMap, a = e[t];
100
- if (a) return this.removeKeyFromSnapshot(a, t), delete e[t], !0;
153
+ var a = this.keyToSnapshotMap, e = a[t];
154
+ if (e) return this.removeKeyFromSnapshot(e, t), delete a[t], !0;
101
155
  }
102
- applyCmdObj(t, e, a) {
103
- if (null != a) {
104
- var r = a.length;
105
- for (let t = 0; t < r; t += 2) {
106
- var s = a[t], o = a[t + 1];
107
- e[s] = null != o && _isListKey(s) ? listToMap(o) : o;
156
+ applyCmdObj(t, a, e) {
157
+ if (null != e) {
158
+ var o = e.length;
159
+ for (let t = 0; t < o; t += 2) {
160
+ var s = e[t], n = e[t + 1];
161
+ a[s] = null != n && B(s) ? r(n) : n;
108
162
  }
109
163
  }
110
- iterCmdKeys(t, t => {
111
- t in e || (e[t] = this.getValueSync(t)), this.removeKey(t);
112
- }), applyAclChange(e, t);
164
+ S(t, t => {
165
+ t in a || (a[t] = this.getValueSync(t)), this.removeKey(t);
166
+ }), f(a, t);
113
167
  }
114
168
  getValueSync(t) {
115
- var e, a, r = this._getSnapshotByKey(t);
116
- if (r) return {
117
- keyValueMap: a,
118
- posMap: e
119
- } = r, a ? a[t] : (a = e[t]) && ([ e, a ] = a, 0 != a) ? this._readValFromFile(r, t, e, a) : void 0;
169
+ var a = ((t, a) => {
170
+ let {
171
+ keyToSnapshotMap: e,
172
+ prefixMap: o
173
+ } = t, s = e[a];
174
+ if (s) return s;
175
+ var n = b(a), r = o[n];
176
+ if (r) for (;0 < r.length; ) {
177
+ s = r.pop();
178
+ var i = ((t, a, e) => {
179
+ var o, {
180
+ posMap: s,
181
+ prefixPM: n
182
+ } = a;
183
+ if (n = n[e]) return [ n, o ] = n, n = F(t, t.getPMFilePath(a), n, o),
184
+ t.loadPartialPosMapBuffer(a, e, n), s;
185
+ })(t, s, n);
186
+ if (i && a in i) return s;
187
+ }
188
+ })(this, t);
189
+ if (a) {
190
+ var {
191
+ keyValueMap: e,
192
+ posMap: o
193
+ } = a;
194
+ if (e) return e[t];
195
+ e = o[t];
196
+ if (e) {
197
+ var [ o, e ] = e;
198
+ if (0 != e) {
199
+ var s = this;
200
+ if (a = s.getVLFilePath(a), s = F(s, a, o, e)) return s[0] == O[0] ? s.toString("utf8", 1, s.length - 1) : (a = JSON.parse(s),
201
+ B(t) ? r(a) : a);
202
+ }
203
+ }
204
+ }
120
205
  }
121
- iterPMBuffer(e, a) {
122
- var r = e.length;
123
- for (let t = 0; t < r; ) {
124
- var s = t + Hash_Key_Length, o = e.toString("latin1", t, s), n = [];
125
- t = bufferToNums(e, s, n), a(o, n);
206
+ iterPMBuffer(a, e) {
207
+ var o = a.length;
208
+ for (let t = 0; t < o; ) {
209
+ var s = t + u, n = a.toString("latin1", t, s), r = [];
210
+ t = g(a, s, r), e(n, r);
126
211
  }
127
212
  }
128
- loadPartialPosMapBuffer(a, t, e) {
213
+ loadPartialPosMapBuffer(e, t, a) {
129
214
  let {
130
- posMap: r,
215
+ posMap: o,
131
216
  prefixPM: s
132
- } = a, o = (delete s[t], this).keyToSnapshotMap;
133
- this.iterPMBuffer(e, (t, e) => {
134
- t in o ? ++a.outdatedCount : (r[t] = e, o[t] = a);
217
+ } = e, n = (delete s[t], this).keyToSnapshotMap;
218
+ this.iterPMBuffer(a, (t, a) => {
219
+ t in n ? ++e.outdatedCount : (o[t] = a, n[t] = e);
135
220
  });
136
221
  }
137
222
  delSnapshot(t) {
138
- delete this.numToSnapshotMap[t.snapshotNum], --this.snapshotCount, this._closeFD(this.getVLFilePath(t)),
139
- this._closeFD(this.getPMFilePath(t));
223
+ delete this.numToSnapshotMap[t.snapshotNum], --this.snapshotCount, a(this, this.getVLFilePath(t)),
224
+ a(this, this.getPMFilePath(t));
140
225
  }
141
226
  calOutdates() {
142
- var t, e = [], a = [], r = [], s = [], {
143
- options: o,
144
- numToSnapshotMap: n
227
+ var t, a = [], e = [], o = [], s = [], {
228
+ options: n,
229
+ numToSnapshotMap: r
145
230
  } = this, {
146
231
  pMOutdatedPercent: i,
147
232
  vLOutdatedPercent: p
148
- } = o;
149
- for (t in n) {
150
- var u, h = n[t];
151
- h.isOut || (100 == (u = _getTotalOutdatedPercent(h)) ? (this.delSnapshot(h),
152
- e.push(t)) : p < u ? (this._canCombine(h) ? a : s).push(h) : _getCurrentOutdatedPercent(h) > i ? r.push(h) : this._isSmallSnapshot(h) && this._canCombine(h) && a.push(h));
233
+ } = n;
234
+ for (t in r) {
235
+ var u, h = r[t];
236
+ h.isOut || (100 == (u = T(h)) ? (this.delSnapshot(h), a.push(t)) : p < u ? (j(h) ? e : s).push(h) : Math.round(h.outdatedCount / h.info.totalCount * 100) > i ? o.push(h) : (u = this,
237
+ h.info.totalCount < u.options.minSnapshotKeyCount && j(h) && e.push(h)));
153
238
  }
154
- return 1 == a.length && _getTotalOutdatedPercent(a[0]) < p && (a.length = 0),
155
- 0 < r.length && logger.log("pMCompacts:" + r.map(t => t.snapshotNum)), 0 < s.length && logger.log("vLCompacts:" + s.map(t => t.snapshotNum)),
156
- 0 < a.length && logger.log("combiningSnapshots:" + a.map(t => t.snapshotNum)),
239
+ return 1 == e.length && T(e[0]) < p && (e.length = 0), 0 < o.length && C.log("pMCompacts:" + o.map(t => t.snapshotNum)),
240
+ 0 < s.length && C.log("vLCompacts:" + s.map(t => t.snapshotNum)), 0 < e.length && C.log("combiningSnapshots:" + e.map(t => t.snapshotNum)),
157
241
  {
158
- emptySnapshotNumList: e,
159
- combiningSnapshotList: a,
160
- pMCompactSnapshotList: r,
242
+ emptySnapshotNumList: a,
243
+ combiningSnapshotList: e,
244
+ pMCompactSnapshotList: o,
161
245
  vLCompactSnapshotList: s
162
246
  };
163
247
  }
164
248
  getMaxCombinedSnapshot(t) {
165
- let e, a;
166
- for (var r of t) {
167
- var s = r.snapshotNum;
168
- (!a || a < s) && (e = r, a = s);
249
+ let a, e;
250
+ for (var o of t) {
251
+ var s = o.snapshotNum;
252
+ (!e || e < s) && (a = o, e = s);
169
253
  }
170
- return e;
254
+ return a;
171
255
  }
172
256
  getPMFilePath(t) {
173
257
  var {
174
258
  snapshotNum: t,
175
- info: e
259
+ info: a
176
260
  } = t;
177
- return path.join(this.snapshotFolder, "" + t, e.pMVersion + "_pM.txt");
261
+ return s(this.snapshotFolder, "" + t, a.pMVersion + "_pM.txt");
178
262
  }
179
263
  getVLFilePath(t) {
180
264
  var {
181
265
  snapshotNum: t,
182
- info: e
266
+ info: a
183
267
  } = t;
184
- return path.join(this.snapshotFolder, "" + t, e.vLVersion + "_vL.txt");
268
+ return s(this.snapshotFolder, "" + t, a.vLVersion + "_vL.txt");
185
269
  }
186
- saveSnapshotInfo(t, e) {
270
+ saveSnapshotInfo(t, a) {
187
271
  var {
188
- outdatedCount: a,
189
- totalCount: r
190
- } = e;
191
- return e.outdated = Math.round(100 * a / r) + "%", this.qyJsonSaver.saveToFile(e, t + ".json", !0);
272
+ outdatedCount: e,
273
+ totalCount: o
274
+ } = a;
275
+ return a.outdated = Math.round(100 * e / o) + "%", C.log("Saving snapshotInfo:" + t),
276
+ this.qyJsonSaver.saveToFile(a, t + ".json", !0);
192
277
  }
193
- savePosMap(t, e) {
194
- var a, {
195
- outdatedCount: r,
278
+ savePosMap(t, a) {
279
+ var e, {
280
+ outdatedCount: o,
196
281
  info: s,
197
- posMap: o
198
- } = t, n = (s.outdatedCount += r, t.outdatedCount = 0, ++s.pMVersion, new QyBinWriter()), i = (n.start(this.getPMFilePath(t)),
282
+ posMap: n
283
+ } = t, r = (s.outdatedCount += o, t.outdatedCount = 0, ++s.pMVersion, new M()), i = (r.start(this.getPMFilePath(t)),
199
284
  t.prefixPM = {});
200
285
  let p = 0, u = 0, h;
201
- for (a of e = e || Object.keys(o).sort()) {
202
- null == h ? h = _getPrefix(a) : a.startsWith(h) || (i[h] = [ p, u ],
203
- h = _getPrefix(a), p += u, u = 0);
204
- var l = Buffer.from(a), f = numsToBuffer(o[a]);
205
- n.save(l), n.save(f), u += l.length + f.length;
286
+ for (e of a = a || Object.keys(n).sort()) {
287
+ null == h ? h = b(e) : e.startsWith(h) || (i[h] = [ p, u ], h = b(e),
288
+ p += u, u = 0);
289
+ var f = Buffer.from(e), l = y(n[e]);
290
+ r.save(f), r.save(l), u += f.length + l.length;
206
291
  }
207
- return null != h && (i[h] = [ p, u ]), Promise.all([ n.stop(), this._savePrefixPM(t) ]);
292
+ return null != h && (i[h] = [ p, u ]), Promise.all([ r.stop(), ((t, a) => {
293
+ var e, o = new M(), s = (o.start(L(t, a)), a).prefixPM;
294
+ for (e in s) o.save(Buffer.from(e)), o.save(y(s[e]));
295
+ return o.stop();
296
+ })(this, t) ]);
208
297
  }
209
298
  isEmptySnapshot(t) {
210
299
  var {
211
300
  info: t,
212
- outdatedCount: e
301
+ outdatedCount: a
213
302
  } = t;
214
- return e + t.outdatedCount == t.totalCount;
215
- }
216
- _setupPrefixMaps(t) {
217
- var e, {
218
- numToSnapshotMap: a,
219
- prefixMap: r
220
- } = this;
221
- for (e of t) {
222
- var s, o = a[e], n = o.prefixPM;
223
- for (s in n) {
224
- var i = r[s];
225
- i ? i.push(o) : r[s] = [ o ];
226
- }
227
- }
228
- }
229
- async _loadPrefixPM(t) {
230
- var e = this._getPrefixPMFilePath(t), a = (logger.info("Loading " + e),
231
- await fsPromises.readFile(e)), r = a.length, s = t.prefixPM = {};
232
- for (let t = 0; t < r; ) {
233
- var o = t + Prefix_Length, n = s[a.toString("latin1", t, o)] = [];
234
- t = bufferToNums(a, o, n);
235
- }
236
- }
237
- _loadPartialPosMap(t, e) {
238
- var a, {
239
- posMap: r,
240
- prefixPM: s
241
- } = t, s = s[e];
242
- if (s) return [ s, a ] = s, s = this._readBufferFromFile(this.getPMFilePath(t), s, a),
243
- this.loadPartialPosMapBuffer(t, e, s), r;
303
+ return a + t.outdatedCount == t.totalCount;
244
304
  }
245
- _getSnapshotByKey(t) {
305
+ removeKeyFromSnapshot(t, a) {
246
306
  var {
247
- keyToSnapshotMap: e,
248
- prefixMap: a
249
- } = this;
250
- let r = e[t];
251
- if (r) return r;
252
- var s = _getPrefix(t), o = a[s];
253
- if (o) for (;0 < o.length; ) {
254
- r = o.pop();
255
- var n = this._loadPartialPosMap(r, s);
256
- if (n && t in n) return r;
257
- }
258
- }
259
- _readValFromFile(t, e, a, r) {
260
- t = this.getVLFilePath(t), t = this._readBufferFromFile(t, a, r);
261
- if (t) return _parseBuffer(e, t);
262
- }
263
- _readBufferFromFile(e, a, r) {
264
- var s = this._getFD(e), o = Buffer.allocUnsafe(r);
265
- for (let t = 0; t < r; ) {
266
- var n = fs.readSync(s, o, t, r - t, a + t);
267
- if (0 == n) return void logger.error(`readSync ${e} at ${a + t} returning 0 byte`);
268
- t += n;
269
- }
270
- return o;
271
- }
272
- _canCombine(t) {
273
- var {
274
- keyValueMap: e,
275
- prefixPM: a
276
- } = t;
277
- return e || null == a || isEmptyObj(t.prefixPM);
278
- }
279
- _isSmallSnapshot(t) {
280
- return t.info.totalCount < this.options.minSnapshotKeyCount;
281
- }
282
- _getPrefixPMFilePath(t) {
283
- var {
284
- snapshotNum: t,
285
- info: e
286
- } = t;
287
- return path.join(this.snapshotFolder, "" + t, e.pMVersion + "_prefixPM.txt");
288
- }
289
- removeKeyFromSnapshot(t, e) {
290
- var {
291
- posMap: a,
292
- keyValueMap: r
307
+ posMap: e,
308
+ keyValueMap: o
293
309
  } = t;
294
- r && delete r[e], a && delete a[e], ++t.outdatedCount;
310
+ o && delete o[a], e && delete e[a], ++t.outdatedCount;
295
311
  }
296
- _getFD(e) {
297
- var t = this.fDMap;
298
- let a = t[e];
299
- if (!a) {
300
- logger.info("Opening " + e);
312
+ }
313
+
314
+ function F(t, a, e, o) {
315
+ var s = ((t, a) => {
316
+ let e = t.fDMap, o = e[a];
317
+ if (!o) {
318
+ C.info("Opening " + a);
301
319
  try {
302
- a = t[e] = fs.openSync(e, "r");
320
+ o = e[a] = p(a, "r");
303
321
  } catch (t) {
304
- throw logger.error(`Opening ${e} failed:`, t), t;
322
+ throw C.error(`Opening ${a} failed:`, t), t;
305
323
  }
306
324
  }
307
- return a;
308
- }
309
- _closeFD(t) {
310
- var e = this.fDMap, a = e[t];
311
- null != a && (fs.close(a), delete e[t]);
312
- }
313
- _savePrefixPM(t) {
314
- var e, a = new QyBinWriter(), r = (a.start(this._getPrefixPMFilePath(t)),
315
- t).prefixPM;
316
- for (e in r) a.save(Buffer.from(e)), a.save(numsToBuffer(r[e]));
317
- return a.stop();
325
+ return o;
326
+ })(t, a), n = Buffer.allocUnsafe(o);
327
+ for (let t = 0; t < o; ) {
328
+ var r = i(s, n, t, o - t, e + t);
329
+ if (0 == r) return void C.error(`readSync ${a} at ${e + t} returning 0 byte`);
330
+ t += r;
318
331
  }
332
+ return n;
319
333
  }
320
334
 
321
- let Undefined_Mark = [ 0, 0 ], Prefix_Length = 3;
335
+ function j(t) {
336
+ var {
337
+ keyValueMap: a,
338
+ prefixPM: e
339
+ } = t;
340
+ return a || null == e || h(t.prefixPM);
341
+ }
322
342
 
323
- function _getPrefix(t) {
324
- return t.substring(0, Prefix_Length);
343
+ function L(t, a) {
344
+ var {
345
+ snapshotNum: a,
346
+ info: e
347
+ } = a;
348
+ return s(t.snapshotFolder, "" + a, e.pMVersion + "_prefixPM.txt");
325
349
  }
326
350
 
327
- function _isListKey(t) {
328
- return !t.startsWith("c");
351
+ function a(t, a) {
352
+ var t = t.fDMap, e = t[a];
353
+ null != e && (o(e), delete t[a]);
329
354
  }
330
355
 
331
- function _valueToBuffer(t, e) {
332
- return Buffer.from(JSON.stringify(_isListKey(t) && !isArray(e) ? Object.keys(e) : e) + "\n");
356
+ let N = [ 0, 0 ], V = 3;
357
+
358
+ function b(t) {
359
+ return t.substring(0, V);
333
360
  }
334
361
 
335
- function _parseBuffer(t, e) {
336
- e = JSON.parse(e);
337
- return _isListKey(t) ? listToMap(e) : e;
362
+ function B(t) {
363
+ return !t.startsWith("c");
338
364
  }
339
365
 
340
- function _getTotalOutdatedPercent(t) {
366
+ function T(t) {
341
367
  var {
342
368
  outdatedCount: t,
343
- info: e
344
- } = t, a = e.totalCount, t = t + e.outdatedCount;
345
- return t == a ? 100 : Math.round(t / a * 100);
346
- }
347
-
348
- function _getCurrentOutdatedPercent(t) {
349
- return Math.round(t.outdatedCount / t.info.totalCount * 100);
369
+ info: a
370
+ } = t, e = a.totalCount, t = t + a.outdatedCount;
371
+ return t == e ? 100 : Math.round(t / e * 100);
350
372
  }
351
373
 
352
- Object.assign(module.exports, {
353
- QySnapshots: QySnapshots
354
- });
374
+ export {
375
+ t as QySnapshots
376
+ };