@dxos/echo-query 0.8.4-main.fd6878d → 0.8.4-main.fffef41
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 +1 -1
- package/dist/lib/browser/index.mjs +561 -0
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +561 -0
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/query-lite/index.js +387 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/parser/gen/index.d.ts +8 -0
- package/dist/types/src/parser/gen/index.d.ts.map +1 -0
- package/dist/types/src/parser/gen/query.d.ts +3 -0
- package/dist/types/src/parser/gen/query.d.ts.map +1 -0
- package/dist/types/src/parser/gen/query.terms.d.ts +2 -0
- package/dist/types/src/parser/gen/query.terms.d.ts.map +1 -0
- package/dist/types/src/parser/index.d.ts +3 -0
- package/dist/types/src/parser/index.d.ts.map +1 -0
- package/dist/types/src/parser/query-builder.d.ts +82 -0
- package/dist/types/src/parser/query-builder.d.ts.map +1 -0
- package/dist/types/src/parser/query.test.d.ts +2 -0
- package/dist/types/src/parser/query.test.d.ts.map +1 -0
- package/dist/types/src/query-lite/index.d.ts +2 -0
- package/dist/types/src/query-lite/index.d.ts.map +1 -0
- package/dist/types/src/query-lite/query-lite.d.ts +8 -0
- package/dist/types/src/query-lite/query-lite.d.ts.map +1 -0
- package/dist/types/src/sandbox/query-sandbox.d.ts +21 -0
- package/dist/types/src/sandbox/query-sandbox.d.ts.map +1 -0
- package/dist/types/src/sandbox/query-sandbox.test.d.ts +2 -0
- package/dist/types/src/sandbox/query-sandbox.test.d.ts.map +1 -0
- package/dist/types/src/sandbox/quickjs.d.ts +8 -0
- package/dist/types/src/sandbox/quickjs.d.ts.map +1 -0
- package/dist/types/src/sandbox/quickjs.test.d.ts +2 -0
- package/dist/types/src/sandbox/quickjs.test.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +20 -6
- package/src/env.d.ts +8 -0
- package/src/index.ts +2 -0
- package/src/parser/gen/index.ts +13 -0
- package/src/parser/gen/query.terms.ts +27 -0
- package/src/parser/gen/query.ts +18 -0
- package/src/parser/index.ts +6 -0
- package/src/parser/query-builder.ts +539 -0
- package/src/parser/query.grammar +130 -0
- package/src/parser/query.test.ts +416 -0
- package/src/query-lite/index.ts +5 -0
- package/src/query-lite/query-lite.ts +467 -0
- package/src/sandbox/query-sandbox.test.ts +53 -0
- package/src/sandbox/query-sandbox.ts +72 -0
- package/src/sandbox/quickjs.test.ts +67 -0
- package/src/sandbox/quickjs.ts +34 -0
- package/dist/types/src/search.test.d.ts +0 -2
- package/dist/types/src/search.test.d.ts.map +0 -1
- package/src/search.test.ts +0 -49
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
// ../../../common/invariant/dist/lib/browser/index.mjs
|
|
2
|
+
var assertArgument = (condition, argumentName, message) => {
|
|
3
|
+
if (!condition) {
|
|
4
|
+
const error = new TypeError(`Invalid argument \`${argumentName}\`` + (message ? `: ${message}` : ""));
|
|
5
|
+
Error.captureStackTrace(error, assertArgument);
|
|
6
|
+
throw error;
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// src/query-lite/query-lite.ts
|
|
11
|
+
var OrderClass = class _OrderClass {
|
|
12
|
+
constructor(ast) {
|
|
13
|
+
this.ast = ast;
|
|
14
|
+
}
|
|
15
|
+
static variance = {};
|
|
16
|
+
static is(value) {
|
|
17
|
+
return typeof value === "object" && value !== null && "~Order" in value;
|
|
18
|
+
}
|
|
19
|
+
"~Order" = _OrderClass.variance;
|
|
20
|
+
};
|
|
21
|
+
var Order1;
|
|
22
|
+
((Order12) => {
|
|
23
|
+
Order12.natural = new OrderClass({ kind: "natural" });
|
|
24
|
+
Order12.property = (property2, direction) => new OrderClass({
|
|
25
|
+
kind: "property",
|
|
26
|
+
property: property2,
|
|
27
|
+
direction
|
|
28
|
+
});
|
|
29
|
+
})(Order1 || (Order1 = {}));
|
|
30
|
+
var Order2 = Order1;
|
|
31
|
+
var FilterClass = class _FilterClass {
|
|
32
|
+
constructor(ast) {
|
|
33
|
+
this.ast = ast;
|
|
34
|
+
}
|
|
35
|
+
static variance = {};
|
|
36
|
+
static is(value) {
|
|
37
|
+
return typeof value === "object" && value !== null && "~Filter" in value;
|
|
38
|
+
}
|
|
39
|
+
static fromAst(ast) {
|
|
40
|
+
return new _FilterClass(ast);
|
|
41
|
+
}
|
|
42
|
+
static everything() {
|
|
43
|
+
return new _FilterClass({
|
|
44
|
+
type: "object",
|
|
45
|
+
typename: null,
|
|
46
|
+
props: {}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
static nothing() {
|
|
50
|
+
return new _FilterClass({
|
|
51
|
+
type: "not",
|
|
52
|
+
filter: {
|
|
53
|
+
type: "object",
|
|
54
|
+
typename: null,
|
|
55
|
+
props: {}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
static relation() {
|
|
60
|
+
return new _FilterClass({
|
|
61
|
+
type: "object",
|
|
62
|
+
typename: null,
|
|
63
|
+
props: {}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
static ids(...ids) {
|
|
67
|
+
if (ids.length === 0) {
|
|
68
|
+
return _FilterClass.nothing();
|
|
69
|
+
}
|
|
70
|
+
return new _FilterClass({
|
|
71
|
+
type: "object",
|
|
72
|
+
typename: null,
|
|
73
|
+
id: ids,
|
|
74
|
+
props: {}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
static type(schema, props) {
|
|
78
|
+
if (typeof schema !== "string") {
|
|
79
|
+
throw new TypeError("expected typename as the first paramter");
|
|
80
|
+
}
|
|
81
|
+
return new _FilterClass({
|
|
82
|
+
type: "object",
|
|
83
|
+
typename: makeTypeDxn(schema),
|
|
84
|
+
...propsFilterToAst(props ?? {})
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
static typename(typename) {
|
|
88
|
+
return new _FilterClass({
|
|
89
|
+
type: "object",
|
|
90
|
+
typename: makeTypeDxn(typename),
|
|
91
|
+
props: {}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
static typeDXN(dxn) {
|
|
95
|
+
return new _FilterClass({
|
|
96
|
+
type: "object",
|
|
97
|
+
typename: dxn.toString(),
|
|
98
|
+
props: {}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
static tag(tag) {
|
|
102
|
+
return new _FilterClass({
|
|
103
|
+
type: "tag",
|
|
104
|
+
tag
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
static props(props) {
|
|
108
|
+
return new _FilterClass({
|
|
109
|
+
type: "object",
|
|
110
|
+
typename: null,
|
|
111
|
+
...propsFilterToAst(props)
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
static text(text, options) {
|
|
115
|
+
return new _FilterClass({
|
|
116
|
+
type: "text-search",
|
|
117
|
+
text,
|
|
118
|
+
searchKind: options?.type
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
static foreignKeys(schema, keys) {
|
|
122
|
+
assertArgument(typeof schema === "string", "schema");
|
|
123
|
+
assertArgument(!schema.startsWith("dxn:"), "schema");
|
|
124
|
+
return new _FilterClass({
|
|
125
|
+
type: "object",
|
|
126
|
+
typename: `dxn:type:${schema}`,
|
|
127
|
+
props: {},
|
|
128
|
+
foreignKeys: keys
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
static eq(value) {
|
|
132
|
+
if (!isRef(value) && typeof value === "object" && value !== null) {
|
|
133
|
+
throw new TypeError("Cannot use object as a value for eq filter");
|
|
134
|
+
}
|
|
135
|
+
return new _FilterClass({
|
|
136
|
+
type: "compare",
|
|
137
|
+
operator: "eq",
|
|
138
|
+
value: isRef(value) ? value.noInline().encode() : value
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
static neq(value) {
|
|
142
|
+
return new _FilterClass({
|
|
143
|
+
type: "compare",
|
|
144
|
+
operator: "neq",
|
|
145
|
+
value
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
static gt(value) {
|
|
149
|
+
return new _FilterClass({
|
|
150
|
+
type: "compare",
|
|
151
|
+
operator: "gt",
|
|
152
|
+
value
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
static gte(value) {
|
|
156
|
+
return new _FilterClass({
|
|
157
|
+
type: "compare",
|
|
158
|
+
operator: "gte",
|
|
159
|
+
value
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
static lt(value) {
|
|
163
|
+
return new _FilterClass({
|
|
164
|
+
type: "compare",
|
|
165
|
+
operator: "lt",
|
|
166
|
+
value
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
static lte(value) {
|
|
170
|
+
return new _FilterClass({
|
|
171
|
+
type: "compare",
|
|
172
|
+
operator: "lte",
|
|
173
|
+
value
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
static in(...values) {
|
|
177
|
+
return new _FilterClass({
|
|
178
|
+
type: "in",
|
|
179
|
+
values
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
static contains(value) {
|
|
183
|
+
return new _FilterClass({
|
|
184
|
+
type: "contains",
|
|
185
|
+
value
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
static between(from, to) {
|
|
189
|
+
return new _FilterClass({
|
|
190
|
+
type: "range",
|
|
191
|
+
from,
|
|
192
|
+
to
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
static not(filter) {
|
|
196
|
+
return new _FilterClass({
|
|
197
|
+
type: "not",
|
|
198
|
+
filter: filter.ast
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
static and(...filters) {
|
|
202
|
+
return new _FilterClass({
|
|
203
|
+
type: "and",
|
|
204
|
+
filters: filters.map((f) => f.ast)
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
static or(...filters) {
|
|
208
|
+
return new _FilterClass({
|
|
209
|
+
type: "or",
|
|
210
|
+
filters: filters.map((f) => f.ast)
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
"~Filter" = _FilterClass.variance;
|
|
214
|
+
};
|
|
215
|
+
var Filter1 = FilterClass;
|
|
216
|
+
var propsFilterToAst = (predicates) => {
|
|
217
|
+
let idFilter;
|
|
218
|
+
if ("id" in predicates) {
|
|
219
|
+
assertArgument(
|
|
220
|
+
typeof predicates.id === "string" || Array.isArray(predicates.id),
|
|
221
|
+
"predicates.id",
|
|
222
|
+
"invalid id filter"
|
|
223
|
+
);
|
|
224
|
+
idFilter = typeof predicates.id === "string" ? [predicates.id] : predicates.id;
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
id: idFilter,
|
|
228
|
+
props: Object.fromEntries(
|
|
229
|
+
Object.entries(predicates).filter(([prop, _value]) => prop !== "id").map(([prop, predicate]) => [prop, processPredicate(predicate)])
|
|
230
|
+
)
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
var processPredicate = (predicate) => {
|
|
234
|
+
if (FilterClass.is(predicate)) {
|
|
235
|
+
return predicate.ast;
|
|
236
|
+
}
|
|
237
|
+
if (Array.isArray(predicate)) {
|
|
238
|
+
throw new Error("Array predicates are not yet supported.");
|
|
239
|
+
}
|
|
240
|
+
if (!isRef(predicate) && typeof predicate === "object" && predicate !== null) {
|
|
241
|
+
const nestedProps = Object.fromEntries(
|
|
242
|
+
Object.entries(predicate).map(([key, value]) => [key, processPredicate(value)])
|
|
243
|
+
);
|
|
244
|
+
return {
|
|
245
|
+
type: "object",
|
|
246
|
+
typename: null,
|
|
247
|
+
props: nestedProps
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
return FilterClass.eq(predicate).ast;
|
|
251
|
+
};
|
|
252
|
+
var QueryClass = class _QueryClass {
|
|
253
|
+
constructor(ast) {
|
|
254
|
+
this.ast = ast;
|
|
255
|
+
}
|
|
256
|
+
static variance = {};
|
|
257
|
+
static is(value) {
|
|
258
|
+
return typeof value === "object" && value !== null && "~Query" in value;
|
|
259
|
+
}
|
|
260
|
+
static fromAst(ast) {
|
|
261
|
+
return new _QueryClass(ast);
|
|
262
|
+
}
|
|
263
|
+
static select(filter) {
|
|
264
|
+
return new _QueryClass({
|
|
265
|
+
type: "select",
|
|
266
|
+
filter: filter.ast
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
static type(schema, predicates) {
|
|
270
|
+
return new _QueryClass({
|
|
271
|
+
type: "select",
|
|
272
|
+
filter: FilterClass.type(schema, predicates).ast
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
static all(...queries) {
|
|
276
|
+
if (queries.length === 0) {
|
|
277
|
+
throw new TypeError(
|
|
278
|
+
"Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())"
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
return new _QueryClass({
|
|
282
|
+
type: "union",
|
|
283
|
+
queries: queries.map((q) => q.ast)
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
static without(source, exclude) {
|
|
287
|
+
return new _QueryClass({
|
|
288
|
+
type: "set-difference",
|
|
289
|
+
source: source.ast,
|
|
290
|
+
exclude: exclude.ast
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
"~Query" = _QueryClass.variance;
|
|
294
|
+
select(filter) {
|
|
295
|
+
if (FilterClass.is(filter)) {
|
|
296
|
+
return new _QueryClass({
|
|
297
|
+
type: "filter",
|
|
298
|
+
selection: this.ast,
|
|
299
|
+
filter: filter.ast
|
|
300
|
+
});
|
|
301
|
+
} else {
|
|
302
|
+
return new _QueryClass({
|
|
303
|
+
type: "filter",
|
|
304
|
+
selection: this.ast,
|
|
305
|
+
filter: FilterClass.props(filter).ast
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
reference(key) {
|
|
310
|
+
return new _QueryClass({
|
|
311
|
+
type: "reference-traversal",
|
|
312
|
+
anchor: this.ast,
|
|
313
|
+
property: key
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
referencedBy(target, key) {
|
|
317
|
+
assertArgument(typeof target === "string", "target");
|
|
318
|
+
assertArgument(!target.startsWith("dxn:"), "target");
|
|
319
|
+
return new _QueryClass({
|
|
320
|
+
type: "incoming-references",
|
|
321
|
+
anchor: this.ast,
|
|
322
|
+
property: key,
|
|
323
|
+
typename: target
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
sourceOf(relation, predicates) {
|
|
327
|
+
return new _QueryClass({
|
|
328
|
+
type: "relation",
|
|
329
|
+
anchor: this.ast,
|
|
330
|
+
direction: "outgoing",
|
|
331
|
+
filter: FilterClass.type(relation, predicates).ast
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
targetOf(relation, predicates) {
|
|
335
|
+
return new _QueryClass({
|
|
336
|
+
type: "relation",
|
|
337
|
+
anchor: this.ast,
|
|
338
|
+
direction: "incoming",
|
|
339
|
+
filter: FilterClass.type(relation, predicates).ast
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
source() {
|
|
343
|
+
return new _QueryClass({
|
|
344
|
+
type: "relation-traversal",
|
|
345
|
+
anchor: this.ast,
|
|
346
|
+
direction: "source"
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
target() {
|
|
350
|
+
return new _QueryClass({
|
|
351
|
+
type: "relation-traversal",
|
|
352
|
+
anchor: this.ast,
|
|
353
|
+
direction: "target"
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
orderBy(...order) {
|
|
357
|
+
return new _QueryClass({
|
|
358
|
+
type: "order",
|
|
359
|
+
query: this.ast,
|
|
360
|
+
order: order.map((o) => o.ast)
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
options(options) {
|
|
364
|
+
return new _QueryClass({
|
|
365
|
+
type: "options",
|
|
366
|
+
query: this.ast,
|
|
367
|
+
options
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
var Query1 = QueryClass;
|
|
372
|
+
var RefTypeId = Symbol("@dxos/echo-query/Ref");
|
|
373
|
+
var isRef = (obj) => {
|
|
374
|
+
return obj && typeof obj === "object" && RefTypeId in obj;
|
|
375
|
+
};
|
|
376
|
+
var makeTypeDxn = (typename) => {
|
|
377
|
+
assertArgument(typeof typename === "string", "typename");
|
|
378
|
+
assertArgument(!typename.startsWith("dxn:"), "typename");
|
|
379
|
+
return `dxn:type:${typename}`;
|
|
380
|
+
};
|
|
381
|
+
export {
|
|
382
|
+
Filter1 as Filter,
|
|
383
|
+
Filter1,
|
|
384
|
+
Order2 as Order,
|
|
385
|
+
Query1 as Query,
|
|
386
|
+
Query1
|
|
387
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/parser/gen/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AAEvC,yBAAiB,QAAQ,CAAC;IACjB,MAAM,MAAM,EAAE,QAAiB,CAAC;IAChC,MAAM,IAAI,cAAQ,CAAC;IACnB,MAAM,MAAM,UAAgC,CAAC;CACrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../src/parser/gen/query.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAElC,eAAO,MAAM,MAAM,UAcjB,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const Query = 1, Assignment = 2, Identifier = 3, Filter = 7, TagFilter = 8, Tag = 9, TextFilter = 10, String = 11, TypeFilter = 12, TypeKeyword = 13, PropertyFilter = 15, PropertyPath = 16, Value = 18, Number = 19, Boolean = 20, Null = 21, ObjectLiteral = 22, ObjectProperty = 24, ArrayLiteral = 27, Not = 30, And = 31, Or = 32, Relation = 33, ArrowRight = 34, ArrowLeft = 35;
|
|
2
|
+
//# sourceMappingURL=query.terms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.terms.d.ts","sourceRoot":"","sources":["../../../../../src/parser/gen/query.terms.ts"],"names":[],"mappings":"AACA,eAAO,MACL,KAAK,IAAI,EACT,UAAU,IAAI,EACd,UAAU,IAAI,EACd,MAAM,IAAI,EACV,SAAS,IAAI,EACb,GAAG,IAAI,EACP,UAAU,KAAK,EACf,MAAM,KAAK,EACX,UAAU,KAAK,EACf,WAAW,KAAK,EAChB,cAAc,KAAK,EACnB,YAAY,KAAK,EACjB,KAAK,KAAK,EACV,MAAM,KAAK,EACX,OAAO,KAAK,EACZ,IAAI,KAAK,EACT,aAAa,KAAK,EAClB,cAAc,KAAK,EACnB,YAAY,KAAK,EACjB,GAAG,KAAK,EACR,GAAG,KAAK,EACR,EAAE,KAAK,EACP,QAAQ,KAAK,EACb,UAAU,KAAK,EACf,SAAS,KAAK,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/parser/index.ts"],"names":[],"mappings":"AAIA,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { type Tree } from '@lezer/common';
|
|
2
|
+
import { Filter, type Tag } from '@dxos/echo';
|
|
3
|
+
export type BuildResult = {
|
|
4
|
+
filter?: Filter.Any;
|
|
5
|
+
name?: string;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Stateless query builder that parses DSL trees into filters.
|
|
9
|
+
*
|
|
10
|
+
* NOTE: QueryBuilder was largely developed using Claude Sonnet 4.5 (in Windsurf)..
|
|
11
|
+
* To modify the functionality, create a minimal breaking test and direct the LLM to fix either the grammar or builder.
|
|
12
|
+
*/
|
|
13
|
+
export declare class QueryBuilder {
|
|
14
|
+
private readonly _tags?;
|
|
15
|
+
private readonly _parser;
|
|
16
|
+
constructor(_tags?: Tag.Map | undefined);
|
|
17
|
+
/**
|
|
18
|
+
* Check valid input.
|
|
19
|
+
*/
|
|
20
|
+
validate(input: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Build a query from the input string.
|
|
23
|
+
*/
|
|
24
|
+
build(input: string): BuildResult;
|
|
25
|
+
/**
|
|
26
|
+
* Build a query from a parsed DSL tree.
|
|
27
|
+
*/
|
|
28
|
+
buildQuery(tree: Tree, input: string): BuildResult;
|
|
29
|
+
/**
|
|
30
|
+
* Parse an assignment node.
|
|
31
|
+
*/
|
|
32
|
+
private _parseAssignment;
|
|
33
|
+
/**
|
|
34
|
+
* Parse an expression node.
|
|
35
|
+
*/
|
|
36
|
+
private _parseExpression;
|
|
37
|
+
/**
|
|
38
|
+
* Parse a binary expression (AND/OR).
|
|
39
|
+
*/
|
|
40
|
+
private _parseBinaryExpression;
|
|
41
|
+
/**
|
|
42
|
+
* Parse a Filter node.
|
|
43
|
+
*/
|
|
44
|
+
private _parseFilter;
|
|
45
|
+
/**
|
|
46
|
+
* Parse a TypeFilter node (type:typename).
|
|
47
|
+
*/
|
|
48
|
+
private _parseTypeFilter;
|
|
49
|
+
/**
|
|
50
|
+
* Parse a TextFilter node (quoted string).
|
|
51
|
+
*/
|
|
52
|
+
private _parseTextFilter;
|
|
53
|
+
/**
|
|
54
|
+
* Parse an ObjectLiteral node.
|
|
55
|
+
*/
|
|
56
|
+
private _parseObjectLiteral;
|
|
57
|
+
/**
|
|
58
|
+
* Parse an ObjectProperty node.
|
|
59
|
+
*/
|
|
60
|
+
private _parseObjectProperty;
|
|
61
|
+
/**
|
|
62
|
+
* Parse a PropertyFilter node (property:value).
|
|
63
|
+
*/
|
|
64
|
+
private _parsePropertyFilter;
|
|
65
|
+
/**
|
|
66
|
+
* Parse a PropertyPath node (supports dot notation).
|
|
67
|
+
*/
|
|
68
|
+
private _parsePropertyPath;
|
|
69
|
+
/**
|
|
70
|
+
* Parse a TagFilter node (#tag).
|
|
71
|
+
*/
|
|
72
|
+
private _parseTagFilter;
|
|
73
|
+
/**
|
|
74
|
+
* Parse a Value node.
|
|
75
|
+
*/
|
|
76
|
+
private _parseValue;
|
|
77
|
+
/**
|
|
78
|
+
* Get the text content of the current node.
|
|
79
|
+
*/
|
|
80
|
+
private _getNodeText;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=query-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../../../src/parser/query-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,IAAI,EAAmB,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,MAAM,YAAY,CAAC;AAM9C,MAAM,MAAM,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE;;;;;GAKG;AACH,qBAAa,YAAY;IAGX,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAFnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuD;gBAElD,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,YAAA;IAE5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAShC;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IASjC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW;IAyClD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmExB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuF9B;;OAEG;IACH,OAAO,CAAC,YAAY;IAsCpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAwDnB;;OAEG;IACH,OAAO,CAAC,YAAY;CAGrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../../../../src/parser/query.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/query-lite/index.ts"],"names":[],"mappings":"AAIA,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as Echo from '@dxos/echo';
|
|
2
|
+
declare const Order2: typeof Echo.Order;
|
|
3
|
+
export { Order2 as Order };
|
|
4
|
+
export declare const Filter1: typeof Echo.Filter;
|
|
5
|
+
export { Filter1 as Filter };
|
|
6
|
+
export declare const Query1: typeof Echo.Query;
|
|
7
|
+
export { Query1 as Query };
|
|
8
|
+
//# sourceMappingURL=query-lite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-lite.d.ts","sourceRoot":"","sources":["../../../../src/query-lite/query-lite.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AA+BxC,QAAA,MAAM,MAAM,EAAE,OAAO,IAAI,CAAC,KAAc,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC;AAkO3B,eAAO,MAAM,OAAO,EAAE,OAAO,IAAI,CAAC,MAAoB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;AA4L7B,eAAO,MAAM,MAAM,EAAE,OAAO,IAAI,CAAC,KAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Resource } from '@dxos/context';
|
|
2
|
+
import { type QueryAST } from '@dxos/echo';
|
|
3
|
+
import { type QuickJSWASMModule } from '@dxos/vendor-quickjs';
|
|
4
|
+
/**
|
|
5
|
+
* Evaluates queries written in JavaScript using QuickJS.
|
|
6
|
+
* Queries are expected to use the echo Query API.
|
|
7
|
+
* `Query`, `Filter` and `Order` are provided as globals.
|
|
8
|
+
*/
|
|
9
|
+
export declare class QuerySandbox extends Resource {
|
|
10
|
+
#private;
|
|
11
|
+
private static quickJS;
|
|
12
|
+
static getQuickJS(): Promise<QuickJSWASMModule>;
|
|
13
|
+
protected _open(): Promise<void>;
|
|
14
|
+
protected _close(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Evaluates the query code.
|
|
17
|
+
* @param queryCode Example: `Query.select(Filter.typename('dxos.org/type/Person'))`
|
|
18
|
+
*/
|
|
19
|
+
eval(queryCode: string): QueryAST.Query;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=query-sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-sandbox.d.ts","sourceRoot":"","sources":["../../../../src/sandbox/query-sandbox.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAS,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,EAAuB,KAAK,iBAAiB,EAAiB,MAAM,sBAAsB,CAAC;AAMlG;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,QAAQ;;IAExC,OAAO,CAAC,MAAM,CAAC,OAAO,CAA2C;IACjE,MAAM,CAAC,UAAU;cAUQ,KAAK;cAcL,MAAM;IAI/B;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK;CAkBxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-sandbox.test.d.ts","sourceRoot":"","sources":["../../../../src/sandbox/query-sandbox.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type QuickJSContext, type QuickJSHandle, type SuccessOrFail } from '@dxos/vendor-quickjs';
|
|
2
|
+
/**
|
|
3
|
+
* Unwraps a result and throws the underlying error.
|
|
4
|
+
*
|
|
5
|
+
* Replacement for `QuickJScontext.unwrapResult` because that seems to cause an OOM.
|
|
6
|
+
*/
|
|
7
|
+
export declare const unwrapResult: <T>(context: QuickJSContext, result: SuccessOrFail<T, QuickJSHandle>) => T;
|
|
8
|
+
//# sourceMappingURL=quickjs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickjs.d.ts","sourceRoot":"","sources":["../../../../src/sandbox/quickjs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEnG;;;;GAIG;AAEH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,SAAS,cAAc,EAAE,QAAQ,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,KAAG,CAqBlG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickjs.test.d.ts","sourceRoot":"","sources":["../../../../src/sandbox/quickjs.test.ts"],"names":[],"mappings":""}
|