datafolder 1.0.11 → 1.0.13

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 (75) hide show
  1. package/README.md +16 -0
  2. package/package.json +1 -1
  3. package/scripts/airbnb.js +1 -1
  4. package/scripts/airbnb2.js +1 -1
  5. package/scripts/flights.js +2 -2
  6. package/scripts/flights2.js +4 -2
  7. package/src/QyAcl.d.ts +13 -7
  8. package/src/QyAcl.js +122 -138
  9. package/src/QyAclSaver.js +2 -2
  10. package/src/QyAclSaver_Worker.d.ts +2 -2
  11. package/src/QyBatch.d.ts +16 -12
  12. package/src/QyBatch.js +339 -228
  13. package/src/QyBinWriter.d.ts +1 -1
  14. package/src/QyBinWriter.js +15 -15
  15. package/src/QyCD.d.ts +2 -2
  16. package/src/QyCD.js +29 -29
  17. package/src/QyCache.d.ts +9 -1
  18. package/src/QyCache.js +110 -73
  19. package/src/QyCompressor.d.ts +2 -2
  20. package/src/QyCompressor.js +13 -13
  21. package/src/QyDB.d.ts +4 -22
  22. package/src/QyDB.js +49 -89
  23. package/src/QyDefaultOptions.js +2 -0
  24. package/src/QyDir.d.ts +1 -0
  25. package/src/QyDir.js +58 -30
  26. package/src/QyExpire.d.ts +15 -0
  27. package/src/QyExpire.js +105 -0
  28. package/src/QyExpireInfo.d.ts +10 -0
  29. package/src/QyExpireInfo.js +92 -0
  30. package/src/QyExpire_Worker.d.ts +19 -0
  31. package/src/QyExpire_Worker.js +112 -0
  32. package/src/QyFile.d.ts +1 -1
  33. package/src/QyFile.js +68 -42
  34. package/src/QyFileContentUtils.d.ts +1 -0
  35. package/src/QyFileContentUtils.js +108 -94
  36. package/src/QyItem.d.ts +7 -0
  37. package/src/QyItem.js +39 -15
  38. package/src/QyJsonSaver.d.ts +1 -1
  39. package/src/QyJsonSaver.js +1 -1
  40. package/src/QyKVData.d.ts +6 -1
  41. package/src/QyKVData.js +176 -157
  42. package/src/QyKVDataCleaner.js +2 -2
  43. package/src/QyKVDataSaver.js +2 -2
  44. package/src/QyKVDataSaver_Worker.d.ts +2 -2
  45. package/src/QyKVDataSaver_Worker.js +5 -5
  46. package/src/QyLogFileSaver.js +2 -2
  47. package/src/QyMessageWorker.d.ts +1 -1
  48. package/src/QyMessageWorker.js +10 -10
  49. package/src/QyMessager.d.ts +1 -1
  50. package/src/QyMessager.js +37 -36
  51. package/src/QyMessager_Run.js +9 -6
  52. package/src/QyQueue.js +8 -12
  53. package/src/QySaver.d.ts +1 -1
  54. package/src/QySaver.js +1 -1
  55. package/src/QySnapshotCompactor.js +2 -2
  56. package/src/QySnapshotCompactor_Worker.js +1 -1
  57. package/src/QySnapshotSaver.js +2 -2
  58. package/src/QySnapshotSaver_Worker.js +1 -1
  59. package/src/QyTrigger.d.ts +1 -1
  60. package/src/QyTrigger.js +20 -21
  61. package/src/QyUtils.d.ts +5 -2
  62. package/src/QyUtils.js +112 -98
  63. package/src/hackernews.js +1 -1
  64. package/src/simulate.js +6 -6
  65. package/src/simulate2.js +4 -4
  66. package/src/soc_pokec.js +1 -1
  67. package/static/codemirror.bundle/editor.bundle.js +49 -10
  68. package/static/datafolderui/QyUIFolderViewer.js +1 -5
  69. package/src/rpc/evalCode.js +0 -9
  70. package/src/rpc/getFileContent.js +0 -16
  71. package/src/rpc/getRpcFiles.js +0 -1
  72. package/src/rpc/getSubItems.js +0 -16
  73. package/src/rpc/getTriggerFiles.js +0 -1
  74. package/src/rpc/queryFiles.js +0 -10
  75. package/src/rpc/reloadRpc.js +0 -1
