blob: e957df9ebb98d4d20efad46b47475c7d71c83e9d [file] [log] [blame]
#include "napi.h"
#include "test_helper.h"
using namespace Napi;
namespace {
Value RunPlainString(const CallbackInfo& info) {
Env env = info.Env();
return MaybeUnwrap(env.RunScript("1 + 2 + 3"));
}
Value RunStdString(const CallbackInfo& info) {
Env env = info.Env();
std::string str = "1 + 2 + 3";
return MaybeUnwrap(env.RunScript(str));
}
Value RunJsString(const CallbackInfo& info) {
Env env = info.Env();
return MaybeUnwrapOr(env.RunScript(info[0].UnsafeAs<String>()), Value());
}
Value RunWithContext(const CallbackInfo& info) {
Env env = info.Env();
Array keys = MaybeUnwrap(info[1].As<Object>().GetPropertyNames());
std::string code = "(";
for (unsigned int i = 0; i < keys.Length(); i++) {
if (i != 0) code += ",";
code += MaybeUnwrap(keys.Get(i)).As<String>().Utf8Value();
}
code += ") => " + info[0].As<String>().Utf8Value();
Value ret = MaybeUnwrap(env.RunScript(code));
Function fn = ret.As<Function>();
std::vector<napi_value> args;
for (unsigned int i = 0; i < keys.Length(); i++) {
Value key = MaybeUnwrap(keys.Get(i));
args.push_back(MaybeUnwrap(info[1].As<Object>().Get(key)));
}
return MaybeUnwrap(fn.Call(args));
}
} // end anonymous namespace
Object InitRunScript(Env env) {
Object exports = Object::New(env);
exports["plainString"] = Function::New(env, RunPlainString);
exports["stdString"] = Function::New(env, RunStdString);
exports["jsString"] = Function::New(env, RunJsString);
exports["withContext"] = Function::New(env, RunWithContext);
return exports;
}