@@ -22,13 +22,6 @@ using v8::Object;
22
22
using v8::String;
23
23
using v8::Value;
24
24
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
-
32
25
namespace url {
33
26
namespace {
34
27
@@ -45,20 +38,25 @@ enum url_update_action {
45
38
kHref = 9 ,
46
39
};
47
40
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 ();
51
43
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
+ };
62
60
}
63
61
64
62
void Parse (const FunctionCallbackInfo<Value>& args) {
@@ -89,10 +87,9 @@ void Parse(const FunctionCallbackInfo<Value>& args) {
89
87
return args.GetReturnValue ().Set (false );
90
88
}
91
89
92
- Local<Value> argv[10 ];
93
- SetArgs (env, &argv, out);
90
+ auto argv = GetCallbackArgs (env, out);
94
91
USE (success_callback_->Call (
95
- env->context (), args.This (), arraysize ( argv), argv));
92
+ env->context (), args.This (), argv. size ( ), argv. data () ));
96
93
args.GetReturnValue ().Set (true );
97
94
}
98
95
@@ -223,10 +220,9 @@ void UpdateUrl(const FunctionCallbackInfo<Value>& args) {
223
220
}
224
221
}
225
222
226
- Local<Value> argv[10 ];
227
- SetArgs (env, &argv, out);
223
+ auto argv = GetCallbackArgs (env, out);
228
224
USE (success_callback_->Call (
229
- env->context (), args.This (), arraysize ( argv), argv));
225
+ env->context (), args.This (), argv. size ( ), argv. data () ));
230
226
args.GetReturnValue ().Set (result);
231
227
}
232
228
0 commit comments