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.
Files changed (159) hide show
  1. package/README.md +7 -2
  2. package/index.js +1 -1
  3. package/internal.md +121 -0
  4. package/package.json +8 -6
  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 -0
  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 +27 -16
  29. package/src/QyCache.d.ts +44 -0
  30. package/src/QyCache.js +71 -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 +3 -4
  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 +30 -20
  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 +11 -13
  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 +21 -22
  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 +56 -53
  94. package/src/QySnapshots.d.ts +27 -0
  95. package/src/QySnapshots.js +74 -66
  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/rpc/getTriggerFiles.js +1 -0
  110. package/src/simulate.d.ts +1 -0
  111. package/src/simulate2.d.ts +1 -0
  112. package/src/soc_pokec.d.ts +1 -0
  113. package/src/soc_pokec.js +7 -7
  114. package/static/codemirror.bundle/editor.bundle.js +370 -166
  115. package/static/datafolderui/QyStyledElement.js +8 -17
  116. package/static/datafolderui/QyUIFolderViewer.js +230 -0
  117. package/static/datafolderui/QyUIUtils.js +5 -5
  118. package/static/datafolderui/code-mirror.js +7 -7
  119. package/static/datafolderui/display-tree.js +22 -58
  120. package/static/datafolderui/explore-tree.js +10 -10
  121. package/static/datafolderui/folder-tree.js +71 -2
  122. package/static/datafolderui/hscrpt.js +26 -7
  123. package/static/datafolderui/json-view.js +34 -3
  124. package/static/datafolderui/main-page.js +67 -36
  125. package/static/datafolderui/query-editor.js +9 -9
  126. package/static/datafolderui/rpc-editor.js +31 -0
  127. package/static/datafolderui/trigger-editor.js +33 -0
  128. package/data/sampleDataFolder/qykv/history/acl/1_acl.txt +0 -1
  129. package/data/sampleDataFolder/qykv/history/acl/2_acl.txt +0 -1
  130. package/data/sampleDataFolder/qykv/history/acl/3_acl.txt +0 -1
  131. package/data/sampleDataFolder/qykv/history/acl/4_acl.txt +0 -1
  132. package/data/sampleDataFolder/qykv/history/acl/5_acl.txt +0 -1
  133. package/data/sampleDataFolder/qykv/snapshot/1/1_pM.txt +0 -0
  134. package/data/sampleDataFolder/qykv/snapshot/1/1_prefixPM.txt +0 -0
  135. package/data/sampleDataFolder/qykv/snapshot/1/1_vL.txt +0 -10
  136. package/data/sampleDataFolder/qykv/snapshot/2/1_pM.txt +0 -0
  137. package/data/sampleDataFolder/qykv/snapshot/2/1_prefixPM.txt +0 -0
  138. package/data/sampleDataFolder/qykv/snapshot/2/1_vL.txt +0 -1
  139. package/data/sampleDataFolder/qykv/snapshot/3/1_pM.txt +0 -0
  140. package/data/sampleDataFolder/qykv/snapshot/3/1_prefixPM.txt +0 -0
  141. package/data/sampleDataFolder/qykv/snapshot/3/1_vL.txt +0 -1
  142. package/data/sampleDataFolder/qykv/snapshot/4/1_pM.txt +0 -0
  143. package/data/sampleDataFolder/qykv/snapshot/4/1_prefixPM.txt +0 -0
  144. package/data/sampleDataFolder/qykv/snapshot/4/1_vL.txt +0 -1
  145. package/data/sampleDataFolder/qykv/snapshot/4/2_pM.txt +0 -0
  146. package/data/sampleDataFolder/qykv/snapshot/4/2_prefixPM.txt +0 -0
  147. package/data/sampleDataFolder/qykv/snapshot/4/2_vL.txt +0 -9
  148. package/data/sampleDataFolder/qykv/snapshot/5/1_pM.txt +0 -0
  149. package/data/sampleDataFolder/qykv/snapshot/5/1_prefixPM.txt +0 -0
  150. package/data/sampleDataFolder/qykv/snapshot/5/1_vL.txt +0 -55
  151. package/data/sampleDataFolder/qykv/snapshot/info/1.json +0 -1
  152. package/data/sampleDataFolder/qykv/snapshot/info/2.json +0 -1
  153. package/data/sampleDataFolder/qykv/snapshot/info/3.json +0 -1
  154. package/data/sampleDataFolder/qykv/snapshot/info/4.json +0 -1
  155. package/data/sampleDataFolder/qykv/snapshot/info/5.json +0 -1
  156. package/data/sampleDataFolder/qylog/2026/02/15/08/change.txt +0 -58
  157. package/data/sampleDataFolder/qylog/2026/02/15/08/stderr.txt +0 -11
  158. package/data/sampleDataFolder/qylog/2026/02/15/08/stdout.txt +0 -36
  159. 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.getOrCreateDir(r, e), this;
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.getDir(r, e);
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.getDir(r, t);
28
+ var i = this.qyCache, r = i?.getDir(r, t);
27
29
  if (r) {
28
- t = i.getIndexDir(r);
29
- if (t) return e && 0 != e.length ? i.getDir(e, t) : t;
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.getFile(r, e);
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, n = this.currentDir) {
54
- return u(this.qyCache.queryFiles(r, e, i, s, n), t);
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 u(this.qyCache.queryFilesMulti(r, t, i, s), e);
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 u(r, e);
74
+ return n(r, e);
64
75
  }
65
76
  }
66
77
 
67
- function u(r, t) {
78
+ function n(r, t) {
68
79
  var i, s = {};
69
80
  for (i of r) {
70
- var n, u = i.parentList;
81
+ var h, n = i.parentList;
71
82
  let e = s;
72
- for (n of u) {
83
+ for (h of n) {
73
84
  var {
74
- name: h,
85
+ name: u,
75
86
  fullPathHash: c
76
- } = n;
87
+ } = h;
77
88
  let r = e.subdirMap;
78
- r = r || (e.subdirMap = {}), e = (e = r[h]) || (r[h] = {
89
+ r = r || (e.subdirMap = {}), e = (e = r[u]) || (r[u] = {
79
90
  fullPathHash: c
80
91
  });
81
92
  }
@@ -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);
@@ -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), g(o, e);
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) && g(t, 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 u(t, i)), i = this.options.queryAutoCreateIndex;
225
- 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;
226
238
  }
227
239
  queryFilesMulti(r, e, t, i = this.rootDir) {
228
- var o, a, s = [], g = new u(e, t), n = this.options.queryAutoCreateIndex;
229
- 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);
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.`, logger.warn(i), new Error(i);
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 logger.error(`Calling RPC ${e} failed:`, r), r;
250
+ return S.error(`Calling RPC ${e} failed:`, r), r;
239
251
  }
240
252
  }
241
253
  }
242
254
 
243
- function h(r, e, t, i, o, a) {
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>;
@@ -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