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.
Files changed (124) hide show
  1. package/README.md +4 -1
  2. package/index.js +1 -1
  3. package/internal.md +5 -3
  4. package/package.json +7 -5
  5. package/scripts/airbnb.js +77 -72
  6. package/scripts/airbnb2.js +78 -73
  7. package/scripts/airbnb2_queries.js +181 -229
  8. package/scripts/airbnb_queries.js +214 -265
  9. package/scripts/convertBinFiles.js +47 -49
  10. package/scripts/downloadFile.js +41 -40
  11. package/scripts/express.js +44 -48
  12. package/scripts/fastify.js +71 -80
  13. package/scripts/flights.js +71 -75
  14. package/scripts/flights2.js +78 -81
  15. package/scripts/flights2_queries.js +417 -455
  16. package/scripts/flights_queries.js +381 -407
  17. package/src/QyAcl.d.ts +17 -0
  18. package/src/QyAcl.js +113 -116
  19. package/src/QyAclSaver.d.ts +4 -0
  20. package/src/QyAclSaver.js +3 -3
  21. package/src/QyAclSaver_Worker.d.ts +9 -0
  22. package/src/QyAclSaver_Worker.js +2 -4
  23. package/src/QyAclWriter.d.ts +5 -0
  24. package/src/QyBatch.d.ts +42 -0
  25. package/src/QyBatch.js +8 -8
  26. package/src/QyBinWriter.d.ts +15 -0
  27. package/src/QyCD.d.ts +37 -0
  28. package/src/QyCD.js +8 -6
  29. package/src/QyCache.d.ts +44 -0
  30. package/src/QyCache.js +65 -59
  31. package/src/QyCompressor.d.ts +9 -0
  32. package/src/QyCompressor.js +29 -29
  33. package/src/QyCompressor_Worker.d.ts +1 -0
  34. package/src/QyDB.d.ts +42 -0
  35. package/src/QyDB.js +13 -11
  36. package/src/QyDefaultOptions.d.ts +1 -0
  37. package/src/QyDefaultOptions.js +3 -0
  38. package/src/QyDir.d.ts +48 -0
  39. package/src/QyDir.js +41 -41
  40. package/src/QyFetch.d.ts +7 -0
  41. package/src/QyFetch.js +2 -3
  42. package/src/QyFile.d.ts +19 -0
  43. package/src/QyFile.js +35 -34
  44. package/src/QyFileContentUtils.d.ts +13 -0
  45. package/src/QyFileContentUtils.js +126 -126
  46. package/src/QyFileLogger.d.ts +11 -0
  47. package/src/QyIndex.d.ts +6 -0
  48. package/src/QyIndex.js +73 -75
  49. package/src/QyIndexPropTree.d.ts +7 -0
  50. package/src/QyIndexPropTree.js +24 -24
  51. package/src/QyIntersectNode.d.ts +7 -0
  52. package/src/QyIntersectNode.js +15 -15
  53. package/src/QyItem.d.ts +30 -0
  54. package/src/QyItem.js +32 -28
  55. package/src/QyJsonSaver.d.ts +6 -0
  56. package/src/QyKVData.d.ts +12 -0
  57. package/src/QyKVData.js +11 -10
  58. package/src/QyKVDataCleaner.d.ts +4 -0
  59. package/src/QyKVDataCleaner.js +1 -1
  60. package/src/QyKVDataCleaner_Worker.d.ts +13 -0
  61. package/src/QyKVDataCleaner_Worker.js +2 -4
  62. package/src/QyKVDataLoader.d.ts +9 -0
  63. package/src/QyKVDataLoader.js +11 -11
  64. package/src/QyKVDataSaver.d.ts +4 -0
  65. package/src/QyKVDataSaver.js +6 -6
  66. package/src/QyKVDataSaver_Worker.d.ts +13 -0
  67. package/src/QyKVDataSaver_Worker.js +7 -9
  68. package/src/QyLogFileSaver.d.ts +4 -0
  69. package/src/QyLogFileSaver.js +1 -1
  70. package/src/QyLogFileSaver_Worker.d.ts +8 -0
  71. package/src/QyLogFileSaver_Worker.js +2 -4
  72. package/src/QyLogger.d.ts +10 -0
  73. package/src/QyLogger.js +40 -40
  74. package/src/QyMessageWorker.d.ts +5 -0
  75. package/src/QyMessageWorker.js +7 -7
  76. package/src/QyMessager.d.ts +7 -0
  77. package/src/QyMessager.js +30 -27
  78. package/src/QyMessager_Run.d.ts +1 -0
  79. package/src/QyMessager_Run.js +11 -6
  80. package/src/QyMod.d.ts +1 -0
  81. package/src/QyMod.js +6 -6
  82. package/src/QyOpRunner.d.ts +10 -0
  83. package/src/QyOpRunner.js +39 -39
  84. package/src/QyQueue.d.ts +11 -0
  85. package/src/QySaver.d.ts +10 -0
  86. package/src/QySnapshotCompactor.d.ts +4 -0
  87. package/src/QySnapshotCompactor.js +1 -1
  88. package/src/QySnapshotCompactor_Worker.d.ts +11 -0
  89. package/src/QySnapshotCompactor_Worker.js +2 -4
  90. package/src/QySnapshotSaver.d.ts +4 -0
  91. package/src/QySnapshotSaver.js +1 -1
  92. package/src/QySnapshotSaver_Worker.d.ts +16 -0
  93. package/src/QySnapshotSaver_Worker.js +17 -16
  94. package/src/QySnapshots.d.ts +27 -0
  95. package/src/QySnapshots.js +3 -3
  96. package/src/QyStructure.d.ts +1 -0
  97. package/src/QyStructure.js +18 -18
  98. package/src/QyTrigger.d.ts +9 -0
  99. package/src/QyTrigger.js +30 -30
  100. package/src/QyUnionNode.d.ts +17 -0
  101. package/src/QyUnionNode.js +2 -2
  102. package/src/QyUtils.d.ts +53 -0
  103. package/src/QyUtils.js +140 -117
  104. package/src/QyWorker.d.ts +5 -0
  105. package/src/QyWorker.js +18 -18
  106. package/src/hackernews.d.ts +1 -0
  107. package/src/hackernews.js +59 -47
  108. package/src/rpc/getRpcFiles.js +1 -0
  109. package/src/simulate.d.ts +1 -0
  110. package/src/simulate2.d.ts +1 -0
  111. package/src/soc_pokec.d.ts +1 -0
  112. package/static/codemirror.bundle/editor.bundle.js +399 -184
  113. package/static/datafolderui/QyStyledElement.js +2 -2
  114. package/static/datafolderui/QyUIFolderViewer.js +97 -77
  115. package/static/datafolderui/QyUIUtils.js +4 -4
  116. package/static/datafolderui/code-mirror.js +7 -7
  117. package/static/datafolderui/display-tree.js +13 -10
  118. package/static/datafolderui/hscrpt.js +26 -7
  119. package/static/datafolderui/json-view.js +27 -0
  120. package/static/datafolderui/main-page.js +65 -37
  121. package/static/datafolderui/query-editor.js +8 -8
  122. package/static/datafolderui/rpc-editor.js +31 -0
  123. package/static/datafolderui/trigger-editor.js +9 -6
  124. package/static/datafolderui/QyUIFolderTree.js +0 -188
