@memberjunction/react-runtime 3.3.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +33 -25
- package/CHANGELOG.md +40 -0
- package/dist/324.runtime.umd.js +817 -0
- package/dist/490.runtime.umd.js +1 -0
- package/dist/compiler/babel-config.js +15 -21
- package/dist/compiler/babel-config.js.map +1 -1
- package/dist/compiler/component-compiler.js +13 -17
- package/dist/compiler/component-compiler.js.map +1 -1
- package/dist/compiler/index.js +2 -13
- package/dist/compiler/index.js.map +1 -1
- package/dist/component-manager/component-manager.js +7 -34
- package/dist/component-manager/component-manager.js.map +1 -1
- package/dist/component-manager/index.js +1 -5
- package/dist/component-manager/index.js.map +1 -1
- package/dist/component-manager/types.js +1 -2
- package/dist/index.js +31 -100
- package/dist/index.js.map +1 -1
- package/dist/registry/component-registry-service.js +8 -35
- package/dist/registry/component-registry-service.js.map +1 -1
- package/dist/registry/component-registry.js +5 -9
- package/dist/registry/component-registry.js.map +1 -1
- package/dist/registry/component-resolver.js +5 -9
- package/dist/registry/component-resolver.js.map +1 -1
- package/dist/registry/index.js +4 -11
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/registry-provider.js +1 -2
- package/dist/runtime/component-hierarchy.js +24 -55
- package/dist/runtime/component-hierarchy.js.map +1 -1
- package/dist/runtime/component-wrapper.d.ts +18 -0
- package/dist/runtime/component-wrapper.d.ts.map +1 -0
- package/dist/runtime/component-wrapper.js +108 -0
- package/dist/runtime/error-boundary.js +4 -11
- package/dist/runtime/error-boundary.js.map +1 -1
- package/dist/runtime/index.js +4 -26
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/prop-builder.js +17 -28
- package/dist/runtime/prop-builder.js.map +1 -1
- package/dist/runtime/react-root-manager.js +4 -8
- package/dist/runtime/react-root-manager.js.map +1 -1
- package/dist/runtime.umd.js +1 -801
- package/dist/types/dependency-types.js +1 -2
- package/dist/types/index.js +2 -18
- package/dist/types/index.js.map +1 -1
- package/dist/types/library-config.js +1 -2
- package/dist/utilities/cache-manager.js +1 -5
- package/dist/utilities/cache-manager.js.map +1 -1
- package/dist/utilities/component-error-analyzer.js +53 -57
- package/dist/utilities/component-error-analyzer.js.map +1 -1
- package/dist/utilities/component-styles.js +2 -6
- package/dist/utilities/component-styles.js.map +1 -1
- package/dist/utilities/component-unwrapper.d.ts.map +1 -1
- package/dist/utilities/component-unwrapper.js +6 -13
- package/dist/utilities/component-unwrapper.js.map +1 -1
- package/dist/utilities/core-libraries.js +2 -7
- package/dist/utilities/core-libraries.js.map +1 -1
- package/dist/utilities/index.js +9 -25
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/library-dependency-resolver.js +1 -5
- package/dist/utilities/library-dependency-resolver.js.map +1 -1
- package/dist/utilities/library-loader.js +23 -27
- package/dist/utilities/library-loader.js.map +1 -1
- package/dist/utilities/library-registry.d.ts.map +1 -1
- package/dist/utilities/library-registry.js +3 -7
- package/dist/utilities/library-registry.js.map +1 -1
- package/dist/utilities/resource-manager.d.ts +0 -1
- package/dist/utilities/resource-manager.d.ts.map +1 -1
- package/dist/utilities/resource-manager.js +2 -6
- package/dist/utilities/resource-manager.js.map +1 -1
- package/dist/utilities/runtime-utilities.d.ts +10 -0
- package/dist/utilities/runtime-utilities.d.ts.map +1 -0
- package/dist/utilities/runtime-utilities.js +92 -0
- package/dist/utilities/standard-libraries.js +3 -8
- package/dist/utilities/standard-libraries.js.map +1 -1
- package/package.json +17 -17
- package/tsconfig.json +7 -22
- package/tsconfig.tsbuildinfo +1 -0
- package/typedoc.json +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-loader.js","sourceRoot":"","sources":["../../src/utilities/library-loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Library loading utilities for React runtime\n * Provides methods to load and manage external JavaScript libraries and CSS\n * @module @memberjunction/react-runtime/utilities\n */\n\nimport { \n StandardLibraries,\n StandardLibraryManager\n} from './standard-libraries';\nimport { LibraryConfiguration, ExternalLibraryConfig, LibraryLoadOptions as ConfigLoadOptions } from '../types/library-config';\nimport { getCoreRuntimeLibraries, isCoreRuntimeLibrary } from './core-libraries';\nimport { resourceManager } from './resource-manager';\nimport { ComponentLibraryEntity } from '@memberjunction/core-entities';\nimport { LibraryDependencyResolver } from './library-dependency-resolver';\nimport { LoadedLibraryState, DependencyResolutionOptions } from '../types/dependency-types';\nimport { LibraryRegistry } from './library-registry';\n\n// Unique component ID for resource tracking\nconst LIBRARY_LOADER_COMPONENT_ID = 'mj-react-runtime-library-loader-singleton';\n\n/**\n * Represents a loaded script or CSS resource\n */\ninterface LoadedResource {\n element: HTMLScriptElement | HTMLLinkElement;\n promise: Promise<any>;\n}\n\n/**\n * Options for loading libraries\n * @deprecated Use LibraryLoadOptions from library-config instead\n */\nexport interface LibraryLoadOptions {\n /** Load core libraries (lodash, d3, Chart.js, dayjs) */\n loadCore?: boolean;\n /** Load UI libraries (antd, React Bootstrap) */\n loadUI?: boolean;\n /** Load CSS files for UI libraries */\n loadCSS?: boolean;\n /** Custom library URLs to load */\n customLibraries?: { url: string; globalName: string }[];\n}\n\n/**\n * Result of loading libraries\n */\nexport interface LibraryLoadResult {\n React: any;\n ReactDOM: any;\n Babel: any;\n libraries: StandardLibraries;\n}\n\n/**\n * Library loader class for managing external script loading\n */\nexport class LibraryLoader {\n private static loadedResources = new Map<string, LoadedResource>();\n private static loadedLibraryStates = new Map<string, LoadedLibraryState>();\n private static dependencyResolver = new LibraryDependencyResolver({ debug: false });\n \n /**\n * Enable progressive delay for library initialization (useful for test harness)\n */\n public static enableProgressiveDelay: boolean = false;\n\n /**\n * Load all standard libraries (core + UI + CSS)\n * This is the main method that should be used by test harness and Angular wrapper\n * @param config Optional full library configuration to replace the default\n * @param additionalLibraries Optional additional libraries to merge with the configuration\n * @param options Optional options including debug mode flag\n */\n static async loadAllLibraries(\n config?: LibraryConfiguration, \n additionalLibraries?: ExternalLibraryConfig[],\n options?: { debug?: boolean }\n ): Promise<LibraryLoadResult> {\n if (config) {\n StandardLibraryManager.setConfiguration(config);\n }\n \n // If additional libraries are provided, merge them with the current configuration\n if (additionalLibraries && additionalLibraries.length > 0) {\n const currentConfig = StandardLibraryManager.getConfiguration();\n const mergedConfig: LibraryConfiguration = {\n libraries: [...currentConfig.libraries, ...additionalLibraries],\n metadata: {\n ...currentConfig.metadata,\n lastUpdated: new Date().toISOString()\n }\n };\n StandardLibraryManager.setConfiguration(mergedConfig);\n }\n \n return this.loadLibrariesFromConfig(undefined, options?.debug);\n }\n\n /**\n * Load libraries based on the current configuration\n */\n static async loadLibrariesFromConfig(options?: ConfigLoadOptions, debug?: boolean): Promise<LibraryLoadResult> {\n // Always load core runtime libraries first\n const coreLibraries = getCoreRuntimeLibraries(debug);\n const corePromises = coreLibraries.map(lib => \n this.loadScript(lib.cdnUrl, lib.globalVariable, debug)\n );\n \n const coreResults = await Promise.all(corePromises);\n const React = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'React');\n const ReactDOM = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'ReactDOM');\n const Babel = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'Babel');\n \n // Expose React and ReactDOM as globals for UMD libraries that expect them\n // Many React component libraries (Recharts, Victory, etc.) expect these as globals\n if (typeof window !== 'undefined') {\n if (React && !(window as any).React) {\n (window as any).React = React;\n console.log('✓ Exposed React as window.React for UMD compatibility');\n }\n if (ReactDOM && !(window as any).ReactDOM) {\n (window as any).ReactDOM = ReactDOM;\n console.log('✓ Exposed ReactDOM as window.ReactDOM for UMD compatibility');\n }\n // Also expose PropTypes as empty object if not present (for older libraries)\n if (!(window as any).PropTypes) {\n (window as any).PropTypes = {};\n console.log('✓ Exposed empty PropTypes as window.PropTypes for UMD compatibility');\n }\n }\n \n // Now load plugin libraries from configuration\n const config = StandardLibraryManager.getConfiguration();\n const enabledLibraries = StandardLibraryManager.getEnabledLibraries();\n \n // Filter out any core runtime libraries from plugin configuration\n let pluginLibraries = enabledLibraries.filter(lib => !isCoreRuntimeLibrary(lib.id));\n \n // Apply options filters if provided\n if (options) {\n if (options.categories) {\n pluginLibraries = pluginLibraries.filter(lib => \n options.categories!.includes(lib.category)\n );\n }\n if (options.excludeRuntimeOnly) {\n pluginLibraries = pluginLibraries.filter(lib => !lib.isRuntimeOnly);\n }\n }\n \n // Load CSS files for plugin libraries (non-blocking)\n pluginLibraries.forEach(lib => {\n if (lib.cdnCssUrl) {\n this.loadCSS(lib.cdnCssUrl);\n }\n });\n \n // Load plugin libraries\n const pluginPromises = pluginLibraries.map(lib => \n this.loadScript(lib.cdnUrl, lib.globalVariable, debug)\n );\n \n const pluginResults = await Promise.all(pluginPromises);\n \n // Build libraries object (only contains plugin libraries)\n const libraries: StandardLibraries = {};\n \n pluginLibraries.forEach((lib, index) => {\n libraries[lib.globalVariable] = pluginResults[index];\n });\n \n return {\n React: React || (window as any).React,\n ReactDOM: ReactDOM || (window as any).ReactDOM,\n Babel: Babel || (window as any).Babel,\n libraries\n };\n }\n\n /**\n * Load libraries with specific options (backward compatibility)\n * @deprecated Use loadLibrariesFromConfig instead\n */\n static async loadLibraries(options: LibraryLoadOptions): Promise<LibraryLoadResult> {\n const {\n loadCore = true,\n loadUI = true,\n loadCSS = true,\n customLibraries = []\n } = options;\n\n // Map old options to new configuration approach\n const categoriesToLoad: Array<ExternalLibraryConfig['category']> = ['runtime'];\n if (loadCore) {\n categoriesToLoad.push('utility', 'charting');\n }\n if (loadUI) {\n categoriesToLoad.push('ui');\n }\n \n const result = await this.loadLibrariesFromConfig({\n categories: categoriesToLoad\n });\n \n // Load custom libraries if provided\n if (customLibraries.length > 0) {\n const customPromises = customLibraries.map(({ url, globalName }) =>\n this.loadScript(url, globalName)\n );\n \n const customResults = await Promise.all(customPromises);\n customLibraries.forEach(({ globalName }, index) => {\n result.libraries[globalName] = customResults[index];\n });\n }\n \n return result;\n }\n\n /**\n * Load a script from URL\n */\n private static async loadScript(url: string, globalName: string, debug: boolean = false): Promise<any> {\n // Check if already loaded\n const existing = this.loadedResources.get(url);\n if (existing) {\n if (debug) {\n console.log(`✅ Library '${globalName}' already loaded (cached)`);\n }\n return existing.promise;\n }\n\n const promise = new Promise((resolve, reject) => {\n // Check if global already exists\n const existingGlobal = (window as any)[globalName];\n if (existingGlobal) {\n if (debug) {\n console.log(`✅ Library '${globalName}' already available globally`);\n }\n resolve(existingGlobal);\n return;\n }\n\n // Check if script tag exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`);\n if (existingScript) {\n this.waitForScriptLoad(existingScript as HTMLScriptElement, globalName, resolve, reject);\n return;\n }\n\n // Create new script\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n const cleanup = () => {\n script.removeEventListener('load', onLoad);\n script.removeEventListener('error', onError);\n };\n\n const onLoad = async () => {\n cleanup();\n \n // Use progressive delay if enabled, otherwise use original behavior\n if (LibraryLoader.enableProgressiveDelay) {\n try {\n const global = await LibraryLoader.waitForGlobalVariable(globalName, url, debug);\n resolve(global);\n } catch (error) {\n reject(error);\n }\n } else {\n // Original behavior\n const global = (window as any)[globalName];\n if (global) {\n if (debug) {\n console.log(`✅ Library '${globalName}' loaded successfully from ${url}`);\n }\n resolve(global);\n } else {\n // Some libraries may take a moment to initialize\n const timeoutId = resourceManager.setTimeout(\n LIBRARY_LOADER_COMPONENT_ID,\n () => {\n const delayedGlobal = (window as any)[globalName];\n if (delayedGlobal) {\n if (debug) {\n console.log(`✅ Library '${globalName}' loaded successfully (delayed initialization)`);\n }\n resolve(delayedGlobal);\n } else {\n reject(new Error(`${globalName} not found after script load`));\n }\n },\n 100,\n { url, globalName }\n );\n }\n }\n };\n\n const onError = () => {\n cleanup();\n reject(new Error(`Failed to load script: ${url}`));\n };\n\n script.addEventListener('load', onLoad);\n script.addEventListener('error', onError);\n\n if (debug) {\n console.log(`📦 Loading library '${globalName}' from ${url}...`);\n }\n\n // Note: Browser may show \"Could not read source map\" warnings for external libraries.\n // These are harmless and expected when loading minified libraries from CDNs\n // that reference source maps which aren't available. This doesn't affect functionality.\n document.head.appendChild(script);\n \n // Register the script element for cleanup\n resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, script);\n });\n\n this.loadedResources.set(url, { \n element: document.querySelector(`script[src=\"${url}\"]`)!, \n promise \n });\n\n return promise;\n }\n\n /**\n * Check if a library global variable is properly initialized\n * Generic check that works for any library\n */\n private static isLibraryReady(globalVariable: any): boolean {\n if (!globalVariable) {\n return false;\n }\n \n // For functions, they're ready immediately\n if (typeof globalVariable === 'function') {\n return true;\n }\n \n // For objects, check if they have properties (not an empty object)\n if (typeof globalVariable === 'object') {\n // Check for non-empty object with enumerable properties\n const keys = Object.keys(globalVariable);\n // Some libraries might have only non-enumerable properties, \n // so also check for common indicators of initialization\n return keys.length > 0 || \n Object.getOwnPropertyNames(globalVariable).length > 1 || // > 1 to exclude just constructor\n globalVariable.constructor !== Object; // Has a custom constructor\n }\n \n // For other types (string, number, etc.), consider them ready\n return true;\n }\n\n /**\n * Wait for a global variable to be available with progressive delays\n * @param globalName The name of the global variable to wait for\n * @param url The URL of the script (for debugging)\n * @param debug Whether to log debug information\n * @returns The global variable once it's available\n */\n private static async waitForGlobalVariable(\n globalName: string, \n url: string, \n debug: boolean = false\n ): Promise<any> {\n const delays = [0, 100, 200, 300, 400]; // Total: 1000ms max delay\n const maxAttempts = delays.length;\n let totalDelay = 0;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n // Wait for the specified delay (0ms on first attempt)\n if (attempt > 0) {\n const delay = delays[attempt];\n if (debug) {\n console.log(`⏳ Waiting ${delay}ms for ${globalName} to initialize (attempt ${attempt + 1}/${maxAttempts})...`);\n }\n await new Promise(resolve => {\n resourceManager.setTimeout(\n LIBRARY_LOADER_COMPONENT_ID,\n () => resolve(undefined),\n delay,\n { globalName, attempt }\n );\n });\n totalDelay += delay;\n }\n\n // Check if the global variable exists\n const global = (window as any)[globalName];\n if (global) {\n // Use generic library readiness check\n const isReady = this.isLibraryReady(global);\n\n if (isReady) {\n if (debug) {\n if (totalDelay > 0) {\n console.log(`✅ ${globalName} ready after ${totalDelay}ms delay`);\n } else {\n console.log(`✅ Library '${globalName}' loaded successfully from ${url}`);\n }\n }\n return global;\n } else if (debug && attempt < maxAttempts - 1) {\n console.log(`🔄 ${globalName} exists but not fully initialized, will retry...`);\n }\n }\n }\n\n // Final check after all attempts\n const finalGlobal = (window as any)[globalName];\n if (finalGlobal) {\n console.warn(`⚠️ ${globalName} loaded but may not be fully initialized after ${totalDelay}ms`);\n return finalGlobal;\n }\n\n throw new Error(`${globalName} not found after script load and ${totalDelay}ms delay`);\n }\n\n /**\n * Load CSS from URL\n */\n private static loadCSS(url: string): void {\n if (this.loadedResources.has(url)) {\n return;\n }\n\n const existingLink = document.querySelector(`link[href=\"${url}\"]`);\n if (existingLink) {\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n document.head.appendChild(link);\n \n // Register the link element for cleanup\n resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, link);\n\n this.loadedResources.set(url, {\n element: link,\n promise: Promise.resolve()\n });\n }\n\n /**\n * Wait for existing script to load\n */\n private static waitForScriptLoad(\n script: HTMLScriptElement,\n globalName: string,\n resolve: (value: any) => void,\n reject: (reason: any) => void\n ): void {\n const checkGlobal = () => {\n const global = (window as any)[globalName];\n if (global) {\n resolve(global);\n } else {\n // Retry after a short delay\n resourceManager.setTimeout(\n LIBRARY_LOADER_COMPONENT_ID,\n () => {\n const delayedGlobal = (window as any)[globalName];\n if (delayedGlobal) {\n resolve(delayedGlobal);\n } else {\n reject(new Error(`${globalName} not found after script load`));\n }\n },\n 100,\n { context: 'waitForScriptLoad', globalName }\n );\n }\n };\n\n // Check if already loaded\n if ((script as any).complete || (script as any).readyState === 'complete') {\n checkGlobal();\n return;\n }\n\n // Wait for load\n const loadHandler = () => {\n checkGlobal();\n };\n resourceManager.addEventListener(\n LIBRARY_LOADER_COMPONENT_ID,\n script,\n 'load',\n loadHandler,\n { once: true }\n );\n }\n\n\n /**\n * Get all loaded resources (for cleanup)\n */\n static getLoadedResources(): Map<string, LoadedResource> {\n return this.loadedResources;\n }\n\n /**\n * Clear loaded resources cache and cleanup DOM elements\n */\n static clearCache(): void {\n // Remove all script and link elements we added\n this.loadedResources.forEach((resource, url) => {\n if (resource.element && resource.element.parentNode) {\n resource.element.parentNode.removeChild(resource.element);\n }\n });\n \n this.loadedResources.clear();\n this.loadedLibraryStates.clear();\n \n // Clean up any resources managed by resource manager\n resourceManager.cleanupComponent(LIBRARY_LOADER_COMPONENT_ID);\n }\n\n /**\n * Load a library with its dependencies\n * @param libraryName - Name of the library to load\n * @param allLibraries - All available libraries for dependency resolution\n * @param requestedBy - Name of the component/library requesting this load\n * @param options - Dependency resolution options\n * @returns Promise resolving to the loaded library global object\n */\n static async loadLibraryWithDependencies(\n libraryName: string,\n allLibraries: ComponentLibraryEntity[],\n requestedBy: string = 'user',\n options?: DependencyResolutionOptions\n ): Promise<any> {\n const debug = options?.debug || false;\n \n if (debug) {\n console.log(`📚 Loading library '${libraryName}' with dependencies`);\n }\n\n // Check if already loaded\n const existingState = this.loadedLibraryStates.get(libraryName);\n if (existingState) {\n if (debug) {\n console.log(`✅ Library '${libraryName}' already loaded (version: ${existingState.version})`);\n }\n // Track who requested it\n if (!existingState.requestedBy.includes(requestedBy)) {\n existingState.requestedBy.push(requestedBy);\n }\n return (window as any)[existingState.globalVariable];\n }\n\n // Get load order including dependencies\n const loadOrderResult = this.dependencyResolver.getLoadOrder(\n [libraryName],\n allLibraries,\n options\n );\n\n if (!loadOrderResult.success) {\n const errors = loadOrderResult.errors?.join(', ') || 'Unknown error';\n throw new Error(`Failed to resolve dependencies for '${libraryName}': ${errors}`);\n }\n\n if (loadOrderResult.warnings && debug) {\n console.warn(`⚠️ Warnings for '${libraryName}':`, loadOrderResult.warnings);\n }\n\n const loadOrder = loadOrderResult.order || [];\n if (debug) {\n console.log(`📋 Load order for '${libraryName}':`, loadOrder.map(lib => `${lib.Name}@${lib.Version}`));\n }\n\n // Load libraries in order\n for (const library of loadOrder) {\n // Skip if already loaded\n if (this.loadedLibraryStates.has(library.Name)) {\n if (debug) {\n console.log(`⏭️ Skipping '${library.Name}' (already loaded)`);\n }\n continue;\n }\n\n // Check library status\n if (library.Status) {\n if (library.Status === 'Disabled') {\n console.error(`🚫 ERROR: Library '${library.Name}' is DISABLED and should not be used`);\n // Continue loading anyway per requirements\n } else if (library.Status === 'Deprecated') {\n console.warn(`⚠️ WARNING: Library '${library.Name}' is DEPRECATED. Consider using an alternative.`);\n }\n // Active status is fine, no message needed\n }\n\n if (debug) {\n console.log(`📥 Loading '${library.Name}@${library.Version}'`);\n }\n\n // Load the library\n if (!library.CDNUrl || !library.GlobalVariable) {\n throw new Error(`Library '${library.Name}' missing CDN URL or global variable`);\n }\n\n // Load CSS if available\n if (library.CDNCssUrl) {\n const cssUrls = library.CDNCssUrl.split(',').map(url => url.trim());\n for (const cssUrl of cssUrls) {\n if (cssUrl) {\n this.loadCSS(cssUrl);\n }\n }\n }\n\n // Load the script\n const loadedGlobal = await this.loadScript(library.CDNUrl, library.GlobalVariable, debug);\n\n // Track the loaded state\n const dependencies = Array.from(\n this.dependencyResolver.getDirectDependencies(library).keys()\n );\n\n this.loadedLibraryStates.set(library.Name, {\n name: library.Name,\n version: library.Version || 'unknown',\n globalVariable: library.GlobalVariable,\n loadedAt: new Date(),\n requestedBy: library.Name === libraryName ? [requestedBy] : [],\n dependencies\n });\n\n if (debug) {\n console.log(`✅ Loaded '${library.Name}@${library.Version}'`);\n }\n }\n\n // Return the originally requested library's global\n const targetLibrary = loadOrder.find(lib => lib.Name === libraryName);\n if (!targetLibrary || !targetLibrary.GlobalVariable) {\n throw new Error(`Failed to load library '${libraryName}'`);\n }\n\n return (window as any)[targetLibrary.GlobalVariable];\n }\n\n /**\n * Load multiple libraries with dependency resolution\n * @param libraryNames - Names of libraries to load\n * @param allLibraries - All available libraries for dependency resolution\n * @param requestedBy - Name of the component requesting these libraries\n * @param options - Dependency resolution options\n * @returns Map of library names to their loaded global objects\n */\n static async loadLibrariesWithDependencies(\n libraryNames: string[],\n allLibraries: ComponentLibraryEntity[],\n requestedBy: string = 'user',\n options?: DependencyResolutionOptions\n ): Promise<Map<string, any>> {\n const debug = options?.debug || false;\n const result = new Map<string, any>();\n \n if (debug) {\n console.log(`📚 Loading libraries with dependencies:`, libraryNames);\n console.log(` 📦 Total available libraries: ${allLibraries.length}`);\n }\n\n // Get combined load order for all requested libraries\n const loadOrderResult = this.dependencyResolver.getLoadOrder(\n libraryNames,\n allLibraries,\n options\n );\n\n if (!loadOrderResult.success) {\n const errors = loadOrderResult.errors?.join(', ') || 'Unknown error';\n throw new Error(`Failed to resolve dependencies: ${errors}`);\n }\n\n if (debug) {\n console.log(` 📊 Dependency resolution result:`, {\n success: loadOrderResult.success,\n errors: loadOrderResult.errors || [],\n warnings: loadOrderResult.warnings || []\n });\n \n if (loadOrderResult.order) {\n console.log(` 🔄 Resolved dependencies for each library:`);\n loadOrderResult.order.forEach(lib => {\n const deps = this.dependencyResolver.parseDependencies(lib.Dependencies);\n if (deps.size > 0) {\n console.log(` • ${lib.Name}@${lib.Version} requires:`, Array.from(deps.entries()));\n } else {\n console.log(` • ${lib.Name}@${lib.Version} (no dependencies)`);\n }\n });\n }\n }\n\n if (loadOrderResult.warnings && debug) {\n console.warn(` ⚠️ Warnings:`, loadOrderResult.warnings);\n }\n\n const loadOrder = loadOrderResult.order || [];\n if (debug) {\n console.log(` 📋 Final load order:`, loadOrder.map(lib => `${lib.Name}@${lib.Version}`));\n }\n\n // Load all libraries in order\n for (const library of loadOrder) {\n // Skip if already loaded\n if (this.loadedLibraryStates.has(library.Name)) {\n if (debug) {\n console.log(`⏭️ Skipping '${library.Name}' (already loaded)`);\n }\n const state = this.loadedLibraryStates.get(library.Name)!;\n if (libraryNames.includes(library.Name)) {\n result.set(library.Name, (window as any)[state.globalVariable]);\n }\n continue;\n }\n\n // Check library status\n if (library.Status) {\n if (library.Status === 'Disabled') {\n console.error(`🚫 ERROR: Library '${library.Name}' is DISABLED and should not be used`);\n // Continue loading anyway per requirements\n } else if (library.Status === 'Deprecated') {\n console.warn(`⚠️ WARNING: Library '${library.Name}' is DEPRECATED. Consider using an alternative.`);\n }\n // Active status is fine, no message needed\n }\n\n if (debug) {\n console.log(`📥 Loading '${library.Name}@${library.Version}'`);\n }\n\n // Load the library\n if (!library.CDNUrl || !library.GlobalVariable) {\n throw new Error(`Library '${library.Name}' missing CDN URL or global variable`);\n }\n\n // Load CSS if available\n if (library.CDNCssUrl) {\n const cssUrls = library.CDNCssUrl.split(',').map(url => url.trim());\n for (const cssUrl of cssUrls) {\n if (cssUrl) {\n this.loadCSS(cssUrl);\n }\n }\n }\n\n // Load the script\n const loadedGlobal = await this.loadScript(library.CDNUrl, library.GlobalVariable, debug);\n\n // Track the loaded state\n const dependencies = Array.from(\n this.dependencyResolver.getDirectDependencies(library).keys()\n );\n\n this.loadedLibraryStates.set(library.Name, {\n name: library.Name,\n version: library.Version || 'unknown',\n globalVariable: library.GlobalVariable,\n loadedAt: new Date(),\n requestedBy: libraryNames.includes(library.Name) ? [requestedBy] : [],\n dependencies\n });\n\n // Add to result if it was directly requested\n if (libraryNames.includes(library.Name)) {\n result.set(library.Name, loadedGlobal);\n }\n\n if (debug) {\n console.log(`✅ Loaded '${library.Name}@${library.Version}'`);\n }\n }\n\n return result;\n }\n\n /**\n * Get information about loaded libraries\n * @returns Map of loaded library states\n */\n static getLoadedLibraryStates(): Map<string, LoadedLibraryState> {\n return new Map(this.loadedLibraryStates);\n }\n\n /**\n * Check if a library is loaded\n * @param libraryName - Name of the library\n * @returns True if the library is loaded\n */\n static isLibraryLoaded(libraryName: string): boolean {\n return this.loadedLibraryStates.has(libraryName);\n }\n\n /**\n * Get the version of a loaded library\n * @param libraryName - Name of the library\n * @returns Version string or undefined if not loaded\n */\n static getLoadedLibraryVersion(libraryName: string): string | undefined {\n return this.loadedLibraryStates.get(libraryName)?.version;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"library-loader.js","sourceRoot":"","sources":["../../src/utilities/library-loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Library loading utilities for React runtime\n * Provides methods to load and manage external JavaScript libraries and CSS\n * @module @memberjunction/react-runtime/utilities\n */\n\nimport { \n StandardLibraries,\n StandardLibraryManager\n} from './standard-libraries';\nimport { LibraryConfiguration, ExternalLibraryConfig, LibraryLoadOptions as ConfigLoadOptions } from '../types/library-config';\nimport { getCoreRuntimeLibraries, isCoreRuntimeLibrary } from './core-libraries';\nimport { resourceManager } from './resource-manager';\nimport { ComponentLibraryEntity } from '@memberjunction/core-entities';\nimport { LibraryDependencyResolver } from './library-dependency-resolver';\nimport { LoadedLibraryState, DependencyResolutionOptions } from '../types/dependency-types';\nimport { LibraryRegistry } from './library-registry';\n\n// Unique component ID for resource tracking\nconst LIBRARY_LOADER_COMPONENT_ID = 'mj-react-runtime-library-loader-singleton';\n\n/**\n * Represents a loaded script or CSS resource\n */\ninterface LoadedResource {\n element: HTMLScriptElement | HTMLLinkElement;\n promise: Promise<any>;\n}\n\n/**\n * Options for loading libraries\n * @deprecated Use LibraryLoadOptions from library-config instead\n */\nexport interface LibraryLoadOptions {\n /** Load core libraries (lodash, d3, Chart.js, dayjs) */\n loadCore?: boolean;\n /** Load UI libraries (antd, React Bootstrap) */\n loadUI?: boolean;\n /** Load CSS files for UI libraries */\n loadCSS?: boolean;\n /** Custom library URLs to load */\n customLibraries?: { url: string; globalName: string }[];\n}\n\n/**\n * Result of loading libraries\n */\nexport interface LibraryLoadResult {\n React: any;\n ReactDOM: any;\n Babel: any;\n libraries: StandardLibraries;\n}\n\n/**\n * Library loader class for managing external script loading\n */\nexport class LibraryLoader {\n private static loadedResources = new Map<string, LoadedResource>();\n private static loadedLibraryStates = new Map<string, LoadedLibraryState>();\n private static dependencyResolver = new LibraryDependencyResolver({ debug: false });\n \n /**\n * Enable progressive delay for library initialization (useful for test harness)\n */\n public static enableProgressiveDelay: boolean = false;\n\n /**\n * Load all standard libraries (core + UI + CSS)\n * This is the main method that should be used by test harness and Angular wrapper\n * @param config Optional full library configuration to replace the default\n * @param additionalLibraries Optional additional libraries to merge with the configuration\n * @param options Optional options including debug mode flag\n */\n static async loadAllLibraries(\n config?: LibraryConfiguration, \n additionalLibraries?: ExternalLibraryConfig[],\n options?: { debug?: boolean }\n ): Promise<LibraryLoadResult> {\n if (config) {\n StandardLibraryManager.setConfiguration(config);\n }\n \n // If additional libraries are provided, merge them with the current configuration\n if (additionalLibraries && additionalLibraries.length > 0) {\n const currentConfig = StandardLibraryManager.getConfiguration();\n const mergedConfig: LibraryConfiguration = {\n libraries: [...currentConfig.libraries, ...additionalLibraries],\n metadata: {\n ...currentConfig.metadata,\n lastUpdated: new Date().toISOString()\n }\n };\n StandardLibraryManager.setConfiguration(mergedConfig);\n }\n \n return this.loadLibrariesFromConfig(undefined, options?.debug);\n }\n\n /**\n * Load libraries based on the current configuration\n */\n static async loadLibrariesFromConfig(options?: ConfigLoadOptions, debug?: boolean): Promise<LibraryLoadResult> {\n // Always load core runtime libraries first\n const coreLibraries = getCoreRuntimeLibraries(debug);\n const corePromises = coreLibraries.map(lib => \n this.loadScript(lib.cdnUrl, lib.globalVariable, debug)\n );\n \n const coreResults = await Promise.all(corePromises);\n const React = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'React');\n const ReactDOM = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'ReactDOM');\n const Babel = coreResults.find((_, i) => coreLibraries[i].globalVariable === 'Babel');\n \n // Expose React and ReactDOM as globals for UMD libraries that expect them\n // Many React component libraries (Recharts, Victory, etc.) expect these as globals\n if (typeof window !== 'undefined') {\n if (React && !(window as any).React) {\n (window as any).React = React;\n console.log('✓ Exposed React as window.React for UMD compatibility');\n }\n if (ReactDOM && !(window as any).ReactDOM) {\n (window as any).ReactDOM = ReactDOM;\n console.log('✓ Exposed ReactDOM as window.ReactDOM for UMD compatibility');\n }\n // Also expose PropTypes as empty object if not present (for older libraries)\n if (!(window as any).PropTypes) {\n (window as any).PropTypes = {};\n console.log('✓ Exposed empty PropTypes as window.PropTypes for UMD compatibility');\n }\n }\n \n // Now load plugin libraries from configuration\n const config = StandardLibraryManager.getConfiguration();\n const enabledLibraries = StandardLibraryManager.getEnabledLibraries();\n \n // Filter out any core runtime libraries from plugin configuration\n let pluginLibraries = enabledLibraries.filter(lib => !isCoreRuntimeLibrary(lib.id));\n \n // Apply options filters if provided\n if (options) {\n if (options.categories) {\n pluginLibraries = pluginLibraries.filter(lib => \n options.categories!.includes(lib.category)\n );\n }\n if (options.excludeRuntimeOnly) {\n pluginLibraries = pluginLibraries.filter(lib => !lib.isRuntimeOnly);\n }\n }\n \n // Load CSS files for plugin libraries (non-blocking)\n pluginLibraries.forEach(lib => {\n if (lib.cdnCssUrl) {\n this.loadCSS(lib.cdnCssUrl);\n }\n });\n \n // Load plugin libraries\n const pluginPromises = pluginLibraries.map(lib => \n this.loadScript(lib.cdnUrl, lib.globalVariable, debug)\n );\n \n const pluginResults = await Promise.all(pluginPromises);\n \n // Build libraries object (only contains plugin libraries)\n const libraries: StandardLibraries = {};\n \n pluginLibraries.forEach((lib, index) => {\n libraries[lib.globalVariable] = pluginResults[index];\n });\n \n return {\n React: React || (window as any).React,\n ReactDOM: ReactDOM || (window as any).ReactDOM,\n Babel: Babel || (window as any).Babel,\n libraries\n };\n }\n\n /**\n * Load libraries with specific options (backward compatibility)\n * @deprecated Use loadLibrariesFromConfig instead\n */\n static async loadLibraries(options: LibraryLoadOptions): Promise<LibraryLoadResult> {\n const {\n loadCore = true,\n loadUI = true,\n loadCSS = true,\n customLibraries = []\n } = options;\n\n // Map old options to new configuration approach\n const categoriesToLoad: Array<ExternalLibraryConfig['category']> = ['runtime'];\n if (loadCore) {\n categoriesToLoad.push('utility', 'charting');\n }\n if (loadUI) {\n categoriesToLoad.push('ui');\n }\n \n const result = await this.loadLibrariesFromConfig({\n categories: categoriesToLoad\n });\n \n // Load custom libraries if provided\n if (customLibraries.length > 0) {\n const customPromises = customLibraries.map(({ url, globalName }) =>\n this.loadScript(url, globalName)\n );\n \n const customResults = await Promise.all(customPromises);\n customLibraries.forEach(({ globalName }, index) => {\n result.libraries[globalName] = customResults[index];\n });\n }\n \n return result;\n }\n\n /**\n * Load a script from URL\n */\n private static async loadScript(url: string, globalName: string, debug: boolean = false): Promise<any> {\n // Check if already loaded\n const existing = this.loadedResources.get(url);\n if (existing) {\n if (debug) {\n console.log(`✅ Library '${globalName}' already loaded (cached)`);\n }\n return existing.promise;\n }\n\n const promise = new Promise((resolve, reject) => {\n // Check if global already exists\n const existingGlobal = (window as any)[globalName];\n if (existingGlobal) {\n if (debug) {\n console.log(`✅ Library '${globalName}' already available globally`);\n }\n resolve(existingGlobal);\n return;\n }\n\n // Check if script tag exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`);\n if (existingScript) {\n this.waitForScriptLoad(existingScript as HTMLScriptElement, globalName, resolve, reject);\n return;\n }\n\n // Create new script\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n const cleanup = () => {\n script.removeEventListener('load', onLoad);\n script.removeEventListener('error', onError);\n };\n\n const onLoad = async () => {\n cleanup();\n \n // Use progressive delay if enabled, otherwise use original behavior\n if (LibraryLoader.enableProgressiveDelay) {\n try {\n const global = await LibraryLoader.waitForGlobalVariable(globalName, url, debug);\n resolve(global);\n } catch (error) {\n reject(error);\n }\n } else {\n // Original behavior\n const global = (window as any)[globalName];\n if (global) {\n if (debug) {\n console.log(`✅ Library '${globalName}' loaded successfully from ${url}`);\n }\n resolve(global);\n } else {\n // Some libraries may take a moment to initialize\n const timeoutId = resourceManager.setTimeout(\n LIBRARY_LOADER_COMPONENT_ID,\n () => {\n const delayedGlobal = (window as any)[globalName];\n if (delayedGlobal) {\n if (debug) {\n console.log(`✅ Library '${globalName}' loaded successfully (delayed initialization)`);\n }\n resolve(delayedGlobal);\n } else {\n reject(new Error(`${globalName} not found after script load`));\n }\n },\n 100,\n { url, globalName }\n );\n }\n }\n };\n\n const onError = () => {\n cleanup();\n reject(new Error(`Failed to load script: ${url}`));\n };\n\n script.addEventListener('load', onLoad);\n script.addEventListener('error', onError);\n\n if (debug) {\n console.log(`📦 Loading library '${globalName}' from ${url}...`);\n }\n\n // Note: Browser may show \"Could not read source map\" warnings for external libraries.\n // These are harmless and expected when loading minified libraries from CDNs\n // that reference source maps which aren't available. This doesn't affect functionality.\n document.head.appendChild(script);\n \n // Register the script element for cleanup\n resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, script);\n });\n\n this.loadedResources.set(url, { \n element: document.querySelector(`script[src=\"${url}\"]`)!, \n promise \n });\n\n return promise;\n }\n\n /**\n * Check if a library global variable is properly initialized\n * Generic check that works for any library\n */\n private static isLibraryReady(globalVariable: any): boolean {\n if (!globalVariable) {\n return false;\n }\n \n // For functions, they're ready immediately\n if (typeof globalVariable === 'function') {\n return true;\n }\n \n // For objects, check if they have properties (not an empty object)\n if (typeof globalVariable === 'object') {\n // Check for non-empty object with enumerable properties\n const keys = Object.keys(globalVariable);\n // Some libraries might have only non-enumerable properties, \n // so also check for common indicators of initialization\n return keys.length > 0 || \n Object.getOwnPropertyNames(globalVariable).length > 1 || // > 1 to exclude just constructor\n globalVariable.constructor !== Object; // Has a custom constructor\n }\n \n // For other types (string, number, etc.), consider them ready\n return true;\n }\n\n /**\n * Wait for a global variable to be available with progressive delays\n * @param globalName The name of the global variable to wait for\n * @param url The URL of the script (for debugging)\n * @param debug Whether to log debug information\n * @returns The global variable once it's available\n */\n private static async waitForGlobalVariable(\n globalName: string, \n url: string, \n debug: boolean = false\n ): Promise<any> {\n const delays = [0, 100, 200, 300, 400]; // Total: 1000ms max delay\n const maxAttempts = delays.length;\n let totalDelay = 0;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n // Wait for the specified delay (0ms on first attempt)\n if (attempt > 0) {\n const delay = delays[attempt];\n if (debug) {\n console.log(`⏳ Waiting ${delay}ms for ${globalName} to initialize (attempt ${attempt + 1}/${maxAttempts})...`);\n }\n await new Promise(resolve => {\n resourceManager.setTimeout(\n LIBRARY_LOADER_COMPONENT_ID,\n () => resolve(undefined),\n delay,\n { globalName, attempt }\n );\n });\n totalDelay += delay;\n }\n\n // Check if the global variable exists\n const global = (window as any)[globalName];\n if (global) {\n // Use generic library readiness check\n const isReady = this.isLibraryReady(global);\n\n if (isReady) {\n if (debug) {\n if (totalDelay > 0) {\n console.log(`✅ ${globalName} ready after ${totalDelay}ms delay`);\n } else {\n console.log(`✅ Library '${globalName}' loaded successfully from ${url}`);\n }\n }\n return global;\n } else if (debug && attempt < maxAttempts - 1) {\n console.log(`🔄 ${globalName} exists but not fully initialized, will retry...`);\n }\n }\n }\n\n // Final check after all attempts\n const finalGlobal = (window as any)[globalName];\n if (finalGlobal) {\n console.warn(`⚠️ ${globalName} loaded but may not be fully initialized after ${totalDelay}ms`);\n return finalGlobal;\n }\n\n throw new Error(`${globalName} not found after script load and ${totalDelay}ms delay`);\n }\n\n /**\n * Load CSS from URL\n */\n private static loadCSS(url: string): void {\n if (this.loadedResources.has(url)) {\n return;\n }\n\n const existingLink = document.querySelector(`link[href=\"${url}\"]`);\n if (existingLink) {\n return;\n }\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n document.head.appendChild(link);\n \n // Register the link element for cleanup\n resourceManager.registerDOMElement(LIBRARY_LOADER_COMPONENT_ID, link);\n\n this.loadedResources.set(url, {\n element: link,\n promise: Promise.resolve()\n });\n }\n\n /**\n * Wait for existing script to load\n */\n private static waitForScriptLoad(\n script: HTMLScriptElement,\n globalName: string,\n resolve: (value: any) => void,\n reject: (reason: any) => void\n ): void {\n const checkGlobal = () => {\n const global = (window as any)[globalName];\n if (global) {\n resolve(global);\n } else {\n // Retry after a short delay\n resourceManager.setTimeout(\n LIBRARY_LOADER_COMPONENT_ID,\n () => {\n const delayedGlobal = (window as any)[globalName];\n if (delayedGlobal) {\n resolve(delayedGlobal);\n } else {\n reject(new Error(`${globalName} not found after script load`));\n }\n },\n 100,\n { context: 'waitForScriptLoad', globalName }\n );\n }\n };\n\n // Check if already loaded\n if ((script as any).complete || (script as any).readyState === 'complete') {\n checkGlobal();\n return;\n }\n\n // Wait for load\n const loadHandler = () => {\n checkGlobal();\n };\n resourceManager.addEventListener(\n LIBRARY_LOADER_COMPONENT_ID,\n script,\n 'load',\n loadHandler,\n { once: true }\n );\n }\n\n\n /**\n * Get all loaded resources (for cleanup)\n */\n static getLoadedResources(): Map<string, LoadedResource> {\n return this.loadedResources;\n }\n\n /**\n * Clear loaded resources cache and cleanup DOM elements\n */\n static clearCache(): void {\n // Remove all script and link elements we added\n this.loadedResources.forEach((resource, url) => {\n if (resource.element && resource.element.parentNode) {\n resource.element.parentNode.removeChild(resource.element);\n }\n });\n \n this.loadedResources.clear();\n this.loadedLibraryStates.clear();\n \n // Clean up any resources managed by resource manager\n resourceManager.cleanupComponent(LIBRARY_LOADER_COMPONENT_ID);\n }\n\n /**\n * Load a library with its dependencies\n * @param libraryName - Name of the library to load\n * @param allLibraries - All available libraries for dependency resolution\n * @param requestedBy - Name of the component/library requesting this load\n * @param options - Dependency resolution options\n * @returns Promise resolving to the loaded library global object\n */\n static async loadLibraryWithDependencies(\n libraryName: string,\n allLibraries: ComponentLibraryEntity[],\n requestedBy: string = 'user',\n options?: DependencyResolutionOptions\n ): Promise<any> {\n const debug = options?.debug || false;\n \n if (debug) {\n console.log(`📚 Loading library '${libraryName}' with dependencies`);\n }\n\n // Check if already loaded\n const existingState = this.loadedLibraryStates.get(libraryName);\n if (existingState) {\n if (debug) {\n console.log(`✅ Library '${libraryName}' already loaded (version: ${existingState.version})`);\n }\n // Track who requested it\n if (!existingState.requestedBy.includes(requestedBy)) {\n existingState.requestedBy.push(requestedBy);\n }\n return (window as any)[existingState.globalVariable];\n }\n\n // Get load order including dependencies\n const loadOrderResult = this.dependencyResolver.getLoadOrder(\n [libraryName],\n allLibraries,\n options\n );\n\n if (!loadOrderResult.success) {\n const errors = loadOrderResult.errors?.join(', ') || 'Unknown error';\n throw new Error(`Failed to resolve dependencies for '${libraryName}': ${errors}`);\n }\n\n if (loadOrderResult.warnings && debug) {\n console.warn(`⚠️ Warnings for '${libraryName}':`, loadOrderResult.warnings);\n }\n\n const loadOrder = loadOrderResult.order || [];\n if (debug) {\n console.log(`📋 Load order for '${libraryName}':`, loadOrder.map(lib => `${lib.Name}@${lib.Version}`));\n }\n\n // Load libraries in order\n for (const library of loadOrder) {\n // Skip if already loaded\n if (this.loadedLibraryStates.has(library.Name)) {\n if (debug) {\n console.log(`⏭️ Skipping '${library.Name}' (already loaded)`);\n }\n continue;\n }\n\n // Check library status\n if (library.Status) {\n if (library.Status === 'Disabled') {\n console.error(`🚫 ERROR: Library '${library.Name}' is DISABLED and should not be used`);\n // Continue loading anyway per requirements\n } else if (library.Status === 'Deprecated') {\n console.warn(`⚠️ WARNING: Library '${library.Name}' is DEPRECATED. Consider using an alternative.`);\n }\n // Active status is fine, no message needed\n }\n\n if (debug) {\n console.log(`📥 Loading '${library.Name}@${library.Version}'`);\n }\n\n // Load the library\n if (!library.CDNUrl || !library.GlobalVariable) {\n throw new Error(`Library '${library.Name}' missing CDN URL or global variable`);\n }\n\n // Load CSS if available\n if (library.CDNCssUrl) {\n const cssUrls = library.CDNCssUrl.split(',').map(url => url.trim());\n for (const cssUrl of cssUrls) {\n if (cssUrl) {\n this.loadCSS(cssUrl);\n }\n }\n }\n\n // Load the script\n const loadedGlobal = await this.loadScript(library.CDNUrl, library.GlobalVariable, debug);\n\n // Track the loaded state\n const dependencies = Array.from(\n this.dependencyResolver.getDirectDependencies(library).keys()\n );\n\n this.loadedLibraryStates.set(library.Name, {\n name: library.Name,\n version: library.Version || 'unknown',\n globalVariable: library.GlobalVariable,\n loadedAt: new Date(),\n requestedBy: library.Name === libraryName ? [requestedBy] : [],\n dependencies\n });\n\n if (debug) {\n console.log(`✅ Loaded '${library.Name}@${library.Version}'`);\n }\n }\n\n // Return the originally requested library's global\n const targetLibrary = loadOrder.find(lib => lib.Name === libraryName);\n if (!targetLibrary || !targetLibrary.GlobalVariable) {\n throw new Error(`Failed to load library '${libraryName}'`);\n }\n\n return (window as any)[targetLibrary.GlobalVariable];\n }\n\n /**\n * Load multiple libraries with dependency resolution\n * @param libraryNames - Names of libraries to load\n * @param allLibraries - All available libraries for dependency resolution\n * @param requestedBy - Name of the component requesting these libraries\n * @param options - Dependency resolution options\n * @returns Map of library names to their loaded global objects\n */\n static async loadLibrariesWithDependencies(\n libraryNames: string[],\n allLibraries: ComponentLibraryEntity[],\n requestedBy: string = 'user',\n options?: DependencyResolutionOptions\n ): Promise<Map<string, any>> {\n const debug = options?.debug || false;\n const result = new Map<string, any>();\n \n if (debug) {\n console.log(`📚 Loading libraries with dependencies:`, libraryNames);\n console.log(` 📦 Total available libraries: ${allLibraries.length}`);\n }\n\n // Get combined load order for all requested libraries\n const loadOrderResult = this.dependencyResolver.getLoadOrder(\n libraryNames,\n allLibraries,\n options\n );\n\n if (!loadOrderResult.success) {\n const errors = loadOrderResult.errors?.join(', ') || 'Unknown error';\n throw new Error(`Failed to resolve dependencies: ${errors}`);\n }\n\n if (debug) {\n console.log(` 📊 Dependency resolution result:`, {\n success: loadOrderResult.success,\n errors: loadOrderResult.errors || [],\n warnings: loadOrderResult.warnings || []\n });\n \n if (loadOrderResult.order) {\n console.log(` 🔄 Resolved dependencies for each library:`);\n loadOrderResult.order.forEach(lib => {\n const deps = this.dependencyResolver.parseDependencies(lib.Dependencies);\n if (deps.size > 0) {\n console.log(` • ${lib.Name}@${lib.Version} requires:`, Array.from(deps.entries()));\n } else {\n console.log(` • ${lib.Name}@${lib.Version} (no dependencies)`);\n }\n });\n }\n }\n\n if (loadOrderResult.warnings && debug) {\n console.warn(` ⚠️ Warnings:`, loadOrderResult.warnings);\n }\n\n const loadOrder = loadOrderResult.order || [];\n if (debug) {\n console.log(` 📋 Final load order:`, loadOrder.map(lib => `${lib.Name}@${lib.Version}`));\n }\n\n // Load all libraries in order\n for (const library of loadOrder) {\n // Skip if already loaded\n if (this.loadedLibraryStates.has(library.Name)) {\n if (debug) {\n console.log(`⏭️ Skipping '${library.Name}' (already loaded)`);\n }\n const state = this.loadedLibraryStates.get(library.Name)!;\n if (libraryNames.includes(library.Name)) {\n result.set(library.Name, (window as any)[state.globalVariable]);\n }\n continue;\n }\n\n // Check library status\n if (library.Status) {\n if (library.Status === 'Disabled') {\n console.error(`🚫 ERROR: Library '${library.Name}' is DISABLED and should not be used`);\n // Continue loading anyway per requirements\n } else if (library.Status === 'Deprecated') {\n console.warn(`⚠️ WARNING: Library '${library.Name}' is DEPRECATED. Consider using an alternative.`);\n }\n // Active status is fine, no message needed\n }\n\n if (debug) {\n console.log(`📥 Loading '${library.Name}@${library.Version}'`);\n }\n\n // Load the library\n if (!library.CDNUrl || !library.GlobalVariable) {\n throw new Error(`Library '${library.Name}' missing CDN URL or global variable`);\n }\n\n // Load CSS if available\n if (library.CDNCssUrl) {\n const cssUrls = library.CDNCssUrl.split(',').map(url => url.trim());\n for (const cssUrl of cssUrls) {\n if (cssUrl) {\n this.loadCSS(cssUrl);\n }\n }\n }\n\n // Load the script\n const loadedGlobal = await this.loadScript(library.CDNUrl, library.GlobalVariable, debug);\n\n // Track the loaded state\n const dependencies = Array.from(\n this.dependencyResolver.getDirectDependencies(library).keys()\n );\n\n this.loadedLibraryStates.set(library.Name, {\n name: library.Name,\n version: library.Version || 'unknown',\n globalVariable: library.GlobalVariable,\n loadedAt: new Date(),\n requestedBy: libraryNames.includes(library.Name) ? [requestedBy] : [],\n dependencies\n });\n\n // Add to result if it was directly requested\n if (libraryNames.includes(library.Name)) {\n result.set(library.Name, loadedGlobal);\n }\n\n if (debug) {\n console.log(`✅ Loaded '${library.Name}@${library.Version}'`);\n }\n }\n\n return result;\n }\n\n /**\n * Get information about loaded libraries\n * @returns Map of loaded library states\n */\n static getLoadedLibraryStates(): Map<string, LoadedLibraryState> {\n return new Map(this.loadedLibraryStates);\n }\n\n /**\n * Check if a library is loaded\n * @param libraryName - Name of the library\n * @returns True if the library is loaded\n */\n static isLibraryLoaded(libraryName: string): boolean {\n return this.loadedLibraryStates.has(libraryName);\n }\n\n /**\n * Get the version of a loaded library\n * @param libraryName - Name of the library\n * @returns Version string or undefined if not loaded\n */\n static getLoadedLibraryVersion(libraryName: string): string | undefined {\n return this.loadedLibraryStates.get(libraryName)?.version;\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-registry.d.ts","sourceRoot":"","sources":["../../src/utilities/library-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,sBAAsB,EAA2B,MAAM,+BAA+B,CAAC;AAKhG,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,MAAM,CAAC;IAEb,cAAc,EAAE,MAAM,CAAC;IAEvB,QAAQ,EAAE,MAAM,CAAC;IAEjB,QAAQ,EAAE;QACR,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,MAAM,EAAE,MAAM,CAAC;YAEf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;IAEF,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6C;IACrE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkB;WACxB,MAAM,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"library-registry.d.ts","sourceRoot":"","sources":["../../src/utilities/library-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,sBAAsB,EAA2B,MAAM,+BAA+B,CAAC;AAKhG,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,MAAM,CAAC;IAEb,cAAc,EAAE,MAAM,CAAC;IAEvB,QAAQ,EAAE,MAAM,CAAC;IAEjB,QAAQ,EAAE;QACR,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,MAAM,EAAE,MAAM,CAAC;YAEf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;IAEF,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,SAAS,CAA6C;IACrE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAkB;WACxB,MAAM,CAAC,YAAY,EAAE,OAAO,YAAQ,EAAE,kBAAkB,EAAE,sBAAsB,EAAE;IAyCtG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAa9D,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAcpE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAYxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAwBhF,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;CAM5D"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class LibraryRegistry {
|
|
1
|
+
export class LibraryRegistry {
|
|
2
|
+
static { this.libraries = new Map(); }
|
|
3
|
+
static { this._configured = false; }
|
|
5
4
|
static async Config(forceRefresh = false, componentLibraries) {
|
|
6
5
|
if (!this._configured || forceRefresh) {
|
|
7
6
|
const libraryGroups = new Map();
|
|
@@ -68,7 +67,4 @@ class LibraryRegistry {
|
|
|
68
67
|
this.libraries.set(definition.name?.trim().toLowerCase(), definition);
|
|
69
68
|
}
|
|
70
69
|
}
|
|
71
|
-
exports.LibraryRegistry = LibraryRegistry;
|
|
72
|
-
LibraryRegistry.libraries = new Map();
|
|
73
|
-
LibraryRegistry._configured = false;
|
|
74
70
|
//# sourceMappingURL=library-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library-registry.js","sourceRoot":"","sources":["../../src/utilities/library-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"library-registry.js","sourceRoot":"","sources":["../../src/utilities/library-registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Library registry for approved third-party libraries\n * Maintains a secure registry of libraries that components can use\n * @module @memberjunction/react-runtime/utilities\n */\n\nimport { UserInfo } from \"@memberjunction/core\";\nimport { ComponentLibraryEntity, ComponentMetadataEngine } from \"@memberjunction/core-entities\";\n\n/**\n * Library definition in the registry\n */\nexport interface LibraryDefinition {\n /** Library name (e.g., \"Chart.js\", \"lodash\") */\n name: string;\n /** Global variable name when loaded (e.g., \"Chart\", \"_\") */\n globalVariable: string;\n /** Category path for organization (e.g., \"charting/advanced\", \"utility/date\") */\n category: string;\n /** Available versions with their CDN URLs */\n versions: {\n [version: string]: {\n cdnUrl: string;\n /** Optional CSS URLs for UI libraries */\n cssUrls?: string[];\n };\n };\n /** Default version to use if not specified */\n defaultVersion: string;\n}\n\n/**\n * Registry of approved libraries that components can use\n * This is the security boundary - only libraries defined here can be loaded\n */\nexport class LibraryRegistry {\n private static libraries: Map<string, LibraryDefinition> = new Map();\n private static _configured: boolean = false;\n public static async Config(forceRefresh: boolean = false, componentLibraries: ComponentLibraryEntity[]) {\n if (!this._configured || forceRefresh) {\n // next up, we need to map the component metadata to the library definitions \n // with two steps - first step is that we need to group the libraries in the engine\n // by name and then we'll have all the versions for that particular library we can break\n // into versions in our structure\n const libraryGroups = new Map<string, ComponentLibraryEntity[]>();\n for (const lib of componentLibraries) {\n if (!libraryGroups.has(lib.Name.toLowerCase())) {\n libraryGroups.set(lib.Name.toLowerCase(), []);\n }\n libraryGroups.get(lib.Name.toLowerCase())!.push(lib);\n }\n\n // now we have grouped libraries using the ComponentLibraryEntity type, and next up\n // we can map this to our internal structure of LibraryDefinition\n for (const [name, versions] of libraryGroups) {\n const libDef: LibraryDefinition = {\n name,\n globalVariable: versions[0].GlobalVariable || \"\",\n category: versions[0].Category || \"\",\n versions: {},\n defaultVersion: versions[0].Version || \"\"\n };\n for (const version of versions) {\n libDef.versions[version.Version!] = {\n cdnUrl: version.CDNUrl || \"\",\n cssUrls: version.CDNCssUrl?.split(\",\") || []\n };\n }\n this.libraries.set(name, libDef);\n }\n\n // at this point, our library registry is fully populated\n this._configured = true;\n }\n }\n\n /**\n * Get library definition by name\n */\n static getLibrary(name: string): LibraryDefinition | undefined {\n if (!this._configured)\n throw new Error(\"LibraryRegistry is not configured, call LibraryRegistry.Config() before using!\");\n\n return this.libraries.get(name?.trim().toLowerCase());\n }\n\n /**\n * Get CDN URL for a library\n * @param name Library name\n * @param version Optional version (uses default if not specified)\n * @returns CDN URL or undefined if library/version not found\n */\n static getCdnUrl(name: string, version?: string): string | undefined {\n if (!this._configured)\n throw new Error(\"LibraryRegistry is not configured, call LibraryRegistry.Config() before using!\");\n\n const library = this.libraries.get(name?.trim().toLowerCase());\n if (!library) return undefined;\n\n const targetVersion = version || library.defaultVersion;\n return library.versions[targetVersion]?.cdnUrl;\n }\n\n /**\n * Check if a library is approved\n */\n static isApproved(name: string): boolean {\n if (!this._configured)\n throw new Error(\"LibraryRegistry is not configured, call LibraryRegistry.Config() before using!\");\n\n return this.libraries.has(name?.trim().toLowerCase());\n }\n\n /**\n * Resolve library version based on semver-like pattern\n * For now, just returns exact match or default\n * TODO: Implement proper semver resolution\n */\n static resolveVersion(name: string, versionPattern?: string): string | undefined {\n if (!this._configured)\n throw new Error(\"LibraryRegistry is not configured, call LibraryRegistry.Config() before using!\");\n\n const library = this.libraries.get(name?.trim().toLowerCase());\n if (!library) return undefined;\n\n if (!versionPattern) return library.defaultVersion;\n\n // For now, just check exact match\n // TODO: Implement proper semver resolution for patterns like \"^4.0.0\"\n if (library.versions[versionPattern]) {\n return versionPattern;\n }\n\n // If no exact match, return default\n return library.defaultVersion;\n }\n\n /**\n * Add a library to the registry (for future extensibility)\n * This would typically be called during app initialization\n * with libraries loaded from a database\n */\n static registerLibrary(definition: LibraryDefinition): void {\n if (!this._configured)\n throw new Error(\"LibraryRegistry is not configured, call LibraryRegistry.Config() before using!\");\n\n this.libraries.set(definition.name?.trim().toLowerCase(), definition);\n }\n}"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/utilities/resource-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resource-manager.d.ts","sourceRoot":"","sources":["../../src/utilities/resource-manager.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,CAAC;IAC5G,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAiDD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,gBAAgB,CAAqC;IAK7D,UAAU,CACR,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,IAAI,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,MAAM;IAmBT,WAAW,CACT,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,IAAI,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,MAAM;IAgBT,qBAAqB,CACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,OAAO;IAwBV,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAQnD,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAQpD,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI;IAa5D,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,IAAI;IAsBP,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,MAAM,IAAI,GACnB,IAAI;IAuBP,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,GAAG,EACT,SAAS,EAAE,MAAM,IAAI,GACpB,IAAI;IAYP,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAU/D,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAOvD,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,cAAc;IAmBtB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IA+B3C,aAAa,IAAI,IAAI;IAcrB,UAAU,IAAI,IAAI;IAalB,QAAQ,IAAI;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,mBAAmB,EAAE,MAAM,CAAC;KAC7B;CAeF;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.resourceManager = exports.ResourceManager = void 0;
|
|
4
1
|
const getTimerFunctions = () => {
|
|
5
2
|
if (typeof window !== 'undefined' && window.setTimeout) {
|
|
6
3
|
return {
|
|
@@ -36,7 +33,7 @@ const getTimerFunctions = () => {
|
|
|
36
33
|
}
|
|
37
34
|
};
|
|
38
35
|
const timers = getTimerFunctions();
|
|
39
|
-
class ResourceManager {
|
|
36
|
+
export class ResourceManager {
|
|
40
37
|
constructor() {
|
|
41
38
|
this.resources = new Map();
|
|
42
39
|
this.globalResources = new Set();
|
|
@@ -221,6 +218,5 @@ class ResourceManager {
|
|
|
221
218
|
};
|
|
222
219
|
}
|
|
223
220
|
}
|
|
224
|
-
|
|
225
|
-
exports.resourceManager = new ResourceManager();
|
|
221
|
+
export const resourceManager = new ResourceManager();
|
|
226
222
|
//# sourceMappingURL=resource-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-manager.js","sourceRoot":"","sources":["../../src/utilities/resource-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Centralized resource management for React Runtime\n * Handles timers, DOM elements, event listeners, and other resources that need cleanup\n * @module @memberjunction/react-runtime/utilities\n */\n\n// Type alias for timer IDs that works in both browser and Node.js\nexport type TimerId = number | NodeJS.Timeout;\n\nexport interface ManagedResource {\n type: 'timer' | 'interval' | 'animationFrame' | 'eventListener' | 'domElement' | 'observable' | 'reactRoot';\n id: string | TimerId;\n cleanup: () => void;\n metadata?: Record<string, any>;\n}\n\n/**\n * Environment-agnostic timer functions that work in both browser and Node.js\n */\nconst getTimerFunctions = () => {\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.setTimeout) {\n return {\n setTimeout: window.setTimeout.bind(window),\n clearTimeout: window.clearTimeout.bind(window),\n setInterval: window.setInterval.bind(window),\n clearInterval: window.clearInterval.bind(window),\n requestAnimationFrame: window.requestAnimationFrame?.bind(window),\n cancelAnimationFrame: window.cancelAnimationFrame?.bind(window)\n };\n }\n // Node.js environment\n else if (typeof global !== 'undefined' && global.setTimeout) {\n return {\n setTimeout: global.setTimeout,\n clearTimeout: global.clearTimeout,\n setInterval: global.setInterval,\n clearInterval: global.clearInterval,\n requestAnimationFrame: undefined, // Not available in Node.js\n cancelAnimationFrame: undefined\n };\n }\n // Fallback - return no-op functions\n else {\n const noop = () => {};\n const noopWithReturn = () => 0;\n return {\n setTimeout: noopWithReturn,\n clearTimeout: noop,\n setInterval: noopWithReturn,\n clearInterval: noop,\n requestAnimationFrame: undefined,\n cancelAnimationFrame: undefined\n };\n }\n};\n\nconst timers = getTimerFunctions();\n\n/**\n * ResourceManager provides centralized management of resources that need cleanup.\n * This prevents memory leaks by ensuring all resources are properly disposed.\n */\nexport class ResourceManager {\n private resources = new Map<string, Set<ManagedResource>>();\n private globalResources = new Set<ManagedResource>();\n private cleanupCallbacks = new Map<string, (() => void)[]>();\n\n /**\n * Register a timeout with automatic cleanup\n */\n setTimeout(\n componentId: string,\n callback: () => void,\n delay: number,\n metadata?: Record<string, any>\n ): number {\n const id = timers.setTimeout(() => {\n this.removeResource(componentId, 'timer', id);\n callback();\n }, delay);\n\n this.addResource(componentId, {\n type: 'timer',\n id,\n cleanup: () => timers.clearTimeout(id),\n metadata\n });\n\n return id as any;\n }\n\n /**\n * Register an interval with automatic cleanup\n */\n setInterval(\n componentId: string,\n callback: () => void,\n delay: number,\n metadata?: Record<string, any>\n ): number {\n const id = timers.setInterval(callback, delay);\n\n this.addResource(componentId, {\n type: 'interval',\n id,\n cleanup: () => timers.clearInterval(id),\n metadata\n });\n\n return id as any;\n }\n\n /**\n * Register an animation frame with automatic cleanup\n */\n requestAnimationFrame(\n componentId: string,\n callback: FrameRequestCallback,\n metadata?: Record<string, any>\n ): TimerId {\n if (!timers.requestAnimationFrame) {\n // Fallback to setTimeout in non-browser environments\n return this.setTimeout(componentId, () => callback(Date.now()), 16, metadata);\n }\n\n const id = timers.requestAnimationFrame((time) => {\n this.removeResource(componentId, 'animationFrame', id);\n callback(time);\n });\n\n this.addResource(componentId, {\n type: 'animationFrame',\n id,\n cleanup: () => timers.cancelAnimationFrame?.(id),\n metadata\n });\n\n return id as any;\n }\n\n /**\n * Clear a specific timeout\n */\n clearTimeout(componentId: string, id: number): void {\n timers.clearTimeout(id);\n this.removeResource(componentId, 'timer', id);\n }\n\n /**\n * Clear a specific interval\n */\n clearInterval(componentId: string, id: number): void {\n timers.clearInterval(id);\n this.removeResource(componentId, 'interval', id);\n }\n\n /**\n * Cancel a specific animation frame\n */\n cancelAnimationFrame(componentId: string, id: TimerId): void {\n if (timers.cancelAnimationFrame) {\n timers.cancelAnimationFrame(id as number);\n } else {\n // If we fell back to setTimeout, use clearTimeout\n timers.clearTimeout(id as any);\n }\n this.removeResource(componentId, 'animationFrame', id);\n }\n\n /**\n * Register an event listener with automatic cleanup\n */\n addEventListener(\n componentId: string,\n target: EventTarget,\n type: string,\n listener: EventListener,\n options?: AddEventListenerOptions\n ): void {\n // Only add event listeners if we have a valid EventTarget (browser environment)\n if (target && typeof target.addEventListener === 'function') {\n target.addEventListener(type, listener, options);\n \n const resourceId = `${type}-${Date.now()}-${Math.random()}`;\n this.addResource(componentId, {\n type: 'eventListener',\n id: resourceId,\n cleanup: () => {\n if (target && typeof target.removeEventListener === 'function') {\n target.removeEventListener(type, listener, options);\n }\n },\n metadata: { target, type, options }\n });\n }\n }\n\n /**\n * Register a DOM element that needs cleanup\n */\n registerDOMElement(\n componentId: string,\n element: any, // Use 'any' to avoid HTMLElement type in Node.js\n cleanup?: () => void\n ): void {\n // Only register if we're in a browser environment with DOM support\n if (typeof document !== 'undefined' && element && element.parentNode) {\n const resourceId = `dom-${Date.now()}-${Math.random()}`;\n this.addResource(componentId, {\n type: 'domElement',\n id: resourceId,\n cleanup: () => {\n if (cleanup) {\n cleanup();\n }\n if (element && element.parentNode && typeof element.parentNode.removeChild === 'function') {\n element.parentNode.removeChild(element);\n }\n },\n metadata: { element }\n });\n }\n }\n\n /**\n * Register a React root for cleanup\n */\n registerReactRoot(\n componentId: string,\n root: any,\n unmountFn: () => void\n ): void {\n this.addResource(componentId, {\n type: 'reactRoot',\n id: `react-root-${componentId}`,\n cleanup: unmountFn,\n metadata: { root }\n });\n }\n\n /**\n * Register a generic cleanup callback for a component\n */\n registerCleanup(componentId: string, cleanup: () => void): void {\n if (!this.cleanupCallbacks.has(componentId)) {\n this.cleanupCallbacks.set(componentId, []);\n }\n this.cleanupCallbacks.get(componentId)!.push(cleanup);\n }\n\n /**\n * Register a global resource (not tied to a specific component)\n */\n registerGlobalResource(resource: ManagedResource): void {\n this.globalResources.add(resource);\n }\n\n /**\n * Add a resource to be managed\n */\n private addResource(componentId: string, resource: ManagedResource): void {\n if (!this.resources.has(componentId)) {\n this.resources.set(componentId, new Set());\n }\n this.resources.get(componentId)!.add(resource);\n }\n\n /**\n * Remove a specific resource\n */\n private removeResource(\n componentId: string,\n type: ManagedResource['type'],\n id: string | number | NodeJS.Timeout\n ): void {\n const componentResources = this.resources.get(componentId);\n if (componentResources) {\n const toRemove = Array.from(componentResources).find(\n r => r.type === type && r.id === id\n );\n if (toRemove) {\n componentResources.delete(toRemove);\n }\n }\n }\n\n /**\n * Clean up all resources for a specific component\n */\n cleanupComponent(componentId: string): void {\n // Clean up tracked resources\n const componentResources = this.resources.get(componentId);\n if (componentResources) {\n componentResources.forEach(resource => {\n try {\n resource.cleanup();\n } catch (error) {\n console.error(`Error cleaning up ${resource.type} resource:`, error);\n }\n });\n this.resources.delete(componentId);\n }\n\n // Execute cleanup callbacks\n const callbacks = this.cleanupCallbacks.get(componentId);\n if (callbacks) {\n callbacks.forEach(callback => {\n try {\n callback();\n } catch (error) {\n console.error('Error executing cleanup callback:', error);\n }\n });\n this.cleanupCallbacks.delete(componentId);\n }\n }\n\n /**\n * Clean up all global resources\n */\n cleanupGlobal(): void {\n this.globalResources.forEach(resource => {\n try {\n resource.cleanup();\n } catch (error) {\n console.error(`Error cleaning up global ${resource.type} resource:`, error);\n }\n });\n this.globalResources.clear();\n }\n\n /**\n * Clean up all resources (components and global)\n */\n cleanupAll(): void {\n // Clean up all component resources\n for (const componentId of this.resources.keys()) {\n this.cleanupComponent(componentId);\n }\n\n // Clean up global resources\n this.cleanupGlobal();\n }\n\n /**\n * Get resource statistics for debugging\n */\n getStats(): {\n componentCount: number;\n resourceCounts: Record<string, number>;\n globalResourceCount: number;\n } {\n const resourceCounts: Record<string, number> = {};\n \n for (const resources of this.resources.values()) {\n resources.forEach(resource => {\n resourceCounts[resource.type] = (resourceCounts[resource.type] || 0) + 1;\n });\n }\n\n return {\n componentCount: this.resources.size,\n resourceCounts,\n globalResourceCount: this.globalResources.size\n };\n }\n}\n\n// Singleton instance\nexport const resourceManager = new ResourceManager();"]}
|
|
1
|
+
{"version":3,"file":"resource-manager.js","sourceRoot":"","sources":["../../src/utilities/resource-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Centralized resource management for React Runtime\n * Handles timers, DOM elements, event listeners, and other resources that need cleanup\n * @module @memberjunction/react-runtime/utilities\n */\n\n// Type alias for timer IDs that works in both browser and Node.js\nexport type TimerId = number | NodeJS.Timeout;\n\nexport interface ManagedResource {\n type: 'timer' | 'interval' | 'animationFrame' | 'eventListener' | 'domElement' | 'observable' | 'reactRoot';\n id: string | TimerId;\n cleanup: () => void;\n metadata?: Record<string, any>;\n}\n\n/**\n * Environment-agnostic timer functions that work in both browser and Node.js\n */\nconst getTimerFunctions = () => {\n // Check if we're in a browser environment\n if (typeof window !== 'undefined' && window.setTimeout) {\n return {\n setTimeout: window.setTimeout.bind(window),\n clearTimeout: window.clearTimeout.bind(window),\n setInterval: window.setInterval.bind(window),\n clearInterval: window.clearInterval.bind(window),\n requestAnimationFrame: window.requestAnimationFrame?.bind(window),\n cancelAnimationFrame: window.cancelAnimationFrame?.bind(window)\n };\n }\n // Node.js environment\n else if (typeof global !== 'undefined' && global.setTimeout) {\n return {\n setTimeout: global.setTimeout,\n clearTimeout: global.clearTimeout,\n setInterval: global.setInterval,\n clearInterval: global.clearInterval,\n requestAnimationFrame: undefined, // Not available in Node.js\n cancelAnimationFrame: undefined\n };\n }\n // Fallback - return no-op functions\n else {\n const noop = () => {};\n const noopWithReturn = () => 0;\n return {\n setTimeout: noopWithReturn,\n clearTimeout: noop,\n setInterval: noopWithReturn,\n clearInterval: noop,\n requestAnimationFrame: undefined,\n cancelAnimationFrame: undefined\n };\n }\n};\n\nconst timers = getTimerFunctions();\n\n/**\n * ResourceManager provides centralized management of resources that need cleanup.\n * This prevents memory leaks by ensuring all resources are properly disposed.\n */\nexport class ResourceManager {\n private resources = new Map<string, Set<ManagedResource>>();\n private globalResources = new Set<ManagedResource>();\n private cleanupCallbacks = new Map<string, (() => void)[]>();\n\n /**\n * Register a timeout with automatic cleanup\n */\n setTimeout(\n componentId: string,\n callback: () => void,\n delay: number,\n metadata?: Record<string, any>\n ): number {\n const id = timers.setTimeout(() => {\n this.removeResource(componentId, 'timer', id);\n callback();\n }, delay);\n\n this.addResource(componentId, {\n type: 'timer',\n id,\n cleanup: () => timers.clearTimeout(id),\n metadata\n });\n\n return id as any;\n }\n\n /**\n * Register an interval with automatic cleanup\n */\n setInterval(\n componentId: string,\n callback: () => void,\n delay: number,\n metadata?: Record<string, any>\n ): number {\n const id = timers.setInterval(callback, delay);\n\n this.addResource(componentId, {\n type: 'interval',\n id,\n cleanup: () => timers.clearInterval(id),\n metadata\n });\n\n return id as any;\n }\n\n /**\n * Register an animation frame with automatic cleanup\n */\n requestAnimationFrame(\n componentId: string,\n callback: FrameRequestCallback,\n metadata?: Record<string, any>\n ): TimerId {\n if (!timers.requestAnimationFrame) {\n // Fallback to setTimeout in non-browser environments\n return this.setTimeout(componentId, () => callback(Date.now()), 16, metadata);\n }\n\n const id = timers.requestAnimationFrame((time) => {\n this.removeResource(componentId, 'animationFrame', id);\n callback(time);\n });\n\n this.addResource(componentId, {\n type: 'animationFrame',\n id,\n cleanup: () => timers.cancelAnimationFrame?.(id),\n metadata\n });\n\n return id as any;\n }\n\n /**\n * Clear a specific timeout\n */\n clearTimeout(componentId: string, id: number): void {\n timers.clearTimeout(id);\n this.removeResource(componentId, 'timer', id);\n }\n\n /**\n * Clear a specific interval\n */\n clearInterval(componentId: string, id: number): void {\n timers.clearInterval(id);\n this.removeResource(componentId, 'interval', id);\n }\n\n /**\n * Cancel a specific animation frame\n */\n cancelAnimationFrame(componentId: string, id: TimerId): void {\n if (timers.cancelAnimationFrame) {\n timers.cancelAnimationFrame(id as number);\n } else {\n // If we fell back to setTimeout, use clearTimeout\n timers.clearTimeout(id as any);\n }\n this.removeResource(componentId, 'animationFrame', id);\n }\n\n /**\n * Register an event listener with automatic cleanup\n */\n addEventListener(\n componentId: string,\n target: EventTarget,\n type: string,\n listener: EventListener,\n options?: AddEventListenerOptions\n ): void {\n // Only add event listeners if we have a valid EventTarget (browser environment)\n if (target && typeof target.addEventListener === 'function') {\n target.addEventListener(type, listener, options);\n \n const resourceId = `${type}-${Date.now()}-${Math.random()}`;\n this.addResource(componentId, {\n type: 'eventListener',\n id: resourceId,\n cleanup: () => {\n if (target && typeof target.removeEventListener === 'function') {\n target.removeEventListener(type, listener, options);\n }\n },\n metadata: { target, type, options }\n });\n }\n }\n\n /**\n * Register a DOM element that needs cleanup\n */\n registerDOMElement(\n componentId: string,\n element: any, // Use 'any' to avoid HTMLElement type in Node.js\n cleanup?: () => void\n ): void {\n // Only register if we're in a browser environment with DOM support\n if (typeof document !== 'undefined' && element && element.parentNode) {\n const resourceId = `dom-${Date.now()}-${Math.random()}`;\n this.addResource(componentId, {\n type: 'domElement',\n id: resourceId,\n cleanup: () => {\n if (cleanup) {\n cleanup();\n }\n if (element && element.parentNode && typeof element.parentNode.removeChild === 'function') {\n element.parentNode.removeChild(element);\n }\n },\n metadata: { element }\n });\n }\n }\n\n /**\n * Register a React root for cleanup\n */\n registerReactRoot(\n componentId: string,\n root: any,\n unmountFn: () => void\n ): void {\n this.addResource(componentId, {\n type: 'reactRoot',\n id: `react-root-${componentId}`,\n cleanup: unmountFn,\n metadata: { root }\n });\n }\n\n /**\n * Register a generic cleanup callback for a component\n */\n registerCleanup(componentId: string, cleanup: () => void): void {\n if (!this.cleanupCallbacks.has(componentId)) {\n this.cleanupCallbacks.set(componentId, []);\n }\n this.cleanupCallbacks.get(componentId)!.push(cleanup);\n }\n\n /**\n * Register a global resource (not tied to a specific component)\n */\n registerGlobalResource(resource: ManagedResource): void {\n this.globalResources.add(resource);\n }\n\n /**\n * Add a resource to be managed\n */\n private addResource(componentId: string, resource: ManagedResource): void {\n if (!this.resources.has(componentId)) {\n this.resources.set(componentId, new Set());\n }\n this.resources.get(componentId)!.add(resource);\n }\n\n /**\n * Remove a specific resource\n */\n private removeResource(\n componentId: string,\n type: ManagedResource['type'],\n id: string | number | NodeJS.Timeout\n ): void {\n const componentResources = this.resources.get(componentId);\n if (componentResources) {\n const toRemove = Array.from(componentResources).find(\n r => r.type === type && r.id === id\n );\n if (toRemove) {\n componentResources.delete(toRemove);\n }\n }\n }\n\n /**\n * Clean up all resources for a specific component\n */\n cleanupComponent(componentId: string): void {\n // Clean up tracked resources\n const componentResources = this.resources.get(componentId);\n if (componentResources) {\n componentResources.forEach(resource => {\n try {\n resource.cleanup();\n } catch (error) {\n console.error(`Error cleaning up ${resource.type} resource:`, error);\n }\n });\n this.resources.delete(componentId);\n }\n\n // Execute cleanup callbacks\n const callbacks = this.cleanupCallbacks.get(componentId);\n if (callbacks) {\n callbacks.forEach(callback => {\n try {\n callback();\n } catch (error) {\n console.error('Error executing cleanup callback:', error);\n }\n });\n this.cleanupCallbacks.delete(componentId);\n }\n }\n\n /**\n * Clean up all global resources\n */\n cleanupGlobal(): void {\n this.globalResources.forEach(resource => {\n try {\n resource.cleanup();\n } catch (error) {\n console.error(`Error cleaning up global ${resource.type} resource:`, error);\n }\n });\n this.globalResources.clear();\n }\n\n /**\n * Clean up all resources (components and global)\n */\n cleanupAll(): void {\n // Clean up all component resources\n for (const componentId of this.resources.keys()) {\n this.cleanupComponent(componentId);\n }\n\n // Clean up global resources\n this.cleanupGlobal();\n }\n\n /**\n * Get resource statistics for debugging\n */\n getStats(): {\n componentCount: number;\n resourceCounts: Record<string, number>;\n globalResourceCount: number;\n } {\n const resourceCounts: Record<string, number> = {};\n \n for (const resources of this.resources.values()) {\n resources.forEach(resource => {\n resourceCounts[resource.type] = (resourceCounts[resource.type] || 0) + 1;\n });\n }\n\n return {\n componentCount: this.resources.size,\n resourceCounts,\n globalResourceCount: this.globalResources.size\n };\n }\n}\n\n// Singleton instance\nexport const resourceManager = new ResourceManager();"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComponentUtilities } from '@memberjunction/interactive-component-types';
|
|
2
|
+
export declare class RuntimeUtilities {
|
|
3
|
+
buildUtilities(): ComponentUtilities;
|
|
4
|
+
private SetupUtilities;
|
|
5
|
+
private CreateSimpleMetadata;
|
|
6
|
+
private CreateSimpleRunQuery;
|
|
7
|
+
private CreateSimpleRunView;
|
|
8
|
+
}
|
|
9
|
+
export declare function createRuntimeUtilities(): RuntimeUtilities;
|
|
10
|
+
//# sourceMappingURL=runtime-utilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-utilities.d.ts","sourceRoot":"","sources":["../../src/utilities/runtime-utilities.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,kBAAkB,EAAiD,MAAM,6CAA6C,CAAC;AAOhI,qBACa,gBAAgB;IAKpB,cAAc,IAAI,kBAAkB;IAQ3C,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,mBAAmB;CAwB5B;AAOD,wBAAgB,sBAAsB,IAAI,gBAAgB,CAmBzD"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createRuntimeUtilities = exports.RuntimeUtilities = void 0;
|
|
10
|
+
const core_1 = require("@memberjunction/core");
|
|
11
|
+
const global_1 = require("@memberjunction/global");
|
|
12
|
+
let RuntimeUtilities = class RuntimeUtilities {
|
|
13
|
+
buildUtilities() {
|
|
14
|
+
const md = new core_1.Metadata();
|
|
15
|
+
return this.SetupUtilities(md);
|
|
16
|
+
}
|
|
17
|
+
SetupUtilities(md) {
|
|
18
|
+
const rv = new core_1.RunView();
|
|
19
|
+
const rq = new core_1.RunQuery();
|
|
20
|
+
const u = {
|
|
21
|
+
md: this.CreateSimpleMetadata(md),
|
|
22
|
+
rv: this.CreateSimpleRunView(rv),
|
|
23
|
+
rq: this.CreateSimpleRunQuery(rq)
|
|
24
|
+
};
|
|
25
|
+
return u;
|
|
26
|
+
}
|
|
27
|
+
CreateSimpleMetadata(md) {
|
|
28
|
+
return {
|
|
29
|
+
Entities: md.Entities,
|
|
30
|
+
GetEntityObject: (entityName) => {
|
|
31
|
+
return md.GetEntityObject(entityName);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
CreateSimpleRunQuery(rq) {
|
|
36
|
+
return {
|
|
37
|
+
RunQuery: async (params) => {
|
|
38
|
+
try {
|
|
39
|
+
const result = await rq.RunQuery(params);
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
(0, core_1.LogError)(error);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
CreateSimpleRunView(rv) {
|
|
50
|
+
return {
|
|
51
|
+
RunView: async (params) => {
|
|
52
|
+
try {
|
|
53
|
+
const result = await rv.RunView(params);
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
(0, core_1.LogError)(error);
|
|
58
|
+
throw error;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
RunViews: async (params) => {
|
|
62
|
+
try {
|
|
63
|
+
const results = await rv.RunViews(params);
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
(0, core_1.LogError)(error);
|
|
68
|
+
throw error;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
exports.RuntimeUtilities = RuntimeUtilities;
|
|
75
|
+
exports.RuntimeUtilities = RuntimeUtilities = __decorate([
|
|
76
|
+
(0, global_1.RegisterClass)(RuntimeUtilities, 'RuntimeUtilities')
|
|
77
|
+
], RuntimeUtilities);
|
|
78
|
+
function createRuntimeUtilities() {
|
|
79
|
+
if (typeof window === 'undefined') {
|
|
80
|
+
try {
|
|
81
|
+
const obj = global_1.MJGlobal.Instance.ClassFactory.CreateInstance(RuntimeUtilities);
|
|
82
|
+
if (!obj) {
|
|
83
|
+
throw new Error('Failed to create RuntimeUtilities instance');
|
|
84
|
+
}
|
|
85
|
+
return obj;
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return new RuntimeUtilities();
|
|
91
|
+
}
|
|
92
|
+
exports.createRuntimeUtilities = createRuntimeUtilities;
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createStandardLibraries = exports.StandardLibraryManager = void 0;
|
|
4
1
|
const DEFAULT_LIBRARY_CONFIG = {
|
|
5
2
|
libraries: [],
|
|
6
3
|
metadata: {
|
|
@@ -9,7 +6,8 @@ const DEFAULT_LIBRARY_CONFIG = {
|
|
|
9
6
|
description: 'Empty default configuration - libraries should be configured at runtime'
|
|
10
7
|
}
|
|
11
8
|
};
|
|
12
|
-
class StandardLibraryManager {
|
|
9
|
+
export class StandardLibraryManager {
|
|
10
|
+
static { this.configuration = DEFAULT_LIBRARY_CONFIG; }
|
|
13
11
|
static setConfiguration(config) {
|
|
14
12
|
this.configuration = config;
|
|
15
13
|
}
|
|
@@ -48,9 +46,7 @@ class StandardLibraryManager {
|
|
|
48
46
|
this.configuration = DEFAULT_LIBRARY_CONFIG;
|
|
49
47
|
}
|
|
50
48
|
}
|
|
51
|
-
|
|
52
|
-
StandardLibraryManager.configuration = DEFAULT_LIBRARY_CONFIG;
|
|
53
|
-
function createStandardLibraries() {
|
|
49
|
+
export function createStandardLibraries() {
|
|
54
50
|
if (typeof window === 'undefined') {
|
|
55
51
|
return {};
|
|
56
52
|
}
|
|
@@ -63,5 +59,4 @@ function createStandardLibraries() {
|
|
|
63
59
|
});
|
|
64
60
|
return libs;
|
|
65
61
|
}
|
|
66
|
-
exports.createStandardLibraries = createStandardLibraries;
|
|
67
62
|
//# sourceMappingURL=standard-libraries.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard-libraries.js","sourceRoot":"","sources":["../../src/utilities/standard-libraries.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"standard-libraries.js","sourceRoot":"","sources":["../../src/utilities/standard-libraries.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Standard libraries configuration for React components\n * @module @memberjunction/react-runtime/utilities\n */\n\nimport { LibraryConfiguration, ExternalLibraryConfig } from '../types/library-config';\n\n\n/**\n * Type for dynamically loaded libraries available to React components\n */\nexport type StandardLibraries = Record<string, any>;\n\n/**\n * Default empty library configuration\n * Libraries should be configured dynamically at runtime\n */\nconst DEFAULT_LIBRARY_CONFIG: LibraryConfiguration = {\n libraries: [],\n metadata: {\n version: '1.0.0',\n lastUpdated: new Date().toISOString(),\n description: 'Empty default configuration - libraries should be configured at runtime'\n }\n};\n\n/**\n * Manages standard library configurations with dynamic loading support\n */\nexport class StandardLibraryManager {\n private static configuration: LibraryConfiguration = DEFAULT_LIBRARY_CONFIG;\n \n /**\n * Set a custom library configuration\n */\n static setConfiguration(config: LibraryConfiguration): void {\n this.configuration = config;\n }\n \n /**\n * Get the current library configuration\n */\n static getConfiguration(): LibraryConfiguration {\n return this.configuration;\n }\n \n /**\n * Get all enabled libraries\n */\n static getEnabledLibraries(): ExternalLibraryConfig[] {\n return this.configuration.libraries.filter(lib => lib.isEnabled);\n }\n \n /**\n * Get libraries by category\n */\n static getLibrariesByCategory(category: ExternalLibraryConfig['category']): ExternalLibraryConfig[] {\n return this.configuration.libraries.filter(lib => lib.category === category && lib.isEnabled);\n }\n \n /**\n * Get core libraries (runtime essentials)\n */\n static getCoreLibraries(): ExternalLibraryConfig[] {\n return this.configuration.libraries.filter(lib => lib.isCore && lib.isEnabled);\n }\n \n /**\n * Get component libraries (non-runtime)\n */\n static getComponentLibraries(): ExternalLibraryConfig[] {\n return this.configuration.libraries.filter(lib => !lib.isRuntimeOnly && lib.isEnabled);\n }\n \n /**\n * Get library by ID\n */\n static getLibraryById(id: string): ExternalLibraryConfig | undefined {\n return this.configuration.libraries.find(lib => lib.id === id);\n }\n \n /**\n * Get library URLs as a simple object (for backward compatibility)\n */\n static getLibraryUrls(): Record<string, string> {\n const urls: Record<string, string> = {};\n this.configuration.libraries\n .filter(lib => lib.isEnabled)\n .forEach(lib => {\n // Use uppercase key for backward compatibility\n const key = lib.id.replace(/-/g, '_').toUpperCase();\n urls[key] = lib.cdnUrl;\n if (lib.cdnCssUrl) {\n urls[`${key}_CSS`] = lib.cdnCssUrl;\n }\n });\n return urls;\n }\n \n /**\n * Reset to default configuration\n */\n static resetToDefault(): void {\n this.configuration = DEFAULT_LIBRARY_CONFIG;\n }\n}\n\n\n/**\n * Creates a standard libraries object for browser environments\n * Dynamically collects all libraries based on current configuration\n */\nexport function createStandardLibraries(): StandardLibraries {\n if (typeof window === 'undefined') {\n // Return empty object in Node.js environments\n return {};\n }\n \n const libs: StandardLibraries = {};\n \n // Add all component libraries as globals based on configuration\n StandardLibraryManager.getComponentLibraries().forEach(lib => {\n const globalValue = (window as any)[lib.globalVariable];\n if (globalValue !== undefined) {\n libs[lib.globalVariable] = globalValue;\n }\n });\n \n return libs;\n}"]}
|