code: function evaluateScript(script, data, shouldExpandMacros) {
    if (shouldExpandMacros !== false)
      this.expandMacros(script);
    var wrapped = { script: script };
    var valid;
    try {
      valid = this._evaluate.call(new Evaluation(this, script, data, '/script'), wrapped);
    } catch(e) {
      return Promise.reject(e);
    }
    if (!valid) return Promise.reject(new Ajv.ValidationError(this._evaluate.errors));
    script = wrapped.script;
    if (script && typeof script.then == 'function') return script;
    return Promise.resolve(script);
  }
docs: evaluates script
  @this   JSONScript
  @param  {Any} script any valid script
  @param  {Any} data   data instance that can be referenced from the script
  @param  {Boolean} shouldExpandMacros true by default, pass false to skip macro expansion
  @return {Any} evaluation result