@@ -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 o
8
+ QyDir as i
9
9
  } from "./QyDir.js";
10
10
 
11
11
  import {
12
- QyFileLogger as a
12
+ QyFileLogger as o
13
13
  } from "./QyFileLogger.js";
14
14
 
15
15
  import {
16
- QyKVData as s
16
+ QyKVData as a
17
17
  } from "./QyKVData.js";
18
18
 
19
19
  import {
20
20
  QyTriggerNode as f,
21
- updateTriggerNodes as g
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 i
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 Q,
44
+ ensureDir as x,
45
45
  SpecialFilePaths as e
46
46
  } from "./QyUtils.js";
47
47
 
48
48
  import {
49
- QueryCounter as u
49
+ QueryCounter as h
50
50
  } from "./QyUnionNode.js";
51
51
 
52
52
  import {
53
- QyKVDataLoader as S
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: x,
62
- TriggerDirPath: O,
63
- RpcDirPath: P
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
- var i = v(r, "qykv");
73
- Object.assign(this, {
74
- qyDB: t,
75
- rootFolder: r,
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
- logger.log(`Starting at ${r}...`);
102
+ S.log(`Starting at ${r}...`);
97
103
  try {
98
- await Q(e), o.start();
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 S(r, e)).load())(e, t), q(a) ]);
105
- await i.start(g, n, l, d);
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(x);
116
- var u = this, e = u.rootDir;
117
- e.triggerNodes = [ new f() ], u.triggerRootDir = e.searchOrCreateSubdir(O);
118
- for (p of u.triggerRootDir.fileList) {
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: h
127
+ fileContent: u
122
128
  } = p, {
123
- fileNamePath: h,
129
+ fileNamePath: u,
124
130
  propNamePathList: c,
125
131
  modCode: D
126
- } = h;
127
- u.insertTriggerToTree(p, h, c, D);
132
+ } = u;
133
+ h.insertTriggerToTree(p, u, c, D);
128
134
  }
129
135
  var y = this;
130
- y.rpcRootDir = y.rootDir.searchOrCreateSubdir(P);
131
- for (m of y.rpcRootDir.fileList) {
136
+ y.rpcRootDir = y.rootDir.searchOrCreateSubdir(O);
137
+ for (F of y.rpcRootDir.fileList) {
132
138
  var {
133
- name: m,
134
- fileContent: F
135
- } = m;
136
- C(F) && y.insertRpc(m, F);
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), logger.log("Started."),
144
+ return t.dumpStructureAtStart && await R(v(r, "qystruct"), s), S.log("Started."),
139
145
  this;
140
146
  }
