fix: encode urls that conflict w/ vite built-in replacements

pull/403/head
Evan You 3 years ago
parent 508e9eb912
commit 3940625121

@ -32,6 +32,13 @@ export const linkPlugin = (
) { ) {
normalizeHref(hrefAttr) normalizeHref(hrefAttr)
} }
// encode vite-specific replace strings in case they appear in URLs
// this also excludes them from build-time replacements (which injects
// <wbr/> and will break URLs)
hrefAttr[1] = hrefAttr[1]
.replace(/\bimport\.meta/g, 'import%2Emeta')
.replace(/\bprocess\.env/g, 'process%2Eenv')
} }
return self.renderToken(tokens, idx, options) return self.renderToken(tokens, idx, options)
} }

@ -30,6 +30,15 @@ export function createMarkdownToVueRenderFn(
const md = createMarkdownRenderer(srcDir, options) const md = createMarkdownRenderer(srcDir, options)
pages = pages.map((p) => slash(p.replace(/\.md$/, ''))) pages = pages.map((p) => slash(p.replace(/\.md$/, '')))
const userDefineRegex = userDefines
? new RegExp(
`\\b(${Object.keys(userDefines)
.map((key) => key.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&'))
.join('|')})`,
'g'
)
: null
return ( return (
src: string, src: string,
file: string, file: string,
@ -66,14 +75,11 @@ export function createMarkdownToVueRenderFn(
.replace(/\bprocess\.env/g, 'process.<wbr/>env') .replace(/\bprocess\.env/g, 'process.<wbr/>env')
// also avoid replacing vite user defines // also avoid replacing vite user defines
if (userDefines) { if (userDefineRegex) {
const regex = new RegExp( html = html.replace(
`\\b(${Object.keys(userDefines) userDefineRegex,
.map((key) => key.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&')) (_) => `${_[0]}<wbr/>${_.slice(1)}`
.join('|')})`,
'g'
) )
html = html.replace(regex, (_) => `${_[0]}<wbr/>${_.slice(1)}`)
} }
} }

Loading…
Cancel
Save