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,4 +1,4 @@
1
- const assert = require("node:assert/strict");
1
+ import { deepEqual } from "node:assert/strict";
2
2
 
3
3
  // Return the names of all airports one can reach
4
4
  // directly (1 step) from Los Angeles International
@@ -10,7 +10,7 @@ function query1(qyDB) {
10
10
  for (const x of qyDB.queryFiles("flights/**", { _from: "airports/LAX" })) {
11
11
  resultMap[x.fileContent._to] = 1;
12
12
  }
13
- assert.deepEqual(Object.keys(resultMap), [
13
+ deepEqual(Object.keys(resultMap), [
14
14
  "airports/CVG",
15
15
  "airports/SMF",
16
16
  "airports/ATL",
@@ -111,24 +111,25 @@ function query1(qyDB) {
111
111
 
112
112
  function query2(qyDB) {
113
113
  console.time("query2");
114
- assert.deepEqual(
114
+ deepEqual(
115
115
  qyDB
116
116
  .queryFiles(["flights", "*", 1, (x) => x >= 5 && x <= 7], {
117
117
  $or: [{ _from: "airports/BIS" }, { _to: "airports/BIS" }],
118
118
  })
119
- .map((x) => x.fileContent.FlightNum),
119
+ .map((x) => x.fileContent.FlightNum)
120
+ .sort((x, y) => x - y),
120
121
  [
121
122
  6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
122
123
  6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
123
124
  5650, 6636, 6678, 1087,
124
- ],
125
+ ].sort((x, y) => x - y),
125
126
  );
126
127
  console.timeEnd("query2");
127
128
  }
128
129
 
129
130
  function query3(qyDB) {
130
131
  console.time("query3");
131
- assert.deepEqual(
132
+ deepEqual(
132
133
  qyDB
133
134
  .queryFiles(["flights", "*", 1, (x) => x >= 1 && x <= 7], {
134
135
  $or: [
@@ -136,7 +137,8 @@ function query3(qyDB) {
136
137
  { _from: "airports/MSP", _to: "airports/BOI" },
137
138
  ],
138
139
  })
139
- .map((x) => x.view(["_from", "_to", "ArrTimeUTC"])),
140
+ .map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
141
+ .sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
140
142
  [
141
143
  {
142
144
  _from: "airports/BOI",
@@ -333,7 +335,7 @@ function query3(qyDB) {
333
335
  _to: "airports/BOI",
334
336
  ArrTimeUTC: "2008-01-08T06:29:00.000Z",
335
337
  },
336
- ],
338
+ ].sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
337
339
  );
338
340
 
339
341
  console.timeEnd("query3");
@@ -350,7 +352,7 @@ function query3(qyDB) {
350
352
 
351
353
  function query4(qyDB) {
352
354
  console.time("query4");
353
- assert.deepEqual(
355
+ deepEqual(
354
356
  qyDB.queryFiles(["flights", "*", 1, 5], { FlightNum: 860 }).map((x) => x.view(["_from", "_to"])),
355
357
  [
356
358
  { _from: "airports/IAD", _to: "airports/BOS" },
@@ -365,7 +367,7 @@ function query4(qyDB) {
365
367
 
366
368
  function query5(qyDB) {
367
369
  console.time("query5");
368
- assert.deepEqual(
370
+ deepEqual(
369
371
  qyDB
370
372
  .queryFiles("**", { vip: true })
371
373
  .map((x) => x.fileContent.name)
@@ -390,7 +392,7 @@ function query5(qyDB) {
390
392
 
391
393
  function query6(qyDB) {
392
394
  console.time("query6");
393
- assert.deepEqual(
395
+ deepEqual(
394
396
  qyDB
395
397
  .queryFiles("flights/**", {
396
398
  FlightNum: { $or: [859, 860] },
@@ -407,24 +409,25 @@ function query6(qyDB) {
407
409
 
408
410
  function query7(qyDB) {
409
411
  console.time("query7");
410
- assert.deepEqual(
412
+ deepEqual(
411
413
  qyDB
412
414
  .queryFiles(["flights", "*", { $or: [1] }, [5, 6, 7]], {
413
415
  $or: [{ _from: "airports/BIS" }, { _to: "airports/BIS" }],
414
416
  })
415
- .map((x) => x.fileContent.FlightNum),
417
+ .map((x) => x.fileContent.FlightNum)
418
+ .sort((x, y) => x - y),
416
419
  [
417
420
  6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
418
421
  6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
419
422
  5650, 6636, 6678, 1087,
420
- ],
423
+ ].sort((x, y) => x - y),
421
424
  );
422
425
  console.timeEnd("query7");
423
426
  }
424
427
 
425
428
  function query8(qyDB) {
426
429
  console.time("query8");
427
- assert.deepEqual(
430
+ deepEqual(
428
431
  qyDB.queryFiles("**", { name: "Thigpen " }).map((x) => x.fileContent.name),
429
432
  ["Thigpen "],
430
433
  );
@@ -450,4 +453,4 @@ function runQueries(qyDB) {
450
453
  query8(qyDB);
451
454
  }
452
455
 
453
- Object.assign(module.exports, { runQueries });
456
+ export { runQueries };
@@ -1,4 +1,4 @@
1
- const assert = require("node:assert/strict");
1
+ import { deepEqual } from "node:assert/strict";
2
2
 
3
3
  // Return the names of all airports one can reach
4
4
  // directly (1 step) from Los Angeles International
@@ -10,7 +10,7 @@ function query1(qyDB) {
10
10
  for (const x of qyDB.queryFiles("flights", { _from: "airports/LAX" })) {
11
11
  resultMap[x.fileContent._to] = 1;
12
12
  }
13
- assert.deepEqual(Object.keys(resultMap), [
13
+ deepEqual(Object.keys(resultMap), [
14
14
  "airports/CVG",
15
15
  "airports/SMF",
16
16
  "airports/ATL",
@@ -111,7 +111,7 @@ function query1(qyDB) {
111
111
 
112
112
  function query2(qyDB) {
113
113
  console.time("query2");
114
- assert.deepEqual(
114
+ deepEqual(
115
115
  qyDB
116
116
  .queryFiles("flights", {
117
117
  $and: [
@@ -120,19 +120,20 @@ function query2(qyDB) {
120
120
  { Day: (x) => x >= 5 && x <= 7 },
121
121
  ],
122
122
  })
123
- .map((x) => x.fileContent.FlightNum),
123
+ .map((x) => x.fileContent.FlightNum)
124
+ .sort((x, y) => x - y),
124
125
  [
125
126
  6635, 646, 6541, 5651, 6541, 5648, 687, 309, 6678, 6678, 6636, 439, 1567, 6635, 5647, 6541, 5660, 6541,
126
127
  6553, 687, 6553, 309, 5649, 5650, 6636, 439, 6635, 574, 6541, 5651, 5648, 6541, 1705, 1535, 5649, 6678,
127
128
  5650, 6636, 6678, 1087,
128
- ],
129
+ ].sort((x, y) => x - y),
129
130
  );
130
131
  console.timeEnd("query2");
131
132
  }
132
133
 
133
134
  function query3(qyDB) {
134
135
  console.time("query3");
135
- assert.deepEqual(
136
+ deepEqual(
136
137
  qyDB
137
138
  .queryFiles("flights", {
138
139
  $or: [
@@ -142,7 +143,8 @@ function query3(qyDB) {
142
143
  Month: 1,
143
144
  Day: (x) => x >= 1 && x <= 7,
144
145
  })
145
- .map((x) => x.view(["_from", "_to", "ArrTimeUTC"])),
146
+ .map((x) => x.view(["_from", "_to", "ArrTimeUTC"]))
147
+ .sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
146
148
  [
147
149
  {
148
150
  _from: "airports/BOI",
@@ -339,7 +341,7 @@ function query3(qyDB) {
339
341
  _to: "airports/BOI",
340
342
  ArrTimeUTC: "2008-01-08T06:29:00.000Z",
341
343
  },
342
- ],
344
+ ].sort((x, y) => (x.ArrTimeUTC > y.ArrTimeUTC ? 1 : x.ArrTimeUTC == y.ArrTimeUTC ? 0 : -1)),
343
345
  );
344
346
 
345
347
  console.timeEnd("query3");
@@ -359,7 +361,7 @@ function query4(qyDB) {
359
361
  const result = qyDB
360
362
  .queryFiles("flights", { Month: 1, Day: 5, FlightNum: 860 })
361
363
  .map((x) => x.view(["_from", "_to"]));
362
- assert.deepEqual(result, [
364
+ deepEqual(result, [
363
365
  { _from: "airports/IAD", _to: "airports/BOS" },
364
366
  { _from: "airports/PBI", _to: "airports/JFK" },
365
367
  { _from: "airports/ORD", _to: "airports/DTW" },
@@ -372,8 +374,11 @@ function query4(qyDB) {
372
374
  function query5(qyDB) {
373
375
  logger.info("Query begins");
374
376
  console.time("query5");
375
- assert.deepEqual(
376
- qyDB.queryFiles("airports", { vip: true }).map((x) => x.view(["name"]).name),
377
+ deepEqual(
378
+ qyDB
379
+ .queryFiles("airports", { vip: true })
380
+ .map((x) => x.view(["name"]).name)
381
+ .sort(),
377
382
  [
378
383
  "Amarillo International",
379
384
  "William B Hartsfield-Atlanta Intl",
@@ -382,7 +387,7 @@ function query5(qyDB) {
382
387
  "Los Angeles International",
383
388
  "Chicago O'Hare International",
384
389
  "San Francisco International",
385
- ],
390
+ ].sort(),
386
391
  );
387
392
  console.timeEnd("query5");
388
393
  }
@@ -400,4 +405,4 @@ function runQueries(qyDB) {
400
405
  query5(qyDB);
401
406
  }
402
407
 
403
- Object.assign(module.exports, { runQueries });
408
+ export { runQueries };
package/src/QyAcl.js CHANGED
@@ -1,59 +1,67 @@
1
- let fsPromises = require("node:fs/promises"), {
2
- mergeContent,
3
- mergeContentChanges,
4
- setValByNamePath
5
- } = require("./QyFileContentUtils.js"), {
6
- isEmptyObj,
7
- arrayLast
8
- } = require("./QyUtils.js"), logger = require("./QyLogger.js").logger;
9
-
10
- function delCmdKey(e, r) {
1
+ import u from "node:fs/promises";
2
+
3
+ import {
4
+ mergeContent as m,
5
+ mergeContentChanges as s,
6
+ setValByNamePath as a
7
+ } from "./QyFileContentUtils.js";
8
+
9
+ import {
10
+ isEmptyObj as g,
11
+ arrayLast as n
12
+ } from "./QyUtils.js";
13
+
14
+ import {
15
+ logger as d
16
+ } from "./QyLogger.js";
17
+
18
+ function r(r, e) {
11
19
  var {
12
- A: e,
20
+ A: r,
13
21
  R: t,
14
22
  M: a,
15
23
  D: n
16
- } = e;
17
- n && delete n[r], r.startsWith("c") ? a && delete a[r] : (e && delete e[r],
18
- t && delete t[r]);
24
+ } = r;
25
+ n && delete n[e], e.startsWith("c") ? a && delete a[e] : (r && delete r[e],
26
+ t && delete t[e]);
19
27
  }
20
28
 
21
- function applyAclChange(e, r) {
29
+ function e(r, e) {
22
30
  var t, a, n, s, {
23
- D: r,
31
+ D: e,
24
32
  A: i,
25
33
  R: o,
26
- M: l
27
- } = r;
28
- for (t in r) null != e[t] && (e[t] = void 0);
34
+ M: f
35
+ } = e;
36
+ for (t in e) null != r[t] && (r[t] = void 0);
29
37
  for (a in i) {
30
- var f, u = e[a] || (e[a] = {});
31
- for (f of i[a]) u[f] = 1;
38
+ var c, l = r[a] || (r[a] = {});
39
+ for (c of i[a]) l[c] = 1;
32
40
  }
33
41
  for (n in o) {
34
- var d = e[n];
35
- if (d) {
36
- var c = o[n];
37
- if (c) {
38
- for (var m of c) delete d[m];
39
- isEmptyObj(d) && (e[n] = void 0);
42
+ var u = r[n];
43
+ if (u) {
44
+ var d = o[n];
45
+ if (d) {
46
+ for (var h of d) delete u[h];
47
+ g(u) && (r[n] = void 0);
40
48
  }
41
49
  }
42
50
  }
43
- for (s in l) e[s] = mergeContent(e[s], l[s]);
51
+ for (s in f) r[s] = m(r[s], f[s]);
44
52
  }
45
53
 
46
- function iterCmdKeys(e, r) {
54
+ function t(r, e) {
47
55
  var t, {
48
- D: e,
56
+ D: r,
49
57
  A: a,
50
58
  R: n,
51
59
  M: s
52
- } = e;
53
- for (t of [ e, a, n, s ]) for (var i in t) r(i);
60
+ } = r;
61
+ for (t of [ r, a, n, s ]) for (var i in t) e(i);
54
62
  }
55
63
 
56
- class QyAclCmdGenerator {
64
+ class i {
57
65
  constructor() {
58
66
  Object.assign(this, {
59
67
  cmdArgAsMapObj: {},
@@ -61,192 +69,185 @@ class QyAclCmdGenerator {
61
69
  batchSize: 0
62
70
  });
63
71
  }
64
- pushCmd(e, r, t) {
65
- switch (++this.cmdCount, e) {
72
+ pushCmd(r, e, t) {
73
+ switch (++this.cmdCount, r) {
66
74
  case "A":
67
- this._setCmdByNamePath([ "A", r, t ]), this._delCmdByNamePath([ "R", r, t ]);
75
+ o(this, [ "A", e, t ]), f(this, [ "R", e, t ]);
68
76
  break;
69
77
 
70
78
  case "R":
71
- this._setCmdByNamePath([ "R", r, t ]), this._delCmdByNamePath([ "A", r, t ]);
79
+ o(this, [ "R", e, t ]), f(this, [ "A", e, t ]);
72
80
  break;
73
81
 
74
82
  case "D":
75
- if (this._setCmdByNamePath([ "D", r ]), r.startsWith("c")) this._delCmdByNamePath([ "M", r ]); else for (var a of [ "A", "R" ]) this._delCmdByNamePath([ a, r ]);
83
+ if (o(this, [ "D", e ]), e.startsWith("c")) f(this, [ "M", e ]); else for (var a of [ "A", "R" ]) f(this, [ a, e ]);
76
84
  break;
77
85
 
78
86
  case "M":
79
87
  {
80
88
  var n = this.cmdArgAsMapObj;
81
- let e = n.M;
82
- n = (e = null == e ? n.M = {} : e)[r];
83
- e[r] = null != n ? mergeContentChanges(n, t) : t;
89
+ let r = n.M;
90
+ n = (r = null == r ? n.M = {} : r)[e];
91
+ r[e] = null != n ? s(n, t) : t;
84
92
  break;
85
93
  }
86
94
 
87
95
  default:
88
- logger.error(`unsupported cmdName:${e}, called with ${r} ` + t), --this.cmdCount;
96
+ d.error(`unsupported cmdName:${r}, called with ${e} ` + t), --this.cmdCount;
89
97
  }
90
98
  }
91
- pushCmdArgAsListObj(e) {
92
- if (e) {
99
+ pushCmdArgAsListObj(r) {
100
+ if (r) {
93
101
  ++this.batchSize;
94
- var r, t, a, {
102
+ var e, t, a, {
95
103
  D: n,
96
104
  M: s
97
- } = e;
98
- for (r in n) this.pushCmd("D", r);
105
+ } = r;
106
+ for (e in n) this.pushCmd("D", e);
99
107
  for (t of [ "A", "R" ]) {
100
- var i, o = e[t];
101
- for (i in o) for (var l of o[i]) this.pushCmd(t, i, l);
108
+ var i, o = r[t];
109
+ for (i in o) for (var f of o[i]) this.pushCmd(t, i, f);
102
110
  }
103
111
  for (a in s) this.pushCmd("M", a, s[a]);
104
112
  }
105
113
  return this;
106
114
  }
107
115
  takeCmdArgAsListObj() {
108
- var e, r = this.cmdArgAsMapObj;
116
+ var r, e = this.cmdArgAsMapObj;
109
117
  Object.assign(this, {
110
118
  cmdArgAsMapObj: {},
111
119
  cmdCount: 0,
112
120
  batchSize: 0
113
121
  });
114
- for (e of [ "A", "R" ]) {
115
- var t, a = r[e];
122
+ for (r of [ "A", "R" ]) {
123
+ var t, a = e[r];
116
124
  for (t in a) {
117
125
  var n = Object.keys(a[t]);
118
126
  0 < n.length ? a[t] = n : delete a[t];
119
127
  }
120
- isEmptyObj(a) && delete r[e];
128
+ g(a) && delete e[r];
121
129
  }
122
130
  var {
123
131
  D: s,
124
132
  M: i
125
- } = r;
126
- return s && isEmptyObj(s) && delete r.D, i && isEmptyObj(i) && delete r.M,
127
- r;
128
- }
129
- toAclBuffer(e) {
130
- var r = this.batchSize;
131
- if (0 < r) return _toAclBuffer(e, r, this.takeCmdArgAsListObj());
133
+ } = e;
134
+ return s && g(s) && delete e.D, i && g(i) && delete e.M, e;
132
135
  }
133
- _setCmdByNamePath(e, r = 1) {
134
- setValByNamePath(this.cmdArgAsMapObj, e, r);
136
+ toAclBuffer(r) {
137
+ var e, t = this.batchSize;
138
+ if (0 < t) return r = r, t = t, e = this.takeCmdArgAsListObj(), e = Buffer.from(JSON.stringify(e) + "\n"),
139
+ Buffer.concat([ l([ r, t, e.length ]), e ]);
135
140
  }
136
- _delCmdByNamePath(r) {
137
- let t = this.cmdArgAsMapObj;
138
- if (t && r && !(r.length <= 1)) {
139
- for (let e = 0; e < r.length - 1; ++e) if (null == (t = t[r[e]])) return;
140
- delete t[arrayLast(r)];
141
- }
141
+ }
142
+
143
+ function o(r, e, t = 1) {
144
+ a(r.cmdArgAsMapObj, e, t);
145
+ }
146
+
147
+ function f(r, e) {
148
+ let t = r.cmdArgAsMapObj;
149
+ if (t && e && !(e.length <= 1)) {
150
+ for (let r = 0; r < e.length - 1; ++r) if (null == (t = t[e[r]])) return;
151
+ delete t[n(e)];
142
152
  }
143
153
  }
144
154
 
145
- async function readAclFile(r, e = !1, t = 0) {
155
+ async function c(e, r = !1, t = 0) {
146
156
  try {
147
- return await readAclBuffer(r, await fsPromises.readFile(r), e, t);
148
- } catch (e) {
149
- throw logger.error(`Reading ${r} failed:`, e), e;
157
+ return await v(e, await u.readFile(e), r, t);
158
+ } catch (r) {
159
+ throw d.error(`Reading ${e} failed:`, r), r;
150
160
  }
151
161
  }
152
162
 
153
- let ByteCountList = [ 1, 2, 4, 8 ];
163
+ let A = [ 1, 2, 4, 8 ];
154
164
 
155
- function numsToBuffer(r) {
156
- var t = r.length, a = new Array(t), n = new Array(t);
165
+ function l(e) {
166
+ var t = e.length, a = new Array(t), n = new Array(t);
157
167
  let s = t << 6, i = 1;
158
- for (let e = 0; e < t; ++e) {
159
- var o = a[e] = _getByteCountType(r[e]), o = (s |= o << (e << 1), n[e] = ByteCountList[o]);
168
+ for (let r = 0; r < t; ++r) {
169
+ var o = a[r] = (o = e[r]) <= 255 ? 0 : o <= 65535 ? 1 : o <= 4294967295 ? 2 : 3, o = (s |= o << (r << 1),
170
+ n[r] = A[o]);
160
171
  i += o;
161
172
  }
162
- var l = Buffer.allocUnsafe(i);
163
- l.writeUInt8(s);
164
- let f = 1;
165
- for (let e = 0; e < t; ++e) _writeNum(l, r[e], n[e], f), f += n[e];
166
- return l;
167
- }
173
+ var f = Buffer.allocUnsafe(i);
174
+ f.writeUInt8(s);
175
+ let c = 1;
176
+ for (let r = 0; r < t; ++r) {
177
+ h = d = u = l = void 0;
178
+ var [ l, u, d, h = 0 ] = [ f, e[r], n[r], c ];
179
+ switch (d) {
180
+ case 1:
181
+ l.writeUInt8(u, h);
182
+ break;
168
183
 
169
- function bufferToNums(r, t, a) {
170
- var n = r.readUInt8(t), s = (++t, n >> 6 & 3);
171
- for (let e = 0; e < s; ++e) {
172
- var i = ByteCountList[n >> (e << 1) & 3];
173
- a[e] = _readNum(r, i, t), t += i;
174
- }
175
- return t;
176
- }
184
+ case 2:
185
+ l.writeUInt16BE(u, h);
186
+ break;
177
187
 
178
- function _toAclBuffer(e, r, t) {
179
- t = Buffer.from(JSON.stringify(t) + "\n");
180
- return Buffer.concat([ numsToBuffer([ e, r, t.length ]), t ]);
181
- }
188
+ case 4:
189
+ l.writeUInt32BE(u, h);
190
+ break;
182
191
 
183
- async function readAclBuffer(t, e, a, n) {
184
- var s = [];
185
- for (let r = 0; r < e.length; ) {
186
- var i = [], o = bufferToNums(e, r, i), [ i, l, f ] = i;
187
- if (i <= n) logger.warn(`changeId ${i} <= currentChangeId ${n} at ${t}:${r}. Ignored.`),
188
- r = o + f; else {
189
- n + l != i && logger.warn(`currentChangeId ${n} + batchSize ${l} != changeId ` + i);
190
- try {
191
- var u = JSON.parse(e.subarray(o, o + f));
192
- s.push([ i, u ]), n = i, r = o + f;
193
- } catch (e) {
194
- if (logger.error(`Parse ${t} failed at ${r}:`, e), a) return logger.warn(`Autorepair by truncating ${t} to ` + r),
195
- null == (l = await fsPromises.truncate(t, r)) ? logger.log("truncate success") : logger.error("truncate failed:", l),
196
- s;
197
- throw e;
198
- }
192
+ default:
193
+ l.writeBigUInt64BE(BigInt(u), h);
199
194
  }
195
+ c += n[r];
200
196
  }
201
- return s;
197
+ return f;
202
198
  }
203
199
 
204
- function _writeNum(e, r, t, a = 0) {
205
- switch (t) {
206
- case 1:
207
- e.writeUInt8(r, a);
208
- break;
200
+ function h(e, t, a) {
201
+ var n = e.readUInt8(t), s = (++t, n >> 6 & 3);
202
+ for (let r = 0; r < s; ++r) {
203
+ var i = A[n >> (r << 1) & 3];
204
+ a[r] = ((r, e, t = 0) => {
205
+ switch (e) {
206
+ case 1:
207
+ return r.readUInt8(t);
209
208
 
210
- case 2:
211
- e.writeUInt16BE(r, a);
212
- break;
209
+ case 2:
210
+ return r.readUInt16BE(t);
213
211
 
214
- case 4:
215
- e.writeUInt32BE(r, a);
216
- break;
212
+ case 4:
213
+ return r.readUInt32BE(t);
217
214
 
218
- default:
219
- e.writeBigUInt64BE(BigInt(r), a);
215
+ default:
216
+ return Number(r.readBigUInt64BE(t));
217
+ }
218
+ })(e, i, t), t += i;
220
219
  }
220
+ return t;
221
221
  }
222
222
 
223
- function _readNum(e, r, t = 0) {
224
- switch (r) {
225
- case 1:
226
- return e.readUInt8(t);
227
-
228
- case 2:
229
- return e.readUInt16BE(t);
230
-
231
- case 4:
232
- return e.readUInt32BE(t);
233
-
234
- default:
235
- return Number(e.readBigUInt64BE(t));
223
+ async function v(t, r, a, n) {
224
+ var s = [];
225
+ for (let e = 0; e < r.length; ) {
226
+ var i = [], o = h(r, e, i), [ i, f, c ] = i;
227
+ if (i <= n) d.warn(`changeId ${i} <= currentChangeId ${n} at ${t}:${e}. Ignored.`),
228
+ e = o + c; else {
229
+ n + f != i && d.warn(`currentChangeId ${n} + batchSize ${f} != changeId ` + i);
230
+ try {
231
+ var l = JSON.parse(r.subarray(o, o + c));
232
+ s.push([ i, l ]), n = i, e = o + c;
233
+ } catch (r) {
234
+ if (d.error(`Parse ${t} failed at ${e}:`, r), a) return d.warn(`Autorepair by truncating ${t} to ` + e),
235
+ null == (f = await u.truncate(t, e)) ? d.log("truncate success") : d.error("truncate failed:", f),
236
+ s;
237
+ throw r;
238
+ }
239
+ }
236
240
  }
241
+ return s;
237
242
  }
238
243
 
239
- function _getByteCountType(e) {
240
- return e <= 255 ? 0 : e <= 65535 ? 1 : e <= 4294967295 ? 2 : 3;
241
- }
242
-
243
- Object.assign(module.exports, {
244
- QyAclCmdGenerator: QyAclCmdGenerator,
245
- applyAclChange: applyAclChange,
246
- iterCmdKeys: iterCmdKeys,
247
- readAclFile: readAclFile,
248
- readAclBuffer: readAclBuffer,
249
- numsToBuffer: numsToBuffer,
250
- bufferToNums: bufferToNums,
251
- delCmdKey: delCmdKey
252
- });
244
+ export {
245
+ i as QyAclCmdGenerator,
246
+ e as applyAclChange,
247
+ t as iterCmdKeys,
248
+ c as readAclFile,
249
+ v as readAclBuffer,
250
+ l as numsToBuffer,
251
+ h as bufferToNums,
252
+ r as delCmdKey
253
+ };
package/src/QyAclSaver.js CHANGED
@@ -1,14 +1,20 @@
1
- let QyMessager = require("./QyMessager.js").QyMessager, getDefaultOptions = require("./QyDefaultOptions.js").getDefaultOptions;
1
+ import {
2
+ QyMessager as s
3
+ } from "./QyMessager.js";
2
4
 
3
- class QyAclSaver extends QyMessager {
4
- constructor(e, s) {
5
- super(e, "QyAclSaver_Worker.js", s = {
6
- ...getDefaultOptions("QyAclSaver"),
7
- ...s
8
- }, s, [ "callSave" ], [ "switch", "castSave" ]);
5
+ import {
6
+ getDefaultOptions as a
7
+ } from "./QyDefaultOptions.js";
8
+
9
+ class e extends s {
10
+ constructor(s, e) {
11
+ super(s, "QyAclSaver_Worker.js", e = {
12
+ ...a("QyAclSaver"),
13
+ ...e
14
+ }, e, [ "callSave" ], [ "switch", "castSave" ]);
9
15
  }
10
16
  }
11
17
 
12
- Object.assign(module.exports, {
13
- QyAclSaver: QyAclSaver
14
- });
18
+ export {
19
+ e as QyAclSaver
20
+ };