@@ -22,13 +22,6 @@ using v8::Object;
2222using v8::String;
2323using v8::Value;
2424
25- Local<String> Utf8String(Isolate* isolate, const std::string& str) {
26- return String::NewFromUtf8(isolate,
27- str.data(),
28- NewStringType::kNormal,
29- str.length()).ToLocalChecked();
30- }
31-
3225namespace url {
3326namespace {
3427
@@ -45,20 +38,25 @@ enum url_update_action {
4538 kHref = 9,
4639};
4740
48- void SetArgs(Environment* env,
49- Local<Value> (*argv)[10],
50- const ada::result& url) {
41+ auto GetCallbackArgs(Environment* env, const ada::result& url) {
42+ Local<Context> context = env->context();
5143 Isolate* isolate = env->isolate();
52- (*argv)[0] = Utf8String(isolate, url->get_href());
53- (*argv)[1] = Utf8String(isolate, url->get_origin());
54- (*argv)[2] = Utf8String(isolate, url->get_protocol());
55- (*argv)[3] = Utf8String(isolate, url->get_hostname());
56- (*argv)[4] = Utf8String(isolate, url->get_pathname());
57- (*argv)[5] = Utf8String(isolate, url->get_search());
58- (*argv)[6] = Utf8String(isolate, url->get_username());
59- (*argv)[7] = Utf8String(isolate, url->get_password());
60- (*argv)[8] = Utf8String(isolate, url->get_port());
61- (*argv)[9] = Utf8String(isolate, url->get_hash());
44+
45+ auto js_string = [&](std::string_view sv) {
46+ return ToV8Value(context, sv, isolate).ToLocalChecked();
47+ };
48+ return std::array{
49+ js_string(url->get_href()),
50+ js_string(url->get_origin()),
51+ js_string(url->get_protocol()),
52+ js_string(url->get_hostname()),
53+ js_string(url->get_pathname()),
54+ js_string(url->get_search()),
55+ js_string(url->get_username()),
56+ js_string(url->get_password()),
57+ js_string(url->get_port()),
58+ js_string(url->get_hash()),
59+ };
6260}
6361
6462void Parse(const FunctionCallbackInfo<Value>& args) {
@@ -89,10 +87,9 @@ void Parse(const FunctionCallbackInfo<Value>& args) {
8987 return args.GetReturnValue().Set(false);
9088 }
9189
92- Local<Value> argv[10];
93- SetArgs(env, &argv, out);
90+ auto argv = GetCallbackArgs(env, out);
9491 USE(success_callback_->Call(
95- env->context(), args.This(), arraysize( argv), argv));
92+ env->context(), args.This(), argv.size( ), argv.data() ));
9693 args.GetReturnValue().Set(true);
9794}
9895
@@ -223,10 +220,9 @@ void UpdateUrl(const FunctionCallbackInfo<Value>& args) {
223220 }
224221 }
225222
226- Local<Value> argv[10];
227- SetArgs(env, &argv, out);
223+ auto argv = GetCallbackArgs(env, out);
228224 USE(success_callback_->Call(
229- env->context(), args.This(), arraysize( argv), argv));
225+ env->context(), args.This(), argv.size( ), argv.data() ));
230226 args.GetReturnValue().Set(result);
231227}
232228
0 commit comments