@@ -27,13 +27,9 @@ let svelte_url: string;
27
27
let version : string ;
28
28
let current_id : number ;
29
29
30
- let files : Map < string , string > ;
31
- let package_json : any ;
32
-
33
30
let inited = Promise . withResolvers < typeof svelte > ( ) ;
34
31
35
32
async function init ( v : string , packages_url : string ) {
36
- svelte_url = `${ packages_url } /svelte@${ v } ` ;
37
33
const match = / ^ ( p r | c o m m i t ) - ( .+ ) / . exec ( v ) ;
38
34
39
35
let tarball : FileDescription [ ] | undefined ;
@@ -48,13 +44,19 @@ async function init(v: string, packages_url: string) {
48
44
}
49
45
50
46
tarball = await parseTar ( await response . arrayBuffer ( ) ) ;
51
- files = new Map ( tarball . map ( ( file ) => [ file . name . substring ( 'package' . length ) , file . text ] ) ) ;
52
47
53
- const json = files . get ( '/package.json' ) ! ;
54
- package_json = JSON . parse ( json ) ;
55
- version = package_json . version ;
48
+ const json = tarball . find ( ( file ) => file . name === 'package/package.json' ) ! . text ;
49
+ version = JSON . parse ( json ) . version ;
50
+
51
+ svelte_url = `svelte://svelte@${ version } ` ;
52
+
53
+ for ( const file of tarball ) {
54
+ const url = `${ svelte_url } /${ file . name . slice ( 'package/' . length ) } ` ;
55
+ FETCH_CACHE . set ( url , Promise . resolve ( { url, body : file . text } ) ) ;
56
+ }
56
57
} else {
57
58
version = ( await fetch ( `${ svelte_url } /package.json` ) . then ( ( r ) => r . json ( ) ) ) . version ;
59
+ svelte_url = `${ packages_url } /svelte@${ version } ` ;
58
60
}
59
61
60
62
console . log ( `Using Svelte compiler version ${ version } ` ) ;
@@ -297,13 +299,9 @@ async function get_bundle(
297
299
return ;
298
300
} else {
299
301
// relative import in an external file
300
- const url = new URL ( importee , importer ) ;
301
- if ( url . protocol === 'file:' ) {
302
- return url . toString ( ) ;
303
- }
304
-
302
+ const url = new URL ( importee , importer ) . href ;
305
303
self . postMessage ( { type : 'status' , uid, message : `resolving ${ url } ` } ) ;
306
- return await follow_redirects ( url . href , uid ) ;
304
+ return await follow_redirects ( url , uid ) ;
307
305
}
308
306
} else {
309
307
// fetch from unpkg
@@ -315,20 +313,20 @@ async function get_bundle(
315
313
}
316
314
317
315
const pkg_name = match [ 1 ] ;
318
- const version = pkg_name === 'svelte' ? svelte . VERSION : match [ 2 ] ?? 'latest' ;
316
+ const pkg_url =
317
+ pkg_name === 'svelte'
318
+ ? `${ svelte_url } /package.json`
319
+ : `${ packages_url } /${ pkg_name } /package.json` ;
319
320
const subpath = `.${ match [ 3 ] ?? '' } ` ;
320
321
321
322
// if this was imported by one of our files, add it to the `imports` set
322
323
if ( importer && local_files_lookup . has ( importer ) ) {
323
324
imports . add ( pkg_name ) ;
324
325
}
325
326
326
- const fetch_package_info = async ( ) => {
327
+ const fetch_package_info = async ( pkg_url ) => {
327
328
try {
328
- const pkg_url = await follow_redirects (
329
- `${ packages_url } /${ pkg_name } @${ version } /package.json` ,
330
- uid
331
- ) ;
329
+ pkg_url = await follow_redirects ( pkg_url , uid ) ;
332
330
333
331
if ( ! pkg_url ) throw new Error ( ) ;
334
332
@@ -346,13 +344,7 @@ async function get_bundle(
346
344
}
347
345
} ;
348
346
349
- let pkg : any ;
350
- let pkg_url_base = 'file:' ;
351
- if ( importee . startsWith ( `svelte` ) && package_json ) {
352
- pkg = package_json ;
353
- } else {
354
- ( { pkg, pkg_url_base } = await fetch_package_info ( ) ) ;
355
- }
347
+ const { pkg, pkg_url_base } = await fetch_package_info ( pkg_url ) ;
356
348
357
349
try {
358
350
const resolved_id = await resolve_from_pkg ( pkg , subpath , uid , pkg_url_base ) ;
@@ -369,14 +361,6 @@ async function get_bundle(
369
361
return `export const BROWSER = true; export const DEV = true` ;
370
362
}
371
363
372
- try {
373
- const resolved_url = new URL ( resolved ) ;
374
-
375
- if ( resolved_url . protocol === 'file:' ) {
376
- return files . get ( resolved_url . pathname ) ;
377
- }
378
- } catch { }
379
-
380
364
const cached_file = local_files_lookup . get ( resolved ) ;
381
365
if ( cached_file ) {
382
366
return cached_file . contents ;
0 commit comments