@ucast/core

git@github.com:stalniy/ucast.git

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@ucast/core
106131.10.1a year ago2 years agoMinified + gzip package size for @ucast/core in KB

Readme

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