datafolder 1.0.6 → 1.0.8
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 +7 -2
- package/index.js +1 -1
- package/internal.md +121 -0
- package/package.json +8 -6
- package/scripts/airbnb.js +77 -72
- package/scripts/airbnb2.js +78 -73
- package/scripts/airbnb2_queries.js +181 -229
- package/scripts/airbnb_queries.js +214 -265
- package/scripts/convertBinFiles.js +47 -0
- package/scripts/downloadFile.js +41 -40
- package/scripts/express.js +44 -48
- package/scripts/fastify.js +71 -80
- package/scripts/flights.js +71 -75
- package/scripts/flights2.js +78 -81
- package/scripts/flights2_queries.js +417 -455
- package/scripts/flights_queries.js +381 -407
- package/src/QyAcl.d.ts +17 -0
- package/src/QyAcl.js +113 -116
- package/src/QyAclSaver.d.ts +4 -0
- package/src/QyAclSaver.js +3 -3
- package/src/QyAclSaver_Worker.d.ts +9 -0
- package/src/QyAclSaver_Worker.js +2 -4
- package/src/QyAclWriter.d.ts +5 -0
- package/src/QyBatch.d.ts +42 -0
- package/src/QyBatch.js +8 -8
- package/src/QyBinWriter.d.ts +15 -0
- package/src/QyCD.d.ts +37 -0
- package/src/QyCD.js +27 -16
- package/src/QyCache.d.ts +44 -0
- package/src/QyCache.js +71 -59
- package/src/QyCompressor.d.ts +9 -0
- package/src/QyCompressor.js +29 -29
- package/src/QyCompressor_Worker.d.ts +1 -0
- package/src/QyDB.d.ts +42 -0
- package/src/QyDB.js +13 -11
- package/src/QyDefaultOptions.d.ts +1 -0
- package/src/QyDefaultOptions.js +3 -0
- package/src/QyDir.d.ts +48 -0
- package/src/QyDir.js +41 -41
- package/src/QyFetch.d.ts +7 -0
- package/src/QyFetch.js +3 -4
- package/src/QyFile.d.ts +19 -0
- package/src/QyFile.js +35 -34
- package/src/QyFileContentUtils.d.ts +13 -0
- package/src/QyFileContentUtils.js +126 -126
- package/src/QyFileLogger.d.ts +11 -0
- package/src/QyIndex.d.ts +6 -0
- package/src/QyIndex.js +73 -75
- package/src/QyIndexPropTree.d.ts +7 -0
- package/src/QyIndexPropTree.js +24 -24
- package/src/QyIntersectNode.d.ts +7 -0
- package/src/QyIntersectNode.js +15 -15
- package/src/QyItem.d.ts +30 -0
- package/src/QyItem.js +32 -28
- package/src/QyJsonSaver.d.ts +6 -0
- package/src/QyKVData.d.ts +12 -0
- package/src/QyKVData.js +30 -20
- package/src/QyKVDataCleaner.d.ts +4 -0
- package/src/QyKVDataCleaner.js +1 -1
- package/src/QyKVDataCleaner_Worker.d.ts +13 -0
- package/src/QyKVDataCleaner_Worker.js +2 -4
- package/src/QyKVDataLoader.d.ts +9 -0
- package/src/QyKVDataLoader.js +11 -11
- package/src/QyKVDataSaver.d.ts +4 -0
- package/src/QyKVDataSaver.js +6 -6
- package/src/QyKVDataSaver_Worker.d.ts +13 -0
- package/src/QyKVDataSaver_Worker.js +11 -13
- package/src/QyLogFileSaver.d.ts +4 -0
- package/src/QyLogFileSaver.js +1 -1
- package/src/QyLogFileSaver_Worker.d.ts +8 -0
- package/src/QyLogFileSaver_Worker.js +2 -4
- package/src/QyLogger.d.ts +10 -0
- package/src/QyLogger.js +40 -40
- package/src/QyMessageWorker.d.ts +5 -0
- package/src/QyMessageWorker.js +7 -7
- package/src/QyMessager.d.ts +7 -0
- package/src/QyMessager.js +30 -27
- package/src/QyMessager_Run.d.ts +1 -0
- package/src/QyMessager_Run.js +11 -6
- package/src/QyMod.d.ts +1 -0
- package/src/QyMod.js +6 -6
- package/src/QyOpRunner.d.ts +10 -0
- package/src/QyOpRunner.js +39 -39
- package/src/QyQueue.d.ts +11 -0
- package/src/QySaver.d.ts +10 -0
- package/src/QySnapshotCompactor.d.ts +4 -0
- package/src/QySnapshotCompactor.js +1 -1
- package/src/QySnapshotCompactor_Worker.d.ts +11 -0
- package/src/QySnapshotCompactor_Worker.js +21 -22
- package/src/QySnapshotSaver.d.ts +4 -0
- package/src/QySnapshotSaver.js +1 -1
- package/src/QySnapshotSaver_Worker.d.ts +16 -0
- package/src/QySnapshotSaver_Worker.js +56 -53
- package/src/QySnapshots.d.ts +27 -0
- package/src/QySnapshots.js +74 -66
- package/src/QyStructure.d.ts +1 -0
- package/src/QyStructure.js +18 -18
- package/src/QyTrigger.d.ts +9 -0
- package/src/QyTrigger.js +30 -30
- package/src/QyUnionNode.d.ts +17 -0
- package/src/QyUnionNode.js +2 -2
- package/src/QyUtils.d.ts +53 -0
- package/src/QyUtils.js +140 -117
- package/src/QyWorker.d.ts +5 -0
- package/src/QyWorker.js +18 -18
- package/src/hackernews.d.ts +1 -0
- package/src/hackernews.js +59 -47
- package/src/rpc/getRpcFiles.js +1 -0
- package/src/rpc/getTriggerFiles.js +1 -0
- package/src/simulate.d.ts +1 -0
- package/src/simulate2.d.ts +1 -0
- package/src/soc_pokec.d.ts +1 -0
- package/src/soc_pokec.js +7 -7
- package/static/codemirror.bundle/editor.bundle.js +370 -166
- package/static/datafolderui/QyStyledElement.js +8 -17
- package/static/datafolderui/QyUIFolderViewer.js +230 -0
- package/static/datafolderui/QyUIUtils.js +5 -5
- package/static/datafolderui/code-mirror.js +7 -7
- package/static/datafolderui/display-tree.js +22 -58
- package/static/datafolderui/explore-tree.js +10 -10
- package/static/datafolderui/folder-tree.js +71 -2
- package/static/datafolderui/hscrpt.js +26 -7
- package/static/datafolderui/json-view.js +34 -3
- package/static/datafolderui/main-page.js +67 -36
- package/static/datafolderui/query-editor.js +9 -9
- package/static/datafolderui/rpc-editor.js +31 -0
- package/static/datafolderui/trigger-editor.js +33 -0
- package/data/sampleDataFolder/qykv/history/acl/1_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/2_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/3_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/4_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/history/acl/5_acl.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/1/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/1/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/1/1_vL.txt +0 -10
- package/data/sampleDataFolder/qykv/snapshot/2/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/2/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/2/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/3/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/3/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/3/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/4/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/1_vL.txt +0 -1
- package/data/sampleDataFolder/qykv/snapshot/4/2_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/2_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/4/2_vL.txt +0 -9
- package/data/sampleDataFolder/qykv/snapshot/5/1_pM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/5/1_prefixPM.txt +0 -0
- package/data/sampleDataFolder/qykv/snapshot/5/1_vL.txt +0 -55
- package/data/sampleDataFolder/qykv/snapshot/info/1.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/2.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/3.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/4.json +0 -1
- package/data/sampleDataFolder/qykv/snapshot/info/5.json +0 -1
- package/data/sampleDataFolder/qylog/2026/02/15/08/change.txt +0 -58
- package/data/sampleDataFolder/qylog/2026/02/15/08/stderr.txt +0 -11
- package/data/sampleDataFolder/qylog/2026/02/15/08/stdout.txt +0 -36
- package/static/datafolderui/QyUIFolderTree.js +0 -179
package/src/QyCD.js
CHANGED
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
} from "./QyUtils.js";
|
|
5
5
|
|
|
6
6
|
class r {
|
|
7
|
+
qyCache;
|
|
8
|
+
currentDir = void 0;
|
|
7
9
|
constructor(r) {
|
|
8
10
|
this.qyCache = r;
|
|
9
11
|
}
|
|
@@ -11,33 +13,42 @@ class r {
|
|
|
11
13
|
return i(r) && (r = s(r)), this.cdP(r, e);
|
|
12
14
|
}
|
|
13
15
|
cdP(r, e = this.currentDir) {
|
|
14
|
-
return this.currentDir = this.qyCache
|
|
16
|
+
return this.currentDir = this.qyCache?.getOrCreateDir(r, e), this;
|
|
15
17
|
}
|
|
16
18
|
dir(r, e = this.currentDir) {
|
|
17
19
|
return i(r) && (r = s(r)), this.dirP(r, e);
|
|
18
20
|
}
|
|
19
21
|
dirP(r, e = this.currentDir) {
|
|
20
|
-
return this.qyCache
|
|
22
|
+
return this.qyCache?.getDir(r, e);
|
|
21
23
|
}
|
|
22
24
|
indexDir(r, e, t = this.currentDir) {
|
|
23
25
|
return i(r) && (r = s(r)), i(e) && (e = s(e)), this.indexDirP(r, e, t);
|
|
24
26
|
}
|
|
25
27
|
indexDirP(r, e, t = this.currentDir) {
|
|
26
|
-
var i = this.qyCache, r = i
|
|
28
|
+
var i = this.qyCache, r = i?.getDir(r, t);
|
|
27
29
|
if (r) {
|
|
28
|
-
t = i
|
|
29
|
-
if (t) return e && 0 != e.length ? i
|
|
30
|
+
t = i?.getIndexDir(r);
|
|
31
|
+
if (t) return e && 0 != e.length ? i?.getDir(e, t) : t;
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
34
|
file(r, e = this.currentDir) {
|
|
33
35
|
return i(r) && (r = s(r)), this.fileP(r, e);
|
|
34
36
|
}
|
|
35
37
|
fileP(r, e = this.currentDir) {
|
|
36
|
-
return this.qyCache
|
|
38
|
+
return this.qyCache?.getFile(r, e);
|
|
37
39
|
}
|
|
38
40
|
triggerFile(r) {
|
|
39
41
|
return this.qyCache.getTriggerFile(r);
|
|
40
42
|
}
|
|
43
|
+
get triggerFileList() {
|
|
44
|
+
return this.qyCache.triggerFileList;
|
|
45
|
+
}
|
|
46
|
+
rpcFile(r) {
|
|
47
|
+
return this.qyCache.getRpcFile(r);
|
|
48
|
+
}
|
|
49
|
+
get rpcFileList() {
|
|
50
|
+
return this.qyCache.rpcFileList;
|
|
51
|
+
}
|
|
41
52
|
view(r, e, t = this.currentDir) {
|
|
42
53
|
return i(r) && (r = s(r)), this.viewP(r, e, t);
|
|
43
54
|
}
|
|
@@ -50,32 +61,32 @@ class r {
|
|
|
50
61
|
queryFilesMulti(r, e, t, i = this.currentDir) {
|
|
51
62
|
return this.qyCache.queryFilesMulti(r, e, t, i);
|
|
52
63
|
}
|
|
53
|
-
queryTree(r, e, t, i, s,
|
|
54
|
-
return
|
|
64
|
+
queryTree(r, e, t, i, s, h = this.currentDir) {
|
|
65
|
+
return n(this.qyCache.queryFiles(r, e, i, s, h), t);
|
|
55
66
|
}
|
|
56
67
|
queryTreeMulti(r, e, t, i, s = this.currentDir) {
|
|
57
|
-
return
|
|
68
|
+
return n(this.qyCache.queryFilesMulti(r, t, i, s), e);
|
|
58
69
|
}
|
|
59
70
|
resetCurrentDir() {
|
|
60
71
|
this.currentDir = void 0;
|
|
61
72
|
}
|
|
62
73
|
fileListToTree(r, e) {
|
|
63
|
-
return
|
|
74
|
+
return n(r, e);
|
|
64
75
|
}
|
|
65
76
|
}
|
|
66
77
|
|
|
67
|
-
function
|
|
78
|
+
function n(r, t) {
|
|
68
79
|
var i, s = {};
|
|
69
80
|
for (i of r) {
|
|
70
|
-
var
|
|
81
|
+
var h, n = i.parentList;
|
|
71
82
|
let e = s;
|
|
72
|
-
for (
|
|
83
|
+
for (h of n) {
|
|
73
84
|
var {
|
|
74
|
-
name:
|
|
85
|
+
name: u,
|
|
75
86
|
fullPathHash: c
|
|
76
|
-
} =
|
|
87
|
+
} = h;
|
|
77
88
|
let r = e.subdirMap;
|
|
78
|
-
r = r || (e.subdirMap = {}), e = (e = r[
|
|
89
|
+
r = r || (e.subdirMap = {}), e = (e = r[u]) || (r[u] = {
|
|
79
90
|
fullPathHash: c
|
|
80
91
|
});
|
|
81
92
|
}
|
package/src/QyCache.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import EventEmitter from "node:events";
|
|
2
|
+
import { QyDir } from "./QyDir.ts";
|
|
3
|
+
import { QyFileLogger } from "./QyFileLogger.ts";
|
|
4
|
+
import { QyKVData } from "./QyKVData.ts";
|
|
5
|
+
import type { QyDB } from "./QyDB.ts";
|
|
6
|
+
import type { QyFile } from "./QyFile.ts";
|
|
7
|
+
export declare class QyCache extends EventEmitter {
|
|
8
|
+
rootFolder: string;
|
|
9
|
+
options: {};
|
|
10
|
+
qyDB: QyDB | undefined;
|
|
11
|
+
kvFolder: string;
|
|
12
|
+
rpcFolder: string;
|
|
13
|
+
rootDir: QyDir;
|
|
14
|
+
indexRootDir: QyDir | undefined;
|
|
15
|
+
exclusiveFilePath: string;
|
|
16
|
+
qyKVData: QyKVData;
|
|
17
|
+
qyFileLogger: QyFileLogger;
|
|
18
|
+
rpcFunMap: {};
|
|
19
|
+
constructor(rootFolder: string, options?: {}, qyDB?: QyDB);
|
|
20
|
+
start(): Promise<this>;
|
|
21
|
+
stop(): Promise<this>;
|
|
22
|
+
increaseChangeId(): number;
|
|
23
|
+
decreaseChangeId(): void;
|
|
24
|
+
save(changeId: any, cmdArgAsListObj: any, logText: any, syncList: any, needPromise: any): any;
|
|
25
|
+
getFile(namePath: QyFile | string | string[], parentDir?: QyDir): QyFile | undefined;
|
|
26
|
+
getDir(namePath: QyDir | string | string[], parentDir?: QyDir): QyDir | undefined;
|
|
27
|
+
getOrCreateFile(namePath: QyFile | string | string[], parentDir?: QyDir): QyFile;
|
|
28
|
+
getOrCreateDir(namePath: QyDir | string | string[], parentDir?: QyDir): QyDir;
|
|
29
|
+
getIndexDir(indexHostDir: QyDir): QyDir | undefined;
|
|
30
|
+
getOrCreateIndexDir(indexHostDir: any): QyDir | undefined;
|
|
31
|
+
getTriggerFile(triggerName: any): any;
|
|
32
|
+
getOrCreateTriggerFile(triggerName: any): any;
|
|
33
|
+
get triggerFileList(): any;
|
|
34
|
+
getRpcFile(rpcFunName: any): any;
|
|
35
|
+
getOrCreateRpcFile(rpcFunName: any): any;
|
|
36
|
+
get rpcFileList(): any;
|
|
37
|
+
insertTriggerToTree(triggerName: any, fileNamePath: any, propNamePathList: any, modCode: any): void;
|
|
38
|
+
removeTriggerFromTree(triggerName: any, fileNamePath: any): void;
|
|
39
|
+
insertRpc(rpcFunName: any, modCode: any): void;
|
|
40
|
+
removeRpc(rpcFunName: any): void;
|
|
41
|
+
queryFiles(indexHostDirNamePath: any, queryObj: any, limit: any, cursor: any, parentDir?: QyDir): never[];
|
|
42
|
+
queryFilesMulti(indexHostDirNamePathMulti: any, limit: any, cursor: any, parentDir?: QyDir): never[];
|
|
43
|
+
callRpc(rpcFunName: any, args: any, body: any): Promise<any>;
|
|
44
|
+
}
|
package/src/QyCache.js
CHANGED
|
@@ -5,26 +5,26 @@ import {
|
|
|
5
5
|
import r from "node:events";
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
|
-
QyDir as
|
|
8
|
+
QyDir as i
|
|
9
9
|
} from "./QyDir.js";
|
|
10
10
|
|
|
11
11
|
import {
|
|
12
|
-
QyFileLogger as
|
|
12
|
+
QyFileLogger as o
|
|
13
13
|
} from "./QyFileLogger.js";
|
|
14
14
|
|
|
15
15
|
import {
|
|
16
|
-
QyKVData as
|
|
16
|
+
QyKVData as a
|
|
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
25
|
isString as C,
|
|
26
26
|
lockExclusiveFilePath as q,
|
|
27
|
-
unlockExclusiveFilePath as
|
|
27
|
+
unlockExclusiveFilePath as g
|
|
28
28
|
} from "./QyUtils.js";
|
|
29
29
|
|
|
30
30
|
import {
|
|
@@ -41,47 +41,53 @@ import {
|
|
|
41
41
|
} from "./QyDefaultOptions.js";
|
|
42
42
|
|
|
43
43
|
import {
|
|
44
|
-
ensureDir as
|
|
44
|
+
ensureDir as x,
|
|
45
45
|
SpecialFilePaths as e
|
|
46
46
|
} from "./QyUtils.js";
|
|
47
47
|
|
|
48
48
|
import {
|
|
49
|
-
QueryCounter as
|
|
49
|
+
QueryCounter as h
|
|
50
50
|
} from "./QyUnionNode.js";
|
|
51
51
|
|
|
52
52
|
import {
|
|
53
|
-
QyKVDataLoader as
|
|
53
|
+
QyKVDataLoader as Q
|
|
54
54
|
} from "./QyKVDataLoader.js";
|
|
55
55
|
|
|
56
56
|
import {
|
|
57
57
|
requireFromModCode as p
|
|
58
58
|
} from "./QyMod.js";
|
|
59
59
|
|
|
60
|
+
import {
|
|
61
|
+
logger as S
|
|
62
|
+
} from "./QyLogger.js";
|
|
63
|
+
|
|
60
64
|
let {
|
|
61
|
-
IndexDirPath:
|
|
62
|
-
TriggerDirPath:
|
|
63
|
-
RpcDirPath:
|
|
65
|
+
IndexDirPath: P,
|
|
66
|
+
TriggerDirPath: L,
|
|
67
|
+
RpcDirPath: O
|
|
64
68
|
} = e;
|
|
65
69
|
|
|
66
70
|
class t extends r {
|
|
71
|
+
rootFolder;
|
|
72
|
+
options;
|
|
73
|
+
qyDB;
|
|
74
|
+
kvFolder;
|
|
75
|
+
rpcFolder;
|
|
76
|
+
rootDir;
|
|
77
|
+
indexRootDir = void 0;
|
|
78
|
+
exclusiveFilePath;
|
|
79
|
+
qyKVData;
|
|
80
|
+
qyFileLogger;
|
|
81
|
+
rpcFunMap = {};
|
|
67
82
|
constructor(r, e, t) {
|
|
68
|
-
super(), e = {
|
|
83
|
+
super(), this.options = e = {
|
|
69
84
|
...d("QyCache"),
|
|
70
85
|
...e
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
kvFolder: i,
|
|
77
|
-
rpcFolder: v(r, "rpc"),
|
|
78
|
-
options: e,
|
|
79
|
-
rootDir: new o("", !0, void 0, this),
|
|
80
|
-
exclusiveFilePath: v(r, ".opened"),
|
|
81
|
-
qyKVData: new s(i, e, this),
|
|
82
|
-
qyFileLogger: new a(v(r, "qylog"), e),
|
|
83
|
-
rpcFunMap: {}
|
|
84
|
-
});
|
|
86
|
+
}, this.rootFolder = r, this.qyDB = t;
|
|
87
|
+
t = this.kvFolder = v(r, "qykv");
|
|
88
|
+
this.rpcFolder = v(r, "rpc"), this.rootDir = new i("", !0, void 0, this),
|
|
89
|
+
this.exclusiveFilePath = v(r, ".opened"), this.qyKVData = new a(t, e, this),
|
|
90
|
+
this.qyFileLogger = new o(v(r, "qylog"), e);
|
|
85
91
|
}
|
|
86
92
|
async start() {
|
|
87
93
|
var {
|
|
@@ -93,16 +99,16 @@ class t extends r {
|
|
|
93
99
|
exclusiveFilePath: a,
|
|
94
100
|
rootDir: s
|
|
95
101
|
} = this;
|
|
96
|
-
|
|
102
|
+
S.log(`Starting at ${r}...`);
|
|
97
103
|
try {
|
|
98
|
-
await
|
|
104
|
+
await x(e), o.start();
|
|
99
105
|
var [ {
|
|
100
106
|
maxChangeId: g,
|
|
101
107
|
loadedMaxAclNum: n,
|
|
102
108
|
qySnapshots: l,
|
|
103
109
|
aclKeyValueMap: d
|
|
104
|
-
} ] = await Promise.all([ ((r, e) => (r = new
|
|
105
|
-
|
|
110
|
+
} ] = await Promise.all([ ((r, e) => (r = new Q(r, e)).load())(e, t), q(a) ]);
|
|
111
|
+
i.start(g, n, l, d);
|
|
106
112
|
} catch (r) {
|
|
107
113
|
throw o.stop(), r;
|
|
108
114
|
}
|
|
@@ -112,40 +118,40 @@ class t extends r {
|
|
|
112
118
|
fileMap: i
|
|
113
119
|
} = e;
|
|
114
120
|
for (var o of t) r(o);
|
|
115
|
-
}(s), this.indexRootDir = s.searchOrCreateSubdir(
|
|
116
|
-
var
|
|
117
|
-
e.triggerNodes = [ new f() ],
|
|
118
|
-
for (p of
|
|
121
|
+
}(s), this.indexRootDir = s.searchOrCreateSubdir(P);
|
|
122
|
+
var h = this, e = h.rootDir;
|
|
123
|
+
e.triggerNodes = [ new f() ], h.triggerRootDir = e.searchOrCreateSubdir(L);
|
|
124
|
+
for (p of h.triggerRootDir.fileList) {
|
|
119
125
|
var {
|
|
120
126
|
name: p,
|
|
121
|
-
fileContent:
|
|
127
|
+
fileContent: u
|
|
122
128
|
} = p, {
|
|
123
|
-
fileNamePath:
|
|
129
|
+
fileNamePath: u,
|
|
124
130
|
propNamePathList: c,
|
|
125
131
|
modCode: D
|
|
126
|
-
} =
|
|
127
|
-
|
|
132
|
+
} = u;
|
|
133
|
+
h.insertTriggerToTree(p, u, c, D);
|
|
128
134
|
}
|
|
129
135
|
var y = this;
|
|
130
|
-
y.rpcRootDir = y.rootDir.searchOrCreateSubdir(
|
|
131
|
-
for (
|
|
136
|
+
y.rpcRootDir = y.rootDir.searchOrCreateSubdir(O);
|
|
137
|
+
for (F of y.rpcRootDir.fileList) {
|
|
132
138
|
var {
|
|
133
|
-
name:
|
|
134
|
-
fileContent:
|
|
135
|
-
} =
|
|
136
|
-
C(
|
|
139
|
+
name: F,
|
|
140
|
+
fileContent: m
|
|
141
|
+
} = F;
|
|
142
|
+
C(m) && y.insertRpc(F, m);
|
|
137
143
|
}
|
|
138
|
-
return t.dumpStructureAtStart && await R(v(r, "qystruct"), s),
|
|
144
|
+
return t.dumpStructureAtStart && await R(v(r, "qystruct"), s), S.log("Started."),
|
|
139
145
|
this;
|
|
140
146
|
}
|
|
141
147
|
async stop() {
|
|
142
|
-
|
|
148
|
+
S.log("Stopping...");
|
|
143
149
|
var {
|
|
144
150
|
qyKVData: r,
|
|
145
151
|
qyFileLogger: e,
|
|
146
152
|
exclusiveFilePath: t
|
|
147
153
|
} = this;
|
|
148
|
-
return await r.stop(), await e.stop(),
|
|
154
|
+
return await r.stop(), await e.stop(), g(t), Object.assign(this, {
|
|
149
155
|
rootDir: void 0,
|
|
150
156
|
indexRootDir: void 0,
|
|
151
157
|
qyKVData: void 0,
|
|
@@ -154,7 +160,7 @@ class t extends r {
|
|
|
154
160
|
qyFileLogger: void 0,
|
|
155
161
|
triggerRootDir: void 0,
|
|
156
162
|
rpcRootDir: void 0
|
|
157
|
-
}),
|
|
163
|
+
}), S.log("Stopped."), this;
|
|
158
164
|
}
|
|
159
165
|
increaseChangeId() {
|
|
160
166
|
return this.qyKVData.increaseChangeId();
|
|
@@ -182,10 +188,10 @@ class t extends r {
|
|
|
182
188
|
return r.isDir ? r : C(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
|
|
183
189
|
}
|
|
184
190
|
getIndexDir(r) {
|
|
185
|
-
return this.indexRootDir
|
|
191
|
+
return this.indexRootDir?.getSubdir(r.fullPathHash);
|
|
186
192
|
}
|
|
187
193
|
getOrCreateIndexDir(r) {
|
|
188
|
-
return this.indexRootDir
|
|
194
|
+
return this.indexRootDir?.getOrCreateSubdir(r.fullPathHash);
|
|
189
195
|
}
|
|
190
196
|
getTriggerFile(r) {
|
|
191
197
|
return this.triggerRootDir.getFile(r);
|
|
@@ -193,22 +199,28 @@ class t extends r {
|
|
|
193
199
|
getOrCreateTriggerFile(r) {
|
|
194
200
|
return this.triggerRootDir.getOrCreateFile(r);
|
|
195
201
|
}
|
|
202
|
+
get triggerFileList() {
|
|
203
|
+
return this.triggerRootDir.fileList;
|
|
204
|
+
}
|
|
196
205
|
getRpcFile(r) {
|
|
197
206
|
return this.rpcRootDir.getFile(r);
|
|
198
207
|
}
|
|
199
208
|
getOrCreateRpcFile(r) {
|
|
200
209
|
return this.rpcRootDir.getOrCreateFile(r);
|
|
201
210
|
}
|
|
211
|
+
get rpcFileList() {
|
|
212
|
+
return this.rpcRootDir.fileList;
|
|
213
|
+
}
|
|
202
214
|
insertTriggerToTree(r, e, t, i) {
|
|
203
215
|
var {
|
|
204
216
|
rootDir: o,
|
|
205
217
|
qyDB: a
|
|
206
218
|
} = this, i = p("trigger", r, i, a);
|
|
207
|
-
o.triggerNodes[0].insertTrigger(r, e, t, i),
|
|
219
|
+
o.triggerNodes[0].insertTrigger(r, e, t, i), s(o, e);
|
|
208
220
|
}
|
|
209
221
|
removeTriggerFromTree(r, e) {
|
|
210
222
|
var t = this.rootDir;
|
|
211
|
-
t.triggerNodes[0].removeTrigger(r, e) &&
|
|
223
|
+
t.triggerNodes[0].removeTrigger(r, e) && s(t, e);
|
|
212
224
|
}
|
|
213
225
|
insertRpc(r, e) {
|
|
214
226
|
var {
|
|
@@ -221,26 +233,26 @@ class t extends r {
|
|
|
221
233
|
delete this.rpcFunMap[r];
|
|
222
234
|
}
|
|
223
235
|
queryFiles(r, e, t, i, o = this.rootDir) {
|
|
224
|
-
var a = [], t = (C(e) && !t && (t = 1), new
|
|
225
|
-
return
|
|
236
|
+
var a = [], t = (C(e) && !t && (t = 1), new h(t, i)), i = this.options.queryAutoCreateIndex;
|
|
237
|
+
return u(r, e, a, t, o, i), a;
|
|
226
238
|
}
|
|
227
239
|
queryFilesMulti(r, e, t, i = this.rootDir) {
|
|
228
|
-
var o, a, s = [], g = new
|
|
229
|
-
for ([ o, a ] of r)
|
|
240
|
+
var o, a, s = [], g = new h(e, t), n = this.options.queryAutoCreateIndex;
|
|
241
|
+
for ([ o, a ] of r) u(o, a, s, g, i, n);
|
|
230
242
|
return s;
|
|
231
243
|
}
|
|
232
244
|
async callRpc(e, r, t) {
|
|
233
245
|
var i, o = this.rpcFunMap[e];
|
|
234
|
-
if (!o) return i = `RPC ${e} not implemented
|
|
246
|
+
if (!o) return S.warn(i = `RPC ${e} not implemented.`), new Error(i);
|
|
235
247
|
try {
|
|
236
248
|
return await o(r, t);
|
|
237
249
|
} catch (r) {
|
|
238
|
-
return
|
|
250
|
+
return S.error(`Calling RPC ${e} failed:`, r), r;
|
|
239
251
|
}
|
|
240
252
|
}
|
|
241
253
|
}
|
|
242
254
|
|
|
243
|
-
function
|
|
255
|
+
function u(r, e, t, i, o, a) {
|
|
244
256
|
e && (a = a ? n(e) : void 0, l(r, o, a, e, t, i));
|
|
245
257
|
}
|
|
246
258
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const Zip_File_Extension = ".gz";
|
|
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
|
+
export declare function runOperation({ operation, srcFilePath, destFilePath, options }: {
|
|
5
|
+
operation: any;
|
|
6
|
+
srcFilePath: any;
|
|
7
|
+
destFilePath: any;
|
|
8
|
+
options: any;
|
|
9
|
+
}): Promise<void>;
|
package/src/QyCompressor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
extname as
|
|
2
|
+
extname as t
|
|
3
3
|
} from "node:path";
|
|
4
4
|
|
|
5
5
|
import {
|
|
@@ -17,70 +17,70 @@ import {
|
|
|
17
17
|
|
|
18
18
|
import {
|
|
19
19
|
createReadStream as n,
|
|
20
|
-
createWriteStream as
|
|
20
|
+
createWriteStream as d
|
|
21
21
|
} from "node:fs";
|
|
22
22
|
|
|
23
23
|
import m from "node:fs/promises";
|
|
24
24
|
|
|
25
25
|
import {
|
|
26
|
-
logger as
|
|
26
|
+
logger as p
|
|
27
27
|
} from "./QyLogger.js";
|
|
28
28
|
|
|
29
29
|
import {
|
|
30
|
-
isNotNullObj as
|
|
30
|
+
isNotNullObj as i,
|
|
31
31
|
folderOrFileExists as l,
|
|
32
|
-
ensureParentDir as
|
|
32
|
+
ensureParentDir as f
|
|
33
33
|
} from "./QyUtils.js";
|
|
34
34
|
|
|
35
35
|
import {
|
|
36
|
-
runOnceWithWorker as
|
|
36
|
+
runOnceWithWorker as c
|
|
37
37
|
} from "./QyWorker.js";
|
|
38
38
|
|
|
39
|
-
let
|
|
39
|
+
let g = r(e), o = ".gz", h = "QyCompressor_Worker.ts";
|
|
40
40
|
|
|
41
|
-
function
|
|
42
|
-
return
|
|
43
|
-
!1) : r.endsWith(
|
|
41
|
+
function w(e, r, o) {
|
|
42
|
+
return i(r) && (o = r, r = void 0), r = r || e + ".gz", o = o || {}, e.endsWith(".gz") ? (p.log(e + " already ends with .gz."),
|
|
43
|
+
!1) : r.endsWith(".gz") ? c(h, {
|
|
44
44
|
operation: "compress",
|
|
45
45
|
srcFilePath: e,
|
|
46
46
|
destFilePath: r,
|
|
47
47
|
options: o
|
|
48
|
-
}).promise : (
|
|
48
|
+
}).promise : (p.log(r + " doesn't end with .gz."), !1);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
function
|
|
52
|
-
return e.endsWith(
|
|
53
|
-
o = o || {},
|
|
51
|
+
function z(e, r, o) {
|
|
52
|
+
return e.endsWith(".gz") ? (i(r) && (o = r, r = void 0), r = r || e.replace(new RegExp(".gz$"), ""),
|
|
53
|
+
o = o || {}, ".gz" == t(r) ? (p.log(r + " already ends with .gz."), !1) : c(h, {
|
|
54
54
|
operation: "decompress",
|
|
55
55
|
srcFilePath: e,
|
|
56
56
|
destFilePath: r,
|
|
57
57
|
options: o
|
|
58
|
-
}).promise) : (
|
|
58
|
+
}).promise) : (p.log(e + " doesn't end with .gz."), !1);
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
async function
|
|
61
|
+
async function u({
|
|
62
62
|
operation: e,
|
|
63
63
|
srcFilePath: r,
|
|
64
64
|
destFilePath: o,
|
|
65
|
-
options:
|
|
65
|
+
options: t
|
|
66
66
|
}) {
|
|
67
67
|
var {
|
|
68
|
-
removeSrcAfterSuccess:
|
|
69
|
-
override:
|
|
70
|
-
} =
|
|
68
|
+
removeSrcAfterSuccess: t,
|
|
69
|
+
override: i
|
|
70
|
+
} = t;
|
|
71
71
|
if (!await l(r)) throw new Error(r + " doesn't exist.");
|
|
72
|
-
if (!
|
|
73
|
-
if (await
|
|
74
|
-
|
|
75
|
-
await m.unlink(r),
|
|
72
|
+
if (!i && await l(o)) throw new Error(o + " already exists.");
|
|
73
|
+
if (await f(o), await g(n(r), ("compress" == e ? s : a)(), d(o)), p.info(e + `ed ${r} to ${o}.`),
|
|
74
|
+
t) try {
|
|
75
|
+
await m.unlink(r), p.info("Unlinked " + r);
|
|
76
76
|
} catch (e) {
|
|
77
|
-
|
|
77
|
+
p.error(`Failed to unlink ${r}:`, e);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
export {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
o as Zip_File_Extension,
|
|
83
|
+
w as compressFile,
|
|
84
|
+
z as decompressFile,
|
|
85
|
+
u as runOperation
|
|
86
86
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/src/QyDB.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { QyFetch } from "./QyFetch.ts";
|
|
2
|
+
import { QyBatch } from "./QyBatch.ts";
|
|
3
|
+
import { QyCache } from "./QyCache.ts";
|
|
4
|
+
import { QyCD } from "./QyCD.ts";
|
|
5
|
+
import type { QyDir } from "./QyDir.ts";
|
|
6
|
+
import type { QyFile } from "./QyFile.ts";
|
|
7
|
+
export declare class QyDB extends QyCD {
|
|
8
|
+
rootFolder: string;
|
|
9
|
+
options: {};
|
|
10
|
+
fetch: QyFetch;
|
|
11
|
+
batch: QyBatch;
|
|
12
|
+
_immediate: QyBatch;
|
|
13
|
+
constructor(rootFolder?: string, options?: {});
|
|
14
|
+
start(options?: {}): Promise<this>;
|
|
15
|
+
stop(): Promise<void>;
|
|
16
|
+
createDir(namePath: string | string[]): QyDir;
|
|
17
|
+
createDirP(namePath: string | string[]): QyDir;
|
|
18
|
+
createFile(namePath: string | string[]): QyFile;
|
|
19
|
+
createFileP(namePath: string | string[]): QyFile;
|
|
20
|
+
createIndex(indexHostDirNamePath: string | string[] | QyDir, indexPropPathList: string[][]): any;
|
|
21
|
+
createIndexP(indexHostDirNamePath: string | string[] | QyDir, indexPropPathList: string[][]): any;
|
|
22
|
+
delIndex(indexHostDirNamePath: string | string[] | QyDir, indexPropPath: string | string[]): any;
|
|
23
|
+
delIndexP(indexHostDirNamePath: any, indexPropPath: any): any;
|
|
24
|
+
insert(namePath: any, content: any): any;
|
|
25
|
+
insertP(namePath: any, content: any): any;
|
|
26
|
+
remove(namePath: any, content: any): any;
|
|
27
|
+
removeP(namePath: any, content: any): any;
|
|
28
|
+
replace(namePath: any, content: any): any;
|
|
29
|
+
replaceP(namePath: any, content: any): any;
|
|
30
|
+
delDir(namePath: any): any;
|
|
31
|
+
delDirP(namePath: any): any;
|
|
32
|
+
delFile(namePath: any): any;
|
|
33
|
+
delFileP(namePath: any): any;
|
|
34
|
+
delContent(namePath: any): any;
|
|
35
|
+
delContentP(namePath: any): any;
|
|
36
|
+
insertTrigger(triggerName: any, fileNamePath: any, propNamePathList: any, modCode: any): any;
|
|
37
|
+
removeTrigger(triggerName: any): any;
|
|
38
|
+
insertRpc(rpcFunName: any, modCode: any): any;
|
|
39
|
+
removeRpc(rpcFunName: any): any;
|
|
40
|
+
on(eventName: any, listener: any): QyCache | undefined;
|
|
41
|
+
callRpc(rpcFunName: any, args: any, body: any): Promise<any> | undefined;
|
|
42
|
+
}
|
package/src/QyDB.js
CHANGED
|
@@ -30,14 +30,16 @@ import {
|
|
|
30
30
|
let d = e(m, "../data/sampleDataFolder");
|
|
31
31
|
|
|
32
32
|
class h extends t {
|
|
33
|
+
rootFolder;
|
|
34
|
+
options;
|
|
35
|
+
fetch;
|
|
36
|
+
batch;
|
|
37
|
+
_immediate;
|
|
33
38
|
constructor(e = d, t) {
|
|
34
|
-
s(e) && (t = e, e = d), super(),
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
...t
|
|
39
|
-
}
|
|
40
|
-
});
|
|
39
|
+
s(e) && (t = e, e = d), super(), this.options = {
|
|
40
|
+
...a("QyDB"),
|
|
41
|
+
...t
|
|
42
|
+
}, this.rootFolder = e;
|
|
41
43
|
}
|
|
42
44
|
async start(e) {
|
|
43
45
|
var t;
|
|
@@ -58,8 +60,8 @@ class h extends t {
|
|
|
58
60
|
batch: r,
|
|
59
61
|
_immediate: i
|
|
60
62
|
} = this;
|
|
61
|
-
e && (await e.stop(), t.qyCache = void 0, r
|
|
62
|
-
Object.assign(this, {
|
|
63
|
+
e && (await e.stop(), t && (t.qyCache = void 0), r && (r.qyCache = void 0),
|
|
64
|
+
i && (i.qyCache = void 0), Object.assign(this, {
|
|
63
65
|
qyCache: void 0,
|
|
64
66
|
fetch: void 0,
|
|
65
67
|
batch: void 0,
|
|
@@ -139,10 +141,10 @@ class h extends t {
|
|
|
139
141
|
return this._immediate.removeRpc(e).run();
|
|
140
142
|
}
|
|
141
143
|
on(e, t) {
|
|
142
|
-
return this.qyCache
|
|
144
|
+
return this.qyCache?.on(e, t);
|
|
143
145
|
}
|
|
144
146
|
callRpc(e, t, r) {
|
|
145
|
-
return this.qyCache
|
|
147
|
+
return this.qyCache?.callRpc(e, t, r);
|
|
146
148
|
}
|
|
147
149
|
}
|
|
148
150
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getDefaultOptions(className: any): any;
|