nodejs / nodejs/node

url: URLPattern.exec() does not preserve capture group declaration order

Ouverte
#64,734 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
JavaScript
Étoiles
122k
Forks
37.3k
Merge moyen
4 j 2 h
PR mergées (30 j)
283

Description

Version

latest main branch

Platform
7.1.4-arch1-1
Subsystem

url

What steps will reproduce the bug?
  const assert = require('node:assert');
  const { URLPattern } = require('node:url');

  const pattern = new URLPattern({
    pathname: '/:one/:two/:three',
  });

  const result = pattern.exec('https://example.com/a/b/c');

  console.log(Object.entries(result.pathname.groups));
How often does it reproduce? Is there a required condition?

Every

What is the expected behavior? Why is that the expected behavior?
  [
    ['one', 'a'],
    ['two', 'b'],
    ['three', 'c'],
  ]

URLPattern.exec() may expose named capture groups in an order different from their declaration order.

The captured values remain accessible by name, but the incorrect property insertion order is observable through Object.keys(), Object.values(), Object.entries(), object spread, and JSON serialization.

What do you see instead?

  [
    ['three', 'c'],
    ['two', 'b'],
    ['one', 'a'],
  ]
Additional information

No response

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la reproduction avec URLPattern.exec() de node:url et examinez l’objet pathname.groups obtenu. Suivez l’implémentation de URLPattern et ses tests afin d’identifier comment les groupes nommés sont insérés ; le travail est considéré comme terminé lorsque les groupes apparaissent dans l’ordre de déclaration tout en restant accessibles par leur nom, avec une couverture de régression pour l’exemple.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
javascript
Domaine
api
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
68/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.