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
@@ -1,5 +1,5 @@
1
1
  import {
2
- rpc as t
2
+ rpc as f
3
3
  } from "./QyUIUtils.js";
4
4
 
5
5
  import {
@@ -7,10 +7,10 @@ import {
7
7
  } from "./QyUIFolderTree.js";
8
8
 
9
9
  import {
10
- h as o
10
+ h as l
11
11
  } from "./hscrpt.js";
12
12
 
13
- let s = {
13
+ let n = {
14
14
  showHiddenFolder: !1
15
15
  };
16
16
 
@@ -20,32 +20,25 @@ customElements.define("explore-tree", class extends e {
20
20
  }
21
21
  connectedCallback() {
22
22
  super.connectedCallback();
23
- var e = s.showHiddenFolder, t = (this._appendToolbar(e), this.checkTooltip = new bootstrap.Tooltip(this.checkLabel),
24
- this).folderTree, o = (t.on("fetch", async e => {
25
- await this._loadSubItems(e), e.resolve(), e == this.selectedElement && this._showSelectedDir(e);
26
- }), t.asyncFolder({
27
- name: "/",
28
- open: !0
29
- }));
30
- Object.assign(this, {
31
- showHiddenFolder: e,
32
- rootFolder: o
33
- }), t.select(o);
34
- }
35
- _appendToolbar(e) {
36
- this.toolbarDiv.append(this._createShowHiddenCheck(e));
37
- }
38
- _createShowHiddenCheck(e) {
39
- return o("div", {
23
+ var e = n.showHiddenFolder, t = ((t = this).toolbarDiv.append(((n, e) => l("div", {
40
24
  classList: "btn-group btn-group-sm ms-1",
41
25
  role: "group"
42
- }, [ o("input", {
26
+ }, [ l("input", {
43
27
  type: "checkbox",
44
28
  classList: "btn-check",
45
29
  id: "showHiddenFolderCheck",
46
30
  checked: e,
47
- onchange: () => this._toggleShowHiddenFolder()
48
- }), this.checkLabel = o("label", {
31
+ onchange: () => {
32
+ var e = n, {
33
+ showHiddenFolder: t,
34
+ rootHiddenFolder: o,
35
+ checkTooltip: l
36
+ } = e;
37
+ e.showHiddenFolder = !t, o && (o.parentElement.hidden = t), l.setContent({
38
+ ".tooltip-inner": (t ? "Show" : "Hide") + " hidden folder"
39
+ });
40
+ }
41
+ }), n.checkLabel = l("label", {
49
42
  classList: "btn btn-outline-primary",
50
43
  "data-bs-toggle": "tooltip",
51
44
  "data-bs-placement": "top",
@@ -53,70 +46,62 @@ customElements.define("explore-tree", class extends e {
53
46
  attrs: {
54
47
  for: "showHiddenFolderCheck"
55
48
  }
56
- }, [ o("i", {
49
+ }, [ l("i", {
57
50
  classList: "bi bi-window-plus"
58
- }) ]) ]);
59
- }
60
- _toggleShowHiddenFolder() {
61
- var {
51
+ }) ]) ]))(t, e)), this.checkTooltip = new bootstrap.Tooltip(this.checkLabel),
52
+ this).folderTree, o = (t.on("fetch", async e => {
53
+ var t = this, o = e, l = o.dataset, {
54
+ namePath: n,
55
+ folderTree: s,
56
+ rootFolder: i,
57
+ showHiddenFolder: d
58
+ } = t;
59
+ if (n = await (e => f("getSubItems", {
60
+ dirPath: e
61
+ }))(n)) {
62
+ var {
63
+ fullPathHash: n,
64
+ subdirList: r,
65
+ fileList: a
66
+ } = n;
67
+ n && (l.fullPathHash = n);
68
+ let e;
69
+ if (0 < r.length) {
70
+ for (var h of r) o == i && "%" == h ? e = !0 : s.asyncFolder({
71
+ name: h
72
+ }, o);
73
+ l.subdirCount = r.length;
74
+ }
75
+ if (e && ((n = s.asyncFolder({
76
+ name: "%"
77
+ }, o)).parentElement.hidden = !d, t.rootHiddenFolder = n), 0 < a.length) {
78
+ for (var c of a) s.file({
79
+ name: c
80
+ }, o);
81
+ l.fileCount = a.length;
82
+ }
83
+ }
84
+ await 0, e.resolve(), e == this.selectedElement && this.showSelectedDir(e);
85
+ }), t.asyncFolder({
86
+ name: "/",
87
+ open: !0
88
+ }));
89
+ Object.assign(this, {
62
90
  showHiddenFolder: e,
63
- rootHiddenFolder: t,
64
- checkTooltip: o
65
- } = this;
66
- this.showHiddenFolder = !e, t && (t.parentElement.hidden = e), o.setContent({
67
- ".tooltip-inner": (e ? "Show" : "Hide") + " hidden folder"
68
- });
91
+ rootFolder: o
92
+ }), t.select(o);
69
93
  }
70
- async _showSelectedFile(e) {
94
+ async showSelectedFile(e) {
71
95
  var t, o = e.dataset, {
72
- namePath: s,
96
+ namePath: l,
73
97
  fileContentMap: n
74
98
  } = this;
75
- let i;
76
- i = o.fileContentKey ? n[o.fileContentKey] : ({
77
- fileContent: s,
99
+ let s;
100
+ s = o.fileContentKey ? n[o.fileContentKey] : ({
101
+ fileContent: l,
78
102
  fileContentKey: t
79
- } = await this._getFileContent(s), n[o.fileContentKey = t] = s), e == this.selectedElement && this._showJson(i);
80
- }
81
- async _loadSubItems(t) {
82
- var o = t.dataset, {
83
- namePath: s,
84
- folderTree: n,
85
- rootFolder: i,
86
- showHiddenFolder: l
87
- } = this, s = await this._getSubItems(s);
88
- if (s) {
89
- var {
90
- fullPathHash: s,
91
- subdirList: d,
92
- fileList: r
93
- } = s;
94
- s && (o.fullPathHash = s);
95
- let e;
96
- if (0 < d.length) {
97
- for (var a of d) t == i && "%" == a ? e = !0 : n.asyncFolder({
98
- name: a
99
- }, t);
100
- o.subdirCount = d.length;
101
- }
102
- if (e && ((s = n.asyncFolder({
103
- name: "%"
104
- }, t)).parentElement.hidden = !l, this.rootHiddenFolder = s), 0 < r.length) {
105
- for (var h of r) n.file({
106
- name: h
107
- }, t);
108
- o.fileCount = r.length;
109
- }
110
- }
111
- }
112
- _getSubItems(e) {
113
- return t("getSubItems", {
114
- dirPath: e
115
- });
116
- }
117
- _getFileContent(e) {
118
- return t("getFileContent", {
119
- filePath: e
120
- });
103
+ } = await f("getFileContent", {
104
+ filePath: l
105
+ }), n[o.fileContentKey = t] = l), e == this.selectedElement && this.showContent(s);
121
106
  }
122
107
  });
@@ -4,3 +4,10 @@
4
4
  body {
5
5
  height: 100vh;
6
6
  }
7
+ .cm-editor {
8
+ background-color: white !important;
9
+ }
10
+ /*disable codemirror hightlight current line*/
11
+ .cm-activeLine {
12
+ background-color: transparent !important;
13
+ }
@@ -15,6 +15,7 @@
15
15
  <script src="../tree.js/tree.js"></script>
16
16
  <script src="../json-view/dist/jsonview.js"></script>
17
17
  <script src="../bootstrap-5.3.8-dist/js/bootstrap.bundle.js"></script>
18
+ <script src="../codemirror.bundle/editor.bundle.js"></script>
18
19
  <script type="module" src="main-page.js"></script>
19
20
  </body>
20
21
  </html>
@@ -6,7 +6,7 @@ import "./explore-tree.js";
6
6
 
7
7
  import "./query-editor.js";
8
8
 
9
- let d = {
9
+ let l = {
10
10
  brandName: "datafolder UI",
11
11
  tabNames: [ "Explore", "Query", "RPC", "Triggers" ]
12
12
  };
@@ -19,24 +19,46 @@ customElements.define("main-page", class extends HTMLElement {
19
19
  var {
20
20
  brandName: e,
21
21
  tabNames: t
22
- } = d;
23
- this.append(this._createNav(e, t), this._createTabDivs(t));
22
+ } = l;
23
+ this.append(o("nav", {
24
+ classList: "navbar bg-body-tertiary"
25
+ }, [ ((e, t, a) => o("div", {
26
+ classList: "container-fluid"
27
+ }, [ (e => o("a", {
28
+ classList: "navbar-brand"
29
+ }, [ e ]))(t), ((e, t) => o("ul", {
30
+ classList: "nav nav-pills me-auto mb-2 mb-lg-0"
31
+ }, e.tabButtons = t.map(e => o("button", {
32
+ classList: "nav-link",
33
+ id: `pills-${e}-tab`,
34
+ "data-bs-toggle": "pill",
35
+ "data-bs-target": "#pills-" + e,
36
+ type: "button",
37
+ role: "tab"
38
+ }, [ e ]))))(e, a) ]))(this, e, t) ]), o("div", {
39
+ classList: "tab-content",
40
+ id: "pills-tabContent"
41
+ }, this.tabDivs = t.map(e => o("div", {
42
+ classList: "tab-pane",
43
+ id: "pills-" + e,
44
+ role: "tabpanel"
45
+ }))));
24
46
  let {
25
- tabButtons: [ a, r ],
26
- tabDivs: [ s, n ]
47
+ tabButtons: [ a, s ],
48
+ tabDivs: [ n, i ]
27
49
  } = this;
28
50
  bootstrap.Tab.getOrCreateInstance(a).show();
29
51
  e = o("explore-tree");
30
- s.appendChild(e);
31
- let i = o("query-editor");
32
- n.appendChild(i), Object.assign(this, {
52
+ n.appendChild(e);
53
+ let r = o("query-editor");
54
+ i.appendChild(r), Object.assign(this, {
33
55
  exploreTree: e,
34
- queryEditor: i
35
- }), i.addEventListener("run", () => r.click());
56
+ queryEditor: r
57
+ }), r.addEventListener("run", () => s.click());
36
58
  t = () => this.onSizeChange();
37
59
  document.addEventListener("DOMContentLoaded", t), window.addEventListener("resize", t),
38
- r.addEventListener("shown.bs.tab", () => {
39
- i.onSizeChange();
60
+ s.addEventListener("shown.bs.tab", () => {
61
+ r.onSizeChange();
40
62
  });
41
63
  }
42
64
  onSizeChange() {
@@ -46,49 +68,6 @@ customElements.define("main-page", class extends HTMLElement {
46
68
  } = this;
47
69
  e.onSizeChange(), t.onSizeChange();
48
70
  }
49
- _createNav(e, t) {
50
- return o("nav", {
51
- classList: "navbar bg-body-tertiary"
52
- }, [ this._createNavBar(e, t) ]);
53
- }
54
- _createNavBar(e, t) {
55
- return o("div", {
56
- classList: "container-fluid"
57
- }, [ this._createBrand(e), this._createTabButtons(t) ]);
58
- }
59
- _createTabButtons(e) {
60
- return o("ul", {
61
- classList: "nav nav-pills me-auto mb-2 mb-lg-0"
62
- }, this.tabButtons = e.map(e => this._createTabButton(e)));
63
- }
64
- _createTabDivs(e) {
65
- return o("div", {
66
- classList: "tab-content",
67
- id: "pills-tabContent"
68
- }, this.tabDivs = e.map(e => this._createTabDiv(e)));
69
- }
70
- _createBrand(e) {
71
- return o("a", {
72
- classList: "navbar-brand"
73
- }, [ e ]);
74
- }
75
- _createTabDiv(e) {
76
- return o("div", {
77
- classList: "tab-pane",
78
- id: "pills-" + e,
79
- role: "tabpanel"
80
- });
81
- }
82
- _createTabButton(e) {
83
- return o("button", {
84
- classList: "nav-link",
85
- id: `pills-${e}-tab`,
86
- "data-bs-toggle": "pill",
87
- "data-bs-target": "#pills-" + e,
88
- type: "button",
89
- role: "tab"
90
- }, [ e ]);
91
- }
92
71
  }), document.body.append(o("main-page"));
93
72
 
94
73
  import {