@@ -16,14 +16,21 @@ import {
16
16
} from '../build'
17
17
import type { Plugin } from '../plugin'
18
18
import type { ResolvedConfig } from '../config'
19
- import { cleanUrl , getHash , joinUrlSegments , normalizePath } from '../utils'
19
+ import {
20
+ cleanUrl ,
21
+ getHash ,
22
+ joinUrlSegments ,
23
+ normalizePath ,
24
+ removeLeadingSlash ,
25
+ } from '../utils'
20
26
import { FS_PREFIX } from '../constants'
21
27
22
28
export const assetUrlRE = / _ _ V I T E _ A S S E T _ _ ( [ a - z \d ] + ) _ _ (?: \$ _ ( .* ?) _ _ ) ? / g
23
29
24
30
const rawRE = / (?: \? | & ) r a w (?: & | $ ) /
25
31
const urlRE = / ( \? | & ) u r l (?: & | $ ) /
26
32
const jsSourceMapRE = / \. [ c m ] ? j s \. m a p $ /
33
+ const unnededFinalQueryCharRE = / [ ? & ] $ /
27
34
28
35
const assetCache = new WeakMap < ResolvedConfig , Map < string , string > > ( )
29
36
@@ -169,7 +176,7 @@ export function assetPlugin(config: ResolvedConfig): Plugin {
169
176
return
170
177
}
171
178
172
- id = id . replace ( urlRE , '$1' ) . replace ( / [ ? & ] $ / , '' )
179
+ id = id . replace ( urlRE , '$1' ) . replace ( unnededFinalQueryCharRE , '' )
173
180
const url = await fileToUrl ( id , config , this )
174
181
return `export default ${ JSON . stringify ( url ) } `
175
182
} ,
@@ -255,7 +262,7 @@ function fileToDevUrl(id: string, config: ResolvedConfig) {
255
262
rtn = path . posix . join ( FS_PREFIX , id )
256
263
}
257
264
const base = joinUrlSegments ( config . server ?. origin ?? '' , config . base )
258
- return joinUrlSegments ( base , rtn . replace ( / ^ \/ / , '' ) )
265
+ return joinUrlSegments ( base , removeLeadingSlash ( rtn ) )
259
266
}
260
267
261
268
export function getPublicAssetFilename (
0 commit comments