datafolder 1.0.12 → 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.
package/src/QyExpire.js CHANGED
@@ -3,111 +3,103 @@ import {
3
3
  } from "./QyMessager.js";
4
4
 
5
5
  import {
6
- getDefaultOptions as i
6
+ getDefaultOptions as r
7
7
  } from "./QyDefaultOptions.js";
8
8
 
9
9
  import {
10
- getNowSeconds as a,
11
- isSimpleType as o
10
+ getNowRounded as t,
11
+ isEmptyObj as i
12
12
  } from "./QyUtils.js";
13
13
 
14
14
  import {
15
- setValByNamePath as s
15
+ setValByNamePath as o
16
16
  } from "./QyFileContentUtils.js";
17
17
 
18
18
  import {
19
- SpecialOperators as t
19
+ SpecialOperators as s
20
20
  } from "./QyUtils.js";
21
21
 
22
- import "./QyLogger.js";
22
+ let n = s.$del;
23
23
 
24
- import "node:util";
25
-
26
- let n = t.$del, r = '[""]';
27
-
28
- class p extends e {
24
+ class a extends e {
29
25
  qyCache;
30
- hashToFileMap = {};
31
- maxSecond = 0;
32
- startTime;
26
+ expireMap = {};
27
+ roundedStartTime;
33
28
  constructor(e, t = void 0) {
34
29
  super("QyExpire_Worker", t = {
35
- ...i("QyExpire"),
30
+ ...r("QyExpire"),
36
31
  ...t
37
- }, t, [], [ "setStartTime", "setContentExpire", "removeContentExpire" ]),
32
+ }, t, [], [ "setRoundedStartTime", "setContentExpire", "removeContentExpire", "setItemExpire", "removeItemExpire" ]),
38
33
  Object.assign(this, {
39
34
  qyCache: e
40
35
  });
41
36
  }
