`dasherize` mangles mid-name and trailing acronyms (`CopyURLElement` throws `SyntaxError`, `@attr URL` -> `data-ur-l`)
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- typescript, web-dev
- Bereich
- frontend
Rechercherichtung
Der Fehler steckt in src/dasherize.ts, wo der reguläre Ausdruck .replace(/([A-Z]($|[a-z]))/g, '-$1') festlegt, wo Bindestriche gesetzt werden. Beginne damit, diese Funktion zu lesen, und führe das Reproduktionsskript aus dem Issue gegen lib/dasherize.js aus, um die falschen Ausgaben zu sehen. Fertig ist es, wenn UserIDListElement, CopyURLElement, mySVGIcon, srcURL, data-URL und data-srcURL die im Issue aufgelisteten erwarteten Formen mit Bindestrichen erzeugen und Tests diese abdecken.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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/
- Vorherrschende Sprache
- TypeScript
- Sterne
- 1.4k
- Forks
- 61
- Ø Merge
- 1 T. 15 Std.
- Gemergte PRs (30 T.)
- 8
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus github/catalyst
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 62/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
-
EcmaScript DecoratorsOffen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 42/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
Alle Issues in github/catalyst
Ähnliche Issues
-
normalizePropName strips `#` characters from Figma property names instead of only the `#id` suffixOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
figma/code-connect#419 ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
jeanibarz/knowledge-base-mcp-server#1268 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 78/100
Koenkk/zigbee-herdsman-converters#13820 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
A live recovery copy treats a large whole number and text with the same digits as the same valueOffenbug sharing & sync
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
Maintainer antworten meist innerhalb von 1 Tag
-
[prefer-expect-resolves] autofix leaves a stray ")" when the awaited expression is parenthesizedOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
jest-community/eslint-plugin-jest#2052 ·