// @ts-check /** * @param {(() => void) | (() => Promise)} callback * @returns {Promise} */ export default function ready(callback) { return new Promise((resolve, reject) => { function loaded() { let result; try { result = callback(); } catch (err) { reject(err); return; } if (typeof result?.then === "function") { result.then(resolve).catch(reject); } else { resolve(); } } if (["interactive", "complete"].includes(document.readyState)) { loaded(); } else { document.addEventListener("DOMContentLoaded", loaded); } }); }