{"version":3,"sources":["../src/loadScript.ts"],"sourcesContent":["type LoadScriptOptions = {\n    async?: boolean;\n    defer?: boolean;\n    crossOrigin?: 'anonymous' | 'use-credentials';\n    nonce?: string;\n    beforeLoad?: (script: HTMLScriptElement) => void;\n  };\n\n  export async function loadScript(src ='', options: LoadScriptOptions): Promise<HTMLScriptElement> {\n    const { async, defer, crossOrigin, nonce, beforeLoad } = options;\n\n    const load = () => {\n      return new Promise<HTMLScriptElement>((resolve, reject) => {\n        if (!src) {\n          reject(new Error('Script src is required'));\n        }\n\n        if (!document || !document.body) {\n          reject(new Error('Document body is not available'));\n        }\n\n        const script = document.createElement('script');\n\n        if (crossOrigin) script.setAttribute('crossorigin', crossOrigin);\n        script.async = async || false;\n        script.defer = defer || false;\n\n        let resolved = false;\n        let timeoutId: NodeJS.Timeout | null = null;\n\n        const cleanup = () => {\n          script.removeEventListener('load', handleLoad);\n          script.removeEventListener('error', handleError);\n          if (timeoutId) {\n            clearTimeout(timeoutId);\n            timeoutId = null;\n          }\n        };\n        \n        const handleLoad = () => {\n          if (resolved) return;\n          console.log(`[loadScript] Script loaded successfully: ${src}`);\n\n          resolved = true;\n          cleanup();\n          resolve(script);\n        };\n        \n        const handleError = (error: ErrorEvent) => {\n          if (resolved) return;\n          resolved = true;\n          cleanup();\n          script.remove();\n          console.error(`[loadScript] Failed to load script: ${src}`, error);\n          reject(new Error(`Failed to load script: ${src}, Error: ${error.message}`));\n        };\n        \n        script.addEventListener('load', handleLoad);\n        script.addEventListener('error', handleError);\n\n        script.src = src;\n        script.nonce = nonce;\n        beforeLoad?.(script);\n\n        console.log(`[loadScript] Appending script to document body: ${src}`);\n        document.body.appendChild(script)\n      });\n    };\n\n    return load()\n\n    //return retry(load, { shouldRetry: (_, iterations) => iterations <=5 });\n  }"],"mappings":";AAQE,eAAsB,WAAW,MAAK,IAAI,SAAwD;AAChG,QAAM,EAAE,OAAO,OAAO,aAAa,OAAO,WAAW,IAAI;AAEzD,QAAM,OAAO,MAAM;AACjB,WAAO,IAAI,QAA2B,CAAC,SAAS,WAAW;AACzD,UAAI,CAAC,KAAK;AACR,eAAO,IAAI,MAAM,wBAAwB,CAAC;AAAA,MAC5C;AAEA,UAAI,CAAC,YAAY,CAAC,SAAS,MAAM;AAC/B,eAAO,IAAI,MAAM,gCAAgC,CAAC;AAAA,MACpD;AAEA,YAAM,SAAS,SAAS,cAAc,QAAQ;AAE9C,UAAI,YAAa,QAAO,aAAa,eAAe,WAAW;AAC/D,aAAO,QAAQ,SAAS;AACxB,aAAO,QAAQ,SAAS;AAExB,UAAI,WAAW;AACf,UAAI,YAAmC;AAEvC,YAAM,UAAU,MAAM;AACpB,eAAO,oBAAoB,QAAQ,UAAU;AAC7C,eAAO,oBAAoB,SAAS,WAAW;AAC/C,YAAI,WAAW;AACb,uBAAa,SAAS;AACtB,sBAAY;AAAA,QACd;AAAA,MACF;AAEA,YAAM,aAAa,MAAM;AACvB,YAAI,SAAU;AACd,gBAAQ,IAAI,4CAA4C,GAAG,EAAE;AAE7D,mBAAW;AACX,gBAAQ;AACR,gBAAQ,MAAM;AAAA,MAChB;AAEA,YAAM,cAAc,CAAC,UAAsB;AACzC,YAAI,SAAU;AACd,mBAAW;AACX,gBAAQ;AACR,eAAO,OAAO;AACd,gBAAQ,MAAM,uCAAuC,GAAG,IAAI,KAAK;AACjE,eAAO,IAAI,MAAM,0BAA0B,GAAG,YAAY,MAAM,OAAO,EAAE,CAAC;AAAA,MAC5E;AAEA,aAAO,iBAAiB,QAAQ,UAAU;AAC1C,aAAO,iBAAiB,SAAS,WAAW;AAE5C,aAAO,MAAM;AACb,aAAO,QAAQ;AACf,+CAAa;AAEb,cAAQ,IAAI,mDAAmD,GAAG,EAAE;AACpE,eAAS,KAAK,YAAY,MAAM;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,SAAO,KAAK;AAGd;","names":[]}