diff --git a/src/node/markdown/plugins/link.ts b/src/node/markdown/plugins/link.ts
index 7664f10a..7d7c71f7 100644
--- a/src/node/markdown/plugins/link.ts
+++ b/src/node/markdown/plugins/link.ts
@@ -32,6 +32,13 @@ export const linkPlugin = (
) {
normalizeHref(hrefAttr)
}
+
+ // encode vite-specific replace strings in case they appear in URLs
+ // this also excludes them from build-time replacements (which injects
+ // 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)
}
diff --git a/src/node/markdownToVue.ts b/src/node/markdownToVue.ts
index 3de71570..2f5d4747 100644
--- a/src/node/markdownToVue.ts
+++ b/src/node/markdownToVue.ts
@@ -30,6 +30,15 @@ export function createMarkdownToVueRenderFn(
const md = createMarkdownRenderer(srcDir, options)
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 (
src: string,
file: string,
@@ -66,14 +75,11 @@ export function createMarkdownToVueRenderFn(
.replace(/\bprocess\.env/g, 'process.env')
// also avoid replacing vite user defines
- if (userDefines) {
- const regex = new RegExp(
- `\\b(${Object.keys(userDefines)
- .map((key) => key.replace(/[-[\]/{}()*+?.\\^$|]/g, '\\$&'))
- .join('|')})`,
- 'g'
+ if (userDefineRegex) {
+ html = html.replace(
+ userDefineRegex,
+ (_) => `${_[0]}${_.slice(1)}`
)
- html = html.replace(regex, (_) => `${_[0]}${_.slice(1)}`)
}
}