| 88 | } |
| 89 | |
| 90 | bool v8_regex_provider::regex_match(std::string_view input, |
| 91 | const tns::v8_regex_provider::regex_type &pattern) { |
| 92 | auto isolate = v8::Isolate::GetCurrent(); |
| 93 | if (isolate == nullptr) { |
| 94 | return false; |
| 95 | } |
| 96 | |
| 97 | v8::Local<v8::String> local_input; |
| 98 | if (!v8::String::NewFromUtf8( |
| 99 | isolate, input.data(), v8::NewStringType::kNormal, input.size()) |
| 100 | .ToLocal(&local_input)) { |
| 101 | return false; |
| 102 | } |
| 103 | |
| 104 | |
| 105 | auto patt = pattern.Get(isolate); |
| 106 | if (patt.IsEmpty()) { |
| 107 | return false; |
| 108 | } |
| 109 | v8::Local<v8::Object> matches; |
| 110 | |
| 111 | if (!patt->Exec(isolate->GetCurrentContext(), local_input).ToLocal( |
| 112 | &matches)) { |
| 113 | return false; |
| 114 | } |
| 115 | |
| 116 | return !matches->IsNull(); |
| 117 | } |
| 118 | |
| 119 | URLPatternImpl::URLPatternImpl(url_pattern<v8_regex_provider> pattern) |
| 120 | : pattern_(std::move(pattern)) {} |