`dasherize` mangles mid-name and trailing acronyms (`CopyURLElement` throws `SyntaxError`, `@attr URL` -> `data-ur-l`)
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 78/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- typescript, web-dev
- Domínio
- frontend
Direção de pesquisa
O bug está em src/dasherize.ts, onde a regex .replace(/([A-Z]($|[a-z]))/g, '-$1') decide onde ficam os hífens. Comece lendo essa função e execute o script de reprodução da issue contra lib/dasherize.js para ver as saídas erradas. Está pronto quando UserIDListElement, CopyURLElement, mySVGIcon, srcURL, data-URL e data-srcURL produzirem as formas com hífen esperadas listadas na issue, com testes cobrindo esses casos.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
dasherize only treats an acronym as a single word when it starts the identifier (URLBar -> url-bar, added in #44), mangling acronyms in the middle or at the end of controller class names and @attr property names.
npm install @github/[email protected]
node --input-type=module -e '
import { dasherize } from "@github/catalyst/lib/dasherize.js";
for (const s of ["UserIDListElement", "CopyURLElement", "mySVGIcon", "srcURL", "data-URL", "data-srcURL"]) {
console.log(s, "->", dasherize(s));
}
'
Actual:
UserIDListElement -> userid-list-element
CopyURLElement -> copyurl-element
mySVGIcon -> mysvg-icon
srcURL -> srcur-l
data-URL -> data-ur-l
data-srcURL -> data-srcur-l
Expected:
UserIDListElement -> user-id-list-element
CopyURLElement -> copy-url-element
mySVGIcon -> my-svg-icon
srcURL -> src-url
data-URL -> data-url
data-srcURL -> data-src-url
In a browser, @controller class UserIDListElement registers <userid-list>, @controller class CopyURLElement throws DOMException: Failed to execute 'define' on 'CustomElementRegistry': "copyurl" is not a valid custom element name once register() strips -element, and @attr URL / @attr srcURL map to data-ur-l / data-srcur-l instead of data-url (the example in https://github.github.io/catalyst/guide/attrs) and data-src-url.
In src/dasherize.ts, .replace(/([A-Z]($|[a-z]))/g, '-$1') only inserts a dash before a capital letter followed by a lowercase letter or end-of-string, so no boundary is inserted between a lowercase letter and a multi-letter acronym, and a trailing acronym is split before its final capital.
Versions: @github/[email protected] (npm latest) and main (f022227), Node.js v26.13.0 and Chromium.
Credit: https://ucsbplse.github.io/
- Linguagem predominante
- TypeScript
- Estrelas
- 1.4k
- Forks
- 61
- Merge médio
- 1d 15h
- PRs com merge (30d)
- 8
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de github/catalyst
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 62/100
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 20/100
-
EcmaScript DecoratorsAberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 42/100
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 45/100
Todas as issues de github/catalyst
Issues semelhantes
-
normalizePropName strips `#` characters from Figma property names instead of only the `#id` suffixAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
figma/code-connect#419 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
jeanibarz/knowledge-base-mcp-server#1268 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
Koenkk/zigbee-herdsman-converters#13820 ·
Mantenedores costumam responder em até 2 dias
-
A live recovery copy treats a large whole number and text with the same digits as the same valueAbertabug sharing & sync
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 64/100
Mantenedores costumam responder em até 1 dia
-
[prefer-expect-resolves] autofix leaves a stray ")" when the awaited expression is parenthesizedAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
jest-community/eslint-plugin-jest#2052 ·