@@ -5,37 +5,35 @@ import { URL } from 'node:url'
5
5
import type { Plugin } from '../plugin'
6
6
7
7
const dataUriRE = / ^ ( [ ^ / ] + \/ [ ^ ; , ] + ) ( ; b a s e 6 4 ) ? , ( [ \s \S ] * ) $ /
8
-
9
- const dataUriPrefix = `/@data-uri/`
8
+ const base64RE = / b a s e 6 4 / i
9
+ const dataUriPrefix = `\0 /@data-uri/`
10
10
11
11
/**
12
12
* Build only, since importing from a data URI works natively.
13
13
*/
14
14
export function dataURIPlugin ( ) : Plugin {
15
- let resolved : {
16
- [ key : string ] : string
17
- }
15
+ let resolved : Map < string , string >
18
16
19
17
return {
20
18
name : 'vite:data-uri' ,
21
19
22
20
buildStart ( ) {
23
- resolved = { }
21
+ resolved = new Map ( )
24
22
} ,
25
23
26
24
resolveId ( id ) {
27
25
if ( ! dataUriRE . test ( id ) ) {
28
- return null
26
+ return
29
27
}
30
28
31
29
const uri = new URL ( id )
32
30
if ( uri . protocol !== 'data:' ) {
33
- return null
31
+ return
34
32
}
35
33
36
34
const match = uri . pathname . match ( dataUriRE )
37
35
if ( ! match ) {
38
- return null
36
+ return
39
37
}
40
38
41
39
const [ , mime , format , data ] = match
@@ -46,18 +44,17 @@ export function dataURIPlugin(): Plugin {
46
44
}
47
45
48
46
// decode data
49
- const base64 = format && / b a s e 6 4 / i . test ( format . substring ( 1 ) )
47
+ const base64 = format && base64RE . test ( format . substring ( 1 ) )
50
48
const content = base64
51
49
? Buffer . from ( data , 'base64' ) . toString ( 'utf-8' )
52
50
: data
53
- resolved [ id ] = content
51
+ resolved . set ( id , content )
54
52
return dataUriPrefix + id
55
53
} ,
56
54
57
55
load ( id ) {
58
56
if ( id . startsWith ( dataUriPrefix ) ) {
59
- id = id . slice ( dataUriPrefix . length )
60
- return resolved [ id ] || null
57
+ return resolved . get ( id . slice ( dataUriPrefix . length ) )
61
58
}
62
59
} ,
63
60
}
0 commit comments