Wondering what’s next for npm?Check out our public roadmap! »

    TypeScript icon, indicating that this package has built-in type declarations

    1.10.0 • Public • Published

    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.


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

    Getting Started


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


    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


    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


    Apache License, Version 2.0


    npm i @ucast/core

    DownloadsWeekly Downloads






    Unpacked Size

    133 kB

    Total Files


    Last publish


    • avatar