jsep: Tiny JavaScript Expression Parser

1.4.0 · active · verified Sun Apr 19

jsep is a lightweight and tiny JavaScript expression parser, currently at a stable version 1.4.0. It is designed specifically for parsing JavaScript expressions, akin to formulas in a spreadsheet, rather than full JavaScript statements or operations. This focus allows it to remain compact compared to more comprehensive parsers like Esprima, while producing an Abstract Syntax Tree (AST) output that is largely compatible with Esprima and SpiderMonkey's Parser API. The library features a flexible plugin architecture, enabling users to extend its capabilities with support for custom operators, literals, and more advanced syntax (e.g., ternary, object literals, async/await) via separate `@jsep-plugin/*` packages. Recent updates, including features like nullish coalescing and exponentiation, suggest an active, albeit not rapid, release cadence.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates importing `jsep`, registering an optional plugin (like ternary), adding a custom binary operator, and parsing various JavaScript expressions to observe their Abstract Syntax Tree (AST) output.

import jsep from 'jsep';
import ternary from '@jsep-plugin/ternary';

// Register a built-in plugin (ternary is default but shown for illustration)
jsep.plugins.register(ternary);

// Add a custom operator (e.g., bitwise XOR)
jsep.addBinaryOp('^', 10);

// Parse a simple expression
const simpleAst = jsep('1 + 2 * 3');
console.log('Simple AST:', JSON.stringify(simpleAst, null, 2));

// Parse an expression with a custom operator
const customOpAst = jsep('5 ^ 3');
console.log('Custom Operator AST:', JSON.stringify(customOpAst, null, 2));

// Parse a complex expression with ternary operator
const complexAst = jsep('a > b ? a : b');
console.log('Complex AST (ternary):', JSON.stringify(complexAst, null, 2));

// Demonstrate AST structure for a nullish coalescing operator (introduced in v1.4.0)
const nullishCoalescingAst = jsep('value ?? defaultValue');
console.log('Nullish Coalescing AST:', JSON.stringify(nullishCoalescingAst, null, 2));

view raw JSON →