141
147
  async stop() {
142
- logger.log("Stopping...");
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(), i(t), Object.assign(this, {
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
- }), logger.log("Stopped."), this;
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.getSubdir(r.fullPathHash);
191
+ return this.indexRootDir?.getSubdir(r.fullPathHash);
186
192
  }
187
193
  getOrCreateIndexDir(r) {
188
- return this.indexRootDir.getOrCreateSubdir(r.fullPathHash);
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), g(o, e);
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) && g(t, 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 u(t, i)), i = this.options.queryAutoCreateIndex;
231
- return h(r, e, a, t, o, i), a;
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 u(e, t), n = this.options.queryAutoCreateIndex;
235
- for ([ o, a ] of r) h(o, a, s, g, i, n);
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.`, logger.warn(i), new Error(i);
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 logger.error(`Calling RPC ${e} failed:`, r), r;
250
+ return S.error(`Calling RPC ${e} failed:`, r), r;
245
251
  }
246
252
  }
247
253
  }
248
254
 
249
- function h(r, e, t, i, o, a) {
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>;
@@ -1,5 +1,5 @@
1
1
  import {
2
- extname as i
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 p
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 d
26
+ logger as p
27
27
  } from "./QyLogger.js";
28
28
 
29
29
  import {
30
- isNotNullObj as t,
30
+ isNotNullObj as i,
31
31
  folderOrFileExists as l,
32
- ensureParentDir as c
32
+ ensureParentDir as f
33
33
  } from "./QyUtils.js";
34
34
 
35
35
  import {
36
- runOnceWithWorker as f
36
+ runOnceWithWorker as c
37
37
  } from "./QyWorker.js";
38
38
 
39
- let h = r(e), g = ".gz", w = "QyCompressor_Worker.js";
39
+ let g = r(e), o = ".gz", h = "QyCompressor_Worker.ts";
40
40
 
41
- function o(e, r, o) {
42
- return t(r) && (o = r, r = void 0), r = r || e + g, o = o || {}, e.endsWith(g) ? (d.log(e + " already ends with .gz."),
43
- !1) : r.endsWith(g) ? f(w, {
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 : (d.log(r + " doesn't end with .gz."), !1);
48
+ }).promise : (p.log(r + " doesn't end with .gz."), !1);
49
49
  }
50
50
 
51
- function u(e, r, o) {
52
- return e.endsWith(g) ? (t(r) && (o = r, r = void 0), r = r || e.replace(new RegExp(g + "$"), ""),
53
- o = o || {}, i(r) == g ? (d.log(r + " already ends with .gz."), !1) : f(w, {
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) : (d.log(e + " doesn't end with .gz."), !1);
58
+ }).promise) : (p.log(e + " doesn't end with .gz."), !1);
59
59
  }
60
60
 
61
- async function F({
61
+ async function u({
62
62
  operation: e,
63
63
  srcFilePath: r,
64
64
  destFilePath: o,
65
- options: i
65
+ options: t
66
66
  }) {
67
67
  var {
68
- removeSrcAfterSuccess: i,
69
- override: t
70
- } = i;
68
+ removeSrcAfterSuccess: t,
69
+ override: i
70
+ } = t;
71
71
  if (!await l(r)) throw new Error(r + " doesn't exist.");
72
- if (!t && await l(o)) throw new Error(o + " already exists.");
73
- if (await c(o), await h(n(r), ("compress" == e ? s : a)(), p(o)), d.info(e + `ed ${r} to ${o}.`),
74
- i) try {
75
- await m.unlink(r), d.info("Unlinked " + 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
- d.error(`Failed to unlink ${r}:`, e);
77
+ p.error(`Failed to unlink ${r}:`, e);
78
78
  }
79
79
  }
80
80
 
81
81
  export {
82
- g as Zip_File_Extension,
83
- o as compressFile,
84
- u as decompressFile,
85
- F as runOperation
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(), Object.assign(this, {
35
- rootFolder: e,
36
- options: {
37
- ...a("QyDB"),
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.qyCache = void 0, i.qyCache = void 0,
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.on(e, t);
144
+ return this.qyCache?.on(e, t);
143
145
  }
144
146
  callRpc(e, t, r) {
145
- return this.qyCache.callRpc(e, t, r);
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;
@@ -51,6 +51,9 @@ let t = {
51
51
  },
52
52
  QySnapshotSaver_Worker: {
53
53
  maxInMemSnapshotCount: 3
54
+ },
55
+ QyKVDataSaver_Worker: {
56
+ noAcl: !1
54
57
  }
55
58
  };
56
59
 
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
+ }