UNPKG

@memberjunction/ng-react

Version:

Angular components for hosting React components in MemberJunction applications

111 lines (110 loc) 4.3 kB
/** * @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>; }