Skip to content

Latest commit

 

History

History
68 lines (46 loc) · 2.49 KB

README.md

File metadata and controls

68 lines (46 loc) · 2.49 KB

Universal Conditions AST

@ucast/core NPM version UCAST join the chat

This package contains classes and functions that helps to create parsers, conditions AST, interpreters and translators.

Installation

npm i @ucast/core
# or
yarn add @ucast/core
# or
pnpm add @ucast/core

Getting Started

Parser

Parser is a function that translates conditions from any language into conditions AST. For example, MongoQueryParser parses MongoQuery into AST which then can be interpreted by JavaScriptInterpreter that returns a boolean value based on passed in object.

Conditions AST

Abstract Syntax Tree of any condition. What is condition? x > 4 is a condition, x === 4 is a condition as well, { x: { $eq: 4 } } is a MongoQuery condition.

There are few types of AST nodes that allow us to represent any condition:

  • FieldCondition.
    Depends on a field, operator and its value. For example, in condition x > 4, x is a field, 4 is a value and > is operator
  • DocumentCondition.
    Any condition that test a document (or a row) as whole (e.g., in MongoDB Query, it's $where operator and in SQL it's EXISTS).
  • CompoundCondition.
    Combines other conditions using logical operations like "and", "or", "not".

Interpreter

An interpreter is a function that interprets conditions AST in a specific way. For example, it can:

  • interpret conditions in JavaScript runtime to return a boolean result
  • or it can convert conditions into SQL WHERE statement
  • or MongoDB query,
  • or HTTP/REST query
  • or GraphQL input
  • or anything else you can imagine

Translator

Combines Parser and Interpreter and returns a factory function:

const parse = (query) => /* to conditions AST */
const interpreter = createInterpreter({ /* condition interpreters */ });
const translate = (query, ...args) => interpreter.bind(null, parse(query));

Want to help?

Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on guidelines for contributing

License

Apache License, Version 2.0