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/README.md +7 -0
- package/package.json +17 -17
- package/sample.js +3 -0
- package/src/QyAcl.js +109 -87
- package/src/QyBatch.d.ts +4 -0
- package/src/QyBatch.js +150 -107
- package/src/QyBinaryHeap.d.ts +10 -0
- package/src/QyBinaryHeap.js +55 -0
- package/src/QyCD.d.ts +3 -0
- package/src/QyCD.js +68 -57
- package/src/QyCache.d.ts +8 -0
- package/src/QyCache.js +108 -70
- package/src/QyDB.js +4 -4
- package/src/QyFile.js +8 -7
- package/src/QyFileContentUtils.d.ts +0 -1
- package/src/QyFileContentUtils.js +123 -124
- package/src/QyHNSW.d.ts +10 -0
- package/src/QyHNSW.js +57 -0
- package/src/QyIndex.js +28 -27
- package/src/QyIndexPropTree.js +3 -1
- package/src/QySnapshots.js +209 -206
- package/src/QyTrigger.js +5 -6
- package/src/QyUtils.d.ts +5 -0
- package/src/QyUtils.js +108 -98
- package/static/codemirror.bundle/editor.bundle.js +17 -3
- package/test/testQyDocumentDB.js +38 -0
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
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
40
|
+
function h(r) {
|
|
34
41
|
return r.startsWith("{") && r.endsWith("}");
|
|
35
42
|
}
|
|
36
43
|
|
|
37
|
-
function
|
|
38
|
-
return
|
|
44
|
+
function g(r) {
|
|
45
|
+
return h(r) && r.substring(1, r.length - 1);
|
|
39
46
|
}
|
|
40
47
|
|
|
41
|
-
function
|
|
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
|
|
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
|
|
56
|
+
var v = 11;
|
|
50
57
|
|
|
51
|
-
function
|
|
58
|
+
function $(r) {
|
|
52
59
|
return "d" + r;
|
|
53
60
|
}
|
|
54
61
|
|
|
55
|
-
function
|
|
62
|
+
function w(r) {
|
|
56
63
|
return "f" + r;
|
|
57
64
|
}
|
|
58
65
|
|
|
59
|
-
function
|
|
66
|
+
function P(r) {
|
|
60
67
|
return "c" + r;
|
|
61
68
|
}
|
|
62
69
|
|
|
63
|
-
function
|
|
70
|
+
function x(r = 8) {
|
|
64
71
|
return n.randomBytes(r).toString("hex");
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
function
|
|
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
|
|
73
|
-
return null != r && "object" == typeof r && !(r
|
|
79
|
+
function j(r) {
|
|
80
|
+
return null != r && "object" == typeof r && !s(r);
|
|
74
81
|
}
|
|
75
82
|
|
|
76
|
-
function
|
|
83
|
+
function D(r) {
|
|
77
84
|
return "string" == typeof r;
|
|
78
85
|
}
|
|
79
86
|
|
|
80
|
-
function
|
|
87
|
+
function F(r) {
|
|
81
88
|
return "number" == typeof r;
|
|
82
89
|
}
|
|
83
90
|
|
|
84
|
-
function
|
|
91
|
+
function M(r) {
|
|
85
92
|
return "boolean" == typeof r;
|
|
86
93
|
}
|
|
87
94
|
|
|
88
|
-
function
|
|
95
|
+
function B(r) {
|
|
89
96
|
return "function" == typeof r;
|
|
90
97
|
}
|
|
91
98
|
|
|
92
|
-
function
|
|
99
|
+
function N(r) {
|
|
93
100
|
var t = typeof r;
|
|
94
|
-
return "string" == t || "number" == t || "boolean" == t || r
|
|
101
|
+
return "string" == t || "number" == t || "boolean" == t || c(r) || s(r);
|
|
95
102
|
}
|
|
96
103
|
|
|
97
|
-
function
|
|
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
|
|
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
|
|
117
|
+
function H(r) {
|
|
111
118
|
return Buffer.isBuffer(r) ? r : Buffer.from(r);
|
|
112
119
|
}
|
|
113
120
|
|
|
114
|
-
function
|
|
121
|
+
function L(r) {
|
|
115
122
|
return 1 < r ? "s" : "";
|
|
116
123
|
}
|
|
117
124
|
|
|
118
|
-
function
|
|
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
|
|
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
|
|
143
|
+
async function R(r) {
|
|
137
144
|
return !1 !== await k(r);
|
|
138
145
|
}
|
|
139
146
|
|
|
140
|
-
function
|
|
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
|
|
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))
|
|
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
|
|
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
|
|
181
|
+
function Q(r) {
|
|
175
182
|
return r.startsWith("[") && r.endsWith("]") ? JSON.parse(r) : r;
|
|
176
183
|
}
|
|
177
184
|
|
|
178
|
-
function
|
|
179
|
-
return
|
|
185
|
+
function z(r) {
|
|
186
|
+
return f(r) ? 1 == r.length ? r[0] : JSON.stringify(r) : r;
|
|
180
187
|
}
|
|
181
188
|
|
|
182
|
-
function
|
|
189
|
+
function K(r) {
|
|
183
190
|
r = r.split("/");
|
|
184
191
|
return r[0] || (r[0] = "/"), r;
|
|
185
192
|
}
|
|
186
193
|
|
|
187
|
-
function
|
|
194
|
+
function E(r) {
|
|
188
195
|
return r.split(".");
|
|
189
196
|
}
|
|
190
197
|
|
|
191
|
-
function
|
|
192
|
-
return
|
|
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
|
|
202
|
+
function q(r) {
|
|
196
203
|
return r.join(".");
|
|
197
204
|
}
|
|
198
205
|
|
|
199
|
-
function
|
|
206
|
+
function C(r, t = 0) {
|
|
200
207
|
return Math.floor(Math.random() * (r - t)) + t;
|
|
201
208
|
}
|
|
202
209
|
|
|
203
|
-
function
|
|
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
|
|
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
|
|
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*
|
|
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
|
-
|
|
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),
|
|
235
|
-
|
|
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
|
|
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
|
|
257
|
+
function rr(r = new Date()) {
|
|
251
258
|
return r.getTime();
|
|
252
259
|
}
|
|
253
260
|
|
|
254
|
-
function
|
|
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
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
m as
|
|
266
|
-
d as
|
|
267
|
-
p as
|
|
268
|
-
h as
|
|
269
|
-
g as
|
|
270
|
-
y as
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
P as
|
|
276
|
-
x as
|
|
277
|
-
S as
|
|
278
|
-
j as
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
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
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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(
|
|
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
|
|
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
|
+
});
|