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.
- package/README.md +5 -0
- package/internal.md +119 -0
- package/package.json +2 -2
- package/sample.js +19 -19
- package/scripts/convertBinFiles.js +49 -0
- package/scripts/fastify.js +2 -2
- package/src/QyAcl.js +44 -44
- package/src/QyAclSaver_Worker.js +2 -2
- package/src/QyAclWriter.js +1 -1
- package/src/QyBatch.js +1 -3
- package/src/QyBinWriter.js +65 -66
- package/src/QyCD.js +72 -27
- package/src/QyCache.js +39 -33
- package/src/QyDB.js +4 -30
- package/src/QyDefaultOptions.js +2 -1
- package/src/QyFetch.js +4 -22
- package/src/QyFileLogger.js +2 -2
- package/src/QyKVData.js +168 -183
- package/src/QyKVDataCleaner_Worker.js +15 -14
- package/src/QyKVDataSaver_Worker.js +20 -20
- package/src/QyLogFileSaver.js +1 -1
- package/src/QyLogFileSaver_Worker.js +2 -2
- package/src/QyMod.js +7 -7
- package/src/QyOpRunner.js +19 -16
- package/src/QySnapshotCompactor_Worker.js +54 -52
- package/src/QySnapshotSaver_Worker.js +55 -53
- package/src/QySnapshots.js +157 -147
- package/src/QyUnionNode.js +2 -2
- package/src/rpc/evalCode.js +4 -4
- package/src/rpc/getFileContent.js +4 -4
- package/src/rpc/getSubItems.js +12 -12
- package/src/rpc/getTriggerFiles.js +1 -0
- package/src/rpc/queryFiles.js +1 -1
- package/src/soc_pokec.js +7 -7
- package/static/codemirror.bundle/editor.bundle.js +27906 -0
- package/static/datafolderui/QyStyledElement.js +6 -15
- package/static/datafolderui/QyUIFolderTree.js +130 -145
- package/static/datafolderui/QyUIFolderViewer.js +210 -0
- package/static/datafolderui/QyUIUtils.js +10 -5
- package/static/datafolderui/code-mirror.js +35 -0
- package/static/datafolderui/display-tree.js +21 -94
- package/static/datafolderui/explore-tree.js +66 -81
- package/static/datafolderui/folder-tree.js +71 -2
- package/static/datafolderui/index.css +7 -0
- package/static/datafolderui/index.html +1 -0
- package/static/datafolderui/json-view.js +7 -3
- package/static/datafolderui/main-page.js +42 -60
- package/static/datafolderui/query-editor.js +178 -198
- package/static/datafolderui/trigger-editor.js +30 -0
package/src/QyBinWriter.js
CHANGED
|
@@ -7,24 +7,26 @@ import {
|
|
|
7
7
|
} from "./QyOpRunner.js";
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
|
-
ensureParentDir as
|
|
11
|
-
getSize as
|
|
12
|
-
getSizeStr as
|
|
13
|
-
sleep as
|
|
14
|
-
setPromise as
|
|
15
|
-
toBuffer as
|
|
10
|
+
ensureParentDir as n,
|
|
11
|
+
getSize as o,
|
|
12
|
+
getSizeStr as g,
|
|
13
|
+
sleep as v,
|
|
14
|
+
setPromise as l,
|
|
15
|
+
toBuffer as _
|
|
16
16
|
} from "./QyUtils.js";
|
|
17
17
|
|
|
18
18
|
import {
|
|
19
19
|
getDefaultOptions as a
|
|
20
20
|
} from "./QyDefaultOptions.js";
|
|
21
21
|
|
|
22
|
+
let h = Array.isArray;
|
|
23
|
+
|
|
22
24
|
class t extends e {
|
|
23
25
|
constructor(e, t) {
|
|
24
26
|
super({
|
|
25
27
|
...a("QyBinWriter"),
|
|
26
28
|
...e
|
|
27
|
-
}
|
|
29
|
+
}), this.filePath = t, p(this);
|
|
28
30
|
}
|
|
29
31
|
getFilePath() {
|
|
30
32
|
return this.filePath;
|
|
@@ -34,11 +36,11 @@ class t extends e {
|
|
|
34
36
|
}
|
|
35
37
|
save(e, t, a) {
|
|
36
38
|
null == t && (t = e, e = 0);
|
|
37
|
-
var i,
|
|
38
|
-
return "_op_save" ===
|
|
39
|
-
a &&
|
|
39
|
+
var i, r = this.lastOp;
|
|
40
|
+
return "_op_save" === r?.opFunName ? (i = r.args, i[0] = e, i = i[1], h(t) ? i.push(...t) : i.push(t),
|
|
41
|
+
a && l(r), r.promise) : (i = {
|
|
40
42
|
opFunName: "_op_save",
|
|
41
|
-
args: [ e, [ t ] ]
|
|
43
|
+
args: [ e, h(t) ? t : [ t ] ]
|
|
42
44
|
}, a ? this.pushAndRunWithPromise(i) : this.pushAndRun(i));
|
|
43
45
|
}
|
|
44
46
|
truncate() {
|
|
@@ -54,41 +56,12 @@ class t extends e {
|
|
|
54
56
|
args: [ e ]
|
|
55
57
|
});
|
|
56
58
|
}
|
|
57
|
-
|
|
58
|
-
this.maxFileSizeEmitted = !0;
|
|
59
|
-
}
|
|
60
|
-
_getBinData(e) {
|
|
59
|
+
getBinData(e) {
|
|
61
60
|
var t = e.length;
|
|
62
61
|
return 0 == t ? "" : 1 == t ? e[0] : Buffer.isBuffer(e[0]) ? Buffer.concat(e) : Buffer.concat(e.map(e => Buffer.from(e)));
|
|
63
62
|
}
|
|
64
|
-
async _saveBinData(e, t) {
|
|
65
|
-
var {
|
|
66
|
-
fileHandle: a,
|
|
67
|
-
totalSavedSize: i,
|
|
68
|
-
filePath: s,
|
|
69
|
-
options: r
|
|
70
|
-
} = this, {
|
|
71
|
-
emitSaveEvent: n,
|
|
72
|
-
maxFileSize: o,
|
|
73
|
-
maxRetryInterval: l,
|
|
74
|
-
retryIntervalFactor: h
|
|
75
|
-
} = r, p = v(t), u = p.length, f = `size ${d(u)} (MaxId:${e}) to ` + s;
|
|
76
|
-
let m;
|
|
77
|
-
for (;"_op_truncate" !== this.firstOp?.opFunName; ) try {
|
|
78
|
-
await a.appendFile(p, {
|
|
79
|
-
flush: !0
|
|
80
|
-
});
|
|
81
|
-
var c = this.totalSavedSize = i + u;
|
|
82
|
-
return n && this.emit("save", e), void (o && o < c && !this.maxFileSizeEmitted && (this.supressMaxFileSizeEvent(),
|
|
83
|
-
this.emit("maxFileSize", c)));
|
|
84
|
-
} catch (e) {
|
|
85
|
-
logger.error(`Saving ${f} failed:`, e, "Truncated back to " + i), await a.truncate(i),
|
|
86
|
-
m = m ? Math.min(l, m * h) : 1, logger.log(`Retry in ${m} seconds`),
|
|
87
|
-
await _(m);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
63
|
async _op_start(e) {
|
|
91
|
-
return e = e || this.filePath
|
|
64
|
+
return await i(this, e = e || this.filePath), this;
|
|
92
65
|
}
|
|
93
66
|
async _op_stop() {
|
|
94
67
|
var {
|
|
@@ -100,11 +73,35 @@ class t extends e {
|
|
|
100
73
|
} catch (e) {
|
|
101
74
|
logger.error(`Close ${t} failed:`, e);
|
|
102
75
|
}
|
|
103
|
-
this
|
|
76
|
+
p(this);
|
|
104
77
|
}
|
|
105
78
|
_op_save(e, t) {
|
|
106
|
-
t = this.
|
|
107
|
-
if (t) return
|
|
79
|
+
t = this.getBinData(t, e);
|
|
80
|
+
if (t) return (async (e, t, a) => {
|
|
81
|
+
let {
|
|
82
|
+
fileHandle: i,
|
|
83
|
+
totalSavedSize: r,
|
|
84
|
+
filePath: s,
|
|
85
|
+
options: n
|
|
86
|
+
} = e, {
|
|
87
|
+
emitSaveEvent: o,
|
|
88
|
+
maxFileSize: l,
|
|
89
|
+
maxRetryInterval: h,
|
|
90
|
+
retryIntervalFactor: p
|
|
91
|
+
} = n, u = _(a), f = u.length, c = `size ${g(f)} (MaxId:${t}) to ` + s, m;
|
|
92
|
+
for (;"_op_truncate" !== e.firstOp?.opFunName; ) try {
|
|
93
|
+
await i.appendFile(u, {
|
|
94
|
+
flush: !0
|
|
95
|
+
});
|
|
96
|
+
var d = e.totalSavedSize = r + f;
|
|
97
|
+
return o && 0 < t && e.emit("save", t), void (!e.maxFileSizeEmitted && l && d > l && (e.maxFileSizeEmitted = !0,
|
|
98
|
+
e.emit("maxFileSize", d)));
|
|
99
|
+
} catch (e) {
|
|
100
|
+
logger.error(`Saving ${c} failed:`, e, "Truncated back to " + r),
|
|
101
|
+
await i.truncate(r), m = m ? Math.min(h, m * p) : 1, logger.log(`Retry in ${m} seconds`),
|
|
102
|
+
await v(m);
|
|
103
|
+
}
|
|
104
|
+
})(this, e, t);
|
|
108
105
|
}
|
|
109
106
|
async _op_truncate() {
|
|
110
107
|
var {
|
|
@@ -116,37 +113,39 @@ class t extends e {
|
|
|
116
113
|
} catch (e) {
|
|
117
114
|
logger.error(`Truncate ${t} failed:`, e);
|
|
118
115
|
}
|
|
119
|
-
this
|
|
116
|
+
p(this);
|
|
120
117
|
}
|
|
121
118
|
async _op_switch(e) {
|
|
122
119
|
var {
|
|
123
120
|
fileHandle: t,
|
|
124
121
|
filePath: a
|
|
125
122
|
} = this;
|
|
126
|
-
t && a == e || (await this
|
|
123
|
+
t && a == e || (await i(this, e), logger.info(`Switched from ${a} to ` + e));
|
|
127
124
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
_resetParams() {
|
|
143
|
-
Object.assign(this, {
|
|
144
|
-
totalSavedSize: 0,
|
|
145
|
-
maxFileSizeEmitted: !1
|
|
146
|
-
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async function i(e, t) {
|
|
128
|
+
var {
|
|
129
|
+
fileHandle: a,
|
|
130
|
+
options: i
|
|
131
|
+
} = e;
|
|
132
|
+
p(e);
|
|
133
|
+
try {
|
|
134
|
+
a && (a.close(), e.fileHandle = void 0), await n(t);
|
|
135
|
+
var r = i.append;
|
|
136
|
+
e.fileHandle = await s(t, r ? "a" : "w"), e.filePath = t, r && (e.totalSavedSize = await o(t));
|
|
137
|
+
} catch (e) {
|
|
138
|
+
logger.error(`Open ${t} failed:`, e);
|
|
147
139
|
}
|
|
148
140
|
}
|
|
149
141
|
|
|
142
|
+
function p(e) {
|
|
143
|
+
Object.assign(e, {
|
|
144
|
+
totalSavedSize: 0,
|
|
145
|
+
maxFileSizeEmitted: !1
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
|
|
150
149
|
export {
|
|
151
150
|
t as QyBinWriter
|
|
152
151
|
};
|
package/src/QyCD.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
isString as
|
|
2
|
+
isString as i,
|
|
3
3
|
pathSplit as s
|
|
4
4
|
} from "./QyUtils.js";
|
|
5
5
|
|
|
@@ -7,52 +7,97 @@ class r {
|
|
|
7
7
|
constructor(r) {
|
|
8
8
|
this.qyCache = r;
|
|
9
9
|
}
|
|
10
|
-
cd(r,
|
|
11
|
-
return
|
|
10
|
+
cd(r, e = this.currentDir) {
|
|
11
|
+
return i(r) && (r = s(r)), this.cdP(r, e);
|
|
12
12
|
}
|
|
13
|
-
cdP(r,
|
|
14
|
-
return this.currentDir = this.qyCache.getOrCreateDir(r,
|
|
13
|
+
cdP(r, e = this.currentDir) {
|
|
14
|
+
return this.currentDir = this.qyCache.getOrCreateDir(r, e), this;
|
|
15
15
|
}
|
|
16
|
-
dir(r,
|
|
17
|
-
return
|
|
16
|
+
dir(r, e = this.currentDir) {
|
|
17
|
+
return i(r) && (r = s(r)), this.dirP(r, e);
|
|
18
18
|
}
|
|
19
|
-
dirP(r,
|
|
20
|
-
return this.qyCache.getDir(r,
|
|
19
|
+
dirP(r, e = this.currentDir) {
|
|
20
|
+
return this.qyCache.getDir(r, e);
|
|
21
21
|
}
|
|
22
|
-
indexDir(r,
|
|
23
|
-
return
|
|
22
|
+
indexDir(r, e, t = this.currentDir) {
|
|
23
|
+
return i(r) && (r = s(r)), i(e) && (e = s(e)), this.indexDirP(r, e, t);
|
|
24
24
|
}
|
|
25
|
-
indexDirP(r,
|
|
26
|
-
var
|
|
25
|
+
indexDirP(r, e, t = this.currentDir) {
|
|
26
|
+
var i = this.qyCache, r = i.getDir(r, t);
|
|
27
27
|
if (r) {
|
|
28
|
-
t =
|
|
29
|
-
if (t) return
|
|
28
|
+
t = i.getIndexDir(r);
|
|
29
|
+
if (t) return e && 0 != e.length ? i.getDir(e, t) : t;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
file(r,
|
|
33
|
-
return
|
|
32
|
+
file(r, e = this.currentDir) {
|
|
33
|
+
return i(r) && (r = s(r)), this.fileP(r, e);
|
|
34
34
|
}
|
|
35
|
-
fileP(r,
|
|
36
|
-
return this.qyCache.getFile(r,
|
|
35
|
+
fileP(r, e = this.currentDir) {
|
|
36
|
+
return this.qyCache.getFile(r, e);
|
|
37
37
|
}
|
|
38
38
|
triggerFile(r) {
|
|
39
39
|
return this.qyCache.getTriggerFile(r);
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
return
|
|
41
|
+
get triggerFileList() {
|
|
42
|
+
return this.qyCache.triggerFileList;
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
return this.qyCache.
|
|
44
|
+
rpcFile(r) {
|
|
45
|
+
return this.qyCache.getRpcFile(r);
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
return this.qyCache.
|
|
47
|
+
get rpcFileList() {
|
|
48
|
+
return this.qyCache.rpcFileList;
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
return this.
|
|
50
|
+
view(r, e, t = this.currentDir) {
|
|
51
|
+
return i(r) && (r = s(r)), this.viewP(r, e, t);
|
|
52
|
+
}
|
|
53
|
+
viewP(r, e, t = this.currentDir) {
|
|
54
|
+
return this.qyCache.getFile(r, t)?.view(e);
|
|
55
|
+
}
|
|
56
|
+
queryFiles(r, e, t, i, s = this.currentDir) {
|
|
57
|
+
return this.qyCache.queryFiles(r, e, t, i, s);
|
|
58
|
+
}
|
|
59
|
+
queryFilesMulti(r, e, t, i = this.currentDir) {
|
|
60
|
+
return this.qyCache.queryFilesMulti(r, e, t, i);
|
|
61
|
+
}
|
|
62
|
+
queryTree(r, e, t, i, s, h = this.currentDir) {
|
|
63
|
+
return n(this.qyCache.queryFiles(r, e, i, s, h), t);
|
|
64
|
+
}
|
|
65
|
+
queryTreeMulti(r, e, t, i, s = this.currentDir) {
|
|
66
|
+
return n(this.qyCache.queryFilesMulti(r, t, i, s), e);
|
|
52
67
|
}
|
|
53
68
|
resetCurrentDir() {
|
|
54
69
|
this.currentDir = void 0;
|
|
55
70
|
}
|
|
71
|
+
fileListToTree(r, e) {
|
|
72
|
+
return n(r, e);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function n(r, t) {
|
|
77
|
+
var i, s = {};
|
|
78
|
+
for (i of r) {
|
|
79
|
+
var h, n = i.parentList;
|
|
80
|
+
let e = s;
|
|
81
|
+
for (h of n) {
|
|
82
|
+
var {
|
|
83
|
+
name: u,
|
|
84
|
+
fullPathHash: c
|
|
85
|
+
} = h;
|
|
86
|
+
let r = e.subdirMap;
|
|
87
|
+
r = r || (e.subdirMap = {}), e = (e = r[u]) || (r[u] = {
|
|
88
|
+
fullPathHash: c
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
let r = e.fileMap;
|
|
92
|
+
(r = r || (e.fileMap = {}))[i.name] = {
|
|
93
|
+
fileContent: i.view(t, !0),
|
|
94
|
+
fileContentKey: i.fileContentKey
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
tree: s,
|
|
99
|
+
count: r.length
|
|
100
|
+
};
|
|
56
101
|
}
|
|
57
102
|
|
|
58
103
|
export {
|
package/src/QyCache.js
CHANGED
|
@@ -22,51 +22,51 @@ import {
|
|
|
22
22
|
} from "./QyTrigger.js";
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
|
-
isString as
|
|
26
|
-
lockExclusiveFilePath as
|
|
25
|
+
isString as C,
|
|
26
|
+
lockExclusiveFilePath as q,
|
|
27
27
|
unlockExclusiveFilePath as i
|
|
28
28
|
} from "./QyUtils.js";
|
|
29
29
|
|
|
30
30
|
import {
|
|
31
|
-
dumpStructure as
|
|
31
|
+
dumpStructure as R
|
|
32
32
|
} from "./QyStructure.js";
|
|
33
33
|
|
|
34
34
|
import {
|
|
35
|
-
getIndexPropPaths as
|
|
36
|
-
parseNamePathAndQuery as
|
|
35
|
+
getIndexPropPaths as n,
|
|
36
|
+
parseNamePathAndQuery as l
|
|
37
37
|
} from "./QyIndex.js";
|
|
38
38
|
|
|
39
39
|
import {
|
|
40
|
-
getDefaultOptions as
|
|
40
|
+
getDefaultOptions as d
|
|
41
41
|
} from "./QyDefaultOptions.js";
|
|
42
42
|
|
|
43
43
|
import {
|
|
44
|
-
ensureDir as
|
|
44
|
+
ensureDir as Q,
|
|
45
45
|
SpecialFilePaths as e
|
|
46
46
|
} from "./QyUtils.js";
|
|
47
47
|
|
|
48
48
|
import {
|
|
49
|
-
QueryCounter as
|
|
49
|
+
QueryCounter as u
|
|
50
50
|
} from "./QyUnionNode.js";
|
|
51
51
|
|
|
52
52
|
import {
|
|
53
|
-
QyKVDataLoader as
|
|
53
|
+
QyKVDataLoader as S
|
|
54
54
|
} from "./QyKVDataLoader.js";
|
|
55
55
|
|
|
56
56
|
import {
|
|
57
|
-
requireFromModCode as
|
|
57
|
+
requireFromModCode as p
|
|
58
58
|
} from "./QyMod.js";
|
|
59
59
|
|
|
60
60
|
let {
|
|
61
|
-
IndexDirPath:
|
|
62
|
-
TriggerDirPath:
|
|
63
|
-
RpcDirPath:
|
|
61
|
+
IndexDirPath: x,
|
|
62
|
+
TriggerDirPath: O,
|
|
63
|
+
RpcDirPath: P
|
|
64
64
|
} = e;
|
|
65
65
|
|
|
66
66
|
class t extends r {
|
|
67
67
|
constructor(r, e, t) {
|
|
68
68
|
super(), e = {
|
|
69
|
-
...
|
|
69
|
+
...d("QyCache"),
|
|
70
70
|
...e
|
|
71
71
|
};
|
|
72
72
|
var i = v(r, "qykv");
|
|
@@ -95,13 +95,13 @@ class t extends r {
|
|
|
95
95
|
} = this;
|
|
96
96
|
logger.log(`Starting at ${r}...`);
|
|
97
97
|
try {
|
|
98
|
-
await
|
|
98
|
+
await Q(e), o.start();
|
|
99
99
|
var [ {
|
|
100
100
|
maxChangeId: g,
|
|
101
101
|
loadedMaxAclNum: n,
|
|
102
102
|
qySnapshots: l,
|
|
103
103
|
aclKeyValueMap: d
|
|
104
|
-
} ] = await Promise.all([ ((r, e) => (r = new
|
|
104
|
+
} ] = await Promise.all([ ((r, e) => (r = new S(r, e)).load())(e, t), q(a) ]);
|
|
105
105
|
await i.start(g, n, l, d);
|
|
106
106
|
} catch (r) {
|
|
107
107
|
throw o.stop(), r;
|
|
@@ -112,9 +112,9 @@ class t extends r {
|
|
|
112
112
|
fileMap: i
|
|
113
113
|
} = e;
|
|
114
114
|
for (var o of t) r(o);
|
|
115
|
-
}(s), this.indexRootDir = s.searchOrCreateSubdir(
|
|
115
|
+
}(s), this.indexRootDir = s.searchOrCreateSubdir(x);
|
|
116
116
|
var u = this, e = u.rootDir;
|
|
117
|
-
e.triggerNodes = [ new f() ], u.triggerRootDir = e.searchOrCreateSubdir(
|
|
117
|
+
e.triggerNodes = [ new f() ], u.triggerRootDir = e.searchOrCreateSubdir(O);
|
|
118
118
|
for (p of u.triggerRootDir.fileList) {
|
|
119
119
|
var {
|
|
120
120
|
name: p,
|
|
@@ -127,15 +127,15 @@ class t extends r {
|
|
|
127
127
|
u.insertTriggerToTree(p, h, c, D);
|
|
128
128
|
}
|
|
129
129
|
var y = this;
|
|
130
|
-
y.rpcRootDir = y.rootDir.searchOrCreateSubdir(
|
|
130
|
+
y.rpcRootDir = y.rootDir.searchOrCreateSubdir(P);
|
|
131
131
|
for (m of y.rpcRootDir.fileList) {
|
|
132
132
|
var {
|
|
133
133
|
name: m,
|
|
134
134
|
fileContent: F
|
|
135
135
|
} = m;
|
|
136
|
-
|
|
136
|
+
C(F) && y.insertRpc(m, F);
|
|
137
137
|
}
|
|
138
|
-
return t.dumpStructureAtStart && await
|
|
138
|
+
return t.dumpStructureAtStart && await R(v(r, "qystruct"), s), logger.log("Started."),
|
|
139
139
|
this;
|
|
140
140
|
}
|
|
141
141
|
async stop() {
|
|
@@ -170,16 +170,16 @@ class t extends r {
|
|
|
170
170
|
return t && s.save(r, t), a.save(r, e, i, o);
|
|
171
171
|
}
|
|
172
172
|
getFile(r, e = this.rootDir) {
|
|
173
|
-
return r.isFile ? r :
|
|
173
|
+
return r.isFile ? r : C(r) ? e.getFile(r) : e.searchFile(r);
|
|
174
174
|
}
|
|
175
175
|
getDir(r, e = this.rootDir) {
|
|
176
|
-
return r.isDir ? r :
|
|
176
|
+
return r.isDir ? r : C(r) ? e.getSubdir(r) : e.searchSubdir(r);
|
|
177
177
|
}
|
|
178
178
|
getOrCreateFile(r, e = this.rootDir) {
|
|
179
|
-
return r.isFile ? r :
|
|
179
|
+
return r.isFile ? r : C(r) ? e.getOrCreateFile(r) : e.searchOrCreateFile(r);
|
|
180
180
|
}
|
|
181
181
|
getOrCreateDir(r, e = this.rootDir) {
|
|
182
|
-
return r.isDir ? r :
|
|
182
|
+
return r.isDir ? r : C(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
|
|
183
183
|
}
|
|
184
184
|
getIndexDir(r) {
|
|
185
185
|
return this.indexRootDir.getSubdir(r.fullPathHash);
|
|
@@ -193,17 +193,23 @@ class t extends r {
|
|
|
193
193
|
getOrCreateTriggerFile(r) {
|
|
194
194
|
return this.triggerRootDir.getOrCreateFile(r);
|
|
195
195
|
}
|
|
196
|
+
get triggerFileList() {
|
|
197
|
+
return this.triggerRootDir.fileList;
|
|
198
|
+
}
|
|
196
199
|
getRpcFile(r) {
|
|
197
200
|
return this.rpcRootDir.getFile(r);
|
|
198
201
|
}
|
|
199
202
|
getOrCreateRpcFile(r) {
|
|
200
203
|
return this.rpcRootDir.getOrCreateFile(r);
|
|
201
204
|
}
|
|
205
|
+
get rpcFileList() {
|
|
206
|
+
return this.rpcRootDir.fileList;
|
|
207
|
+
}
|
|
202
208
|
insertTriggerToTree(r, e, t, i) {
|
|
203
209
|
var {
|
|
204
210
|
rootDir: o,
|
|
205
211
|
qyDB: a
|
|
206
|
-
} = this, i =
|
|
212
|
+
} = this, i = p("trigger", r, i, a);
|
|
207
213
|
o.triggerNodes[0].insertTrigger(r, e, t, i), g(o, e);
|
|
208
214
|
}
|
|
209
215
|
removeTriggerFromTree(r, e) {
|
|
@@ -214,19 +220,19 @@ class t extends r {
|
|
|
214
220
|
var {
|
|
215
221
|
rpcFunMap: t,
|
|
216
222
|
qyDB: i
|
|
217
|
-
} = this, e =
|
|
223
|
+
} = this, e = p("rpc", r, e, i);
|
|
218
224
|
e && (t[r] = e);
|
|
219
225
|
}
|
|
220
226
|
removeRpc(r) {
|
|
221
227
|
delete this.rpcFunMap[r];
|
|
222
228
|
}
|
|
223
229
|
queryFiles(r, e, t, i, o = this.rootDir) {
|
|
224
|
-
var a = [], t = (
|
|
225
|
-
return
|
|
230
|
+
var a = [], t = (C(e) && !t && (t = 1), new u(t, i)), i = this.options.queryAutoCreateIndex;
|
|
231
|
+
return h(r, e, a, t, o, i), a;
|
|
226
232
|
}
|
|
227
233
|
queryFilesMulti(r, e, t, i = this.rootDir) {
|
|
228
|
-
var o, a, s = [], g = new
|
|
229
|
-
for ([ o, a ] of r)
|
|
234
|
+
var o, a, s = [], g = new u(e, t), n = this.options.queryAutoCreateIndex;
|
|
235
|
+
for ([ o, a ] of r) h(o, a, s, g, i, n);
|
|
230
236
|
return s;
|
|
231
237
|
}
|
|
232
238
|
async callRpc(e, r, t) {
|
|
@@ -240,8 +246,8 @@ class t extends r {
|
|
|
240
246
|
}
|
|
241
247
|
}
|
|
242
248
|
|
|
243
|
-
function
|
|
244
|
-
e && (a = a ?
|
|
249
|
+
function h(r, e, t, i, o, a) {
|
|
250
|
+
e && (a = a ? n(e) : void 0, l(r, o, a, e, t, i));
|
|
245
251
|
}
|
|
246
252
|
|
|
247
253
|
export {
|
package/src/QyDB.js
CHANGED
|
@@ -11,11 +11,11 @@ import {
|
|
|
11
11
|
} from "./QyBatch.js";
|
|
12
12
|
|
|
13
13
|
import {
|
|
14
|
-
QyCache as
|
|
14
|
+
QyCache as n
|
|
15
15
|
} from "./QyCache.js";
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
-
getDefaultOptions as
|
|
18
|
+
getDefaultOptions as a
|
|
19
19
|
} from "./QyDefaultOptions.js";
|
|
20
20
|
|
|
21
21
|
import {
|
|
@@ -34,7 +34,7 @@ class h extends t {
|
|
|
34
34
|
s(e) && (t = e, e = d), super(), Object.assign(this, {
|
|
35
35
|
rootFolder: e,
|
|
36
36
|
options: {
|
|
37
|
-
...
|
|
37
|
+
...a("QyDB"),
|
|
38
38
|
...t
|
|
39
39
|
}
|
|
40
40
|
});
|
|
@@ -44,7 +44,7 @@ class h extends t {
|
|
|
44
44
|
return this.qyCache || (e = {
|
|
45
45
|
...this.options,
|
|
46
46
|
...e
|
|
47
|
-
}, t = new
|
|
47
|
+
}, t = new n(this.rootFolder, e, this), Object.assign(this, {
|
|
48
48
|
qyCache: t,
|
|
49
49
|
fetch: new r(t),
|
|
50
50
|
batch: new i(t, e),
|
|
@@ -144,32 +144,6 @@ class h extends t {
|
|
|
144
144
|
callRpc(e, t, r) {
|
|
145
145
|
return this.qyCache.callRpc(e, t, r);
|
|
146
146
|
}
|
|
147
|
-
fileListToTree(e, t) {
|
|
148
|
-
var r, i = t, a = {};
|
|
149
|
-
for (r of e) {
|
|
150
|
-
var n, s = r.parentList;
|
|
151
|
-
let t = a;
|
|
152
|
-
for (n of s) {
|
|
153
|
-
var {
|
|
154
|
-
name: m,
|
|
155
|
-
fullPathHash: d
|
|
156
|
-
} = n;
|
|
157
|
-
let e = t.subdirMap;
|
|
158
|
-
e = e || (t.subdirMap = {}), t = (t = e[m]) || (e[m] = {
|
|
159
|
-
fullPathHash: d
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
let e = t.fileMap;
|
|
163
|
-
(e = e || (t.fileMap = {}))[r.name] = {
|
|
164
|
-
fileContent: r.view(i, !0),
|
|
165
|
-
fileContentKey: r.fileContentKey
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
return {
|
|
169
|
-
tree: a,
|
|
170
|
-
count: e.length
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
147
|
}
|
|
174
148
|
|
|
175
149
|
export {
|
package/src/QyDefaultOptions.js
CHANGED
package/src/QyFetch.js
CHANGED
|
@@ -7,24 +7,10 @@ class e extends r {
|
|
|
7
7
|
super(r), Object.assign(this, {
|
|
8
8
|
stack: []
|
|
9
9
|
});
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
indexDir(r, e, s) {
|
|
15
|
-
return u(this, super.indexDir(r, e, s));
|
|
16
|
-
}
|
|
17
|
-
file(r, e) {
|
|
18
|
-
return u(this, super.file(r, e));
|
|
19
|
-
}
|
|
20
|
-
view(r, e, s) {
|
|
21
|
-
return u(this, super.view(r, e, s));
|
|
22
|
-
}
|
|
23
|
-
queryFiles(r, e, s, t, i) {
|
|
24
|
-
return u(this, super.queryFiles(r, e, s, t, i));
|
|
25
|
-
}
|
|
26
|
-
queryFilesMulti(r, e, s, t) {
|
|
27
|
-
return u(this, super.queryFilesMulti(r, e, s, t));
|
|
10
|
+
for (let s of [ "dir", "indexDir", "file", "view", "triggerFile", "triggerFiles", "rpcFile", "rpcFiles", "queryFiles", "queryFilesMulti", "queryTree", "queryTreeMulti" ]) this[s] = (...r) => {
|
|
11
|
+
return e = this, r = super[s].apply(this, r), e.stack.push(r), e;
|
|
12
|
+
var e;
|
|
13
|
+
};
|
|
28
14
|
}
|
|
29
15
|
run() {
|
|
30
16
|
var r = this.stack;
|
|
@@ -32,10 +18,6 @@ class e extends r {
|
|
|
32
18
|
}
|
|
33
19
|
}
|
|
34
20
|
|
|
35
|
-
function u(r, e) {
|
|
36
|
-
return r.stack.push(e), r;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
21
|
export {
|
|
40
22
|
e as QyFetch
|
|
41
23
|
};
|
package/src/QyFileLogger.js
CHANGED
|
@@ -28,7 +28,7 @@ class n extends o {
|
|
|
28
28
|
(e = {
|
|
29
29
|
...s("QyFileLogger"),
|
|
30
30
|
...e
|
|
31
|
-
}).append = !e.clearLogAtStart, super(e, [
|
|
31
|
+
}).append = !e.clearLogAtStart, super(e, [], [ "startFileConsole", "switchFileConsole" ]),
|
|
32
32
|
Object.assign(this, {
|
|
33
33
|
logFileFolder: t,
|
|
34
34
|
qyLogFileSaver: new r(this, e)
|
|
@@ -40,7 +40,7 @@ class n extends o {
|
|
|
40
40
|
getDateDirPath() {
|
|
41
41
|
return this.dateDirPath;
|
|
42
42
|
}
|
|
43
|
-
async
|
|
43
|
+
async _op_start() {
|
|
44
44
|
var t = new Date(), t = (this.timeoutRef = setTimeout(this.switch.bind(this), g(t)),
|
|
45
45
|
this.dateDirPath = h(this, t));
|
|
46
46
|
this.qyLogFileSaver.start(a(t, "change.txt")), await this.startFileConsole(t);
|