(async () => { const { process, env, pledge } = await import("avril:std"); const assert = (condition, message) => { if (!condition) throw Error(message); }; let delivered = false; globalThis.onmessage = (event) => { delivered = event.target === globalThis && event.data === "restored"; }; dispatchEvent(new MessageEvent("message", { data: "restored" })); globalThis.onmessage = null; assert(delivered, "Restored global event target"); assert(Object.isFrozen(process.args), "Mutable process metadata"); assert( Object.getOwnPropertyDescriptor(process, "pid").value === process.pid, "PID descriptor", ); assert(performance.timeOrigin > 0 && performance.now() >= 0, "Fresh clock"); assert( navigator.hardwareConcurrency >= 1 && navigator.userAgent.startsWith("avril/"), "Navigator", ); globalThis.metadata = [ process.pid, process.args[0], env.get("SNAPSHOT_VALUE"), globalThis.name ?? "", globalThis.location?.href ?? "", typeof Storage === "function", ]; env.set("SNAPSHOT_VALUE", "changed"); pledge({ env: false }); let denied = false; try { env.get("SNAPSHOT_VALUE"); } catch { denied = true; } assert(denied, "Live capability narrowing"); const value = { bytes: new Uint8Array([65, 66]) }; value.self = value; const copy = structuredClone(value); assert( copy !== value && copy.self === copy && copy.bytes[1] === 66, "Structured clone", ); const shared = new SharedArrayBuffer(2); new Uint8Array(shared).set([65, 66]); Object.defineProperty(SharedArrayBuffer.prototype, "byteLength", { get() { throw Error("poisoned shared getter"); }, }); assert( new TextDecoder().decode(shared) === "AB", "Captured shared buffer intrinsics", ); assert( new URL("../ok", "https://example.invalid/path/file").pathname === "/ok", "URL", ); const body = new Response(new Uint8Array([65, 66])); assert(await body.text() === "AB", "Body streams"); const wasm = await WebAssembly.compileStreaming( new Response( new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0]), { headers: { "content-type": "application/wasm" } }, ), ); assert(wasm instanceof WebAssembly.Module, "Wasm streaming"); await new Promise((resolve) => setTimeout(resolve, 0)); globalThis.snapshotTestComplete = true; })();