@@ -35,22 +35,49 @@ export async function generateGlueCode(
3535 names : { initWasm : string ; wasmUrl : string }
3636) : Promise < string > {
3737 const { imports, exports } = await parseWasm ( wasmFilePath ) ;
38- return `
39- ${ imports
40- . map (
41- ( { from, names } , i ) =>
42- `import { ${ names . map ( ( name , j ) => `${ name } as __vite__wasmImport_${ i } _${ j } ` ) . join ( ", " ) } } from ${ JSON . stringify (
43- from
44- ) } ;`
45- )
46- . join ( "\n" ) }
47- const __vite__wasmModule = await ${ names . initWasm } ({ ${ imports
48- . map (
49- ( { from, names } , i ) =>
50- `${ JSON . stringify ( from ) } : { ${ names . map ( ( name , j ) => `${ name } : __vite__wasmImport_${ i } _${ j } ` ) . join ( ", " ) } }`
51- )
52- . join ( ", " ) } }, ${ names . wasmUrl } );
53- ${ exports
54- . map ( name => `export ${ name === "default" ? "default" : `const ${ name } =` } __vite__wasmModule.${ name } ;` )
55- . join ( "\n" ) } `;
38+
39+ const importStatements = imports . map ( ( { from } , i ) => {
40+ return `import * as __vite__wasmImport_${ i } from ${ JSON . stringify ( from ) } ;` ;
41+ } ) ;
42+
43+ const importObject = imports . map ( ( { from, names } , i ) => {
44+ return {
45+ key : JSON . stringify ( from ) ,
46+ value : names . map ( name => {
47+ return {
48+ key : JSON . stringify ( name ) ,
49+ value : `__vite__wasmImport_${ i } [${ JSON . stringify ( name ) } ]`
50+ } ;
51+ } )
52+ } ;
53+ } ) ;
54+
55+ const initCode = `const __vite__wasmModule = await ${ names . initWasm } (${ codegenSimpleObject ( importObject ) } , ${
56+ names . wasmUrl
57+ } );`;
58+
59+ const exportsStatements = exports . map ( name => {
60+ return `export ${ name === "default" ? "default" : `const ${ name } =` } __vite__wasmModule.${ name } ;` ;
61+ } ) ;
62+
63+ return [ ...importStatements , initCode , ...exportsStatements ] . join ( "\n" ) ;
64+ }
65+
66+ type SimpleObject = SimpleObjectKeyValue [ ] ;
67+
68+ interface SimpleObjectKeyValue {
69+ key : string ;
70+ value : string | SimpleObject ;
71+ }
72+
73+ function codegenSimpleObject ( obj : SimpleObject ) : string {
74+ return `{ ${ codegenSimpleObjectKeyValue ( obj ) } }` ;
75+ }
76+
77+ function codegenSimpleObjectKeyValue ( obj : SimpleObject ) : string {
78+ return obj
79+ . map ( ( { key, value } ) => {
80+ return `${ key } : ${ typeof value === "string" ? value : codegenSimpleObject ( value ) } ` ;
81+ } )
82+ . join ( ",\n" ) ;
5683}
0 commit comments