@@ -11,7 +11,7 @@ export declare class QyBinWriter extends QyOpRunner {
11
11
  save(changeId: any, data: any, needPromise: any): any;
12
12
  truncate(): any;
13
13
  switch(newFilePath: any): any;
14
- getBinData(dataQueue: any, changeId?: undefined): any;
14
+ getBinData(dataQueue: any[], changeId?: undefined): any;
15
15
  _op_start(filePath: any): Promise<this>;
16
16
  _op_stop(): Promise<void>;
17
17
  _op_save(changeId: any, dataQueue: any): Promise<void> | undefined;
@@ -20,10 +20,10 @@ import {
20
20
  } from "./QyDefaultOptions.js";
21
21
 
22
22
  import {
23
- logger as y
23
+ logger as g
24
24
  } from "./QyLogger.js";
25
25
 
26
- let h = Array.isArray;
26
+ var {} = Array;
27
27
 
28
28
  class e extends t {
29
29
  _filePath;
@@ -48,12 +48,12 @@ class e extends t {
48
48
  this._totalSavedSize = t;
49
49
  }
50
50
  save(t, e, a) {
51
- null == e && (e = t, t = 0);
51
+ null == e && ([ e, t ] = [ t, 0 ]);
52
52
  var i, r = this.lastOp;
53
- return "_op_save" === r?.opFunName ? (i = r.args, i[0] = t, i = i[1], h(e) ? i.push(...e) : i.push(e),
53
+ return "_op_save" === r?.opFunName ? (i = r.args, i[0] = t, i[1].push(e),
54
54
  a && l(r), r.promise) : (i = {
55
55
  opFunName: "_op_save",
56
- args: [ t, h(e) ? e : [ e ] ]
56
+ args: [ t, [ e ] ]
57
57
  }, a ? this.pushAndRunWithPromise(i) : this.pushAndRun(i));
58
58
  }
59
59
  truncate() {
@@ -70,7 +70,7 @@ class e extends t {
70
70
  });
71
71
  }
72
72
  getBinData(t, e = 0) {
73
- var a = t.length;
73
+ var a = (t = t.flat()).length;
74
74
  return 0 == a ? "" : 1 == a ? t[0] : Buffer.isBuffer(t[0]) ? Buffer.concat(t) : Buffer.concat(t.map(t => Buffer.from(t)));
75
75
  }
76
76
  async _op_start(t) {
@@ -84,7 +84,7 @@ class e extends t {
84
84
  if (t) try {
85
85
  await t.close(), this.fileHandle = void 0;
86
86
  } catch (t) {
87
- y.error(`Close ${e} failed:`, t);
87
+ g.error(`Close ${e} failed:`, t);
88
88
  }
89
89
  f(this);
90
90
  }
@@ -99,8 +99,8 @@ class e extends t {
99
99
  } = t, {
100
100
  emitSaveEvent: o,
101
101
  maxFileSize: l,
102
- maxRetryInterval: h,
103
- retryIntervalFactor: f
102
+ maxRetryInterval: f,
103
+ retryIntervalFactor: h
104
104
  } = n, p = S(a), u = p.length, c = `size ${v(u)} (MaxId:${e}) to ` + s, d;
105
105
  for (;"_op_truncate" !== t.firstOp?.opFunName; ) try {
106
106
  await i.appendFile(p, {
@@ -110,8 +110,8 @@ class e extends t {
110
110
  return o && 0 < e && t.emit("save", e), void (!t.maxFileSizeEmitted && l && m > l && (t.maxFileSizeEmitted = !0,
111
111
  t.emit("maxFileSize", m)));
112
112
  } catch (t) {
113
- y.error(`Saving ${c} failed:`, t, "Truncated back to " + r), await i.truncate(r),
114
- d = d ? Math.min(h, d * f) : 1, y.log(`Retry in ${d} seconds`),
113
+ g.error(`Saving ${c} failed:`, t, "Truncated back to " + r), await i.truncate(r),
114
+ d = d ? Math.min(f, d * h) : 1, g.log(`Retry in ${d} seconds`),
115
115
  await _(d);
116
116
  }
117
117
  })(this, t, e);
@@ -122,9 +122,9 @@ class e extends t {
122
122
  filePath: e
123
123
  } = this;
124
124
  if (t) try {
125
- await t.truncate(0), y.info("Truncated " + e);
125
+ await t.truncate(0), g.info("Truncated " + e);
126
126
  } catch (t) {
127
- y.error(`Truncate ${e} failed:`, t);
127
+ g.error(`Truncate ${e} failed:`, t);
128
128
  }
129
129
  f(this);
130
130
  }
@@ -133,7 +133,7 @@ class e extends t {
133
133
  fileHandle: e,
134
134
  filePath: a
135
135
  } = this;
136
- e && a == t || (await i(this, t), y.info(`Switched from ${a} to ` + t));
136
+ e && a == t || (await i(this, t), g.info(`Switched from ${a} to ` + t));
137
137
  }
138
138
  }
139
139
 
@@ -148,7 +148,7 @@ async function i(t, e) {
148
148
  var r = i.append;
149
149
  t.fileHandle = await s(e, r ? "a" : "w"), t.filePath = e, r && (t.totalSavedSize = await o(e));
150
150
  } catch (t) {
151
- y.error(`Open ${e} failed:`, t);
151
+ g.error(`Open ${e} failed:`, t);
152
152
  }
153
153
  }
