@@ -6,30 +6,58 @@ if (typeof Go === "undefined") {
66}
77
88let SQLDEF = null ;
9+ let isLoading = false ;
910
1011const getInstance = async ( ) => {
12+ while ( isLoading ) {
13+ await new Promise ( ( resolve ) => setTimeout ( resolve ) ) ;
14+ }
15+
1116 if ( SQLDEF ) {
1217 return SQLDEF ;
1318 }
1419
15- const response = await fetch ( "sqldef.wasm" ) ;
16- const wasmBinary = await response . arrayBuffer ( ) ;
17- const go = new Go ( ) ;
18- const result = await WebAssembly . instantiate ( wasmBinary , go . importObject ) ;
19- go . run ( result . instance ) ; // defines globalThis._SQLDEF
20- SQLDEF = globalThis . _SQLDEF ;
20+ isLoading = true ;
21+ try {
22+ const t0 = performance . now ( ) ;
23+ const response = await fetch ( "sqldef.wasm" ) ;
24+ const t1 = performance . now ( ) ;
25+ const wasmBinary = await response . arrayBuffer ( ) ;
26+ const t2 = performance . now ( ) ;
27+ const go = new Go ( ) ;
28+ const result = await WebAssembly . instantiate ( wasmBinary , go . importObject ) ;
29+ go . run ( result . instance ) ; // defines globalThis._SQLDEF
30+ const t3 = performance . now ( ) ;
31+
32+ console . debug (
33+ "sqldef.wasm loading time: fetch: %dms, instantiate: %dms, start: %dms" ,
34+ t1 - t0 ,
35+ t2 - t1 ,
36+ t3 - t2
37+ ) ;
38+
39+ SQLDEF = globalThis . _SQLDEF ;
40+ } finally {
41+ isLoading = false ;
42+ }
43+
2144 return SQLDEF ;
2245} ;
2346
24- export async function sqldef ( dbType , desiredDDLs , currentDDLs , enableDrop = false ) {
47+ export async function sqldef (
48+ dbType ,
49+ desiredDDLs ,
50+ currentDDLs ,
51+ enableDrop = false
52+ ) {
2553 if ( typeof WebAssembly === "undefined" ) {
2654 throw new Error ( "WebAssembly is not supported in your browser" ) ;
2755 }
2856
29- const SQLDEF = await getInstance ( ) ;
57+ const sqldef = await getInstance ( ) ;
3058
3159 return new Promise ( ( resolve , reject ) => {
32- SQLDEF . diff ( dbType , desiredDDLs , currentDDLs , enableDrop , ( err , ret ) => {
60+ sqldef . diff ( dbType , desiredDDLs , currentDDLs , enableDrop , ( err , ret ) => {
3361 if ( err ) {
3462 return reject ( new Error ( err ) ) ;
3563 }
@@ -38,12 +66,7 @@ export async function sqldef(dbType, desiredDDLs, currentDDLs, enableDrop = fals
3866 } ) ;
3967}
4068
41- export async function getVersion ( ) {
42- const SQLDEF = await getInstance ( ) ;
43- return SQLDEF . getVersion ( ) ;
44- }
45-
46- export async function getRevision ( ) {
47- const SQLDEF = await getInstance ( ) ;
48- return SQLDEF . getRevision ( ) ;
69+ export async function getFullVersion ( ) {
70+ const sqldef = await getInstance ( ) ;
71+ return sqldef . getFullVersion ( ) ;
4972}
0 commit comments