@@ -9,59 +9,60 @@ self.window = self;
9
9
10
10
declare var self : Window & typeof globalThis & { svelte : typeof import ( 'svelte/compiler' ) } ;
11
11
12
- let inited = false ;
13
- let fulfil_ready : ( arg ?: never ) => void ;
14
- const ready = new Promise ( ( f ) => {
15
- fulfil_ready = f ;
16
- } ) ;
12
+ let inited : PromiseWithResolvers < typeof self . svelte > ;
17
13
18
- addEventListener ( 'message' , async ( event ) => {
19
- if ( ! inited ) {
20
- inited = true ;
14
+ async function init ( v : string ) {
15
+ const svelte_url = `https://unpkg.com/svelte@ ${ v } ` ;
16
+ const match = / ^ (?: p r | c o m m i t ) - ( . + ) / . exec ( v ) ;
21
17
22
- const svelte_url = `https://unpkg.com/svelte@ ${ event . data . version } ` ;
23
- const match = / ^ (?: p r | c o m m i t ) - ( . + ) / . exec ( event . data . version ) ;
18
+ let tarball : FileDescription [ ] | undefined ;
19
+ let version ;
24
20
25
- let tarball : FileDescription [ ] | undefined ;
26
- let version ;
21
+ if ( match ) {
22
+ const response = await fetch ( `https://pkg.pr.new/svelte@ ${ match [ 1 ] } ` ) ;
27
23
28
- if ( match ) {
29
- const response = await fetch ( `https://pkg.pr.new/svelte@${ match [ 1 ] } ` ) ;
24
+ if ( ! response . ok ) {
25
+ throw new Error ( 'Could not fetch tarball' ) ;
26
+ }
30
27
31
- if ( response . ok ) {
32
- tarball = await parseTar ( await response . arrayBuffer ( ) ) ;
28
+ tarball = await parseTar ( await response . arrayBuffer ( ) ) ;
33
29
34
- const json = tarball . find ( ( file ) => file . name === 'package/package.json' ) ! . text ;
35
- version = JSON . parse ( json ) . version ;
36
- }
37
- } else {
38
- version = ( await fetch ( `${ svelte_url } /package.json` ) . then ( ( r ) => r . json ( ) ) ) . version ;
39
- }
30
+ const json = tarball . find ( ( file ) => file . name === 'package/package.json' ) ! . text ;
31
+ version = JSON . parse ( json ) . version ;
32
+ } else {
33
+ version = ( await fetch ( `${ svelte_url } /package.json` ) . then ( ( r ) => r . json ( ) ) ) . version ;
34
+ }
35
+
36
+ const entry = version . startsWith ( '3.' )
37
+ ? 'compiler.js'
38
+ : version . startsWith ( '4.' )
39
+ ? 'compiler.cjs'
40
+ : 'compiler/index.js' ;
40
41
41
- const entry = version . startsWith ( '3.' )
42
- ? 'compiler.js'
43
- : version . startsWith ( '4.' )
44
- ? 'compiler.cjs'
45
- : 'compiler/index.js' ;
42
+ const compiler = tarball
43
+ ? tarball . find ( ( file ) => file . name === `package/${ entry } ` ) ! . text
44
+ : await fetch ( `${ svelte_url } /${ entry } ` ) . then ( ( r ) => r . text ( ) ) ;
46
45
47
- const compiler = tarball
48
- ? tarball . find ( ( file ) => file . name === `package/${ entry } ` ) ! . text
49
- : await fetch ( `${ svelte_url } /${ entry } ` ) . then ( ( r ) => r . text ( ) ) ;
46
+ ( 0 , eval ) ( compiler + `\n//# sourceURL=${ entry } @` + version ) ;
50
47
51
- ( 0 , eval ) ( compiler + `\n//# sourceURL=${ entry } @` + version ) ;
48
+ return self . svelte ;
49
+ }
52
50
53
- fulfil_ready ( ) ;
51
+ addEventListener ( 'message' , async ( event ) => {
52
+ if ( ! inited ) {
53
+ inited = Promise . withResolvers ( ) ;
54
+ init ( event . data . version ) . then ( inited . resolve , inited . reject ) ;
54
55
}
55
56
56
- await ready ;
57
+ const svelte = await inited . promise ;
57
58
58
59
const { id, file, options } = event . data as {
59
60
id : number ;
60
61
file : File ;
61
62
options : ExposedCompilerOptions ;
62
63
} ;
63
64
64
- if ( ! file . name . endsWith ( '.svelte' ) && ! self . svelte . compileModule ) {
65
+ if ( ! file . name . endsWith ( '.svelte' ) && ! svelte . compileModule ) {
65
66
// .svelte.js file compiled with Svelte 3/4 compiler
66
67
postMessage ( {
67
68
id,
@@ -77,9 +78,9 @@ addEventListener('message', async (event) => {
77
78
78
79
let migration = null ;
79
80
80
- if ( self . svelte . migrate ) {
81
+ if ( svelte . migrate ) {
81
82
try {
82
- migration = self . svelte . migrate ( file . contents , { filename : file . name } ) ;
83
+ migration = svelte . migrate ( file . contents , { filename : file . name } ) ;
83
84
} catch ( e ) {
84
85
// can this happen?
85
86
}
@@ -89,7 +90,7 @@ addEventListener('message', async (event) => {
89
90
let result : CompileResult ;
90
91
91
92
if ( file . name . endsWith ( '.svelte' ) ) {
92
- const is_svelte_3_or_4 = ! self . svelte . compileModule ;
93
+ const is_svelte_3_or_4 = ! svelte . compileModule ;
93
94
const compilerOptions : any = {
94
95
generate : is_svelte_3_or_4
95
96
? options . generate === 'client'
@@ -102,9 +103,9 @@ addEventListener('message', async (event) => {
102
103
if ( ! is_svelte_3_or_4 ) {
103
104
compilerOptions . modernAst = options . modernAst ; // else Svelte 3/4 will throw an "unknown option" error
104
105
}
105
- result = self . svelte . compile ( file . contents , compilerOptions ) ;
106
+ result = svelte . compile ( file . contents , compilerOptions ) ;
106
107
} else {
107
- result = self . svelte . compileModule ( file . contents , {
108
+ result = svelte . compileModule ( file . contents , {
108
109
generate : options . generate ,
109
110
dev : options . dev ,
110
111
filename : file . name
0 commit comments