thinql-parse v0.1.0
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. | '"' |
5 years ago