datafolder 1.0.7 → 1.0.9
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 +4 -1
- package/index.js +1 -1
- package/internal.md +5 -3
- package/package.json +7 -5
- 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 -49
- 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 +8 -6
- package/src/QyCache.d.ts +44 -0
- package/src/QyCache.js +65 -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 +2 -3
- 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 +11 -10
- 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 +7 -9
- 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 +2 -4
- 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 +17 -16
- package/src/QySnapshots.d.ts +27 -0
- package/src/QySnapshots.js +3 -3
- 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/simulate.d.ts +1 -0
- package/src/simulate2.d.ts +1 -0
- package/src/soc_pokec.d.ts +1 -0
- package/static/codemirror.bundle/editor.bundle.js +399 -184
- package/static/datafolderui/QyStyledElement.js +2 -2
- package/static/datafolderui/QyUIFolderViewer.js +97 -77
- package/static/datafolderui/QyUIUtils.js +4 -4
- package/static/datafolderui/code-mirror.js +7 -7
- package/static/datafolderui/display-tree.js +13 -10
- package/static/datafolderui/hscrpt.js +26 -7
- package/static/datafolderui/json-view.js +27 -0
- package/static/datafolderui/main-page.js +65 -37
- package/static/datafolderui/query-editor.js +8 -8
- package/static/datafolderui/rpc-editor.js +31 -0
- package/static/datafolderui/trigger-editor.js +9 -6
- package/static/datafolderui/QyUIFolderTree.js +0 -188
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);
|
|
@@ -210,11 +216,11 @@ class t extends r {
|
|
|
210
216
|
rootDir: o,
|
|
211
217
|
qyDB: a
|
|
212
218
|
} = this, i = p("trigger", r, i, a);
|
|
213
|
-
o.triggerNodes[0].insertTrigger(r, e, t, i),
|
|
219
|
+
o.triggerNodes[0].insertTrigger(r, e, t, i), s(o, e);
|
|
214
220
|
}
|
|
215
221
|
removeTriggerFromTree(r, e) {
|
|
216
222
|
var t = this.rootDir;
|
|
217
|
-
t.triggerNodes[0].removeTrigger(r, e) &&
|
|
223
|
+
t.triggerNodes[0].removeTrigger(r, e) && s(t, e);
|
|
218
224
|
}
|
|
219
225
|
insertRpc(r, e) {
|
|
220
226
|
var {
|
|
@@ -227,26 +233,26 @@ class t extends r {
|
|
|
227
233
|
delete this.rpcFunMap[r];
|
|
228
234
|
}
|
|
229
235
|
queryFiles(r, e, t, i, o = this.rootDir) {
|
|
230
|
-
var a = [], t = (C(e) && !t && (t = 1), new
|
|
231
|
-
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;
|
|
232
238
|
}
|
|
233
239
|
queryFilesMulti(r, e, t, i = this.rootDir) {
|
|
234
|
-
var o, a, s = [], g = new
|
|
235
|
-
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);
|
|
236
242
|
return s;
|
|
237
243
|
}
|
|
238
244
|
async callRpc(e, r, t) {
|
|
239
245
|
var i, o = this.rpcFunMap[e];
|
|
240
|
-
if (!o) return i = `RPC ${e} not implemented
|
|
246
|
+
if (!o) return S.warn(i = `RPC ${e} not implemented.`), new Error(i);
|
|
241
247
|
try {
|
|
242
248
|
return await o(r, t);
|
|
243
249
|
} catch (r) {
|
|
244
|
-
return
|
|
250
|
+
return S.error(`Calling RPC ${e} failed:`, r), r;
|
|
245
251
|
}
|
|
246
252
|
}
|
|
247
253
|
}
|
|
248
254
|
|
|
249
|
-
function
|
|
255
|
+
function u(r, e, t, i, o, a) {
|
|
250
256
|
e && (a = a ? n(e) : void 0, l(r, o, a, e, t, i));
|
|
251
257
|
}
|
|
252
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;
|
package/src/QyDefaultOptions.js
CHANGED
package/src/QyDir.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { QyItem } from "./QyItem.ts";
|
|
2
|
+
import { QyFile } from "./QyFile.ts";
|
|
3
|
+
import type { QyCache } from "./QyCache.ts";
|
|
4
|
+
export declare class QyDir extends QyItem {
|
|
5
|
+
_subdirCount: number;
|
|
6
|
+
_fileCount: number;
|
|
7
|
+
subdirMapChangeCount: number;
|
|
8
|
+
fileMapChangeCount: number;
|
|
9
|
+
dChangeId: number;
|
|
10
|
+
fChangeId: number;
|
|
11
|
+
cache: {};
|
|
12
|
+
constructor(name: string | number, created?: boolean, parentDir?: QyDir | undefined, qyCache?: QyCache | undefined);
|
|
13
|
+
get created(): boolean;
|
|
14
|
+
set created(val: boolean);
|
|
15
|
+
get fileCount(): number;
|
|
16
|
+
get subdirCount(): number;
|
|
17
|
+
get isDir(): boolean;
|
|
18
|
+
get isEmpty(): boolean;
|
|
19
|
+
get isHiddenFolder(): boolean;
|
|
20
|
+
get subdirMapKey(): string;
|
|
21
|
+
get fileMapKey(): string;
|
|
22
|
+
get subdirMap(): {};
|
|
23
|
+
get fileMap(): {};
|
|
24
|
+
getSubdir(name: string): QyDir | undefined;
|
|
25
|
+
getFile(fileName: string): QyFile | undefined;
|
|
26
|
+
getOrCreateSubdir(name: string, created?: boolean): QyDir;
|
|
27
|
+
getOrCreateFile(fileName: string, created?: boolean): QyFile;
|
|
28
|
+
searchSubdir(namePath: string[], endIdx?: number): QyDir | undefined;
|
|
29
|
+
searchOrCreateSubdir(namePath: string[], created?: boolean, endIdx?: number): QyDir;
|
|
30
|
+
searchFile(namePath: string[]): QyFile | undefined;
|
|
31
|
+
searchOrCreateFile(namePath: string[], created?: boolean): QyFile;
|
|
32
|
+
get subdirList(): QyDir[];
|
|
33
|
+
get subdirNameList(): string[];
|
|
34
|
+
get sortedSubdirList(): QyDir[];
|
|
35
|
+
get sortedSubdirNameList(): string[];
|
|
36
|
+
get fileList(): QyFile[];
|
|
37
|
+
get fileNameList(): string[];
|
|
38
|
+
get sortedFileList(): QyFile[];
|
|
39
|
+
get sortedFileNameList(): string[];
|
|
40
|
+
allSubdirs(): any;
|
|
41
|
+
allLeafSubdirs(): Generator<any, void, unknown>;
|
|
42
|
+
allFiles(): Generator<any, void, unknown>;
|
|
43
|
+
allLoadedSubdirs(): any;
|
|
44
|
+
setChildTriggerNodes(child: QyDir): void;
|
|
45
|
+
filterSubdirNames(filterFun: any): Generator<QyDir, void, unknown>;
|
|
46
|
+
compareSubdirRangeL2H(cmpFun: any): Generator<QyDir, void, unknown>;
|
|
47
|
+
compareSubdirRangeH2L(cmpFun: any): Generator<QyDir | undefined, void, unknown>;
|
|
48
|
+
}
|