datafolder 1.0.5 → 1.0.6

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 (70) hide show
  1. package/README.md +4 -1
  2. package/data/sampleDataFolder/qykv/history/acl/1_acl.txt +1 -0
  3. package/data/sampleDataFolder/qykv/history/acl/2_acl.txt +1 -0
  4. package/data/sampleDataFolder/qykv/history/acl/3_acl.txt +1 -0
  5. package/data/sampleDataFolder/qykv/history/acl/4_acl.txt +1 -0
  6. package/data/sampleDataFolder/qykv/history/acl/5_acl.txt +1 -0
  7. package/data/sampleDataFolder/qykv/snapshot/1/1_pM.txt +0 -0
  8. package/data/sampleDataFolder/qykv/snapshot/1/1_prefixPM.txt +0 -0
  9. package/data/sampleDataFolder/qykv/snapshot/1/1_vL.txt +10 -0
  10. package/data/sampleDataFolder/qykv/snapshot/2/1_pM.txt +0 -0
  11. package/data/sampleDataFolder/qykv/snapshot/2/1_prefixPM.txt +0 -0
  12. package/data/sampleDataFolder/qykv/snapshot/2/1_vL.txt +1 -0
  13. package/data/sampleDataFolder/qykv/snapshot/3/1_pM.txt +0 -0
  14. package/data/sampleDataFolder/qykv/snapshot/3/1_prefixPM.txt +0 -0
  15. package/data/sampleDataFolder/qykv/snapshot/3/1_vL.txt +1 -0
  16. package/data/sampleDataFolder/qykv/snapshot/4/1_pM.txt +0 -0
  17. package/data/sampleDataFolder/qykv/snapshot/4/1_prefixPM.txt +0 -0
  18. package/data/sampleDataFolder/qykv/snapshot/4/1_vL.txt +1 -0
  19. package/data/sampleDataFolder/qykv/snapshot/4/2_pM.txt +0 -0
  20. package/data/sampleDataFolder/qykv/snapshot/4/2_prefixPM.txt +0 -0
  21. package/data/sampleDataFolder/qykv/snapshot/4/2_vL.txt +9 -0
  22. package/data/sampleDataFolder/qykv/snapshot/5/1_pM.txt +0 -0
  23. package/data/sampleDataFolder/qykv/snapshot/5/1_prefixPM.txt +0 -0
  24. package/data/sampleDataFolder/qykv/snapshot/5/1_vL.txt +55 -0
  25. package/data/sampleDataFolder/qykv/snapshot/info/1.json +1 -0
  26. package/data/sampleDataFolder/qykv/snapshot/info/2.json +1 -0
  27. package/data/sampleDataFolder/qykv/snapshot/info/3.json +1 -0
  28. package/data/sampleDataFolder/qykv/snapshot/info/4.json +1 -0
  29. package/data/sampleDataFolder/qykv/snapshot/info/5.json +1 -0
  30. package/data/sampleDataFolder/qylog/2026/02/15/08/change.txt +58 -0
  31. package/data/sampleDataFolder/qylog/2026/02/15/08/stderr.txt +11 -0
  32. package/data/sampleDataFolder/qylog/2026/02/15/08/stdout.txt +36 -0
  33. package/package.json +1 -1
  34. package/sample.js +19 -19
  35. package/src/QyAcl.js +44 -44
  36. package/src/QyAclSaver_Worker.js +2 -2
  37. package/src/QyAclWriter.js +1 -1
  38. package/src/QyBatch.js +1 -3
  39. package/src/QyBinWriter.js +65 -66
  40. package/src/QyCD.js +63 -27
  41. package/src/QyCache.js +33 -33
  42. package/src/QyDB.js +4 -30
  43. package/src/QyDefaultOptions.js +2 -1
  44. package/src/QyFetch.js +4 -22
  45. package/src/QyFileLogger.js +2 -2
  46. package/src/QyKVData.js +159 -183
  47. package/src/QyKVDataCleaner_Worker.js +15 -14
  48. package/src/QyKVDataSaver_Worker.js +16 -16
  49. package/src/QyLogFileSaver.js +1 -1
  50. package/src/QyLogFileSaver_Worker.js +2 -2
  51. package/src/QyMod.js +7 -7
  52. package/src/QyOpRunner.js +19 -16
  53. package/src/QySnapshotCompactor_Worker.js +37 -36
  54. package/src/QySnapshotSaver_Worker.js +2 -2
  55. package/src/QySnapshots.js +141 -139
  56. package/src/QyUnionNode.js +2 -2
  57. package/src/rpc/evalCode.js +4 -4
  58. package/src/rpc/getFileContent.js +4 -4
  59. package/src/rpc/getSubItems.js +12 -12
  60. package/src/rpc/queryFiles.js +1 -1
  61. package/static/codemirror.bundle/editor.bundle.js +27906 -0
  62. package/static/datafolderui/QyUIFolderTree.js +121 -145
  63. package/static/datafolderui/QyUIUtils.js +9 -4
  64. package/static/datafolderui/code-mirror.js +35 -0
  65. package/static/datafolderui/display-tree.js +52 -86
  66. package/static/datafolderui/explore-tree.js +66 -81
  67. package/static/datafolderui/index.css +7 -0
  68. package/static/datafolderui/index.html +1 -0
  69. package/static/datafolderui/main-page.js +34 -55
  70. package/static/datafolderui/query-editor.js +178 -198
