blob: 945d2bdd6dd0716f87899812343a0ccbda0221f2 [file] [edit]
<!-- Specify wasm filename prefix in URL query parameter 'name'. Default is 'main.dart' -->
<!-- Example: http://localhost:8080/wasm_runner.html?name=myapp -->
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="utf-8">
</head>
<style>body {background-color: black}</style>
<body>
<script type="module">
let filename = (new URLSearchParams(window.location.search)).get('name') ?? 'main.dart';
let mjs = await import(`./${filename}.mjs`);
let compiledApp = await mjs.compileStreaming(fetch(`${filename}.wasm`));
function loadDeferredModules(modules, callback) {
return Promise.all(modules.map((m) => fetch(m).then((r) => callback(m, r))));
}
let idMap;
async function loadIdMap() {
const jsonRes = await fetch(`${filename}.json`);
const allJson = await jsonRes.json();
const map = {};
for (const val of Object.values(allJson)) {
const imports = val["imports"];
for (const id of Object.keys(imports)) {
map[id] = imports[id];
}
}
return map;
}
async function loadDeferredId(id, callback) {
idMap ??= await loadIdMap();
return loadDeferredModules(idMap[id], callback);
}
let instantiatedModule = await compiledApp.instantiate({}, {
loadDeferredModules: loadDeferredModules,
loadDeferredId: loadDeferredId,
});
instantiatedModule.invokeMain();
</script>
</body>
</html>