@@ -93,6 +93,30 @@ void Parse(const FunctionCallbackInfo<Value>& args) {
93
93
args.GetReturnValue ().Set (true );
94
94
}
95
95
96
+ void CanParse (const FunctionCallbackInfo<Value>& args) {
97
+ CHECK_GE (args.Length (), 2 );
98
+ CHECK (args[0 ]->IsString ()); // input
99
+ // args[1] // base url
100
+
101
+ Environment* env = Environment::GetCurrent (args);
102
+ HandleScope handle_scope (env->isolate ());
103
+ Context::Scope context_scope (env->context ());
104
+
105
+ Utf8Value input (env->isolate (), args[0 ]);
106
+ ada::result base;
107
+ ada::url* base_pointer = nullptr ;
108
+ if (args[1 ]->IsString ()) {
109
+ base = ada::parse (Utf8Value (env->isolate (), args[1 ]).ToString ());
110
+ if (!base) {
111
+ return args.GetReturnValue ().Set (false );
112
+ }
113
+ base_pointer = &base.value ();
114
+ }
115
+ ada::result out = ada::parse (input.ToStringView (), base_pointer);
116
+
117
+ args.GetReturnValue ().Set (out.has_value ());
118
+ }
119
+
96
120
void DomainToASCII (const FunctionCallbackInfo<Value>& args) {
97
121
Environment* env = Environment::GetCurrent (args);
98
122
CHECK_GE (args.Length (), 1 );
@@ -285,6 +309,7 @@ void Initialize(Local<Object> target,
285
309
void * priv) {
286
310
SetMethod (context, target, " parse" , Parse);
287
311
SetMethod (context, target, " updateUrl" , UpdateUrl);
312
+ SetMethodNoSideEffect (context, target, " canParse" , CanParse);
288
313
SetMethodNoSideEffect (context, target, " formatUrl" , FormatUrl);
289
314
290
315
SetMethodNoSideEffect (context, target, " domainToASCII" , DomainToASCII);
@@ -294,6 +319,7 @@ void Initialize(Local<Object> target,
294
319
295
320
void RegisterExternalReferences (ExternalReferenceRegistry* registry) {
296
321
registry->Register (Parse);
322
+ registry->Register (CanParse);
297
323
registry->Register (UpdateUrl);
298
324
registry->Register (FormatUrl);
299
325
0 commit comments