/** * The js expression allows to execute a javascript expression. This is very useful when you have specific requirements that are not addressed by the expressions available here. * * @remarks * It takes 1 arguments. * * js() * * - **** is a a string * * ## Usage * * - `js('Date.now()')` - returns the current time. * */ import {BaseMethod} from './_Base'; export class JsExpression extends BaseMethod { private _function: Function | undefined; static required_arguments() { return [['string', 'javascript expression']]; } async process_arguments(args: any[]): Promise { let val: any = 0; if (args.length == 1) { const arg = args[0]; this._function = this._function || this._create_function(arg); if (this._function) { try { val = this._function(this.param.scene(), this.param.node, this.param); } catch (e) { console.warn(`expression error`); console.warn(e); } } } return val; } private _create_function(content: string) { return new Function('scene', 'node', 'param', `return ${content}`); } }