mirror of
https://github.com/encounter/jco.git
synced 2026-03-30 11:18:26 -07:00
82 lines
3.1 KiB
HTML
82 lines
3.1 KiB
HTML
<!doctype html>
|
|
<script type="importmap">
|
|
{
|
|
"imports": {
|
|
"@bytecodealliance/preview2-shim/cli": "../packages/preview2-shim/lib/browser/cli.js",
|
|
"@bytecodealliance/preview2-shim/clocks": "../packages/preview2-shim/lib/browser/clocks.js",
|
|
"@bytecodealliance/preview2-shim/filesystem": "../packages/preview2-shim/lib/browser/filesystem.js",
|
|
"@bytecodealliance/preview2-shim/http": "../packages/preview2-shim/lib/browser/http.js",
|
|
"@bytecodealliance/preview2-shim/io": "../packages/preview2-shim/lib/browser/io.js",
|
|
"@bytecodealliance/preview2-shim/random": "../packages/preview2-shim/lib/browser/random.js",
|
|
"@bytecodealliance/preview2-shim/sockets": "../packages/preview2-shim/lib/browser/sockets.js",
|
|
"jco": "../src/browser.js"
|
|
}
|
|
}
|
|
</script>
|
|
<script type="module">
|
|
// verify preview2
|
|
import "@bytecodealliance/preview2-shim/cli";
|
|
import "@bytecodealliance/preview2-shim/clocks";
|
|
import "@bytecodealliance/preview2-shim/filesystem";
|
|
import "@bytecodealliance/preview2-shim/http";
|
|
import "@bytecodealliance/preview2-shim/io";
|
|
import "@bytecodealliance/preview2-shim/random";
|
|
import "@bytecodealliance/preview2-shim/sockets";
|
|
|
|
import { transpile } from 'jco';
|
|
const testName = window.location.hash.slice(1);
|
|
document.body.innerHTML = '<h1>Running</h1>';
|
|
switch (testName) {
|
|
case 'transpile': {
|
|
const componentUrl = new URL('./fixtures/components/lists.component.wasm', import.meta.url);
|
|
const component = await (await fetch(componentUrl)).arrayBuffer();
|
|
const output = await transpile(component, {
|
|
name: 'test',
|
|
noTypescript: true,
|
|
noNodejsCompat: true,
|
|
instantiation: { tag: 'async' },
|
|
// force baseurls
|
|
// todo: support a hook for inline blob url construction
|
|
base64Cutoff: 1000000,
|
|
map: [
|
|
['wasi:cli/*', '@bytecodealliance/preview2-shim/cli#*'],
|
|
['wasi:clocks/*', '@bytecodealliance/preview2-shim/clocks#*'],
|
|
['wasi:filesystem/*', '@bytecodealliance/preview2-shim/filesystem#*'],
|
|
['wasi:http/*', '@bytecodealliance/preview2-shim/http#*'],
|
|
['wasi:io/*', '@bytecodealliance/preview2-shim/io#*'],
|
|
['wasi:random/*', '@bytecodealliance/preview2-shim/random#*'],
|
|
['wasi:sockets/*', '@bytecodealliance/preview2-shim/sockets#*']
|
|
]
|
|
});
|
|
const source = output.files[5][1];
|
|
const url = URL.createObjectURL(new Blob([source], { type: 'text/javascript' }));
|
|
const mod = await import(url);
|
|
ok();
|
|
break;
|
|
}
|
|
default: {
|
|
if (testName.startsWith('test:')) {
|
|
const testModule = `/tmpdir/${testName.slice(5)}`;
|
|
try {
|
|
const mod = await import(testModule);
|
|
if (!mod.test)
|
|
throw new Error(`Expected test module "${testModule}" to export a "test" function`);
|
|
mod.test();
|
|
ok();
|
|
} catch (e) {
|
|
err(e.toString() + `\nrunning "${testModule}"`);
|
|
}
|
|
} else {
|
|
err(`Unknown test case "${testName}"`);
|
|
}
|
|
}
|
|
}
|
|
|
|
function ok () {
|
|
document.body.innerHTML = '<h1>OK</h1>';
|
|
}
|
|
function err (e) {
|
|
document.body.innerHTML = `<h1>Error: ${e}`;
|
|
}
|
|
</script>
|