diff --git a/src/node_url_pattern.cc b/src/node_url_pattern.cc index 571413b47da12d..bc007db47daca6 100644 --- a/src/node_url_pattern.cc +++ b/src/node_url_pattern.cc @@ -446,13 +446,13 @@ MaybeLocal URLPattern::URLPatternComponentResult::ToJSObject( auto tmpl = env->urlpatterncomponentresult_template(); if (tmpl.IsEmpty()) { static constexpr std::string_view namesVec[] = { - "input", "groups", + "input", }; tmpl = DictionaryTemplate::New(isolate, namesVec); env->set_urlpatterncomponentresult_template(tmpl); } - MaybeLocal values[] = {input, parsed_group}; + MaybeLocal values[] = {parsed_group, input}; return NewDictionaryInstance(env->context(), tmpl, values); } @@ -463,15 +463,15 @@ MaybeLocal URLPattern::URLPatternResult::ToJSValue( auto tmpl = env->urlpatternresult_template(); if (tmpl.IsEmpty()) { static constexpr std::string_view namesVec[] = { + "hash", + "hostname", "inputs", - "protocol", - "username", "password", - "hostname", - "port", "pathname", + "port", + "protocol", "search", - "hash", + "username", }; tmpl = DictionaryTemplate::New(isolate, namesVec); env->set_urlpatternresult_template(tmpl); @@ -479,6 +479,8 @@ MaybeLocal URLPattern::URLPatternResult::ToJSValue( size_t index = 0; MaybeLocal vals[] = { + URLPatternComponentResult::ToJSObject(env, result.hash), + URLPatternComponentResult::ToJSObject(env, result.hostname), Array::New(env->context(), result.inputs.size(), [&index, &inputs = result.inputs, env]() { @@ -493,14 +495,12 @@ MaybeLocal URLPattern::URLPatternResult::ToJSValue( return URLPatternInit::ToJsObject(env, init); } }), - URLPatternComponentResult::ToJSObject(env, result.protocol), - URLPatternComponentResult::ToJSObject(env, result.username), URLPatternComponentResult::ToJSObject(env, result.password), - URLPatternComponentResult::ToJSObject(env, result.hostname), - URLPatternComponentResult::ToJSObject(env, result.port), URLPatternComponentResult::ToJSObject(env, result.pathname), + URLPatternComponentResult::ToJSObject(env, result.port), + URLPatternComponentResult::ToJSObject(env, result.protocol), URLPatternComponentResult::ToJSObject(env, result.search), - URLPatternComponentResult::ToJSObject(env, result.hash)}; + URLPatternComponentResult::ToJSObject(env, result.username)}; return NewDictionaryInstanceNullProto(env->context(), tmpl, vals); } diff --git a/test/parallel/test-urlpattern.js b/test/parallel/test-urlpattern.js index 96c431f5b87f69..42bdd114f43d18 100644 --- a/test/parallel/test-urlpattern.js +++ b/test/parallel/test-urlpattern.js @@ -26,3 +26,27 @@ assert.throws(() => { }, { message: 'boom' }); + +{ + const result = new URLPattern({ pathname: '/:value' }) + .exec('https://example.com/test'); + + assert.deepStrictEqual(Object.keys(result), [ + 'hash', + 'hostname', + 'inputs', + 'password', + 'pathname', + 'port', + 'protocol', + 'search', + 'username', + ]); + assert.deepStrictEqual(Object.keys(result.pathname), [ + 'groups', + 'input', + ]); + assert.strictEqual(result.hostname.input, 'example.com'); + assert.strictEqual(result.pathname.input, '/test'); + assert.strictEqual(result.pathname.groups.value, 'test'); +}