datafolder 1.0.26 → 1.0.28

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/ChangeLog.md CHANGED
@@ -1,3 +1,5 @@
1
+ 1.0.28 Rewrite delta generation to improve insertion performance.
2
+
1
3
  1.0.24 Add HNSW test cases (test/testQyHNSW.ts).
2
4
 
3
5
  1.0.23 Add ChangeLog.md
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datafolder",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "author": {
5
5
  "name": "lysh",
6
6
  "email": "datafolderdev@outlook.com"
@@ -19,7 +19,7 @@ function insertAirports() {
19
19
  const { batch } = qyDB;
20
20
  for (const record of data) {
21
21
  const { country, state, city } = record;
22
- batch.put(`airports/${country}/${state}/${city}/${record._key}`, record);
22
+ batch.insert(`airports/${country}/${state}/${city}/${record._key}`, record);
23
23
  }
24
24
  batch.run();
25
25
  console.timeEnd("insertAirports");
@@ -32,8 +32,8 @@ function insertFlights() {
32
32
  for (let i = 0; i < data.length; ++i) {
33
33
  const record = data[i];
34
34
  const { Year, Month, Day } = record;
35
- batch.put(`flights/${Year}/${Month}/${Day}/${i}`, record);
36
- // batch.insertP(["flights", Year, Month, Day, i], record);
35
+ // batch.insert(`flights/${Year}/${Month}/${Day}/${i}`, record);
36
+ batch.insert(["flights", Year, Month, Day, i], record);
37
37
  }
38
38
  batch.run();
39
39
  console.timeEnd("insertFlights");
package/src/QyAcl.d.ts CHANGED
@@ -4,10 +4,11 @@ export declare const CmdNames: {
4
4
  R: number;
5
5
  D: number;
6
6
  };
7
- export declare function applyAclChange(aclKeyValueMap: any, cmdArgAsListObj: any): void;
7
+ export declare function applyAclCmdObj(aclKeyValueMap: any, cmdArgAsListObj: any): void;
8
8
  export declare function iterCmdKeys(cmdArgAsListObj: any, fun: any): void;
9
+ export declare function applyChange(oldContent: any, newValue: any): any;
9
10
  export declare class QyAclCmdGenerator {
10
- cmdArgAsMapChanges: any[];
11
+ cmdArgAsMapChangeObj: any[];
11
12
  cmdCount: number;
12
13
  batchSize: number;
13
14
  constructor();
package/src/QyAcl.js CHANGED
@@ -1,38 +1,34 @@
1
1
  import c from "node:fs/promises";
2
2
 
3
3
  import {
4
- cleanContent as s,
5
- mergeContent as g,
6
4
  setValByNamePath as a
7
5
  } from "./QyFileContentUtils.js";
8
6
 
9
7
  import {
10
- isEmptyObj as m,
8
+ isEmptyObj as g,
11
9
  toBuffer as n,
12
- SpecialOperators as r,
13
- isSimpleType as o
10
+ isSimpleType as i,
11
+ isArray as s,
12
+ trimArrayTail as o
14
13
  } from "./QyUtils.js";
15
14
 
16
15
  import {
17
16
  logger as h
18
17
  } from "./QyLogger.js";
19
18
 
20
- let {
21
- $del: f,
22
- $rpl: l
23
- } = r, u = {
19
+ let f = {
24
20
  M: 0,
25
21
  A: 1,
26
22
  R: 2,
27
23
  D: 3
28
24
  };
29
25
 
30
- function t(r, t) {
26
+ function r(r, t) {
31
27
  var e, a, n, i, [ s, o, f, t ] = t;
32
28
  for (e in t) null != r[e] && (r[e] = void 0);
33
29
  for (a in o) {
34
- var l, u = r[a] || (r[a] = {});
35
- for (l of o[a]) u[l] = 1;
30
+ var u, l = r[a] || (r[a] = {});
31
+ for (u of o[a]) l[u] = 1;
36
32
  }
37
33
  for (n in f) {
38
34
  var c = r[n];
@@ -40,57 +36,60 @@ function t(r, t) {
40
36
  var h = f[n];
41
37
  if (h) {
42
38
  for (var d of h) delete c[d];
43
- m(c) && (r[n] = void 0);
39
+ g(c) && (r[n] = void 0);
44
40
  }
45
41
  }
46
42
  }
47
- for (i in s) r[i] = g(r[i], s[i]);
43
+ for (i in s) r[i] = v(r[i], s[i]);
48
44
  }
49
45
 
50
- function e(r, t) {
46
+ function t(r, t) {
51
47
  for (var e of r) for (var a in e) t(a);
52
48
  }
53
49
 
54
- class i {
55
- cmdArgAsMapChanges = [];
50
+ function v(r, t) {
51
+ if (null !== t) {
52
+ var e, a = t.$u8;
53
+ if (a) return new Uint8Array(a);
54
+ if (null == r || i(r) || i(t) || s(t) || t.$rpl) return t;
55
+ for (e in t) {
56
+ var n = v(r[e], t[e]);
57
+ null != n ? r[e] = n : delete r[e];
58
+ }
59
+ return s(r) && o(r), r;
60
+ }
61
+ }
62
+
63
+ class e {
64
+ cmdArgAsMapChangeObj = [];
56
65
  cmdCount = 0;
57
66
  batchSize = 0;
58
67
  constructor() {}
59
68
  pushCmd(r, t, e = void 0) {
60
69
  switch (++this.cmdCount, r) {
61
- case u.A:
62
- d(this, [ u.A, t, e ]), v(this, [ u.R, t, e ]);
70
+ case f.A:
71
+ u(this, [ f.A, t, e ]), l(this, [ f.R, t, e ]);
63
72
  break;
64
73
 
65
- case u.R:
66
- d(this, [ u.R, t, e ]), v(this, [ u.A, t, e ]);
74
+ case f.R:
75
+ u(this, [ f.R, t, e ]), l(this, [ f.A, t, e ]);
67
76
  break;
68
77
 
69
- case u.D:
70
- if (d(this, [ u.D, t ]), t.startsWith("c")) v(this, [ u.M, t ]); else for (var a of [ u.A, u.R ]) v(this, [ a, t ]);
78
+ case f.D:
79
+ if (u(this, [ f.D, t ]), t.startsWith("c")) l(this, [ f.M, t ]); else for (var a of [ f.A, f.R ]) l(this, [ a, t ]);
71
80
  break;
72
81
 
73
- case u.M:
82
+ case f.M:
74
83
  {
75
- var n = this.cmdArgAsMapChanges;
84
+ var n = this.cmdArgAsMapChangeObj;
76
85
  let [ r ] = n;
77
- n = (r = null == r ? n[u.M] = {} : r)[t];
78
- r[t] = null != n ? function e(a, n) {
79
- if (n == f) return f;
80
- let r = n.$rpl;
81
- if (null != r) return n;
82
- let t = a.$rpl;
83
- if (null != t) return a[l] = g(t, n), a;
84
- if (a == f) return {
85
- [l]: s(n)
86
- };
87
- if (o(a) || o(n)) return n;
88
- if (n.$u8) return n;
89
- for (var i of Object.keys(n)) {
90
- let r = n[i], t = a[i];
91
- null == t ? a[i] = r : a[i] = e(t, r);
92
- }
93
- return a;
86
+ n = (r = null == r ? n[f.M] = {} : r)[t];
87
+ r[t] = null != n ? function r(t, e) {
88
+ if (null === e) return null;
89
+ if (void 0 === t || i(e) || s(e) || e.$rpl || e.$u8) return e;
90
+ if (null === t || i(t)) return e.$rpl = 1, e;
91
+ for (var a in e) t[a] = r(t[a], e[a]);
92
+ return t;
94
93
  }(n, e) : e;
95
94
  break;
96
95
  }
@@ -101,101 +100,101 @@ class i {
101
100
  }
102
101
  pushCmdArgAsListObj(r) {
103
102
  if (r) {
104
- for (var t in ++this.batchSize, r[u.D]) this.pushCmd(u.D, t);
105
- for (var e of [ u.A, u.R ]) {
103
+ for (var t in ++this.batchSize, r[f.D]) this.pushCmd(f.D, t);
104
+ for (var e of [ f.A, f.R ]) {
106
105
  var a, n = r[e];
107
106
  for (a in n) for (var i of n[a]) this.pushCmd(e, a, i);
108
107
  }
109
108
  var s, [ o ] = r;
110
- for (s in o) this.pushCmd(u.M, s, o[s]);
109
+ for (s in o) this.pushCmd(f.M, s, o[s]);
111
110
  }
112
111
  return this;
113
112
  }
114
113
  takeCmdArgAsListObj() {
115
- var r, t = this.cmdArgAsMapChanges;
114
+ var r, t = this.cmdArgAsMapChangeObj;
116
115
  Object.assign(this, {
117
- cmdArgAsMapChanges: [],
116
+ cmdArgAsMapChangeObj: [],
118
117
  cmdCount: 0,
119
118
  batchSize: 0
120
119
  });
121
- for (r of [ u.A, u.R ]) {
120
+ for (r of [ f.A, f.R ]) {
122
121
  var e, a = t[r];
123
122
  for (e in a) {
124
123
  var n = Object.keys(a[e]);
125
124
  0 < n.length ? a[e] = n : delete a[e];
126
125
  }
127
- m(a) && delete t[r];
126
+ g(a) && delete t[r];
128
127
  }
129
- var i = t[u.D], i = (i && m(i) && delete t[u.D], t[u.M]);
130
- return i && m(i) && delete t[u.M], t;
128
+ var i = t[f.D], i = (i && g(i) && delete t[f.D], t[f.M]);
129
+ return i && g(i) && delete t[f.M], t;
131
130
  }
132
131
  toAclBuffer(r) {
133
132
  var t = this.batchSize;
134
- if (0 < t) return w(r, t, JSON.stringify(this.takeCmdArgAsListObj()));
133
+ if (0 < t) return b(r, t, JSON.stringify(this.takeCmdArgAsListObj()));
135
134
  }
136
135
  }
137
136
 
138
- function d(r, t, e = 1) {
139
- a(r.cmdArgAsMapChanges, t, e);
137
+ function u(r, t, e = 1) {
138
+ a(r.cmdArgAsMapChangeObj, t, e);
140
139
  }
141
140
 
142
- function v(r, t) {
143
- let e = r.cmdArgAsMapChanges;
141
+ function l(r, t) {
142
+ let e = r.cmdArgAsMapChangeObj;
144
143
  if (e && t && !(t.length <= 1)) {
145
144
  for (let r = 0; r < t.length - 1; ++r) if (null == (e = e[t[r]])) return;
146
145
  delete e[t.at(-1)];
147
146
  }
148
147
  }
149
148
 
150
- async function p(t, r = !1, e = 0) {
149
+ async function d(t, r = !1, e = 0) {
151
150
  try {
152
- return await y(t, await c.readFile(t), r, e);
151
+ return await w(t, await c.readFile(t), r, e);
153
152
  } catch (r) {
154
153
  throw h.error(`Reading ${t} failed:`, r), r;
155
154
  }
156
155
  }
157
156
 
158
- let A = [ 1, 2, 4, 8 ];
157
+ let m = [ 1, 2, 4, 8 ];
159
158
 
160
- function b(t) {
159
+ function A(t) {
161
160
  var e = t.length, a = new Array(e), n = new Array(e);
162
161
  let i = e << 6, s = 1;
163
162
  for (let r = 0; r < e; ++r) {
164
163
  var o = a[r] = (o = t[r]) <= 255 ? 0 : o <= 65535 ? 1 : o <= 4294967295 ? 2 : 3, o = (i |= o << (r << 1),
165
- n[r] = A[o]);
164
+ n[r] = m[o]);
166
165
  s += o;
167
166
  }
168
167
  var f = Buffer.allocUnsafe(s);
169
168
  f.writeUInt8(i);
170
- let l = 1;
169
+ let u = 1;
171
170
  for (let r = 0; r < e; ++r) {
172
- d = h = c = u = void 0;
173
- var [ u, c, h, d = 0 ] = [ f, t[r], n[r], l ];
171
+ d = h = c = l = void 0;
172
+ var [ l, c, h, d = 0 ] = [ f, t[r], n[r], u ];
174
173
  switch (h) {
175
174
  case 1:
176
- u.writeUInt8(c, d);
175
+ l.writeUInt8(c, d);
177
176
  break;
178
177
 
179
178
  case 2:
180
- u.writeUInt16BE(c, d);
179
+ l.writeUInt16BE(c, d);
181
180
  break;
182
181
 
183
182
  case 4:
184
- u.writeUInt32BE(c, d);
183
+ l.writeUInt32BE(c, d);
185
184
  break;
186
185
 
187
186
  default:
188
- u.writeBigUInt64BE(BigInt(c), d);
187
+ l.writeBigUInt64BE(BigInt(c), d);
189
188
  }
190
- l += n[r];
189
+ u += n[r];
191
190
  }
192
191
  return f;
193
192
  }
194
193
 
195
- function C(t, e, a) {
194
+ function p(t, e, a) {
196
195
  var n = t.readUInt8(e), i = (++e, n >> 6 & 3);
197
196
  for (let r = 0; r < i; ++r) {
198
- var s = A[n >> (r << 1) & 3];
197
+ var s = m[n >> (r << 1) & 3];
199
198
  a[r] = ((r, t, e = 0) => {
200
199
  switch (t) {
201
200
  case 1:
@@ -215,21 +214,21 @@ function C(t, e, a) {
215
214
  return e;
216
215
  }
217
216
 
218
- function w(r, t, e) {
217
+ function b(r, t, e) {
219
218
  e = n(e);
220
- return Buffer.concat([ b([ r, t, e.length ]), e ]);
219
+ return Buffer.concat([ A([ r, t, e.length ]), e ]);
221
220
  }
222
221
 
223
- async function y(e, r, a, n) {
222
+ async function w(e, r, a, n) {
224
223
  var i = [];
225
224
  for (let t = 0; t < r.length; ) {
226
- var s = [], o = C(r, t, s), [ s, f, l ] = s;
225
+ var s = [], o = p(r, t, s), [ s, f, u ] = s;
227
226
  if (s <= n) h.warn(`changeId ${s} <= currentChangeId ${n} at ${e}:${t}. Ignored.`),
228
- t = o + l; else {
227
+ t = o + u; else {
229
228
  n + f != s && h.warn(`currentChangeId ${n} + batchSize ${f} != changeId ` + s);
230
229
  try {
231
- var u = JSON.parse(r.subarray(o, o + l));
232
- i.push([ s, u ]), n = s, t = o + l;
230
+ var l = JSON.parse(r.subarray(o, o + u));
231
+ i.push([ s, l ]), n = s, t = o + u;
233
232
  } catch (r) {
234
233
  if (h.error(`Parse ${e} failed at ${t}:`, r), a) return h.warn(`Autorepair by truncating ${e} to ` + t),
235
234
  null == (f = await c.truncate(e, t)) ? h.log("truncate success") : h.error("truncate failed:", f),
@@ -242,13 +241,14 @@ async function y(e, r, a, n) {
242
241
  }
243
242
 
244
243
  export {
245
- u as CmdNames,
246
- t as applyAclChange,
247
- e as iterCmdKeys,
248
- i as QyAclCmdGenerator,
249
- p as readAclFile,
250
- b as numsToBuffer,
251
- C as bufferToNums,
252
- w as toAclBuffer,
253
- y as readAclBuffer
244
+ f as CmdNames,
245
+ r as applyAclCmdObj,
246
+ t as iterCmdKeys,
247
+ v as applyChange,
248
+ e as QyAclCmdGenerator,
249
+ d as readAclFile,
250
+ A as numsToBuffer,
251
+ p as bufferToNums,
252
+ b as toAclBuffer,
253
+ w as readAclBuffer
254
254
  };
package/src/QyBatch.d.ts CHANGED
@@ -28,7 +28,6 @@ export declare class QyBatch extends QyCD {
28
28
  insertEmbedding(namePath: any, embedding: any, parentDir?: any): any;
29
29
  delEmbedding(namePath: any, parentDir?: any): any;
30
30
  insertWithEmbedding(namePath: any, content: any, embedding: any, noClone?: boolean, noCreate?: boolean, parentDir?: any): any;
31
- remove(namePath: any, content: any, parentDir?: any): any;
32
31
  put(namePath: any, content: any, parentDir?: any): any;
33
32
  delContent(namePath: any, parentDir?: any): any;
34
33
  insertTrigger(triggerName: any, fileNamePath: any, propNamePathList: any, modCode: any): any;
package/src/QyBatch.js CHANGED
@@ -3,8 +3,7 @@ import {
3
3
  } from "node:util";
4
4
 
5
5
  import {
6
- mergeContentAndGenDelta as s,
7
- objToDelMarks as r
6
+ mergeContentAndGenDelta as s
8
7
  } from "./QyFileContentUtils.js";
9
8
 
10
9
  import {
@@ -14,31 +13,31 @@ import {
14
13
  SpecialOperators as e,
15
14
  getSuffix as f,
16
15
  SpecialFilePaths as t,
17
- toSingleName as p,
16
+ toSingleName as _,
18
17
  isSimpleType as c,
19
18
  isEmptyObj as m,
20
- isNumber as a,
19
+ isNumber as r,
21
20
  getNowRounded as d,
22
- isDate as u,
23
- isArray as g,
24
- isFloat32Array as C
21
+ isDate as a,
22
+ isArray as u,
23
+ isFloat32Array as g
25
24
  } from "./QyUtils.js";
26
25
 
27
26
  import {
28
27
  QyAclCmdGenerator as i,
29
- CmdNames as _
28
+ CmdNames as C
30
29
  } from "./QyAcl.js";
31
30
 
32
31
  import {
33
- calDifferenceList as v
32
+ calDifferenceList as p
34
33
  } from "./QyIndex.js";
35
34
 
36
35
  import {
37
- getDefaultOptions as y
36
+ getDefaultOptions as v
38
37
  } from "./QyDefaultOptions.js";
39
38
 
40
39
  import {
41
- QyCD as D
40
+ QyCD as y
42
41
  } from "./QyCD.js";
43
42
 
44
43
  import {
@@ -46,17 +45,17 @@ import {
46
45
  } from "./QyIndexPropTree.js";
47
46
 
48
47
  import {
49
- logger as F
48
+ logger as D
50
49
  } from "./QyLogger.js";
51
50
 
52
- let O = e.$del, b = t.IndexPropPathsFileName, L = {
51
+ let F = e.$del, O = t.IndexPropPathsFileName, b = {
53
52
  none: 0,
54
53
  basic: 1,
55
54
  delta: 2,
56
55
  all: 3
57
56
  };
58
57
 
59
- class Q extends D {
58
+ class L extends y {
60
59
  fileLogLevel;
61
60
  actionQueue;
62
61
  changeId;
@@ -67,15 +66,15 @@ class Q extends D {
67
66
  running;
68
67
  constructor(e, t) {
69
68
  super(e), t = {
70
- ...y("QyBatch"),
69
+ ...v("QyBatch"),
71
70
  ...t
72
71
  };
73
- e = L[t.fileLogLevel.toLowerCase()];
72
+ e = b[t.fileLogLevel.toLowerCase()];
74
73
  Object.assign(this, {
75
74
  options: t,
76
75
  fileLogLevel: e ?? 1,
77
76
  qyAclCmdGenerator: new i(),
78
- qyCmdObjHistory: new A(t.maxHistoryCmdObjCount),
77
+ qyCmdObjHistory: new Q(t.maxHistoryCmdObjCount),
79
78
  actionQueue: [],
80
79
  changeList: [],
81
80
  syncList: []
@@ -141,7 +140,7 @@ class Q extends D {
141
140
  });
142
141
  }
143
142
  createIndex(e, t, i = this.currentDir) {
144
- l(e) && (e = o(e)), g(t) || (t = [ t ]);
143
+ l(e) && (e = o(e)), u(t) || (t = [ t ]);
145
144
  e = this.qyCache.getOrCreateDir(e, i);
146
145
  return q(this, this._action_createIndex, {
147
146
  item: e,
@@ -156,7 +155,7 @@ class Q extends D {
156
155
  indexPropPath: t
157
156
  });
158
157
  }
159
- insert(e, t, i = !1, r = !1, n = this.currentDir) {
158
+ insert(e, t, i = !0, r = !1, n = this.currentDir) {
160
159
  l(e) && (e = o(e));
161
160
  e = this.qyCache.getOrCreateFile(e, n).ensureLoaded();
162
161
  return t = i || c(t) ? t : structuredClone(t), q(this, this._action_insert, {
@@ -166,7 +165,7 @@ class Q extends D {
166
165
  });
167
166
  }
168
167
  insertEmbedding(e, t, i = this.currentDir) {
169
- var r = this.qyCache, r = (C(t) || (t = new Float32Array(t)), l(e) && (e = o(e)),
168
+ var r = this.qyCache, r = (g(t) || (t = new Float32Array(t)), l(e) && (e = o(e)),
170
169
  r.getOrCreateFile(e, i));
171
170
  return q(this, this._action_insertEmbedding, {
172
171
  item: r,
@@ -182,9 +181,6 @@ class Q extends D {
182
181
  insertWithEmbedding(e, t, i, r = !1, n = !1, a = this.currentDir) {
183
182
  return this.insert(e, t, r, n, a), this.insertEmbedding(e, i, a);
184
183
  }
185
- remove(e, t, i = this.currentDir) {
186
- return this.insert(e, r(t), !0, !0, i);
187
- }
188
184
  put(e, t, i = this.currentDir) {
189
185
  l(e) && (e = o(e));
190
186
  e = this.qyCache.getOrCreateFile(e, i).ensureLoaded();
@@ -325,18 +321,18 @@ ${r}
325
321
  var e, {
326
322
  item: t,
327
323
  indexPropPathList: i
328
- } = t, r = this.qyCache.getOrCreateIndexDir(t), n = r.getOrCreateFile(b), {
324
+ } = t, r = this.qyCache.getOrCreateIndexDir(t), n = r.getOrCreateFile(O), {
329
325
  fileContent: a,
330
326
  qyIndexPropTree: o
331
327
  } = (n.created || this._action_createFile({
332
328
  item: n
333
329
  }), n), s = [], l = {};
334
330
  for (e of i) {
335
- var c = p(e);
331
+ var c = _(e);
336
332
  a && a[c] || (s.push(e), l[c] = 1, o.insert(e));
337
333
  }
338
334
  if (0 != s.length) {
339
- F.log(`Creating index ${JSON.stringify(s)} for ` + t.fullPath), this._action_insert({
335
+ D.log(`Creating index ${JSON.stringify(s)} for ` + t.fullPath), this._action_insert({
340
336
  item: n,
341
337
  content: l
342
338
  });
@@ -367,10 +363,10 @@ ${r}
367
363
  item: e,
368
364
  indexPropPath: r
369
365
  } = e, e = this.qyCache.getIndexDir(e);
370
- e && ((i = e.getFile(b)) ? (t = i.qyIndexPropTree, this._action_insert({
366
+ e && ((i = e.getFile(O)) ? (t = i.qyIndexPropTree, this._action_insert({
371
367
  item: i,
372
368
  content: {
373
- [p(r)]: O
369
+ [_(r)]: F
374
370
  }
375
371
  }), t.remove(r).hasPrefix || (i = e.getSubdir(r)) && this._action_delDir({
376
372
  item: i
@@ -389,7 +385,7 @@ ${r}
389
385
  parentDir: r,
390
386
  name: n
391
387
  } = i;
392
- return i.created = !1, N(this, e), t || I(this, r, _.R, r.fileMapKey, n),
388
+ return i.created = !1, N(this, e), t || I(this, r, C.R, r.fileMapKey, n),
393
389
  !0;
394
390
  }
395
391
  _action_delDir(e) {
@@ -405,13 +401,13 @@ ${r}
405
401
  fileMapKey: s
406
402
  } = t;
407
403
  if (a) {
408
- I(this, t, _.D, s);
404
+ I(this, t, C.D, s);
409
405
  for (var l of t.fileList) this._action_delFile({
410
406
  item: l
411
407
  }, !0);
412
408
  }
413
409
  if (n) {
414
- I(this, t, _.D, o);
410
+ I(this, t, C.D, o);
415
411
  for (var c of t.allSubdirs()) {
416
412
  let {
417
413
  subdirMap: e,
@@ -419,8 +415,8 @@ ${r}
419
415
  subdirMapKey: i,
420
416
  fileMapKey: r
421
417
  } = c;
422
- if (e && I(this, c, _.D, i), t) {
423
- I(this, c, _.D, r);
418
+ if (e && I(this, c, C.D, i), t) {
419
+ I(this, c, C.D, r);
424
420
  for (var h of c.fileList) this._action_delFile({
425
421
  item: h
426
422
  }, !0);
@@ -431,7 +427,7 @@ ${r}
431
427
  }), c.created = !1;
432
428
  }
433
429
  }
434
- return !!i && (t.created = !1, N(this, e), I(this, i, _.R, i.subdirMapKey, r),
430
+ return !!i && (t.created = !1, N(this, e), I(this, i, C.R, i.subdirMapKey, r),
435
431
  !0);
436
432
  }
437
433
  _action_delContent(e) {
@@ -441,9 +437,9 @@ ${r}
441
437
  content: i,
442
438
  delta: {
443
439
  oldValue: i,
444
- newValue: O
440
+ newValue: F
445
441
  }
446
- }), N(this, e), I(this, t, _.D, t.fileContentKey), P(this, t, i), !0);
442
+ }), N(this, e), I(this, t, C.D, t.fileContentKey), P(this, t, i), !0);
447
443
  }
448
444
  _action_insertEmbedding(e) {
449
445
  e.actionName = "insertEmbedding";
@@ -486,15 +482,14 @@ ${r}
486
482
  item: t,
487
483
  content: i
488
484
  } = e;
489
- if (null == i) return F.warn(`Saving undefined to ${t.fullPath}. Not making any change.`),
485
+ if (null == i) return D.warn(`Saving undefined to ${t.fullPath}. Not making any change.`),
490
486
  !1;
491
487
  t.created || this._action_createFile({
492
488
  item: t
493
489
  });
494
490
  var r = t.fileContentKey;
495
- return I(this, t, _.M, r, {
496
- $rpl: i
497
- }), N(this, e), t.fileContent = i, !0;
491
+ return i.$rpl = 1, I(this, t, C.M, r, i), N(this, e), t.fileContent = i,
492
+ !0;
498
493
  }
499
494
  _action_insert(e) {
500
495
  e.actionName = "insert";
@@ -503,7 +498,7 @@ ${r}
503
498
  content: i,
504
499
  noCreate: r
505
500
  } = e;
506
- if (null == i) return F.warn(`Saving undefined to ${t.fullPath}. Not making any change.`),
501
+ if (null == i) return D.warn(`Saving undefined to ${t.fullPath}. Not making any change.`),
507
502
  !1;
508
503
  if (!t.created) {
509
504
  if (r) return !1;
@@ -518,7 +513,7 @@ ${r}
518
513
  return !!o && ({
519
514
  oldValue: o,
520
515
  newValue: n
521
- } = o, !!n) && (a = t.fileContentKey, null == i ? I(this, t, _.D, a) : I(this, t, _.M, a, n),
516
+ } = o, a = t.fileContentKey, null == i ? I(this, t, C.D, a) : I(this, t, C.M, a, n),
522
517
  Object.assign(e, r), N(this, e), t.fileContent = i, P(this, t, o, n, i),
523
518
  !0);
524
519
  }
@@ -530,7 +525,7 @@ ${r}
530
525
  }), Object.assign(i, {
531
526
  created: !0,
532
527
  fileContentLoaded: !0
533
- }), N(this, e), I(this, t, _.A, t.fileMapKey, i.name), !0);
528
+ }), N(this, e), I(this, t, C.A, t.fileMapKey, i.name), !0);
534
529
  }
535
530
  _action_createDir(e) {
536
531
  e.actionName = "createDir";
@@ -547,7 +542,7 @@ ${r}
547
542
  item: e
548
543
  });
549
544
  var r = e.parentDir;
550
- I(this, r, _.A, r.subdirMapKey, e.name);
545
+ I(this, r, C.A, r.subdirMapKey, e.name);
551
546
  }
552
547
  return !0;
553
548
  }
@@ -580,7 +575,7 @@ ${r}
580
575
  return !!r && (t = this.qyCache, !!(r = t.getExpireInfoFile(r.fullPathHash, e.isFile ? "f" : "d"))) && ((n = this._action_insert({
581
576
  item: r,
582
577
  content: {
583
- [n]: O
578
+ [n]: F
584
579
  }
585
580
  })) && (m(r.fileContent) && this._action_delFile({
586
581
  item: r
@@ -608,7 +603,7 @@ ${r}
608
603
  expireInfoObj: i,
609
604
  infoFileOnly: r
610
605
  } = e, n = this.qyCache, a = n.getExpireInfoFile(e.fullPathHash, "c");
611
- return !!a && (i = g(i) ? Object.fromEntries(i.map(e => [ e, O ])) : j(i, e => e ? O : void 0),
606
+ return !!a && (i = u(i) ? Object.fromEntries(i.map(e => [ e, F ])) : j(i, e => e ? F : void 0),
612
607
  (t = this._action_insert({
613
608
  item: a,
614
609
  content: i
@@ -667,14 +662,14 @@ function P(e, t, i, r = void 0, n = void 0) {
667
662
  if (!t) {
668
663
  var s = e.qyCache.getIndexDir(o);
669
664
  if (s) {
670
- t = s.getFile(b);
665
+ t = s.getFile(O);
671
666
  if (t) for (var l of t.qyIndexPropTree.getAllIndexPropPaths()) E(e, s.searchOrCreateSubdir(l), l, a, i, r, n);
672
667
  }
673
668
  }
674
669
  }
675
670
 
676
671
  function E(t, e, i, r, n, a, o = void 0) {
677
- e = v(e, i, n, a, o);
672
+ e = p(e, i, n, a, o);
678
673
  if (e) {
679
674
  var s, l, c, {
680
675
  toAddFileList: i,
@@ -682,14 +677,14 @@ function E(t, e, i, r, n, a, o = void 0) {
682
677
  } = e;
683
678
  for (s of i) {
684
679
  var h = s.fileContent ?? {};
685
- h[r] = 1, t._action_put({
680
+ h[r] = 1, t._action_insert({
686
681
  item: s,
687
682
  content: h
688
683
  });
689
684
  }
690
685
  for (l of n) {
691
686
  var d = l.fileContent;
692
- null != d && Object.hasOwn(d, r) && (delete d[r], t._action_put({
687
+ null != d && Object.hasOwn(d, r) && (delete d[r], t._action_insert({
693
688
  item: l,
694
689
  content: d
695
690
  }));
@@ -706,7 +701,7 @@ function E(t, e, i, r, n, a, o = void 0) {
706
701
  }
707
702
  }
708
703
 
709
- class A {
704
+ class Q {
710
705
  maxLength;
711
706
  actionQueue;
712
707
  nextPos;
@@ -746,7 +741,7 @@ function j(e, t = void 0, i = [], r = {}) {
746
741
  }
747
742
 
748
743
  function S(e, t, i) {
749
- return a(e) ? (t ? e : 1e3 * e) + i : l(e) ? (t = new Date(e).getTime(), isNaN(t) || t <= i ? void 0 : t) : !u(e) || (t = e.getTime()) <= i ? void 0 : t;
744
+ return r(e) ? (t ? e : 1e3 * e) + i : l(e) ? (t = new Date(e).getTime(), isNaN(t) || t <= i ? void 0 : t) : !a(e) || (t = e.getTime()) <= i ? void 0 : t;
750
745
  }
751
746
 
752
747
  function T(e, t, i, r, n) {
@@ -766,5 +761,5 @@ function M(e, t, i, r, n) {
766
761
  }
767
762
 
768
763
  export {
769
- Q as QyBatch
764
+ L as QyBatch
770
765
  };
package/src/QyDB.js CHANGED
@@ -47,7 +47,7 @@ class l extends t {
47
47
  ...o("QyDB"),
48
48
  ...t
49
49
  }, this.rootFolder = e;
50
- for (let t of [ "createIndex", "delIndex", "insert", "put", "remove", "delDir", "delFile", "delContent", "insertTrigger", "removeTrigger", "insertRpc", "removeRpc", "insertEmbedding", "delEmbedding", "insertWithEmbedding", "expireFile", "expireDir", "expireContent", "expireFileM", "expireDirM", "expireContentM", "removeFileExpire", "removeDirExpire", "removeContentExpire" ]) this[t] = (...e) => this.currentBatch[t](...e).run();
50
+ for (let t of [ "createIndex", "delIndex", "insert", "put", "delDir", "delFile", "delContent", "insertTrigger", "removeTrigger", "insertRpc", "removeRpc", "insertEmbedding", "delEmbedding", "insertWithEmbedding", "expireFile", "expireDir", "expireContent", "expireFileM", "expireDirM", "expireContentM", "removeFileExpire", "removeDirExpire", "removeContentExpire" ]) this[t] = (...e) => this.currentBatch[t](...e).run();
51
51
  }
52
52
  async start(e) {
53
53
  var t;
@@ -1,4 +1,3 @@
1
- export declare function mergeContent(oldContent: any, newContent: any): any;
2
1
  export declare function mergeContentAndGenDelta(oldContent: any, newContent: any): {
3
2
  merged: any;
4
3
  delta: any;
@@ -6,5 +5,4 @@ export declare function mergeContentAndGenDelta(oldContent: any, newContent: any
6
5
  export declare function setValByNamePath(rootObj: any, namePath: any, value: any): any;
7
6
  export declare function getValByNamePath(obj: any, namePath: any): any;
8
7
  export declare function delValByNamePath(obj: any, propPath: any, keepEmptyObj?: boolean, idx?: number): any;
9
- export declare function cleanContent(obj: any, shouldCleanMark?: boolean): any;
10
- export declare function objToDelMarks(obj: any): any;
8
+ export declare function cleanContent(obj: any): any;
@@ -1,195 +1,145 @@
1
1
  import {
2
- isDeepStrictEqual as t
2
+ isDeepStrictEqual as u
3
3
  } from "node:util";
4
4
 
5
5
  import {
6
- isDate as f,
7
- isArray as d,
8
- isNotNullObj as a,
9
- trimArrayTail as o,
10
- isSimpleType as s,
11
- SpecialOperators as r,
12
- isEmptyObj as i,
13
- isUint8Array as u,
6
+ isDate as n,
7
+ isArray as V,
8
+ isNotNullObj as i,
9
+ trimArrayTail as a,
10
+ isSimpleType as m,
11
+ isEmptyObj as o,
12
+ isUint8Array as f,
14
13
  isNumber as c
15
14
  } from "./QyUtils.js";
16
15
 
17
- let {
18
- $del: g,
19
- $rpl: p,
20
- $ext: V,
21
- $pop: m,
22
- $u8: v
23
- } = r;
24
-
25
- function h(e, n) {
26
- if (null == n) return e;
27
- if (n !== g) {
28
- if (s(n)) return n;
29
- var l = n[p];
30
- if (null != l) {
31
- let r = l[v];
32
- return null != r ? new Uint8Array(r) : l;
33
- }
34
- let r = n[v];
35
- if (null != r) return new Uint8Array(r);
36
- if (null == e || s(e)) return n;
37
- if (e != n) {
38
- var t, u = d(e);
39
- for (t in n) {
40
- var i = h(e[t], n[t]);
41
- null == i ? (delete e[t], u && o(e)) : e[t] = i;
42
- }
43
- }
44
- return e;
45
- }
46
- }
47
-
48
- function e(r, e) {
49
- let n = {
16
+ function l(l, e) {
17
+ let r = e, n;
18
+ var t;
19
+ return void 0 === e ? r = l : null === e ? (r = void 0, null != l && (n = {
20
+ oldValue: l,
21
+ newValue: null
22
+ })) : f(e) ? f(l) && u(l, e) || (n = {
23
+ newValue: {
24
+ $u8: Array.from(e)
25
+ },
26
+ oldValue: l
27
+ }) : null == l ? n = {
28
+ newValue: e
29
+ } : m(e) || m(l) ? e !== l && (n = {
30
+ oldValue: l,
31
+ newValue: e
32
+ }) : e.$rpl ? n = {
33
+ oldValue: l,
34
+ newValue: e
35
+ } : (t = {}, n = {
50
36
  oldValue: {},
51
- newValue: {}
52
- };
53
- r = $(r, e, [], 0, n);
54
- return n.oldValue = A(n.oldValue, !0), n.newValue = A(n.newValue, !1), {
37
+ newValue: t
38
+ }, r = $(l, e, n), o(t) && (n = void 0)), {
55
39
  merged: r,
56
- delta: n = n.oldValue || n.newValue ? n : void 0
40
+ delta: n
57
41
  };
58
42
  }
59
43
 
60
- function y(r, e, n) {
61
- if (!e || 0 == e.length) return n;
62
- let l = r;
63
- for (let r = 0; r < e.length - 1; ++r) {
64
- var t = e[r];
65
- a(l[t]) || (l[t] = {}), l = l[t];
44
+ function t(l, e, r) {
45
+ if (!e || 0 == e.length) return r;
46
+ let n = l;
47
+ for (let l = 0; l < e.length - 1; ++l) {
48
+ var t = e[l];
49
+ i(n[t]) || (n[t] = {}), n = n[t];
66
50
  }
67
51
  var u = e.at(-1);
68
- return void 0 === n ? delete l[u] : l[u] = n, r;
52
+ return void 0 === r ? delete n[u] : n[u] = r, l;
69
53
  }
70
54
 
71
- function n(r, e) {
72
- if (null != e && null != (r = b(r))) {
73
- if (!d(e)) return "" == e ? r : b(r[e]);
74
- if (0 != e.length && (1 != e.length || "" != e[0])) for (var n of e) if (null == (r = b(r[n]))) return;
75
- return r;
55
+ function e(l, e) {
56
+ if (null != e && null != l) {
57
+ if (!V(e)) return "" == e ? l : l[e];
58
+ if (0 != e.length && (1 != e.length || "" != e[0])) for (var r of e) if (null == (l = l[r])) return;
59
+ return l;
76
60
  }
77
61
  }
78
62
 
79
- function w(r, e, n = !1, l = 0) {
80
- var t = e[l];
81
- if (l == e.length - 1) return delete r[t], !n && i(r) ? void 0 : r;
82
- var u = r[t];
83
- if (a(u)) {
84
- u = w(u, e, n, l + 1);
85
- if (null == u && !n) return delete r[t], i(r) ? void 0 : r;
86
- r[t] = u;
63
+ function v(l, e, r = !1, n = 0) {
64
+ var t = e[n];
65
+ if (n == e.length - 1) return delete l[t], !r && o(l) ? void 0 : l;
66
+ var u = l[t];
67
+ if (i(u)) {
68
+ u = v(u, e, r, n + 1);
69
+ if (null == u && !r) return delete l[t], o(l) ? void 0 : l;
70
+ l[t] = u;
87
71
  }
88
- return r;
72
+ return l;
89
73
  }
90
74
 
91
- function A(r, e = !0) {
92
- return function l(t, u) {
93
- if (f(t)) return t.toISOString();
94
- if (!a(t)) return u && t === g ? void 0 : t;
95
- if (u) {
96
- let r = t[p];
97
- if (null != r) return l(r, u);
98
- let e = t[V];
99
- if (null != e) return l(d(e) ? e : [ e ], u);
100
- let n = t[m];
101
- if (null != n) return;
75
+ function d(l) {
76
+ if (null != l) {
77
+ if (m(l)) return n(l) ? l.toISOString() : l;
78
+ for (var e in l) {
79
+ var r = d(l[e]);
80
+ null == r ? delete l[e] : l[e] = r;
102
81
  }
103
- let e = d(t);
104
- let n = !0;
105
- for (var i in t) {
106
- let r = l(t[i], u);
107
- void 0 === r ? (delete t[i], e && o(t)) : (t[i] = r, n = !1);
108
- }
109
- return n ? void 0 : t;
110
- }(r, e);
111
- }
112
-
113
- function l(r) {
114
- if (s(r)) return r ? g : void 0;
115
- for (var e in r) {
116
- var n = l(r[e]);
117
- n ? r[e] = n : delete r[e];
82
+ return V(l) ? a(l) : l.$rpl && delete l.$rpl, l;
118
83
  }
119
- return d(r) && o(r), r;
120
84
  }
121
85
 
122
- function S(r, e, n, l, t) {
123
- if (r != e) {
124
- var u, i = d(r);
125
- for (u in e) {
126
- n[l] = u, n.length = l + 1;
127
- var f = $(r[u], e[u], n, l + 1, t);
128
- null == f ? (delete r[u], i && o(r)) : r[u] = f;
86
+ function $(l, e, r, n = []) {
87
+ if (l !== e) {
88
+ var t, u = n.length;
89
+ for (t in e) {
90
+ n.length = u + 1;
91
+ var i = ((l, e, r, n) => {
92
+ if (void 0 === e) return l;
93
+ if (null !== e) {
94
+ if (null == l || m(l) || m(e)) return l !== e && w(r, n, l, e),
95
+ e;
96
+ if (e.$rpl) return w(r, n, l, e), e;
97
+ if (i = e.$extend, null != i) {
98
+ var t = l, u = i, i = r, a = n;
99
+ if (V(t)) {
100
+ V(u) || (u = [ u ]);
101
+ var o = t.length, f = {};
102
+ for (let l = 0; l < u.length; ++l) {
103
+ var v = u[l];
104
+ null != v && (f[l + o] = v);
105
+ }
106
+ w(i, a, {}, f), t.push(...u);
107
+ }
108
+ return t;
109
+ }
110
+ if (i = e.$pop, null == i) return (a = V(l)) == V(e) ? $(l, e, r, n) : (w(r, n, l, e),
111
+ a && (e.$rpl = 1), e);
112
+ var d = l, t = r, e = n;
113
+ if ((i = i) && V(d)) {
114
+ var s = d.length;
115
+ if (0 < s) {
116
+ var p = {}, g = {}, i = c(i) ? Math.min(i, s) : 1;
117
+ for (let l = s - i; l < s; ++l) {
118
+ var h = d[l];
119
+ null != h && (p[l] = h, g[l] = null);
120
+ }
121
+ w(t, e, p, g), d.length -= i;
122
+ }
123
+ }
124
+ return d;
125
+ }
126
+ void 0 !== l && w(r, n, l, null);
127
+ })(l[n[u] = t], e[t], r, n);
128
+ null == i ? delete l[t] : l[t] = i;
129
129
  }
130
+ V(l) && a(l);
130
131
  }
131
- return r;
132
+ return l;
132
133
  }
133
134
 
134
- function $(e, n, l, t, u) {
135
- if (void 0 === n) return e;
136
- if (n !== g && null !== n) {
137
- if (null == e || s(e) || s(n)) return O(e, n, l, u);
138
- var i = n[p];
139
- if (null != i) return O(e, i, l, u);
140
- let r = n[V];
141
- if (null != r) return d(r) || (r = [ r ]), (d(e) ? (e, n, r, l) => {
142
- n = A(n);
143
- var t = {};
144
- for (let r = 0; r < n.length; ++r) {
145
- var u = n[r];
146
- null != u && (t[r + e.length] = s(u) ? u : {
147
- [p]: u
148
- });
149
- }
150
- return U(l, r, e, t), e.concat(n);
151
- } : O)(e, r, l, u);
152
- i = n[m];
153
- if (null == i) return d(e) && !d(n) || !d(e) && d(n) ? O(e, n, l, u) : S(e, n, l, t, u);
154
- var n = e, f = l, a = u;
155
- if (!i || !d(n)) return n;
156
- var o = n.length, v = [];
157
- for (let r = c(i) ? i <= o ? i : o : 1; 0 < r; --r) v[o - r] = g;
158
- return S(n, v, f, t, a);
159
- }
160
- null != e && U(u, l, e, g);
161
- }
162
-
163
- function O(r, e, n, l) {
164
- e = A(e);
165
- return r === e || u(r) && u(e) && t(r, e) ? r : null != e ? (null == r ? U(l, n, 0 == n.length ? void 0 : null, u(e) ? {
166
- [v]: Array.from(e)
167
- } : s(e) ? e : {
168
- [p]: e
169
- }) : U(l, n, r, u(e) ? {
170
- [v]: Array.from(e)
171
- } : s(r) ? e : {
172
- [p]: e
173
- }), e) : void U(l, n, r, g);
174
- }
175
-
176
- function U(r, e, n, l) {
177
- r.oldValue = y(r.oldValue, e, n), r.newValue = y(r.newValue, e, l);
178
- }
179
-
180
- function b(r) {
181
- if (null != r && r != g) {
182
- for (;null != r[p]; ) if ((r = r[p]) == g) return;
183
- return r;
184
- }
135
+ function w(l, e, r, n) {
136
+ t(l.oldValue, e, r), t(l.newValue, e, n);
185
137
  }
186
138
 
187
139
  export {
188
- h as mergeContent,
189
- e as mergeContentAndGenDelta,
190
- y as setValByNamePath,
191
- n as getValByNamePath,
192
- w as delValByNamePath,
193
- A as cleanContent,
194
- l as objToDelMarks
140
+ l as mergeContentAndGenDelta,
141
+ t as setValByNamePath,
142
+ e as getValByNamePath,
143
+ v as delValByNamePath,
144
+ d as cleanContent
195
145
  };
@@ -36,7 +36,7 @@ import {
36
36
  import {
37
37
  bufferToNums as c,
38
38
  numsToBuffer as S,
39
- applyAclChange as C,
39
+ applyAclCmdObj as C,
40
40
  iterCmdKeys as P
41
41
  } from "./QyAcl.js";
42
42
 
package/src/QyUtils.js CHANGED
@@ -102,7 +102,7 @@ function W(r) {
102
102
 
103
103
  function E(r) {
104
104
  var t = typeof r;
105
- return "string" == t || "number" == t || "boolean" == t || m(r) || s(r);
105
+ return "string" == t || "number" == t || "boolean" == t || s(r);
106
106
  }
107
107
 
108
108
  function R(r) {