datafolder 1.0.10 → 1.0.12

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 (72) hide show
  1. package/{internal.md → Internal.md} +8 -1
  2. package/README.md +15 -1
  3. package/SKILL.md +191 -0
  4. package/SSD.md +3 -3
  5. package/package.json +2 -2
  6. package/scripts/flights2.js +2 -0
  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/QyAclWriter.d.ts +1 -1
  12. package/src/QyBatch.d.ts +8 -11
  13. package/src/QyBatch.js +239 -211
  14. package/src/QyBinWriter.d.ts +2 -2
  15. package/src/QyBinWriter.js +15 -15
  16. package/src/QyCD.d.ts +2 -2
  17. package/src/QyCD.js +29 -29
  18. package/src/QyCache.d.ts +6 -1
  19. package/src/QyCache.js +72 -53
  20. package/src/QyCompressor.d.ts +2 -2
  21. package/src/QyCompressor.js +13 -13
  22. package/src/QyDB.d.ts +1 -22
  23. package/src/QyDB.js +23 -78
  24. package/src/QyDefaultOptions.js +5 -0
  25. package/src/QyDir.js +26 -27
  26. package/src/QyExpire.d.ts +21 -0
  27. package/src/QyExpire.js +113 -0
  28. package/src/QyExpireClock.d.ts +15 -0
  29. package/src/QyExpireClock.js +53 -0
  30. package/src/QyExpire_Worker.d.ts +20 -0
  31. package/src/QyExpire_Worker.js +127 -0
  32. package/src/QyFile.js +36 -25
  33. package/src/QyFileContentUtils.js +21 -21
  34. package/src/QyItem.d.ts +1 -0
  35. package/src/QyItem.js +15 -9
  36. package/src/QyJsonSaver.d.ts +1 -1
  37. package/src/QyJsonSaver.js +1 -1
  38. package/src/QyKVData.d.ts +5 -2
  39. package/src/QyKVData.js +126 -114
  40. package/src/QyKVDataCleaner.js +2 -2
  41. package/src/QyKVDataCleaner_Worker.js +37 -37
  42. package/src/QyKVDataSaver.js +2 -2
  43. package/src/QyKVDataSaver_Worker.d.ts +2 -2
  44. package/src/QyKVDataSaver_Worker.js +5 -5
  45. package/src/QyLogFileSaver.js +2 -2
  46. package/src/QyLogger.d.ts +1 -0
  47. package/src/QyLogger.js +1 -0
  48. package/src/QyMessageWorker.d.ts +1 -1
  49. package/src/QyMessageWorker.js +10 -10
  50. package/src/QyMessager.d.ts +1 -1
  51. package/src/QyMessager.js +37 -36
  52. package/src/QyMessager_Run.js +12 -8
  53. package/src/QyQueue.js +8 -12
  54. package/src/QySaver.d.ts +1 -1
  55. package/src/QySaver.js +1 -1
  56. package/src/QySnapshotCompactor.js +2 -2
  57. package/src/QySnapshotCompactor_Worker.d.ts +1 -1
  58. package/src/QySnapshotCompactor_Worker.js +5 -5
  59. package/src/QySnapshotSaver.js +2 -2
  60. package/src/QySnapshotSaver_Worker.js +4 -4
  61. package/src/QySnapshots.d.ts +2 -2
  62. package/src/QySnapshots.js +38 -38
  63. package/src/QyTrigger.d.ts +1 -1
  64. package/src/QyTrigger.js +20 -21
  65. package/src/QyUtils.d.ts +3 -2
  66. package/src/QyUtils.js +93 -86
  67. package/src/hackernews.js +1 -1
  68. package/src/simulate.js +6 -6
  69. package/src/simulate2.js +5 -5
  70. package/src/soc_pokec.js +1 -1
  71. package/static/codemirror.bundle/editor.bundle.js +43 -9
  72. package/static/datafolderui/QyUIFolderViewer.js +1 -5
package/src/QyBatch.js CHANGED
@@ -1,37 +1,40 @@
1
1
  import {
2
- isDeepStrictEqual as o
2
+ isDeepStrictEqual as s
3
3
  } from "node:util";
4
4
 
5
5
  import {
6
6
  mergeContentAndGenDelta as c,
7
- objToDelMarks as i
7
+ objToDelMarks as r
8
8
  } from "./QyFileContentUtils.js";
9
9
 
10
10
  import {
11
11
  pathSplit as n,
12
- propNameSplit as a,
13
- isString as s,
12
+ ensurePropNamePathList as a,
13
+ isString as o,
14
14
  SpecialOperators as e,
15
15
  getSuffix as g,
16
16
  SpecialFilePaths as t,
17
17
  toSingleName as C,
18
- isSimpleType as l
18
+ isSimpleType as l,
19
+ getNowSeconds as h,
20
+ isEmptyObj as d
19
21
  } from "./QyUtils.js";
