1
1
import type { File } from '../Workspace.svelte' ;
2
+ import { parseTar } from 'tarparser' ;
2
3
3
4
// hack for magic-string and Svelte 4 compiler
4
5
// do not put this into a separate module and import it, would be treeshaken in prod
@@ -16,18 +17,39 @@ addEventListener('message', async (event) => {
16
17
if ( ! inited ) {
17
18
inited = true ;
18
19
const svelte_url = `https://unpkg.com/svelte@${ event . data . version } ` ;
19
- const { version } = await fetch ( `${ svelte_url } /package.json` ) . then ( ( r ) => r . json ( ) ) ;
20
-
20
+ let local_files ;
21
+ let package_json ;
22
+ if ( event . data . is_pkg_pr_new ) {
23
+ const maybe_tar = await fetch ( event . data . version ) ;
24
+ if ( maybe_tar . headers . get ( 'content-type' ) === 'application/tar+gzip' ) {
25
+ const buffer = await maybe_tar . arrayBuffer ( ) ;
26
+ local_files = await parseTar ( buffer ) ;
27
+ const package_json_content = local_files . find (
28
+ ( file ) => file . name === 'package/package.json'
29
+ ) ?. text ;
30
+ if ( package_json_content ) {
31
+ package_json = JSON . parse ( package_json_content ) ;
32
+ }
33
+ }
34
+ }
35
+ const { version } =
36
+ package_json ?? ( await fetch ( `${ svelte_url } /package.json` ) . then ( ( r ) => r . json ( ) ) ) ;
21
37
if ( version . startsWith ( '4.' ) ) {
22
38
// unpkg doesn't set the correct MIME type for .cjs files
23
39
// https://github.com/mjackson/unpkg/issues/355
24
- const compiler = await fetch ( `${ svelte_url } /compiler.cjs` ) . then ( ( r ) => r . text ( ) ) ;
40
+ const compiler =
41
+ local_files ?. find ( ( file ) => file . name === 'package/compiler.cjs' ) ?. text ??
42
+ ( await fetch ( `${ svelte_url } /compiler.cjs` ) . then ( ( r ) => r . text ( ) ) ) ;
25
43
( 0 , eval ) ( compiler + '\n//# sourceURL=compiler.cjs@' + version ) ;
26
44
} else if ( version . startsWith ( '3.' ) ) {
27
- const compiler = await fetch ( `${ svelte_url } /compiler.js` ) . then ( ( r ) => r . text ( ) ) ;
45
+ const compiler =
46
+ local_files ?. find ( ( file ) => file . name === 'package/compiler.js' ) ?. text ??
47
+ ( await fetch ( `${ svelte_url } /compiler.js` ) . then ( ( r ) => r . text ( ) ) ) ;
28
48
( 0 , eval ) ( compiler + '\n//# sourceURL=compiler.js@' + version ) ;
29
49
} else {
30
- const compiler = await fetch ( `${ svelte_url } /compiler/index.js` ) . then ( ( r ) => r . text ( ) ) ;
50
+ const compiler =
51
+ local_files ?. find ( ( file ) => file . name === 'package/compiler/index.js' ) ?. text ??
52
+ ( await fetch ( `${ svelte_url } /compiler/index.js` ) . then ( ( r ) => r . text ( ) ) ) ;
31
53
( 0 , eval ) ( compiler + '\n//# sourceURL=compiler/index.js@' + version ) ;
32
54
}
33
55
0 commit comments