datafolder 1.0.5 → 1.0.7

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 (49) hide show
  1. package/README.md +5 -0
  2. package/internal.md +119 -0
  3. package/package.json +2 -2
  4. package/sample.js +19 -19
  5. package/scripts/convertBinFiles.js +49 -0
  6. package/scripts/fastify.js +2 -2
  7. package/src/QyAcl.js +44 -44
  8. package/src/QyAclSaver_Worker.js +2 -2
  9. package/src/QyAclWriter.js +1 -1
  10. package/src/QyBatch.js +1 -3
  11. package/src/QyBinWriter.js +65 -66
  12. package/src/QyCD.js +72 -27
  13. package/src/QyCache.js +39 -33
  14. package/src/QyDB.js +4 -30
  15. package/src/QyDefaultOptions.js +2 -1
  16. package/src/QyFetch.js +4 -22
  17. package/src/QyFileLogger.js +2 -2
  18. package/src/QyKVData.js +168 -183
  19. package/src/QyKVDataCleaner_Worker.js +15 -14
  20. package/src/QyKVDataSaver_Worker.js +20 -20
  21. package/src/QyLogFileSaver.js +1 -1
  22. package/src/QyLogFileSaver_Worker.js +2 -2
  23. package/src/QyMod.js +7 -7
  24. package/src/QyOpRunner.js +19 -16
  25. package/src/QySnapshotCompactor_Worker.js +54 -52
  26. package/src/QySnapshotSaver_Worker.js +55 -53
  27. package/src/QySnapshots.js +157 -147
  28. package/src/QyUnionNode.js +2 -2
  29. package/src/rpc/evalCode.js +4 -4
  30. package/src/rpc/getFileContent.js +4 -4
  31. package/src/rpc/getSubItems.js +12 -12
  32. package/src/rpc/getTriggerFiles.js +1 -0
  33. package/src/rpc/queryFiles.js +1 -1
  34. package/src/soc_pokec.js +7 -7
  35. package/static/codemirror.bundle/editor.bundle.js +27906 -0
  36. package/static/datafolderui/QyStyledElement.js +6 -15
  37. package/static/datafolderui/QyUIFolderTree.js +130 -145
  38. package/static/datafolderui/QyUIFolderViewer.js +210 -0
  39. package/static/datafolderui/QyUIUtils.js +10 -5
  40. package/static/datafolderui/code-mirror.js +35 -0
  41. package/static/datafolderui/display-tree.js +21 -94
  42. package/static/datafolderui/explore-tree.js +66 -81
  43. package/static/datafolderui/folder-tree.js +71 -2
  44. package/static/datafolderui/index.css +7 -0
  45. package/static/datafolderui/index.html +1 -0
  46. package/static/datafolderui/json-view.js +7 -3
  47. package/static/datafolderui/main-page.js +42 -60
  48. package/static/datafolderui/query-editor.js +178 -198
  49. package/static/datafolderui/trigger-editor.js +30 -0
@@ -1,108 +1,35 @@
1
1
  import {
2
- h
2
+ h as t
3
3
  } from "./hscrpt.js";
4
4
 
5
5
  import {
6
- rpc
7
- } from "./QyUIUtils.js";
6
+ QyUIFolderViewer as e
7
+ } from "./QyUIFolderViewer.js";
8
8
 
