datafolder 1.0.17 → 1.0.18

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/QyUtils.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import util from "node:util";
2
+ export declare const isArray: (arg: any) => arg is any[];
3
+ export declare const isDate: typeof util.types.isDate, isFloat32Array: typeof util.types.isFloat32Array;
1
4
  export declare const __dirname: string;
2
5
  export declare const SpecialOperators: {
3
6
  [k: string]: string;
@@ -8,6 +11,8 @@ export declare const SpecialFilePaths: {
8
11
  RpcDirPath: string[];
9
12
  IndexDirPath: string[];
10
13
  ExpireDirPath: string[];
14
+ EmbeddingDirPath: string[];
15
+ H2FDirPath: string[];
11
16
  MetaFilePath: string[];
12
17
  IndexPropPathsFileName: string;
13
18
  };
package/src/QyUtils.js CHANGED
@@ -14,115 +14,122 @@ import {
14
14
  fileURLToPath as r
15
15
  } from "node:url";
16
16
 
17
+ import a from "node:util";
18
+
17
19
  import {
18
20
  logger as u
19
21
  } from "../src/QyLogger.js";
20
22
 
21
- let a = Array.isArray;
22
-
23
- var f = t.dirname(r(import.meta.url)), c = Object.fromEntries([ "$del", "$link", "$rpl", "$spec", "$raw", "$all", "$clone", "$ext", "$or", "$and", "$gt", "$lt", "$gte", "$lte" ].map(r => [ r, r ])), s = "%", s = {
24
- HiddenFolderName: s,
25
- TriggerDirPath: [ s, "trigger" ],
26
- RpcDirPath: [ s, "rpc" ],
27
- IndexDirPath: [ s, "index" ],
28
- ExpireDirPath: [ s, "expire" ],
29
- MetaFilePath: [ s, "meta" ],
23
+ let f = Array.isArray, {
24
+ isDate: s,
25
+ isFloat32Array: c
26
+ } = a.types;
27
+
28
+ var m = t.dirname(r(import.meta.url)), d = Object.fromEntries([ "$del", "$link", "$rpl", "$spec", "$raw", "$all", "$clone", "$ext", "$or", "$and", "$gt", "$lt", "$gte", "$lte", "$f32" ].map(r => [ r, r ])), p = "%", p = {
29
+ HiddenFolderName: p,
30
+ TriggerDirPath: [ p, "trigger" ],
31
+ RpcDirPath: [ p, "rpc" ],
32
+ IndexDirPath: [ p, "index" ],
33
+ ExpireDirPath: [ p, "expire" ],
34
+ EmbeddingDirPath: [ p, "embedding" ],
35
+ H2FDirPath: [ p, "h2F" ],
36
+ MetaFilePath: [ p, "meta" ],
30
37
  IndexPropPathsFileName: "propPaths"
31
38
  };
32
39
 
33
- function m(r) {
40
+ function h(r) {
34
41
  return r.startsWith("{") && r.endsWith("}");
35
42
  }
36
43
 
37
- function d(r) {
38
- return m(r) && r.substring(1, r.length - 1);
44
+ function g(r) {
45
+ return h(r) && r.substring(1, r.length - 1);
39
46
  }
40
47
 
41
- function p(r) {
48
+ function y(r) {
42
49
  return 1e12 < r ? Math.round(100 * r / 1e12) / 100 + "TB" : 1e9 < r ? Math.round(100 * r / 1e9) / 100 + "GB" : 1e6 < r ? Math.round(100 * r / 1e6) / 100 + "MB" : 1e3 < r ? Math.round(100 * r / 1e3) / 100 + "KB" : r.toString();
43
50
  }
44
51
 
45
- function h(r, t = 10) {
52
+ function b(r, t = 10) {
46
53
  return n.createHash("sha256").update(r, "utf8").digest("base64url").slice(0, t);
47
54
  }
48
55
 
49
- var g = 11;
56
+ var v = 11;
50
57
 
51
- function y(r) {
58
+ function $(r) {
52
59
  return "d" + r;
53
60
  }
54
61
 
55
- function v(r) {
62
+ function w(r) {
56
63
  return "f" + r;
57
64
  }
58
65
 
59
- function b(r) {
66
+ function P(r) {
60
67
  return "c" + r;
61
68
  }
62
69
 
63
- function w(r = 8) {
70
+ function x(r = 8) {
64
71
  return n.randomBytes(r).toString("hex");
65
72
  }
66
73
 
67
- function $(r) {
74
+ function S(r) {
68
75
  if (null != r) for (var t in r) if (null != r[t]) return !1;
69
76
  return !0;
70
77
  }
71
78
 
72
- function P(r) {
73
- return null != r && "object" == typeof r && !(r instanceof Date);
79
+ function j(r) {
80
+ return null != r && "object" == typeof r && !s(r);
74
81
  }
75
82
 
76
- function x(r) {
83
+ function D(r) {
77
84
  return "string" == typeof r;
78
85
  }
79
86
 
80
- function S(r) {
87
+ function F(r) {
81
88
  return "number" == typeof r;
82
89
  }
83
90
 
84
- function j(r) {
91
+ function M(r) {
85
92
  return "boolean" == typeof r;
86
93
  }
87
94
 
88
- function M(r) {
95
+ function B(r) {
89
96
  return "function" == typeof r;
90
97
  }
91
98
 
92
- function B(r) {
99
+ function N(r) {
93
100
  var t = typeof r;
94
- return "string" == t || "number" == t || "boolean" == t || r instanceof Date;
101
+ return "string" == t || "number" == t || "boolean" == t || c(r) || s(r);
95
102
  }
96
103
 
97
- function D(r) {
104
+ function U(r) {
98
105
  let t = r.length;
99
106
  for (;null == r[t - 1] && 0 < t; ) --t;
100
107
  return r.length = t, r;
101
108
  }
102
109
 
103
- function T(n) {
110
+ function W(n) {
104
111
  return n.promise || (n.promise = new Promise((r, t) => Object.assign(n, {
105
112
  resolve: r,
106
113
  reject: t
107
114
  }))), n;
108
115
  }
109
116
 
110
- function A(r) {
117
+ function H(r) {
111
118
  return Buffer.isBuffer(r) ? r : Buffer.from(r);
112
119
  }
113
120
 
114
- function E(r) {
121
+ function L(r) {
115
122
  return 1 < r ? "s" : "";
116
123
  }
117
124
 
118
- function F(r) {
125
+ function T(r) {
119
126
  return l.mkdir(r, {
120
127
  recursive: !0
121
128
  });
122
129
  }
123
130
 
124
131
  function O(r) {
125
- return F(t.dirname(r));
132
+ return T(t.dirname(r));
126
133
  }
127
134
 
128
135
  async function k(r) {
@@ -133,11 +140,11 @@ async function k(r) {
133
140
  }
134
141
  }
135
142
 
136
- async function W(r) {
143
+ async function R(r) {
137
144
  return !1 !== await k(r);
138
145
  }
139
146
 
140
- function L(r, t = void 0) {
147
+ function G(r, t = void 0) {
141
148
  r *= 1e3;
142
149
  return t ? o.setTimeout(r, !0, {
143
150
  signal: t
@@ -146,12 +153,12 @@ function L(r, t = void 0) {
146
153
 
147
154
  let I;
148
155
 
149
- async function R(t) {
156
+ async function J(t) {
150
157
  try {
151
158
  await O(t);
152
159
  var r = new Date().toISOString() + ": " + e.argv.join(" ");
153
160
  function n() {
154
- for (var r of Object.keys(I)) N(r);
161
+ for (var r of Object.keys(I)) A(r);
155
162
  }
156
163
  await l.writeFile(t, r, {
157
164
  flag: "wx",
@@ -165,48 +172,48 @@ async function R(t) {
165
172
  }
166
173
  }
167
174
 
168
- function N(r) {
175
+ function A(r) {
169
176
  try {
170
177
  i.unlinkSync(r), u.info("Unlocked " + r);
171
178
  } catch (r) {}
172
179
  }
173
180
 
174
- function G(r) {
181
+ function Q(r) {
175
182
  return r.startsWith("[") && r.endsWith("]") ? JSON.parse(r) : r;
176
183
  }
177
184
 
178
- function H(r) {
179
- return a(r) ? 1 == r.length ? r[0] : JSON.stringify(r) : r;
185
+ function z(r) {
186
+ return f(r) ? 1 == r.length ? r[0] : JSON.stringify(r) : r;
180
187
  }
181
188
 
182
- function J(r) {
189
+ function K(r) {
183
190
  r = r.split("/");
184
191
  return r[0] || (r[0] = "/"), r;
185
192
  }
186
193
 
187
- function U(r) {
194
+ function E(r) {
188
195
  return r.split(".");
189
196
  }
190
197
 
191
- function Q(r) {
192
- return x(r) ? [ U(r) ] : a(r) ? r.map(r => x(r) ? U(r) : r) : void 0;
198
+ function X(r) {
199
+ return D(r) ? [ E(r) ] : f(r) ? r.map(r => D(r) ? E(r) : r) : void 0;
193
200
  }
194
201
 
195
- function z(r) {
202
+ function q(r) {
196
203
  return r.join(".");
197
204
  }
198
205
 
199
- function K(r, t = 0) {
206
+ function C(r, t = 0) {
200
207
  return Math.floor(Math.random() * (r - t)) + t;
201
208
  }
202
209
 
203
- function X(r) {
210
+ function V(r) {
204
211
  var t, n = {};
205
212
  for (t of r) n[t] = 1;
206
213
  return n;
207
214
  }
208
215
 
209
- async function q(t, n, e, i) {
216
+ async function Y(t, n, e, i) {
210
217
  var o = Buffer.allocUnsafe(i);
211
218
  for (let r = 0; r < i; ) {
212
219
  var a = (await n.read(o, r, i - r, e + r)).bytesRead;
@@ -216,28 +223,28 @@ async function q(t, n, e, i) {
216
223
  return o;
217
224
  }
218
225
 
219
- function C() {
226
+ function Z() {
220
227
  var r = e.availableMemory();
221
228
  return Math.round(r / (e.memoryUsage.rss() + r) * 100);
222
229
  }
223
230
 
224
- async function* V(e, t = 3) {
231
+ async function* _(e, t = 3) {
225
232
  var n = e.length, i = (n < t && (t = n), new Array(n));
226
233
  for (let r = 0; r < t; ++r) {
227
234
  var o = i[r] = {};
228
- s(r, o);
235
+ c(r, o);
229
236
  }
230
237
  for (let r = 0; r < n; ++r) {
231
238
  var a = i[r % t], {
232
239
  filePath: u,
233
240
  bin: f
234
- } = (a.bin || await a.promise, a), c = r + t;
235
- c < n && s(c, a), yield {
241
+ } = (a.bin || await a.promise, a), s = r + t;
242
+ s < n && c(s, a), yield {
236
243
  filePath: u,
237
244
  bin: f
238
245
  };
239
246
  }
240
- async function s(r, t) {
247
+ async function c(r, t) {
241
248
  var r = e[r], n = l.readFile(r);
242
249
  Object.assign(t, {
243
250
  filePath: r,
@@ -247,11 +254,11 @@ async function* V(e, t = 3) {
247
254
  }
248
255
  }
249
256
 
250
- function Y(r = new Date()) {
257
+ function rr(r = new Date()) {
251
258
  return r.getTime();
252
259
  }
253
260
 
254
- function Z(r = new Date()) {
261
+ function tr(r = new Date()) {
255
262
  r = r.getTime();
256
263
  return r - r % 1e3;
257
264
  }
@@ -259,46 +266,49 @@ function Z(r = new Date()) {
259
266
  export * as default from "./QyUtils.js";
260
267
 
261
268
  export {
262
- f as __dirname,
263
- c as SpecialOperators,
264
- s as SpecialFilePaths,
265
- m as isMatchName,
266
- d as getMatchParam,
267
- p as getSizeStr,
268
- h as calHash,
269
- g as Hash_Key_Length,
270
- y as getSubdirMapKey,
271
- v as getFileMapKey,
272
- b as getContentKey,
273
- w as getRandomStr,
274
- $ as isEmptyObj,
275
- P as isNotNullObj,
276
- x as isString,
277
- S as isNumber,
278
- j as isBoolean,
279
- M as isFunction,
280
- B as isSimpleType,
281
- D as trimArrayTail,
282
- T as setPromise,
283
- A as toBuffer,
284
- E as getSuffix,
285
- F as ensureDir,
269
+ f as isArray,
270
+ s as isDate,
271
+ c as isFloat32Array,
272
+ m as __dirname,
273
+ d as SpecialOperators,
274
+ p as SpecialFilePaths,
275
+ h as isMatchName,
276
+ g as getMatchParam,
277
+ y as getSizeStr,
278
+ b as calHash,
279
+ v as Hash_Key_Length,
280
+ $ as getSubdirMapKey,
281
+ w as getFileMapKey,
282
+ P as getContentKey,
283
+ x as getRandomStr,
284
+ S as isEmptyObj,
285
+ j as isNotNullObj,
286
+ D as isString,
287
+ F as isNumber,
288
+ M as isBoolean,
289
+ B as isFunction,
290
+ N as isSimpleType,
291
+ U as trimArrayTail,
292
+ W as setPromise,
293
+ H as toBuffer,
294
+ L as getSuffix,
295
+ T as ensureDir,
286
296
  O as ensureParentDir,
287
297
  k as getSize,
288
- W as folderOrFileExists,
289
- L as sleep,
290
- R as lockExclusiveFilePath,
291
- N as unlockExclusiveFilePath,
292
- G as fromSingleName,
293
- H as toSingleName,
294
- J as pathSplit,
295
- Q as ensurePropNamePathList,
296
- z as propNameJoin,
297
- K as randomInt,
298
- X as listToMap,
299
- q as readBufferAsync,
300
- C as memoryPercent,
301
- V as loadFileList,
302
- Y as getNowTime,
303
- Z as getNowRounded
298
+ R as folderOrFileExists,
299
+ G as sleep,
300
+ J as lockExclusiveFilePath,
301
+ A as unlockExclusiveFilePath,
302
+ Q as fromSingleName,
303
+ z as toSingleName,
304
+ K as pathSplit,
305
+ X as ensurePropNamePathList,
306
+ q as propNameJoin,
307
+ C as randomInt,
308
+ V as listToMap,
309
+ Y as readBufferAsync,
310
+ Z as memoryPercent,
311
+ _ as loadFileList,
312
+ rr as getNowTime,
313
+ tr as getNowRounded
304
314
  };
@@ -4681,10 +4681,23 @@
4681
4681
  directly at `from` but not including `to`.
4682
4682
  */
4683
4683
  class BlockWrapper extends RangeValue {
4684
- constructor(tagName, attributes) {
4684
+ constructor(
4685
+ /**
4686
+ @internal
4687
+ */
4688
+ tagName,
4689
+ /**
4690
+ @internal
4691
+ */
4692
+ attributes,
4693
+ /**
4694
+ @internal
4695
+ */
4696
+ rank) {
4685
4697
  super();
4686
4698
  this.tagName = tagName;
4687
4699
  this.attributes = attributes;
4700
+ this.rank = rank;
4688
4701
  }
4689
4702
  eq(other) {
4690
4703
  return other == this ||
@@ -4695,7 +4708,7 @@
4695
4708
  attributes.
4696
4709
  */
4697
4710
  static create(spec) {
4698
- return new BlockWrapper(spec.tagName, spec.attributes || noAttrs$1);
4711
+ return new BlockWrapper(spec.tagName, spec.attributes || noAttrs$1, spec.rank == null ? 50 : Math.max(0, Math.min(spec.rank, 100)));
4699
4712
  }
4700
4713
  /**
4701
4714
  Create a range set from the given block wrapper ranges.
@@ -6695,7 +6708,8 @@
6695
6708
  this.wrappers.splice(i, 1);
6696
6709
  for (let cur = this.blockWrappers; cur.value && cur.from <= this.pos; cur.next())
6697
6710
  if (cur.to >= this.pos) {
6698
- let wrap = new OpenWrapper(cur.from, cur.to, cur.value, cur.rank), i = this.wrappers.length;
6711
+ let rank = (cur.rank * 102) + cur.value.rank;
6712
+ let wrap = new OpenWrapper(cur.from, cur.to, cur.value, rank), i = this.wrappers.length;
6699
6713
  while (i > 0 && (this.wrappers[i - 1].rank - wrap.rank || this.wrappers[i - 1].to - wrap.to) < 0)
6700
6714
  i--;
6701
6715
  this.wrappers.splice(i, 0, wrap);
@@ -0,0 +1,38 @@
1
+ import test from "node:test";
2
+ import { deepEqual } from "node:assert/strict";
3
+ import { QyDB } from "../src/QyDB.js";
4
+ import { logger } from "../src/QyLogger.js";
5
+ logger.level = "warn";
6
+ const documentDBData = {
7
+ _id: "ab6ad8f119b5bca3efa2c7ae",
8
+ restaurantId: "REST-CRT9BL",
9
+ name: "Thai Curry Palace",
10
+ description: "Amazing Restaurant, must visit",
11
+ cuisine: "Thai",
12
+ address: {
13
+ street: "914 Park Street",
14
+ city: "Bryan",
15
+ state: "AL",
16
+ zipCode: "96865",
17
+ location: { type: "Point", coordinates: [-25.4619, 8.389] },
18
+ },
19
+ contact: { phone: "(669) 915-9056 x6657" },
20
+ rating: { average: 3.4, totalReviews: 275 },
21
+ priceRange: "$",
22
+ menu: [{ category: "Appetizers", items: [{ name: "Buffalo Chicken Wings", price: 13.42 }] }],
23
+ features: ["Private Dining"],
24
+ isActive: false,
25
+ michelin: { star: 3, ranking_years: 4 },
26
+ };
27
+ test("test QyDocumentDB", { skip: false }, async (context) => {
28
+ context.after(async (t) => {
29
+ await qyDB.stop();
30
+ });
31
+ const dataFolder = "./tmp/QyDocumentDB/1";
32
+ const qyDB = new QyDB(dataFolder);
33
+ await qyDB.start();
34
+ qyDB.insert(`restaurants/${documentDBData.restaurantId}`, documentDBData);
35
+ await qyDB.stop();
36
+ await qyDB.start();
37
+ deepEqual(qyDB.queryFiles("restaurants", { priceRange: "$" })[0].view(), documentDBData);
38
+ });