@dxos/echo-query 0.8.4-main.406dc2a → 0.8.4-main.59c2e9b

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.
Files changed (33) hide show
  1. package/dist/lib/browser/index.mjs +257 -68
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +257 -68
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/query-lite/index.d.ts +8765 -0
  8. package/dist/query-lite/index.d.ts.map +1 -0
  9. package/dist/query-lite/index.js +356 -376
  10. package/dist/query-lite/index.js.map +1 -0
  11. package/dist/types/src/index.d.ts +1 -0
  12. package/dist/types/src/index.d.ts.map +1 -1
  13. package/dist/types/src/parser/gen/query.terms.d.ts +1 -1
  14. package/dist/types/src/parser/gen/query.terms.d.ts.map +1 -1
  15. package/dist/types/src/parser/query-builder.d.ts +11 -3
  16. package/dist/types/src/parser/query-builder.d.ts.map +1 -1
  17. package/dist/types/src/query-lite/query-lite.d.ts +4 -4
  18. package/dist/types/src/query-lite/query-lite.d.ts.map +1 -1
  19. package/dist/types/src/sandbox/index.d.ts +2 -0
  20. package/dist/types/src/sandbox/index.d.ts.map +1 -0
  21. package/dist/types/src/sandbox/quickjs.d.ts.map +1 -1
  22. package/dist/types/tsconfig.tsbuildinfo +1 -1
  23. package/package.json +20 -14
  24. package/src/index.ts +1 -0
  25. package/src/parser/gen/query.terms.ts +24 -23
  26. package/src/parser/gen/query.ts +8 -8
  27. package/src/parser/query-builder.ts +64 -11
  28. package/src/parser/query.grammar +8 -2
  29. package/src/parser/query.test.ts +72 -19
  30. package/src/query-lite/query-lite.ts +79 -57
  31. package/src/sandbox/index.ts +5 -0
  32. package/src/sandbox/query-sandbox.test.ts +9 -8
  33. package/src/sandbox/quickjs.ts +1 -2
