datafolder 1.0.11 → 1.0.13
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 +16 -0
- package/package.json +1 -1
- package/scripts/airbnb.js +1 -1
- package/scripts/airbnb2.js +1 -1
- package/scripts/flights.js +2 -2
- package/scripts/flights2.js +4 -2
- package/src/QyAcl.d.ts +13 -7
- package/src/QyAcl.js +122 -138
- package/src/QyAclSaver.js +2 -2
- package/src/QyAclSaver_Worker.d.ts +2 -2
- package/src/QyBatch.d.ts +16 -12
- package/src/QyBatch.js +339 -228
- package/src/QyBinWriter.d.ts +1 -1
- package/src/QyBinWriter.js +15 -15
- package/src/QyCD.d.ts +2 -2
- package/src/QyCD.js +29 -29
- package/src/QyCache.d.ts +9 -1
- package/src/QyCache.js +110 -73
- package/src/QyCompressor.d.ts +2 -2
- package/src/QyCompressor.js +13 -13
- package/src/QyDB.d.ts +4 -22
- package/src/QyDB.js +49 -89
- package/src/QyDefaultOptions.js +2 -0
- package/src/QyDir.d.ts +1 -0
- package/src/QyDir.js +58 -30
- package/src/QyExpire.d.ts +15 -0
- package/src/QyExpire.js +105 -0
- package/src/QyExpireInfo.d.ts +10 -0
- package/src/QyExpireInfo.js +92 -0
- package/src/QyExpire_Worker.d.ts +19 -0
- package/src/QyExpire_Worker.js +112 -0
- package/src/QyFile.d.ts +1 -1
- package/src/QyFile.js +68 -42
- package/src/QyFileContentUtils.d.ts +1 -0
- package/src/QyFileContentUtils.js +108 -94
- package/src/QyItem.d.ts +7 -0
- package/src/QyItem.js +39 -15
- package/src/QyJsonSaver.d.ts +1 -1
- package/src/QyJsonSaver.js +1 -1
- package/src/QyKVData.d.ts +6 -1
- package/src/QyKVData.js +176 -157
- package/src/QyKVDataCleaner.js +2 -2
- package/src/QyKVDataSaver.js +2 -2
- package/src/QyKVDataSaver_Worker.d.ts +2 -2
- package/src/QyKVDataSaver_Worker.js +5 -5
- package/src/QyLogFileSaver.js +2 -2
- package/src/QyMessageWorker.d.ts +1 -1
- package/src/QyMessageWorker.js +10 -10
- package/src/QyMessager.d.ts +1 -1
- package/src/QyMessager.js +37 -36
- package/src/QyMessager_Run.js +9 -6
- package/src/QyQueue.js +8 -12
- package/src/QySaver.d.ts +1 -1
- package/src/QySaver.js +1 -1
- package/src/QySnapshotCompactor.js +2 -2
- package/src/QySnapshotCompactor_Worker.js +1 -1
- package/src/QySnapshotSaver.js +2 -2
- package/src/QySnapshotSaver_Worker.js +1 -1
- package/src/QyTrigger.d.ts +1 -1
- package/src/QyTrigger.js +20 -21
- package/src/QyUtils.d.ts +5 -2
- package/src/QyUtils.js +112 -98
- package/src/hackernews.js +1 -1
- package/src/simulate.js +6 -6
- package/src/simulate2.js +4 -4
- package/src/soc_pokec.js +1 -1
- package/static/codemirror.bundle/editor.bundle.js +49 -10
- package/static/datafolderui/QyUIFolderViewer.js +1 -5
- package/src/rpc/evalCode.js +0 -9
- package/src/rpc/getFileContent.js +0 -16
- package/src/rpc/getRpcFiles.js +0 -1
- package/src/rpc/getSubItems.js +0 -16
- package/src/rpc/getTriggerFiles.js +0 -1
- package/src/rpc/queryFiles.js +0 -10
- package/src/rpc/reloadRpc.js +0 -1
package/src/QyBinWriter.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare class QyBinWriter extends QyOpRunner {
|
|
|
11
11
|
save(changeId: any, data: any, needPromise: any): any;
|
|
12
12
|
truncate(): any;
|
|
13
13
|
switch(newFilePath: any): any;
|
|
14
|
-
getBinData(dataQueue: any, changeId?: undefined): any;
|
|
14
|
+
getBinData(dataQueue: any[], changeId?: undefined): any;
|
|
15
15
|
_op_start(filePath: any): Promise<this>;
|
|
16
16
|
_op_stop(): Promise<void>;
|
|
17
17
|
_op_save(changeId: any, dataQueue: any): Promise<void> | undefined;
|
package/src/QyBinWriter.js
CHANGED
|
@@ -20,10 +20,10 @@ import {
|
|
|
20
20
|
} from "./QyDefaultOptions.js";
|
|
21
21
|
|
|
22
22
|
import {
|
|
23
|
-
logger as
|
|
23
|
+
logger as g
|
|
24
24
|
} from "./QyLogger.js";
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
var {} = Array;
|
|
27
27
|
|
|
28
28
|
class e extends t {
|
|
29
29
|
_filePath;
|
|
@@ -48,12 +48,12 @@ class e extends t {
|
|
|
48
48
|
this._totalSavedSize = t;
|
|
49
49
|
}
|
|
50
50
|
save(t, e, a) {
|
|
51
|
-
null == e && (e = t,
|
|
51
|
+
null == e && ([ e, t ] = [ t, 0 ]);
|
|
52
52
|
var i, r = this.lastOp;
|
|
53
|
-
return "_op_save" === r?.opFunName ? (i = r.args, i[0] = t, i
|
|
53
|
+
return "_op_save" === r?.opFunName ? (i = r.args, i[0] = t, i[1].push(e),
|
|
54
54
|
a && l(r), r.promise) : (i = {
|
|
55
55
|
opFunName: "_op_save",
|
|
56
|
-
args: [ t,
|
|
56
|
+
args: [ t, [ e ] ]
|
|
57
57
|
}, a ? this.pushAndRunWithPromise(i) : this.pushAndRun(i));
|
|
58
58
|
}
|
|
59
59
|
truncate() {
|
|
@@ -70,7 +70,7 @@ class e extends t {
|
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
getBinData(t, e = 0) {
|
|
73
|
-
var a = t.length;
|
|
73
|
+
var a = (t = t.flat()).length;
|
|
74
74
|
return 0 == a ? "" : 1 == a ? t[0] : Buffer.isBuffer(t[0]) ? Buffer.concat(t) : Buffer.concat(t.map(t => Buffer.from(t)));
|
|
75
75
|
}
|
|
76
76
|
async _op_start(t) {
|
|
@@ -84,7 +84,7 @@ class e extends t {
|
|
|
84
84
|
if (t) try {
|
|
85
85
|
await t.close(), this.fileHandle = void 0;
|
|
86
86
|
} catch (t) {
|
|
87
|
-
|
|
87
|
+
g.error(`Close ${e} failed:`, t);
|
|
88
88
|
}
|
|
89
89
|
f(this);
|
|
90
90
|
}
|
|
@@ -99,8 +99,8 @@ class e extends t {
|
|
|
99
99
|
} = t, {
|
|
100
100
|
emitSaveEvent: o,
|
|
101
101
|
maxFileSize: l,
|
|
102
|
-
maxRetryInterval:
|
|
103
|
-
retryIntervalFactor:
|
|
102
|
+
maxRetryInterval: f,
|
|
103
|
+
retryIntervalFactor: h
|
|
104
104
|
} = n, p = S(a), u = p.length, c = `size ${v(u)} (MaxId:${e}) to ` + s, d;
|
|
105
105
|
for (;"_op_truncate" !== t.firstOp?.opFunName; ) try {
|
|
106
106
|
await i.appendFile(p, {
|
|
@@ -110,8 +110,8 @@ class e extends t {
|
|
|
110
110
|
return o && 0 < e && t.emit("save", e), void (!t.maxFileSizeEmitted && l && m > l && (t.maxFileSizeEmitted = !0,
|
|
111
111
|
t.emit("maxFileSize", m)));
|
|
112
112
|
} catch (t) {
|
|
113
|
-
|
|
114
|
-
d = d ? Math.min(
|
|
113
|
+
g.error(`Saving ${c} failed:`, t, "Truncated back to " + r), await i.truncate(r),
|
|
114
|
+
d = d ? Math.min(f, d * h) : 1, g.log(`Retry in ${d} seconds`),
|
|
115
115
|
await _(d);
|
|
116
116
|
}
|
|
117
117
|
})(this, t, e);
|
|
@@ -122,9 +122,9 @@ class e extends t {
|
|
|
122
122
|
filePath: e
|
|
123
123
|
} = this;
|
|
124
124
|
if (t) try {
|
|
125
|
-
await t.truncate(0),
|
|
125
|
+
await t.truncate(0), g.info("Truncated " + e);
|
|
126
126
|
} catch (t) {
|
|
127
|
-
|
|
127
|
+
g.error(`Truncate ${e} failed:`, t);
|
|
128
128
|
}
|
|
129
129
|
f(this);
|
|
130
130
|
}
|
|
@@ -133,7 +133,7 @@ class e extends t {
|
|
|
133
133
|
fileHandle: e,
|
|
134
134
|
filePath: a
|
|
135
135
|
} = this;
|
|
136
|
-
e && a == t || (await i(this, t),
|
|
136
|
+
e && a == t || (await i(this, t), g.info(`Switched from ${a} to ` + t));
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
@@ -148,7 +148,7 @@ async function i(t, e) {
|
|
|
148
148
|
var r = i.append;
|
|
149
149
|
t.fileHandle = await s(e, r ? "a" : "w"), t.filePath = e, r && (t.totalSavedSize = await o(e));
|
|
150
150
|
} catch (t) {
|
|
151
|
-
|
|
151
|
+
g.error(`Open ${e} failed:`, t);
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
|
package/src/QyCD.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export declare class QyCD {
|
|
|
9
9
|
cdP(namePath: string | string[] | QyDir, parentDir?: any): this;
|
|
10
10
|
dir(namePath: string | string[], parentDir?: any): QyDir | undefined;
|
|
11
11
|
dirP(namePath: string | string[], parentDir?: any): QyDir | undefined;
|
|
12
|
-
indexDir(indexHostDirNamePath: string | string[] | QyDir, namePath: string |
|
|
12
|
+
indexDir(indexHostDirNamePath: string | string[] | QyDir, namePath: string | any[], parentDir?: any): QyDir | undefined;
|
|
13
13
|
indexDirP(indexHostDirNamePath: string | string[] | QyDir, namePath: string | string[], parentDir?: any): QyDir | undefined;
|
|
14
14
|
file(namePath: string | string[], parentDir?: any): QyFile | undefined;
|
|
15
15
|
fileP(namePath: string | string[], parentDir?: any): QyFile | undefined;
|
|
@@ -19,7 +19,7 @@ export declare class QyCD {
|
|
|
19
19
|
get rpcFileList(): any;
|
|
20
20
|
view(namePath: any, spec?: undefined, parentDir?: any): any;
|
|
21
21
|
viewP(namePath: any, spec: any, parentDir?: any): any;
|
|
22
|
-
queryFiles(indexHostDirNamePath: any, queryObj: any, limit
|
|
22
|
+
queryFiles(indexHostDirNamePath: any, queryObj: any, limit?: number | undefined, cursor?: number | undefined, parentDir?: any): any;
|
|
23
23
|
queryFilesMulti(indexHostDirNamePathMulti: any, limit: any, cursor: any, parentDir?: any): any;
|
|
24
24
|
queryTree(indexHostDirNamePath: any, queryObj: any, view: any, limit: any, cursor: any, parentDir?: any): {
|
|
25
25
|
tree: any;
|
package/src/QyCD.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
isString as
|
|
2
|
+
isString as t,
|
|
3
3
|
pathSplit as s
|
|
4
4
|
} from "./QyUtils.js";
|
|
5
5
|
|
|
@@ -10,29 +10,29 @@ class r {
|
|
|
10
10
|
this.qyCache = r;
|
|
11
11
|
}
|
|
12
12
|
cd(r, e = this.currentDir) {
|
|
13
|
-
return
|
|
13
|
+
return t(r) && (r = s(r)), this.cdP(r, e);
|
|
14
14
|
}
|
|
15
15
|
cdP(r, e = this.currentDir) {
|
|
16
16
|
return this.currentDir = this.qyCache?.getOrCreateDir(r, e), this;
|
|
17
17
|
}
|
|
18
18
|
dir(r, e = this.currentDir) {
|
|
19
|
-
return
|
|
19
|
+
return t(r) && (r = s(r)), this.dirP(r, e);
|
|
20
20
|
}
|
|
21
21
|
dirP(r, e = this.currentDir) {
|
|
22
22
|
return this.qyCache?.getDir(r, e);
|
|
23
23
|
}
|
|
24
|
-
indexDir(r, e,
|
|
25
|
-
return
|
|
24
|
+
indexDir(r, e, i = this.currentDir) {
|
|
25
|
+
return t(r) && (r = s(r)), t(e) && (e = s(e)), this.indexDirP(r, e, i);
|
|
26
26
|
}
|
|
27
|
-
indexDirP(r, e,
|
|
28
|
-
var
|
|
27
|
+
indexDirP(r, e, i = this.currentDir) {
|
|
28
|
+
var t = this.qyCache, r = t?.getDir(r, i);
|
|
29
29
|
if (r) {
|
|
30
|
-
|
|
31
|
-
if (
|
|
30
|
+
i = t?.getIndexDir(r);
|
|
31
|
+
if (i) return e && 0 != e.length ? t?.getDir(e, i) : i;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
file(r, e = this.currentDir) {
|
|
35
|
-
return
|
|
35
|
+
return t(r) && (r = s(r)), this.fileP(r, e);
|
|
36
36
|
}
|
|
37
37
|
fileP(r, e = this.currentDir) {
|
|
38
38
|
return this.qyCache?.getFile(r, e);
|
|
@@ -49,23 +49,23 @@ class r {
|
|
|
49
49
|
get rpcFileList() {
|
|
50
50
|
return this.qyCache.rpcFileList;
|
|
51
51
|
}
|
|
52
|
-
view(r, e = void 0,
|
|
53
|
-
return
|
|
52
|
+
view(r, e = void 0, i = this.currentDir) {
|
|
53
|
+
return t(r) && (r = s(r)), this.viewP(r, e, i);
|
|
54
54
|
}
|
|
55
|
-
viewP(r, e,
|
|
56
|
-
return this.qyCache.getFile(r,
|
|
55
|
+
viewP(r, e, i = this.currentDir) {
|
|
56
|
+
return this.qyCache.getFile(r, i)?.view(e);
|
|
57
57
|
}
|
|
58
|
-
queryFiles(r, e,
|
|
59
|
-
return this.qyCache.queryFiles(r, e,
|
|
58
|
+
queryFiles(r, e, i = void 0, t = void 0, s = this.currentDir) {
|
|
59
|
+
return this.qyCache.queryFiles(r, e, i, t, s);
|
|
60
60
|
}
|
|
61
|
-
queryFilesMulti(r, e,
|
|
62
|
-
return this.qyCache.queryFilesMulti(r, e,
|
|
61
|
+
queryFilesMulti(r, e, i, t = this.currentDir) {
|
|
62
|
+
return this.qyCache.queryFilesMulti(r, e, i, t);
|
|
63
63
|
}
|
|
64
|
-
queryTree(r, e,
|
|
65
|
-
return n(this.qyCache.queryFiles(r, e,
|
|
64
|
+
queryTree(r, e, i, t, s, h = this.currentDir) {
|
|
65
|
+
return n(this.qyCache.queryFiles(r, e, t, s, h), i);
|
|
66
66
|
}
|
|
67
|
-
queryTreeMulti(r, e,
|
|
68
|
-
return n(this.qyCache.queryFilesMulti(r,
|
|
67
|
+
queryTreeMulti(r, e, i, t, s = this.currentDir) {
|
|
68
|
+
return n(this.qyCache.queryFilesMulti(r, i, t, s), e);
|
|
69
69
|
}
|
|
70
70
|
resetCurrentDir() {
|
|
71
71
|
this.currentDir = void 0;
|
|
@@ -75,10 +75,10 @@ class r {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
function n(r,
|
|
79
|
-
var
|
|
80
|
-
for (
|
|
81
|
-
var h, n =
|
|
78
|
+
function n(r, i) {
|
|
79
|
+
var t, s = {};
|
|
80
|
+
for (t of r) {
|
|
81
|
+
var h, n = t.parentList;
|
|
82
82
|
let e = s;
|
|
83
83
|
for (h of n) {
|
|
84
84
|
var {
|
|
@@ -91,9 +91,9 @@ function n(r, t) {
|
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
let r = e.fileMap;
|
|
94
|
-
(r = r || (e.fileMap = {}))[
|
|
95
|
-
fileContent:
|
|
96
|
-
fileContentKey:
|
|
94
|
+
(r = r || (e.fileMap = {}))[t.name] = {
|
|
95
|
+
fileContent: t.view(i, !0),
|
|
96
|
+
fileContentKey: t.fileContentKey
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
99
|
return {
|
package/src/QyCache.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare class QyCache extends EventEmitter {
|
|
|
11
11
|
triggerRootDir: any;
|
|
12
12
|
rpcRootDir: any;
|
|
13
13
|
indexRootDir: any;
|
|
14
|
+
expireRootDir: any;
|
|
14
15
|
exclusiveFilePath: any;
|
|
15
16
|
qyKVData: any;
|
|
16
17
|
qyFileLogger: any;
|
|
@@ -20,7 +21,7 @@ export declare class QyCache extends EventEmitter {
|
|
|
20
21
|
stop(): Promise<this>;
|
|
21
22
|
increaseChangeId(): any;
|
|
22
23
|
decreaseChangeId(): void;
|
|
23
|
-
save(changeId: any,
|
|
24
|
+
save(changeId: any, cmdArgAsListChanges: any, logText: any, syncList: any, needPromise: any): any;
|
|
24
25
|
getFile(namePath: QyFile | string | string[], parentDir?: any): QyFile | undefined;
|
|
25
26
|
getDir(namePath: QyDir | string | string[], parentDir?: any): QyDir | undefined;
|
|
26
27
|
getOrCreateFile(namePath: QyFile | string | string[], parentDir?: any): QyFile;
|
|
@@ -29,10 +30,13 @@ export declare class QyCache extends EventEmitter {
|
|
|
29
30
|
getOrCreateIndexDir(indexHostDir: any): any;
|
|
30
31
|
getTriggerFile(triggerName: any): any;
|
|
31
32
|
getOrCreateTriggerFile(triggerName: any): any;
|
|
33
|
+
getExpireInfoFile(fullPathHash: any, type?: string): any;
|
|
34
|
+
getOrCreateExpireInfoFile(fullPathHash: any, type?: string): any;
|
|
32
35
|
get triggerFileList(): any;
|
|
33
36
|
getRpcFile(rpcFunName: any): any;
|
|
34
37
|
getOrCreateRpcFile(rpcFunName: any): any;
|
|
35
38
|
get rpcFileList(): any;
|
|
39
|
+
get metaFile(): any;
|
|
36
40
|
insertTriggerToTree(triggerName: any, fileNamePath: any, propNamePathList: any, modCode: any): void;
|
|
37
41
|
removeTriggerFromTree(triggerName: any, fileNamePath: any): void;
|
|
38
42
|
insertRpc(rpcFunName: any, modCode: any): void;
|
|
@@ -40,4 +44,8 @@ export declare class QyCache extends EventEmitter {
|
|
|
40
44
|
queryFiles(indexHostDirNamePath: any, queryObj: any, limit: any, cursor: any, parentDir?: any): never[];
|
|
41
45
|
queryFilesMulti(indexHostDirNamePathMulti: any, limit: any, cursor: any, parentDir?: any): never[];
|
|
42
46
|
callRpc(rpcFunName: any, args: any, body: any): Promise<any>;
|
|
47
|
+
monitorItemExpire(item: any, expireTime: any): void;
|
|
48
|
+
unmonitorItemExpire(item: any): void;
|
|
49
|
+
monitorContentExpire(file: any, flattedAbsTimeObj: any): void;
|
|
50
|
+
unmonitorContentExpire(file: any, flattedDelObj: any): void;
|
|
43
51
|
}
|
package/src/QyCache.js
CHANGED
|
@@ -5,48 +5,48 @@ import {
|
|
|
5
5
|
import r from "node:events";
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
|
-
QyDir as
|
|
8
|
+
QyDir as p
|
|
9
9
|
} from "./QyDir.js";
|
|
10
10
|
|
|
11
11
|
import {
|
|
12
|
-
QyFileLogger as
|
|
12
|
+
QyFileLogger as u
|
|
13
13
|
} from "./QyFileLogger.js";
|
|
14
14
|
|
|
15
15
|
import {
|
|
16
|
-
QyKVData as
|
|
16
|
+
QyKVData as d
|
|
17
17
|
} from "./QyKVData.js";
|
|
18
18
|
|
|
19
19
|
import {
|
|
20
20
|
QyTriggerNode as f,
|
|
21
|
-
updateTriggerNodes as
|
|
21
|
+
updateTriggerNodes as s
|
|
22
22
|
} from "./QyTrigger.js";
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
|
-
isString as
|
|
26
|
-
lockExclusiveFilePath as
|
|
25
|
+
isString as x,
|
|
26
|
+
lockExclusiveFilePath as C,
|
|
27
27
|
unlockExclusiveFilePath as i
|
|
28
28
|
} from "./QyUtils.js";
|
|
29
29
|
|
|
30
30
|
import {
|
|
31
|
-
dumpStructure as
|
|
31
|
+
dumpStructure as q
|
|
32
32
|
} from "./QyStructure.js";
|
|
33
33
|
|
|
34
34
|
import {
|
|
35
35
|
getIndexPropPaths as n,
|
|
36
|
-
parseNamePathAndQuery as
|
|
36
|
+
parseNamePathAndQuery as g
|
|
37
37
|
} from "./QyIndex.js";
|
|
38
38
|
|
|
39
39
|
import {
|
|
40
|
-
getDefaultOptions as
|
|
40
|
+
getDefaultOptions as h
|
|
41
41
|
} from "./QyDefaultOptions.js";
|
|
42
42
|
|
|
43
43
|
import {
|
|
44
|
-
ensureDir as
|
|
44
|
+
ensureDir as R,
|
|
45
45
|
SpecialFilePaths as e
|
|
46
46
|
} from "./QyUtils.js";
|
|
47
47
|
|
|
48
48
|
import {
|
|
49
|
-
QueryCounter as
|
|
49
|
+
QueryCounter as l
|
|
50
50
|
} from "./QyUnionNode.js";
|
|
51
51
|
|
|
52
52
|
import {
|
|
@@ -54,20 +54,23 @@ import {
|
|
|
54
54
|
} from "./QyKVDataLoader.js";
|
|
55
55
|
|
|
56
56
|
import {
|
|
57
|
-
requireFromModCode as
|
|
57
|
+
requireFromModCode as c
|
|
58
58
|
} from "./QyMod.js";
|
|
59
59
|
|
|
60
60
|
import {
|
|
61
|
-
logger as
|
|
61
|
+
logger as O
|
|
62
62
|
} from "./QyLogger.js";
|
|
63
63
|
|
|
64
64
|
let {
|
|
65
|
-
|
|
65
|
+
HiddenFolderName: D,
|
|
66
|
+
IndexDirPath: F,
|
|
66
67
|
TriggerDirPath: P,
|
|
67
|
-
RpcDirPath:
|
|
68
|
+
RpcDirPath: S,
|
|
69
|
+
ExpireDirPath: m,
|
|
70
|
+
MetaFilePath: t
|
|
68
71
|
} = e;
|
|
69
72
|
|
|
70
|
-
class
|
|
73
|
+
class o extends r {
|
|
71
74
|
rootFolder;
|
|
72
75
|
options;
|
|
73
76
|
qyDB;
|
|
@@ -77,26 +80,34 @@ class t extends r {
|
|
|
77
80
|
triggerRootDir;
|
|
78
81
|
rpcRootDir;
|
|
79
82
|
indexRootDir;
|
|
83
|
+
expireRootDir;
|
|
80
84
|
exclusiveFilePath;
|
|
81
85
|
qyKVData;
|
|
82
86
|
qyFileLogger;
|
|
83
87
|
rpcFunMap = {};
|
|
84
88
|
constructor(r, e, t) {
|
|
85
89
|
super(), e = {
|
|
86
|
-
...
|
|
90
|
+
...h("QyCache"),
|
|
87
91
|
...e
|
|
88
92
|
};
|
|
89
|
-
var i = v(r, "qykv");
|
|
90
|
-
|
|
93
|
+
var i = v(r, "qykv"), o = m.at(-1), a = F.at(-1), s = new p("", !0, void 0, this), n = new p(D, !0, s), g = new p(o, !0, n), l = new p(a, !0, n);
|
|
94
|
+
s._subdirMap = {
|
|
95
|
+
[D]: n
|
|
96
|
+
}, n._subdirMap = {
|
|
97
|
+
[o]: g,
|
|
98
|
+
[a]: l
|
|
99
|
+
}, Object.assign(this, {
|
|
91
100
|
rootFolder: r,
|
|
92
101
|
options: e,
|
|
93
102
|
qyDB: t,
|
|
94
103
|
kvFolder: i,
|
|
104
|
+
rootDir: s,
|
|
105
|
+
expireRootDir: g,
|
|
106
|
+
indexRootDir: l,
|
|
95
107
|
rpcFolder: v(r, "rpc"),
|
|
96
|
-
rootDir: new o("", !0, void 0, this),
|
|
97
108
|
exclusiveFilePath: v(r, ".opened"),
|
|
98
|
-
qyKVData: new
|
|
99
|
-
qyFileLogger: new
|
|
109
|
+
qyKVData: new d(i, e, this),
|
|
110
|
+
qyFileLogger: new u(v(r, "qylog"), e)
|
|
100
111
|
});
|
|
101
112
|
}
|
|
102
113
|
async start() {
|
|
@@ -109,16 +120,16 @@ class t extends r {
|
|
|
109
120
|
exclusiveFilePath: a,
|
|
110
121
|
rootDir: s
|
|
111
122
|
} = this;
|
|
112
|
-
|
|
123
|
+
O.log(`Starting at ${r}...`);
|
|
113
124
|
try {
|
|
114
|
-
await
|
|
125
|
+
await R(e), o.start();
|
|
115
126
|
var [ {
|
|
116
|
-
maxChangeId:
|
|
117
|
-
loadedMaxAclNum:
|
|
127
|
+
maxChangeId: n,
|
|
128
|
+
loadedMaxAclNum: g,
|
|
118
129
|
qySnapshots: l,
|
|
119
|
-
aclKeyValueMap:
|
|
120
|
-
} ] = await Promise.all([ ((r, e) => (r = new Q(r, e)).load())(e, t),
|
|
121
|
-
i.start(
|
|
130
|
+
aclKeyValueMap: p
|
|
131
|
+
} ] = await Promise.all([ ((r, e) => (r = new Q(r, e)).load())(e, t), C(a) ]);
|
|
132
|
+
i.start(n, g, l, p);
|
|
122
133
|
} catch (r) {
|
|
123
134
|
throw o.stop(), r;
|
|
124
135
|
}
|
|
@@ -128,50 +139,47 @@ class t extends r {
|
|
|
128
139
|
fileMap: i
|
|
129
140
|
} = e;
|
|
130
141
|
for (var o of t) r(o);
|
|
131
|
-
}(s)
|
|
132
|
-
var
|
|
133
|
-
e.triggerNodes = [ new f() ]
|
|
134
|
-
for (
|
|
142
|
+
}(s);
|
|
143
|
+
var u = this, e = u.rootDir;
|
|
144
|
+
e.triggerNodes = [ new f() ];
|
|
145
|
+
for (d of (e = u.triggerRootDir = e.searchOrCreateSubdir(P)).fileList) {
|
|
135
146
|
var {
|
|
136
|
-
name:
|
|
147
|
+
name: d,
|
|
137
148
|
fileContent: h
|
|
138
|
-
} =
|
|
139
|
-
|
|
140
|
-
propNamePathList: c,
|
|
141
|
-
modCode: D
|
|
142
|
-
} = h;
|
|
143
|
-
p.insertTriggerToTree(u, h, c, D);
|
|
149
|
+
} = d, [ h, c, D ] = h;
|
|
150
|
+
u.insertTriggerToTree(d, h, c, D);
|
|
144
151
|
}
|
|
145
|
-
var
|
|
146
|
-
|
|
147
|
-
for (
|
|
152
|
+
var F = this;
|
|
153
|
+
F.rpcRootDir = F.rootDir.searchOrCreateSubdir(S);
|
|
154
|
+
for (m of F.rpcRootDir.fileList) {
|
|
148
155
|
var {
|
|
149
|
-
name:
|
|
150
|
-
fileContent:
|
|
151
|
-
} =
|
|
152
|
-
|
|
156
|
+
name: m,
|
|
157
|
+
fileContent: y
|
|
158
|
+
} = m;
|
|
159
|
+
x(y) && F.insertRpc(m, y);
|
|
153
160
|
}
|
|
154
|
-
return t.dumpStructureAtStart && await
|
|
161
|
+
return t.dumpStructureAtStart && await q(v(r, "qystruct"), s), O.log("Started."),
|
|
155
162
|
this;
|
|
156
163
|
}
|
|
157
164
|
async stop() {
|
|
158
|
-
|
|
165
|
+
O.log("Stopping...");
|
|
159
166
|
var {
|
|
160
167
|
qyKVData: r,
|
|
161
168
|
qyFileLogger: e,
|
|
162
169
|
exclusiveFilePath: t
|
|
163
170
|
} = this;
|
|
164
|
-
return await r.stop(),
|
|
171
|
+
return await r.stop(), O.log("QyFileLogger stopped."), await e.stop(), i(t),
|
|
165
172
|
Object.assign(this, {
|
|
166
173
|
rootDir: void 0,
|
|
167
174
|
indexRootDir: void 0,
|
|
175
|
+
expireRootDir: void 0,
|
|
176
|
+
triggerRootDir: void 0,
|
|
177
|
+
rpcRootDir: void 0,
|
|
168
178
|
qyKVData: void 0,
|
|
169
179
|
rpcFunMap: void 0,
|
|
170
180
|
qyDB: void 0,
|
|
171
|
-
qyFileLogger: void 0
|
|
172
|
-
|
|
173
|
-
rpcRootDir: void 0
|
|
174
|
-
}), S.log("Stopped."), this;
|
|
181
|
+
qyFileLogger: void 0
|
|
182
|
+
}), O.log("Stopped."), this;
|
|
175
183
|
}
|
|
176
184
|
increaseChangeId() {
|
|
177
185
|
return this.qyKVData.increaseChangeId();
|
|
@@ -187,22 +195,22 @@ class t extends r {
|
|
|
187
195
|
return t && s.save(r, t), a.save(r, e, i, o);
|
|
188
196
|
}
|
|
189
197
|
getFile(r, e = this.rootDir) {
|
|
190
|
-
return r.isFile ? r :
|
|
198
|
+
return r.isFile ? r : x(r) ? e.getFile(r) : e.searchFile(r);
|
|
191
199
|
}
|
|
192
200
|
getDir(r, e = this.rootDir) {
|
|
193
|
-
return r.isDir ? r :
|
|
201
|
+
return r.isDir ? r : x(r) ? e.getSubdir(r) : e.searchSubdir(r);
|
|
194
202
|
}
|
|
195
203
|
getOrCreateFile(r, e = this.rootDir) {
|
|
196
|
-
return r.isFile ? r :
|
|
204
|
+
return r.isFile ? r : x(r) ? e.getOrCreateFile(r) : e.searchOrCreateFile(r);
|
|
197
205
|
}
|
|
198
206
|
getOrCreateDir(r, e = this.rootDir) {
|
|
199
|
-
return r.isDir ? r :
|
|
207
|
+
return r.isDir ? r : x(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
|
|
200
208
|
}
|
|
201
209
|
getIndexDir(r) {
|
|
202
|
-
return this.indexRootDir
|
|
210
|
+
return this.indexRootDir.searchSubdir(y(r.fullPathHash));
|
|
203
211
|
}
|
|
204
212
|
getOrCreateIndexDir(r) {
|
|
205
|
-
return this.indexRootDir
|
|
213
|
+
return this.indexRootDir.searchOrCreateSubdir(y(r.fullPathHash));
|
|
206
214
|
}
|
|
207
215
|
getTriggerFile(r) {
|
|
208
216
|
return this.triggerRootDir.getFile(r);
|
|
@@ -210,6 +218,12 @@ class t extends r {
|
|
|
210
218
|
getOrCreateTriggerFile(r) {
|
|
211
219
|
return this.triggerRootDir.getOrCreateFile(r);
|
|
212
220
|
}
|
|
221
|
+
getExpireInfoFile(r, e = "c") {
|
|
222
|
+
return this.expireRootDir.searchFile(a(r, e));
|
|
223
|
+
}
|
|
224
|
+
getOrCreateExpireInfoFile(r, e = "c") {
|
|
225
|
+
return this.expireRootDir.searchOrCreateFile(a(r, e));
|
|
226
|
+
}
|
|
213
227
|
get triggerFileList() {
|
|
214
228
|
return this.triggerRootDir.fileList;
|
|
215
229
|
}
|
|
@@ -222,51 +236,74 @@ class t extends r {
|
|
|
222
236
|
get rpcFileList() {
|
|
223
237
|
return this.rpcRootDir.fileList;
|
|
224
238
|
}
|
|
239
|
+
get metaFile() {
|
|
240
|
+
return this.rootDir.searchOrCreateFile(t);
|
|
241
|
+
}
|
|
225
242
|
insertTriggerToTree(r, e, t, i) {
|
|
226
243
|
var {
|
|
227
244
|
rootDir: o,
|
|
228
245
|
qyDB: a
|
|
229
|
-
} = this, i =
|
|
230
|
-
o.triggerNodes[0].insertTrigger(r, e, t, i),
|
|
246
|
+
} = this, i = c("trigger", r, i, a);
|
|
247
|
+
o.triggerNodes[0].insertTrigger(r, e, t, i), s(o, e);
|
|
231
248
|
}
|
|
232
249
|
removeTriggerFromTree(r, e) {
|
|
233
250
|
var t = this.rootDir;
|
|
234
|
-
t.triggerNodes[0].removeTrigger(r, e) &&
|
|
251
|
+
t.triggerNodes[0].removeTrigger(r, e) && s(t, e);
|
|
235
252
|
}
|
|
236
253
|
insertRpc(r, e) {
|
|
237
254
|
var {
|
|
238
255
|
rpcFunMap: t,
|
|
239
256
|
qyDB: i
|
|
240
|
-
} = this, e =
|
|
257
|
+
} = this, e = c("rpc", r, e, i);
|
|
241
258
|
e && (t[r] = e);
|
|
242
259
|
}
|
|
243
260
|
removeRpc(r) {
|
|
244
261
|
delete this.rpcFunMap[r];
|
|
245
262
|
}
|
|
246
263
|
queryFiles(r, e, t, i, o = this.rootDir) {
|
|
247
|
-
var a = [], t = (
|
|
248
|
-
return
|
|
264
|
+
var a = [], t = (x(e) && !t && (t = 1), new l(t, i)), i = this.options.queryAutoCreateIndex;
|
|
265
|
+
return w(r, e, a, t, o, i), a;
|
|
249
266
|
}
|
|
250
267
|
queryFilesMulti(r, e, t, i = this.rootDir) {
|
|
251
|
-
var o, a, s = [],
|
|
252
|
-
for ([ o, a ] of r)
|
|
268
|
+
var o, a, s = [], n = new l(e, t), g = this.options.queryAutoCreateIndex;
|
|
269
|
+
for ([ o, a ] of r) w(o, a, s, n, i, g);
|
|
253
270
|
return s;
|
|
254
271
|
}
|
|
255
272
|
async callRpc(e, r, t) {
|
|
256
273
|
var i, o = this.rpcFunMap[e];
|
|
257
|
-
if (!o) return
|
|
274
|
+
if (!o) return O.warn(i = `RPC ${e} not implemented.`), new Error(i);
|
|
258
275
|
try {
|
|
259
276
|
return await o(r, t);
|
|
260
277
|
} catch (r) {
|
|
261
|
-
return
|
|
278
|
+
return O.error(`Calling RPC ${e} failed:`, r), r;
|
|
262
279
|
}
|
|
263
280
|
}
|
|
281
|
+
monitorItemExpire(r, e) {
|
|
282
|
+
this.qyKVData.monitorItemExpire(r, e);
|
|
283
|
+
}
|
|
284
|
+
unmonitorItemExpire(r) {
|
|
285
|
+
this.qyKVData.unmonitorItemExpire(r);
|
|
286
|
+
}
|
|
287
|
+
monitorContentExpire(r, e) {
|
|
288
|
+
this.qyKVData.monitorContentExpire(r, e);
|
|
289
|
+
}
|
|
290
|
+
unmonitorContentExpire(r, e) {
|
|
291
|
+
this.qyKVData.unmonitorContentExpire(r, e);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function a(r, e) {
|
|
296
|
+
return [ e, r.substring(0, 2), r ];
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function y(r) {
|
|
300
|
+
return [ r[0], r ];
|
|
264
301
|
}
|
|
265
302
|
|
|
266
|
-
function
|
|
267
|
-
e && (a = a ? n(e) : void 0,
|
|
303
|
+
function w(r, e, t, i, o, a) {
|
|
304
|
+
e && (a = a ? n(e) : void 0, g(r, o, a, e, t, i));
|
|
268
305
|
}
|
|
269
306
|
|
|
270
307
|
export {
|
|
271
|
-
|
|
308
|
+
o as QyCache
|
|
272
309
|
};
|
package/src/QyCompressor.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const Zip_File_Extension = ".gz";
|
|
2
|
-
export declare function compressFile(srcFilePath: any, destFilePath
|
|
3
|
-
export declare function decompressFile(srcFilePath: any, destFilePath
|
|
2
|
+
export declare function compressFile(srcFilePath: any, destFilePath?: any, options?: any): any;
|
|
3
|
+
export declare function decompressFile(srcFilePath: any, destFilePath?: any, options?: any): any;
|
|
4
4
|
export declare function runOperation({ operation, srcFilePath, destFilePath, options }: {
|
|
5
5
|
operation: any;
|
|
6
6
|
srcFilePath: any;
|