UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

40 lines (38 loc) 1.3 kB
import { retry } from "./retry.mjs"; //#region src/loadScript.ts const NO_DOCUMENT_ERROR = "loadScript cannot be called when document does not exist"; const NO_SRC_ERROR = "loadScript cannot be called without a src"; /** * */ async function loadScript(src = "", opts) { const { async, defer, beforeLoad, crossOrigin, nonce } = opts || {}; const load = () => { return new Promise((resolve, reject) => { if (!src) reject(/* @__PURE__ */ new Error(NO_SRC_ERROR)); if (!document || !document.body) reject(/* @__PURE__ */ new Error(NO_DOCUMENT_ERROR)); const script = document.createElement("script"); if (crossOrigin) script.setAttribute("crossorigin", crossOrigin); script.async = async || false; script.defer = defer || false; script.addEventListener("load", () => { script.remove(); resolve(script); }); script.addEventListener("error", (event) => { script.remove(); reject(event.error ?? /* @__PURE__ */ new Error(`failed to load script: ${src}`)); }); script.src = src; if (nonce) script.nonce = nonce; beforeLoad?.(script); document.body.appendChild(script); }); }; return retry(load, { shouldRetry: (_, iterations) => { return iterations <= 5; } }); } //#endregion export { loadScript }; //# sourceMappingURL=loadScript.mjs.map