datafolder 1.0.10 → 1.0.12
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/{internal.md → Internal.md} +8 -1
- package/README.md +15 -1
- package/SKILL.md +191 -0
- package/SSD.md +3 -3
- package/package.json +2 -2
- package/scripts/flights2.js +2 -0
- 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/QyAclWriter.d.ts +1 -1
- package/src/QyBatch.d.ts +8 -11
- package/src/QyBatch.js +239 -211
- package/src/QyBinWriter.d.ts +2 -2
- package/src/QyBinWriter.js +15 -15
- package/src/QyCD.d.ts +2 -2
- package/src/QyCD.js +29 -29
- package/src/QyCache.d.ts +6 -1
- package/src/QyCache.js +72 -53
- package/src/QyCompressor.d.ts +2 -2
- package/src/QyCompressor.js +13 -13
- package/src/QyDB.d.ts +1 -22
- package/src/QyDB.js +23 -78
- package/src/QyDefaultOptions.js +5 -0
- package/src/QyDir.js +26 -27
- package/src/QyExpire.d.ts +21 -0
- package/src/QyExpire.js +113 -0
- package/src/QyExpireClock.d.ts +15 -0
- package/src/QyExpireClock.js +53 -0
- package/src/QyExpire_Worker.d.ts +20 -0
- package/src/QyExpire_Worker.js +127 -0
- package/src/QyFile.js +36 -25
- package/src/QyFileContentUtils.js +21 -21
- package/src/QyItem.d.ts +1 -0
- package/src/QyItem.js +15 -9
- package/src/QyJsonSaver.d.ts +1 -1
- package/src/QyJsonSaver.js +1 -1
- package/src/QyKVData.d.ts +5 -2
- package/src/QyKVData.js +126 -114
- package/src/QyKVDataCleaner.js +2 -2
- package/src/QyKVDataCleaner_Worker.js +37 -37
- 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/QyLogger.d.ts +1 -0
- package/src/QyLogger.js +1 -0
- 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 +12 -8
- 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.d.ts +1 -1
- package/src/QySnapshotCompactor_Worker.js +5 -5
- package/src/QySnapshotSaver.js +2 -2
- package/src/QySnapshotSaver_Worker.js +4 -4
- package/src/QySnapshots.d.ts +2 -2
- package/src/QySnapshots.js +38 -38
- package/src/QyTrigger.d.ts +1 -1
- package/src/QyTrigger.js +20 -21
- package/src/QyUtils.d.ts +3 -2
- package/src/QyUtils.js +93 -86
- package/src/hackernews.js +1 -1
- package/src/simulate.js +6 -6
- package/src/simulate2.js +5 -5
- package/src/soc_pokec.js +1 -1
- package/static/codemirror.bundle/editor.bundle.js +43 -9
- package/static/datafolderui/QyUIFolderViewer.js +1 -5
package/src/QyBinWriter.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export declare class QyBinWriter extends QyOpRunner {
|
|
|
3
3
|
_filePath: any;
|
|
4
4
|
_totalSavedSize: number;
|
|
5
5
|
fileHandle: any;
|
|
6
|
-
constructor(options?: any, filePath?:
|
|
6
|
+
constructor(options?: any, filePath?: any);
|
|
7
7
|
get filePath(): any;
|
|
8
8
|
set filePath(val: any);
|
|
9
9
|
get totalSavedSize(): number;
|
|
@@ -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,6 +30,8 @@ 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, isDir?: boolean): any;
|
|
34
|
+
getOrCreateExpireInfoFile(fullPathHash: any, isDir?: boolean): any;
|
|
32
35
|
get triggerFileList(): any;
|
|
33
36
|
getRpcFile(rpcFunName: any): any;
|
|
34
37
|
getOrCreateRpcFile(rpcFunName: any): any;
|
|
@@ -40,4 +43,6 @@ export declare class QyCache extends EventEmitter {
|
|
|
40
43
|
queryFiles(indexHostDirNamePath: any, queryObj: any, limit: any, cursor: any, parentDir?: any): never[];
|
|
41
44
|
queryFilesMulti(indexHostDirNamePathMulti: any, limit: any, cursor: any, parentDir?: any): never[];
|
|
42
45
|
callRpc(rpcFunName: any, args: any, body: any): Promise<any>;
|
|
46
|
+
monitorContentExpire(file: any, flattedAbsSecondObj: any): void;
|
|
47
|
+
unmonitorContentExpire(file: any, flattedDelObj: any): void;
|
|
43
48
|
}
|
package/src/QyCache.js
CHANGED
|
@@ -18,12 +18,12 @@ import {
|
|
|
18
18
|
|
|
19
19
|
import {
|
|
20
20
|
QyTriggerNode as f,
|
|
21
|
-
updateTriggerNodes as
|
|
21
|
+
updateTriggerNodes as n
|
|
22
22
|
} from "./QyTrigger.js";
|
|
23
23
|
|
|
24
24
|
import {
|
|
25
25
|
isString as C,
|
|
26
|
-
lockExclusiveFilePath as
|
|
26
|
+
lockExclusiveFilePath as x,
|
|
27
27
|
unlockExclusiveFilePath as i
|
|
28
28
|
} from "./QyUtils.js";
|
|
29
29
|
|
|
@@ -32,39 +32,40 @@ import {
|
|
|
32
32
|
} from "./QyStructure.js";
|
|
33
33
|
|
|
34
34
|
import {
|
|
35
|
-
getIndexPropPaths as
|
|
35
|
+
getIndexPropPaths as g,
|
|
36
36
|
parseNamePathAndQuery as l
|
|
37
37
|
} from "./QyIndex.js";
|
|
38
38
|
|
|
39
39
|
import {
|
|
40
|
-
getDefaultOptions as
|
|
40
|
+
getDefaultOptions as p
|
|
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 O
|
|
54
54
|
} from "./QyKVDataLoader.js";
|
|
55
55
|
|
|
56
56
|
import {
|
|
57
|
-
requireFromModCode as
|
|
57
|
+
requireFromModCode as d
|
|
58
58
|
} from "./QyMod.js";
|
|
59
59
|
|
|
60
60
|
import {
|
|
61
|
-
logger as
|
|
61
|
+
logger as Q
|
|
62
62
|
} from "./QyLogger.js";
|
|
63
63
|
|
|
64
64
|
let {
|
|
65
|
-
IndexDirPath:
|
|
66
|
-
TriggerDirPath:
|
|
67
|
-
RpcDirPath:
|
|
65
|
+
IndexDirPath: S,
|
|
66
|
+
TriggerDirPath: L,
|
|
67
|
+
RpcDirPath: P,
|
|
68
|
+
ExpireDirPath: j
|
|
68
69
|
} = e;
|
|
69
70
|
|
|
70
71
|
class t extends r {
|
|
@@ -77,13 +78,14 @@ class t extends r {
|
|
|
77
78
|
triggerRootDir;
|
|
78
79
|
rpcRootDir;
|
|
79
80
|
indexRootDir;
|
|
81
|
+
expireRootDir;
|
|
80
82
|
exclusiveFilePath;
|
|
81
83
|
qyKVData;
|
|
82
84
|
qyFileLogger;
|
|
83
85
|
rpcFunMap = {};
|
|
84
86
|
constructor(r, e, t) {
|
|
85
87
|
super(), e = {
|
|
86
|
-
...
|
|
88
|
+
...p("QyCache"),
|
|
87
89
|
...e
|
|
88
90
|
};
|
|
89
91
|
var i = v(r, "qykv");
|
|
@@ -109,16 +111,16 @@ class t extends r {
|
|
|
109
111
|
exclusiveFilePath: a,
|
|
110
112
|
rootDir: s
|
|
111
113
|
} = this;
|
|
112
|
-
|
|
114
|
+
Q.log(`Starting at ${r}...`);
|
|
113
115
|
try {
|
|
114
|
-
await
|
|
116
|
+
await q(e), o.start();
|
|
115
117
|
var [ {
|
|
116
|
-
maxChangeId:
|
|
117
|
-
loadedMaxAclNum:
|
|
118
|
+
maxChangeId: n,
|
|
119
|
+
loadedMaxAclNum: g,
|
|
118
120
|
qySnapshots: l,
|
|
119
|
-
aclKeyValueMap:
|
|
120
|
-
} ] = await Promise.all([ ((r, e) => (r = new
|
|
121
|
-
i.start(
|
|
121
|
+
aclKeyValueMap: p
|
|
122
|
+
} ] = await Promise.all([ ((r, e) => (r = new O(r, e)).load())(e, t), x(a) ]);
|
|
123
|
+
i.start(n, g, l, p);
|
|
122
124
|
} catch (r) {
|
|
123
125
|
throw o.stop(), r;
|
|
124
126
|
}
|
|
@@ -128,22 +130,18 @@ class t extends r {
|
|
|
128
130
|
fileMap: i
|
|
129
131
|
} = e;
|
|
130
132
|
for (var o of t) r(o);
|
|
131
|
-
}(s), this.indexRootDir = s.searchOrCreateSubdir(
|
|
132
|
-
var
|
|
133
|
-
e.triggerNodes = [ new f() ]
|
|
134
|
-
for (
|
|
133
|
+
}(s), this.indexRootDir = s.searchOrCreateSubdir(S), this.expireRootDir = s.searchOrCreateSubdir(j);
|
|
134
|
+
var u = this, e = u.rootDir;
|
|
135
|
+
e.triggerNodes = [ new f() ];
|
|
136
|
+
for (d of (e = u.triggerRootDir = e.searchOrCreateSubdir(L)).fileList) {
|
|
135
137
|
var {
|
|
136
|
-
name:
|
|
138
|
+
name: d,
|
|
137
139
|
fileContent: h
|
|
138
|
-
} =
|
|
139
|
-
|
|
140
|
-
propNamePathList: c,
|
|
141
|
-
modCode: D
|
|
142
|
-
} = h;
|
|
143
|
-
p.insertTriggerToTree(u, h, c, D);
|
|
140
|
+
} = d, [ h, c, D ] = h;
|
|
141
|
+
u.insertTriggerToTree(d, h, c, D);
|
|
144
142
|
}
|
|
145
143
|
var y = this;
|
|
146
|
-
y.rpcRootDir = y.rootDir.searchOrCreateSubdir(
|
|
144
|
+
y.rpcRootDir = y.rootDir.searchOrCreateSubdir(P);
|
|
147
145
|
for (F of y.rpcRootDir.fileList) {
|
|
148
146
|
var {
|
|
149
147
|
name: F,
|
|
@@ -151,27 +149,28 @@ class t extends r {
|
|
|
151
149
|
} = F;
|
|
152
150
|
C(m) && y.insertRpc(F, m);
|
|
153
151
|
}
|
|
154
|
-
return t.dumpStructureAtStart && await R(v(r, "qystruct"), s),
|
|
152
|
+
return t.dumpStructureAtStart && await R(v(r, "qystruct"), s), Q.log("Started."),
|
|
155
153
|
this;
|
|
156
154
|
}
|
|
157
155
|
async stop() {
|
|
158
|
-
|
|
156
|
+
Q.log("Stopping...");
|
|
159
157
|
var {
|
|
160
158
|
qyKVData: r,
|
|
161
159
|
qyFileLogger: e,
|
|
162
160
|
exclusiveFilePath: t
|
|
163
161
|
} = this;
|
|
164
|
-
return await r.stop(),
|
|
162
|
+
return await r.stop(), Q.log("QyFileLogger stopped."), await e.stop(), i(t),
|
|
165
163
|
Object.assign(this, {
|
|
166
164
|
rootDir: void 0,
|
|
167
165
|
indexRootDir: void 0,
|
|
166
|
+
expireRootDir: void 0,
|
|
167
|
+
triggerRootDir: void 0,
|
|
168
|
+
rpcRootDir: void 0,
|
|
168
169
|
qyKVData: void 0,
|
|
169
170
|
rpcFunMap: void 0,
|
|
170
171
|
qyDB: void 0,
|
|
171
|
-
qyFileLogger: void 0
|
|
172
|
-
|
|
173
|
-
rpcRootDir: void 0
|
|
174
|
-
}), S.log("Stopped."), this;
|
|
172
|
+
qyFileLogger: void 0
|
|
173
|
+
}), Q.log("Stopped."), this;
|
|
175
174
|
}
|
|
176
175
|
increaseChangeId() {
|
|
177
176
|
return this.qyKVData.increaseChangeId();
|
|
@@ -199,10 +198,10 @@ class t extends r {
|
|
|
199
198
|
return r.isDir ? r : C(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
|
|
200
199
|
}
|
|
201
200
|
getIndexDir(r) {
|
|
202
|
-
return this.indexRootDir
|
|
201
|
+
return this.indexRootDir.searchSubdir(c(r.fullPathHash));
|
|
203
202
|
}
|
|
204
203
|
getOrCreateIndexDir(r) {
|
|
205
|
-
return this.indexRootDir
|
|
204
|
+
return this.indexRootDir.searchOrCreateSubdir(c(r.fullPathHash));
|
|
206
205
|
}
|
|
207
206
|
getTriggerFile(r) {
|
|
208
207
|
return this.triggerRootDir.getFile(r);
|
|
@@ -210,6 +209,12 @@ class t extends r {
|
|
|
210
209
|
getOrCreateTriggerFile(r) {
|
|
211
210
|
return this.triggerRootDir.getOrCreateFile(r);
|
|
212
211
|
}
|
|
212
|
+
getExpireInfoFile(r, e = !1) {
|
|
213
|
+
return this.expireRootDir.searchFile(h(r, e));
|
|
214
|
+
}
|
|
215
|
+
getOrCreateExpireInfoFile(r, e = !1) {
|
|
216
|
+
return this.expireRootDir.searchOrCreateFile(h(r, e));
|
|
217
|
+
}
|
|
213
218
|
get triggerFileList() {
|
|
214
219
|
return this.triggerRootDir.fileList;
|
|
215
220
|
}
|
|
@@ -226,45 +231,59 @@ class t extends r {
|
|
|
226
231
|
var {
|
|
227
232
|
rootDir: o,
|
|
228
233
|
qyDB: a
|
|
229
|
-
} = this, i =
|
|
230
|
-
o.triggerNodes[0].insertTrigger(r, e, t, i),
|
|
234
|
+
} = this, i = d("trigger", r, i, a);
|
|
235
|
+
o.triggerNodes[0].insertTrigger(r, e, t, i), n(o, e);
|
|
231
236
|
}
|
|
232
237
|
removeTriggerFromTree(r, e) {
|
|
233
238
|
var t = this.rootDir;
|
|
234
|
-
t.triggerNodes[0].removeTrigger(r, e) &&
|
|
239
|
+
t.triggerNodes[0].removeTrigger(r, e) && n(t, e);
|
|
235
240
|
}
|
|
236
241
|
insertRpc(r, e) {
|
|
237
242
|
var {
|
|
238
243
|
rpcFunMap: t,
|
|
239
244
|
qyDB: i
|
|
240
|
-
} = this, e =
|
|
245
|
+
} = this, e = d("rpc", r, e, i);
|
|
241
246
|
e && (t[r] = e);
|
|
242
247
|
}
|
|
243
248
|
removeRpc(r) {
|
|
244
249
|
delete this.rpcFunMap[r];
|
|
245
250
|
}
|
|
246
251
|
queryFiles(r, e, t, i, o = this.rootDir) {
|
|
247
|
-
var a = [], t = (C(e) && !t && (t = 1), new
|
|
248
|
-
return
|
|
252
|
+
var a = [], t = (C(e) && !t && (t = 1), new u(t, i)), i = this.options.queryAutoCreateIndex;
|
|
253
|
+
return D(r, e, a, t, o, i), a;
|
|
249
254
|
}
|
|
250
255
|
queryFilesMulti(r, e, t, i = this.rootDir) {
|
|
251
|
-
var o, a, s = [],
|
|
252
|
-
for ([ o, a ] of r)
|
|
256
|
+
var o, a, s = [], n = new u(e, t), g = this.options.queryAutoCreateIndex;
|
|
257
|
+
for ([ o, a ] of r) D(o, a, s, n, i, g);
|
|
253
258
|
return s;
|
|
254
259
|
}
|
|
255
260
|
async callRpc(e, r, t) {
|
|
256
261
|
var i, o = this.rpcFunMap[e];
|
|
257
|
-
if (!o) return
|
|
262
|
+
if (!o) return Q.warn(i = `RPC ${e} not implemented.`), new Error(i);
|
|
258
263
|
try {
|
|
259
264
|
return await o(r, t);
|
|
260
265
|
} catch (r) {
|
|
261
|
-
return
|
|
266
|
+
return Q.error(`Calling RPC ${e} failed:`, r), r;
|
|
262
267
|
}
|
|
263
268
|
}
|
|
269
|
+
monitorContentExpire(r, e) {
|
|
270
|
+
this.qyKVData.monitorContentExpire(r, e);
|
|
271
|
+
}
|
|
272
|
+
unmonitorContentExpire(r, e) {
|
|
273
|
+
this.qyKVData.unmonitorContentExpire(r, e);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
function h(r, e) {
|
|
278
|
+
return [ e ? "d" : "f", r.substring(0, 2), r ];
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
function c(r) {
|
|
282
|
+
return [ r[0], r ];
|
|
264
283
|
}
|
|
265
284
|
|
|
266
|
-
function
|
|
267
|
-
e && (a = a ?
|
|
285
|
+
function D(r, e, t, i, o, a) {
|
|
286
|
+
e && (a = a ? g(e) : void 0, l(r, o, a, e, t, i));
|
|
268
287
|
}
|
|
269
288
|
|
|
270
289
|
export {
|
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;
|
package/src/QyCompressor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
extname as
|
|
2
|
+
extname as i
|
|
3
3
|
} from "node:path";
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
} from "./QyLogger.js";
|
|
28
28
|
|
|
29
29
|
import {
|
|
30
|
-
isNotNullObj as
|
|
30
|
+
isNotNullObj as t,
|
|
31
31
|
folderOrFileExists as l,
|
|
32
32
|
ensureParentDir as f
|
|
33
33
|
} from "./QyUtils.js";
|
|
@@ -38,8 +38,8 @@ import {
|
|
|
38
38
|
|
|
39
39
|
let g = r(e), o = ".gz", h = "QyCompressor_Worker.ts";
|
|
40
40
|
|
|
41
|
-
function w(e, r, o) {
|
|
42
|
-
return
|
|
41
|
+
function w(e, r = void 0, o = void 0) {
|
|
42
|
+
return t(r) && (o = r, r = void 0), r = r || e + ".gz", o = o || {}, e.endsWith(".gz") ? (p.log(e + " already ends with .gz."),
|
|
43
43
|
!1) : r.endsWith(".gz") ? c(h, {
|
|
44
44
|
operation: "compress",
|
|
45
45
|
srcFilePath: e,
|
|
@@ -48,9 +48,9 @@ function w(e, r, o) {
|
|
|
48
48
|
}).promise : (p.log(r + " doesn't end with .gz."), !1);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
function z(e, r, o) {
|
|
52
|
-
return e.endsWith(".gz") ? (
|
|
53
|
-
o = o || {}, ".gz" ==
|
|
51
|
+
function z(e, r = void 0, o = void 0) {
|
|
52
|
+
return e.endsWith(".gz") ? (t(r) && (o = r, r = void 0), r = r || e.replace(new RegExp(".gz$"), ""),
|
|
53
|
+
o = o || {}, ".gz" == i(r) ? (p.log(r + " already ends with .gz."), !1) : c(h, {
|
|
54
54
|
operation: "decompress",
|
|
55
55
|
srcFilePath: e,
|
|
56
56
|
destFilePath: r,
|
|
@@ -62,16 +62,16 @@ async function u({
|
|
|
62
62
|
operation: e,
|
|
63
63
|
srcFilePath: r,
|
|
64
64
|
destFilePath: o,
|
|
65
|
-
options:
|
|
65
|
+
options: i
|
|
66
66
|
}) {
|
|
67
67
|
var {
|
|
68
|
-
removeSrcAfterSuccess:
|
|
69
|
-
override:
|
|
70
|
-
} =
|
|
68
|
+
removeSrcAfterSuccess: i,
|
|
69
|
+
override: t
|
|
70
|
+
} = i;
|
|
71
71
|
if (!await l(r)) throw new Error(r + " doesn't exist.");
|
|
72
|
-
if (!
|
|
72
|
+
if (!t && await l(o)) throw new Error(o + " already exists.");
|
|
73
73
|
if (await f(o), await g(n(r), ("compress" == e ? s : a)(), d(o)), p.info(e + `ed ${r} to ${o}.`),
|
|
74
|
-
|
|
74
|
+
i) try {
|
|
75
75
|
await m.unlink(r), p.info("Unlinked " + r);
|
|
76
76
|
} catch (e) {
|
|
77
77
|
p.error(`Failed to unlink ${r}:`, e);
|
package/src/QyDB.d.ts
CHANGED
|
@@ -10,30 +10,9 @@ export declare class QyDB extends QyCD {
|
|
|
10
10
|
constructor(rootFolder?: string, options?: {});
|
|
11
11
|
start(options?: {}): Promise<this>;
|
|
12
12
|
stop(): Promise<void>;
|
|
13
|
+
get currentBatch(): any;
|
|
13
14
|
createDir(namePath: string | string[]): QyDir;
|
|
14
|
-
createDirP(namePath: string | string[]): QyDir;
|
|
15
15
|
createFile(namePath: string | string[]): QyFile;
|
|
16
|
-
createFileP(namePath: string | string[]): QyFile;
|
|
17
|
-
createIndex(indexHostDirNamePath: string | string[] | QyDir, indexPropPathList: string[] | string[][]): any;
|
|
18
|
-
createIndexP(indexHostDirNamePath: string | string[] | QyDir, indexPropPathList: string[][]): any;
|
|
19
|
-
delIndex(indexHostDirNamePath: string | string[] | QyDir, indexPropPath: string | string[]): any;
|
|
20
|
-
delIndexP(indexHostDirNamePath: any, indexPropPath: any): any;
|
|
21
|
-
insert(namePath: any, content: any): any;
|
|
22
|
-
insertP(namePath: any, content: any): any;
|
|
23
|
-
remove(namePath: any, content: any): any;
|
|
24
|
-
removeP(namePath: any, content: any): any;
|
|
25
|
-
replace(namePath: any, content: any): any;
|
|
26
|
-
replaceP(namePath: any, content: any): any;
|
|
27
|
-
delDir(namePath: any): any;
|
|
28
|
-
delDirP(namePath: any): any;
|
|
29
|
-
delFile(namePath: any): any;
|
|
30
|
-
delFileP(namePath: any): any;
|
|
31
|
-
delContent(namePath: any): any;
|
|
32
|
-
delContentP(namePath: any): any;
|
|
33
|
-
insertTrigger(triggerName: any, fileNamePath: any, propNamePathList: any, modCode: any): any;
|
|
34
|
-
removeTrigger(triggerName: any): any;
|
|
35
|
-
insertRpc(rpcFunName: any, modCode: any): any;
|
|
36
|
-
removeRpc(rpcFunName: any): any;
|
|
37
16
|
on(eventName: any, listener: any): any;
|
|
38
17
|
callRpc(rpcFunName: any, args: any, body?: undefined): any;
|
|
39
18
|
}
|