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.
- package/{internal.md → Internal.md} +8 -1
- package/README.md +15 -1
- package/SKILL.md +191 -0
- package/SSD.md +3 -3
- package/package.json +2 -2
- package/scripts/flights2.js +2 -0
- package/src/QyAcl.d.ts +13 -7
- package/src/QyAcl.js +122 -138
- package/src/QyAclSaver.js +2 -2
- package/src/QyAclSaver_Worker.d.ts +2 -2
- package/src/QyAclWriter.d.ts +1 -1
- package/src/QyBatch.d.ts +8 -11
- package/src/QyBatch.js +239 -211
- package/src/QyBinWriter.d.ts +2 -2
- package/src/QyBinWriter.js +15 -15
- package/src/QyCD.d.ts +2 -2
- package/src/QyCD.js +29 -29
- package/src/QyCache.d.ts +6 -1
- package/src/QyCache.js +72 -53
- package/src/QyCompressor.d.ts +2 -2
- package/src/QyCompressor.js +13 -13
- package/src/QyDB.d.ts +1 -22
- package/src/QyDB.js +23 -78
- package/src/QyDefaultOptions.js +5 -0
- package/src/QyDir.js +26 -27
- package/src/QyExpire.d.ts +21 -0
- package/src/QyExpire.js +113 -0
- package/src/QyExpireClock.d.ts +15 -0
- package/src/QyExpireClock.js +53 -0
- package/src/QyExpire_Worker.d.ts +20 -0
- package/src/QyExpire_Worker.js +127 -0
- package/src/QyFile.js +36 -25
- package/src/QyFileContentUtils.js +21 -21
- package/src/QyItem.d.ts +1 -0
- package/src/QyItem.js +15 -9
- package/src/QyJsonSaver.d.ts +1 -1
- package/src/QyJsonSaver.js +1 -1
- package/src/QyKVData.d.ts +5 -2
- package/src/QyKVData.js +126 -114
- package/src/QyKVDataCleaner.js +2 -2
- package/src/QyKVDataCleaner_Worker.js +37 -37
- package/src/QyKVDataSaver.js +2 -2
- package/src/QyKVDataSaver_Worker.d.ts +2 -2
- package/src/QyKVDataSaver_Worker.js +5 -5
- package/src/QyLogFileSaver.js +2 -2
- package/src/QyLogger.d.ts +1 -0
- package/src/QyLogger.js +1 -0
- package/src/QyMessageWorker.d.ts +1 -1
- package/src/QyMessageWorker.js +10 -10
- package/src/QyMessager.d.ts +1 -1
- package/src/QyMessager.js +37 -36
- package/src/QyMessager_Run.js +12 -8
- package/src/QyQueue.js +8 -12
- package/src/QySaver.d.ts +1 -1
- package/src/QySaver.js +1 -1
- package/src/QySnapshotCompactor.js +2 -2
- package/src/QySnapshotCompactor_Worker.d.ts +1 -1
- package/src/QySnapshotCompactor_Worker.js +5 -5
- package/src/QySnapshotSaver.js +2 -2
- package/src/QySnapshotSaver_Worker.js +4 -4
- package/src/QySnapshots.d.ts +2 -2
- package/src/QySnapshots.js +38 -38
- package/src/QyTrigger.d.ts +1 -1
- package/src/QyTrigger.js +20 -21
- package/src/QyUtils.d.ts +3 -2
- package/src/QyUtils.js +93 -86
- package/src/hackernews.js +1 -1
- package/src/simulate.js +6 -6
- package/src/simulate2.js +5 -5
- package/src/soc_pokec.js +1 -1
- package/static/codemirror.bundle/editor.bundle.js +43 -9
- package/static/datafolderui/QyUIFolderViewer.js +1 -5
package/src/QyBatch.js
CHANGED
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
import {
|
|
2
|
-
isDeepStrictEqual as
|
|
2
|
+
isDeepStrictEqual as s
|
|
3
3
|
} from "node:util";
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
mergeContentAndGenDelta as c,
|
|
7
|
-
objToDelMarks as
|
|
7
|
+
objToDelMarks as r
|
|
8
8
|
} from "./QyFileContentUtils.js";
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
11
|
pathSplit as n,
|
|
12
|
-
|
|
13
|
-
isString as
|
|
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
|
|
24
|
+
QyAclCmdGenerator as i,
|
|
25
|
+
CmdNames as m
|
|
23
26
|
} from "./QyAcl.js";
|
|
24
27
|
|
|
25
28
|
import {
|
|
26
|
-
calDifferenceList as
|
|
29
|
+
calDifferenceList as u
|
|
27
30
|
} from "./QyIndex.js";
|
|
28
31
|
|
|
29
32
|
import {
|
|
30
|
-
getDefaultOptions as
|
|
33
|
+
getDefaultOptions as f
|
|
31
34
|
} from "./QyDefaultOptions.js";
|
|
32
35
|
|
|
33
36
|
import {
|
|
34
|
-
QyCD as
|
|
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
|
|
45
|
+
logger as v
|
|
43
46
|
} from "./QyLogger.js";
|
|
44
47
|
|
|
45
|
-
|
|
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
|
|
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
|
-
...
|
|
70
|
+
...f("QyBatch"),
|
|
63
71
|
...t
|
|
64
72
|
};
|
|
65
|
-
e =
|
|
73
|
+
e = F[t.fileLogLevel.toLowerCase()];
|
|
66
74
|
Object.assign(this, {
|
|
67
75
|
options: t,
|
|
68
76
|
fileLogLevel: e ?? 1,
|
|
69
|
-
qyAclCmdGenerator: new
|
|
70
|
-
qyCmdObjHistory: new
|
|
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
|
|
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
|
|
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
|
|
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
|
|
94
|
+
return o(e) && (e = n(e)), q(this, "delFile", this.qyCache.getOrCreateFile(e, t));
|
|
96
95
|
}
|
|
97
|
-
|
|
98
|
-
return
|
|
96
|
+
expireFile(e, t, i = this.currentDir) {
|
|
97
|
+
return o(e) && (e = n(e)), this.expireContent(e, {
|
|
98
|
+
"": t
|
|
99
|
+
}, i);
|
|
99
100
|
}
|
|
100
|
-
|
|
101
|
-
return
|
|
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
|
-
|
|
109
|
-
return
|
|
106
|
+
removeFileExpire(e, t = this.currentDir) {
|
|
107
|
+
return this.removeContentExpire(e, {
|
|
108
|
+
"": 1
|
|
109
|
+
}, !1, t);
|
|
110
110
|
}
|
|
111
|
-
|
|
112
|
-
return
|
|
113
|
-
|
|
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
|
-
|
|
117
|
-
return
|
|
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
|
-
|
|
120
|
-
return
|
|
121
|
-
|
|
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
|
-
|
|
125
|
-
return this.
|
|
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
|
-
|
|
128
|
-
return this.
|
|
132
|
+
remove(e, t, i = this.currentDir) {
|
|
133
|
+
return this.insert(e, r(t), !0, i);
|
|
129
134
|
}
|
|
130
|
-
replace(e, t,
|
|
135
|
+
replace(e, t, i = this.currentDir) {
|
|
131
136
|
return this.insert(e, {
|
|
132
137
|
$rpl: t
|
|
133
|
-
},
|
|
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
|
|
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,
|
|
147
|
-
return
|
|
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:
|
|
151
|
-
modCode:
|
|
146
|
+
propNamePathList: i,
|
|
147
|
+
modCode: r
|
|
152
148
|
});
|
|
153
149
|
}
|
|
154
150
|
removeTrigger(e) {
|
|
155
|
-
return
|
|
151
|
+
return q(this, "removeTrigger", this.qyCache.getOrCreateTriggerFile(e));
|
|
156
152
|
}
|
|
157
153
|
insertRpc(e, t) {
|
|
158
|
-
return
|
|
154
|
+
return q(this, "insertRpc", this.qyCache.getOrCreateRpcFile(e), {
|
|
159
155
|
modCode: t
|
|
160
156
|
});
|
|
161
157
|
}
|
|
162
158
|
removeRpc(e) {
|
|
163
|
-
return
|
|
159
|
+
return q(this, "removeRpc", this.qyCache.getOrCreateRpcFile(e));
|
|
164
160
|
}
|
|
165
161
|
run(e = !1) {
|
|
166
162
|
var {
|
|
167
|
-
|
|
163
|
+
running: t,
|
|
164
|
+
actionQueue: i,
|
|
168
165
|
fileLogLevel: r,
|
|
169
|
-
qyCache:
|
|
166
|
+
qyCache: n
|
|
170
167
|
} = this;
|
|
171
|
-
if (0 ==
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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:
|
|
177
|
-
qyAclCmdGenerator:
|
|
178
|
-
qyCmdObjHistory:
|
|
174
|
+
changeList: i,
|
|
175
|
+
qyAclCmdGenerator: o,
|
|
176
|
+
qyCmdObjHistory: s,
|
|
179
177
|
syncList: c
|
|
180
|
-
} = this, l =
|
|
181
|
-
if (0 == l) return
|
|
182
|
-
var h = g(l),
|
|
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 =
|
|
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 =
|
|
190
|
-
var t = e.syncList,
|
|
191
|
-
for (let e = 0; e <
|
|
192
|
-
var
|
|
193
|
-
a.startsWith("d") ? (
|
|
194
|
-
t[n] = 0 <
|
|
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 <
|
|
197
|
-
})(this), e), h = (c.length = 0,
|
|
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
|
-
|
|
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 :
|
|
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:
|
|
216
|
-
propNamePathList:
|
|
213
|
+
fileNamePath: i,
|
|
214
|
+
propNamePathList: r,
|
|
217
215
|
modCode: n
|
|
218
216
|
} = e, {
|
|
219
217
|
name: a,
|
|
220
|
-
fileContent:
|
|
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,
|
|
230
|
-
t.insertTriggerToTree(a,
|
|
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:
|
|
230
|
+
name: i
|
|
237
231
|
} = e;
|
|
238
232
|
return !!this._action_delFile({
|
|
239
233
|
item: e
|
|
240
|
-
}) && (this.qyCache.removeTriggerFromTree(
|
|
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,
|
|
241
|
+
} = e, i = this._action_insert({
|
|
248
242
|
item: e,
|
|
249
243
|
content: t
|
|
250
244
|
});
|
|
251
|
-
return
|
|
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:
|
|
265
|
-
} = t,
|
|
258
|
+
indexPropPathList: i
|
|
259
|
+
} = t, r = this.qyCache.getOrCreateIndexDir(t), n = r.getOrCreateFile(O), {
|
|
266
260
|
fileContent: a,
|
|
267
|
-
qyIndexPropTree:
|
|
261
|
+
qyIndexPropTree: o
|
|
268
262
|
} = (n.created || this._action_createFile({
|
|
269
263
|
item: n
|
|
270
|
-
}), n),
|
|
271
|
-
for (e of
|
|
264
|
+
}), n), s = [], c = {};
|
|
265
|
+
for (e of i) {
|
|
272
266
|
var l = C(e);
|
|
273
|
-
a && a[l] || (
|
|
267
|
+
a && a[l] || (s.push(e), c[l] = 1, o.insert(e));
|
|
274
268
|
}
|
|
275
|
-
if (0 !=
|
|
276
|
-
|
|
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 =
|
|
275
|
+
var h, d = this, m = t, u = r, i = y(s);
|
|
282
276
|
let e;
|
|
283
|
-
for (h of
|
|
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 &&
|
|
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,
|
|
297
|
+
var t, i, {
|
|
304
298
|
item: e,
|
|
305
|
-
indexPropPath:
|
|
299
|
+
indexPropPath: r
|
|
306
300
|
} = e, e = this.qyCache.getIndexDir(e);
|
|
307
|
-
e && ((
|
|
308
|
-
item:
|
|
301
|
+
e && ((i = e.getFile(O)) ? (t = i.qyIndexPropTree, this._action_insert({
|
|
302
|
+
item: i,
|
|
309
303
|
content: {
|
|
310
|
-
[C(
|
|
304
|
+
[C(r)]: x
|
|
311
305
|
}
|
|
312
|
-
}), t.remove(
|
|
313
|
-
item:
|
|
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
|
|
321
|
-
if (!
|
|
322
|
-
null !=
|
|
323
|
-
item:
|
|
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:
|
|
320
|
+
parentDir: r,
|
|
327
321
|
name: n
|
|
328
|
-
} =
|
|
329
|
-
return
|
|
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:
|
|
338
|
-
name:
|
|
331
|
+
parentDir: i,
|
|
332
|
+
name: r,
|
|
339
333
|
subdirMap: n,
|
|
340
334
|
fileMap: a,
|
|
341
|
-
subdirMapKey:
|
|
342
|
-
fileMapKey:
|
|
335
|
+
subdirMapKey: o,
|
|
336
|
+
fileMapKey: s
|
|
343
337
|
} = t;
|
|
344
338
|
if (a) {
|
|
345
|
-
|
|
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
|
-
|
|
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:
|
|
357
|
-
fileMapKey:
|
|
350
|
+
subdirMapKey: i,
|
|
351
|
+
fileMapKey: r
|
|
358
352
|
} = l;
|
|
359
|
-
if (e &&
|
|
360
|
-
|
|
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
|
-
|
|
359
|
+
N(this, {
|
|
366
360
|
actionName: "delDir",
|
|
367
361
|
item: l
|
|
368
362
|
}), l.created = !1;
|
|
369
363
|
}
|
|
370
364
|
}
|
|
371
|
-
return !!
|
|
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,
|
|
377
|
-
return null !=
|
|
378
|
-
content:
|
|
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:
|
|
381
|
-
newValue:
|
|
374
|
+
oldValue: i,
|
|
375
|
+
newValue: x
|
|
382
376
|
}
|
|
383
|
-
}),
|
|
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:
|
|
383
|
+
content: i
|
|
390
384
|
} = e;
|
|
391
|
-
if (null ==
|
|
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
|
|
390
|
+
var r, n, i = c(t.fileContent, i), {
|
|
397
391
|
merged: a,
|
|
398
|
-
delta:
|
|
399
|
-
} =
|
|
400
|
-
return !!
|
|
401
|
-
oldValue:
|
|
402
|
-
newValue:
|
|
403
|
-
} =
|
|
404
|
-
Object.assign(e,
|
|
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,
|
|
409
|
-
return !
|
|
402
|
+
var t, i = e.item;
|
|
403
|
+
return !i.created && (t = i.parentDir, this._action_createDir({
|
|
410
404
|
item: t
|
|
411
|
-
}), Object.assign(
|
|
405
|
+
}), Object.assign(i, {
|
|
412
406
|
created: !0,
|
|
413
407
|
fileContentLoaded: !0
|
|
414
|
-
}),
|
|
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
|
|
421
|
-
for (let e of
|
|
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
|
-
}),
|
|
420
|
+
}), N(this, {
|
|
427
421
|
actionName: "createDir",
|
|
428
422
|
item: e
|
|
429
423
|
});
|
|
430
|
-
var
|
|
431
|
-
|
|
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
|
|
465
|
+
function q(e, t, i, r) {
|
|
438
466
|
return e.actionQueue.push({
|
|
439
467
|
actionName: t,
|
|
440
|
-
item:
|
|
441
|
-
...
|
|
468
|
+
item: i,
|
|
469
|
+
...r
|
|
442
470
|
}), e;
|
|
443
471
|
}
|
|
444
472
|
|
|
445
|
-
function
|
|
473
|
+
function N(e, t) {
|
|
446
474
|
var {
|
|
447
475
|
changeList: e,
|
|
448
|
-
fileLogLevel:
|
|
476
|
+
fileLogLevel: i
|
|
449
477
|
} = e;
|
|
450
|
-
0 <
|
|
478
|
+
0 < i && (t.logStr = ((e, t) => {
|
|
451
479
|
var {
|
|
452
480
|
actionName: e,
|
|
453
|
-
item:
|
|
454
|
-
content:
|
|
481
|
+
item: i,
|
|
482
|
+
content: r,
|
|
455
483
|
merged: n,
|
|
456
484
|
delta: a
|
|
457
|
-
} = e,
|
|
485
|
+
} = e, i = e + ` "${i.fullPath ?? i}"`;
|
|
458
486
|
if ("delContent" === e) {
|
|
459
|
-
if (3 == t) return
|
|
487
|
+
if (3 == t) return i + " " + JSON.stringify(r);
|
|
460
488
|
} else if ("insert" === e && 2 <= t) return {
|
|
461
|
-
oldValue:
|
|
489
|
+
oldValue: r,
|
|
462
490
|
newValue: e
|
|
463
|
-
} = a, a = `${null ==
|
|
464
|
-
2 == t ?
|
|
465
|
-
return
|
|
466
|
-
})(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
|
|
497
|
+
function P(e, t, i, r, n = void 0) {
|
|
470
498
|
var {
|
|
471
499
|
qyAclCmdGenerator: e,
|
|
472
500
|
qyCache: a,
|
|
473
|
-
syncList:
|
|
474
|
-
changeId:
|
|
501
|
+
syncList: o,
|
|
502
|
+
changeId: s
|
|
475
503
|
} = e;
|
|
476
|
-
e.pushCmd(
|
|
477
|
-
a && a.qyKVData.removeKey(
|
|
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
|
|
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:
|
|
512
|
+
parentDir: o
|
|
485
513
|
} = t;
|
|
486
514
|
if (!t) {
|
|
487
|
-
var
|
|
488
|
-
if (
|
|
489
|
-
t =
|
|
490
|
-
if (t) for (var c of t.qyIndexPropTree.getAllIndexPropPaths())
|
|
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
|
|
496
|
-
e =
|
|
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
|
|
499
|
-
toAddFileList:
|
|
500
|
-
toDelFileList:
|
|
526
|
+
var s, c, l, {
|
|
527
|
+
toAddFileList: i,
|
|
528
|
+
toDelFileList: r
|
|
501
529
|
} = e;
|
|
502
|
-
for (
|
|
503
|
-
item:
|
|
530
|
+
for (s of i) t._action_createFile({
|
|
531
|
+
item: s
|
|
504
532
|
});
|
|
505
|
-
for (c of
|
|
533
|
+
for (c of r) t._action_delFile({
|
|
506
534
|
item: c
|
|
507
535
|
});
|
|
508
|
-
for (l of
|
|
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
|
|
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:
|
|
559
|
+
nextPos: i
|
|
532
560
|
} = this;
|
|
533
|
-
this.actionQueue[
|
|
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:
|
|
567
|
+
nextPos: i
|
|
540
568
|
} = this;
|
|
541
|
-
return e[e = t, (0 < (t =
|
|
569
|
+
return e[e = t, (0 < (t = i) ? t : e) - 1];
|
|
542
570
|
}
|
|
543
571
|
}
|
|
544
572
|
|
|
545
573
|
export {
|
|
546
|
-
|
|
574
|
+
L as QyBatch
|
|
547
575
|
};
|