9
- import {
10
- QyUIFolderTree
11
- } from "./QyUIFolderTree.js";
12
-
13
- customElements.define("display-tree", class extends QyUIFolderTree {
9
+ customElements.define("display-tree", class extends e {
14
10
  constructor() {
15
11
  super();
16
12
  }
17
13
  connectedCallback() {
18
- super.connectedCallback(), this._appendToolbar();
19
- var e = this.folderTree;
20
- this.rootFolder = e.folder({
21
- name: "/",
22
- open: !0
23
- }), e.select(this.rootFolder);
24
- }
25
- showTree(e, t) {
26
- this._resetTree(), this._resetPathTabs(), this.countSpan.innerText = t,
27
- this.msgSpan.innerText = "Total " + t, this.rootFolder = this.folderTree.folder({
28
- name: "/",
29
- open: !0
30
- }), this._constructFolderTree(this.rootFolder, e), this.folderTree.select(this.rootFolder),
31
- this.tree = e;
32
- }
33
- _appendToolbar() {
34
- this.toolbarDiv.append(this._createCountSpan());
35
- }
36
- _createCountSpan() {
37
- return this.countSpan = h("span", {
14
+ var e;
15
+ super.connectedCallback(), (e = this).toolbarDiv.append((e => e.countSpan = t("span", {
38
16
  classList: "btn btn-success ms-auto"
39
- }, [ "0" ]);
40
- }
41
- _resetTree() {
42
- this._deleteJsonTree();
43
- var {
44
- rootFolder: e,
45
- countSpan: t,
46
- msgSpan: r
47
- } = this;
48
- t.innerText = "0", r.innerText = "", e && (e.parentElement.remove(), Object.assign(this, {
49
- rootFolder: void 0,
50
- fileContentMap: {}
51
- }));
17
+ }, [ "0" ]))(e));
52
18
  }
53
- async _queryFiles() {
54
- let {
55
- countSpan,
56
- queryEditor
57
- } = this, {
58
- queryText
59
- } = queryEditor;
60
- try {
61
- eval("((x)=>x)(" + queryText + ")");
62
- } catch (exception) {
63
- return void (countSpan.innerText = exception.message);
64
- }
65
- let {
66
- queryId
67
- } = this, {
68
- tree,
69
- count
70
- } = (++this.queryId, await rpc("queryFiles", queryText));
71
- queryId + 1 == this.queryId && this.showTree(tree, count);
72
- }
73
- _constructFolderTree(e, t) {
19
+ showTree(e, t) {
20
+ (r = this).deleteJsonTree();
74
21
  var {
75
- folderTree: r,
76
- fileContentMap: o
77
- } = this, s = e.dataset, {
78
- fullPathHash: t,
79
- subdirMap: n,
80
- fileMap: i
81
- } = t;
82
- if (t && (s.fullPathHash = t), n) {
83
- var a, t = Object.keys(n).sort();
84
- for (a of t) {
85
- var l = r.folder({
86
- name: a
87
- }, e);
88
- this._constructFolderTree(l, n[a]);
89
- }
90
- t = t.length;
91
- 0 < t && (s.subdirCount = t);
92
- }
93
- if (i) {
94
- var c, t = Object.keys(i).sort();
95
- for (c of t) {
96
- var {
97
- fileContent: d,
98
- fileContentKey: h
99
- } = i[c];
100
- o[r.file({
101
- name: c
102
- }, e).dataset.fileContentKey = h] = d;
103
- }
104
- t = t.length;
105
- 0 < t && (s.fileCount = t);
106
- }
22
+ countSpan: r,
23
+ msgSpan: s
24
+ } = r, {
25
+ countSpan: r,
26
+ msgSpan: s,
27
+ folder_tree: o
28
+ } = (r.innerText = "0", s.innerText = "", this.resetPathTabs(), this), {
29
+ rootFolder: r,
30
+ folderTree: s
31
+ } = (r.innerText = t, s.innerText = "Total " + t, o.constructFolderTree(e),
32
+ o);
33
+ this.rootFolder = o.rootFolder, s.select(r);
107
34
  }
108
35
  });
@@ -1,16 +1,16 @@
1
1
  import {
2
- rpc as t
2
+ rpc as f
3
3
  } from "./QyUIUtils.js";
4
4
 
5
5
  import {
6
- QyUIFolderTree as e
7
- } from "./QyUIFolderTree.js";
6
+ QyUIFolderViewer as e
7
+ } from "./QyUIFolderViewer.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: i,
56
+ rootFolder: s,
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 == s && "%" == h ? e = !0 : i.asyncFolder({
71
+ name: h
72
+ }, o);
73
+ l.subdirCount = r.length;
74
+ }
75
+ if (e && ((n = i.asyncFolder({
76
+ name: "%"
77
+ }, o)).parentElement.hidden = !d, t.rootHiddenFolder = n), 0 < a.length) {
78
+ for (var c of a) i.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
99
  let i;
76
100
  i = o.fileContentKey ? n[o.fileContentKey] : ({
77
- fileContent: s,
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(i);
121
106
  }
122
107
  });
@@ -1,5 +1,74 @@
1
1
  import {
2
- defineStyledElement as e
2
+ QyStyledElement as e
3
3
  } from "./QyStyledElement.js";
4
4
 
5
- e("folder-tree", [ "../tree.js/tree.css" ]);
5
+ import {
6
+ h as t
7
+ } from "./hscrpt.js";
8
+
9
+ customElements.define("folder-tree", class extends e {
10
+ constructor() {
11
+ super([ "../tree.js/tree.css" ]);
12
+ }
13
+ compose() {
14
+ var e = t("div", {
15
+ style: {
16
+ overflow: "auto"
17
+ }
18
+ });
19
+ this.shadowRoot.append(e), Object.assign(this, {
20
+ folderTreeDiv: e,
21
+ folderTree: new Tree(e, {
22
+ navigate: !0
23
+ }),
24
+ fileContentMap: {}
25
+ });
26
+ }
27
+ constructFolderTree(e) {
28
+ (t = (o = this).rootFolder) && (t.parentElement.remove(), Object.assign(o, {
29
+ rootFolder: void 0,
30
+ fileContentMap: {}
31
+ }));
32
+ var {
33
+ folderTree: t,
34
+ fileContentMap: o
35
+ } = this, r = this.rootFolder = t.folder({
36
+ name: "/",
37
+ open: !0
38
+ });
39
+ e && !function o(r, l, s, e) {
40
+ let n = s.dataset;
41
+ let {
42
+ fullPathHash: t,
43
+ subdirMap: a,
44
+ fileMap: f
45
+ } = e;
46
+ t && (n.fullPathHash = t);
47
+ if (a) {
48
+ let e = Object.keys(a).sort();
49
+ for (var i of e) {
50
+ let e = r.folder({
51
+ name: i
52
+ }, s);
53
+ o(r, l, e, a[i]);
54
+ }
55
+ let t = e.length;
56
+ 0 < t && (n.subdirCount = t);
57
+ }
58
+ if (f) {
59
+ let e = Object.keys(f).sort();
60
+ for (var d of e) {
61
+ let {
62
+ fileContent: e,
63
+ fileContentKey: t
64
+ } = f[d], o = r.file({
65
+ name: d
66
+ }, s);
67
+ o.dataset.fileContentKey = t, l[t] = e;
68
+ }
69
+ let t = e.length;
70
+ 0 < t && (n.fileCount = t);
71
+ }
72
+ }(t, o, r, e);
73
+ }
74
+ });
@@ -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>
@@ -1,8 +1,10 @@
1
1
  import {
2
- defineStyledElement as n
2
+ QyStyledElement as n
3
3
  } from "./QyStyledElement.js";
