@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
44 lines (36 loc) • 1.22 kB
text/typescript
import {BaseParamType} from '../../params/_Base';
import {ParsedTree} from './ParsedTree';
import jsep from 'jsep';
const ARGUMENTS_SEPARATOR = ', ';
import {BaseTraverser} from './_Base';
export class ExpressionStringGenerator extends BaseTraverser {
constructor(public override param: BaseParamType) {
super(param);
}
parseTree(parsedTree: ParsedTree) {
const node = parsedTree.node();
if (parsedTree.errorMessage() == null && node) {
try {
return this.traverse_node(node);
} catch (e) {
this.setError('could not traverse tree');
}
} else {
this.setError('cannot parse tree');
}
}
protected traverse_CallExpression(node: jsep.CallExpression): string {
const methodArguments = node.arguments.map((arg) => {
return this.traverse_node(arg);
});
const argumentsJoined = `${methodArguments.join(ARGUMENTS_SEPARATOR)}`;
const methodName = (node.callee as jsep.Identifier).name;
return `${methodName}(${argumentsJoined})`;
}
protected traverse_UnaryExpression(node: jsep.UnaryExpression): string {
return `${node.operator}${this.traverse_node(node.argument)}`; // -5
}
protected traverse_Identifier(node: jsep.Identifier): string {
return `${node.name}`;
}
}