@dxos/echo-query 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33
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/neutral/index.mjs +917 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/query-lite/index.d.ts +9975 -0
- package/dist/query-lite/index.d.ts.map +1 -0
- package/dist/query-lite/index.js +548 -0
- package/dist/query-lite/index.js.map +1 -0
- package/dist/types/src/index.d.ts +2 -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 +89 -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/index.d.ts +2 -0
- package/dist/types/src/sandbox/index.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 +30 -13
- package/src/env.d.ts +8 -0
- package/src/index.ts +3 -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 +799 -0
- package/src/parser/query.grammar +130 -0
- package/src/parser/query.test.ts +529 -0
- package/src/query-lite/index.ts +5 -0
- package/src/query-lite/query-lite.ts +744 -0
- package/src/sandbox/index.ts +5 -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 +33 -0
- package/dist/lib/browser/index.mjs +0 -2
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/node-esm/index.mjs +0 -2
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- 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,89 @@
|
|
|
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
|
+
/**
|
|
83
|
+
* Normalize raw user input into a form the lezer grammar can parse.
|
|
84
|
+
* - Bare text fragments (e.g. `foo`) are wrapped in quotes so they parse as TextFilter.
|
|
85
|
+
* - Property values that aren't already quoted/numeric/boolean (e.g. `from:rich@dxos.org`) are quoted.
|
|
86
|
+
* - Tags, type filters, operators, parens, braces, quoted strings, and assignments pass through unchanged.
|
|
87
|
+
*/
|
|
88
|
+
export declare const normalizeInput: (input: string) => string;
|
|
89
|
+
//# 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;IAE/E,YAA6B,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,YAAA,EAAI;IAEhD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO/B;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAQhC;IAED;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAuCjD;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmExB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwF9B;;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;AA2BD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,UAAW,MAAM,KAAG,MA+M9C,CAAC"}
|
|
@@ -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 { Filter as Filter$, Order as Order$, Query as Query$ } from '@dxos/echo';
|
|
2
|
+
declare const Order2: typeof Order$;
|
|
3
|
+
export { Order2 as Order };
|
|
4
|
+
export declare const Filter1: typeof Filter$;
|
|
5
|
+
export { Filter1 as Filter };
|
|
6
|
+
export declare const Query1: typeof 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":"AAMA,OAAO,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAO,MAAM,YAAY,CAAC;AAsC3F,QAAA,MAAM,MAAM,EAAE,OAAO,MAAe,CAAC;AACrC,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC;AAoR3B,eAAO,MAAM,OAAO,EAAE,OAAO,OAAqB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC;AA8Q7B,eAAO,MAAM,MAAM,EAAE,OAAO,MAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/sandbox/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,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('org.dxos.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,+BAMhB;IAID,UAAyB,KAAK,kBAY7B;IAED,UAAyB,MAAM,kBAE9B;IAED;;;OAGG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,KAAK,CAiBtC;CACF"}
|
|
@@ -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,WAAW,cAAc,UAAU,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,KAAG,CAoBlG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickjs.test.d.ts","sourceRoot":"","sources":["../../../../src/sandbox/quickjs.test.ts"],"names":[],"mappings":""}
|