UNPKG

@ui-tool/core

Version:
118 lines 16.6 kB
import { Inject, Injectable } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { forkJoin, of, throwError } from 'rxjs'; import { delay, mergeMap, retryWhen, tap } from 'rxjs/operators'; import * as i0 from "@angular/core"; export class AssetService { //#region Constructor constructor(_document) { this._document = _document; } //#endregion //#region Methods loadAsync(systemFiles) { const loadSystemFilesObservables = []; for (const mqSystemFile of systemFiles) { let htmlElement = null; // @ts-ignore let htmlElementBuilder = null; switch (mqSystemFile.kind) { case 'js-script': const mqScriptFile = mqSystemFile; htmlElement = this._document.querySelector(`script[src=${CSS.escape(mqScriptFile.link)}]`); htmlElementBuilder = () => { const scriptTag = this._document.createElement('script'); scriptTag.src = mqScriptFile.link; return scriptTag; }; break; case 'css': const mqCssFile = mqSystemFile; htmlElement = this._document.querySelector(`link[href=${CSS.escape(mqCssFile.href)}]`); htmlElementBuilder = () => { const linkTag = this._document.createElement('link'); linkTag.href = mqCssFile.href; linkTag.type = 'text/css'; linkTag.rel = 'stylesheet'; return linkTag; }; break; } const szDataLoadStatus = 'data-load-status'; if (htmlElement) { const loadStatus = htmlElement.getAttribute(szDataLoadStatus); if (loadStatus === 'done') { const result = { kind: mqSystemFile.kind, successful: true }; loadSystemFilesObservables.push(of(result)); continue; } } else { if (!htmlElementBuilder) { const result = { kind: mqSystemFile.kind, successful: false }; loadSystemFilesObservables.push(of(result)); continue; } htmlElement = htmlElementBuilder(); htmlElement.onload = () => { htmlElement.setAttribute(szDataLoadStatus, 'done'); }; htmlElement.onerror = () => { htmlElement.setAttribute(szDataLoadStatus, 'failed'); }; this._document.head.appendChild(htmlElement); } const loadHtmlElementObservable = of(null).pipe(delay(100), mergeMap(() => { const loadStatus = htmlElement.getAttribute(szDataLoadStatus); if (!loadStatus) { return throwError('NOT_YET_LOADED'); } if (loadStatus !== 'done') { return throwError('FAILED_TO_LOAD_MAP_QUEST_SYSTEM_FILE'); } const result = { kind: mqSystemFile.kind, successful: true }; return of(result); }), retryWhen(exceptionObservable => { return exceptionObservable.pipe(tap(exception => { if (exception !== 'NOT_YET_LOADED') { throw new Error(exception); } })); })); loadSystemFilesObservables.push(loadHtmlElementObservable); } if (!loadSystemFilesObservables.length) { return of([]); } return forkJoin(loadSystemFilesObservables); } unload(systemFiles) { for (const mqSystemFile of systemFiles) { switch (mqSystemFile.kind) { case 'js-script': const mqScriptFile = mqSystemFile; const scriptElement = this._document.querySelector(`script[src=${CSS.escape(mqScriptFile.link)}]`); if (scriptElement) { scriptElement.remove(); } break; case 'css': const mqCssFile = mqSystemFile; const linkElement = this._document.querySelector(`link[href=${CSS.escape(mqCssFile.href)}]`); if (linkElement) { linkElement.remove(); } break; } } } } AssetService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AssetService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); AssetService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AssetService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AssetService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: Document, decorators: [{ type: Inject, args: [DOCUMENT] }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvc2VydmljZXMvaW1wbGVtZW50YXRpb25zL2Fzc2V0L2Fzc2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBSy9ELE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLHFCQUFxQjtJQUVyQixZQUF3RCxTQUFtQjtRQUFuQixjQUFTLEdBQVQsU0FBUyxDQUFVO0lBRTNFLENBQUM7SUFFRCxZQUFZO0lBRVosaUJBQWlCO0lBRVYsU0FBUyxDQUFDLFdBQXdCO1FBQ3ZDLE1BQU0sMEJBQTBCLEdBQWtDLEVBQUUsQ0FBQztRQUVyRSxLQUFLLE1BQU0sWUFBWSxJQUFJLFdBQVcsRUFBRTtZQUN0QyxJQUFJLFdBQVcsR0FBUSxJQUFJLENBQUM7WUFDNUIsYUFBYTtZQUNiLElBQUksa0JBQWtCLEdBQXNCLElBQUksQ0FBQztZQUVqRCxRQUFRLFlBQVksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLEtBQUssV0FBVztvQkFDZCxNQUFNLFlBQVksR0FBRyxZQUE0QixDQUFDO29CQUNsRCxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsY0FBYyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNGLGtCQUFrQixHQUFHLEdBQUcsRUFBRTt3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LFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzdGLElBQUksV0FBVyxFQUFFO3dCQUNmLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDdEI7b0JBQ0QsTUFBTTthQUNUO1NBQ0Y7SUFDSCxDQUFDOzswR0F6SFUsWUFBWSxrQkFHSSxRQUFROzhHQUh4QixZQUFZOzRGQUFaLFlBQVk7a0JBRHhCLFVBQVU7MERBSTBELFFBQVE7MEJBQXZELE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUFzc2V0U2VydmljZX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hc3NldC1zZXJ2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3J9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWxheSwgbWVyZ2VNYXAsIHJldHJ5V2hlbiwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Fzc2V0TG9hZFJlc3VsdCwgQ3NzRmlsZSwgSnNTY3JpcHRGaWxlLCBBc3NldEZpbGV9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFzc2V0U2VydmljZSBpbXBsZW1lbnRzIElBc3NldFNlcnZpY2Uge1xuICAvLyNyZWdpb24gQ29uc3RydWN0b3JcblxuICBwdWJsaWMgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJvdGVjdGVkIHJlYWRvbmx5IF9kb2N1bWVudDogRG9jdW1lbnQpIHtcblxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIE1ldGhvZHNcblxuICBwdWJsaWMgbG9hZEFzeW5jKHN5c3RlbUZpbGVzOiBBc3NldEZpbGVbXSk6IE9ic2VydmFibGU8QXNzZXRMb2FkUmVzdWx0W10+IHtcbiAgICBjb25zdCBsb2FkU3lzdGVtRmlsZXNPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxBc3NldExvYWRSZXN1bHQ+W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgbXFTeXN0ZW1GaWxlIG9mIHN5c3RlbUZpbGVzKSB7XG4gICAgICBsZXQgaHRtbEVsZW1lbnQ6IGFueSA9IG51bGw7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBsZXQgaHRtbEVsZW1lbnRCdWlsZGVyOiAoKSA9PiBIVE1MRWxlbWVudCA9IG51bGw7XG5cbiAgICAgIHN3aXRjaCAobXFTeXN0ZW1GaWxlLmtpbmQpIHtcbiAgICAgICAgY2FzZSAnanMtc2NyaXB0JzpcbiAgICAgICAgICBjb25zdCBtcVNjcmlwdEZpbGUgPSBtcVN5c3RlbUZpbGUgYXMgSnNTY3JpcHRGaWxlO1xuICAgICAgICAgIGh0bWxFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz0ke0NTUy5lc2NhcGUobXFTY3JpcHRGaWxlLmxpbmspfV1gKTtcbiAgICAgICAgICBodG1sRWxlbWVudEJ1aWxkZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzY3JpcHRUYWcgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdFRhZy5zcmMgPSBtcVNjcmlwdEZpbGUubGluaztcbiAgICAgICAgICAgIHJldHVybiBzY3JpcHRUYWc7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICAgIGNvbnN0IG1xQ3NzRmlsZSA9IG1xU3lzdGVtRmlsZSBhcyBDc3NGaWxlO1xuICAgICAgICAgIGh0bWxFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSR7Q1NTLmVzY2FwZShtcUNzc0ZpbGUuaHJlZil9XWApO1xuICAgICAgICAgIGh0bWxFbGVtZW50QnVpbGRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUYWcgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgICAgICBsaW5rVGFnLmhyZWYgPSBtcUNzc0ZpbGUuaHJlZjtcbiAgICAgICAgICAgIGxpbmtUYWcudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgICAgICBsaW5rVGFnLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgICAgICAgICAgIHJldHVybiBsaW5rVGFnO1xuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN6RGF0YUxvYWRTdGF0dXMgPSAnZGF0YS1sb2FkLXN0YXR1cyc7XG5cbiAgICAgIGlmIChodG1sRWxlbWVudCkge1xuICAgICAgICBjb25zdCBsb2FkU3RhdHVzID0gaHRtbEVsZW1lbnQuZ2V0QXR0cmlidXRlKHN6RGF0YUxvYWRTdGF0dXMpO1xuICAgICAgICBpZiAobG9hZFN0YXR1cyA9PT0gJ2RvbmUnKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBBc3NldExvYWRSZXN1bHQgPSB7IGtpbmQ6IG1xU3lzdGVtRmlsZS5raW5kLCBzdWNjZXNzZnVsOiB0cnVlIH07XG4gICAgICAgICAgbG9hZFN5c3RlbUZpbGVzT2JzZXJ2YWJsZXMucHVzaChvZihyZXN1bHQpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFodG1sRWxlbWVudEJ1aWxkZXIpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IEFzc2V0TG9hZFJlc3VsdCA9IHsga2luZDogbXFTeXN0ZW1GaWxlLmtpbmQsIHN1Y2Nlc3NmdWw6IGZhbHNlIH07XG4gICAgICAgICAgbG9hZFN5c3RlbUZpbGVzT2JzZXJ2YWJsZXMucHVzaChvZihyZXN1bHQpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBodG1sRWxlbWVudCA9IGh0bWxFbGVtZW50QnVpbGRlcigpO1xuICAgICAgICBodG1sRWxlbWVudC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgaHRtbEVsZW1lbnQuc2V0QXR0cmlidXRlKHN6RGF0YUxvYWRTdGF0dXMsICdkb25lJyk7XG4gICAgICAgIH07XG4gICAgICAgIGh0bWxFbGVtZW50Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgaHRtbEVsZW1lbnQuc2V0QXR0cmlidXRlKHN6RGF0YUxvYWRTdGF0dXMsICdmYWlsZWQnKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChodG1sRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvYWRIdG1sRWxlbWVudE9ic2VydmFibGUgPSBvZihudWxsKS5waXBlKFxuICAgICAgICBkZWxheSgxMDApLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9hZFN0YXR1cyA9IGh0bWxFbGVtZW50LmdldEF0dHJpYnV0ZShzekRhdGFMb2FkU3RhdHVzKTtcbiAgICAgICAgICBpZiAoIWxvYWRTdGF0dXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdOT1RfWUVUX0xPQURFRCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobG9hZFN0YXR1cyAhPT0gJ2RvbmUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignRkFJTEVEX1RPX0xPQURfTUFQX1FVRVNUX1NZU1RFTV9GSUxFJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlc3VsdDogQXNzZXRMb2FkUmVzdWx0ID0geyBraW5kOiBtcVN5c3RlbUZpbGUua2luZCwgc3VjY2Vzc2Z1bDogdHJ1ZSB9O1xuICAgICAgICAgIHJldHVybiBvZihyZXN1bHQpO1xuICAgICAgICB9KSxcbiAgICAgICAgcmV0cnlXaGVuKGV4Y2VwdGlvbk9ic2VydmFibGUgPT4ge1xuICAgICAgICAgIHJldHVybiBleGNlcHRpb25PYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICB0YXAoZXhjZXB0aW9uID0+IHtcbiAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbiAhPT0gJ05PVF9ZRVRfTE9BREVEJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihleGNlcHRpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgbG9hZFN5c3RlbUZpbGVzT2JzZXJ2YWJsZXMucHVzaChsb2FkSHRtbEVsZW1lbnRPYnNlcnZhYmxlKTtcbiAgICB9XG5cbiAgICBpZiAoIWxvYWRTeXN0ZW1GaWxlc09ic2VydmFibGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ya0pvaW4obG9hZFN5c3RlbUZpbGVzT2JzZXJ2YWJsZXMpO1xuICB9XG5cbiAgcHVibGljIHVubG9hZChzeXN0ZW1GaWxlczogQXNzZXRGaWxlW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG1xU3lzdGVtRmlsZSBvZiBzeXN0ZW1GaWxlcykge1xuICAgICAgc3dpdGNoIChtcVN5c3RlbUZpbGUua2luZCkge1xuICAgICAgICBjYXNlICdqcy1zY3JpcHQnOlxuICAgICAgICAgIGNvbnN0IG1xU2NyaXB0RmlsZSA9IG1xU3lzdGVtRmlsZSBhcyBKc1NjcmlwdEZpbGU7XG4gICAgICAgICAgY29uc3Qgc2NyaXB0RWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYHNjcmlwdFtzcmM9JHtDU1MuZXNjYXBlKG1xU2NyaXB0RmlsZS5saW5rKX1dYCk7XG4gICAgICAgICAgaWYgKHNjcmlwdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nzcyc6XG4gICAgICAgICAgY29uc3QgbXFDc3NGaWxlID0gbXFTeXN0ZW1GaWxlIGFzIENzc0ZpbGU7XG4gICAgICAgICAgY29uc3QgbGlua0VsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBsaW5rW2hyZWY9JHtDU1MuZXNjYXBlKG1xQ3NzRmlsZS5ocmVmKX1dYCk7XG4gICAgICAgICAgaWYgKGxpbmtFbGVtZW50KSB7XG4gICAgICAgICAgICBsaW5rRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==