thinql-parse

0.1.0 • Public • Published

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. '"'

Package Sidebar

Install

npm i thinql-parse

Weekly Downloads

0

Version

0.1.0

License

MIT

Unpacked Size

239 kB

Total Files

11

Last publish

Collaborators

  • mmiller42