@@ -1 +1 @@
1
- {"inputs":{"src/parser/gen/query.ts":{"bytes":9421,"imports":[{"path":"@lezer/lr","kind":"import-statement","external":true}],"format":"esm"},"src/parser/gen/query.terms.ts":{"bytes":2151,"imports":[],"format":"esm"},"src/parser/gen/index.ts":{"bytes":1305,"imports":[{"path":"src/parser/gen/query.ts","kind":"import-statement","original":"./query"},{"path":"src/parser/gen/query.terms.ts","kind":"import-statement","original":"./query.terms"}],"format":"esm"},"src/parser/query-builder.ts":{"bytes":49218,"imports":[{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/parser/gen/index.ts","kind":"import-statement","original":"./gen"}],"format":"esm"},"src/parser/index.ts":{"bytes":555,"imports":[{"path":"src/parser/gen/index.ts","kind":"import-statement","original":"./gen"},{"path":"src/parser/query-builder.ts","kind":"import-statement","original":"./query-builder"}],"format":"esm"},"src/index.ts":{"bytes":454,"imports":[{"path":"src/parser/index.ts","kind":"import-statement","original":"./parser"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29070},"dist/lib/browser/index.mjs":{"imports":[{"path":"@lezer/lr","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true}],"exports":["QueryBuilder","QueryDSL"],"entryPoint":"src/index.ts","inputs":{"src/parser/gen/query.ts":{"bytesInOutput":3382},"src/parser/gen/query.terms.ts":{"bytesInOutput":1186},"src/parser/gen/index.ts":{"bytesInOutput":211},"src/parser/query-builder.ts":{"bytesInOutput":11408},"src/index.ts":{"bytesInOutput":0}},"bytes":16583}}}
1
+ {"inputs":{"src/parser/gen/query.ts":{"bytes":9694,"imports":[{"path":"@lezer/lr","kind":"import-statement","external":true}],"format":"esm"},"src/parser/gen/query.terms.ts":{"bytes":2235,"imports":[],"format":"esm"},"src/parser/gen/index.ts":{"bytes":1305,"imports":[{"path":"src/parser/gen/query.ts","kind":"import-statement","original":"./query"},{"path":"src/parser/gen/query.terms.ts","kind":"import-statement","original":"./query.terms"}],"format":"esm"},"src/parser/query-builder.ts":{"bytes":54708,"imports":[{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"src/parser/gen/index.ts","kind":"import-statement","original":"./gen"}],"format":"esm"},"src/parser/index.ts":{"bytes":555,"imports":[{"path":"src/parser/gen/index.ts","kind":"import-statement","original":"./gen"},{"path":"src/parser/query-builder.ts","kind":"import-statement","original":"./query-builder"}],"format":"esm"},"src/sandbox/quickjs.ts":{"bytes":3907,"imports":[],"format":"esm"},"src/sandbox/query-sandbox.ts":{"bytes":9879,"imports":[{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/vendor-quickjs","kind":"import-statement","external":true},{"path":"#query-lite?raw","kind":"import-statement","external":true},{"path":"src/sandbox/quickjs.ts","kind":"import-statement","original":"./quickjs"}],"format":"esm"},"src/sandbox/index.ts":{"bytes":481,"imports":[{"path":"src/sandbox/query-sandbox.ts","kind":"import-statement","original":"./query-sandbox"}],"format":"esm"},"src/index.ts":{"bytes":537,"imports":[{"path":"src/parser/index.ts","kind":"import-statement","original":"./parser"},{"path":"src/sandbox/index.ts","kind":"import-statement","original":"./sandbox"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":37477},"dist/lib/browser/index.mjs":{"imports":[{"path":"@lezer/lr","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/echo","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/vendor-quickjs","kind":"import-statement","external":true},{"path":"#query-lite?raw","kind":"import-statement","external":true}],"exports":["QueryBuilder","QueryDSL","QuerySandbox"],"entryPoint":"src/index.ts","inputs":{"src/parser/gen/query.ts":{"bytesInOutput":3499},"src/parser/gen/query.terms.ts":{"bytesInOutput":1244},"src/parser/gen/index.ts":{"bytesInOutput":211},"src/parser/query-builder.ts":{"bytesInOutput":12394},"src/index.ts":{"bytesInOutput":0},"src/sandbox/query-sandbox.ts":{"bytesInOutput":4098},"src/sandbox/quickjs.ts":{"bytesInOutput":715}},"bytes":22666}}}
@@ -9,27 +9,27 @@ var __export = (target, all) => {
9
9
  import { LRParser } from "@lezer/lr";
10
10
  var spec_Identifier = {
11
11
  __proto__: null,
12
- type: 18,
13
- NOT: 82,
14
- not: 82,
15
- "!": 82,
16
- AND: 84,
17
- and: 84,
18
- OR: 86,
19
- or: 86
12
+ type: 26,
13
+ NOT: 86,
14
+ not: 86,
15
+ "!": 86,
16
+ AND: 88,
17
+ and: 88,
18
+ OR: 90,
19
+ or: 90
20
20
  };
21
21
  var parser = LRParser.deserialize({
22
22
  version: 14,
23
- states: "(QOVQPOOOOQO'#C_'#C_OOQO'#Ca'#CaOnQPO'#CcOsQPO'#ChO{QPO'#CnO!TQPO'#CgOOQO'#C^'#C^OOQO'#Cv'#CvOOQO'#DU'#DUOVQPO'#DUQ!YQPOOOVQPO'#DUO!jQPO,58}O!oQPO'#DOO!tQPO,59SO!|QPO'#CpOOQO,59Y,59YO#RQPO,59YO#ZQQO,59RO#oQPO,59pOOQO'#Cw'#CwOOQO'#Cx'#CxOOQO'#Cy'#CyOVQPO,59pOVQPO,59pOVQPO,59pO$jQPO,59pOOQO1G.i1G.iOOQO,59j,59jOOQO-E6|-E6|O#ZQQO,59[O$}QPO'#DPO%SQPO1G.tOOQO1G.t1G.tO%[QQO'#CsOOQO'#Cj'#CjOOQO1G.m1G.mO%cQPO1G/[O%yQPO1G/[O&aQPO1G/[OOQO1G/[1G/[OOQO1G.v1G.vOOQO,59k,59kOOQO-E6}-E6}OOQO7+$`7+$`OOQO,59_,59_O&wQPO,59_O#ZQQO'#DQO'PQPO1G.yOOQO1G.y1G.yOOQO,59l,59lOOQO-E7O-E7OOOQO7+$e7+$e",
24
- stateData: "'X~OwOS~OSPOUQOWSOXROcTOp[OyWO~OY]O~O]^OY[X~OW`OfaO~OYcO~OngOogOzeO{fO~PVOWlO~OWmO~O]^OY[a~OYoO~OepOfrO~OUtO_tO`tOatOcTOhsO~OyWOSxaUxaWxaXxacxanxaoxapxauxazxa{xaqxa~OngOogOqyOzeO{fO~PVOW`O~OepOf}O~Oi!OO~P#ZOnxioxiuxizxi{xiqxi~PVOzeOnxioxiuxi{xiqxi~PVOzeO{fOnxioxiuxiqxi~PVOe!QOi!SO~Oe!QOi!VO~O",
25
- goto: "%TyPPz!XP!XP!XPPP!X!fP!sPPP#PP#dPP#^PP#j#x$O$TPPPP$X$_$ePPP$kgXOYZ[hijkvwxgVOYZ[hijkvwxgUOYZ[hijkvwxQucQzoQ!PsR!T!QfVOYZ[hijkvwxXtcos!QQbTR{piYOYZ[dhijkvwxXhZkwxViZkxTjZkQ_SRn_QqbR|qQ!R!PR!U!RQZO^dYZdkvwxQk[QvhQwiRxj",
26
- nodeNames: "\u26A0 Query Filter TagFilter Tag TextFilter String TypeFilter Identifier TypeKeyword : PropertyFilter PropertyPath . Value Number Boolean Null ObjectLiteral { ObjectProperty , } ArrayLiteral [ ] Not And Or Relation ArrowRight ArrowLeft ( )",
27
- maxTerm: 43,
23
+ states: "(jOVQPOOOnQPO'#ClOOQO'#Cd'#CdOOQO'#Cf'#CfOyQPO'#ChO!OQPO'#CrO!WQPO'#CkOOQO'#Cc'#CcOOQO'#Cz'#CzOOQO'#DW'#DWOVQPO'#DWQ!]QPOOOVQPO'#DWO!mQPO,58xO!rQPO'#DQO!wQPO,59WO#PQPO,59SO#UQPO'#CtOOQO,59^,59^O#ZQPO,59^O#cQQO,59VO#wQPO,59rOOQO'#C{'#C{OOQO'#C|'#C|OOQO'#C}'#C}OVQPO,59rOVQPO,59rOVQPO,59rO$rQPO,59rOVQPO1G.dOOQO,59l,59lOOQO-E7O-E7OOOQO1G.n1G.nO#cQQO,59`O%VQPO'#DRO%[QPO1G.xOOQO1G.x1G.xO%dQQO'#CwOOQO'#Cn'#CnOOQO1G.q1G.qO%kQPO1G/^O&RQPO1G/^O&iQPO1G/^OOQO1G/^1G/^O'PQPO7+$OOOQO1G.z1G.zOOQO,59m,59mOOQO-E7P-E7POOQO7+$d7+$dOOQO,59c,59cO'dQPO,59cOOQO<<Gj<<GjO#cQQO'#DSO'lQPO1G.}OOQO1G.}1G.}OOQO,59n,59nOOQO-E7Q-E7QOOQO7+$i7+$i",
24
+ stateData: "'t~OyOS~ORPOT[OXQOZRO]SOgTO{WO~OS]Oa^O^`X~O^`O~ORaOjbO~O^dO~OrhOshO|fO}gO~PVOTmO~ORnO~Oa^O^`a~ORpO~O^qO~OirOjtO~OZvOcvOdvOevOgTOluO~O{WORzaTzaXzaZza]zagzarzaszawza|za}zaUza~OU{OrhOshO|fO}gO~PVORaO~OirOj!QO~Om!RO~P#cOrzisziwzi|zi}ziUzi~PVO|fOrzisziwzi}ziUzi~PVO|fO}gOrzisziwziUzi~PVOU!TOrhOshO|fO}gO~PVOi!UOm!WO~Oi!UOm!ZO~O",
25
+ goto: "%h{PP|PPPP|!]P!]P!]PP!]!lP!{PPP#XP#nPP#hPP#t$U$]$cPP$h$n$tPPP$zkXOYZ[ijklmxyz|kVOYZ[ijklmxyz|kUOYZ[ijklmxyz|QwdQ}qQ!SuR!X!UjVOYZ[ijklmxyz|Xvdqu!UQcTR!OrmYOYZ[eijklmxyz|ZiZlyz|XjZlz|VkZl|Q_PRo_QscR!PsQ!V!SR!Y!VQZO`eYZelxyz|Ql[QxiQyjQzkR|m",
26
+ nodeNames: "\u26A0 Query Assignment Identifier = ( ) Filter TagFilter Tag TextFilter String TypeFilter TypeKeyword : PropertyFilter PropertyPath . Value Number Boolean Null ObjectLiteral { ObjectProperty , } ArrayLiteral [ ] Not And Or Relation ArrowRight ArrowLeft",
27
+ maxTerm: 45,
28
28
  skippedNodes: [
29
29
  0
30
30
  ],
31
31
  repeatNodeCount: 3,
32
- tokenData: "2w~RrX^#]pq#]rs$Qst%nwx&fxy'}yz(S|}(X}!O(^!O!P)}!Q![(g![!]*S!^!_*X!c!}*d!}#O+O#P#Q+T#R#S*d#T#Y*d#Y#Z+Y#Z#b*d#b#c.i#c#h*d#h#i1Z#i#o*d#o#p2m#q#r2r#y#z#]$f$g#]#BY#BZ#]$IS$I_#]$I|$JO#]$JT$JU#]$KV$KW#]&FU&FV#]~#bYw~X^#]pq#]#y#z#]$f$g#]#BY#BZ#]$IS$I_#]$I|$JO#]$JT$JU#]$KV$KW#]&FU&FV#]~$TVOr$Qrs$js#O$Q#O#P$o#P;'S$Q;'S;=`%h<%lO$Q~$oOU~~$rRO;'S$Q;'S;=`${;=`O$Q~%OWOr$Qrs$js#O$Q#O#P$o#P;'S$Q;'S;=`%h;=`<%l$Q<%lO$Q~%kP;=`<%l$Q~%qT}!O&Q!Q![&Q!c!}&Q#R#S&Q#T#o&Q~&VTS~}!O&Q!Q![&Q!c!}&Q#R#S&Q#T#o&Q~&iVOw&fwx$jx#O&f#O#P'O#P;'S&f;'S;=`'w<%lO&f~'RRO;'S&f;'S;=`'[;=`O&f~'_WOw&fwx$jx#O&f#O#P'O#P;'S&f;'S;=`'w;=`<%l&f<%lO&f~'zP;=`<%l&f~(SOp~~(XOq~~(^Oe~~(aQ!Q![(g!`!a)x~(lS_~!O!P(x!Q![(g!g!h)^#X#Y)^~({P!Q![)O~)TR_~!Q![)O!g!h)^#X#Y)^~)aR{|)j}!O)j!Q![)p~)mP!Q![)p~)uP_~!Q![)p~)}On~~*SO]~~*XOY~~*[P}!O*_~*dOo~P*iVWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#o*d~+TOh~~+YOi~R+_WWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#U+w#U#o*dR+|XWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#`*d#`#a,i#a#o*dR,nXWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#g*d#g#h-Z#h#o*dR-`XWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#X*d#X#Y-{#Y#o*dR.SV`QWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#o*dR.nXWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#i*d#i#j/Z#j#o*dR/`XWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#`*d#`#a/{#a#o*dR0QXWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#`*d#`#a0m#a#o*dR0tVWPaQ}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#o*dR1`XWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#f*d#f#g1{#g#o*dR2QXWP}!O*d!O!P*d!P!Q*d!Q![*d!c!}*d#R#S*d#T#i*d#i#j-Z#j#o*d~2rOc~~2wOf~",
32
+ tokenData: "3P~RsX^#`pq#`rs$Tst%qwx&ixy(Qyz(V|}([}!O(a!O!P*Q!Q![(j![!]*V!^!_*[!_!`*g!c!}*l!}#O+W#P#Q+]#R#S*l#T#Y*l#Y#Z+b#Z#b*l#b#c.q#c#h*l#h#i1c#i#o*l#o#p2u#q#r2z#y#z#`$f$g#`#BY#BZ#`$IS$I_#`$I|$JO#`$JT$JU#`$KV$KW#`&FU&FV#`~#eYy~X^#`pq#`#y#z#`$f$g#`#BY#BZ#`$IS$I_#`$I|$JO#`$JT$JU#`$KV$KW#`&FU&FV#`~$WVOr$Trs$ms#O$T#O#P$r#P;'S$T;'S;=`%k<%lO$T~$rOZ~~$uRO;'S$T;'S;=`%O;=`O$T~%RWOr$Trs$ms#O$T#O#P$r#P;'S$T;'S;=`%k;=`<%l$T<%lO$T~%nP;=`<%l$T~%tT}!O&T!Q![&T!c!}&T#R#S&T#T#o&T~&YTX~}!O&T!Q![&T!c!}&T#R#S&T#T#o&T~&lVOw&iwx$mx#O&i#O#P'R#P;'S&i;'S;=`'z<%lO&i~'URO;'S&i;'S;=`'_;=`O&i~'bWOw&iwx$mx#O&i#O#P'R#P;'S&i;'S;=`'z;=`<%l&i<%lO&i~'}P;=`<%l&i~(VOT~~([OU~~(aOi~~(dQ!Q![(j!`!a){~(oSc~!O!P({!Q![(j!g!h)a#X#Y)a~)OP!Q![)R~)WRc~!Q![)R!g!h)a#X#Y)a~)dR{|)m}!O)m!Q![)s~)pP!Q![)s~)xPc~!Q![)s~*QOr~~*VOa~~*[O^~~*_P}!O*b~*gOs~~*lOS~P*qVRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#o*l~+]Ol~~+bOm~R+gWRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#U,P#U#o*lR,UXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#`*l#`#a,q#a#o*lR,vXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#g*l#g#h-c#h#o*lR-hXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#X*l#X#Y.T#Y#o*lR.[VdQRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#o*lR.vXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#i*l#i#j/c#j#o*lR/hXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#`*l#`#a0T#a#o*lR0YXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#`*l#`#a0u#a#o*lR0|VRPeQ}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#o*lR1hXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#f*l#f#g2T#g#o*lR2YXRP}!O*l!O!P*l!P!Q*l!Q![*l!c!}*l#R#S*l#T#i*l#i#j-c#j#o*l~2zOg~~3POj~",
33
33
  tokenizers: [
34
34
  0,
35
35
  1
@@ -42,7 +42,7 @@ var parser = LRParser.deserialize({
42
42
  },
43
43
  specialized: [
44
44
  {
45
- term: 8,
45
+ term: 3,
46
46
  get: (value) => spec_Identifier[value] || -1
47
47
  }
48
48
  ],
@@ -56,6 +56,7 @@ __export(query_terms_exports, {
56
56
  ArrayLiteral: () => ArrayLiteral,
57
57
  ArrowLeft: () => ArrowLeft,
58
58
  ArrowRight: () => ArrowRight,
59
+ Assignment: () => Assignment,
59
60
  Boolean: () => Boolean,
60
61
  Filter: () => Filter,
61
62
  Identifier: () => Identifier,
@@ -69,7 +70,7 @@ __export(query_terms_exports, {
69
70
  PropertyPath: () => PropertyPath,
70
71
  Query: () => Query,
71
72
  Relation: () => Relation,
72
- String: () => String,
73
+ String: () => String2,
73
74
  Tag: () => Tag,
74
75
  TagFilter: () => TagFilter,
75
76
  TextFilter: () => TextFilter,
@@ -78,29 +79,30 @@ __export(query_terms_exports, {
78
79
  Value: () => Value
79
80
  });
80
81
  var Query = 1;
81
- var Filter = 2;
82
- var TagFilter = 3;
83
- var Tag = 4;
84
- var TextFilter = 5;
85
- var String = 6;
86
- var TypeFilter = 7;
87
- var Identifier = 8;
88
- var TypeKeyword = 9;
89
- var PropertyFilter = 11;
90
- var PropertyPath = 12;
91
- var Value = 14;
92
- var Number2 = 15;
93
- var Boolean = 16;
94
- var Null = 17;
95
- var ObjectLiteral = 18;
96
- var ObjectProperty = 20;
97
- var ArrayLiteral = 23;
98
- var Not = 26;
99
- var And = 27;
100
- var Or = 28;
101
- var Relation = 29;
102
- var ArrowRight = 30;
103
- var ArrowLeft = 31;
82
+ var Assignment = 2;
83
+ var Identifier = 3;
84
+ var Filter = 7;
85
+ var TagFilter = 8;
86
+ var Tag = 9;
87
+ var TextFilter = 10;
88
+ var String2 = 11;
89
+ var TypeFilter = 12;
90
+ var TypeKeyword = 13;
91
+ var PropertyFilter = 15;
92
+ var PropertyPath = 16;
93
+ var Value = 18;
94
+ var Number2 = 19;
95
+ var Boolean = 20;
96
+ var Null = 21;
97
+ var ObjectLiteral = 22;
98
+ var ObjectProperty = 24;
99
+ var ArrayLiteral = 27;
100
+ var Not = 30;
101
+ var And = 31;
102
+ var Or = 32;
103
+ var Relation = 33;
104
+ var ArrowRight = 34;
105
+ var ArrowLeft = 35;
104
106
 
105
107
  // src/parser/gen/index.ts
106
108
  (function(QueryDSL2) {
@@ -118,21 +120,15 @@ var QueryDSL;
118
120
  // src/parser/query-builder.ts
119
121
  import { Filter as Filter2 } from "@dxos/echo";
120
122
  import { invariant } from "@dxos/invariant";
121
- function _define_property(obj, key, value) {
122
- if (key in obj) {
123
- Object.defineProperty(obj, key, {
124
- value,
125
- enumerable: true,
126
- configurable: true,
127
- writable: true
128
- });
129
- } else {
130
- obj[key] = value;
131
- }
132
- return obj;
133
- }
134
123
  var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo-query/src/parser/query-builder.ts";
135
124
  var QueryBuilder = class {
125
+ _tags;
126
+ _parser = QueryDSL.Parser.configure({
127
+ strict: true
128
+ });
129
+ constructor(_tags) {
130
+ this._tags = _tags;
131
+ }
136
132
  /**
137
133
  * Check valid input.
138
134
  */
@@ -152,7 +148,7 @@ var QueryBuilder = class {
152
148
  const tree = this._parser.parse(input);
153
149
  return this.buildQuery(tree, input);
154
150
  } catch {
155
- return void 0;
151
+ return {};
156
152
  }
157
153
  }
158
154
  /**
@@ -161,7 +157,7 @@ var QueryBuilder = class {
161
157
  buildQuery(tree, input) {
162
158
  const cursor = tree.cursor();
163
159
  if (cursor.node.name !== "Query") {
164
- return void 0;
160
+ return {};
165
161
  }
166
162
  const children = [];
167
163
  if (cursor.firstChild()) {
@@ -174,15 +170,60 @@ var QueryBuilder = class {
174
170
  } while (cursor.nextSibling());
175
171
  cursor.parent();
176
172
  }
173
+ const hasAssignment = children.some((child) => child.name === "Assignment");
174
+ if (hasAssignment) {
175
+ return this._parseAssignment(cursor, input);
176
+ }
177
177
  const hasOperator = children.some((child) => child.name === "And" || child.name === "Or");
178
178
  const hasMultipleExpressions = children.filter((child) => child.name === "Filter" || child.name === "Not" || child.name === "(").length > 1;
179
179
  if (hasOperator || hasMultipleExpressions) {
180
- return this._parseBinaryExpression(cursor, input);
180
+ const filter2 = this._parseBinaryExpression(cursor, input);
181
+ return {
182
+ filter: filter2
183
+ };
181
184
  }
182
185
  if (!cursor.firstChild()) {
183
- return Filter2.nothing();
186
+ return {
187
+ filter: Filter2.nothing()
188
+ };
189
+ }
190
+ const filter = this._parseExpression(cursor, input);
191
+ return {
192
+ filter
193
+ };
194
+ }
195
+ /**
196
+ * Parse an assignment node.
197
+ */
198
+ _parseAssignment(cursor, input) {
199
+ if (!cursor.firstChild()) {
200
+ return {};
184
201
  }
185
- return this._parseExpression(cursor, input);
202
+ let name;
203
+ let filter;
204
+ do {
205
+ if (cursor.node.name === "Assignment") {
206
+ const assignmentText = this._getNodeText(cursor, input);
207
+ if (cursor.firstChild()) {
208
+ name = this._getNodeText(cursor, input);
209
+ const openParenIndex = assignmentText.indexOf("(");
210
+ const closeParenIndex = assignmentText.lastIndexOf(")");
211
+ if (openParenIndex !== -1 && closeParenIndex !== -1 && closeParenIndex > openParenIndex) {
212
+ const subInput = assignmentText.slice(openParenIndex + 1, closeParenIndex).trim();
213
+ const subTree = this._parser.parse(subInput);
214
+ const subResult = this.buildQuery(subTree, subInput);
215
+ filter = subResult.filter;
216
+ }
217
+ cursor.parent();
218
+ }
219
+ break;
220
+ }
221
+ } while (cursor.nextSibling());
222
+ cursor.parent();
223
+ return {
224
+ filter,
225
+ name
226
+ };
186
227
  }
187
228
  /**
188
229
  * Parse an expression node.
@@ -280,9 +321,9 @@ var QueryBuilder = class {
280
321
  }
281
322
  const subInput = input.slice(exprStart, exprEnd);
282
323
  const subTree = this._parser.parse(subInput);
283
- const subFilter = this.buildQuery(subTree, subInput);
284
- if (subFilter) {
285
- filters.push(subFilter);
324
+ const subResult = this.buildQuery(subTree, subInput);
325
+ if (subResult.filter) {
326
+ filters.push(subResult.filter);
286
327
  }
287
328
  } else {
288
329
  const subFilter = this._parseExpression(cursor, input);
@@ -449,7 +490,7 @@ var QueryBuilder = class {
449
490
  _parseTagFilter(cursor, input) {
450
491
  invariant(this._tags, void 0, {
451
492
  F: __dxlog_file,
452
- L: 415,
493
+ L: 468,
453
494
  S: this,
454
495
  A: [
455
496
  "this._tags",
@@ -514,17 +555,165 @@ var QueryBuilder = class {
514
555
  _getNodeText(cursor, input) {
515
556
  return input.slice(cursor.from, cursor.to);
516
557
  }
517
- constructor(_tags) {
518
- _define_property(this, "_tags", void 0);
519
- _define_property(this, "_parser", void 0);
520
- this._tags = _tags;
521
- this._parser = QueryDSL.Parser.configure({
522
- strict: true
558
+ };
559
+
560
+ // src/sandbox/query-sandbox.ts
561
+ import { Resource } from "@dxos/context";
562
+ import { Query as Query2 } from "@dxos/echo";
563
+ import { trim } from "@dxos/util";
564
+ import { createQuickJS } from "@dxos/vendor-quickjs";
565
+ import envCode from "#query-lite?raw";
566
+
567
+ // src/sandbox/quickjs.ts
568
+ var unwrapResult = (context, result) => {
569
+ if (result.error) {
570
+ const contextError = context.dump(result.error);
571
+ result.error.dispose();
572
+ if (typeof contextError === "object" && typeof contextError.name === "string" && typeof contextError.message === "string") {
573
+ const error = new Error(contextError.message);
574
+ Object.defineProperty(error, "name", {
575
+ value: contextError.name
576
+ });
577
+ const originalStack = error.stack;
578
+ error.stack = `${contextError.name}: ${contextError.message}
579
+ ${contextError.stack}${originalStack?.split("\n").slice(1).join("\n") ?? ""}`;
580
+ throw error;
581
+ } else {
582
+ throw new Error(String(contextError));
583
+ }
584
+ }
585
+ return result.value;
586
+ };
587
+
588
+ // src/sandbox/query-sandbox.ts
589
+ function _ts_add_disposable_resource(env, value, async) {
590
+ if (value !== null && value !== void 0) {
591
+ if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
592
+ var dispose, inner;
593
+ if (async) {
594
+ if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
595
+ dispose = value[Symbol.asyncDispose];
596
+ }
597
+ if (dispose === void 0) {
598
+ if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
599
+ dispose = value[Symbol.dispose];
600
+ if (async) inner = dispose;
601
+ }
602
+ if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
603
+ if (inner) dispose = function() {
604
+ try {
605
+ inner.call(this);
606
+ } catch (e) {
607
+ return Promise.reject(e);
608
+ }
609
+ };
610
+ env.stack.push({
611
+ value,
612
+ dispose,
613
+ async
523
614
  });
615
+ } else if (async) {
616
+ env.stack.push({
617
+ async: true
618
+ });
619
+ }
620
+ return value;
621
+ }
622
+ function _ts_dispose_resources(env) {
623
+ var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
624
+ var e = new Error(message);
625
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
626
+ };
627
+ return (_ts_dispose_resources = function _ts_dispose_resources2(env2) {
628
+ function fail(e) {
629
+ env2.error = env2.hasError ? new _SuppressedError(e, env2.error, "An error was suppressed during disposal.") : e;
630
+ env2.hasError = true;
631
+ }
632
+ var r, s = 0;
633
+ function next() {
634
+ while (r = env2.stack.pop()) {
635
+ try {
636
+ if (!r.async && s === 1) return s = 0, env2.stack.push(r), Promise.resolve().then(next);
637
+ if (r.dispose) {
638
+ var result = r.dispose.call(r.value);
639
+ if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) {
640
+ fail(e);
641
+ return next();
642
+ });
643
+ } else s |= 1;
644
+ } catch (e) {
645
+ fail(e);
646
+ }
647
+ }
648
+ if (s === 1) return env2.hasError ? Promise.reject(env2.error) : Promise.resolve();
649
+ if (env2.hasError) throw env2.error;
650
+ }
651
+ return next();
652
+ })(env);
653
+ }
654
+ var QuerySandbox = class _QuerySandbox extends Resource {
655
+ // Caching the wasm module.
656
+ static quickJS = null;
657
+ static getQuickJS() {
658
+ if (!_QuerySandbox.quickJS) {
659
+ _QuerySandbox.quickJS = createQuickJS();
660
+ }
661
+ return _QuerySandbox.quickJS;
662
+ }
663
+ #runtime;
664
+ async _open() {
665
+ const quickJS = await _QuerySandbox.getQuickJS();
666
+ this.#runtime = quickJS.newRuntime({
667
+ moduleLoader: (moduleName, _context) => {
668
+ switch (moduleName) {
669
+ case "dxos:query-lite":
670
+ return envCode;
671
+ default:
672
+ throw new Error(`Module not found: ${moduleName}`);
673
+ }
674
+ }
675
+ });
676
+ }
677
+ async _close() {
678
+ this.#runtime.dispose();
679
+ }
680
+ /**
681
+ * Evaluates the query code.
682
+ * @param queryCode Example: `Query.select(Filter.typename('dxos.org/type/Person'))`
683
+ */
684
+ eval(queryCode) {
685
+ const env = {
686
+ stack: [],
687
+ error: void 0,
688
+ hasError: false
689
+ };
690
+ try {
691
+ const context = _ts_add_disposable_resource(env, this.#runtime.newContext(), false);
692
+ const globals = trim`
693
+ import { Filter, Order, Query } from 'dxos:query-lite';
694
+ globalThis.Filter = Filter;
695
+ globalThis.Order = Order;
696
+ globalThis.Query = Query;
697
+ `;
698
+ unwrapResult(context, context.evalCode(globals)).dispose();
699
+ const query = _ts_add_disposable_resource(env, unwrapResult(context, context.evalCode(queryCode)), false);
700
+ const result = context.dump(query);
701
+ if ("~Filter" in result) {
702
+ return Query2.select(result).ast;
703
+ } else {
704
+ return result.ast;
705
+ }
706
+ } catch (e) {
707
+ env.error = e;
708
+ env.hasError = true;
709
+ } finally {
710
+ _ts_dispose_resources(env);
711
+ }
524
712
  }
525
713
  };
526
714
  export {
527
715
  QueryBuilder,
528
- QueryDSL
716
+ QueryDSL,
717
+ QuerySandbox
529
718
  };
530
719
  //# sourceMappingURL=index.mjs.map