Skip to content

Commit bd8aa0a

Browse files
authored
fix(markdown): handle data uri correctly (close #1393) (#1403)
1 parent 90538ad commit bd8aa0a

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

packages/markdown/src/plugins/assetsPlugin/resolveLink.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ export const resolveLink = (
88
env: MarkdownEnv,
99
strict = false,
1010
): string => {
11+
// do not resolve data uri
12+
if (link.startsWith('data:')) return link
13+
1114
// decode link to ensure bundler can find the file correctly
1215
let resolvedLink = decode(link)
1316

packages/markdown/tests/plugins/assetsPlugin.spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
3434
'![invalid](.../invalid.png)',
3535
'![汉字](.../汉字.png)',
3636
'![100%](.../100%.png)',
37+
// data uri
38+
'![data-uri](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==)',
3739
]
3840

3941
const testCases: {
@@ -77,6 +79,8 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
7779
'<img src="@source/sub/.../invalid.png" alt="invalid">',
7880
'<img src="@source/sub/.../汉字.png" alt="汉字">',
7981
'<img src="@source/sub/.../100%.png" alt="100%">',
82+
// data uri
83+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==" alt="data-uri">',
8084
],
8185
},
8286
{
@@ -116,6 +120,8 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
116120
'<img src="@foo/sub/.../invalid.png" alt="invalid">',
117121
'<img src="@foo/sub/.../汉字.png" alt="汉字">',
118122
'<img src="@foo/sub/.../100%.png" alt="100%">',
123+
// data uri
124+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==" alt="data-uri">',
119125
],
120126
},
121127
{
@@ -152,6 +158,8 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
152158
'<img src=".../invalid.png" alt="invalid">',
153159
'<img src=".../汉字.png" alt="汉字">',
154160
'<img src=".../100%.png" alt="100%">',
161+
// data uri
162+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==" alt="data-uri">',
155163
],
156164
},
157165
]
@@ -236,6 +244,9 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
236244
'<img srcset="~@alias/foo.png 1x, ~@alias/汉字.png 2x, ~@alias/100%.png 3x" alt="attrs" src="~@alias/attrs.png" width="100px">',
237245
// keep as is
238246
'<img alt="attrs" src="" width="100px" srcset="/absolute.png 1x, no-prefix.png 2x, http://foobar.com/icon.png">',
247+
248+
/* data uri */
249+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==">',
239250
]
240251

241252
const testCases: {
@@ -319,6 +330,9 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
319330
'<img srcset="~@alias/foo.png 1x, ~@alias/汉字.png 2x, ~@alias/100%.png 3x" alt="attrs" src="~@alias/attrs.png" width="100px">',
320331
// keep as is
321332
'<img alt="attrs" src="" width="100px" srcset="/absolute.png 1x, no-prefix.png 2x, http://foobar.com/icon.png">',
333+
334+
/* data uri */
335+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==">',
322336
],
323337
},
324338
{
@@ -398,6 +412,9 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
398412
'<img srcset="~@alias/foo.png 1x, ~@alias/汉字.png 2x, ~@alias/100%.png 3x" alt="attrs" src="~@alias/attrs.png" width="100px">',
399413
// keep as is
400414
'<img alt="attrs" src="" width="100px" srcset="/absolute.png 1x, no-prefix.png 2x, http://foobar.com/icon.png">',
415+
416+
/* data uri */
417+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==">',
401418
],
402419
},
403420
{
@@ -474,6 +491,9 @@ describe('@vuepress/markdown > plugins > assetsPlugin', () => {
474491
'<img srcset="~@alias/foo.png 1x, ~@alias/汉字.png 2x, ~@alias/100%.png 3x" alt="attrs" src="~@alias/attrs.png" width="100px">',
475492
// keep as is
476493
'<img alt="attrs" src="" width="100px" srcset="/absolute.png 1x, no-prefix.png 2x, http://foobar.com/icon.png">',
494+
495+
/* data uri */
496+
'<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wr4H/wAAAABJRU5ErkJggg==">',
477497
],
478498
},
479499
]

0 commit comments

Comments
 (0)