Safe and Easy Expression Evaluation for Node.js
jshiki provides a safe and simple way to evaluate expressions without worrying about external data being overwritten or accessed in unexpected ways. jshiki only has one lightweight dependency, acorn, which it uses parse expressions.
Basic Usage
const jshiki = require('jshiki')
let result = jshiki.evaluate('(5 + 7) / 3') // result => 4
// or
let expression = jshiki.parse('(5 + 7) / 3')
result = expression() // result => 4
Accessing data
const code = "`Hello! My name's ${name.trim()}`"
expression = jshiki.parse(code)
result = expression({ name: ' Azumi ' })
// result => "Hello! My name's Azumi"
// or
result = jshiki.evaluate(code, {
scope: { name: ' Azumi ' },
})
// result => "Hello! My name's Azumi"
Asynchronous evaluation
const asyncCode = "`I'm ${await status()}...`"
expression = jshiki.parseAsync(asyncCode)
result = await expression({
status: async () => 'waiting',
})
// result => "I'm waiting..."
// or
result = await jshiki.evaluateAsync(asyncCode, {
scope: { status: async () => 'waiting' },
})
// result => "I'm waiting..."
For more examples, features, and information on how to use jshiki, see the documentation.
Discussion
Discuss jshiki on GitHub discussions. Make sure to follow the code of conduct.
Contributing
If you're looking for a way to contribute to jshiki, see the contribution guide.