From 3940625121455b7ad6e5ea8ebb3e1cf2faf9c7fc Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 28 Sep 2021 17:40:49 -0400 Subject: [PATCH] fix: encode urls that conflict w/ vite built-in replacements --- src/node/markdown/plugins/link.ts | 7 +++++++ src/node/markdownToVue.ts | 20 +++++++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) 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)}`) } }