package/src/QyMod.js CHANGED
@@ -1,16 +1,16 @@
1
- import m from "node:module";
1
+ import a from "node:module";
2
2
 
3
3
  import {
4
- logger as a
4
+ logger as m
5
5
  } from "./QyLogger.js";
6
6
 
7
- function o(r, e, i, o) {
8
- if (i) try {
9
- var t = r + "_" + e, d = `_${t}_qydb`, l = (globalThis[d] = o, new m(e));
10
- return l._compile(`(function(qyDB){${i}})(${d});`, t + ".js"), delete globalThis[d],
7
+ function o(r, e, d, o) {
8
+ if (d) try {
9
+ var i = r + "_" + e, t = `_${i}_qydb`, l = (globalThis[t] = o, new a(e));
10
+ return l._compile(`(function(dataFolder){${d}})(${t});`, i + ".js"), delete globalThis[t],
11
11
  l.exports;
12
12
  } catch (o) {
13
- a.error("requireFromModCode failed:", r, e, i, o);
13
+ m.error("requireFromModCode failed:", r, e, d, o);
14
14
  }
15
15
  }
16
16
 
package/src/QyOpRunner.js CHANGED
@@ -9,23 +9,23 @@ import {
9
9
  } from "./QyLogger.js";
10
10
 
11
11
  import {
12
- getDefaultOptions as i
12
+ getDefaultOptions as r
13
13
  } from "./QyDefaultOptions.js";
14
14
 
15
15
  import {
16
- QyQueue as n
16
+ QyQueue as i
17
17
  } from "./QyQueue.js";
18
18
 
19
19
  class e extends s {
20
20
  constructor(s, t = [], e = []) {
21
21
  super(), s = {
22
- ...i("QyOpRunner"),
22
+ ...r("QyOpRunner"),
23
23
  ...s
24
24
  }, Object.assign(this, {
25
25
  options: s,
26
26
  running: !1,
27
- opQueue: new n(s)
28
- }), r(this, t, !0), r(this, e);
27
+ opQueue: new i(s)
28
+ }), n(this, t, !0), n(this, e), n(this, [ "start", "stop" ], !0);
29
29
  }
30
30
  get firstOp() {
31
31
  return this.opQueue.first;
@@ -50,38 +50,41 @@ class e extends s {
50
50
  for (var s = this.opQueue; !s.isEmpty; ) {
51
51
  var t = s.shift(), {
52
52
  opFunName: e,
53
- eventName: i,
54
- resolve: n,
55
- args: r
53
+ eventName: r,
54
+ resolve: i,
55
+ args: n
56
56
  } = t;
57
57
  if (e) {
58
58
  this.runningOp = t;
59
59
  try {
60
- var o = await (r ? this[e](...r) : this[e]());
61
- n && n(o), i && this.emit(i, o);
60
+ var o = await (n ? this[e](...n) : this[e]());
61
+ i && i(o), r && this.emit(r, o);
62
62
  } catch (s) {
63
- u.error(`Run ${e} failed:`, s), i && this.emit(i, s);
63
+ u.error(`Run ${e} failed:`, s), r && this.emit(r, s);
64
64
  }
65
65
  this.runningOp = void 0;
66
- } else n && n(), i && this.emit(i);
66
+ } else i && i(), r && this.emit(r);
67
67
  }
68
68
  this.running = !1;
69
69
  }
70
70
  }
71
71
  }
72
72
 
73
- function r(i, s, n) {
73
+ function n(r, s, i) {
74
74
  for (let e of s) {
75
75
  let t = "_op_" + e;
76
- i[e] || (i[e] = n ? (...s) => i.pushAndRunWithPromise({
76
+ if (r[e] || (r[e] = i ? (...s) => r.pushAndRunWithPromise({
77
77
  opName: e,
78
78
  opFunName: t,
79
79
  args: s
80
- }) : (...s) => i.pushAndRun({
80
+ }) : (...s) => r.pushAndRun({
81
81
  opName: e,
82
82
  opFunName: t,
83
83
  args: s
84
- })), i[t] || (i[t] = () => u.error(`Class method ${t} not implemented.`));
84
+ })), !r[t]) {
85
+ let s = r.constructor.name + " not implemented " + t;
86
+ r[t] = () => u.error(s), u.error(s);
87
+ }
85
88
  }
86
89
  }
87
90
 
@@ -24,7 +24,6 @@ import {
24
24
 
25
25
  import {
26
26
  isEmptyObj as r,
27
- listToMap as y,
28
27
  readBufferAsync as l
29
28
  } from "./QyUtils.js";
30
29
 
@@ -44,13 +43,14 @@ class s extends a {
44
43
  qySnapshots: new n(o, s),
45
44
  qyKVDataCleaner: new p(this, a, s),
46
45
  pMInfoMap: {},
47
- vLInfoMap: {}
46
+ vLInfoMap: {},
47
+ combinedSnapshotNumList: []
48
48
  });
49
49
  }
