@dxos/echo-query 0.8.4-main.c4373fc → 0.8.4-main.cb12b3f963

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 (48) hide show
  1. package/dist/lib/neutral/index.mjs +917 -0
  2. package/dist/lib/neutral/index.mjs.map +7 -0
  3. package/dist/lib/neutral/meta.json +1 -0
  4. package/dist/query-lite/index.d.ts +9975 -0
  5. package/dist/query-lite/index.d.ts.map +1 -0
  6. package/dist/query-lite/index.js +548 -0
  7. package/dist/query-lite/index.js.map +1 -0
  8. package/dist/types/src/index.d.ts +1 -0
  9. package/dist/types/src/index.d.ts.map +1 -1
  10. package/dist/types/src/parser/gen/index.d.ts.map +1 -1
  11. package/dist/types/src/parser/gen/query.terms.d.ts +1 -1
  12. package/dist/types/src/parser/gen/query.terms.d.ts.map +1 -1
  13. package/dist/types/src/parser/query-builder.d.ts +19 -4
  14. package/dist/types/src/parser/query-builder.d.ts.map +1 -1
  15. package/dist/types/src/query-lite/index.d.ts +2 -0
  16. package/dist/types/src/query-lite/index.d.ts.map +1 -0
  17. package/dist/types/src/query-lite/query-lite.d.ts +8 -0
  18. package/dist/types/src/query-lite/query-lite.d.ts.map +1 -0
  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/query-sandbox.d.ts +1 -1
  22. package/dist/types/src/sandbox/query-sandbox.d.ts.map +1 -1
  23. package/dist/types/src/sandbox/quickjs.d.ts.map +1 -1
  24. package/dist/types/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +22 -20
  26. package/src/env.d.ts +1 -1
  27. package/src/index.ts +1 -0
  28. package/src/parser/gen/query.terms.ts +24 -23
  29. package/src/parser/gen/query.ts +8 -8
  30. package/src/parser/query-builder.ts +334 -21
  31. package/src/parser/query.grammar +8 -2
  32. package/src/parser/query.test.ts +210 -44
  33. package/src/query-lite/index.ts +5 -0
  34. package/src/query-lite/query-lite.ts +744 -0
  35. package/src/sandbox/index.ts +5 -0
  36. package/src/sandbox/query-sandbox.test.ts +15 -14
  37. package/src/sandbox/query-sandbox.ts +4 -4
  38. package/src/sandbox/quickjs.ts +1 -2
  39. package/dist/lib/browser/index.mjs +0 -530
  40. package/dist/lib/browser/index.mjs.map +0 -7
  41. package/dist/lib/browser/meta.json +0 -1
  42. package/dist/lib/node-esm/index.mjs +0 -530
  43. package/dist/lib/node-esm/index.mjs.map +0 -7
  44. package/dist/lib/node-esm/meta.json +0 -1
  45. package/dist/query-env/index.js +0 -387
  46. package/dist/types/src/query-env/index.d.ts +0 -8
  47. package/dist/types/src/query-env/index.d.ts.map +0 -1
  48. package/src/query-env/index.ts +0 -462
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/parser/gen/query.ts", "../../../src/parser/gen/query.terms.ts", "../../../src/parser/gen/index.ts", "../../../src/parser/query-builder.ts"],
4
- "sourcesContent": ["// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport {LRParser} from \"@lezer/lr\"\nconst spec_Identifier = {__proto__:null,type:18, NOT:82, not:82, \"!\":82, AND:84, and:84, OR:86, or:86}\nexport const parser = LRParser.deserialize({\n version: 14,\n 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\",\n 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\",\n 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\",\n nodeNames: \"⚠ Query Filter TagFilter Tag TextFilter String TypeFilter Identifier TypeKeyword : PropertyFilter PropertyPath . Value Number Boolean Null ObjectLiteral { ObjectProperty , } ArrayLiteral [ ] Not And Or Relation ArrowRight ArrowLeft ( )\",\n maxTerm: 43,\n skippedNodes: [0],\n repeatNodeCount: 3,\n 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~\",\n tokenizers: [0, 1],\n topRules: {\"Query\":[0,1]},\n specialized: [{term: 8, get: (value: keyof typeof spec_Identifier) => spec_Identifier[value] || -1}],\n tokenPrec: 0\n})\n", "// This file was generated by lezer-generator. You probably shouldn't edit it.\nexport const\n Query = 1,\n Filter = 2,\n TagFilter = 3,\n Tag = 4,\n TextFilter = 5,\n String = 6,\n TypeFilter = 7,\n Identifier = 8,\n TypeKeyword = 9,\n PropertyFilter = 11,\n PropertyPath = 12,\n Value = 14,\n Number = 15,\n Boolean = 16,\n Null = 17,\n ObjectLiteral = 18,\n ObjectProperty = 20,\n ArrayLiteral = 23,\n Not = 26,\n And = 27,\n Or = 28,\n Relation = 29,\n ArrowRight = 30,\n ArrowLeft = 31\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { LRParser } from '@lezer/lr';\nimport { parser } from './query';\nimport * as terms from './query.terms';\n\nexport namespace QueryDSL {\n export const Parser: LRParser = parser;\n export const Node = terms;\n export const Tokens = ['type:', 'AND', 'OR', 'NOT'];\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Parser, type Tree, type TreeCursor } from '@lezer/common';\n\nimport { Filter, type TagMap } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\n\nimport { QueryDSL } from './gen';\n\n/**\n * Stateless query builder that parses DSL trees into filters.\n *\n * NOTE: QueryBuilder was largely developed using Claude Sonnet 4.5 (in Windsurf)..\n * To modify the functionality, create a minimal breaking test and direct the LLM to fix either the grammar or builder.\n */\nexport class QueryBuilder {\n private readonly _parser: Parser = QueryDSL.Parser.configure({ strict: true });\n\n constructor(private readonly _tags?: TagMap) {}\n\n /**\n * Check valid input.\n */\n validate(input: string): boolean {\n try {\n const tree = this._parser.parse(input);\n return tree.cursor().node.name === 'Query';\n } catch {\n return false;\n }\n }\n\n /**\n * Build a query from the input string.\n */\n build(input: string): Filter.Any | undefined {\n try {\n const tree = this._parser.parse(input);\n return this.buildQuery(tree, input);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Build a query from a parsed DSL tree.\n */\n buildQuery(tree: Tree, input: string): Filter.Any | undefined {\n const cursor = tree.cursor();\n\n // Start at root (Query node).\n if (cursor.node.name !== 'Query') {\n return undefined;\n }\n\n // Check if Query has multiple children (binary expression).\n const children: Array<{ name: string; from: number; to: number }> = [];\n if (cursor.firstChild()) {\n do {\n children.push({ name: cursor.node.name, from: cursor.from, to: cursor.to });\n } while (cursor.nextSibling());\n cursor.parent();\n }\n\n // If we have an operator in the children, or multiple expressions (implicit AND), parse as binary expression.\n const hasOperator = children.some((child) => child.name === 'And' || child.name === 'Or');\n const hasMultipleExpressions =\n children.filter((child) => child.name === 'Filter' || child.name === 'Not' || child.name === '(').length > 1;\n if (hasOperator || hasMultipleExpressions) {\n return this._parseBinaryExpression(cursor, input);\n }\n\n // Otherwise, parse the single expression.\n if (!cursor.firstChild()) {\n return Filter.nothing();\n }\n\n return this._parseExpression(cursor, input);\n }\n\n /**\n * Parse an expression node.\n */\n private _parseExpression(cursor: TreeCursor, input: string): Filter.Any | undefined {\n const nodeName = cursor.node.name;\n\n switch (nodeName) {\n case 'Filter':\n return this._parseFilter(cursor, input);\n\n case 'Not': {\n // Move past NOT token to the expression.\n cursor.nextSibling();\n const notFilter = this._parseExpression(cursor, input);\n return notFilter ? Filter.not(notFilter) : undefined;\n }\n\n case 'And':\n case 'Or':\n // This is the operator node, we need to handle the binary expression.\n // The cursor is positioned at the operator, we need to go back to parent.\n cursor.parent();\n return this._parseBinaryExpression(cursor, input);\n\n case '(': {\n // Skip opening paren.\n cursor.nextSibling();\n const parenFilter = this._parseExpression(cursor, input);\n // Skip closing paren.\n cursor.nextSibling();\n return parenFilter;\n }\n\n default: {\n // Check if this is a binary expression (has And/Or as a child).\n const savedPos = cursor.from;\n if (cursor.firstChild()) {\n // Look for And/Or operators or multiple expressions (implicit AND).\n let hasOperator = false;\n let expressionCount = 0;\n do {\n if (cursor.node.name === 'And' || cursor.node.name === 'Or') {\n hasOperator = true;\n break;\n }\n if (cursor.node.name === 'Filter' || cursor.node.name === 'Not' || cursor.node.name === '(') {\n expressionCount++;\n }\n } while (cursor.nextSibling());\n hasOperator = hasOperator || expressionCount > 1;\n\n // Reset cursor to the saved position.\n cursor.parent();\n cursor.firstChild();\n while (cursor.from !== savedPos && cursor.nextSibling()) {}\n\n if (hasOperator) {\n cursor.parent();\n return this._parseBinaryExpression(cursor, input);\n } else {\n const result = this._parseExpression(cursor, input);\n cursor.parent();\n return result;\n }\n }\n return Filter.nothing();\n }\n }\n }\n\n /**\n * Parse a binary expression (AND/OR).\n */\n private _parseBinaryExpression(cursor: TreeCursor, input: string): Filter.Any {\n const filters: Filter.Any[] = [];\n let operator: 'and' | 'or' | null = null;\n\n // Collect all filters and operators.\n if (cursor.firstChild()) {\n do {\n const nodeName = cursor.node.name;\n\n if (nodeName === 'And' || nodeName === 'Or') {\n operator = nodeName.toLowerCase() as 'and' | 'or';\n } else if (nodeName === '(') {\n // Handle parenthesized expression.\n // Look ahead to see if this is a binary expression.\n const savedPos = cursor.from;\n cursor.nextSibling(); // Move past '('\n\n // Check if the parentheses contain a binary expression.\n let hasBinaryOp = false;\n do {\n if (cursor.node.name === 'And' || cursor.node.name === 'Or') {\n hasBinaryOp = true;\n break;\n }\n } while (cursor.nextSibling() && cursor.node.name !== ')');\n\n // Reset cursor to start of parenthesized content.\n cursor.parent();\n cursor.firstChild();\n while (cursor.from !== savedPos && cursor.nextSibling()) {}\n cursor.nextSibling(); // Move past '(' again.\n\n if (hasBinaryOp) {\n // Find the matching closing parenthesis.\n let depth = 1;\n const exprStart = cursor.from;\n let exprEnd = cursor.to;\n\n while (cursor.nextSibling() && depth > 0) {\n if (cursor.node.name === '(') depth++;\n else if (cursor.node.name === ')') {\n depth--;\n if (depth === 0) {\n exprEnd = cursor.from;\n }\n }\n }\n\n // Parse the expression inside parentheses as a subtree.\n const subInput = input.slice(exprStart, exprEnd);\n const subTree = this._parser.parse(subInput);\n const subFilter = this.buildQuery(subTree, subInput);\n if (subFilter) {\n filters.push(subFilter);\n }\n } else {\n // Simple parenthesized expression.\n const subFilter = this._parseExpression(cursor, input);\n if (subFilter) {\n filters.push(subFilter);\n }\n\n // Skip until we find the closing parenthesis.\n while (cursor.nextSibling() && cursor.node.name !== ')') {}\n }\n } else if (nodeName !== ')') {\n const subFilter = this._parseExpression(cursor, input);\n if (subFilter) {\n filters.push(subFilter);\n }\n }\n } while (cursor.nextSibling());\n\n cursor.parent();\n }\n\n if (filters.length === 0) {\n return Filter.nothing();\n }\n\n if (filters.length === 1) {\n return filters[0];\n }\n\n return operator === 'or' ? Filter.or(...filters) : Filter.and(...filters);\n }\n\n /**\n * Parse a Filter node.\n */\n private _parseFilter(cursor: TreeCursor, input: string): Filter.Any | undefined {\n if (!cursor.firstChild()) {\n return Filter.nothing();\n }\n\n let result: Filter.Any | undefined = undefined;\n const filterType = cursor.node.name;\n switch (filterType) {\n case 'TagFilter':\n if (this._tags) {\n result = this._parseTagFilter(cursor, input);\n }\n break;\n\n case 'TextFilter':\n result = this._parseTextFilter(cursor, input);\n break;\n\n case 'TypeFilter':\n result = this._parseTypeFilter(cursor, input);\n break;\n\n case 'ObjectLiteral':\n result = this._parseObjectLiteral(cursor, input);\n break;\n\n case 'PropertyFilter':\n result = this._parsePropertyFilter(cursor, input);\n break;\n\n default:\n result = Filter.nothing();\n }\n\n cursor.parent();\n return result;\n }\n\n /**\n * Parse a TypeFilter node (type:typename).\n */\n private _parseTypeFilter(cursor: TreeCursor, input: string): Filter.Any {\n // Skip TypeKeyword.\n cursor.firstChild();\n cursor.nextSibling(); // Skip ':'\n cursor.nextSibling(); // Move to Identifier\n\n const typename = this._getNodeText(cursor, input);\n cursor.parent(); // Go back to TypeFilter.\n return Filter.typename(typename);\n }\n\n /**\n * Parse a TextFilter node (quoted string).\n */\n private _parseTextFilter(cursor: TreeCursor, input: string): Filter.Any {\n cursor.firstChild(); // Move to String node.\n const text = this._getNodeText(cursor, input);\n cursor.parent(); // Go back to TextFilter.\n // Remove quotes.\n return Filter.text(text.slice(1, -1));\n }\n\n /**\n * Parse an ObjectLiteral node.\n */\n private _parseObjectLiteral(cursor: TreeCursor, input: string): Filter.Any {\n const props: Record<string, any> = {};\n\n if (cursor.firstChild()) {\n do {\n if (cursor.node.name === 'ObjectProperty') {\n const { key, value } = this._parseObjectProperty(cursor, input);\n if (key) {\n // Convert simple values to Filter.eq for compatibility with Filter.props.\n props[key] = Filter.eq(value);\n }\n }\n } while (cursor.nextSibling());\n\n cursor.parent();\n }\n\n return Filter.props(props);\n }\n\n /**\n * Parse an ObjectProperty node.\n */\n private _parseObjectProperty(cursor: TreeCursor, input: string): { key: string | null; value: any } {\n let key: string | null = null;\n let value: any = null;\n\n if (cursor.firstChild()) {\n // First child should be the property name (Identifier).\n if (cursor.node.name === 'Identifier') {\n key = this._getNodeText(cursor, input);\n }\n\n // Skip ':' and move to Value.\n cursor.nextSibling();\n cursor.nextSibling();\n\n if (cursor.node.name === 'Value' && cursor.firstChild()) {\n value = this._parseValue(cursor, input);\n cursor.parent();\n }\n\n cursor.parent();\n }\n\n return { key, value };\n }\n\n /**\n * Parse a PropertyFilter node (property:value).\n */\n private _parsePropertyFilter(cursor: TreeCursor, input: string): Filter.Any {\n let path: string | null = null;\n let value: any = null;\n\n if (cursor.firstChild()) {\n // First child is PropertyPath.\n if (cursor.node.name === 'PropertyPath') {\n path = this._parsePropertyPath(cursor, input);\n }\n\n // Skip ':' and move to Value.\n cursor.nextSibling();\n cursor.nextSibling();\n\n if (cursor.node.name === 'Value' && cursor.firstChild()) {\n value = this._parseValue(cursor, input);\n cursor.parent();\n }\n\n cursor.parent();\n }\n\n if (!path) {\n return Filter.nothing();\n }\n\n return Filter.props({ [path]: value });\n }\n\n /**\n * Parse a PropertyPath node (supports dot notation).\n */\n private _parsePropertyPath(cursor: TreeCursor, input: string): string {\n const parts: string[] = [];\n\n if (cursor.firstChild()) {\n do {\n if (cursor.node.name === 'Identifier') {\n parts.push(this._getNodeText(cursor, input));\n }\n } while (cursor.nextSibling());\n\n cursor.parent();\n }\n\n return parts.join('.');\n }\n\n /**\n * Parse a TagFilter node (#tag).\n */\n private _parseTagFilter(cursor: TreeCursor, input: string): Filter.Any | undefined {\n invariant(this._tags);\n const str = this._getNodeText(cursor, input).slice(1).toLowerCase();\n const [key] = Object.entries(this._tags!).find(([, value]) => value.label.toLowerCase() === str) ?? [];\n return key ? Filter.tag(key) : undefined;\n }\n\n /**\n * Parse a Value node.\n */\n private _parseValue(cursor: TreeCursor, input: string): any {\n const valueType = cursor.node.name;\n\n switch (valueType) {\n case 'String': {\n // Remove quotes.\n const str = this._getNodeText(cursor, input);\n return str.slice(1, -1);\n }\n\n case 'Number':\n return Number(this._getNodeText(cursor, input));\n\n case 'Boolean':\n return this._getNodeText(cursor, input) === 'true';\n\n case 'Null':\n return null;\n\n case 'ObjectLiteral': {\n // For nested objects, parse recursively.\n const props: Record<string, any> = {};\n if (cursor.firstChild()) {\n do {\n if (cursor.node.name === 'ObjectProperty') {\n const { key, value } = this._parseObjectProperty(cursor, input);\n if (key) {\n props[key] = value;\n }\n }\n } while (cursor.nextSibling());\n cursor.parent();\n }\n return props;\n }\n\n case 'ArrayLiteral': {\n // Parse array values\n const array: any[] = [];\n if (cursor.firstChild()) {\n do {\n if (cursor.node.name === 'Value' && cursor.firstChild()) {\n array.push(this._parseValue(cursor, input));\n cursor.parent();\n }\n } while (cursor.nextSibling());\n cursor.parent();\n }\n return array;\n }\n\n default:\n return null;\n }\n }\n\n /**\n * Get the text content of the current node.\n */\n private _getNodeText(cursor: TreeCursor, input: string): string {\n return input.slice(cursor.from, cursor.to);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["LRParser", "spec_Identifier", "__proto__", "type", "NOT", "not", "AND", "and", "OR", "or", "parser", "LRParser", "deserialize", "version", "states", "stateData", "goto", "nodeNames", "maxTerm", "skippedNodes", "repeatNodeCount", "tokenData", "tokenizers", "topRules", "specialized", "term", "get", "value", "tokenPrec", "Number", "Query", "Filter", "TagFilter", "Tag", "TextFilter", "String", "TypeFilter", "Identifier", "TypeKeyword", "PropertyFilter", "PropertyPath", "Value", "Number", "Boolean", "Null", "ObjectLiteral", "ObjectProperty", "ArrayLiteral", "Not", "And", "Or", "Relation", "ArrowRight", "ArrowLeft", "QueryDSL", "Parser", "parser", "Node", "terms", "Tokens", "Filter", "invariant", "QueryBuilder", "validate", "input", "tree", "_parser", "parse", "cursor", "node", "name", "build", "buildQuery", "undefined", "children", "firstChild", "push", "from", "to", "nextSibling", "parent", "hasOperator", "some", "child", "hasMultipleExpressions", "filter", "length", "_parseBinaryExpression", "Filter", "nothing", "_parseExpression", "nodeName", "_parseFilter", "notFilter", "not", "parenFilter", "savedPos", "expressionCount", "result", "filters", "operator", "toLowerCase", "hasBinaryOp", "depth", "exprStart", "exprEnd", "subInput", "slice", "subTree", "subFilter", "or", "and", "filterType", "_tags", "_parseTagFilter", "_parseTextFilter", "_parseTypeFilter", "_parseObjectLiteral", "_parsePropertyFilter", "typename", "_getNodeText", "text", "props", "key", "value", "_parseObjectProperty", "eq", "_parseValue", "path", "_parsePropertyPath", "parts", "join", "invariant", "str", "Object", "entries", "find", "label", "tag", "valueType", "Number", "array", "QueryDSL", "Parser", "configure", "strict"]
7
- }
@@ -1 +0,0 @@
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":49214,"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/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":29069},"dist/lib/node-esm/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":16642}}}
@@ -1,387 +0,0 @@
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-env/index.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,8 +0,0 @@
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=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/query-env/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,IAAI,MAAM,YAAY,CAAC;AA0BxC,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"}