diff --git a/src/client/app/utils.ts b/src/client/app/utils.ts index 0c3c2ed1..4e9687db 100644 --- a/src/client/app/utils.ts +++ b/src/client/app/utils.ts @@ -30,21 +30,24 @@ export function pathToFile(path: string): string { // always force re-fetch content in dev pagePath += `.md?t=${Date.now()}` } else { - pagePath = sanitizeFileName(pagePath) // in production, each .md file is built into a .md.js file following // the path conversion scheme. // /foo/bar.html -> ./foo_bar.md if (inBrowser) { const base = import.meta.env.BASE_URL pagePath = - (pagePath.slice(base.length).replace(/\//g, '_') || 'index') + '.md' + sanitizeFileName( + pagePath.slice(base.length).replace(/\//g, '_') || 'index' + ) + '.md' // client production build needs to account for page hash, which is // injected directly in the page's html const pageHash = __VP_HASH_MAP__[pagePath.toLowerCase()] pagePath = `${base}assets/${pagePath}.${pageHash}.js` } else { // ssr build uses much simpler name mapping - pagePath = `./${pagePath.slice(1).replace(/\//g, '_')}.md.js` + pagePath = `./${sanitizeFileName( + pagePath.slice(1).replace(/\//g, '_') + )}.md.js` } } diff --git a/src/shared/shared.ts b/src/shared/shared.ts index ce0052aa..29d1e424 100644 --- a/src/shared/shared.ts +++ b/src/shared/shared.ts @@ -173,6 +173,9 @@ export function sanitizeFileName(name: string): string { return ( driveLetter + - name.slice(driveLetter.length).replace(INVALID_CHAR_REGEX, '_') + name + .slice(driveLetter.length) + .replace(INVALID_CHAR_REGEX, '_') + .replace(/(?<=^|\/)_+(?=[^/]*$)/, '') ) }