@memberjunction/ng-react
Version:
Angular components for hosting React components in MemberJunction applications
111 lines (110 loc) • 4.3 kB
TypeScript
/**
* @fileoverview Service for loading external scripts and CSS in Angular applications.
* Manages the lifecycle of dynamically loaded resources with proper cleanup.
* @module @memberjunction/ng-react
*/
import { OnDestroy } from '@angular/core';
import { LibraryConfiguration, ExternalLibraryConfig } from '@memberjunction/react-runtime';
import * as i0 from "@angular/core";
/**
* Service for loading external scripts and CSS with proper cleanup.
* Provides methods to dynamically load React and related libraries from CDN.
*/
export declare class ScriptLoaderService implements OnDestroy {
private loadedResources;
private readonly cleanupOnDestroy;
ngOnDestroy(): void;
/**
* Load a script from URL with automatic cleanup tracking
* @param url - Script URL to load
* @param globalName - Expected global variable name
* @param autoCleanup - Whether to cleanup on service destroy
* @returns Promise resolving to the global object
*/
loadScript(url: string, globalName: string, autoCleanup?: boolean): Promise<any>;
/**
* Load a script with additional validation function
* @param url - Script URL to load
* @param globalName - Expected global variable name
* @param validator - Function to validate the loaded object
* @param autoCleanup - Whether to cleanup on service destroy
* @returns Promise resolving to the validated global object
*/
loadScriptWithValidation(url: string, globalName: string, validator: (obj: any) => boolean, autoCleanup?: boolean): Promise<any>;
/**
* Load CSS from URL
* @param url - CSS URL to load
*/
loadCSS(url: string): void;
/**
* Load common React libraries and UI frameworks
* @param config Optional library configuration
* @param additionalLibraries Optional additional libraries to merge
* @returns Promise resolving to React ecosystem objects
*/
loadReactEcosystem(config?: LibraryConfiguration, additionalLibraries?: ExternalLibraryConfig[]): Promise<{
React: any;
ReactDOM: any;
Babel: any;
libraries: any;
}>;
/**
* Get library name from URL for global variable mapping
* @param url - Library URL
* @returns Global variable name
*/
private getLibraryNameFromUrl;
/**
* Remove a specific loaded resource
* @param url - URL of resource to remove
*/
removeResource(url: string): void;
/**
* Clean up all resources marked for auto-cleanup
*/
private cleanup;
/**
* Create a promise that resolves when script loads
* @param url - Script URL
* @param globalName - Expected global variable
* @returns Promise resolving to global object
*/
private createScriptPromise;
/**
* Create a promise that resolves when script loads and passes validation
* @param url - Script URL
* @param globalName - Expected global variable
* @param validator - Validation function
* @returns Promise resolving to validated global object
*/
private createScriptPromiseWithValidation;
/**
* Wait for global object to be available and valid
* @param globalName - Global variable name
* @param validator - Validation function
* @param resolve - Promise resolve function
* @param reject - Promise reject function
* @param attempts - Current attempt number
* @param maxAttempts - Maximum attempts before failing
*/
private waitForValidation;
/**
* Wait for existing script to load
* @param script - Script element
* @param globalName - Expected global variable
* @param resolve - Promise resolve function
* @param reject - Promise reject function
*/
private waitForScriptLoad;
/**
* Wait for existing script to load with validation
* @param script - Script element
* @param globalName - Expected global variable
* @param validator - Validation function
* @param resolve - Promise resolve function
* @param reject - Promise reject function
*/
private waitForScriptLoadWithValidation;
static ɵfac: i0.ɵɵFactoryDeclaration<ScriptLoaderService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<ScriptLoaderService>;
}