thinql-parse
v0.1.0
Published
Parse ThinQL queries
Downloads
2
Maintainers
Readme
thinql-parse
Parse ThinQL queries.
Installation
# npm
npm install thinql-parse
# yarn
yarn add thinql-parse
Example
const { parse } = require('thinql-parse')
const result = parse('hello world')
expect(result.toThinQL({ alwaysQuoteValues: true })).toEqual('"hello" "world"')
expect(result.toJSON()).toMatchObject({
type: 'LogicalExpression',
operator: {
type: 'LogicalOperator',
kind: 'and',
},
left: {
type: 'FullTextSearch',
value: {
type: 'Value',
value: 'hello',
flags: '',
},
negate: false,
},
right: {
type: 'FullTextSearch',
value: {
type: 'Value',
value: 'world',
flags: '',
},
negate: false,
},
})
API
Exports
grammarPath: string
The absolute path to the compiled nearley grammar specification.
lexer: moo.Lexer
The Moo lexer instance.
parse(query: string): Node
Parses a ThinQL query and returns the root node of the resultant AST, which is a subclass of Node.
types: Object<string, { new(): Node }
A map of all node type classes.
Types
abstract Node
|Member|Type/Return Type|Description|
|:---|:---|:---|
|#token
|moo.Token | null|The token matched by the lexer, which includes information such as the line and column position of the node. Null for implied tokens.|
|#toJSON()
|Object|Converts the node and its descendants into a plain serializable object recursively. Each node will include a type
property whose value is the name of one of the subclasses of Node.|
|#toString()
|string|Converts the node and its descendants recursively into a string for inspection.|
|#toThinQL(options: toThinQLOptions)
|string|Converts the node and its descendants recursively into a ThinQL query.|
Call extends Node
A node that represents an invocation of an environment-defined function.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'Call'
|The node type.|
|#callee
|string|The name of the function.|
|#negate
|boolean | null|Whether to negate the result. Will be null
if negating is syntactically invalid, such as when a call's return value is compared.|
|#type
|string|The node type (as an instance member).|
|#arguments
|Array<Value | Call>|The arguments passed into the function.|
abstract Operator extends Node
|Member|Type/Return Type|Description|
|:--|:---|:---|
.symbolFor(kind: string)
|string|Get a symbol sequence that represents this operator in a query.|
|.operators
|Object<string, string | Array<string>>|A map of operator token names to corresponding symbol sequence(s).|
ComparisonOperator extends Operator
A node that represents an operator for comparison.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'ComparisonOperator'
|The node type.|
|.operators.eq
|'='
|Kind for the "is equal to" operator.|
|.operators.gt
|'>'
|Kind for the "is greater than" operator.|
|.operators.gte
|'>='
|Kind for the "is greater than or equal to" operator.|
|.operators.lt
|'<'
|Kind for the "is less than" operator.|
|.operators.lte
|'<='
|Kind for the "less than or equal to" operator.|
|.operators.match
|'*='
|Kind for the "matches" operator.|
|.operators.ne
|'!='
|Kind for the "is not equal to" operator.|
|#kind
|'eq'
| 'gt'
| 'gte'
| 'lt'
| 'lte'
| 'match'
| 'ne'
|A keyword that represents the comparison operator.|
Condition extends Node
A node that represents a condition in which a property or call return value is compared against a value or return value.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'Condition'
|The node type.|
|#property
|Property | Call|The property or call result being compared.|
|#operator
|ComparisonOperator|The comparison operator.|
|#value
|Value | Call|The value or call result the property is compared against.|
FullTextSearch extends Node
A node that represents a search query against no particular field.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'FullTextSearch'
|The node type.|
|#value
|Value|The value to search for.|
|#negate
|boolean|Whether to negate this filter.|
Group extends Node
A node that represents an expression that will be evaluated as a group.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'Group'
|The node type.|
|#expression
|LogicalExpression|The expression wrapped inside the group.|
|#negate
|boolean|Whether to negate this filter.|
LogicalExpression extends Node
A node that joins two expressions to produce a criterion in which either or both must be satisfied.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'LogicalExpression'
|The node type.|
|#operator
|LogicalOperator|The logical operator that joins the operands.|
|#left
|Condition | FullTextSearch | Group | Call|The assertion on the left.|
|#right
|Condition | FullTextSearch | Group | Call|The assertion on the right.|
LogicalOperator extends Operator
A node that represents a logical operator.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'ComparisonOperator'
|The node type.|
|.operators.and
|['and', 'AND']
|Requires both criteria to be satisfied.|
|.operators.or
|['or', 'OR']
|Requires either criteria to be satisfied.|
|#kind
|'and'
| 'or'
|A keyword that represents the logical operator.|
Property extends Node
A node that represents a property that can be compared to a value.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'Property'
|The node type.|
|#name
|string|The name of the property being compared.|
Value extends Node
A node that represents any value: full text search, comparison subject, or function argument.
|Member|Type/Return Type|Description|
|:---|:---|:---|
|.type
|'Property'
|The node type.|
|#value
|string|The value text.|
|#flags
|string|Any flags appended to the value.|
toThinQLOptions
Options which can be passed to Node#toThinQL()
to affect the output formatting.
|Property|Type|Description|Default|
|:---|:---|:---|:---|
|alwaysQuoteProperties
|boolean|Always wrap property names with quotation marks.|false
|
|alwaysQuoteValues
|boolean|Always wrap values with quotation marks.|false
|
|propertyQuoteSymbol
|'"'
| '"'
|The quotation mark symbol to wrap property names with.|'"'
|
|valueQuoteSymbol
|'"'
| '"'
|The quotation mark symbol to wrap values with.|'"'
|