| 83 | } |
| 84 | |
| 85 | void URLImpl::Ctor(const v8::FunctionCallbackInfo<v8::Value> &args) { |
| 86 | auto count = args.Length(); |
| 87 | auto value = args[0]; |
| 88 | auto isolate = args.GetIsolate(); |
| 89 | auto context = isolate->GetCurrentContext(); |
| 90 | if (count >= 1 && !value->IsString()) { |
| 91 | isolate->ThrowException( |
| 92 | v8::Exception::TypeError(v8::String::Empty(isolate))); |
| 93 | return; |
| 94 | } |
| 95 | |
| 96 | url_aggregator url; |
| 97 | |
| 98 | auto url_string = ArgConverter::ConvertToString(args[0].As<v8::String>()); |
| 99 | |
| 100 | if (count > 1) { |
| 101 | if (args[1]->IsString()) { |
| 102 | auto base_string = ArgConverter::ConvertToString(args[1].As<v8::String>()); |
| 103 | std::string_view base_string_view(base_string.data(), base_string.length()); |
| 104 | |
| 105 | if (!can_parse(url_string, &base_string_view)) { |
| 106 | isolate->ThrowException( |
| 107 | v8::Exception::TypeError(v8::String::Empty(isolate))); |
| 108 | return; |
| 109 | } |
| 110 | auto base_url = ada::parse<ada::url_aggregator>(base_string_view, nullptr); |
| 111 | |
| 112 | auto result = ada::parse<ada::url_aggregator>(url_string, &base_url.value()); |
| 113 | |
| 114 | if (result) { |
| 115 | url = result.value(); |
| 116 | } else { |
| 117 | isolate->ThrowException( |
| 118 | v8::Exception::TypeError(v8::String::Empty(isolate))); |
| 119 | return; |
| 120 | } |
| 121 | } else if (args[1]->IsObject()) { |
| 122 | auto base_string = ArgConverter::ConvertToString( |
| 123 | args[1]->ToString(context).ToLocalChecked()); |
| 124 | std::string_view base_string_view(base_string.data(), base_string.length()); |
| 125 | if (!can_parse(std::string_view(url_string.data(), url_string.length()), |
| 126 | &base_string_view)) { |
| 127 | isolate->ThrowException( |
| 128 | v8::Exception::TypeError(v8::String::Empty(isolate))); |
| 129 | return; |
| 130 | } |
| 131 | |
| 132 | |
| 133 | auto base_url = ada::parse<ada::url_aggregator>(base_string_view, nullptr); |
| 134 | |
| 135 | auto result = ada::parse<ada::url_aggregator>(url_string, &base_url.value()); |
| 136 | |
| 137 | if (result) { |
| 138 | url = result.value(); |
| 139 | } else { |
| 140 | isolate->ThrowException( |
| 141 | v8::Exception::TypeError(v8::String::Empty(isolate))); |
| 142 | return; |
nothing calls this directly
no test coverage detected