Skip to content

Commit 3940625

Browse files
committed
fix: encode urls that conflict w/ vite built-in replacements
1 parent 508e9eb commit 3940625

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/node/markdown/plugins/link.ts

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ export const linkPlugin = (
3232
) {
3333
normalizeHref(hrefAttr)
3434
}
35+
36+
// encode vite-specific replace strings in case they appear in URLs
37+
// this also excludes them from build-time replacements (which injects
38+
// <wbr/> and will break URLs)
39+
hrefAttr[1] = hrefAttr[1]
40+
.replace(/\bimport\.meta/g, 'import%2Emeta')
41+
.replace(/\bprocess\.env/g, 'process%2Eenv')
3542
}
3643
return self.renderToken(tokens, idx, options)
3744
}

src/node/markdownToVue.ts

+13-7
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,15 @@ export function createMarkdownToVueRenderFn(
3030
const md = createMarkdownRenderer(srcDir, options)
3131
pages = pages.map((p) => slash(p.replace(/\.md$/, '')))
3232

33+
const userDefineRegex = userDefines
34+
? new RegExp(
35+
`\\b(${Object.keys(userDefines)
36+
.map((key) => key.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&'))
37+
.join('|')})`,
38+
'g'
39+
)
40+
: null
41+
3342
return (
3443
src: string,
3544
file: string,
@@ -66,14 +75,11 @@ export function createMarkdownToVueRenderFn(
6675
.replace(/\bprocess\.env/g, 'process.<wbr/>env')
6776

6877
// also avoid replacing vite user defines
69-
if (userDefines) {
70-
const regex = new RegExp(
71-
`\\b(${Object.keys(userDefines)
72-
.map((key) => key.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&'))
73-
.join('|')})`,
74-
'g'
78+
if (userDefineRegex) {
79+
html = html.replace(
80+
userDefineRegex,
81+
(_) => `${_[0]}<wbr/>${_.slice(1)}`
7582
)
76-
html = html.replace(regex, (_) => `${_[0]}<wbr/>${_.slice(1)}`)
7783
}
7884
}
7985

0 commit comments

Comments
 (0)