import { defineProperty } from "polyscript/exports"; // helper for all script[type="py"] out there const before = (script) => { defineProperty(document, "currentScript", { configurable: true, get: () => script, }); }; const after = () => { delete document.currentScript; }; // common life-cycle handlers for any node export default async (main, wrap, element, hook) => { const isAsync = hook.endsWith("Async"); const isBefore = hook.startsWith("onBefore"); // make it possible to reach the current target node via Python // or clean up for other scripts executing around this one (isBefore ? before : after)(element); for (const fn of main(hook)) { if (isAsync) await fn(wrap, element); else fn(wrap, element); } };