@ui-tool/core
Version:
118 lines • 16.6 kB
JavaScript
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==