|
|
|
|
@ -1,7 +1,6 @@
|
|
|
|
|
import { Observable, of } from 'rxjs';
|
|
|
|
|
import { switchMap } from 'rxjs/operators';
|
|
|
|
|
import { fromLazyLoad } from '../utils';
|
|
|
|
|
import { ContentSecurityStrategy, CONTENT_SECURITY_STRATEGY } from './content-security.strategy';
|
|
|
|
|
import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from './cross-origin.strategy';
|
|
|
|
|
import { DomStrategy, DOM_STRATEGY } from './dom.strategy';
|
|
|
|
|
|
|
|
|
|
@ -10,7 +9,6 @@ export abstract class LoadingStrategy<T extends HTMLScriptElement | HTMLLinkElem
|
|
|
|
|
public path: string,
|
|
|
|
|
protected domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(),
|
|
|
|
|
protected crossOriginStrategy: CrossOriginStrategy = CROSS_ORIGIN_STRATEGY.Anonymous(),
|
|
|
|
|
protected contentSecurityStrategy: ContentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Loose(),
|
|
|
|
|
) {}
|
|
|
|
|
|
|
|
|
|
abstract createElement(): T;
|
|
|
|
|
@ -18,25 +16,15 @@ export abstract class LoadingStrategy<T extends HTMLScriptElement | HTMLLinkElem
|
|
|
|
|
createStream<E extends Event>(): Observable<E> {
|
|
|
|
|
return of(null).pipe(
|
|
|
|
|
switchMap(() =>
|
|
|
|
|
fromLazyLoad<E>(
|
|
|
|
|
this.createElement(),
|
|
|
|
|
this.domStrategy,
|
|
|
|
|
this.crossOriginStrategy,
|
|
|
|
|
this.contentSecurityStrategy,
|
|
|
|
|
),
|
|
|
|
|
fromLazyLoad<E>(this.createElement(), this.domStrategy, this.crossOriginStrategy),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class ScriptLoadingStrategy extends LoadingStrategy<HTMLScriptElement> {
|
|
|
|
|
constructor(
|
|
|
|
|
src: string,
|
|
|
|
|
domStrategy?: DomStrategy,
|
|
|
|
|
crossOriginStrategy?: CrossOriginStrategy,
|
|
|
|
|
contentSecurityStrategy?: ContentSecurityStrategy,
|
|
|
|
|
) {
|
|
|
|
|
super(src, domStrategy, crossOriginStrategy, contentSecurityStrategy);
|
|
|
|
|
constructor(src: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) {
|
|
|
|
|
super(src, domStrategy, crossOriginStrategy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
createElement(): HTMLScriptElement {
|
|
|
|
|
@ -48,13 +36,8 @@ export class ScriptLoadingStrategy extends LoadingStrategy<HTMLScriptElement> {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class StyleLoadingStrategy extends LoadingStrategy<HTMLLinkElement> {
|
|
|
|
|
constructor(
|
|
|
|
|
href: string,
|
|
|
|
|
domStrategy?: DomStrategy,
|
|
|
|
|
crossOriginStrategy?: CrossOriginStrategy,
|
|
|
|
|
contentSecurityStrategy?: ContentSecurityStrategy,
|
|
|
|
|
) {
|
|
|
|
|
super(href, domStrategy, crossOriginStrategy, contentSecurityStrategy);
|
|
|
|
|
constructor(href: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) {
|
|
|
|
|
super(href, domStrategy, crossOriginStrategy);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
createElement(): HTMLLinkElement {
|
|
|
|
|
|