50
- start() {
50
+ _op_start() {
51
51
  this.qyKVDataCleaner.start();
52
52
  }
53
- async stop() {
53
+ async _op_stop() {
54
54
  await this.qyKVDataCleaner.stop();
55
55
  }
56
56
  async _op_compactSnapshots(a, o, s) {
@@ -91,53 +91,54 @@ class s extends a {
91
91
  0 < s.length && e.push((async (a, s, o) => {
92
92
  var t, {
93
93
  qySnapshots: e,
94
- vLInfoMap: p
95
- } = a, n = e.getMaxCombinedSnapshot(s), {
96
- snapshotNum: i,
97
- info: r,
98
- keyValueMap: f
99
- } = (await M(a, n), n), h = (Object.assign(n, {
94
+ vLInfoMap: p,
95
+ combinedSnapshotNumList: n
96
+ } = a, i = e.getMaxCombinedSnapshot(s), {
97
+ snapshotNum: r,
98
+ info: f,
99
+ keyValueMap: h
100
+ } = (await M(a, i), i);
101
+ Object.assign(i, {
100
102
  posMap: void 0,
101
103
  prefixPM: void 0
102
- }), []);
103
- for (t of s) t != n && (h.push(t.snapshotNum), await M(a, t), Object.assign(f, t.keyValueMap),
104
+ });
105
+ for (t of s) t != i && (n.push(t.snapshotNum), await M(a, t), Object.assign(h, t.keyValueMap),
104
106
  Object.assign(t, {
105
107
  keyValueMap: void 0,
106
108
  posMap: void 0,
107
109
  prefixPM: void 0
108
110
  }));
109
- await e.saveKeyValueMap(n), p[i] = r, o.combineUpdate = {
110
- snapshotNum: i,
111
- combinedSnapshotNumList: h,
112
- posMap: n.posMap
111
+ await e.saveKeyValueMap(i), p[r] = f, o.combineUpdate = {
112
+ snapshotNum: r,
113
+ combinedSnapshotNumList: n,
114
+ posMap: i.posMap
113
115
  };
114
116
  })(this, s, t)), await Promise.all(e), this.castParent("onCompactUpdates", t);
115
117
  }
116
- async _op_saveSnapshotInfos(a) {
117
- var s, o, {
118
- qySnapshots: t,
119
- pMInfoMap: e,
120
- vLInfoMap: p,
118
+ async _op_saveSnapshotInfos() {
119
+ var a, s, {
120
+ qySnapshots: o,
121
+ pMInfoMap: t,
122
+ vLInfoMap: e,
123
+ combinedSnapshotNumList: p,
121
124
  qyKVDataCleaner: n
122
125
  } = this, i = (Object.assign(this, {
123
126
  pMInfoMap: {},
124
127
  vLInfoMap: {}
125
- }), y(a)), r = [];
126
- for (s in e) s in i && r.push(t.saveSnapshotInfo(s, e[s]));
127
- for (o in p) o in i && r.push(t.saveSnapshotInfo(o, p[o]));
128
- if (0 < r.length) {
129
- await Promise.all(r);
130
- var f, h, l = [];
131
- for (f in e) {
132
- var M = e[f];
133
- l.push([ f, M.pMVersion ]);
134
- }
135
- for (h in p) {
136
- var v = p[h];
137
- l.push([ h, v.pMVersion ]), n.cleanVLFiles(h, v.vLVersion);
138
- }
139
- n.cleanPMFiles(l);
128
+ }), []);
129
+ for (a in t) i.push(o.saveSnapshotInfo(a, t[a]));
130
+ for (s in e) i.push(o.saveSnapshotInfo(s, e[s]));
131
+ await Promise.all(i);
132
+ var r, f, h = [];
133
+ for (r in t) {
134
+ var l = t[r];
135
+ h.push([ r, l.pMVersion ]);
136
+ }
137
+ for (f in e) {
138
+ var M = e[f];
139
+ h.push([ f, M.pMVersion ]), n.cleanVLFiles(f, M.vLVersion);
140
140
  }
141
+ n.cleanPMFiles(h), 0 < p.length && (n.removeSnapshotsFiles(p), p.length = 0);
141
142
  }
142
143
  }
143
144
 
@@ -26,7 +26,7 @@ class s extends a {
26
26
  super(s = {
27
27
  ...o("QySnapshotSaver_Worker"),
28
28
  ...s
29
- }, [ "stop", "waitForSnapshotSaved" ]);
29
+ }, [], [ "waitForSnapshotSaved" ]);
30
30
  var t = e(a, "snapshot");
31
31
  Object.assign(this, {
32
32
  kvFolder: a,
@@ -36,7 +36,7 @@ class s extends a {
36
36
  aclKeyValueMap: {}
37
37
  });
38
38
  }
39
- start(a, s, t) {
39
+ _op_start(a, s, t) {
40
40
  this.maxChangeId = a, this.qyKVDataCleaner.start(), s && this.waitForSnapshotSaved(h(this, s, a, t));
41
41
  }
42
42
  castSave(a, s, t) {