@@ -462,48 +462,17 @@ URLPattern::URLPatternOptions::FromJsObject(Environment* env,
462462 // by returning std::nullopt.
463463 return std::nullopt ;
464464 }
465- return options;
466- }
467-
468- MaybeLocal<Value> URLPattern::Hash () const {
469- auto context = env ()->context ();
470- return ToV8Value (context, url_pattern_.get_hash ());
471- }
472-
473- MaybeLocal<Value> URLPattern::Hostname () const {
474- auto context = env ()->context ();
475- return ToV8Value (context, url_pattern_.get_hostname ());
476- }
477-
478- MaybeLocal<Value> URLPattern::Password () const {
479- auto context = env ()->context ();
480- return ToV8Value (context, url_pattern_.get_password ());
481- }
482-
483- MaybeLocal<Value> URLPattern::Pathname () const {
484- auto context = env ()->context ();
485- return ToV8Value (context, url_pattern_.get_pathname ());
486- }
487-
488- MaybeLocal<Value> URLPattern::Port () const {
489- auto context = env ()->context ();
490- return ToV8Value (context, url_pattern_.get_port ());
491- }
492-
493- MaybeLocal<Value> URLPattern::Protocol () const {
494- auto context = env ()->context ();
495- return ToV8Value (context, url_pattern_.get_protocol ());
496- }
497465
498- MaybeLocal<Value> URLPattern::Search () const {
499- auto context = env ()->context ();
500- return ToV8Value (context, url_pattern_.get_search ());
466+ return options;
501467}
502468
503- MaybeLocal<Value> URLPattern::Username () const {
504- auto context = env ()->context ();
505- return ToV8Value (context, url_pattern_.get_username ());
506- }
469+ #define URL_PATTERN_COMPONENT_GETTERS (uppercase_name, lowercase_name ) \
470+ MaybeLocal<Value> URLPattern::uppercase_name () const { \
471+ auto context = env ()->context (); \
472+ return ToV8Value (context, url_pattern_.get_ ##lowercase_name ()); \
473+ }
474+ URL_PATTERN_COMPONENTS (URL_PATTERN_COMPONENT_GETTERS)
475+ #undef URL_PATTERN_COMPONENT_GETTERS
507476
508477bool URLPattern::HasRegExpGroups () const {
509478 return url_pattern_.has_regexp_groups ();
@@ -616,77 +585,17 @@ void URLPattern::Test(const FunctionCallbackInfo<Value>& args) {
616585 args.GetReturnValue ().Set (url_pattern->Test (env, input, baseURL_opt));
617586}
618587
619- void URLPattern::Protocol (const FunctionCallbackInfo<Value>& info) {
620- URLPattern* url_pattern;
621- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
622- Local<Value> result;
623- if (url_pattern->Protocol ().ToLocal (&result)) {
624- info.GetReturnValue ().Set (result);
625- }
626- }
627-
628- void URLPattern::Username (const FunctionCallbackInfo<Value>& info) {
629- URLPattern* url_pattern;
630- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
631- Local<Value> result;
632- if (url_pattern->Username ().ToLocal (&result)) {
633- info.GetReturnValue ().Set (result);
634- }
635- }
636-
637- void URLPattern::Password (const FunctionCallbackInfo<Value>& info) {
638- URLPattern* url_pattern;
639- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
640- Local<Value> result;
641- if (url_pattern->Password ().ToLocal (&result)) {
642- info.GetReturnValue ().Set (result);
643- }
644- }
645-
646- void URLPattern::Hostname (const FunctionCallbackInfo<Value>& info) {
647- URLPattern* url_pattern;
648- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
649- Local<Value> result;
650- if (url_pattern->Hostname ().ToLocal (&result)) {
651- info.GetReturnValue ().Set (result);
652- }
653- }
654-
655- void URLPattern::Port (const FunctionCallbackInfo<Value>& info) {
656- URLPattern* url_pattern;
657- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
658- Local<Value> result;
659- if (url_pattern->Port ().ToLocal (&result)) {
660- info.GetReturnValue ().Set (result);
661- }
662- }
663-
664- void URLPattern::Pathname (const FunctionCallbackInfo<Value>& info) {
665- URLPattern* url_pattern;
666- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
667- Local<Value> result;
668- if (url_pattern->Pathname ().ToLocal (&result)) {
669- info.GetReturnValue ().Set (result);
670- }
671- }
672-
673- void URLPattern::Search (const FunctionCallbackInfo<Value>& info) {
674- URLPattern* url_pattern;
675- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
676- Local<Value> result;
677- if (url_pattern->Search ().ToLocal (&result)) {
678- info.GetReturnValue ().Set (result);
679- }
680- }
681-
682- void URLPattern::Hash (const FunctionCallbackInfo<Value>& info) {
683- URLPattern* url_pattern;
684- ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ());
685- Local<Value> result;
686- if (url_pattern->Hash ().ToLocal (&result)) {
687- info.GetReturnValue ().Set (result);
588+ #define URL_PATTERN_COMPONENT_GETTERS (uppercase_name, lowercase_name ) \
589+ void URLPattern::uppercase_name (const FunctionCallbackInfo<Value>& info) { \
590+ URLPattern* url_pattern; \
591+ ASSIGN_OR_RETURN_UNWRAP (&url_pattern, info.This ()); \
592+ Local<Value> result; \
593+ if (url_pattern->uppercase_name ().ToLocal (&result)) { \
594+ info.GetReturnValue ().Set (result); \
595+ } \
688596 }
689- }
597+ URL_PATTERN_COMPONENTS (URL_PATTERN_COMPONENT_GETTERS)
598+ #undef URL_PATTERN_COMPONENT_GETTERS
690599
691600void URLPattern::HasRegexpGroups (const FunctionCallbackInfo<Value>& info) {
692601 URLPattern* url_pattern;
@@ -696,14 +605,10 @@ void URLPattern::HasRegexpGroups(const FunctionCallbackInfo<Value>& info) {
696605
697606static void RegisterExternalReferences (ExternalReferenceRegistry* registry) {
698607 registry->Register (URLPattern::New);
699- registry->Register (URLPattern::Protocol);
700- registry->Register (URLPattern::Username);
701- registry->Register (URLPattern::Password);
702- registry->Register (URLPattern::Hostname);
703- registry->Register (URLPattern::Port);
704- registry->Register (URLPattern::Pathname);
705- registry->Register (URLPattern::Search);
706- registry->Register (URLPattern::Hash);
608+ #define URL_PATTERN_COMPONENT_GETTERS (uppercase_name, _ ) \
609+ registry->Register (URLPattern::uppercase_name);
610+ URL_PATTERN_COMPONENTS (URL_PATTERN_COMPONENT_GETTERS)
611+ #undef URL_PATTERN_COMPONENT_GETTERS
707612 registry->Register (URLPattern::HasRegexpGroups);
708613 registry->Register (URLPattern::Exec);
709614 registry->Register (URLPattern::Test);
@@ -726,61 +631,18 @@ static void Initialize(Local<Object> target,
726631 auto signature = Signature::New (isolate, ctor_tmpl);
727632
728633 instance_template->SetInternalFieldCount (URLPattern::kInternalFieldCount );
729- prototype_template->SetAccessorProperty (
730- env->protocol_string (),
731- FunctionTemplate::New (
732- isolate, URLPattern::Protocol, Local<Value>(), signature),
733- Local<FunctionTemplate>(),
734- attributes);
735-
736- prototype_template->SetAccessorProperty (
737- env->username_string (),
738- FunctionTemplate::New (
739- isolate, URLPattern::Username, Local<Value>(), signature),
740- Local<FunctionTemplate>(),
741- attributes);
742-
743- prototype_template->SetAccessorProperty (
744- env->password_string (),
745- FunctionTemplate::New (
746- isolate, URLPattern::Password, Local<Value>(), signature),
747- Local<FunctionTemplate>(),
748- attributes);
749-
750- prototype_template->SetAccessorProperty (
751- env->hostname_string (),
752- FunctionTemplate::New (
753- isolate, URLPattern::Hostname, Local<Value>(), signature),
754- Local<FunctionTemplate>(),
755- attributes);
756-
757- prototype_template->SetAccessorProperty (
758- env->port_string (),
759- FunctionTemplate::New (
760- isolate, URLPattern::Port, Local<Value>(), signature),
761- Local<FunctionTemplate>(),
762- attributes);
763634
764- prototype_template->SetAccessorProperty (
765- env->pathname_string (),
766- FunctionTemplate::New (
767- isolate, URLPattern::Pathname, Local<Value>(), signature),
768- Local<FunctionTemplate>(),
769- attributes);
770-
771- prototype_template->SetAccessorProperty (
772- env->search_string (),
773- FunctionTemplate::New (
774- isolate, URLPattern::Search, Local<Value>(), signature),
775- Local<FunctionTemplate>(),
776- attributes);
777-
778- prototype_template->SetAccessorProperty (
779- env->hash_string (),
780- FunctionTemplate::New (
781- isolate, URLPattern::Hash, Local<Value>(), signature),
782- Local<FunctionTemplate>(),
635+ #define ENV_GETTER (lowercase_name ) env->lowercase_name##_string()
636+ #define URL_PATTERN_COMPONENT_GETTERS (uppercase_name, lowercase_name ) \
637+ prototype_template->SetAccessorProperty ( \
638+ ENV_GETTER (lowercase_name), \
639+ FunctionTemplate::New ( \
640+ isolate, URLPattern::uppercase_name, Local<Value>(), signature), \
641+ Local<FunctionTemplate>(), \
783642 attributes);
643+ URL_PATTERN_COMPONENTS (URL_PATTERN_COMPONENT_GETTERS)
644+ #undef URL_PATTERN_COMPONENT_GETTERS
645+ #undef ENV_GETTER
784646
785647 prototype_template->SetAccessorProperty (
786648 env->has_regexp_groups_string (),
0 commit comments