20
22
 
21
23
  import {
22
- QyAclCmdGenerator as r
24
+ QyAclCmdGenerator as i,
25
+ CmdNames as m
23
26
  } from "./QyAcl.js";
24
27
 
25
28
  import {
26
- calDifferenceList as h
29
+ calDifferenceList as u
27
30
  } from "./QyIndex.js";
28
31
 
29
32
  import {
30
- getDefaultOptions as d
33
+ getDefaultOptions as f
31
34
  } from "./QyDefaultOptions.js";
32
35
 
33
36
  import {
34
- QyCD as m
37
+ QyCD as p
35
38
  } from "./QyCD.js";
36
39
 
37
40
  import {
@@ -39,17 +42,21 @@ import {
39
42
  } from "./QyIndexPropTree.js";
40
43
 
41
44
  import {
42
- logger as D
45
+ logger as v
43
46
  } from "./QyLogger.js";
44
47
 
45
- let u = Array.isArray, f = e.$del, v = t.IndexPropPathsFileName, p = {
48
+ import {
49
+ flatObj as _
50
+ } from "./QyExpire.js";
51
+
52
+ let D = Array.isArray, x = e.$del, O = t.IndexPropPathsFileName, F = {
46
53
  none: 0,
47
54
  basic: 1,
48
55
  delta: 2,
49
56
  all: 3
50
57
  };
51
58
 
52
- class _ extends m {
59
+ class L extends p {
53
60
  fileLogLevel;
54
61
  actionQueue;
55
62
  changeId;
@@ -57,153 +64,144 @@ class _ extends m {
57
64
  syncList;
58
65
  qyAclCmdGenerator;
59
66
  qyCmdObjHistory;
67
+ running;
60
68
  constructor(e, t) {
61
69
  super(e), t = {
62
- ...d("QyBatch"),
70
+ ...f("QyBatch"),
63
71
  ...t
64
72
  };
65
- e = p[t.fileLogLevel.toLowerCase()];
73
+ e = F[t.fileLogLevel.toLowerCase()];
66
74
  Object.assign(this, {
67
75
  options: t,
68
76
  fileLogLevel: e ?? 1,
69
- qyAclCmdGenerator: new r(),
70
- qyCmdObjHistory: new O(t.maxHistoryCmdObjCount),
77
+ qyAclCmdGenerator: new i(),
78
+ qyCmdObjHistory: new j(t.maxHistoryCmdObjCount),
71
79
  actionQueue: [],
72
80
  changeList: [],
73
81
  syncList: []
74
82
  });
75
83
  }
76
84
  createDir(e, t = this.currentDir) {
77
- return s(e) && (e = n(e)), this.createDirP(e, t);
78
- }
79
- createDirP(e, t = this.currentDir) {
80
- return P(this, "createDir", this.qyCache?.getOrCreateDir(e, t));
85
+ return o(e) && (e = n(e)), q(this, "createDir", this.qyCache?.getOrCreateDir(e, t));
81
86
  }
82
87
  delDir(e, t = this.currentDir) {
83
- return s(e) && (e = n(e)), this.delDirP(e, t);
84
- }
85
- delDirP(e, t = this.currentDir) {
86
- return P(this, "delDir", this.qyCache.getOrCreateDir(e, t));
88
+ return o(e) && (e = n(e)), q(this, "delDir", this.qyCache.getOrCreateDir(e, t));
87
89
  }
88
90
  createFile(e, t = this.currentDir) {
89
- return s(e) && (e = n(e)), this.createFileP(e, t);
90
- }
91
- createFileP(e, t = this.currentDir) {
92
- return P(this, "createFile", this.qyCache.getOrCreateFile(e, t));
91
+ return o(e) && (e = n(e)), q(this, "createFile", this.qyCache.getOrCreateFile(e, t));
93
92
  }
94
93
  delFile(e, t = this.currentDir) {
95
- return s(e) && (e = n(e)), this.delFileP(e, t);
94
+ return o(e) && (e = n(e)), q(this, "delFile", this.qyCache.getOrCreateFile(e, t));
96
95
  }
97
- delFileP(e, t = this.currentDir) {
98
- return P(this, "delFile", this.qyCache.getOrCreateFile(e, t));
96
+ expireFile(e, t, i = this.currentDir) {
97
+ return o(e) && (e = n(e)), this.expireContent(e, {
98
+ "": t
99
+ }, i);
99
100
  }
100
- createIndex(e, t, r = this.currentDir) {
101
- return s(e) && (e = n(e)), this.createIndexP(e, t, r);
102
- }
103
- createIndexP(e, t, r = this.currentDir) {
104
- return u(t) || (t = [ t ]), P(this, "createIndex", this.qyCache?.getOrCreateDir(e, r), {
105
- indexPropPathList: t
101
+ expireContent(e, t, i = this.currentDir) {
102
+ return o(e) && (e = n(e)), q(this, "expireContent", this.qyCache.getOrCreateFile(e, i), {
103
+ expireInfoObj: t
106
104
  });
107
105
  }
108
- delIndex(e, t, r = this.currentDir) {
109
- return s(e) && (e = n(e)), this.delIndexP(e, t, r);
106
+ removeFileExpire(e, t = this.currentDir) {
107
+ return this.removeContentExpire(e, {
108
+ "": 1
109
+ }, !1, t);
110
110
  }
111
- delIndexP(e, t, r = this.currentDir) {
112
- return P(this, "delIndex", this.qyCache.getOrCreateDir(e, r), {
113
- indexPropPath: t
111
+ removeContentExpire(e, t, i = !1, r = this.currentDir) {
112
+ return o(e) && (e = n(e)), q(this, "removeContentExpire", this.qyCache.getOrCreateFile(e, r), {
113
+ expireInfoObj: t,
114
+ infoFileOnly: i
114
115
  });
115
116
  }
116
- insert(e, t, r = this.currentDir) {
117
- return s(e) && (e = n(e)), this.insertP(e, t, r);
117
+ createIndex(e, t, i = this.currentDir) {
118
+ return o(e) && (e = n(e)), D(t) || (t = [ t ]), q(this, "createIndex", this.qyCache?.getOrCreateDir(e, i), {
119
+ indexPropPathList: t
120
+ });
118
121
  }
119
- insertP(e, t, r = this.currentDir) {
120
- return P(this, "insert", this.qyCache.getOrCreateFile(e, r), {
121
- content: l(t) ? t : structuredClone(t)
122
+ delIndex(e, t, i = this.currentDir) {
123
+ return o(e) && (e = n(e)), q(this, "delIndex", this.qyCache.getOrCreateDir(e, i), {
124
+ indexPropPath: t
122
125
  });
123
126
  }
124
- remove(e, t, r = this.currentDir) {
125
- return this.insert(e, i(t), r);
127
+ insert(e, t, i = !1, r = this.currentDir) {
128
+ return o(e) && (e = n(e)), q(this, "insert", this.qyCache.getOrCreateFile(e, r), {
129
+ content: i || l(t) ? t : structuredClone(t)
130
+ });
126
131
  }
127
- removeP(e, t, r = this.currentDir) {
128
- return this.insertP(e, i(t), r);
132
+ remove(e, t, i = this.currentDir) {
133
+ return this.insert(e, r(t), !0, i);
129
134
  }
130
- replace(e, t, r = this.currentDir) {
135
+ replace(e, t, i = this.currentDir) {
131
136
  return this.insert(e, {
132
137
  $rpl: t
133
- }, r);
134
- }
135
- replaceP(e, t, r = this.currentDir) {
136
- return this.insertP(e, {
137
- $rpl: t
138
- }, r);
138
+ }, !0, i);
139
139
  }
140
140
  delContent(e, t = this.currentDir) {
141
- return s(e) && (e = n(e)), this.delContentP(e, t);
142
- }
143
- delContentP(e, t = this.currentDir) {
144
- return P(this, "delContent", this.qyCache.getOrCreateFile(e, t));
141
+ return o(e) && (e = n(e)), q(this, "delContent", this.qyCache.getOrCreateFile(e, t));
145
142
  }
146
- insertTrigger(e, t, r, i) {
147
- return s(t) && (t = n(t)), r = (r = s(r) ? [ r ] : r).map(e => s(e) ? a(e) : e),
148
- P(this, "insertTrigger", this.qyCache.getOrCreateTriggerFile(e), {
143
+ insertTrigger(e, t, i, r) {
144
+ return o(t) && (t = n(t)), i = a(i), q(this, "insertTrigger", this.qyCache.getOrCreateTriggerFile(e), {
149
145
  fileNamePath: t,
150
- propNamePathList: r,
151
- modCode: i
146
+ propNamePathList: i,
147
+ modCode: r
152
148
  });
153
149
  }
154
150
  removeTrigger(e) {
155
- return P(this, "removeTrigger", this.qyCache.getOrCreateTriggerFile(e));
151
+ return q(this, "removeTrigger", this.qyCache.getOrCreateTriggerFile(e));
156
152
  }
157
153
  insertRpc(e, t) {
158
- return P(this, "insertRpc", this.qyCache.getOrCreateRpcFile(e), {
154
+ return q(this, "insertRpc", this.qyCache.getOrCreateRpcFile(e), {
159
155
  modCode: t
160
156
  });
161
157
  }
162
158
  removeRpc(e) {
163
- return P(this, "removeRpc", this.qyCache.getOrCreateRpcFile(e));
159
+ return q(this, "removeRpc", this.qyCache.getOrCreateRpcFile(e));
164
160
  }
165
161
  run(e = !1) {
166
162
  var {
167
- actionQueue: t,
163
+ running: t,
164
+ actionQueue: i,
168
165
  fileLogLevel: r,
169
- qyCache: i
166
+ qyCache: n
170
167
  } = this;
171
- if (0 == t.length) return 0;
172
- var n, a = this.changeId = i.increaseChangeId();
173
- for (n of t) this["_action_" + n.actionName](n);
174
- t.length = 0, this.resetCurrentDir();
168
+ if (t || 0 == i.length) return 0;
169
+ this.running = !0;
170
+ var a, t = this.changeId = n.increaseChangeId();
171
+ for (a of i) this["_action_" + a.actionName](a);
172
+ i.length = 0, this.running = !1, this.resetCurrentDir();
175
173
  var {
176
- changeList: t,
177
- qyAclCmdGenerator: s,
178
- qyCmdObjHistory: o,
174
+ changeList: i,
175
+ qyAclCmdGenerator: o,
176
+ qyCmdObjHistory: s,
179
177
  syncList: c
180
- } = this, l = t.length;
181
- if (0 == l) return i.decreaseChangeId(), 0;
182
- var h = g(l), s = s.takeCmdArgAsListObj();
178
+ } = this, l = i.length;
179
+ if (0 == l) return n.decreaseChangeId(), 0;
180
+ var h = g(l), o = o.takeCmdArgAsListObj();
183
181
  let d;
184
- 0 < r && (r = t.map(({
182
+ 0 < r && (r = i.map(({
185
183
  logStr: e
186
184
  }) => e).join("\n"), d = new Date().toISOString() + `: ${l} change${h}:
187
185
  ${r}
188
186
  `);
189
- var m, u, l = i.save(a, s, d, (e => {
190
- var t = e.syncList, r = t.length;
191
- for (let e = 0; e < r; e += 2) {
192
- var i, n = e + 1, a = t[e], s = t[n];
193
- a.startsWith("d") ? (i = s.subdirNameList, t[n] = 0 < i.length ? i : void 0) : a.startsWith("f") ? (i = s.fileNameList,
194
- t[n] = 0 < i.length ? i : void 0) : t[n] = s.fileContent;
187
+ var m, u, l = n.save(t, o, d, (e => {
188
+ var t = e.syncList, i = t.length;
189
+ for (let e = 0; e < i; e += 2) {
190
+ var r, n = e + 1, a = t[e], o = t[n];
191
+ a.startsWith("d") ? (r = o.subdirNameList, t[n] = 0 < r.length ? r : void 0) : a.startsWith("f") ? (r = o.fileNameList,
192
+ t[n] = 0 < r.length ? r : void 0) : t[n] = o.fileContent;
195
193
  }
196
- if (0 < r) return t;
197
- })(this), e), h = (c.length = 0, o.push(s), t.filter(({
194
+ if (0 < i) return t;
195
+ })(this), e), h = (c.length = 0, s.push(o), i.filter(({
198
196
  item: e,
199
197
  delta: t
200
198
  }) => t && 0 < e.triggerNodes?.length));
201
- t.length = 0;
199
+ i.length = 0;
202
200
  for ({
203
201
  item: m,
204
202
  delta: u
205
203
  } of h) for (var f of m.triggerNodes) f.checkTrigger(m, u);
206
- return e ? l : a;
204
+ return e ? l : t;
207
205
  }
208
206
  getTopHistoryCmdObj() {
209
207
  return this.qyCmdObjHistory.top();
@@ -212,43 +210,39 @@ ${r}
212
210
  e.actionName = "insertTrigger";
213
211
  var t, {
214
212
  item: e,
215
- fileNamePath: r,
216
- propNamePathList: i,
213
+ fileNamePath: i,
214
+ propNamePathList: r,
217
215
  modCode: n
218
216
  } = e, {
219
217
  name: a,
220
- fileContent: s
221
- } = e, e = this._action_insert({
218
+ fileContent: o
219
+ } = e, o = o && o[0], e = this._action_insert({
222
220
  item: e,
223
- content: {
224
- fileNamePath: r,
225
- propNamePathList: i,
226
- modCode: n
227
- }
221
+ content: [ i, r, n ]
228
222
  });
229
- return e && (t = this.qyCache, s && !o(s.fileNamePath, r) && t.removeTriggerFromTree(a, s.fileNamePath),
230
- t.insertTriggerToTree(a, r, i, n)), e;
223
+ return e && (t = this.qyCache, o && !s(o, i) && t.removeTriggerFromTree(a, o),
224
+ t.insertTriggerToTree(a, i, r, n)), e;
231
225
  }
232
226
  _action_removeTrigger(e) {
233
227
  e.actionName = "removeTrigger";
234
228
  var e = e.item, {
235
229
  fileContent: t,
236
- name: r
230
+ name: i
237
231
  } = e;
238
232
  return !!this._action_delFile({
239
233
  item: e
240
- }) && (this.qyCache.removeTriggerFromTree(r, t.fileNamePath), !0);
234
+ }) && (this.qyCache.removeTriggerFromTree(i, t[0]), !0);
241
235
  }
242
236
  _action_insertRpc(e) {
243
237
  e.actionName = "insertRpc";
244
238
  var {
245
239
  item: e,
246
240
  modCode: t
247
- } = e, r = this._action_insert({
241
+ } = e, i = this._action_insert({
248
242
  item: e,
249
243
  content: t
250
244
  });
251
- return r && this.qyCache.insertRpc(e.name, t), r;
245
+ return i && this.qyCache.insertRpc(e.name, t), i;
252
246
  }
253
247
  _action_removeRpc(e) {
254
248
  e.actionName = "removeRpc";
@@ -261,26 +255,26 @@ ${r}
261
255
  t.actionName = "createIndex";
262
256
  var e, {
263
257
  item: t,
264
- indexPropPathList: r
265
- } = t, i = this.qyCache.getOrCreateIndexDir(t), n = i.getOrCreateFile(v), {
258
+ indexPropPathList: i
259
+ } = t, r = this.qyCache.getOrCreateIndexDir(t), n = r.getOrCreateFile(O), {
266
260
  fileContent: a,
267
- qyIndexPropTree: s
261
+ qyIndexPropTree: o
268
262
  } = (n.created || this._action_createFile({
269
263
  item: n
270
- }), n), o = [], c = {};
271
- for (e of r) {
264
+ }), n), s = [], c = {};
265
+ for (e of i) {
272
266
  var l = C(e);
273
- a && a[l] || (o.push(e), c[l] = 1, s.insert(e));
267
+ a && a[l] || (s.push(e), c[l] = 1, o.insert(e));
274
268
  }
275
- if (0 != o.length) {
276
- D.log(`Creating index ${JSON.stringify(o)} for ` + t.fullPath), this._action_insert({
269
+ if (0 != s.length) {
270
+ v.log(`Creating index ${JSON.stringify(s)} for ` + t.fullPath), this._action_insert({
277
271
  item: n,
278
272
  content: c
279
273
  });
280
274
  {
281
- var h, d = this, m = t, u = i, r = y(o);
275
+ var h, d = this, m = t, u = r, i = y(s);
282
276
  let e;
283
- for (h of r) {
277
+ for (h of i) {
284
278
  var f = u.searchOrCreateSubdir(h);
285
279
  if (!f.created) {
286
280
  d._action_createDir({
@@ -291,7 +285,7 @@ ${r}
291
285
  fileContent: g,
292
286
  name: p
293
287
  } = g;
294
- null != g && N(d, f, h, p, void 0, g);
288
+ null != g && I(d, f, h, p, void 0, g);
295
289
  }
296
290
  }
297
291
  }
@@ -300,33 +294,33 @@ ${r}
300
294
  }
301
295
  _action_delIndex(e) {
302
296
  e.actionName = "delIndex";
303
- var t, r, {
297
+ var t, i, {
304
298
  item: e,
305
- indexPropPath: i
299
+ indexPropPath: r
306
300
  } = e, e = this.qyCache.getIndexDir(e);
307
- e && ((r = e.getFile(v)) ? (t = r.qyIndexPropTree, this._action_insert({
308
- item: r,
301
+ e && ((i = e.getFile(O)) ? (t = i.qyIndexPropTree, this._action_insert({
302
+ item: i,
309
303
  content: {
310
- [C(i)]: f
304
+ [C(r)]: x
311
305
  }
312
- }), t.remove(i).hasPrefix || (r = e.getSubdir(i)) && this._action_delDir({
313
- item: r
306
+ }), t.remove(r).hasPrefix || (i = e.getSubdir(r)) && this._action_delDir({
307
+ item: i
314
308
  })) : this._action_delDir({
315
309
  item: e
316
310
  }));
317
311
  }
318
312
  _action_delFile(e, t = !1) {
319
313
  e.actionName = "delFile";
320
- var r = e.item;
321
- if (!r.created) return !1;
322
- null != r.fileContent && this._action_delContent({
323
- item: r
314
+ var i = e.item;
315
+ if (!i.created) return !1;
316
+ null != i.fileContent && this._action_delContent({
317
+ item: i
324
318
  });
325
319
  var {
326
- parentDir: i,
320
+ parentDir: r,
327
321
  name: n
328
- } = r;
329
- return r.created = !1, x(this, e), t || L(this, i, "R", i.fileMapKey, n),
322
+ } = i;
323
+ return i.created = !1, N(this, e), t || P(this, r, m.R, r.fileMapKey, n),
330
324
  !0;
331
325
  }
332
326
  _action_delDir(e) {
@@ -334,178 +328,212 @@ ${r}
334
328
  var t = e.item;
335
329
  if (!t.created) return !1;
336
330
  let {
337
- parentDir: r,
338
- name: i,
331
+ parentDir: i,
332
+ name: r,
339
333
  subdirMap: n,
340
334
  fileMap: a,
341
- subdirMapKey: s,
342
- fileMapKey: o
335
+ subdirMapKey: o,
336
+ fileMapKey: s
343
337
  } = t;
344
338
  if (a) {
345
- L(this, t, "D", o);
339
+ P(this, t, m.D, s);
346
340
  for (var c of t.fileList) this._action_delFile({
347
341
  item: c
348
342
  }, !0);
349
343
  }
350
344
  if (n) {
351
- L(this, t, "D", s);
345
+ P(this, t, m.D, o);
352
346
  for (var l of t.allSubdirs()) {
353
347
  let {
354
348
  subdirMap: e,
355
349
  fileMap: t,
356
- subdirMapKey: r,
357
- fileMapKey: i
350
+ subdirMapKey: i,
351
+ fileMapKey: r
358
352
  } = l;
359
- if (e && L(this, l, "D", r), t) {
360
- L(this, l, "D", i);
353
+ if (e && P(this, l, m.D, i), t) {
354
+ P(this, l, m.D, r);
361
355
  for (var h of l.fileList) this._action_delFile({
362
356
  item: h
363
357
  }, !0);
364
358
  }
365
- x(this, {
359
+ N(this, {
366
360
  actionName: "delDir",
367
361
  item: l
368
362
  }), l.created = !1;
369
363
  }
370
364
  }
371
- return !!r && (t.created = !1, x(this, e), L(this, r, "R", r.subdirMapKey, i),
365
+ return !!i && (t.created = !1, N(this, e), P(this, i, m.R, i.subdirMapKey, r),
372
366
  !0);
373
367
  }
374
368
  _action_delContent(e) {
375
369
  e.actionName = "delContent";
376
- var t = e.item, r = t.fileContent;
377
- return null != r && (t.setContent(void 0), Object.assign(e, {
378
- content: r,
370
+ var t = e.item, i = t.fileContent;
371
+ return null != i && (t.setContent(void 0), Object.assign(e, {
372
+ content: i,
379
373
  delta: {
380
- oldValue: r,
381
- newValue: f
374
+ oldValue: i,
375
+ newValue: x
382
376
  }
383
- }), x(this, e), L(this, t, "D", t.fileContentKey), F(this, t, r), !0);
377
+ }), N(this, e), P(this, t, m.D, t.fileContentKey), b(this, t, i), !0);
384
378
  }
385
379
  _action_insert(e) {
386
380
  e.actionName = "insert";
387
381
  var {
388
382
  item: t,
389
- content: r
383
+ content: i
390
384
  } = e;
391
- if (null == r) return D.warn(`Saving undefined to ${t.fullPath}. Not making any change.`),
385
+ if (null == i) return v.warn(`Saving undefined to ${t.fullPath}. Not making any change.`),
392
386
  !1;
393
387
  t.created || this._action_createFile({
394
388
  item: t
395
389
  });
396
- var i, n, r = c(t.fileContent, r), {
390
+ var r, n, i = c(t.fileContent, i), {
397
391
  merged: a,
398
- delta: s
399
- } = r;
400
- return !!s && ({
401
- oldValue: s,
402
- newValue: i
403
- } = s, !!i) && (n = t.fileContentKey, null == a ? L(this, t, "D", n) : L(this, t, "M", n, i),
404
- Object.assign(e, r), x(this, e), t.setContent(a), F(this, t, s, i, a), !0);
392
+ delta: o
393
+ } = i;
394
+ return !!o && ({
395
+ oldValue: o,
396
+ newValue: r
397
+ } = o, !!r) && (n = t.fileContentKey, null == a ? P(this, t, m.D, n) : P(this, t, m.M, n, r),
398
+ Object.assign(e, i), N(this, e), t.setContent(a), b(this, t, o, r, a), !0);
405
399
  }
406
400
  _action_createFile(e) {
407
401
  e.actionName = "createFile";
408
- var t, r = e.item;
409
- return !r.created && (t = r.parentDir, this._action_createDir({
402
+ var t, i = e.item;
403
+ return !i.created && (t = i.parentDir, this._action_createDir({
410
404
  item: t
411
- }), Object.assign(r, {
405
+ }), Object.assign(i, {
412
406
  created: !0,
413
407
  fileContentLoaded: !0
414
- }), x(this, e), L(this, t, "A", t.fileMapKey, r.name), !0);
408
+ }), N(this, e), P(this, t, m.A, t.fileMapKey, i.name), !0);
415
409
  }
416
410
  _action_createDir(e) {
417
411
  e.actionName = "createDir";
418
412
  let t = e.item;
419
413
  if (t.created) return !1;
420
- for (var r = []; !t.created; ) r.push(t), t = t.parentDir;
421
- for (let e of r.reverse()) {
414
+ for (var i = []; !t.created; ) i.push(t), t = t.parentDir;
415
+ for (let e of i.reverse()) {
422
416
  Object.assign(e, {
423
417
  created: !0,
424
418
  subdirMapLoaded: !0,
425
419
  fileMapLoaded: !0
426
- }), x(this, {
420
+ }), N(this, {
427
421
  actionName: "createDir",
428
422
  item: e
429
423
  });
430
- var i = e.parentDir;
431
- L(this, i, "A", i.subdirMapKey, e.name);
424
+ var r = e.parentDir;
425
+ P(this, r, m.A, r.subdirMapKey, e.name);
432
426
  }
433
427
  return !0;
434
428
  }
429
+ _action_expireContent(e) {
430
+ e.actionName = "expireContent";
431
+ var t, {
432
+ item: e,
433
+ expireInfoObj: i
434
+ } = e, r = h(), n = _(i);
435
+ for (t in n) n[t] += r;
436
+ var i = this.qyCache, a = i.getOrCreateExpireInfoFile(e.fullPathHash), a = this._action_insert({
437
+ item: a,
438
+ content: {
439
+ ...n
440
+ }
441
+ });
442
+ return a && i.monitorContentExpire(e, n), a;
443
+ }
444
+ _action_removeContentExpire(t) {
445
+ t.actionName = "removeContentExpire";
446
+ var {
447
+ item: t,
448
+ expireInfoObj: i,
449
+ infoFileOnly: r
450
+ } = t, n = this.qyCache, a = n.getExpireInfoFile(t.fullPathHash);
451
+ if (a.created) {
452
+ let e;
453
+ if (D(i)) e = Object.fromEntries(i.map(e => [ e, x ])); else for (var o in e = _(i)) e[o] ? e[o] = x : delete e[o];
454
+ i = this._action_insert({
455
+ item: a,
456
+ content: e
457
+ });
458
+ return i && (d(a.fileContent) && this._action_delFile({
459
+ item: a
460
+ }), r || n.unmonitorContentExpire(t, e)), i;
461
+ }
462
+ }
435
463
  }
436
464
 
437
- function P(e, t, r, i) {
465
+ function q(e, t, i, r) {
438
466
  return e.actionQueue.push({
439
467
  actionName: t,
440
- item: r,
441
- ...i
468
+ item: i,
469
+ ...r
442
470
  }), e;
443
471
  }
444
472
 
445
- function x(e, t) {
473
+ function N(e, t) {
446
474
  var {
447
475
  changeList: e,
448
- fileLogLevel: r
476
+ fileLogLevel: i
449
477
  } = e;
450
- 0 < r && (t.logStr = ((e, t) => {
478
+ 0 < i && (t.logStr = ((e, t) => {
451
479
  var {
452
480
  actionName: e,
453
- item: r,
454
- content: i,
481
+ item: i,
482
+ content: r,
455
483
  merged: n,
456
484
  delta: a
457
- } = e, r = e + ` "${r.fullPath ?? r}"`;
485
+ } = e, i = e + ` "${i.fullPath ?? i}"`;
458
486
  if ("delContent" === e) {
459
- if (3 == t) return r + " " + JSON.stringify(i);
487
+ if (3 == t) return i + " " + JSON.stringify(r);
460
488
  } else if ("insert" === e && 2 <= t) return {
461
- oldValue: i,
489
+ oldValue: r,
462
490
  newValue: e
463
- } = a, a = `${null == i ? "" : "delta:"} ${JSON.stringify(i)} -> ` + JSON.stringify(e),
464
- 2 == t ? r + " " + a : r + ` ${a}. ` + (null != i ? "new: " + JSON.stringify(n) : "");
465
- return r;
466
- })(t, r)), e.push(t);
491
+ } = a, a = `${null == r ? "" : "delta:"} ${JSON.stringify(r)} -> ` + JSON.stringify(e),
492
+ 2 == t ? i + " " + a : i + ` ${a}. ` + (null != r ? "new: " + JSON.stringify(n) : "");
493
+ return i;
494
+ })(t, i)), e.push(t);
467
495
  }
468
496
 
469
- function L(e, t, r, i, n = void 0) {
497
+ function P(e, t, i, r, n = void 0) {
470
498
  var {
471
499
  qyAclCmdGenerator: e,
472
500
  qyCache: a,
473
- syncList: s,
474
- changeId: o
501
+ syncList: o,
502
+ changeId: s
475
503
  } = e;
476
- e.pushCmd(r, i, n), i.startsWith("d") ? t.dChangeId = o : i.startsWith("f") ? t.fChangeId = o : t.cChangeId = o,
477
- a && a.qyKVData.removeKey(i) && s.push(i, t);
504
+ e.pushCmd(i, r, n), r.startsWith("d") ? t.dChangeId = s : r.startsWith("f") ? t.fChangeId = s : t.cChangeId = s,
505
+ a && a.qyKVData.removeKey(r) && o.push(r, t);
478
506
  }
479
507
 
480
- function F(e, t, r, i = void 0, n = void 0) {
508
+ function b(e, t, i, r = void 0, n = void 0) {
481
509
  var {
482
510
  underHiddenFolder: t,
483
511
  name: a,
484
- parentDir: s
512
+ parentDir: o
485
513
  } = t;
486
514
  if (!t) {
487
- var o = e.qyCache.getIndexDir(s);
488
- if (o) {
489
- t = o.getFile(v);
490
- if (t) for (var c of t.qyIndexPropTree.getAllIndexPropPaths()) N(e, o.searchOrCreateSubdir(c), c, a, r, i, n);
515
+ var s = e.qyCache.getIndexDir(o);
516
+ if (s) {
517
+ t = s.getFile(O);
518
+ if (t) for (var c of t.qyIndexPropTree.getAllIndexPropPaths()) I(e, s.searchOrCreateSubdir(c), c, a, i, r, n);
491
519
  }
492
520
  }
493
521
  }
494
522
 
495
- function N(t, e, r, i, n, a, s = void 0) {
496
- e = h(e, r, i, n, a, s);
523
+ function I(t, e, i, r, n, a, o = void 0) {
524
+ e = u(e, i, r, n, a, o);
497
525
  if (e) {
498
- var o, c, l, {
499
- toAddFileList: r,
500
- toDelFileList: i
526
+ var s, c, l, {
527
+ toAddFileList: i,
528
+ toDelFileList: r
501
529
  } = e;
502
- for (o of r) t._action_createFile({
503
- item: o
530
+ for (s of i) t._action_createFile({
531
+ item: s
504
532
  });
505
- for (c of i) t._action_delFile({
533
+ for (c of r) t._action_delFile({
506
534
  item: c
507
535
  });
508
- for (l of i) {
536
+ for (l of r) {
509
537
  let e = l.parentDir;
510
538
  for (;e.created && !e.isHiddenFolder && e.isEmpty; ) t._action_delDir({
511
539
  item: e
@@ -514,7 +542,7 @@ function N(t, e, r, i, n, a, s = void 0) {
514
542
  }
515
543
  }
516
544
 
517
- class O {
545
+ class j {
518
546
  maxLength;
519
547
  actionQueue;
520
548
  nextPos;
@@ -528,20 +556,20 @@ class O {
528
556
  push(e) {
529
557
  var {
530
558
  maxLength: t,
531
- nextPos: r
559
+ nextPos: i
532
560
  } = this;
533
- this.actionQueue[r] = e, this.nextPos = ((e, t) => (t += 1) < e ? t : 0)(t, r);
561
+ this.actionQueue[i] = e, this.nextPos = ((e, t) => (t += 1) < e ? t : 0)(t, i);
534
562
  }
535
563
  top() {
536
564
  var {
537
565
  actionQueue: e,
538
566
  maxLength: t,
539
- nextPos: r
567
+ nextPos: i
540
568
  } = this;
541
- return e[e = t, (0 < (t = r) ? t : e) - 1];
569
+ return e[e = t, (0 < (t = i) ? t : e) - 1];
542
570
  }
543
571
  }
544
572
 
545
573
  export {
546
- _ as QyBatch
574
+ L as QyBatch
547
575
  };