| #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; |
| } |