Jinter
A tiny JavaScript interpreter written in TypeScript
> Note: This project was originally developed for use in YouTube.js. ## Table of Contents - Installation - Usage - API -evaluate(input: string)
- visitor
- scope
- License
## Installation
sh
npm install jintr
## Usage
Execute some JavaScript code:
ts
// const Jinter = require('jintr').default;
import { Jinter } from 'jintr';
const code = `
function sayHiTo(person) {
console.log('Hi ' + person + '!');
}
sayHiTo('mom');
`
const jinter = new Jinter();
jinter.evaluate(code);
---
Inject your own functions, objects, etc:
ts
import { Jinter } from 'jintr';
const jinter = new Jinter();
const code = `
console.log(new SomeClass().a);
console.log('hello'.toArray());
function myFn() {
console.log('[myFn]: Who called me?');
}
myFn();
`;
class SomeClass {
constructor() {
this.a = 'this is a test';
}
}
jinter.defineObject('SomeClass', SomeClass);
// Ex: str.toArray();
jinter.visitor.on('toArray', (node, visitor) => {
if (node.type === 'CallExpression' && node.callee.type === 'MemberExpression') {
const obj = visitor.visitNode(node.callee.object);
return obj.split('');
}
});
// Intercept function calls
jinter.visitor.on('myFn', (node) => {
if (node.type == 'CallExpression')
console.info('myFn was called!');
return '__continue_exec';
});
jinter.evaluate(code);
For more examples see /test
and /examples
.
## API
Jinter()
evaluate(input: string)
visitor
scope
### evaluate(input: string)
Evaluates the given JavaScript code.
### visitor
The node visitor. This is responsible for walking the AST and executing the nodes.
### scope
Represents the global scope of the program.
## License
Distributed under the MIT License.