fix: URL-decode slug to handle scoped packages with encoded @ symbol

The @ in scoped package names was being URL-encoded to %40, causing
parseSlug to treat them as unscoped packages. Now we decode the slug
components first.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ajax Davis 2025-12-29 22:16:15 +10:00
parent 369979d3c8
commit 26421be4e6

View file

@ -13,14 +13,17 @@ interface ToolDetailPageProps {
* Parse the URL slug to extract package name and optional export name
*/
function parseSlug(slug: string[]): { packageName: string; exportName?: string } {
if (slug[0]?.startsWith('@')) {
// URL-decode slug components (@ comes as %40)
const decodedSlug = slug.map((s) => decodeURIComponent(s));
if (decodedSlug[0]?.startsWith('@')) {
// Scoped package: ['@scope', 'package', 'exportName?']
const packageName = slug.slice(0, 2).join('/');
const exportName = slug[2];
const packageName = decodedSlug.slice(0, 2).join('/');
const exportName = decodedSlug[2];
return { packageName, exportName };
}
// Unscoped: ['package', 'exportName?']
return { packageName: slug[0] || '', exportName: slug[1] };
return { packageName: decodedSlug[0] || '', exportName: decodedSlug[1] };
}
/**