154
154
 
package/src/QyCD.d.ts CHANGED
@@ -9,7 +9,7 @@ export declare class QyCD {
9
9
  cdP(namePath: string | string[] | QyDir, parentDir?: any): this;
10
10
  dir(namePath: string | string[], parentDir?: any): QyDir | undefined;
11
11
  dirP(namePath: string | string[], parentDir?: any): QyDir | undefined;
12
- indexDir(indexHostDirNamePath: string | string[] | QyDir, namePath: string | string[], parentDir?: any): QyDir | undefined;
12
+ indexDir(indexHostDirNamePath: string | string[] | QyDir, namePath: string | any[], parentDir?: any): QyDir | undefined;
13
13
  indexDirP(indexHostDirNamePath: string | string[] | QyDir, namePath: string | string[], parentDir?: any): QyDir | undefined;
14
14
  file(namePath: string | string[], parentDir?: any): QyFile | undefined;
15
15
  fileP(namePath: string | string[], parentDir?: any): QyFile | undefined;
@@ -19,7 +19,7 @@ export declare class QyCD {
19
19
  get rpcFileList(): any;
20
20
  view(namePath: any, spec?: undefined, parentDir?: any): any;
21
21
  viewP(namePath: any, spec: any, parentDir?: any): any;
22
- queryFiles(indexHostDirNamePath: any, queryObj: any, limit: any, cursor: any, parentDir?: any): any;
22
+ queryFiles(indexHostDirNamePath: any, queryObj: any, limit?: number | undefined, cursor?: number | undefined, parentDir?: any): any;
23
23
  queryFilesMulti(indexHostDirNamePathMulti: any, limit: any, cursor: any, parentDir?: any): any;
24
24
  queryTree(indexHostDirNamePath: any, queryObj: any, view: any, limit: any, cursor: any, parentDir?: any): {
25
25
  tree: any;
package/src/QyCD.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import {
2
- isString as i,
2
+ isString as t,
3
3
  pathSplit as s
4
4
  } from "./QyUtils.js";
5
5
 
@@ -10,29 +10,29 @@ class r {
10
10
  this.qyCache = r;
11
11
  }
12
12
  cd(r, e = this.currentDir) {
13
- return i(r) && (r = s(r)), this.cdP(r, e);
13
+ return t(r) && (r = s(r)), this.cdP(r, e);
14
14
  }
15
15
  cdP(r, e = this.currentDir) {
16
16
  return this.currentDir = this.qyCache?.getOrCreateDir(r, e), this;
17
17
  }
18
18
  dir(r, e = this.currentDir) {
19
- return i(r) && (r = s(r)), this.dirP(r, e);
19
+ return t(r) && (r = s(r)), this.dirP(r, e);
20
20
  }
21
21
  dirP(r, e = this.currentDir) {
22
22
  return this.qyCache?.getDir(r, e);
23
23
  }
24
- indexDir(r, e, t = this.currentDir) {
25
- return i(r) && (r = s(r)), i(e) && (e = s(e)), this.indexDirP(r, e, t);
24
+ indexDir(r, e, i = this.currentDir) {
25
+ return t(r) && (r = s(r)), t(e) && (e = s(e)), this.indexDirP(r, e, i);
26
26
  }
27
- indexDirP(r, e, t = this.currentDir) {
28
- var i = this.qyCache, r = i?.getDir(r, t);
27
+ indexDirP(r, e, i = this.currentDir) {
28
+ var t = this.qyCache, r = t?.getDir(r, i);
29
29
  if (r) {
30
- t = i?.getIndexDir(r);
31
- if (t) return e && 0 != e.length ? i?.getDir(e, t) : t;
30
+ i = t?.getIndexDir(r);
31
+ if (i) return e && 0 != e.length ? t?.getDir(e, i) : i;
32
32
  }
33
33
  }
34
34
  file(r, e = this.currentDir) {
35
- return i(r) && (r = s(r)), this.fileP(r, e);
35
+ return t(r) && (r = s(r)), this.fileP(r, e);
36
36
  }
37
37
  fileP(r, e = this.currentDir) {
38
38
  return this.qyCache?.getFile(r, e);
@@ -49,23 +49,23 @@ class r {
49
49
  get rpcFileList() {
50
50
  return this.qyCache.rpcFileList;
51
51
  }
52
- view(r, e = void 0, t = this.currentDir) {
53
- return i(r) && (r = s(r)), this.viewP(r, e, t);
52
+ view(r, e = void 0, i = this.currentDir) {
53
+ return t(r) && (r = s(r)), this.viewP(r, e, i);
54
54
  }
55
- viewP(r, e, t = this.currentDir) {
56
- return this.qyCache.getFile(r, t)?.view(e);
55
+ viewP(r, e, i = this.currentDir) {
56
+ return this.qyCache.getFile(r, i)?.view(e);
57
57
  }
58
- queryFiles(r, e, t, i, s = this.currentDir) {
59
- return this.qyCache.queryFiles(r, e, t, i, s);
58
+ queryFiles(r, e, i = void 0, t = void 0, s = this.currentDir) {
59
+ return this.qyCache.queryFiles(r, e, i, t, s);
60
60
  }
61
- queryFilesMulti(r, e, t, i = this.currentDir) {
62
- return this.qyCache.queryFilesMulti(r, e, t, i);
61
+ queryFilesMulti(r, e, i, t = this.currentDir) {
62
+ return this.qyCache.queryFilesMulti(r, e, i, t);
63
63
  }
64
- queryTree(r, e, t, i, s, h = this.currentDir) {
65
- return n(this.qyCache.queryFiles(r, e, i, s, h), t);
64
+ queryTree(r, e, i, t, s, h = this.currentDir) {
65
+ return n(this.qyCache.queryFiles(r, e, t, s, h), i);
66
66
  }
67
- queryTreeMulti(r, e, t, i, s = this.currentDir) {
68
- return n(this.qyCache.queryFilesMulti(r, t, i, s), e);
67
+ queryTreeMulti(r, e, i, t, s = this.currentDir) {
68
+ return n(this.qyCache.queryFilesMulti(r, i, t, s), e);
69
69
  }
70
70
  resetCurrentDir() {
71
71
  this.currentDir = void 0;
@@ -75,10 +75,10 @@ class r {
75
75
  }
76
76
  }
77
77
 
78
- function n(r, t) {
79
- var i, s = {};
80
- for (i of r) {
81
- var h, n = i.parentList;
78
+ function n(r, i) {
79
+ var t, s = {};
80
+ for (t of r) {
81
+ var h, n = t.parentList;
82
82
  let e = s;
83
83
  for (h of n) {
84
84
  var {
@@ -91,9 +91,9 @@ function n(r, t) {
91
91
  });
92
92
  }
93
93
  let r = e.fileMap;
94
- (r = r || (e.fileMap = {}))[i.name] = {
95
- fileContent: i.view(t, !0),
96
- fileContentKey: i.fileContentKey
94
+ (r = r || (e.fileMap = {}))[t.name] = {
95
+ fileContent: t.view(i, !0),
96
+ fileContentKey: t.fileContentKey
97
97
  };
98
98
  }
99
99
  return {
package/src/QyCache.d.ts CHANGED
@@ -11,6 +11,7 @@ export declare class QyCache extends EventEmitter {
11
11
  triggerRootDir: any;
12
12
  rpcRootDir: any;
13
13
  indexRootDir: any;
14
+ expireRootDir: any;
14
15
  exclusiveFilePath: any;
15
16
  qyKVData: any;
16
17
  qyFileLogger: any;
@@ -20,7 +21,7 @@ export declare class QyCache extends EventEmitter {
20
21
  stop(): Promise<this>;
21
22
  increaseChangeId(): any;
22
23
  decreaseChangeId(): void;
23
- save(changeId: any, cmdArgAsListObj: any, logText: any, syncList: any, needPromise: any): any;
24
+ save(changeId: any, cmdArgAsListChanges: any, logText: any, syncList: any, needPromise: any): any;
24
25
  getFile(namePath: QyFile | string | string[], parentDir?: any): QyFile | undefined;
25
26
  getDir(namePath: QyDir | string | string[], parentDir?: any): QyDir | undefined;
26
27
  getOrCreateFile(namePath: QyFile | string | string[], parentDir?: any): QyFile;
@@ -29,10 +30,13 @@ export declare class QyCache extends EventEmitter {
29
30
  getOrCreateIndexDir(indexHostDir: any): any;
30
31
  getTriggerFile(triggerName: any): any;
31
32
  getOrCreateTriggerFile(triggerName: any): any;
33
+ getExpireInfoFile(fullPathHash: any, type?: string): any;
34
+ getOrCreateExpireInfoFile(fullPathHash: any, type?: string): any;
32
35
  get triggerFileList(): any;
33
36
  getRpcFile(rpcFunName: any): any;
34
37
  getOrCreateRpcFile(rpcFunName: any): any;
35
38
  get rpcFileList(): any;
39
+ get metaFile(): any;
36
40
  insertTriggerToTree(triggerName: any, fileNamePath: any, propNamePathList: any, modCode: any): void;
37
41
  removeTriggerFromTree(triggerName: any, fileNamePath: any): void;
38
42
  insertRpc(rpcFunName: any, modCode: any): void;
@@ -40,4 +44,8 @@ export declare class QyCache extends EventEmitter {
40
44
  queryFiles(indexHostDirNamePath: any, queryObj: any, limit: any, cursor: any, parentDir?: any): never[];
41
45
  queryFilesMulti(indexHostDirNamePathMulti: any, limit: any, cursor: any, parentDir?: any): never[];
42
46
  callRpc(rpcFunName: any, args: any, body: any): Promise<any>;
47
+ monitorItemExpire(item: any, expireTime: any): void;
48
+ unmonitorItemExpire(item: any): void;
49
+ monitorContentExpire(file: any, flattedAbsTimeObj: any): void;
50
+ unmonitorContentExpire(file: any, flattedDelObj: any): void;
43
51
  }
package/src/QyCache.js CHANGED
@@ -5,48 +5,48 @@ import {
5
5
  import r from "node:events";
6
6
 
7
7
  import {
8
- QyDir as o
8
+ QyDir as p
9
9
  } from "./QyDir.js";
10
10
 
11
11
  import {
12
- QyFileLogger as a
12
+ QyFileLogger as u
13
13
  } from "./QyFileLogger.js";
14
14
 
15
15
  import {
16
- QyKVData as s
16
+ QyKVData as d
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
- isString as C,
26
- lockExclusiveFilePath as q,
25
+ isString as x,
26
+ lockExclusiveFilePath as C,
27
27
  unlockExclusiveFilePath as i
28
28
  } from "./QyUtils.js";
29
29
 
30
30
  import {
31
- dumpStructure as R
31
+ dumpStructure as q
32
32
  } from "./QyStructure.js";
33
33
 
34
34
  import {
35
35
  getIndexPropPaths as n,
36
- parseNamePathAndQuery as l
36
+ parseNamePathAndQuery as g
37
37
  } from "./QyIndex.js";
38
38
 
39
39
  import {
40
- getDefaultOptions as d
40
+ getDefaultOptions as h
41
41
  } from "./QyDefaultOptions.js";
42
42
 
43
43
  import {
44
- ensureDir as x,
44
+ ensureDir as R,
45
45
  SpecialFilePaths as e
46
46
  } from "./QyUtils.js";
47
47
 
48
48
  import {
49
- QueryCounter as p
49
+ QueryCounter as l
50
50
  } from "./QyUnionNode.js";
51
51
 
52
52
  import {
@@ -54,20 +54,23 @@ import {
54
54
  } from "./QyKVDataLoader.js";
55
55
 
56
56
  import {
57
- requireFromModCode as u
57
+ requireFromModCode as c
58
58
  } from "./QyMod.js";
59
59
 
60
60
  import {
61
- logger as S
61
+ logger as O
62
62
  } from "./QyLogger.js";
63
63
 
64
64
  let {
65
- IndexDirPath: L,
65
+ HiddenFolderName: D,
66
+ IndexDirPath: F,
66
67
  TriggerDirPath: P,
67
- RpcDirPath: O
68
+ RpcDirPath: S,
69
+ ExpireDirPath: m,
70
+ MetaFilePath: t
68
71
  } = e;
69
72
 
70
- class t extends r {
73
+ class o extends r {
71
74
  rootFolder;
72
75
  options;
73
76
  qyDB;
@@ -77,26 +80,34 @@ class t extends r {
77
80
  triggerRootDir;
78
81
  rpcRootDir;
79
82
  indexRootDir;
83
+ expireRootDir;
80
84
  exclusiveFilePath;
81
85
  qyKVData;
82
86
  qyFileLogger;
83
87
  rpcFunMap = {};
84
88
  constructor(r, e, t) {
85
89
  super(), e = {
86
- ...d("QyCache"),
90
+ ...h("QyCache"),
87
91
  ...e
88
92
  };
89
- var i = v(r, "qykv");
90
- Object.assign(this, {
93
+ var i = v(r, "qykv"), o = m.at(-1), a = F.at(-1), s = new p("", !0, void 0, this), n = new p(D, !0, s), g = new p(o, !0, n), l = new p(a, !0, n);
94
+ s._subdirMap = {
95
+ [D]: n
96
+ }, n._subdirMap = {
97
+ [o]: g,
98
+ [a]: l
99
+ }, Object.assign(this, {
91
100
  rootFolder: r,
92
101
  options: e,
93
102
  qyDB: t,
94
103
  kvFolder: i,
104
+ rootDir: s,
105
+ expireRootDir: g,
106
+ indexRootDir: l,
95
107
  rpcFolder: v(r, "rpc"),
96
- rootDir: new o("", !0, void 0, this),
97
108
  exclusiveFilePath: v(r, ".opened"),
98
- qyKVData: new s(i, e, this),
99
- qyFileLogger: new a(v(r, "qylog"), e)
109
+ qyKVData: new d(i, e, this),
110
+ qyFileLogger: new u(v(r, "qylog"), e)
100
111
  });
101
112
  }
102
113
  async start() {
@@ -109,16 +120,16 @@ class t extends r {
109
120
  exclusiveFilePath: a,
110
121
  rootDir: s
111
122
  } = this;
112
- S.log(`Starting at ${r}...`);
123
+ O.log(`Starting at ${r}...`);
113
124
  try {
114
- await x(e), o.start();
125
+ await R(e), o.start();
115
126
  var [ {
116
- maxChangeId: g,
117
- loadedMaxAclNum: n,
127
+ maxChangeId: n,
128
+ loadedMaxAclNum: g,
118
129
  qySnapshots: l,
119
- aclKeyValueMap: d
120
- } ] = await Promise.all([ ((r, e) => (r = new Q(r, e)).load())(e, t), q(a) ]);
121
- i.start(g, n, l, d);
130
+ aclKeyValueMap: p
131
+ } ] = await Promise.all([ ((r, e) => (r = new Q(r, e)).load())(e, t), C(a) ]);
132
+ i.start(n, g, l, p);
122
133
  } catch (r) {
123
134
  throw o.stop(), r;
124
135
  }
@@ -128,50 +139,47 @@ class t extends r {
128
139
  fileMap: i
129
140
  } = e;
130
141
  for (var o of t) r(o);
131
- }(s), this.indexRootDir = s.searchOrCreateSubdir(L);
132
- var p = this, e = p.rootDir;
133
- e.triggerNodes = [ new f() ], p.triggerRootDir = e.searchOrCreateSubdir(P);
134
- for (u of p.triggerRootDir.fileList) {
142
+ }(s);
143
+ var u = this, e = u.rootDir;
144
+ e.triggerNodes = [ new f() ];
145
+ for (d of (e = u.triggerRootDir = e.searchOrCreateSubdir(P)).fileList) {
135
146
  var {
136
- name: u,
147
+ name: d,
137
148
  fileContent: h
138
- } = u, {
139
- fileNamePath: h,
140
- propNamePathList: c,
141
- modCode: D
142
- } = h;
143
- p.insertTriggerToTree(u, h, c, D);
149
+ } = d, [ h, c, D ] = h;
150
+ u.insertTriggerToTree(d, h, c, D);
144
151
  }
145
- var y = this;
146
- y.rpcRootDir = y.rootDir.searchOrCreateSubdir(O);
147
- for (F of y.rpcRootDir.fileList) {
152
+ var F = this;
153
+ F.rpcRootDir = F.rootDir.searchOrCreateSubdir(S);
154
+ for (m of F.rpcRootDir.fileList) {
148
155
  var {
149
- name: F,
150
- fileContent: m
151
- } = F;
152
- C(m) && y.insertRpc(F, m);
156
+ name: m,
157
+ fileContent: y
158
+ } = m;
159
+ x(y) && F.insertRpc(m, y);
153
160
  }
154
- return t.dumpStructureAtStart && await R(v(r, "qystruct"), s), S.log("Started."),
161
+ return t.dumpStructureAtStart && await q(v(r, "qystruct"), s), O.log("Started."),
155
162
  this;
156
163
  }
157
164
  async stop() {
158
- S.log("Stopping...");
165
+ O.log("Stopping...");
159
166
  var {
160
167
  qyKVData: r,
161
168
  qyFileLogger: e,
162
169
  exclusiveFilePath: t
163
170
  } = this;
164
- return await r.stop(), S.log("qyFileLogger stopped."), await e.stop(), i(t),
171
+ return await r.stop(), O.log("QyFileLogger stopped."), await e.stop(), i(t),
165
172
  Object.assign(this, {
166
173
  rootDir: void 0,
167
174
  indexRootDir: void 0,
175
+ expireRootDir: void 0,
176
+ triggerRootDir: void 0,
177
+ rpcRootDir: void 0,
168
178
  qyKVData: void 0,
169
179
  rpcFunMap: void 0,
170
180
  qyDB: void 0,
171
- qyFileLogger: void 0,
172
- triggerRootDir: void 0,
173
- rpcRootDir: void 0
174
- }), S.log("Stopped."), this;
181
+ qyFileLogger: void 0
182
+ }), O.log("Stopped."), this;
175
183
  }
176
184
  increaseChangeId() {
177
185
  return this.qyKVData.increaseChangeId();
@@ -187,22 +195,22 @@ class t extends r {
187
195
  return t && s.save(r, t), a.save(r, e, i, o);
188
196
  }
189
197
  getFile(r, e = this.rootDir) {
190
- return r.isFile ? r : C(r) ? e.getFile(r) : e.searchFile(r);
198
+ return r.isFile ? r : x(r) ? e.getFile(r) : e.searchFile(r);
191
199
  }
192
200
  getDir(r, e = this.rootDir) {
193
- return r.isDir ? r : C(r) ? e.getSubdir(r) : e.searchSubdir(r);
201
+ return r.isDir ? r : x(r) ? e.getSubdir(r) : e.searchSubdir(r);
194
202
  }
195
203
  getOrCreateFile(r, e = this.rootDir) {
196
- return r.isFile ? r : C(r) ? e.getOrCreateFile(r) : e.searchOrCreateFile(r);
204
+ return r.isFile ? r : x(r) ? e.getOrCreateFile(r) : e.searchOrCreateFile(r);
197
205
  }
198
206
  getOrCreateDir(r, e = this.rootDir) {
199
- return r.isDir ? r : C(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
207
+ return r.isDir ? r : x(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
200
208
  }
201
209
  getIndexDir(r) {
202
- return this.indexRootDir?.getSubdir(r.fullPathHash);
210
+ return this.indexRootDir.searchSubdir(y(r.fullPathHash));
203
211
  }
204
212
  getOrCreateIndexDir(r) {
205
- return this.indexRootDir?.getOrCreateSubdir(r.fullPathHash);
213
+ return this.indexRootDir.searchOrCreateSubdir(y(r.fullPathHash));
206
214
  }
207
215
  getTriggerFile(r) {
208
216
  return this.triggerRootDir.getFile(r);
@@ -210,6 +218,12 @@ class t extends r {
210
218
  getOrCreateTriggerFile(r) {
211
219
  return this.triggerRootDir.getOrCreateFile(r);
212
220
  }
221
+ getExpireInfoFile(r, e = "c") {
222
+ return this.expireRootDir.searchFile(a(r, e));
223
+ }
224
+ getOrCreateExpireInfoFile(r, e = "c") {
225
+ return this.expireRootDir.searchOrCreateFile(a(r, e));
226
+ }
213
227
  get triggerFileList() {
214
228
  return this.triggerRootDir.fileList;
215
229
  }
@@ -222,51 +236,74 @@ class t extends r {
222
236
  get rpcFileList() {
223
237
  return this.rpcRootDir.fileList;
224
238
  }
239
+ get metaFile() {
240
+ return this.rootDir.searchOrCreateFile(t);
241
+ }
225
242
  insertTriggerToTree(r, e, t, i) {
226
243
  var {
227
244
  rootDir: o,
228
245
  qyDB: a
229
- } = this, i = u("trigger", r, i, a);
230
- o.triggerNodes[0].insertTrigger(r, e, t, i), g(o, e);
246
+ } = this, i = c("trigger", r, i, a);
247
+ o.triggerNodes[0].insertTrigger(r, e, t, i), s(o, e);
231
248
  }
232
249
  removeTriggerFromTree(r, e) {
233
250
  var t = this.rootDir;
234
- t.triggerNodes[0].removeTrigger(r, e) && g(t, e);
251
+ t.triggerNodes[0].removeTrigger(r, e) && s(t, e);
235
252
  }
236
253
  insertRpc(r, e) {
237
254
  var {
238
255
  rpcFunMap: t,
239
256
  qyDB: i
240
- } = this, e = u("rpc", r, e, i);
257
+ } = this, e = c("rpc", r, e, i);
241
258
  e && (t[r] = e);
242
259
  }
243
260
  removeRpc(r) {
244
261
  delete this.rpcFunMap[r];
245
262
  }
246
263
  queryFiles(r, e, t, i, o = this.rootDir) {
247
- var a = [], t = (C(e) && !t && (t = 1), new p(t, i)), i = this.options.queryAutoCreateIndex;
248
- return h(r, e, a, t, o, i), a;
264
+ var a = [], t = (x(e) && !t && (t = 1), new l(t, i)), i = this.options.queryAutoCreateIndex;
265
+ return w(r, e, a, t, o, i), a;
249
266
  }
250
267
  queryFilesMulti(r, e, t, i = this.rootDir) {
251
- var o, a, s = [], g = new p(e, t), n = this.options.queryAutoCreateIndex;
252
- for ([ o, a ] of r) h(o, a, s, g, i, n);
268
+ var o, a, s = [], n = new l(e, t), g = this.options.queryAutoCreateIndex;
269
+ for ([ o, a ] of r) w(o, a, s, n, i, g);
253
270
  return s;
254
271
  }
255
272
  async callRpc(e, r, t) {
256
273
  var i, o = this.rpcFunMap[e];
257
- if (!o) return S.warn(i = `RPC ${e} not implemented.`), new Error(i);
274
+ if (!o) return O.warn(i = `RPC ${e} not implemented.`), new Error(i);
258
275
  try {
259
276
  return await o(r, t);
260
277
  } catch (r) {
261
- return S.error(`Calling RPC ${e} failed:`, r), r;
278
+ return O.error(`Calling RPC ${e} failed:`, r), r;
262
279
  }
263
280
  }
281
+ monitorItemExpire(r, e) {
282
+ this.qyKVData.monitorItemExpire(r, e);
283
+ }
284
+ unmonitorItemExpire(r) {
285
+ this.qyKVData.unmonitorItemExpire(r);
286
+ }
287
+ monitorContentExpire(r, e) {
288
+ this.qyKVData.monitorContentExpire(r, e);
289
+ }
290
+ unmonitorContentExpire(r, e) {
291
+ this.qyKVData.unmonitorContentExpire(r, e);
292
+ }
293
+ }
294
+
295
+ function a(r, e) {
296
+ return [ e, r.substring(0, 2), r ];
297
+ }
298
+
299
+ function y(r) {
300
+ return [ r[0], r ];
264
301
  }
265
302
 
266
- function h(r, e, t, i, o, a) {
267
- e && (a = a ? n(e) : void 0, l(r, o, a, e, t, i));
303
+ function w(r, e, t, i, o, a) {
304
+ e && (a = a ? n(e) : void 0, g(r, o, a, e, t, i));
268
305
  }
269
306
 
270
307
  export {
271
- t as QyCache
308
+ o as QyCache
272
309
  };
@@ -1,6 +1,6 @@
1
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;
2
+ export declare function compressFile(srcFilePath: any, destFilePath?: any, options?: any): any;
3
+ export declare function decompressFile(srcFilePath: any, destFilePath?: any, options?: any): any;
4
4
  export declare function runOperation({ operation, srcFilePath, destFilePath, options }: {
5
5
  operation: any;
6
6
  srcFilePath: any;