@@ -30,6 +30,31 @@ <h2>WebAssembly Greeting Demo</h2>
3030const wasmUrl = '/wasm/hello.wasm' ;
3131const loadButton = document . getElementById ( 'load-wasm' ) ;
3232const output = document . getElementById ( 'wasm-result' ) ;
33+ const utf8Decoder = new TextDecoder ( 'utf-8' ) ;
34+
35+ function createWasiImports ( ) {
36+ const noop = ( ) => 0 ;
37+
38+ return {
39+ wasi_snapshot_preview1 : {
40+ proc_exit ( code ) {
41+ if ( code !== 0 ) {
42+ throw new Error ( `WebAssembly module exited with code ${ code } ` ) ;
43+ }
44+ } ,
45+ fd_close : noop ,
46+ fd_fdstat_get : noop ,
47+ fd_seek : noop ,
48+ fd_write : noop ,
49+ environ_get : noop ,
50+ environ_sizes_get : noop ,
51+ args_get : noop ,
52+ args_sizes_get : noop ,
53+ clock_time_get : noop ,
54+ random_get : noop ,
55+ } ,
56+ } ;
57+ }
3358
3459async function loadGreetingFromWasm ( ) {
3560 output . textContent = 'Loading greeting...' ;
@@ -41,23 +66,31 @@ <h2>WebAssembly Greeting Demo</h2>
4166 }
4267
4368 const buffer = await response . arrayBuffer ( ) ;
44- const { instance } = await WebAssembly . instantiate ( buffer , { } ) ;
69+ const imports = createWasiImports ( ) ;
70+ const { instance } = await WebAssembly . instantiate ( buffer , imports ) ;
4571 const { exports } = instance ;
4672
47- if ( typeof exports . get_greeting !== 'function' || typeof exports . get_greeting_length !== 'function' ) {
73+ const getGreeting = exports . get_greeting || exports . _get_greeting ;
74+ const getGreetingLength = exports . get_greeting_length || exports . _get_greeting_length ;
75+
76+ if ( typeof getGreeting !== 'function' || typeof getGreetingLength !== 'function' ) {
4877 throw new Error ( 'Expected WebAssembly exports were not found.' ) ;
4978 }
5079
51- const pointer = exports . get_greeting ( ) ;
52- const length = exports . get_greeting_length ( ) ;
80+ if ( typeof exports . _initialize === 'function' ) {
81+ exports . _initialize ( ) ;
82+ }
83+
5384 const memory = exports . memory ;
5485
5586 if ( ! ( memory instanceof WebAssembly . Memory ) ) {
5687 throw new Error ( 'WebAssembly memory export is missing.' ) ;
5788 }
5889
90+ const pointer = getGreeting ( ) ;
91+ const length = getGreetingLength ( ) ;
5992 const bytes = new Uint8Array ( memory . buffer , pointer , length ) ;
60- const greeting = new TextDecoder ( 'utf-8' ) . decode ( bytes ) ;
93+ const greeting = utf8Decoder . decode ( bytes ) ;
6194
6295 output . textContent = greeting ;
6396 } catch ( error ) {
0 commit comments