New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

jep

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jep

"Javascript Expression Parser" (JEP) is tiny library used to evaluate expression to javascript function

latest
Source
npmnpm
Version
4.0.0
Version published
Maintainers
1
Created
Source

Javascript Expression Parser

Build Status npm version js-standard-style

简介

JEP (Javascript Expression Parser) 是一个十分小巧的库,用于将 JavaScript 表达式解析为 JavaScript 函数。

优势:

  • 底层转换使用 Function,比 eval 快。
  • 内置最近最少使用算法(LRU),缓存解析结果,减少解析次数。
  • 支持解析至函数字符串,方便预编译。

安装

npm install --save jep

使用

快速上手

try: CodePen JSFiddle

const jep = new JEP()

const fun = jep.make('a + 2 === 3')
const result = fun({a: 1})

console.log(result)
// true

使用参数

try: CodePen JSFiddle

const jep = new JEP({params: ['$', 'SQUARE_METER']})

const scope = {
  radius: 3,
  square (n) {
    return n * n
  },
  fixed (numObj, num) {
    return numObj.toFixed(num)
  },
}
const SQUARE_METER = 'm²'

const source = 'fixed((Math.PI + square(radius)), 2) + SQUARE_METER'
const result = jep.make(source)(scope, SQUARE_METER)

console.log(result)
// 12.14m²

API

参数

const jep = new JEP({
  cache: 1000,
  scope: '$',
  params: ['$', 'other_param'],
})

cache: Number 类型,jep 内部使用 LRU 缓存解析过的表达式,cache 表示最大缓存数,默认 1000

scope: String 类型,在已解析的表达式或函数中,用于表示 scope 的变量名,默认 '$'

const jep = new JEP()
const parsed = jep.parse('a + b')
console.log(parsed)
// $.a+$.b

params: Array 类型,该数组中每一项都为 String 类型,执行函数时需要依次传入对应的参数。 第一个必须为 scope 对应的变量名。其余变量名,在表达式中可以直接被访问。

const jep = new JEP({
  params: ['$', 'other'],
})
const scope = {a: 1}
const other = {a: 2}
const result = jep.make('a + other.a')(scope, other)
console.log(result)
// 3

方法

parse: 参数为 String 类型的待编译的表达式,返回编译好的 String 类型表达式

const jep = new JEP()
const source = 'a + b'
const expression = jep.parse(source)
console.log(expression)
// $.a+$.b

build: 参数为 String 类型的已编译表达式,返回编译好的 Function (成功) 或 undefined (失败)

const jep = new JEP()
const source = 'a + b'
const expression = jep.parse(source) // $.a+$.b
const fun = jep.build(expression) // 返回函数,类似 function($){return $.a+$.b}
const result = fun({a: 1, b: 2})
console.log(result)
// 3

buildToString: 和 build 类似,参数为 String 类型的已编译表达式,返回的是函数字符串

const jep = new JEP()
const expression = jep.parse('a + b') // $.a+$.b
const funString = jep.buildToString(expression)
console.log(funString)
// function($){return $.a+$.b}

make: 和 build 类似,参数为 String 类型的待编译表达式,返回编译好的 Function (成功) 或 undefined (失败)

const jep = new JEP()
const source = 'a + b'
const fun = jep.make(source) // 返回函数,类似 function($){return $.a+$.b}
const result = fun({a: 1, b: 2})
console.log(result)
// 3

makeToString: 和 make 类似,参数为 String 类型的待编译表达式,返回的是函数字符串

const jep = new JEP()
const funString = jep.makeToString('a + b')
console.log(funString)
// function($){return $.a+$.b}

License

MIT

Keywords

eval

FAQs

Package last updated on 21 Dec 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts