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
@@ -3,24 +3,27 @@ import {
3
3
  } from "../w2ui/src/w2compat.js";
4
4
 
5
5
  import {
6
- h as i
6
+ h as c
7
7
  } from "./hscrpt.js";
8
8
 
9
9
  import {
10
- setHeight as r
10
+ setHeight as o,
11
+ isNotNullObj as r
11
12
  } from "./QyUIUtils.js";
12
13
 
13
14
  import "./folder-tree.js";
14
15
 
15
16
  import "./json-view.js";
16
17
 
18
+ import "./code-mirror.js";
19
+
17
20
  class e extends HTMLElement {
18
21
  constructor() {
19
22
  super();
20
23
  }
21
24
  connectedCallback() {
22
25
  this.parentDiv = this.parentElement;
23
- var e = new s({
26
+ var r, e, t = new s({
24
27
  box: this.parentDiv,
25
28
  name: "layout_" + this.parentDiv.id,
26
29
  panels: [ {
@@ -33,171 +36,144 @@ class e extends HTMLElement {
33
36
  type: "bottom",
34
37
  size: 10
35
38
  } ]
36
- }), t = (e.el("left").append(this._createToolbar(), this._createFolderTree()),
37
- e.el("main"));
38
- t.append(this._createPathUL(), this._createJsonViewDiv()), e.el("bottom").append(this._createMsgSpan()),
39
- Object.assign(this, {
40
- layout: e,
41
- mainDiv: t,
42
- selectedHierarchy: {},
43
- fileContentMap: {},
44
- namePath: []
45
- }), e.on("resize:done", () => this.onSizeChange());
46
- }
47
- onSizeChange() {
48
- var {
49
- parentDiv: e,
50
- folderTreeDiv: t,
51
- jsonViewDiv: s,
52
- mainDiv: i
53
- } = this;
54
- r(e, document.body.clientHeight - e.offsetTop), r(t, i.clientHeight - t.offsetTop - 1),
55
- r(s, i.clientHeight - s.offsetTop - 1), this._updateContentDisplay();
56
- }
57
- showMsg(e) {
58
- this.msgSpan.innerText = e;
59
- }
60
- _updateContentDisplay() {
61
- var e = this.selectedElement;
62
- e ? this._showSelected(e) : this._deleteJsonTree();
63
- }
64
- _deleteJsonTree() {
65
- var e = this.jsonTree;
66
- e && (jsonview.destroy(e), this.jsonTree = void 0);
67
- }
68
- _createMsgSpan() {
69
- return this.msgSpan = i("span");
70
- }
71
- _createJsonViewDiv() {
72
- return i("json-view", [ this.jsonViewDiv = i("div", {
39
+ }), i = (t.el("left").append((i = this).toolbarDiv = c("div", {
40
+ classList: "btn-toolbar",
41
+ role: "toolbar",
42
+ style: "border-bottom: 1px solid #e4e4e4"
43
+ }, [ (e => c("div", {
44
+ classList: "input-group"
45
+ }, [ c("input", {
46
+ id: "searchInput_" + e.parentDiv.id,
47
+ type: "text",
48
+ classList: "form-control",
73
49
  style: {
74
- overflow: "auto"
50
+ width: "150px"
75
51
  }
76
- }) ]);
77
- }
78
- _createPathUL() {
79
- return this.pathUL = i("ul", {
80
- classList: "nav nav-tabs"
81
- });
82
- }
83
- _createSearchIcon() {
84
- return i("div", {
52
+ }) ]))(i), c("div", {
85
53
  classList: "btn-group btn-group-sm",
86
54
  role: "group"
87
- }, [ i("button", {
55
+ }, [ c("button", {
88
56
  classList: "btn btn-outline-success",
89
57
  type: "submit"
90
- }, [ i("i", {
58
+ }, [ c("i", {
91
59
  classList: "bi bi-search"
92
- }) ]) ]);
93
- }
94
- _createSearchInput() {
95
- return i("div", {
96
- classList: "input-group"
97
- }, [ i("input", {
98
- id: "searchInput_" + this.parentDiv.id,
99
- type: "text",
100
- classList: "form-control",
60
+ }) ]) ]) ]), (i = c("folder-tree", [ (r = this).folderTreeDiv = c("div", {
101
61
  style: {
102
- width: "150px"
62
+ overflow: "auto"
103
63
  }
104
- }) ]);
105
- }
106
- _createToolbar() {
107
- return this.toolbarDiv = i("div", {
108
- classList: "btn-toolbar",
109
- role: "toolbar",
110
- style: "border-bottom: 1px solid #e4e4e4"
111
- }, [ this._createSearchInput(), this._createSearchIcon() ]), this.toolbarDiv;
112
- }
113
- _createFolderTree() {
114
- var e = i("folder-tree", [ this.folderTreeDiv = i("div", {
64
+ }) ]), r.folderTree = new Tree(r.folderTreeDiv, {
65
+ navigate: !0
66
+ }), r.folderTree.on("select", e => {
67
+ if (!r.clickSrc) {
68
+ r.clickSrc = "folderTree";
69
+ var t = r, i = e, {
70
+ folderTree: s,
71
+ selectedHierarchy: o
72
+ } = t, s = s.hierarchy(i).reverse();
73
+ t.namePath = s.map(e => e.textContent), Object.assign(o, s);
74
+ {
75
+ var n = t;
76
+ let {
77
+ namePath: i,
78
+ pathUL: e
79
+ } = n, s = e.children, o = i.length, r = 0 < o;
80
+ for (let t = 0; t < o; ++t) {
81
+ if (t >= s.length) {
82
+ for (let e = t; e < o; ++e) ((r, n, e) => {
83
+ e = c("span", {
84
+ classList: "nav-link",
85
+ "data-bs-toggle": "tab",
86
+ role: "tab",
87
+ style: "cursor:pointer",
88
+ onclick: () => {
89
+ r.clickSrc || (r.clickSrc = "tab");
90
+ var t = n, {
91
+ clickSrc: e,
92
+ rootFolder: i,
93
+ selectedHierarchy: s,
94
+ folderTree: o
95
+ } = e = r;
96
+ i.parentElement.open = !0;
97
+ for (let e = 0; e < t; ++e) s[e].parentElement.open = !0;
98
+ i = s[t], "tab" == e && i.scrollIntoView({
99
+ block: "center"
100
+ }), o.select(i), "tab" == r.clickSrc && (r.clickSrc = void 0);
101
+ }
102
+ }, [ e ]), r.pathUL.append(c("li", {
103
+ classList: "nav-item"
104
+ }, [ e ]));
105
+ })(n, e, i[e]);
106
+ break;
107
+ }
108
+ var l = s[t].children[0], a = i[t];
109
+ l.innerText != a && (l.innerText = a, r = !1);
110
+ }
111
+ if (!r) for (;o < s.length; ) e.removeChild(e.lastElementChild);
112
+ 0 < o && s[o - 1].children[0].click();
113
+ }
114
+ }
115
+ r.selectedElement != e && (r.selectedElement = e, d(r)), "folderTree" == r.clickSrc && (r.clickSrc = void 0);
116
+ }), i)), t.el("main"));
117
+ i.append(this.pathUL = c("ul", {
118
+ classList: "nav nav-tabs"
119
+ }), this.contentDiv = c("div", [ (e = this).jsonView = c("json-view", [ e.jsonViewDiv = c("div", {
115
120
  style: {
116
121
  overflow: "auto"
117
122
  }
118
- }) ]);
119
- return this.folderTree = new Tree(this.folderTreeDiv, {
120
- navigate: !0
121
- }), this.folderTree.on("select", e => {
122
- this.clickSrc || (this.clickSrc = "folderTree", this._updateHierarchy(e)),
123
- this.selectedElement != e && (this.selectedElement = e, this._updateContentDisplay()),
124
- "folderTree" == this.clickSrc && (this.clickSrc = void 0);
125
- }), e;
126
- }
127
- _showSelected(e) {
128
- "file" == e.dataset.type ? this._showSelectedFile(e) : this._showSelectedDir(e);
129
- }
130
- _showSelectedFile(e) {
131
- this._showJson(this.fileContentMap[e.dataset.fileContentKey]);
132
- }
133
- _showSelectedDir(e) {
134
- "false" != e.parentElement.dataset.loaded ? this._showJson(e.dataset) : this._showJson({
135
- loaded: !1
136
- });
137
- }
138
- _showJson(e) {
139
- this._deleteJsonTree();
140
- e = jsonview.create(e);
141
- jsonview.render(e, this.jsonViewDiv), jsonview.expand(e), this.jsonTree = e;
142
- }
143
- _updateHierarchy(e) {
144
- var {
145
- folderTree: t,
146
- selectedHierarchy: s
147
- } = this, t = t.hierarchy(e).reverse();
148
- this.namePath = t.map(e => e.textContent), Object.assign(s, t), this._updatePathTabs();
123
+ }) ]) ])), t.el("bottom").append(this.msgSpan = c("span")), Object.assign(this, {
124
+ layout: t,
125
+ mainDiv: i,
126
+ selectedHierarchy: {},
127
+ fileContentMap: {},
128
+ namePath: []
129
+ }), t.on("resize:done", () => this.onSizeChange());
149
130
  }
150
- _onPathTabsClick(t) {
131
+ onSizeChange() {
151
132
  var {
152
- clickSrc: e,
153
- rootFolder: s,
154
- selectedHierarchy: i,
155
- folderTree: r
133
+ parentDiv: e,
134
+ folderTreeDiv: t,
135
+ jsonViewDiv: i,
136
+ mainDiv: s
156
137
  } = this;
157
- s.parentElement.open = !0;
158
- for (let e = 0; e < t; ++e) i[e].parentElement.open = !0;
159
- s = i[t];
160
- "tab" == e && s.scrollIntoView({
161
- block: "center"
162
- }), r.select(s);
138
+ o(e, document.body.clientHeight - e.offsetTop), o(t, s.clientHeight - t.offsetTop - 1),
139
+ o(i, s.clientHeight - i.offsetTop - 1), d(this);
163
140
  }
164
- _createPathTab(e, t) {
165
- t = i("span", {
166
- classList: "nav-link",
167
- "data-bs-toggle": "tab",
168
- role: "tab",
169
- style: "cursor:pointer",
170
- onclick: () => {
171
- this.clickSrc || (this.clickSrc = "tab"), this._onPathTabsClick(e),
172
- "tab" == this.clickSrc && (this.clickSrc = void 0);
173
- }
174
- }, [ t ]);
175
- this.pathUL.append(i("li", {
176
- classList: "nav-item"
177
- }, [ t ]));
141
+ showMsg(e) {
142
+ this.msgSpan.innerText = e;
178
143
  }
179
- _updatePathTabs() {
180
- var {
181
- namePath: s,
182
- pathUL: e
183
- } = this, i = e.children, r = s.length;
184
- let a = 0 < r;
185
- for (let t = 0; t < r; ++t) {
186
- if (t >= i.length) {
187
- for (let e = t; e < r; ++e) this._createPathTab(e, s[e]);
188
- break;
189
- }
190
- var o = i[t].children[0], n = s[t];
191
- o.innerText != n && (o.innerText = n, a = !1);
144
+ deleteJsonTree() {
145
+ var e = this.jsonTree;
146
+ e && (jsonview.destroy(e), this.jsonTree = void 0);
147
+ }
148
+ showSelectedFile(e) {
149
+ this.showContent(this.fileContentMap[e.dataset.fileContentKey]);
150
+ }
151
+ showSelectedDir(e) {
152
+ "false" != e.parentElement.dataset.loaded ? this.showContent(e.dataset) : this.showContent("not loaded");
153
+ }
154
+ showContent(t) {
155
+ if (r(t)) {
156
+ var e = this.codemirror, e = (e && (e.hidden = !0), this.jsonView.hidden = !1,
157
+ this), i = t;
158
+ e.deleteJsonTree(), i = jsonview.create(i), jsonview.render(i, e.jsonViewDiv),
159
+ jsonview.expand(i), e.jsonTree = i;
160
+ } else {
161
+ let e = this.codemirror;
162
+ e ? e.hidden = !1 : this.contentDiv.append(e = this.codemirror = c("code-mirror", {
163
+ readOnly: !0
164
+ })), this.jsonView.hidden = !0, e.text = t;
192
165
  }
193
- if (!a) for (;r < i.length; ) e.removeChild(e.lastElementChild);
194
- 0 < r && i[r - 1].children[0].click();
195
166
  }
196
- _resetPathTabs() {
167
+ resetPathTabs() {
197
168
  this.pathUL.replaceChildren();
198
169
  }
199
170
  }
200
171
 
172
+ function d(e) {
173
+ var t, i = e.selectedElement;
174
+ i ? (t = e, "file" == (i = i).dataset.type ? t.showSelectedFile(i) : t.showSelectedDir(i)) : e.deleteJsonTree();
175
+ }
176
+
201
177
  export {
202
178
  e as QyUIFolderTree
203
179
  };
@@ -13,9 +13,9 @@ async function t(e, n, o) {
13
13
  };
14
14
  }
15
15
  try {
16
- var a = await fetch(t, i);
17
- if (a.ok) return await a.json();
18
- console.error("Response status: " + a.status);
16
+ var r = await fetch(t, i);
17
+ if (r.ok) return await r.json();
18
+ console.error("Response status: " + r.status);
19
19
  } catch (t) {
20
20
  console.error(`Calling ${e} with ${n} failed:`, t);
21
21
  }
@@ -34,9 +34,14 @@ function o(t, e) {
34
34
  n.textContent = e, t.appendChild(n);
35
35
  }
36
36
 
37
+ function i(t) {
38
+ return null != t && "object" == typeof t;
39
+ }
40
+
37
41
  export {
38
42
  t as rpc,
39
43
  e as setHeight,
40
44
  n as setWidth,
41
- o as appendStyle
45
+ o as appendStyle,
46
+ i as isNotNullObj
42
47
  };
@@ -0,0 +1,35 @@
1
+ customElements.define("code-mirror", class extends HTMLElement {
2
+ constructor() {
3
+ super();
4
+ }
5
+ compose() {
6
+ var r, e;
7
+ this.codemirror || ({
8
+ readOnly: r,
9
+ changeCallback: e
10
+ } = this, this.codemirror = createCodeMirror(this, r, e));
11
+ }
12
+ get text() {
13
+ return this.codemirror?.state.doc.toString() ?? "";
14
+ }
15
+ set text(r) {
16
+ var e = this.codemirror;
17
+ e && e.dispatch({
18
+ changes: {
19
+ from: 0,
20
+ to: e.state.doc.length,
21
+ insert: r
22
+ }
23
+ });
24
+ }
25
+ get hidden() {
26
+ return !!this.codemirror?.dom.hidden;
27
+ }
28
+ set hidden(r) {
29
+ var e = this.codemirror;
30
+ e && (e.dom.hidden = !!r);
31
+ }
32
+ clearHistory() {
33
+ this.codemirror?.clearHistory();
34
+ }
35
+ });
@@ -1,108 +1,74 @@
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";
8
-
9
- import {
10
- QyUIFolderTree
6
+ QyUIFolderTree as e
11
7
  } from "./QyUIFolderTree.js";
12
8
 
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;
14
+ var e = (super.connectedCallback(), (e = this).toolbarDiv.append((e => e.countSpan = t("span", {
15
+ classList: "btn btn-success ms-auto"
16
+ }, [ "0" ]))(e)), this).folderTree;
20
17
  this.rootFolder = e.folder({
21
18
  name: "/",
22
19
  open: !0
23
20
  }), e.select(this.rootFolder);
24
21
  }
25
22
  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", {
38
- 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, {
23
+ var o = this, {
24
+ rootFolder: r,
25
+ countSpan: s,
26
+ msgSpan: n
27
+ } = (o.deleteJsonTree(), o);
28
+ s.innerText = "0", n.innerText = "", r && (r.parentElement.remove(), Object.assign(o, {
49
29
  rootFolder: void 0,
50
30
  fileContentMap: {}
51
- }));
52
- }
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) {
74
- 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]);
31
+ })), this.resetPathTabs(), this.countSpan.innerText = t, this.msgSpan.innerText = "Total " + t,
32
+ this.rootFolder = this.folderTree.folder({
33
+ name: "/",
34
+ open: !0
35
+ }), function o(r, s, e) {
36
+ let {
37
+ folderTree: n,
38
+ fileContentMap: l
39
+ } = r;
40
+ let a = s.dataset;
41
+ let {
42
+ fullPathHash: t,
43
+ subdirMap: i,
44
+ fileMap: d
45
+ } = e;
46
+ t && (a.fullPathHash = t);
47
+ if (i) {
48
+ let e = Object.keys(i).sort();
49
+ for (var f of e) {
50
+ let e = n.folder({
51
+ name: f
52
+ }, s);
53
+ o(r, e, i[f]);
54
+ }
55
+ let t = e.length;
56
+ 0 < t && (a.subdirCount = t);
89
57
  }
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;
58
+ if (d) {
59
+ let e = Object.keys(d).sort();
60
+ for (var h of e) {
61
+ let {
62
+ fileContent: e,
63
+ fileContentKey: t
64
+ } = d[h], o = n.file({
65
+ name: h
66
+ }, s);
67
+ o.dataset.fileContentKey = t, l[t] = e;
68
+ }
69
+ let t = e.length;
70
+ 0 < t && (a.fileCount = t);
103
71
  }
104
- t = t.length;
105
- 0 < t && (s.fileCount = t);
106
- }
72
+ }(this, this.rootFolder, e), this.folderTree.select(this.rootFolder), this.tree = e;
107
73
  }
108
74
  });