{ "version": 3, "sources": ["src/app/core/services/script-loader.service.ts"], "sourcesContent": ["import { DOCUMENT } from '@angular/common';\nimport {\n Inject,\n Injectable,\n makeStateKey,\n OnDestroy,\n TransferState,\n} from '@angular/core';\nimport { EnvironmentService } from '@core/services/environment.service';\nimport { Observable, Observer, of } from 'rxjs';\n\nexport interface ScriptModel {\n src: string;\n loaded: boolean;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ScriptLoaderService implements OnDestroy {\n private scripts: ScriptModel[] = [];\n private readonly scriptTransferStateKey = makeStateKey(\n 'SCRIPT_SERVICE_STATE'\n );\n constructor(\n private environmentService: EnvironmentService,\n private transferState: TransferState,\n @Inject(DOCUMENT) private document: Document\n ) {\n if (this.environmentService.isBrowser()) {\n this.scripts = this.transferState.get(\n this.scriptTransferStateKey,\n []\n );\n }\n }\n\n ngOnDestroy(): void {\n if (this.environmentService.isServer()) {\n this.transferState.set(this.scriptTransferStateKey, this.scripts);\n }\n }\n\n public load(src: string, addSSR = false): Observable {\n if (addSSR || this.environmentService.isBrowser()) {\n return this.loadScript(src);\n }\n return of(null);\n }\n\n private loadScript(src: string) {\n return new Observable(\n (observer: Observer) => {\n const existingScript = this.scripts.find(s => s.src === src);\n // if no script is found, create a new one\n if (!existingScript) {\n const script = {\n src: src,\n loaded: false,\n };\n this.scripts = [...this.scripts, script];\n\n // Load the script\n const scriptElement = this.document.createElement('script');\n scriptElement.setAttribute('type', 'text/javascript');\n scriptElement.setAttribute('async', 'async');\n scriptElement.setAttribute('src', src);\n\n scriptElement.onload = () => {\n this.scripts = this.scripts.map(currentScript =>\n currentScript.src === src\n ? { ...currentScript, loaded: true }\n : currentScript\n );\n observer.next(script);\n observer.complete();\n };\n\n scriptElement.onerror = () => {\n observer.error(\"Couldn't load script \" + src);\n observer.complete();\n };\n this.document.head.appendChild(scriptElement);\n } else if (existingScript && existingScript.loaded) {\n // if script is found and loaded, return it\n observer.next(existingScript);\n observer.complete();\n }\n // if script is found but not loaded, wait for it to load\n }\n );\n }\n}\n"], "mappings": "iKAmBA,IAAaA,GAAmB,IAAA,CAA1B,MAAOA,CAAmB,CAK5BC,YACYC,EACAC,EACkBC,EAAkB,CAFpC,KAAAF,mBAAAA,EACA,KAAAC,cAAAA,EACkB,KAAAC,SAAAA,EAPtB,KAAAC,QAAyB,CAAA,EAChB,KAAAC,uBACb,uBAOI,KAAKJ,mBAAmBK,UAAS,IACjC,KAAKF,QAAU,KAAKF,cAAcK,IAC9B,KAAKF,uBACL,CAAA,CAAE,EAGd,CAEAG,aAAW,CACH,KAAKP,mBAAmBQ,SAAQ,GAChC,KAAKP,cAAcQ,IAAI,KAAKL,uBAAwB,KAAKD,OAAO,CAExE,CAEOO,KAAKC,EAAaC,EAAS,GAAK,CACnC,OAAIA,GAAU,KAAKZ,mBAAmBK,UAAS,EACpC,KAAKQ,WAAWF,CAAG,EAEvBG,EAAG,IAAI,CAClB,CAEQD,WAAWF,EAAW,CAC1B,OAAO,IAAII,EACNC,GAAmC,CAChC,IAAMC,EAAiB,KAAKd,QAAQe,KAAKC,GAAKA,EAAER,MAAQA,CAAG,EAE3D,GAAKM,EA4BMA,GAAkBA,EAAeG,SAExCJ,EAASK,KAAKJ,CAAc,EAC5BD,EAASM,SAAQ,OA/BA,CACjB,IAAMC,EAAS,CACXZ,IAAKA,EACLS,OAAQ,IAEZ,KAAKjB,QAAU,CAAC,GAAG,KAAKA,QAASoB,CAAM,EAGvC,IAAMC,EAAgB,KAAKtB,SAASuB,cAAc,QAAQ,EAC1DD,EAAcE,aAAa,OAAQ,iBAAiB,EACpDF,EAAcE,aAAa,QAAS,OAAO,EAC3CF,EAAcE,aAAa,MAAOf,CAAG,EAErCa,EAAcG,OAAS,IAAK,CACxB,KAAKxB,QAAU,KAAKA,QAAQyB,IAAIC,GAC5BA,EAAclB,MAAQA,EAChBmB,EAAAC,EAAA,GAAKF,GAAL,CAAoBT,OAAQ,EAAI,GAChCS,CAAa,EAEvBb,EAASK,KAAKE,CAAM,EACpBP,EAASM,SAAQ,CACrB,EAEAE,EAAcQ,QAAU,IAAK,CACzBhB,EAASiB,MAAM,wBAA0BtB,CAAG,EAC5CK,EAASM,SAAQ,CACrB,EACA,KAAKpB,SAASgC,KAAKC,YAAYX,CAAa,CAChD,CAMJ,CAAC,CAET,iDAxES1B,GAAmBsC,EAAAC,CAAA,EAAAD,EAAAE,CAAA,EAAAF,EAQhBG,CAAQ,CAAA,CAAA,CAAA,iCARXzC,EAAmB0C,QAAnB1C,EAAmB2C,UAAAC,WAFhB,MAAM,CAAA,CAAA,SAET5C,CAAmB,GAAA", "names": ["ScriptLoaderService", "constructor", "environmentService", "transferState", "document", "scripts", "scriptTransferStateKey", "isBrowser", "get", "ngOnDestroy", "isServer", "set", "load", "src", "addSSR", "loadScript", "of", "Observable", "observer", "existingScript", "find", "s", "loaded", "next", "complete", "script", "scriptElement", "createElement", "setAttribute", "onload", "map", "currentScript", "__spreadProps", "__spreadValues", "onerror", "error", "head", "appendChild", "\u0275\u0275inject", "EnvironmentService", "TransferState", "DOCUMENT", "factory", "\u0275fac", "providedIn"] }