42
- monitorContentExpire(e, t) {
43
- (s = this).startTime || s.setStartTime(s.startTime = a());
44
- var i, {
45
- startTime: r,
46
- hashToFileMap: s
37
+ monitorItemExpire(e, t) {
38
+ d(this);
39
+ var {
40
+ roundedStartTime: r,
41
+ expireMap: i
42
+ } = this, t = t - r, r = x(e);
43
+ i[r] = e, this.setItemExpire(r, t);
44
+ }
45
+ unmonitorItemExpire(e) {
46
+ var {
47
+ roundedStartTime: t,
48
+ expireMap: r
47
49
  } = this;
48
- for (i in t) {
49
- var o = t[i] - r;
50
- (t[i] = o) > this.maxSecond && (this.maxSecond = o);
51
- }
52
- var n = e.fullPathHash;
53
- this.setContentExpire(n, t), s[n] = e;
50
+ t && (t = x(e), this.removeItemExpire(t), delete r[t]);
51
+ }
52
+ monitorContentExpire(e, t) {
53
+ d(this);
54
+ var r, {
55
+ roundedStartTime: i,
56
+ expireMap: o
57
+ } = this, s = {};
58
+ for (r in t) s[r] = t[r] - i;
59
+ var n = e.fileContentKey;
60
+ o[n] = e, this.setContentExpire(n, s);
54
61
  }
55
62
  unmonitorContentExpire(e, t) {
56
- this.startTime && this.removeCOntentExpire(e.fullPathHash, Object.keys(t));
63
+ this.roundedStartTime && this.removeContentExpire(e.fileContentKey, Object.keys(t));
57
64
  }
58
- onExpireEmpty(e) {
59
- e == this.maxSecond && Object.assign(this, {
60
- startTime: void 0,
61
- maxSecond: 0
65
+ onEmptyHashList(e) {
66
+ var t, r = this.expireMap;
67
+ for (t of e) delete r[t];
68
+ i(r) && Object.assign(this, {
69
+ roundedStartTime: void 0
62
70
  });
63
71
  }
64
- onFileAllExpireRemoved(e) {
65
- delete this.hashToFileMap[e];
66
- }
67
- onContentExpired(e) {
72
+ onExpired(e) {
68
73
  var t, {
69
- qyCache: i,
70
- hashToFileMap: r
71
- } = this, s = i.qyDB;
74
+ qyCache: r,
75
+ expireMap: i
76
+ } = this, o = r.qyDB;
72
77
  for (t in e) {
73
- var {
74
- expiredProps: o,
75
- toDeleteFile: n
76
- } = e[t];
77
- h(s, r[t], o, n);
78
+ var s = i[t];
79
+ s && (t.startsWith("c") ? m(o, s, e[t]) : (p(o, s), delete i[t]));
78
80
  }
79
81
  }
80
82
  }
81
83
 
82
- function l(e, t = [], i = {}) {
83
- if (o(e)) i[JSON.stringify(t)] = e; else {
84
- var r, s = t.length;
85
- for (r in e) t.push(r), l(e[r], t, i), t.length = s;
86
- }
87
- return i;
84
+ function p(e, t) {
85
+ t.isFile ? (e.delFile(t), e.removeFileExpire(t, !0)) : (e.delDir(t), e.removeDirExpire(t, !0));
88
86
  }
89
87
 
90
- function m(e, t = a()) {
91
- var i, r = [], s = {}, o = e['[""]'], o = o && o <= t;
92
- for (i in e) {
93
- var n = e[i];
94
- n <= t ? r.push(i) : s[i] = n;
95
- }
96
- return {
97
- expiredProps: r,
98
- remainingExpireInfoObj: s,
99
- toDeleteFile: o
100
- };
88
+ function m(e, t, r) {
89
+ t.created && e.insert(t, r.reduce((e, t) => o(e, JSON.parse(t), n), {}), !0),
90
+ e.removeContentExpire(t, r, !0);
91
+ }
92
+
93
+ function d(e) {
94
+ e.roundedStartTime || e.setRoundedStartTime(e.roundedStartTime = t());
101
95
  }
102
96
 
103
- function h(e, t, i, r) {
104
- r && e.delFile(t), 0 < i.length && (e.removeContentExpire(t, i, !0), r || e.insert(t, i.reduce((e, t) => s(e, JSON.parse(t), n), {}), !0));
97
+ function x(e) {
98
+ return (e.isFile ? "f" : "d") + e.fullPathHash;
105
99
  }
106
100
 
107
101
  export {
108
- r as WholeFileProp,
109
- p as QyExpire,
110
- l as flatObj,
111
- m as analyzeExpireInfo,
112
- h as handleExpiredProps
102
+ a as QyExpire,
103
+ p as handleExpiredItem,
104
+ m as handleExpiredProps
113
105
  };
@@ -0,0 +1,10 @@
1
+ export declare class QyExpireInfo {
2
+ hashPropTimeMap: {};
3
+ secondTimeHashPropMap: {};
4
+ get isEmpty(): boolean;
5
+ setExpireInfo(hashKey: any, expireTime: any, prop?: any): void;
6
+ removeExpireInfo(hashKey: any, prop?: any): void;
7
+ processExpired(currentSecondTime: any, checkedSecondTime: any, hashExpiredInfoMap: any, emptyHashList: any): void;
8
+ }
9
+ export declare function getSecond(expireTime: any): number;
10
+ export declare function getSecondM(expireTime: any): number;
@@ -0,0 +1,92 @@
1
+ import {
2
+ getValByNamePath as i,
3
+ setValByNamePath as p,
4
+ delValByNamePath as l
5
+ } from "./QyFileContentUtils.js";
6
+
7
+ import {
8
+ isEmptyObj as T
9
+ } from "./QyUtils.js";
10
+
11
+ class e {
12
+ hashPropTimeMap = {};
13
+ secondTimeHashPropMap = {};
14
+ get isEmpty() {
15
+ return T(this.hashPropTimeMap);
16
+ }
17
+ setExpireInfo(e, a, r = void 0) {
18
+ var {
19
+ hashPropTimeMap: t,
20
+ secondTimeHashPropMap: s
21
+ } = this, o = r ? i(t, [ e, r ]) : t[e];
22
+ o != a && (r ? p(t, [ e, r ], a) : t[e] = a, p(s, h(a, e, r), 1), null != o) && l(s, h(o, e, r));
23
+ }
24
+ removeExpireInfo(e, a = void 0) {
25
+ var {
26
+ hashPropTimeMap: r,
27
+ secondTimeHashPropMap: t
28
+ } = this, s = a ? i(r, [ e, a ]) : r[e];
29
+ null != s && (a ? l(r, [ e, a ]) : delete r[e], l(t, h(s, e, a)));
30
+ }
31
+ processExpired(e, a, r, t) {
32
+ if (!(this.isEmpty || e <= a)) {
33
+ var {
34
+ hashPropTimeMap: s,
35
+ secondTimeHashPropMap: o
36
+ } = this, i = j(e), p = j(a), l = o, h = r, n = i;
37
+ for (let e = p; e < n - 1; ++e) {
38
+ var f = l[e];
39
+ if (f) {
40
+ for (var m of Object.values(f)) E(h, m);
41
+ delete l[e];
42
+ }
43
+ }
44
+ var v, d = o[i];
45
+ if (d) {
46
+ var u = e % 1e3;
47
+ for (let e = i != p ? 0 : a % 1e3 + 1; e <= u; ++e) {
48
+ var c = d[e];
49
+ c && (E(r, c), delete d[e]);
50
+ }
51
+ T(d) && delete o[i];
52
+ }
53
+ for (v in r) {
54
+ var P = r[v];
55
+ if (1 == P) delete s[v]; else {
56
+ var M, y = s[v];
57
+ for (M of P) delete y[M];
58
+ T(y) && (delete s[v], t.push(v));
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+
65
+ function E(a, e) {
66
+ for (var r in e) {
67
+ var t = e[r];
68
+ if (1 == t) a[r] = 1; else {
69
+ let e = a[r];
70
+ (e = e || (a[r] = [])).push(...Object.keys(t));
71
+ }
72
+ }
73
+ }
74
+
75
+ function h(e, a, r = void 0) {
76
+ e = [ j(e), e % 1e3, a ];
77
+ return null != r && e.push(r), e;
78
+ }
79
+
80
+ function j(e) {
81
+ return Math.floor(e / 1e3);
82
+ }
83
+
84
+ function a(e) {
85
+ return e % 1e3;
86
+ }
87
+
88
+ export {
89
+ e as QyExpireInfo,
90
+ j as getSecond,
91
+ a as getSecondM
92
+ };
@@ -1,20 +1,19 @@
1
1
  import { QyMessageWorker } from "./QyMessageWorker.ts";
2
+ import { QyExpireInfo } from "./QyExpireInfo.ts";
2
3
  export default class QyExpire_Worker extends QyMessageWorker {
3
- startTime: any;
4
- seconds: number;
5
- maxSecond: number;
6
- interval: any;
7
- hashPropSecondMap: {};
8
- secondHashPropMap: {};
9
- hashSecondMap: {};
10
- secondDirMap: {};
11
- emptyFileHashList: never[];
4
+ roundedStartTime: any;
5
+ checkedTime: number;
6
+ roundTimer: any;
7
+ secondInterval: any;
8
+ milliSecondInterval: any;
9
+ emptyHashList: any;
10
+ qyExpireInfo: QyExpireInfo;
12
11
  constructor(options: any);
13
- get currentTime(): any;
14
- setStartTime(startTime: any): void;
15
- setContentExpire(fullPathHash: any, flattedRelativeSecondObj: any): void;
16
- removeContentExpire(fullPathHash: any, propNamePathStrList: any): void;
17
- _inc(deltaSeconds?: number): void;
12
+ setRoundedStartTime(roundedStartTime: any): void;
13
+ setItemExpire(hashKey: any, expireTime: any): void;
14
+ removeItemExpire(hashKey: any): void;
15
+ setContentExpire(hashKey: any, flattedRelativeTimeObj: any): void;
16
+ removeContentExpire(hashKey: any, propNamePathStrList: any): void;
18
17
  _op_start(): void;
19
18
  _op_stop(): void;
20
19
  }
@@ -7,121 +7,106 @@ import {
7
7
  } from "./QyMessageWorker.js";
8
8
 
9
9
  import {
10
- getValByNamePath as x,
11
- setValByNamePath as y
12
- } from "./QyFileContentUtils.js";
13
-
14
- import {
15
- getNowSeconds as v,
16
- isEmptyObj as a
10
+ getNowTime as r,
11
+ isEmptyObj as c
17
12
  } from "./QyUtils.js";
18
13
 
19
- import "./QyLogger.js";
20
-
21
14
  import {
22
- WholeFileProp as P
23
- } from "./QyExpire.js";
24
-
25
- var {} = Array;
15
+ getSecond as d,
16
+ getSecondM as l,
17
+ QyExpireInfo as i
18
+ } from "./QyExpireInfo.js";
26
19
 
27
20
  export default class extends e {
28
- startTime;
29
- seconds = 0;
30
- maxSecond = 0;
31
- interval;
32
- hashPropSecondMap = {};
33
- secondHashPropMap = {};
34
- hashSecondMap = {};
35
- secondDirMap = {};
36
- emptyFileHashList = [];
21
+ roundedStartTime;
22
+ checkedTime = 0;
23
+ roundTimer;
24
+ secondInterval;
25
+ milliSecondInterval;
26
+ emptyHashList = [];
27
+ qyExpireInfo = new i();
37
28
  constructor(e) {
38
29
  super(e = {
39
30
  ...t("QyExpire_Worker"),
40
31
  ...e
41
32
  });
42
33
  }
43
- get currentTime() {
44
- return this.startTime + this.seconds;
45
- }
46
- setStartTime(e) {
34
+ setRoundedStartTime(e) {
47
35
  Object.assign(this, {
48
- startTime: e,
49
- seconds: 0
36
+ roundedStartTime: e,
37
+ checkedTime: 0
50
38
  });
51
39
  }
40
+ setItemExpire(e, t) {
41
+ var {
42
+ checkedTime: r,
43
+ qyExpireInfo: i
44
+ } = this, o = h(this), n = {};
45
+ t <= o ? n[e] = 1 : i.setExpireInfo(e, t), r || (this.checkedTime = o),
46
+ v(this, !1, o, n);
47
+ }
48
+ removeItemExpire(e) {
49
+ var t = this.qyExpireInfo;
50
+ t.isEmpty || (t.removeExpireInfo(e), v(this));
51
+ }
52
52
  setContentExpire(e, t) {
53
- var s, {
54
- interval: r,
55
- options: o,
56
- seconds: i
57
- } = this, a = (r || (this.interval = setInterval(this._inc.bind(this), o.expireInterval)),
58
- []);
59
- let n;
60
- for (s in t) {
61
- var p = t[s];
62
- if (p <= i) a.push(s), s == P && (n = !0); else {
63
- f = m = v = c = d = h = l = void 0;
64
- var l = this, h = e, d = s, c = p, {
65
- hashPropSecondMap: v,
66
- secondHashPropMap: m
67
- } = l, f = x(v, [ h, d ]);
68
- c != f && (y(v, [ h, d ], c), y(m, [ c, h, d ], 1), null != f && u(l, f, h, d),
69
- c > l.maxSecond) && (l.maxSecond = c);
70
- }
53
+ var r, {
54
+ checkedTime: i,
55
+ qyExpireInfo: o,
56
+ emptyHashList: n
57
+ } = this, s = h(this);
58
+ let a;
59
+ for (r in t) {
60
+ var m = t[r];
61
+ m <= s ? a ? a.push(r) : a = [ r ] : o.setExpireInfo(e, m, r);
71
62
  }
72
- 0 < a.length && (r = {
73
- expiredProps: a
74
- }, n && (r.toDeleteFile = !0), this.postParent("onContentExpired", r));
63
+ var p = a ? {
64
+ [e]: a
65
+ } : {};
66
+ o.hashPropTimeMap[e] || n.push(e), i || (this.checkedTime = s), v(this, !1, s, p);
75
67
  }
76
68
  removeContentExpire(e, t) {
77
- var s, r, o;
78
- if (this.interval) for (var i of t) s = this, r = e, i = i, o = void 0,
79
- o = s.hashPropSecondMap, null != (o = x(o, [ r, i ])) && (m(s, r, i), u(s, o, r, i));
80
- }
81
- _inc(t = v() - this.currentTime) {
82
- for (let e = 0; e < t; ++e) {
83
- ++this.seconds, a = p = h = l = n = i = o = r = s = void 0;
84
- var s = this, r = this.seconds, o = s.secondHashPropMap, i = o[r];
85
- if (i) {
86
- var a, n = {};
87
- for (a in i) {
88
- var p, l = Object.keys(i[a]), h = {
89
- expiredProps: l
90
- };
91
- for (p of l) m(s, a, p), p == P && (h.toDeleteFile = !0);
92
- n[a] = h;
93
- }
94
- s.postParent("onContentExpired", n), delete o[r];
95
- }
69
+ var r = this.qyExpireInfo;
70
+ if (!r.isEmpty) {
71
+ for (var i of t) r.removeExpireInfo(e, i);
72
+ v(this);
96
73
  }
97
- var {
98
- emptyFileHashList: e,
99
- maxSecond: d,
100
- interval: c
101
- } = this;
102
- 0 < e.length && (this.postParent("onFileAllExpireRemoved", e), e.length = 0),
103
- this.seconds > d && (this.postParent("onExpireEmpty", d), clearInterval(c),
104
- Object.assign(this, {
105
- interval: void 0,
106
- maxSecond: 0
107
- }));
108
74
  }
109
75
  _op_start() {}
110
76
  _op_stop() {
111
- var e = this.interval;
112
- e && (clearInterval(e), this.interval = void 0);
77
+ u(this);
113
78
  }
114
79
  }
115
80
 
116
- function m(e, t, s) {
117
- var {
118
- hashPropSecondMap: e,
119
- emptyFileHashList: r
81
+ function h(e) {
82
+ return r() - e.roundedStartTime;
83
+ }
84
+
85
+ function v(e, t = !1, r = h(e), i = {}) {
86
+ var o, n, s, {
87
+ qyExpireInfo: a,
88
+ checkedTime: m,
89
+ emptyHashList: p
120
90
  } = e;
121
- delete e[t][s], a(e[t]) && (delete e[t], r.push(t));
91
+ m != r && (a.processExpired(r, m, i, p), e.checkedTime = r), c(i) || e.postParent("onExpired", i),
92
+ 0 < p.length && (e.postParent("onEmptyHashList", p), p.length = 0), a.isEmpty ? u(e) : c(a.secondTimeHashPropMap[d(r)]) ? (f(e),
93
+ t || e.secondInterval ? (n = e).secondInterval || (I(n), n.secondInterval = setInterval(() => v(n, !0), 1e3)) : (s = e,
94
+ m = 1e3 - l(r), s.roundTimer || (s.roundTimer = setTimeout(() => v(s, !0), m)))) : (o = e).milliSecondInterval || (I(o),
95
+ o.milliSecondInterval = setInterval(() => v(o), 1));
96
+ }
97
+
98
+ function I(e) {
99
+ var t = e.roundTimer;
100
+ t && (clearTimeout(t), e.roundTimer = void 0);
101
+ }
102
+
103
+ function f(e) {
104
+ var t = e.milliSecondInterval;
105
+ t && (clearInterval(t), e.milliSecondInterval = void 0);
122
106
  }
123
107
 
124
- function u(e, t, s, r) {
125
- var e = e.secondHashPropMap, o = e[t], i = o[s];
126
- delete i[r], a(i) && (delete o[s], a(o)) && delete e[t];
108
+ function u(e) {
109
+ var t, r;
110
+ I(e), (r = (t = e).secondInterval) && (clearInterval(r), t.secondInterval = void 0),
111
+ f(e);
127
112
  }
package/src/QyFile.d.ts CHANGED
@@ -14,8 +14,8 @@ export declare class QyFile extends QyItem {
14
14
  get isFile(): boolean;
15
15
  get contentAsText(): any;
16
16
  get clonedContent(): any;
17
- setContent(content: any): void;
18
17
  view(spec: string | undefined, noClone: any): any;
19
18
  prop(namePath: any, spec: string | undefined, noClone: any): any;
20
19
  unloadFileContent(): void;
20
+ ensureLoaded(): this | undefined;
21
21
  }