subscript
Version:
Fast and tiny expression evaluator with minimal syntax.
16 lines (13 loc) • 548 B
JavaScript
import { access } from '../src/parse.js'
import { operator, compile, prop } from '../src/compile.js'
import { PREC_ACCESS } from '../src/const.js'
// a(b,c,d), a()
access('()', PREC_ACCESS)
operator('()', (a, b, args) => b !== undefined && (
args = !b ? () => [] : // a()
b[0] === ',' ? (b = b.slice(1).map(b => !b ? err() : compile(b)), ctx => b.map(arg => arg(ctx))) : // a(b,c)
(b = compile(b), ctx => [b(ctx)]), // a(b)
// a(...args), a.b(...args), a[b](...args)
prop(a, (obj, path, ctx) => obj[path](...args(ctx)), true)
)
)