4
4
 
5
- n("json-view", `
5
+ customElements.define("json-view", class extends n {
6
+ constructor() {
7
+ super(`
6
8
  .json-container {
7
9
  font-family: "Open Sans";
8
10
  font-size: 14px;
@@ -69,4 +71,6 @@ n("json-view", `
69
71
  border-width: 5px 0 5px 6px;
70
72
  border-color: rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) rgba(0, 0, 0, 0) gray;
71
73
  }
72
- `);
74
+ `);
75
+ }
76
+ });
@@ -1,12 +1,14 @@
1
1
  import {
2
- h as o
2
+ h as d
3
3
  } from "./hscrpt.js";
4
4
 
5
5
  import "./explore-tree.js";
6
6
 
7
7
  import "./query-editor.js";
8
8
 
9
- let d = {
9
+ import "./trigger-editor.js";
10
+
11
+ let l = {
10
12
  brandName: "datafolder UI",
11
13
  tabNames: [ "Explore", "Query", "RPC", "Triggers" ]
12
14
  };
@@ -19,24 +21,47 @@ customElements.define("main-page", class extends HTMLElement {
19
21
  var {
20
22
  brandName: e,
21
23
  tabNames: t
22
- } = d;
23
- this.append(this._createNav(e, t), this._createTabDivs(t));
24
+ } = l;
25
+ this.append(d("nav", {
26
+ classList: "navbar bg-body-tertiary"
27
+ }, [ ((e, t, a) => d("div", {
28
+ classList: "container-fluid"
29
+ }, [ (e => d("a", {
30
+ classList: "navbar-brand"
31
+ }, [ e ]))(t), ((e, t) => d("ul", {
32
+ classList: "nav nav-pills me-auto mb-2 mb-lg-0"
33
+ }, e.tabButtons = t.map(e => d("button", {
34
+ classList: "nav-link",
35
+ id: `pills-${e}-tab`,
36
+ "data-bs-toggle": "pill",
37
+ "data-bs-target": "#pills-" + e,
38
+ type: "button",
39
+ role: "tab"
40
+ }, [ e ]))))(e, a) ]))(this, e, t) ]), d("div", {
41
+ classList: "tab-content",
42
+ id: "pills-tabContent"
43
+ }, this.tabDivs = t.map(e => d("div", {
44
+ classList: "tab-pane",
45
+ id: "pills-" + e,
46
+ role: "tabpanel"
47
+ }))));
24
48
  let {
25
- tabButtons: [ a, r ],
26
- tabDivs: [ s, n ]
49
+ tabButtons: [ a, s ],
50
+ tabDivs: [ i, n, , r ]
27
51
  } = this;
28
52
  bootstrap.Tab.getOrCreateInstance(a).show();
29
- e = o("explore-tree");
30
- s.appendChild(e);
31
- let i = o("query-editor");
32
- n.appendChild(i), Object.assign(this, {
53
+ e = d("explore-tree");
54
+ i.appendChild(e);
55
+ let o = d("query-editor");
56
+ n.appendChild(o);
57
+ t = d("trigger-editor"), r.append(t), Object.assign(this, {
33
58
  exploreTree: e,
34
- queryEditor: i
35
- }), i.addEventListener("run", () => r.click());
36
- t = () => this.onSizeChange();
37
- document.addEventListener("DOMContentLoaded", t), window.addEventListener("resize", t),
38
- r.addEventListener("shown.bs.tab", () => {
39
- i.onSizeChange();
59
+ queryEditor: o,
60
+ triggerEditor: t
61
+ }), o.addEventListener("run", () => s.click()), e = () => this.onSizeChange();
62
+ document.addEventListener("DOMContentLoaded", e), window.addEventListener("resize", e),
63
+ s.addEventListener("shown.bs.tab", () => {
64
+ o.onSizeChange();
40
65
  });
41
66
  }
42
67
  onSizeChange() {
@@ -46,50 +71,7 @@ customElements.define("main-page", class extends HTMLElement {
46
71
  } = this;
47
72
  e.onSizeChange(), t.onSizeChange();
48
73
  }
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
- }), document.body.append(o("main-page"));
74
+ }), document.body.append(d("main-page"));
93
75
 
94
76
  import {
95
77
  rpc as e