{ "version": 3, "sources": ["src/app/lazy-load/lazy-load.service.ts"], "sourcesContent": ["import {\r\n Injectable,\r\n Inject,\r\n} from '@angular/core';\r\nimport { ReplaySubject, Observable } from 'rxjs';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LazyLoadService {\r\n private loadedLibraries: { [url: string]: ReplaySubject } = {};\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private readonly document: Document\r\n ) {\r\n }\r\n\r\n loadScript(url: string, atIdleTime?: boolean, delay?: boolean): Observable {\r\n const doc = this.document;\r\n if (this.loadedLibraries[url]) {\r\n return this.loadedLibraries[url].asObservable();\r\n }\r\n\r\n this.loadedLibraries[url] = new ReplaySubject();\r\n\r\n\r\n const script = doc.createElement('script');\r\n script.type = 'text/javascript';\r\n script.src = url;\r\n script.setAttribute('defer','');\r\n\r\n script.addEventListener('load', () => this.onLoad(url));\r\n script.addEventListener('error', () => this.onError(url));\r\n\r\n if (atIdleTime && 'requestIdleCallback' in window) {\r\n window.requestIdleCallback(() => {\r\n doc.head.insertBefore(script, doc.head.firstChild);\r\n });\r\n } else if(delay) {\r\n doc.body.appendChild(script);\r\n // setTimeout(() => doc.head.insertBefore(script, doc.head.firstChild), delay); \r\n } else {\r\n doc.head.insertBefore(script, doc.head.firstChild);\r\n }\r\n\r\n\r\n return this.loadedLibraries[url].asObservable();\r\n }\r\n\r\n loadStyle(url: string, atIdleTime?: boolean): Observable {\r\n const doc = this.document;\r\n if (this.loadedLibraries[url]) {\r\n return this.loadedLibraries[url].asObservable();\r\n }\r\n\r\n this.loadedLibraries[url] = new ReplaySubject();\r\n\r\n const style = doc.createElement('link');\r\n style.type = 'text/css';\r\n style.href = url;\r\n style.rel = 'stylesheet';\r\n\r\n style.addEventListener('load', () => this.onLoad(url));\r\n style.addEventListener('error', () => this.onError(url));\r\n\r\n if (atIdleTime && 'requestIdleCallback' in window) {\r\n window.requestIdleCallback(() => {\r\n doc.head.appendChild(style);\r\n });\r\n } else {\r\n doc.head.appendChild(style);\r\n }\r\n\r\n return this.loadedLibraries[url].asObservable();\r\n }\r\n\r\n onLoad(url): void {\r\n const ll = this.loadedLibraries;\r\n ll[url].next(true);\r\n ll[url].complete();\r\n }\r\n\r\n onError(url): void {\r\n this.loadedLibraries[url].error(`error to load ${url}`);\r\n }\r\n\r\n}\r\n"], "mappings": "gGAUA,IAAaA,GAAe,IAAA,CAAtB,IAAOA,EAAP,MAAOA,CAAe,CAG1BC,YACqCC,EAAkB,CAAlB,KAAAA,SAAAA,EAH7B,KAAAC,gBAA6D,CAAA,CAKrE,CAEAC,WAAWC,EAAaC,EAAsBC,EAAe,CAC3D,IAAMC,EAAM,KAAKN,SACjB,GAAI,KAAKC,gBAAgBE,CAAG,EAC1B,OAAO,KAAKF,gBAAgBE,CAAG,EAAEI,aAAY,EAG/C,KAAKN,gBAAgBE,CAAG,EAAI,IAAIK,EAGhC,IAAMC,EAASH,EAAII,cAAc,QAAQ,EACzCD,OAAAA,EAAOE,KAAO,kBACdF,EAAOG,IAAMT,EACbM,EAAOI,aAAa,QAAQ,EAAE,EAE9BJ,EAAOK,iBAAiB,OAAQ,IAAM,KAAKC,OAAOZ,CAAG,CAAC,EACtDM,EAAOK,iBAAiB,QAAS,IAAM,KAAKE,QAAQb,CAAG,CAAC,EAEpDC,GAAc,wBAAyBa,OACzCA,OAAOC,oBAAoB,IAAK,CAC9BZ,EAAIa,KAAKC,aAAaX,EAAQH,EAAIa,KAAKE,UAAU,CACnD,CAAC,EACOhB,EACRC,EAAIgB,KAAKC,YAAYd,CAAM,EAG3BH,EAAIa,KAAKC,aAAaX,EAAQH,EAAIa,KAAKE,UAAU,EAI5C,KAAKpB,gBAAgBE,CAAG,EAAEI,aAAY,CAC/C,CAEAiB,UAAUrB,EAAaC,EAAoB,CACzC,IAAME,EAAM,KAAKN,SACjB,GAAI,KAAKC,gBAAgBE,CAAG,EAC1B,OAAO,KAAKF,gBAAgBE,CAAG,EAAEI,aAAY,EAG/C,KAAKN,gBAAgBE,CAAG,EAAI,IAAIK,EAEhC,IAAMiB,EAAQnB,EAAII,cAAc,MAAM,EACtCe,OAAAA,EAAMd,KAAO,WACbc,EAAMC,KAAOvB,EACbsB,EAAME,IAAM,aAEZF,EAAMX,iBAAiB,OAAQ,IAAM,KAAKC,OAAOZ,CAAG,CAAC,EACrDsB,EAAMX,iBAAiB,QAAS,IAAM,KAAKE,QAAQb,CAAG,CAAC,EAEnDC,GAAc,wBAAyBa,OACzCA,OAAOC,oBAAoB,IAAK,CAC9BZ,EAAIa,KAAKI,YAAYE,CAAK,CAC5B,CAAC,EAEDnB,EAAIa,KAAKI,YAAYE,CAAK,EAGrB,KAAKxB,gBAAgBE,CAAG,EAAEI,aAAY,CAC/C,CAEAQ,OAAOZ,EAAG,CACR,IAAMyB,EAAK,KAAK3B,gBAChB2B,EAAGzB,CAAG,EAAE0B,KAAK,EAAI,EACjBD,EAAGzB,CAAG,EAAE2B,SAAQ,CAClB,CAEAd,QAAQb,EAAG,CACT,KAAKF,gBAAgBE,CAAG,EAAE4B,MAAM,iBAAiB5B,CAAG,EAAE,CACxD,yCA3EWL,GAAekC,EAIhBC,CAAQ,CAAA,CAAA,wBAJPnC,EAAeoC,QAAfpC,EAAeqC,UAAAC,WAFd,MAAM,CAAA,EAEd,IAAOtC,EAAPuC,SAAOvC,CAAe,GAAA", "names": ["LazyLoadService", "constructor", "document", "loadedLibraries", "loadScript", "url", "atIdleTime", "delay", "doc", "asObservable", "ReplaySubject", "script", "createElement", "type", "src", "setAttribute", "addEventListener", "onLoad", "onError", "window", "requestIdleCallback", "head", "insertBefore", "firstChild", "body", "appendChild", "loadStyle", "style", "href", "rel", "ll", "next", "complete", "error", "\u0275\u0275inject", "DOCUMENT", "factory", "\u0275fac", "providedIn", "_LazyLoadService"] }