11import { relative , basename , sep , posix } from 'path' ;
22import { promises as fs } from 'fs' ;
33
4- const IMPLICIT_URL = / \. (?: p n g | j p e ? g | g i f | w e b p | s v g | m p 4 | w e b m | o g g | m p 3 | w a v | f l a c | a a c | w o f f 2 ? | e o t | t t f | o t f ) $ / i;
4+ export const IMPLICIT_URL = / \. (?: p n g | j p e ? g | g i f | w e b p | s v g | m p 4 | w e b m | o g g | m p 3 | w a v | f l a c | a a c | w o f f 2 ? | e o t | t t f | o t f ) $ / i;
55
66const escapeUrl = url => url . replace ( / # / g, '%23' ) . replace ( / ' / g, "\\'" ) . replace ( / " / g, '\\"' ) ;
77
@@ -12,23 +12,15 @@ const escapeUrl = url => url.replace(/#/g, '%23').replace(/'/g, "\\'").replace(/
1212 * @returns {import('rollup').Plugin }
1313 */
1414export default function urlPlugin ( { inline, cwd } = { } ) {
15+ const PREFIX = 'url:' ;
16+ const INTERNAL_PREFIX = '\0url:' ;
17+
1518 return {
1619 name : 'url-plugin' ,
1720 async resolveId ( id , importer ) {
18- if ( id [ 0 ] === '\0' || id [ 0 ] === '\b' ) return ;
21+ if ( ! id . startsWith ( PREFIX ) ) return ;
1922
20- if ( id . startsWith ( 'url:' ) ) {
21- // explicit `url:` prefix
22- id = id . slice ( 4 ) ;
23- } else if ( ! inline ) {
24- // In dev mode, we eagerly process un-prefixed non-source files.
25- // This would be an infinite Rollup loop for prod, which instead uses load().
26- return ;
27- } else if ( ! IMPLICIT_URL . test ( id ) ) {
28- // implicitly apply `url:` all files except source code
29- return ;
30- // ^ no prefix, not an implicit URL (in dev) - nothing to do.
31- }
23+ id = id . slice ( PREFIX . length ) ;
3224
3325 const resolved = await this . resolve ( id , importer , { skipSelf : true } ) ;
3426 if ( ! resolved ) return ;
@@ -41,18 +33,13 @@ export default function urlPlugin({ inline, cwd } = {}) {
4133 external : true
4234 } ;
4335 }
44- resolved . id = `\0url: ${ resolved . id } ` ;
36+ resolved . id = `${ INTERNAL_PREFIX } ${ resolved . id } ` ;
4537 return resolved ;
4638 } ,
4739 async load ( id ) {
48- if ( id . startsWith ( '\0url:' ) ) {
49- // explicit `url:` prefix (generated by our resolveId):
50- id = id . slice ( 5 ) ;
51- } else if ( ! IMPLICIT_URL . test ( id ) ) {
52- // implicitly apply `url:` images, fonts, etc.
53- return ;
54- // ^ no prefix, not an implicit URL - nothing to do
55- }
40+ if ( ! id . startsWith ( INTERNAL_PREFIX ) ) return ;
41+
42+ id = id . slice ( INTERNAL_PREFIX . length ) ;
5643
5744 const fileId = this . emitFile ( {
5845 type : 'asset' ,
0 commit comments