datafolder 1.0.17 → 1.0.19

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/QyCache.js CHANGED
@@ -5,52 +5,50 @@ import {
5
5
  import r from "node:events";
6
6
 
7
7
  import {
8
- QyDir as p
8
+ QyDir as l
9
9
  } from "./QyDir.js";
10
10
 
11
11
  import {
12
- QyFileLogger as u
12
+ QyFileLogger as g
13
13
  } from "./QyFileLogger.js";
14
14
 
15
15
  import {
16
- QyKVData as d
16
+ QyKVData as h
17
17
  } from "./QyKVData.js";
18
18
 
19
19
  import {
20
- QyTriggerNode as f,
20
+ QyTriggerNode as R,
21
21
  updateTriggerNodes as s
22
22
  } from "./QyTrigger.js";
23
23
 
24
24
  import {
25
- isString as x,
26
- lockExclusiveFilePath as C,
27
- unlockExclusiveFilePath as i
25
+ isString as C,
26
+ lockExclusiveFilePath as x,
27
+ unlockExclusiveFilePath as o,
28
+ ensureDir as q,
29
+ SpecialFilePaths as e,
30
+ SpecialOperators as t
28
31
  } from "./QyUtils.js";
29
32
 
30
33
  import {
31
- dumpStructure as q
34
+ dumpStructure as O
32
35
  } from "./QyStructure.js";
33
36
 
34
37
  import {
35
38
  getIndexPropPaths as n,
36
- parseNamePathAndQuery as g
39
+ parseNamePathAndQuery as d
37
40
  } from "./QyIndex.js";
38
41
 
39
42
  import {
40
- getDefaultOptions as h
43
+ getDefaultOptions as u
41
44
  } from "./QyDefaultOptions.js";
42
45
 
43
46
  import {
44
- ensureDir as R,
45
- SpecialFilePaths as e
46
- } from "./QyUtils.js";
47
-
48
- import {
49
- QueryCounter as l
47
+ QueryCounter as p
50
48
  } from "./QyUnionNode.js";
51
49
 
52
50
  import {
53
- QyKVDataLoader as O
51
+ QyKVDataLoader as P
54
52
  } from "./QyKVDataLoader.js";
55
53
 
56
54
  import {
@@ -58,19 +56,28 @@ import {
58
56
  } from "./QyMod.js";
59
57
 
60
58
  import {
61
- logger as Q
59
+ logger as b
62
60
  } from "./QyLogger.js";
63
61
 
62
+ import {
63
+ QyEmbeddings as D
64
+ } from "./QyEmbeddings.js";
65
+
66
+ var {} = t;
67
+
64
68
  let {
65
- HiddenFolderName: D,
69
+ HiddenFolderName: y,
66
70
  IndexDirPath: F,
67
- TriggerDirPath: P,
68
- RpcDirPath: S,
71
+ TriggerDirPath: w,
72
+ RpcDirPath: E,
69
73
  ExpireDirPath: m,
70
- MetaFilePath: t
74
+ MetaFilePath: i,
75
+ HNSWDirPath: f,
76
+ InfoDirPath: Q,
77
+ RecycleDirPath: S
71
78
  } = e;
72
79
 
73
- class o extends r {
80
+ class a extends r {
74
81
  rootFolder;
75
82
  options;
76
83
  qyDB;
@@ -81,35 +88,35 @@ class o extends r {
81
88
  rpcRootDir;
82
89
  indexRootDir;
83
90
  expireRootDir;
91
+ hnswRootDir;
92
+ infoRootDir;
93
+ recycleRootDir;
84
94
  exclusiveFilePath;
85
95
  qyKVData;
86
96
  qyFileLogger;
97
+ qyEmbeddings;
87
98
  rpcFunMap = {};
88
99
  constructor(r, e, t) {
89
- super(), e = {
90
- ...h("QyCache"),
100
+ super(), this.rootFolder = r, e = this.options = {
101
+ ...u("QyCache"),
91
102
  ...e
92
- }, o = new p("", !0, void 0, i = this), a = m.at(-1), s = F.at(-1), l = new p(D, !0, o),
93
- n = new p(a, !0, l), g = new p(s, !0, l), o._subdirMap = {
94
- [D]: l
95
- }, l._subdirMap = {
96
- [a]: n,
97
- [s]: g
98
- }, Object.assign(i, {
99
- rootDir: o,
100
- expireRootDir: n,
101
- indexRootDir: g
102
- });
103
- var i, o, a, s, n, g, l = v(r, "qykv");
103
+ }, this.qyDB = t;
104
+ var i, o = this, t = o.rootDir = new l("", !0, void 0, o), a = new l(y, !0, t);
105
+ t._subdirMap = {
106
+ [y]: a
107
+ }, a._subdirMap = {};
108
+ for ([ s, i ] of [ [ F, "indexRootDir" ], [ m, "expireRootDir" ], [ f, "hnswRootDir" ], [ Q, "infoRootDir" ], [ S, "recycleRootDir" ] ]) {
109
+ var s = s.at(-1), n = new l(s, !0, a);
110
+ a._subdirMap[s] = n, o[i] = n;
111
+ }
112
+ t = v(r, "qykv");
104
113
  Object.assign(this, {
105
- rootFolder: r,
106
- options: e,
107
- qyDB: t,
108
- kvFolder: l,
114
+ kvFolder: t,
109
115
  rpcFolder: v(r, "rpc"),
110
116
  exclusiveFilePath: v(r, ".opened"),
111
- qyKVData: new d(l, e, this),
112
- qyFileLogger: new u(v(r, "qylog"), e)
117
+ qyKVData: new h(t, e, this),
118
+ qyFileLogger: new g(v(r, "qylog"), e),
119
+ qyEmbeddings: new D(this, e)
113
120
  });
114
121
  }
115
122
  async start() {
@@ -120,20 +127,21 @@ class o extends r {
120
127
  qyKVData: i,
121
128
  qyFileLogger: o,
122
129
  exclusiveFilePath: a,
123
- rootDir: s
130
+ rootDir: s,
131
+ qyEmbeddings: n
124
132
  } = this;
125
- Q.log(`Starting at ${r}...`);
133
+ b.log(`Starting at ${r}...`);
126
134
  try {
127
- await R(e), o.start();
135
+ await q(e), o.start();
128
136
  var [ {
129
- maxChangeId: n,
137
+ maxChangeId: l,
130
138
  loadedMaxAclNum: g,
131
- qySnapshots: l,
132
- aclKeyValueMap: p
133
- } ] = await Promise.all([ ((r, e) => (r = new O(r, e)).load())(e, t), C(a) ]);
134
- i.start(n, g, l, p);
139
+ qySnapshots: h,
140
+ aclKeyValueMap: d
141
+ } ] = await Promise.all([ ((r, e) => (r = new P(r, e)).load())(e, t), x(a) ]);
142
+ i.start(l, g, h, d), await n.start();
135
143
  } catch (r) {
136
- throw o.stop(), r;
144
+ throw o.stop(), n.stop(), r;
137
145
  }
138
146
  t.preloadFoldersAtStart && !function r(e) {
139
147
  let {
@@ -143,45 +151,49 @@ class o extends r {
143
151
  for (var o of t) r(o);
144
152
  }(s);
145
153
  var u = this, e = u.rootDir;
146
- e.triggerNodes = [ new f() ];
147
- for (d of (e = u.triggerRootDir = e.searchOrCreateSubdir(P)).fileList) {
154
+ e.triggerNodes = [ new R() ];
155
+ for (p of (e = u.triggerRootDir = e.searchOrCreateSubdir(w)).fileList) {
148
156
  var {
149
- name: d,
150
- fileContent: h
151
- } = d, [ h, c, D ] = h;
152
- u.insertTriggerToTree(d, h, c, D);
157
+ name: p,
158
+ fileContent: c
159
+ } = p, [ c, D, y ] = c;
160
+ u.insertTriggerToTree(p, c, D, y);
153
161
  }
154
162
  var F = this;
155
- F.rpcRootDir = F.rootDir.searchOrCreateSubdir(S);
163
+ F.rpcRootDir = F.rootDir.searchOrCreateSubdir(E);
156
164
  for (m of F.rpcRootDir.fileList) {
157
165
  var {
158
166
  name: m,
159
- fileContent: y
167
+ fileContent: f
160
168
  } = m;
161
- x(y) && F.insertRpc(m, y);
169
+ C(f) && F.insertRpc(m, f);
162
170
  }
163
- return t.dumpStructureAtStart && await q(v(r, "qystruct"), s), Q.log("Started."),
171
+ return t.dumpStructureAtStart && await O(v(r, "qystruct"), s), b.log("Started."),
164
172
  this;
165
173
  }
166
174
  async stop() {
167
- Q.log("Stopping...");
175
+ b.log("Stopping...");
168
176
  var {
169
177
  qyKVData: r,
170
- qyFileLogger: e,
171
- exclusiveFilePath: t
178
+ qyEmbeddings: e,
179
+ qyFileLogger: t,
180
+ exclusiveFilePath: i
172
181
  } = this;
173
- return await r.stop(), Q.log("QyFileLogger stopped."), await e.stop(), i(t),
174
- Object.assign(this, {
182
+ return await r.stop(), await e.stop(), b.log("QyFileLogger stopped."), await t.stop(),
183
+ o(i), Object.assign(this, {
175
184
  rootDir: void 0,
176
185
  indexRootDir: void 0,
177
186
  expireRootDir: void 0,
178
187
  triggerRootDir: void 0,
179
188
  rpcRootDir: void 0,
189
+ hnswRootDir: void 0,
190
+ infoRootDir: void 0,
191
+ recycleRootDir: void 0,
180
192
  qyKVData: void 0,
181
193
  rpcFunMap: void 0,
182
194
  qyDB: void 0,
183
195
  qyFileLogger: void 0
184
- }), Q.log("Stopped."), this;
196
+ }), b.log("Stopped."), this;
185
197
  }
186
198
  increaseChangeId() {
187
199
  return this.qyKVData.increaseChangeId();
@@ -197,22 +209,22 @@ class o extends r {
197
209
  return t && s.save(r, t), a.save(r, e, i, o);
198
210
  }
199
211
  getFile(r, e = this.rootDir) {
200
- return r.isFile ? r : x(r) ? e.getFile(r) : e.searchFile(r);
201
- }
202
- getDir(r, e = this.rootDir) {
203
- return r.isDir ? r : x(r) ? e.getSubdir(r) : e.searchSubdir(r);
212
+ return r.isFile ? r : C(r) ? e.getFile(r) : e.searchFile(r);
204
213
  }
205
214
  getOrCreateFile(r, e = this.rootDir) {
206
- return r.isFile ? r : x(r) ? e.getOrCreateFile(r) : e.searchOrCreateFile(r);
215
+ return r.isFile ? r : C(r) ? e.getOrCreateFile(r) : e.searchOrCreateFile(r);
216
+ }
217
+ getDir(r, e = this.rootDir) {
218
+ return r.isDir ? r : C(r) ? e.getSubdir(r) : e.searchSubdir(r);
207
219
  }
208
220
  getOrCreateDir(r, e = this.rootDir) {
209
- return r.isDir ? r : x(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
221
+ return r.isDir ? r : C(r) ? e.getOrCreateSubdir(r) : e.searchOrCreateSubdir(r);
210
222
  }
211
223
  getIndexDir(r) {
212
- return this.indexRootDir.searchSubdir(y(r.fullPathHash));
224
+ return this.indexRootDir.searchSubdir(K(r.fullPathHash));
213
225
  }
214
226
  getOrCreateIndexDir(r) {
215
- return this.indexRootDir.searchOrCreateSubdir(y(r.fullPathHash));
227
+ return this.indexRootDir.searchOrCreateSubdir(K(r.fullPathHash));
216
228
  }
217
229
  getTriggerFile(r) {
218
230
  return this.triggerRootDir.getFile(r);
@@ -221,10 +233,36 @@ class o extends r {
221
233
  return this.triggerRootDir.getOrCreateFile(r);
222
234
  }
223
235
  getExpireInfoFile(r, e = "c") {
224
- return this.expireRootDir.searchFile(a(r, e));
236
+ return this.expireRootDir.searchFile(L(r, e));
225
237
  }
226
238
  getOrCreateExpireInfoFile(r, e = "c") {
227
- return this.expireRootDir.searchOrCreateFile(a(r, e));
239
+ return this.expireRootDir.searchOrCreateFile(L(r, e));
240
+ }
241
+ getInfoFile(r) {
242
+ return this.infoRootDir.searchFile(I(r.fullPathHash));
243
+ }
244
+ getOrCreateInfoFile(r) {
245
+ return this.infoRootDir.searchOrCreateFile(I(r.fullPathHash));
246
+ }
247
+ hToSrcFile(r) {
248
+ r = this.infoRootDir.searchFile(I(r));
249
+ if (r && r.fileContent) {
250
+ r = r.fileContent.namePath;
251
+ if (r) return this.getOrCreateFile(r);
252
+ }
253
+ }
254
+ getEmbedding(r) {
255
+ var e, t = this.getInfoFile(r);
256
+ if (t && t.fileContent) return {
257
+ length: t,
258
+ idx: e
259
+ } = t.fileContent, this.qyEmbeddings.getEmbedding(r.fullPathHash, t, e);
260
+ }
261
+ getOrCreateRecycleFile(r) {
262
+ return this.recycleRootDir.getOrCreateFile(r);
263
+ }
264
+ getRecycleFile(r) {
265
+ return this.recycleRootDir.getFile(r);
228
266
  }
229
267
  get triggerFileList() {
230
268
  return this.triggerRootDir.fileList;
@@ -239,7 +277,7 @@ class o extends r {
239
277
  return this.rpcRootDir.fileList;
240
278
  }
241
279
  get metaFile() {
242
- return this.rootDir.searchOrCreateFile(t);
280
+ return this.rootDir.searchOrCreateFile(i);
243
281
  }
244
282
  insertTriggerToTree(r, e, t, i) {
245
283
  var {
@@ -263,21 +301,21 @@ class o extends r {
263
301
  delete this.rpcFunMap[r];
264
302
  }
265
303
  queryFiles(r, e, t, i, o = this.rootDir) {
266
- var a = [], t = (x(e) && !t && (t = 1), new l(t, i)), i = this.options.queryAutoCreateIndex;
267
- return w(r, e, a, t, o, i), a;
304
+ var a = [], t = (C(e) && !t && (t = 1), new p(t, i)), i = this.options.queryAutoCreateIndex;
305
+ return T(r, e, a, t, o, i), a;
268
306
  }
269
307
  queryFilesMulti(r, e, t, i = this.rootDir) {
270
- var o, a, s = [], n = new l(e, t), g = this.options.queryAutoCreateIndex;
271
- for ([ o, a ] of r) w(o, a, s, n, i, g);
308
+ var o, a, s = [], n = new p(e, t), l = this.options.queryAutoCreateIndex;
309
+ for ([ o, a ] of r) T(o, a, s, n, i, l);
272
310
  return s;
273
311
  }
274
312
  async callRpc(e, r, t) {
275
313
  var i, o = this.rpcFunMap[e];
276
- if (!o) return Q.warn(i = `RPC ${e} not implemented.`), new Error(i);
314
+ if (!o) return b.warn(i = `RPC ${e} not implemented.`), new Error(i);
277
315
  try {
278
316
  return await o(r, t);
279
317
  } catch (r) {
280
- return Q.error(`Calling RPC ${e} failed:`, r), r;
318
+ return b.error(`Calling RPC ${e} failed:`, r), r;
281
319
  }
282
320
  }
283
321
  monitorItemExpire(r, e) {
@@ -294,18 +332,22 @@ class o extends r {
294
332
  }
295
333
  }
296
334
 
297
- function a(r, e) {
335
+ function I(r) {
336
+ return [ r.substring(0, 2), r ];
337
+ }
338
+
339
+ function L(r, e) {
298
340
  return [ e, r.substring(0, 2), r ];
299
341
  }
300
342
 
301
- function y(r) {
343
+ function K(r) {
302
344
  return [ r[0], r ];
303
345
  }
304
346
 
305
- function w(r, e, t, i, o, a) {
306
- e && (a = a ? n(e) : void 0, g(r, o, a, e, t, i));
347
+ function T(r, e, t, i, o, a) {
348
+ e && (a = a ? n(e) : void 0, d(r, o, a, e, t, i));
307
349
  }
308
350
 
309
351
  export {
310
- o as QyCache
352
+ a as QyCache
311
353
  };
package/src/QyDB.js CHANGED
@@ -33,7 +33,7 @@ import {
33
33
  logger as m
34
34
  } from "./QyLogger.js";
35
35
 
36
- let p = e(n, "../data/sampleDataFolder");
36
+ let d = e(n, "../data/sampleDataFolder");
37
37
 
38
38
  class l extends t {
39
39
  rootFolder;
@@ -42,15 +42,12 @@ class l extends t {
42
42
  batch;
43
43
  _immediate;
44
44
  creationTime;
45
- constructor(e = p, t) {
46
- s(e) && (t = e, e = p), super(), this.options = {
45
+ constructor(e = d, t) {
46
+ s(e) && (t = e, e = d), super(), this.options = {
47
47
  ...o("QyDB"),
48
48
  ...t
49
49
  }, this.rootFolder = e;
50
- for (let i of [ "createIndex", "delIndex", "insert", "put", "remove", "delDir", "delFile", "delContent", "insertTrigger", "removeTrigger", "insertRpc", "removeRpc", "expireFile", "expireDir", "expireContent", "expireFileM", "expireDirM", "expireContentM", "removeFileExpire", "removeDirExpire", "removeContentExpire" ]) this[i] = (...e) => {
51
- var t = this.currentBatch;
52
- return t[i].apply(t, e).run();
53
- };
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();
54
51
  }
55
52
  async start(e) {
56
53
  var t;
@@ -1,5 +1,6 @@
1
1
  var e = {
2
2
  append: !1,
3
+ read: !1,
3
4
  retryIntervalFactor: 2,
4
5
  maxRetryInterval: 60,
5
6
  emitSaveEvent: !1,
@@ -57,6 +58,13 @@ let t = {
57
58
  },
58
59
  QyAclWriter: {
59
60
  minBatchSize: 2
61
+ },
62
+ QyEmbeddingWriter: {
63
+ append: !0,
64
+ read: !0
65
+ },
66
+ QyEmbeddings: {
67
+ appendOnly: !1
60
68
  }
61
69
  };
62
70
 
@@ -0,0 +1,12 @@
1
+ import { QyBinWriter } from "./QyBinWriter.ts";
2
+ export declare class QyEmbeddingWriter extends QyBinWriter {
3
+ length: any;
4
+ byteLength: any;
5
+ totalCount: number;
6
+ constructor(filePath: any | undefined, length: any);
7
+ start(): Promise<void>;
8
+ append(embedding: Float32Array, needPromise?: any): any;
9
+ pWrite(embedding: Float32Array, idx: any, needPromise?: any): any;
10
+ _op_pWrite(buffer: any, idx: any): any;
11
+ readSync(idx: any): Float32Array<ArrayBuffer> | undefined;
12
+ }
@@ -0,0 +1,55 @@
1
+ import {
2
+ readBufferFromFD as s
3
+ } from "./QyUtils.js";
4
+
5
+ import {
6
+ getDefaultOptions as r
7
+ } from "./QyDefaultOptions.js";
8
+
9
+ import {
10
+ QyBinWriter as t
11
+ } from "./QyBinWriter.js";
12
+
13
+ class e extends t {
14
+ length;
15
+ byteLength;
16
+ totalCount = 0;
17
+ constructor(t = void 0, e) {
18
+ super(r("QyEmbeddingWriter"), t), this.length = e, this.byteLength = e * Float32Array.BYTES_PER_ELEMENT;
19
+ }
20
+ async start() {
21
+ await this.pushAndRunWithPromise({
22
+ opFunName: "_op_start"
23
+ }), 0 == this.totalCount && (this.totalCount = this.totalSavedSize / this.byteLength);
24
+ }
25
+ append(t, e = !1) {
26
+ return ++this.totalCount, this.save(0, i(t), e);
27
+ }
28
+ pWrite(t, e, r = !1) {
29
+ t = {
30
+ opFunName: "_op_pWrite",
31
+ args: [ i(t), e ]
32
+ };
33
+ return r ? this.pushAndRunWithPromise(t) : this.pushAndRun(t);
34
+ }
35
+ _op_pWrite(t, e) {
36
+ return this.fileHandle.write(t, 0, t.byteLength, e * this.byteLength);
37
+ }
38
+ readSync(t) {
39
+ var {
40
+ filePath: e,
41
+ fileHandle: r,
42
+ length: i,
43
+ byteLength: n
44
+ } = this;
45
+ return (r = r && s(r.fd, e, t * n, n)) ? new Float32Array(r.buffer, r.byteOffset, i) : void 0;
46
+ }
47
+ }
48
+
49
+ function i(t) {
50
+ return Buffer.from(t.buffer, t.byteOffset, t.byteLength);
51
+ }
52
+
53
+ export {
54
+ e as QyEmbeddingWriter
55
+ };
@@ -0,0 +1,15 @@
1
+ export declare class QyEmbeddings {
2
+ qyCache: any;
3
+ embeddingFolder: any;
4
+ options: any;
5
+ qyDB: any;
6
+ qyEmbeddingWriters: any;
7
+ hashToEmbeddingMap: {};
8
+ constructor(qyCache: any, options?: any);
9
+ start(): Promise<void>;
10
+ stop(): Promise<void>;
11
+ addEmbedding(fullPathHash: any, embedding: any): any;
12
+ getEmbedding(fullPathHash: any, length: any, idx: any): any;
13
+ updateEmbedding(fullPathHash: any, embedding: any, idx: any): any;
14
+ delEmbedding(fullPathHash: any, length: any, idx: any): void;
15
+ }
@@ -0,0 +1,128 @@
1
+ import {
2
+ readdir as t
3
+ } from "node:fs/promises";
4
+
5
+ import {
6
+ folderOrFileExists as i,
7
+ SpecialOperators as e
8
+ } from "./QyUtils.js";
9
+
10
+ import {
11
+ getDefaultOptions as r
12
+ } from "./QyDefaultOptions.js";
13
+
14
+ import {
15
+ logger as a
16
+ } from "./QyLogger.js";
17
+
18
+ import {
19
+ basename as n,
20
+ join as s
21
+ } from "node:path";
22
+
23
+ import {
24
+ QyEmbeddingWriter as d
25
+ } from "./QyEmbeddingWriter.js";
26
+
27
+ let o = e.$del;
28
+
29
+ class l {
30
+ qyCache;
31
+ embeddingFolder;
32
+ options;
33
+ qyDB;
34
+ qyEmbeddingWriters = {};
35
+ hashToEmbeddingMap = {};
36
+ constructor(e, t = void 0) {
37
+ var i = s(e.rootFolder, "qyembedding");
38
+ t = {
39
+ ...r("QyEmbeddings"),
40
+ ...t
41
+ }, Object.assign(this, {
42
+ qyCache: e,
43
+ embeddingFolder: i,
44
+ options: t,
45
+ qyDB: e.qyDB
46
+ });
47
+ }
48
+ async start() {
49
+ var e = this.embeddingFolder;
50
+ await i(e) && await Promise.all((await t(e)).filter(e => /[0-9]+\.bin$/.test(e)).map(async e => {
51
+ await h(this, n(e, ".bin")).start();
52
+ }));
53
+ }
54
+ async stop() {
55
+ var e = this.qyEmbeddingWriters;
56
+ e && (await Promise.all(Object.values(e).map(e => e.stop())), this.qyEmbeddingWriters = void 0);
57
+ }
58
+ addEmbedding(e, t) {
59
+ var {
60
+ hashToEmbeddingMap: i,
61
+ options: r
62
+ } = this;
63
+ if (i[e] = t, !r.appendOnly) {
64
+ i = ((e, t) => {
65
+ var {
66
+ qyCache: e,
67
+ qyDB: i
68
+ } = e, r = e.getRecycleFile(t);
69
+ if (r) {
70
+ var n, e = r.fileContent;
71
+ for (n in e) return i.insert(r, {
72
+ [n]: o
73
+ }), n;
74
+ }
75
+ })(this, t.length);
76
+ if (null != i) return p(this, e, t, i);
77
+ }
78
+ return m(this, e, t);
79
+ }
80
+ getEmbedding(e, t, i) {
81
+ var r = this.hashToEmbeddingMap, r = r[e];
82
+ return r || (null != t && null != i ? this.hashToEmbeddingMap[e] = g(this, t).readSync(i) : void 0);
83
+ }
84
+ updateEmbedding(e, t, i) {
85
+ var {
86
+ options: r,
87
+ hashToEmbeddingMap: n
88
+ } = this;
89
+ return n[e] = t, r.appendOnly ? m(this, e, t) : p(this, e, t, i);
90
+ }
91
+ delEmbedding(e, t, i) {
92
+ var {
93
+ hashToEmbeddingMap: r,
94
+ qyCache: n,
95
+ qyDB: a
96
+ } = this;
97
+ delete r[t], null != t && null != i && a.insert(n.getOrCreateRecycleFile(t), {
98
+ [i]: 1
99
+ });
100
+ }
101
+ }
102
+
103
+ function m(e, t, i) {
104
+ var r = i.length, e = g(e, r), n = e.totalCount;
105
+ return e.append(i), a.info(`Append ${t} ${r} ` + n), n;
106
+ }
107
+
108
+ function p(e, t, i, r) {
109
+ var n = i.length;
110
+ return g(e, i.length).pWrite(i, r), a.info(`pWrite ${t} ${n} ` + r), r;
111
+ }
112
+
113
+ function h(e, t) {
114
+ var {
115
+ qyEmbeddingWriters: e,
116
+ embeddingFolder: i
117
+ } = e;
118
+ return e[t] = new d(s(i, t + ".bin"), t);
119
+ }
120
+
121
+ function g(e, t) {
122
+ let i = e.qyEmbeddingWriters[t];
123
+ return i || (i = h(e, t)).start(), i;
124
+ }
125
+
126
+ export {
127
+ l as QyEmbeddings
128
+ };