UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

1 lines 2.48 kB
{"version":3,"file":"loadScript.mjs","names":[],"sources":["../src/loadScript.ts"],"sourcesContent":["import { retry } from './retry';\n\nconst NO_DOCUMENT_ERROR = 'loadScript cannot be called when document does not exist';\nconst NO_SRC_ERROR = 'loadScript cannot be called without a src';\n\ntype LoadScriptOptions = {\n async?: boolean;\n defer?: boolean;\n crossOrigin?: 'anonymous' | 'use-credentials';\n nonce?: string;\n beforeLoad?: (script: HTMLScriptElement) => void;\n};\n\n/**\n *\n */\nexport async function loadScript(src = '', opts: LoadScriptOptions): Promise<HTMLScriptElement> {\n const { async, defer, beforeLoad, crossOrigin, nonce } = opts || {};\n\n const load = () => {\n return new Promise<HTMLScriptElement>((resolve, reject) => {\n if (!src) {\n reject(new Error(NO_SRC_ERROR));\n }\n\n if (!document || !document.body) {\n reject(new Error(NO_DOCUMENT_ERROR));\n }\n\n const script = document.createElement('script');\n\n if (crossOrigin) {\n script.setAttribute('crossorigin', crossOrigin);\n }\n script.async = async || false;\n script.defer = defer || false;\n\n script.addEventListener('load', () => {\n script.remove();\n resolve(script);\n });\n\n script.addEventListener('error', event => {\n script.remove();\n reject(event.error ?? new Error(`failed to load script: ${src}`));\n });\n\n script.src = src;\n if (nonce) {\n script.nonce = nonce;\n }\n beforeLoad?.(script);\n document.body.appendChild(script);\n });\n };\n\n return retry(load, {\n shouldRetry: (_, iterations) => {\n return iterations <= 5;\n },\n });\n}\n"],"mappings":";;;AAEA,MAAM,oBAAoB;AAC1B,MAAM,eAAe;;;;AAarB,eAAsB,WAAW,MAAM,IAAI,MAAqD;CAC9F,MAAM,EAAE,OAAO,OAAO,YAAY,aAAa,UAAU,QAAQ,CAAC;CAElE,MAAM,aAAa;EACjB,OAAO,IAAI,SAA4B,SAAS,WAAW;GACzD,IAAI,CAAC,KACH,uBAAO,IAAI,MAAM,YAAY,CAAC;GAGhC,IAAI,CAAC,YAAY,CAAC,SAAS,MACzB,uBAAO,IAAI,MAAM,iBAAiB,CAAC;GAGrC,MAAM,SAAS,SAAS,cAAc,QAAQ;GAE9C,IAAI,aACF,OAAO,aAAa,eAAe,WAAW;GAEhD,OAAO,QAAQ,SAAS;GACxB,OAAO,QAAQ,SAAS;GAExB,OAAO,iBAAiB,cAAc;IACpC,OAAO,OAAO;IACd,QAAQ,MAAM;GAChB,CAAC;GAED,OAAO,iBAAiB,UAAS,UAAS;IACxC,OAAO,OAAO;IACd,OAAO,MAAM,yBAAS,IAAI,MAAM,0BAA0B,KAAK,CAAC;GAClE,CAAC;GAED,OAAO,MAAM;GACb,IAAI,OACF,OAAO,QAAQ;GAEjB,aAAa,MAAM;GACnB,SAAS,KAAK,YAAY,MAAM;EAClC,CAAC;CACH;CAEA,OAAO,MAAM,MAAM,EACjB,cAAc,GAAG,eAAe;EAC9B,OAAO,cAAc;CACvB,EACF,CAAC;AACH"}