generate = async (id) => {
console.log("generate", id);
const container = document.createElement("article");
const [{ Runtime, Inspector }, { default: define }] = await Promise.all([
import(
"https://cdn.jsdelivr.net/npm/@observablehq/runtime@4/dist/runtime.js"
),
import(`https://api.observablehq.com/d/${id}.js?v=3`)
]);
let pending = 0;
new Runtime().module(define, (name) => {
const node = document.createElement("div");
container.appendChild(node);
if (name) node.id = name;
return {
pending() {
pending++;
},
fulfilled(value) {
if (value instanceof HTMLElement) {
node.replaceWith(value);
} else {
console.log("skipping", value);
}
pending--;
},
rejected(error) {
pending--;
}
};
});
let secs = 0;
do {
console.log("wait");
await new Promise((resolve) => setTimeout(resolve, 1000));
secs++;
} while (pending > 0 && secs < 2);
return container;
}