datafolder 1.0.2 → 1.0.3

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