import { state } from "./state.js"; import { ops, primordials } from "ext:core"; import { ArrayPrototypePush } from "ext:core/primordials"; import { onRuntimeStart, startRuntime } from "ext:core/bootstrap"; import { enqueueMicrotask } from "ext:core/microtasks"; import { setEventHandlers } from "ext:core/event_hooks"; import { safePromise } from "ext:core/promises"; import { asyncSeed, collect, finishWasm, nativeSeed, registerWasm, staticOnly, } from "ext:core/ops"; staticOnly(); if ( ops.nativeSeed !== nativeSeed || primordials.ArrayPrototypePush !== ArrayPrototypePush ) { throw Error("Core export identity"); } globalThis.events = ["static"]; globalThis.snapshotState = state; globalThis.readNative = nativeSeed; globalThis.startAgain = startRuntime; globalThis.extensionMeta = import.meta; globalThis.extensionDynamic = () => import("./state.js"); globalThis.seedAsync = () => safePromise(asyncSeed()); await Promise.resolve(); onRuntimeStart(() => { state.seed = nativeSeed(); Object.freeze(state); events.push("live"); setEventHandlers( (error) => { events.push(error.message); return true; }, (_promise, reason) => { events.push(reason.message); return true; }, () => { events.push("handled"); }, ); registerWasm((source, id) => { if (source !== state.seed || id !== 1) throw Error("Stale Wasm registry"); finishWasm(id); }); }); export function reportMicrotask() { enqueueMicrotask(() => { throw Error("microtask"); }); } export { collect, state };