@memberjunction/react-runtime 2.112.0 → 2.113.1

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.
Files changed (43) hide show
  1. package/.turbo/turbo-build.log +11 -10
  2. package/CHANGELOG.md +14 -1
  3. package/dist/compiler/component-compiler.d.ts.map +1 -1
  4. package/dist/compiler/component-compiler.js +56 -66
  5. package/dist/compiler/component-compiler.js.map +1 -1
  6. package/dist/component-manager/component-manager.d.ts.map +1 -1
  7. package/dist/component-manager/component-manager.js +42 -48
  8. package/dist/component-manager/component-manager.js.map +1 -1
  9. package/dist/component-manager/types.d.ts +1 -1
  10. package/dist/component-manager/types.d.ts.map +1 -1
  11. package/dist/component-manager/types.js.map +1 -1
  12. package/dist/registry/component-registry-service.d.ts +1 -1
  13. package/dist/registry/component-registry-service.d.ts.map +1 -1
  14. package/dist/registry/component-registry-service.js +34 -34
  15. package/dist/registry/component-registry-service.js.map +1 -1
  16. package/dist/registry/component-resolver.d.ts +1 -1
  17. package/dist/registry/component-resolver.d.ts.map +1 -1
  18. package/dist/registry/component-resolver.js +11 -10
  19. package/dist/registry/component-resolver.js.map +1 -1
  20. package/dist/runtime/component-hierarchy.d.ts +1 -1
  21. package/dist/runtime/component-hierarchy.d.ts.map +1 -1
  22. package/dist/runtime/component-hierarchy.js +43 -43
  23. package/dist/runtime/component-hierarchy.js.map +1 -1
  24. package/dist/runtime/prop-builder.d.ts.map +1 -1
  25. package/dist/runtime/prop-builder.js +24 -22
  26. package/dist/runtime/prop-builder.js.map +1 -1
  27. package/dist/runtime.umd.js +511 -494
  28. package/dist/types/index.d.ts.map +1 -1
  29. package/dist/types/index.js.map +1 -1
  30. package/dist/utilities/library-registry.d.ts +1 -1
  31. package/dist/utilities/library-registry.d.ts.map +1 -1
  32. package/dist/utilities/library-registry.js +10 -10
  33. package/dist/utilities/library-registry.js.map +1 -1
  34. package/package.json +6 -5
  35. package/src/compiler/component-compiler.ts +164 -186
  36. package/src/component-manager/component-manager.ts +216 -162
  37. package/src/component-manager/types.ts +27 -27
  38. package/src/registry/component-registry-service.ts +218 -190
  39. package/src/registry/component-resolver.ts +98 -87
  40. package/src/runtime/component-hierarchy.ts +94 -57
  41. package/src/runtime/prop-builder.ts +33 -28
  42. package/src/types/index.ts +4 -3
  43. package/src/utilities/library-registry.ts +19 -14
@@ -1 +1 @@
1
- {"version":3,"file":"component-compiler.js","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Platform-agnostic React component compiler.\n * Compiles React component source code into executable components using Babel.\n * @module @memberjunction/react-runtime/compiler\n */\n\nimport { UserInfo } from '@memberjunction/global';\nimport { CompileOptions, CompiledComponent, CompilationResult, CompilerConfig, ComponentError, RuntimeContext } from '../types';\nimport { ComponentStyles, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { LibraryRegistry } from '../utilities/library-registry';\nimport { LibraryLoader } from '../utilities/library-loader';\nimport { unwrapLibraryComponent, unwrapLibraryComponents, unwrapAllLibraryComponents } from '../utilities/component-unwrapper';\nimport { ComponentLibraryEntity } from '@memberjunction/core-entities';\n\n/**\n * Default compiler configuration\n */\nconst DEFAULT_COMPILER_CONFIG: CompilerConfig = {\n babel: {\n presets: ['react'],\n plugins: [],\n },\n minify: false,\n sourceMaps: false,\n cache: true,\n maxCacheSize: 100,\n debug: false,\n};\n\n/**\n * Platform-agnostic React component compiler.\n * Transforms JSX/React component source code into executable JavaScript.\n */\nexport class ComponentCompiler {\n private config: CompilerConfig;\n private compilationCache: Map<string, CompiledComponent>;\n private cacheAccessOrder: string[]; // Track access order for LRU\n private babelInstance: any;\n\n /**\n * Creates a new ComponentCompiler instance\n * @param config - Optional compiler configuration\n */\n constructor(config?: Partial<CompilerConfig>) {\n this.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n this.compilationCache = new Map();\n }\n\n /**\n * Sets the Babel instance to use for compilation\n * @param babel - The Babel standalone instance\n */\n setBabelInstance(babel: any): void {\n this.babelInstance = babel;\n }\n\n /**\n * Compiles a React component from source code\n * @param options - Compilation options\n * @returns Promise resolving to compilation result\n */\n async compile(options: CompileOptions): Promise<CompilationResult> {\n const startTime = Date.now();\n\n try {\n // Check cache first if enabled\n if (this.config.cache) {\n const cached = this.getCachedComponent(options.componentName, options.componentCode);\n if (cached) {\n return {\n success: true,\n component: cached,\n duration: Date.now() - startTime,\n };\n }\n }\n\n // Validate inputs\n this.validateCompileOptions(options);\n\n // Load required libraries if specified\n const loadedLibraries = await this.loadRequiredLibraries(options.libraries!, options.allLibraries);\n\n // Transpile the component code\n const transpiledCode = this.transpileComponent(options.componentCode, options.componentName, options);\n\n // Create the component factory with loaded libraries\n const componentFactory = this.createComponentFactory(transpiledCode, options.componentName, loadedLibraries, options);\n\n // Build the compiled component\n const compiledComponent: CompiledComponent = {\n factory: componentFactory,\n id: this.generateComponentId(options.componentName),\n name: options.componentName,\n compiledAt: new Date(),\n warnings: [],\n };\n\n // Cache if enabled\n if (this.config.cache) {\n this.cacheComponent(compiledComponent, options.componentCode);\n }\n\n return {\n success: true,\n component: compiledComponent,\n duration: Date.now() - startTime,\n size: transpiledCode.length,\n loadedLibraries: loadedLibraries,\n };\n } catch (error) {\n return {\n success: false,\n error: this.createCompilationError(error, options.componentName),\n duration: Date.now() - startTime,\n };\n }\n }\n\n /**\n * Transpiles JSX/React code to JavaScript\n * @param code - Source code to transpile\n * @param componentName - Name of the component\n * @param options - Compilation options\n * @returns Transpiled JavaScript code\n */\n private transpileComponent(code: string, componentName: string, options: CompileOptions): string {\n if (!this.babelInstance) {\n throw new Error('Babel instance not set. Call setBabelInstance() first.');\n }\n\n const wrappedCode = this.wrapComponentCode(code, componentName, options.libraries, options.dependencies);\n\n try {\n const result = this.babelInstance.transform(wrappedCode, {\n presets: options.babelPresets || this.config.babel.presets,\n plugins: options.babelPlugins || this.config.babel.plugins,\n filename: `${componentName}.jsx`,\n sourceMaps: this.config.sourceMaps,\n minified: this.config.minify,\n });\n\n return result.code;\n } catch (error: any) {\n throw new Error(`Transpilation failed: ${error.message}`);\n }\n }\n\n /**\n * Wraps component code in a factory function for execution\n * @param componentCode - Raw component code\n * @param componentName - Name of the component\n * @param libraries - Optional library dependencies\n * @param dependencies - Optional child component dependencies\n * @returns Wrapped component code\n */\n // Core libraries that are passed as parameters to createComponent and should not be destructured\n private readonly CORE_LIBRARIES = new Set(['React', 'ReactDOM']);\n\n private wrapComponentCode(\n componentCode: string,\n componentName: string,\n libraries?: any[],\n dependencies?: Array<{ name: string }>\n ): string {\n const debug = this.config.debug;\n // Generate library declarations if libraries are provided\n // Skip core libraries as they're passed as parameters to createComponent\n const libraryDeclarations =\n libraries && libraries.length > 0\n ? libraries\n .filter((lib) => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable)) // Skip core libraries\n .map((lib) => `const ${lib.globalVariable} = libraries['${lib.globalVariable}'];`)\n .join('\\n ')\n : '';\n const libraryLogChecks =\n libraries && libraries.length > 0\n ? libraries\n .filter((lib) => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable)) // Skip core libraries\n .map(\n (lib) =>\n `\\nif (!${lib.globalVariable}) { console.error('[React-Runtime-JS] Library \"${lib.globalVariable}\" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Library \"${lib.globalVariable}\" is defined');` : ''} }`\n )\n .join('\\n ')\n : '';\n\n // Generate component declarations if dependencies are provided\n // Filter out the component being compiled to avoid naming conflicts\n // Also detect and warn about duplicates\n const seenDependencies = new Set<string>();\n const uniqueDependencies: Array<{ name: string; code?: string }> = [];\n const duplicates: string[] = [];\n\n if (dependencies && dependencies.length > 0) {\n for (const dep of dependencies) {\n if (dep.name === componentName) {\n // Skip the component being compiled itself\n continue;\n }\n if (seenDependencies.has(dep.name)) {\n duplicates.push(dep.name);\n } else {\n seenDependencies.add(dep.name);\n uniqueDependencies.push(dep);\n }\n }\n }\n\n // Generate warning for duplicates\n const duplicateWarnings =\n duplicates.length > 0\n ? duplicates\n .map(\n (name) =>\n `console.warn('[React-Runtime-JS] WARNING: Component \"${name}\" is registered multiple times as a dependency. Using first occurrence only.');`\n )\n .join('\\n ')\n : '';\n\n const componentDeclarations =\n uniqueDependencies.length > 0\n ? uniqueDependencies\n .map(\n (dep) => `const ${dep.name}Raw = componentsOuter['${dep.name}'];\n ${\n debug\n ? `console.log('[React-Runtime-JS] Extracting ${dep.name}:');\n console.log(' - Raw value type:', typeof ${dep.name}Raw);\n console.log(' - Raw value:', ${dep.name}Raw);\n if (${dep.name}Raw && typeof ${dep.name}Raw === 'object') {\n console.log(' - Has .component property:', 'component' in ${dep.name}Raw);\n console.log(' - .component type:', typeof ${dep.name}Raw.component);\n }`\n : ''\n }\n const ${dep.name} = ${dep.name}Raw?.component || ${dep.name}Raw;\n ${\n debug\n ? `console.log(' - Final ${dep.name} type:', typeof ${dep.name});\n console.log(' - Final ${dep.name} is function:', typeof ${dep.name} === 'function');`\n : ''\n }`\n )\n .join('\\n ')\n : '';\n\n const componentLogChecks =\n uniqueDependencies.length > 0\n ? uniqueDependencies\n .map(\n (dep) =>\n `if (!${dep.name}) { console.error('[React-Runtime-JS] Dependency \"${dep.name}\" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Dependency \"${dep.name}\" is defined');` : ''} }`\n )\n .join('\\n ')\n : '';\n\n const wrappedCode = `\n function createComponent(\n React, ReactDOM,\n useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useLayoutEffect,\n libraries, styles, console, components,\n unwrapLibraryComponent, unwrapLibraryComponents, unwrapAllLibraryComponents\n ) {\n if (!React)\n console.log('[React-Runtime-JS] React is not defined');\n if (!ReactDOM)\n console.log('[React-Runtime-JS] ReactDOM is not defined');\n\n // Make unwrap functions available with legacy names for backward compatibility\n const unwrapComponent = unwrapLibraryComponent;\n const unwrapComponents = unwrapLibraryComponents;\n const unwrapAllComponents = unwrapAllLibraryComponents;\n\n // Code for ${componentName}\n ${componentCode}\n\n // Ensure the component exists\n if (typeof ${componentName} === 'undefined') {\n throw new Error('Component \"${componentName}\" is not defined in the provided code');\n }\n else {\n ${debug ? `console.log('[React-Runtime-JS] Component \"${componentName}\" is defined');` : ''}\n }\n\n // Store the component in a variable so we don't lose it\n const UserComponent = ${componentName};\n\n // Check if the component is already a ComponentObject (has a .component property)\n // If so, extract the actual React component\n const ActualComponent = (typeof UserComponent === 'object' && UserComponent !== null && 'component' in UserComponent)\n ? UserComponent.component\n : UserComponent;\n\n // Debug logging to understand what we're getting\n ${\n debug\n ? `\n console.log('[React-Runtime-JS]Component ${componentName} type:', typeof UserComponent);\n if (typeof UserComponent === 'object' && UserComponent !== null) {\n console.log('[React-Runtime-JS]Component ${componentName} keys:', Object.keys(UserComponent));\n console.log('[React-Runtime-JS]Component ${componentName} has .component:', 'component' in UserComponent);\n if ('component' in UserComponent) {\n console.log('[React-Runtime-JS]Component ${componentName}.component type:', typeof UserComponent.component);\n }\n }`\n : ''\n }\n\n // Validate that we have a function (React component)\n if (typeof ActualComponent !== 'function') {\n console.error('[React-Runtime-JS] Invalid component type for ${componentName}:', typeof ActualComponent);\n console.error('[React-Runtime-JS] ActualComponent value:', ActualComponent);\n console.error('[React-Runtime-JS] Original UserComponent value:', UserComponent);\n throw new Error('[React-Runtime-JS] Component \"${componentName}\" must be a function (React component) or an object with a .component property that is a function. Got: ' + typeof ActualComponent);\n }\n\n let componentsOuter = null, utilitiesOuter = null;\n const DestructureWrapperUserComponent = (props) => {\n if (!componentsOuter) {\n componentsOuter = props?.components || components;\n }\n if (!utilitiesOuter) {\n utilitiesOuter = props?.utilities;\n }\n ${\n debug\n ? `\n console.log('[React-Runtime-JS] DestructureWrapperUserComponent for ${componentName}:');\n console.log(' - Props:', props);\n console.log(' - componentsOuter type:', typeof componentsOuter);\n console.log(' - componentsOuter:', componentsOuter);\n if (componentsOuter && typeof componentsOuter === 'object') {\n console.log(' - componentsOuter keys:', Object.keys(componentsOuter));\n for (const key of Object.keys(componentsOuter)) {\n const comp = componentsOuter[key];\n console.log(\\` - componentsOuter[\\${key}] type:\\`, typeof comp);\n if (comp && typeof comp === 'object') {\n console.log(\\` - Has .component: \\${'component' in comp}\\`);\n console.log(\\` - .component type: \\${typeof comp.component}\\`);\n }\n }\n }\n console.log(' - styles:', styles);\n console.log(' - utilities:', utilitiesOuter);\n console.log(' - libraries:', libraries);`\n : ''\n }\n ${duplicateWarnings ? '// Duplicate dependency warnings\\n ' + duplicateWarnings + '\\n ' : ''}\n ${libraryDeclarations ? '// Destructure Libraries\\n' + libraryDeclarations + '\\n ' : ''}\n ${componentDeclarations ? '// Destructure Dependencies\\n' + componentDeclarations + '\\n ' : ''}\n ${libraryLogChecks}\n ${componentLogChecks}\n\n const newProps = {\n ...props,\n components: componentsOuter,\n utilities: utilitiesOuter\n }\n return ActualComponent(newProps);\n };\n\n // Create a fresh method registry for each factory call\n const methodRegistry = new Map();\n\n // Create a wrapper component that provides RegisterMethod in callbacks\n const ComponentWithMethodRegistry = (props) => {\n // Register methods on mount\n React.useEffect(() => {\n // Clear previous methods\n methodRegistry.clear();\n\n // Provide RegisterMethod callback if callbacks exist\n if (props.callbacks && typeof props.callbacks.RegisterMethod === 'function') {\n // Component can now register its methods\n // This will be called from within the component\n }\n }, [props.callbacks]);\n\n // Create enhanced callbacks with RegisterMethod\n const enhancedCallbacks = React.useMemo(() => {\n if (!props.callbacks) return {};\n\n return {\n ...props.callbacks,\n RegisterMethod: (methodName, handler) => {\n if (methodName && handler) {\n methodRegistry.set(methodName, handler);\n }\n }\n };\n }, [props.callbacks]);\n\n // Render the original component with enhanced callbacks\n return React.createElement(DestructureWrapperUserComponent, {\n ...props,\n callbacks: enhancedCallbacks\n });\n };\n\n ComponentWithMethodRegistry.displayName = '${componentName}WithMethods';\n\n // Return the component object with method access\n return {\n component: ComponentWithMethodRegistry,\n\n print: function() {\n const printMethod = methodRegistry.get('print');\n if (printMethod) {\n printMethod();\n } else if (typeof window !== 'undefined' && window.print) {\n window.print();\n }\n },\n refresh: function(data) {\n const refreshMethod = methodRegistry.get('refresh');\n if (refreshMethod) {\n refreshMethod(data);\n }\n // Refresh functionality is handled by the host environment\n },\n\n // Standard method accessors with type safety\n getCurrentDataState: function() {\n const method = methodRegistry.get('getCurrentDataState');\n return method ? method() : undefined;\n },\n getDataStateHistory: function() {\n const method = methodRegistry.get('getDataStateHistory');\n return method ? method() : [];\n },\n validate: function() {\n const method = methodRegistry.get('validate');\n return method ? method() : true;\n },\n isDirty: function() {\n const method = methodRegistry.get('isDirty');\n return method ? method() : false;\n },\n reset: function() {\n const method = methodRegistry.get('reset');\n if (method) method();\n },\n scrollTo: function(target) {\n const method = methodRegistry.get('scrollTo');\n if (method) method(target);\n },\n focus: function(target) {\n const method = methodRegistry.get('focus');\n if (method) method(target);\n },\n\n // Generic method invoker for custom methods\n invokeMethod: function(methodName, ...args) {\n const method = methodRegistry.get(methodName);\n if (method) {\n return method(...args);\n }\n console.warn(\\`[React-Runtime-JS] Method '\\${methodName}' is not registered on component ${componentName}\\`);\n return undefined;\n },\n\n // Check if a method exists\n hasMethod: function(methodName) {\n return methodRegistry.has(methodName);\n }\n };\n }\n `;\n\n return wrappedCode;\n }\n\n /**\n * Load required libraries from the registry with dependency resolution\n * @param libraries - Array of library dependencies\n * @param componentLibraries - All available component libraries for dependency resolution\n * @returns Map of loaded libraries\n */\n private async loadRequiredLibraries(libraries: any[], componentLibraries: ComponentLibraryEntity[]): Promise<Map<string, any>> {\n const loadedLibraries = new Map<string, any>();\n\n if (this.config.debug) {\n console.log('🔍 loadRequiredLibraries called with:', {\n librariesCount: libraries?.length || 0,\n libraries: libraries?.map((l) => ({ name: l.name, version: l.version, globalVariable: l.globalVariable })),\n });\n }\n\n if (!libraries || libraries.length === 0) {\n if (this.config.debug) {\n console.log('📚 No libraries to load, returning empty map');\n }\n return loadedLibraries;\n }\n\n // Only works in browser environment\n if (typeof window === 'undefined') {\n console.warn('Library loading is only supported in browser environments');\n return loadedLibraries;\n }\n\n // Initialize LibraryRegistry with componentLibraries if provided\n if (componentLibraries) {\n await LibraryRegistry.Config(false, componentLibraries);\n } else {\n console.warn('⚠️ No componentLibraries provided for LibraryRegistry initialization');\n }\n\n // Filter out React, ReactDOM, and invalid library entries\n const filteredLibraries = libraries.filter((lib) => {\n // Check if library object is valid\n if (!lib || typeof lib !== 'object' || !lib.name) {\n console.warn(`⚠️ Invalid library entry detected (missing name):`, lib);\n return false;\n }\n\n // Filter out entries with 'unknown' name or missing globalVariable\n if (lib.name === 'unknown' || lib.name === 'null' || lib.name === 'undefined') {\n console.warn(`⚠️ Filtering out invalid library with name '${lib.name}':`, lib);\n return false;\n }\n\n // Check for missing or invalid globalVariable\n if (!lib.globalVariable || lib.globalVariable === 'undefined' || lib.globalVariable === 'null') {\n console.warn(`⚠️ Filtering out library '${lib.name}' with invalid globalVariable:`, lib.globalVariable);\n return false;\n }\n\n const libNameLower = lib.name.toLowerCase();\n if (libNameLower === 'react' || libNameLower === 'reactdom') {\n console.warn(`⚠️ Library '${lib.name}' is automatically loaded by the React runtime and should not be requested separately`);\n return false;\n }\n return true;\n });\n\n // Extract library names from the filtered libraries (with extra safety)\n const libraryNames = filteredLibraries.map((lib) => lib.name).filter((name) => name && typeof name === 'string');\n\n if (this.config.debug) {\n console.log('📦 Using dependency-aware loading for libraries:', libraryNames);\n }\n\n // If all libraries were filtered out, return empty map\n if (filteredLibraries.length === 0) {\n if (this.config.debug) {\n console.log('📚 All requested libraries were filtered out (React/ReactDOM), returning empty map');\n }\n return loadedLibraries;\n }\n\n try {\n // Use the new dependency-aware loading\n const loadedLibraryMap = await LibraryLoader.loadLibrariesWithDependencies(libraryNames, componentLibraries, 'component-compiler', {\n debug: this.config.debug,\n });\n\n // Map the results to match the expected format\n // We need to map from library name to global variable\n for (const lib of filteredLibraries) {\n // Check if library is approved first\n const isApproved = LibraryRegistry.isApproved(lib.name);\n if (!isApproved) {\n console.error(`❌ Library '${lib.name}' is not approved`);\n throw new Error(`Library '${lib.name}' is not approved. Only approved libraries can be used.`);\n }\n\n // Get the loaded library from the map\n const loadedValue = loadedLibraryMap.get(lib.name);\n\n if (loadedValue) {\n // Store by global variable name for component access\n loadedLibraries.set(lib.globalVariable, loadedValue);\n if (this.config.debug) {\n console.log(`✅ Mapped ${lib.name} to global variable ${lib.globalVariable}`);\n }\n } else {\n // Fallback: check if it's already globally available (might be a dependency)\n const globalValue = (window as any)[lib.globalVariable];\n if (globalValue) {\n loadedLibraries.set(lib.globalVariable, globalValue);\n if (this.config.debug) {\n console.log(`✅ Found ${lib.name} already loaded as ${lib.globalVariable}`);\n }\n } else {\n console.error(`❌ Library '${lib.name}' failed to load`);\n throw new Error(`Library '${lib.name}' failed to load or did not expose '${lib.globalVariable}'`);\n }\n }\n }\n } catch (error: any) {\n console.error('Failed to load libraries with dependencies:', error);\n\n // Fallback to old loading method if dependency resolution fails\n if (this.config.debug) {\n console.warn('⚠️ Falling back to non-dependency-aware loading due to error');\n }\n\n // Load each library independently (old method)\n for (const lib of libraries) {\n if ((window as any)[lib.globalVariable]) {\n loadedLibraries.set(lib.globalVariable, (window as any)[lib.globalVariable]);\n } else {\n // Try to load using LibraryRegistry\n const libraryDef = LibraryRegistry.getLibrary(lib.name);\n if (libraryDef) {\n const resolvedVersion = LibraryRegistry.resolveVersion(lib.name, lib.version);\n const cdnUrl = LibraryRegistry.getCdnUrl(lib.name, resolvedVersion);\n\n if (cdnUrl) {\n await this.loadScript(cdnUrl, lib.globalVariable);\n const libraryValue = (window as any)[lib.globalVariable];\n if (libraryValue) {\n loadedLibraries.set(lib.globalVariable, libraryValue);\n }\n }\n }\n }\n }\n }\n\n if (this.config.debug) {\n console.log(`✅ All libraries loaded successfully. Total: ${loadedLibraries.size}`);\n console.log('📚 Loaded libraries map:', Array.from(loadedLibraries.keys()));\n }\n\n return loadedLibraries;\n }\n\n /**\n * Load CSS stylesheets dynamically\n * @param urls - Array of CSS URLs to load\n * @returns Promise that resolves when all stylesheets are loaded\n */\n private async loadStyles(urls: string[]): Promise<void> {\n const loadPromises = urls.map((url) => {\n return new Promise<void>((resolve) => {\n // Check if stylesheet already exists\n const existingLink = document.querySelector(`link[href=\"${url}\"]`);\n if (existingLink) {\n resolve();\n return;\n }\n\n // Create new link element\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n\n // CSS load events are not reliable cross-browser, so resolve immediately\n // The CSS will load asynchronously but won't block component rendering\n document.head.appendChild(link);\n resolve();\n });\n });\n\n await Promise.all(loadPromises);\n }\n\n /**\n * Load a script dynamically\n * @param url - Script URL\n * @param globalName - Expected global variable name\n * @returns Promise that resolves when script is loaded\n */\n private loadScript(url: string, globalName: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`);\n if (existingScript) {\n // Wait for it to finish loading with exponential backoff\n let attempts = 0;\n const maxAttempts = 50; // 5 seconds total with 100ms intervals\n const checkLoaded = () => {\n if ((window as any)[globalName]) {\n resolve();\n } else if (attempts >= maxAttempts) {\n reject(new Error(`${globalName} not found after ${maxAttempts * 100}ms waiting for existing script`));\n } else {\n attempts++;\n setTimeout(checkLoaded, 100);\n }\n };\n checkLoaded();\n return;\n }\n\n // Create new script element\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n\n script.onload = () => {\n // More robust checking with multiple attempts\n let attempts = 0;\n const maxAttempts = 20; // 2 seconds total\n const checkInterval = 100; // Check every 100ms\n\n const checkGlobal = () => {\n if ((window as any)[globalName]) {\n if (this.config.debug) {\n console.log(` ✓ Global variable ${globalName} found after ${attempts * checkInterval}ms`);\n }\n resolve();\n } else if (attempts >= maxAttempts) {\n // Final check - some libraries might use a different global name pattern\n if (this.config.debug) {\n console.error(` ❌ ${globalName} not found after ${attempts * checkInterval}ms`);\n // Only log matching property names, not the entire window object\n const matchingKeys = Object.keys(window).filter((k) => k.toLowerCase().includes(globalName.toLowerCase()));\n console.log(` ℹ️ Matching window properties: ${matchingKeys.join(', ') || 'none'}`);\n }\n reject(new Error(`${globalName} not found after loading script from ${url}`));\n } else {\n attempts++;\n setTimeout(checkGlobal, checkInterval);\n }\n };\n\n // Start checking immediately (don't wait 100ms first)\n checkGlobal();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${url}`));\n };\n\n document.head.appendChild(script);\n });\n }\n\n /**\n * Creates a component factory function from transpiled code\n * @param transpiledCode - Transpiled JavaScript code\n * @param componentName - Name of the component\n * @param loadedLibraries - Map of loaded libraries\n * @param options - Compile options containing spec and other metadata\n * @returns Component factory function\n */\n private createComponentFactory(\n transpiledCode: string,\n componentName: string,\n loadedLibraries: Map<string, any>,\n options: CompileOptions\n ): (context: RuntimeContext, styles?: ComponentStyles) => ComponentObject {\n try {\n // Create the factory function with all React hooks and utility functions\n const factoryCreator = new Function(\n 'React',\n 'ReactDOM',\n 'useState',\n 'useEffect',\n 'useCallback',\n 'useMemo',\n 'useRef',\n 'useContext',\n 'useReducer',\n 'useLayoutEffect',\n 'libraries',\n 'styles',\n 'console',\n 'components',\n 'unwrapLibraryComponent',\n 'unwrapLibraryComponents',\n 'unwrapAllLibraryComponents',\n `${transpiledCode}; return createComponent;`\n );\n\n // Return a function that executes the factory with runtime context\n return (context: RuntimeContext, styles: any = {}, components: Record<string, any> = {}) => {\n const { React, ReactDOM, libraries = {} } = context;\n\n // Diagnostic: Check if React is null when creating component\n if (!React) {\n console.error('🔴 CRITICAL: React is NULL in createComponentFactory!');\n console.error('Context provided:', context);\n console.error('Context keys:', Object.keys(context));\n throw new Error('React is null in runtime context when creating component factory');\n }\n\n // Additional diagnostic for React hooks\n if (!React.useState || !React.useEffect) {\n console.error('🔴 CRITICAL: React hooks are missing!');\n console.error('React object keys:', React ? Object.keys(React) : 'React is null');\n console.error('useState:', typeof React?.useState);\n console.error('useEffect:', typeof React?.useEffect);\n }\n\n // Merge loaded libraries with context libraries\n // IMPORTANT: Only include libraries that are NOT dependency-only\n // We need to filter based on the libraries array from options\n const mergedLibraries = { ...libraries };\n\n // Only add libraries that are explicitly requested in the component\n // This prevents dependency-only libraries from being accessible\n const specLibraryNames = new Set((options.libraries || []).map((lib: any) => lib.globalVariable).filter(Boolean));\n\n loadedLibraries.forEach((value, key) => {\n // Only add if this library is in the spec (not just a dependency)\n if (specLibraryNames.has(key)) {\n mergedLibraries[key] = value;\n } else if (this.config.debug) {\n console.log(`⚠️ Filtering out dependency-only library: ${key}`);\n }\n });\n\n // Create bound versions of unwrap functions with debug flag\n const boundUnwrapLibraryComponent = (lib: any, name: string) => unwrapLibraryComponent(lib, name, this.config.debug);\n const boundUnwrapLibraryComponents = (lib: any, ...names: string[]) =>\n unwrapLibraryComponents(lib, ...names, this.config.debug as any);\n const boundUnwrapAllLibraryComponents = (lib: any) => unwrapAllLibraryComponents(lib, this.config.debug);\n\n // Execute the factory creator to get the createComponent function\n let createComponentFn;\n try {\n createComponentFn = factoryCreator(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components,\n boundUnwrapLibraryComponent,\n boundUnwrapLibraryComponents,\n boundUnwrapAllLibraryComponents\n );\n } catch (error: any) {\n console.error('🔴 CRITICAL: Error calling factoryCreator with React hooks!');\n console.error('Error:', error?.message || error);\n console.error('React is:', React);\n console.error('React type:', typeof React);\n if (React) {\n console.error('React.useState:', typeof React.useState);\n console.error('React.useEffect:', typeof React.useEffect);\n }\n throw new Error(`Failed to create component factory: ${error?.message || error}`);\n }\n\n // Call createComponent to get the actual component\n const Component = createComponentFn(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components,\n boundUnwrapLibraryComponent,\n boundUnwrapLibraryComponents,\n boundUnwrapAllLibraryComponents\n );\n\n // Return the component directly\n return Component;\n };\n } catch (error: any) {\n throw new Error(`Failed to create component factory: ${error.message}`);\n }\n }\n\n /**\n * Validates compilation options\n * @param options - Options to validate\n * @throws Error if validation fails\n */\n private validateCompileOptions(options: CompileOptions): void {\n // Check if options object exists\n if (!options) {\n throw new Error(\n 'Component compilation failed: No options provided.\\n' +\n 'Expected an object with componentName and componentCode properties.\\n' +\n 'Example: { componentName: \"MyComponent\", componentCode: \"function MyComponent() { ... }\" }'\n );\n }\n\n // Check component name\n if (!options.componentName) {\n const providedKeys = Object.keys(options).join(', ');\n throw new Error(\n 'Component compilation failed: Component name is required.\\n' +\n `Received options with keys: [${providedKeys}]\\n` +\n 'Please ensure your component spec includes a \"name\" property.\\n' +\n 'Example: { name: \"MyComponent\", code: \"...\" }'\n );\n }\n\n // Check component code\n if (!options.componentCode) {\n throw new Error(\n `Component compilation failed: Component code is required for \"${options.componentName}\".\\n` +\n 'Please ensure your component spec includes a \"code\" property with the component source code.\\n' +\n 'Example: { name: \"MyComponent\", code: \"function MyComponent() { return <div>Hello</div>; }\" }'\n );\n }\n\n // Check code type\n if (typeof options.componentCode !== 'string') {\n const actualType = typeof options.componentCode;\n throw new Error(\n `Component compilation failed: Component code must be a string for \"${options.componentName}\".\\n` +\n `Received type: ${actualType}\\n` +\n `Received value: ${JSON.stringify(options.componentCode).substring(0, 100)}...\\n` +\n 'Please ensure the code property contains a string of JavaScript/JSX code.'\n );\n }\n\n // Check if code is empty or whitespace only\n if (options.componentCode.trim().length === 0) {\n throw new Error(\n `Component compilation failed: Component code is empty for \"${options.componentName}\".\\n` +\n 'The code property must contain valid JavaScript/JSX code defining a React component.'\n );\n }\n\n // Basic syntax check\n if (!options.componentCode.includes(options.componentName)) {\n throw new Error(\n `Component compilation failed: Component code must define a component named \"${options.componentName}\".\\n` +\n 'The function/component name in the code must match the componentName property.\\n' +\n `Expected to find: function ${options.componentName}(...) or const ${options.componentName} = ...\\n` +\n 'Code preview: ' +\n options.componentCode.substring(0, 200) +\n '...'\n );\n }\n }\n\n /**\n * Generates a unique component ID\n * @param componentName - Name of the component\n * @returns Unique component ID\n */\n private generateComponentId(componentName: string): string {\n return `${componentName}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Gets a cached component if available\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cached component or undefined\n */\n private getCachedComponent(componentName: string, code: string): CompiledComponent | undefined {\n // Create cache key based on name AND content hash\n const cacheKey = this.createCacheKey(componentName, code);\n return this.compilationCache.get(cacheKey);\n }\n\n /**\n * Creates a cache key based on component name and code content\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cache key\n */\n private createCacheKey(componentName: string, code: string): string {\n // Simple hash function for code content\n let hash = 0;\n for (let i = 0; i < code.length; i++) {\n const char = code.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return `${componentName}_${hash.toString(36)}`;\n }\n\n /**\n * Caches a compiled component\n * @param component - Component to cache\n * @param code - Original source code\n */\n private cacheComponent(component: CompiledComponent, code: string): void {\n // Enforce cache size limit\n if (this.compilationCache.size >= this.config.maxCacheSize) {\n // Remove oldest entry (first in map)\n const firstKey = this.compilationCache.keys().next().value;\n if (firstKey) this.compilationCache.delete(firstKey);\n }\n\n const cacheKey = this.createCacheKey(component.name, code);\n this.compilationCache.set(cacheKey, component);\n }\n\n /**\n * Creates a standardized compilation error\n * @param error - Original error\n * @param componentName - Name of the component\n * @returns Formatted component error\n */\n private createCompilationError(error: any, componentName: string): ComponentError {\n return {\n message: error.message || 'Unknown compilation error',\n stack: error.stack,\n componentName,\n phase: 'compilation',\n details: error,\n };\n }\n\n /**\n * Clears the compilation cache\n */\n clearCache(): void {\n this.compilationCache.clear();\n }\n\n /**\n * Gets current cache size\n * @returns Number of cached components\n */\n getCacheSize(): number {\n return this.compilationCache.size;\n }\n\n /**\n * Updates compiler configuration\n * @param config - New configuration options\n */\n updateConfig(config: Partial<CompilerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}\n"]}
1
+ {"version":3,"file":"component-compiler.js","sourceRoot":"","sources":["../../src/compiler/component-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Platform-agnostic React component compiler.\n * Compiles React component source code into executable components using Babel.\n * @module @memberjunction/react-runtime/compiler\n */\n\nimport { UserInfo } from '@memberjunction/core';\nimport { \n CompileOptions, \n CompiledComponent, \n CompilationResult,\n CompilerConfig,\n ComponentError,\n RuntimeContext\n} from '../types';\nimport { ComponentStyles, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { LibraryRegistry } from '../utilities/library-registry';\nimport { LibraryLoader } from '../utilities/library-loader';\nimport { unwrapLibraryComponent, unwrapLibraryComponents, unwrapAllLibraryComponents } from '../utilities/component-unwrapper';\nimport { ComponentLibraryEntity } from '@memberjunction/core-entities';\n\n/**\n * Default compiler configuration\n */\nconst DEFAULT_COMPILER_CONFIG: CompilerConfig = {\n babel: {\n presets: ['react'],\n plugins: []\n },\n minify: false,\n sourceMaps: false,\n cache: true,\n maxCacheSize: 100,\n debug: false\n};\n\n/**\n * Platform-agnostic React component compiler.\n * Transforms JSX/React component source code into executable JavaScript.\n */\nexport class ComponentCompiler {\n private config: CompilerConfig;\n private compilationCache: Map<string, CompiledComponent>;\n private cacheAccessOrder: string[]; // Track access order for LRU\n private babelInstance: any;\n\n /**\n * Creates a new ComponentCompiler instance\n * @param config - Optional compiler configuration\n */\n constructor(config?: Partial<CompilerConfig>) {\n this.config = { ...DEFAULT_COMPILER_CONFIG, ...config };\n this.compilationCache = new Map();\n }\n\n /**\n * Sets the Babel instance to use for compilation\n * @param babel - The Babel standalone instance\n */\n setBabelInstance(babel: any): void {\n this.babelInstance = babel;\n }\n\n /**\n * Compiles a React component from source code\n * @param options - Compilation options\n * @returns Promise resolving to compilation result\n */\n async compile(options: CompileOptions): Promise<CompilationResult> {\n const startTime = Date.now();\n\n try {\n // Check cache first if enabled\n if (this.config.cache) {\n const cached = this.getCachedComponent(options.componentName, options.componentCode);\n if (cached) {\n return {\n success: true,\n component: cached,\n duration: Date.now() - startTime\n };\n }\n }\n\n // Validate inputs\n this.validateCompileOptions(options);\n\n // Load required libraries if specified\n const loadedLibraries = await this.loadRequiredLibraries(options.libraries!, options.allLibraries);\n\n // Transpile the component code\n const transpiledCode = this.transpileComponent(\n options.componentCode,\n options.componentName,\n options\n );\n\n // Create the component factory with loaded libraries\n const componentFactory = this.createComponentFactory(\n transpiledCode,\n options.componentName,\n loadedLibraries,\n options\n );\n\n // Build the compiled component\n const compiledComponent: CompiledComponent = {\n factory: componentFactory,\n id: this.generateComponentId(options.componentName),\n name: options.componentName,\n compiledAt: new Date(),\n warnings: []\n };\n\n // Cache if enabled\n if (this.config.cache) {\n this.cacheComponent(compiledComponent, options.componentCode);\n }\n\n return {\n success: true,\n component: compiledComponent,\n duration: Date.now() - startTime,\n size: transpiledCode.length,\n loadedLibraries: loadedLibraries\n };\n\n } catch (error) {\n return {\n success: false,\n error: this.createCompilationError(error, options.componentName),\n duration: Date.now() - startTime\n };\n }\n }\n\n /**\n * Transpiles JSX/React code to JavaScript\n * @param code - Source code to transpile\n * @param componentName - Name of the component\n * @param options - Compilation options\n * @returns Transpiled JavaScript code\n */\n private transpileComponent(\n code: string,\n componentName: string,\n options: CompileOptions\n ): string {\n if (!this.babelInstance) {\n throw new Error('Babel instance not set. Call setBabelInstance() first.');\n }\n\n const wrappedCode = this.wrapComponentCode(code, componentName, options.libraries, options.dependencies);\n\n try {\n const result = this.babelInstance.transform(wrappedCode, {\n presets: options.babelPresets || this.config.babel.presets,\n plugins: options.babelPlugins || this.config.babel.plugins,\n filename: `${componentName}.jsx`,\n sourceMaps: this.config.sourceMaps,\n minified: this.config.minify\n });\n\n return result.code;\n } catch (error: any) {\n throw new Error(`Transpilation failed: ${error.message}`);\n }\n }\n\n /**\n * Wraps component code in a factory function for execution\n * @param componentCode - Raw component code\n * @param componentName - Name of the component\n * @param libraries - Optional library dependencies\n * @param dependencies - Optional child component dependencies\n * @returns Wrapped component code\n */\n // Core libraries that are passed as parameters to createComponent and should not be destructured\n private readonly CORE_LIBRARIES = new Set(['React', 'ReactDOM']);\n\n private wrapComponentCode(componentCode: string, componentName: string, libraries?: any[], dependencies?: Array<{ name: string }>): string {\n const debug = this.config.debug;\n // Generate library declarations if libraries are provided\n // Skip core libraries as they're passed as parameters to createComponent\n const libraryDeclarations = libraries && libraries.length > 0\n ? libraries\n .filter(lib => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable)) // Skip core libraries\n .map(lib => `const ${lib.globalVariable} = libraries['${lib.globalVariable}'];`)\n .join('\\n ')\n : '';\n const libraryLogChecks = libraries && libraries.length > 0 \n ? libraries\n .filter(lib => lib.globalVariable && !this.CORE_LIBRARIES.has(lib.globalVariable)) // Skip core libraries\n .map(lib => `\\nif (!${lib.globalVariable}) { console.error('[React-Runtime-JS] Library \"${lib.globalVariable}\" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Library \"${lib.globalVariable}\" is defined');` : ''} }`)\n .join('\\n ')\n : '';\n\n // Generate component declarations if dependencies are provided\n // Filter out the component being compiled to avoid naming conflicts\n // Also detect and warn about duplicates\n const seenDependencies = new Set<string>();\n const uniqueDependencies: Array<{ name: string; code?: string }> = [];\n const duplicates: string[] = [];\n \n if (dependencies && dependencies.length > 0) {\n for (const dep of dependencies) {\n if (dep.name === componentName) {\n // Skip the component being compiled itself\n continue;\n }\n if (seenDependencies.has(dep.name)) {\n duplicates.push(dep.name);\n } else {\n seenDependencies.add(dep.name);\n uniqueDependencies.push(dep);\n }\n }\n }\n \n // Generate warning for duplicates\n const duplicateWarnings = duplicates.length > 0\n ? duplicates\n .map(name => `console.warn('[React-Runtime-JS] WARNING: Component \"${name}\" is registered multiple times as a dependency. Using first occurrence only.');`)\n .join('\\n ')\n : '';\n \n const componentDeclarations = uniqueDependencies.length > 0\n ? uniqueDependencies\n .map(dep => `const ${dep.name}Raw = componentsOuter['${dep.name}'];\n ${debug ? `console.log('[React-Runtime-JS] Extracting ${dep.name}:');\n console.log(' - Raw value type:', typeof ${dep.name}Raw);\n console.log(' - Raw value:', ${dep.name}Raw);\n if (${dep.name}Raw && typeof ${dep.name}Raw === 'object') {\n console.log(' - Has .component property:', 'component' in ${dep.name}Raw);\n console.log(' - .component type:', typeof ${dep.name}Raw.component);\n }` : ''}\n const ${dep.name} = ${dep.name}Raw?.component || ${dep.name}Raw;\n ${debug ? `console.log(' - Final ${dep.name} type:', typeof ${dep.name});\n console.log(' - Final ${dep.name} is function:', typeof ${dep.name} === 'function');` : ''}`)\n .join('\\n ')\n : '';\n \n const componentLogChecks = uniqueDependencies.length > 0\n ? uniqueDependencies\n .map(dep => `if (!${dep.name}) { console.error('[React-Runtime-JS] Dependency \"${dep.name}\" is not defined'); } else { ${debug ? `console.log('[React-Runtime-JS] Dependency \"${dep.name}\" is defined');` : ''} }`)\n .join('\\n ')\n : '';\n \n\n const wrappedCode = `\n function createComponent(\n React, ReactDOM, \n useState, useEffect, useCallback, useMemo, useRef, useContext, useReducer, useLayoutEffect,\n libraries, styles, console, components,\n unwrapLibraryComponent, unwrapLibraryComponents, unwrapAllLibraryComponents\n ) {\n if (!React)\n console.log('[React-Runtime-JS] React is not defined');\n if (!ReactDOM)\n console.log('[React-Runtime-JS] ReactDOM is not defined');\n\n // Make unwrap functions available with legacy names for backward compatibility\n const unwrapComponent = unwrapLibraryComponent;\n const unwrapComponents = unwrapLibraryComponents;\n const unwrapAllComponents = unwrapAllLibraryComponents;\n \n // Code for ${componentName}\n ${componentCode}\n \n // Ensure the component exists\n if (typeof ${componentName} === 'undefined') {\n throw new Error('Component \"${componentName}\" is not defined in the provided code');\n }\n else {\n ${debug ? `console.log('[React-Runtime-JS] Component \"${componentName}\" is defined');` : ''}\n }\n \n // Store the component in a variable so we don't lose it\n const UserComponent = ${componentName};\n\n // Check if the component is already a ComponentObject (has a .component property)\n // If so, extract the actual React component\n const ActualComponent = (typeof UserComponent === 'object' && UserComponent !== null && 'component' in UserComponent)\n ? UserComponent.component\n : UserComponent;\n \n // Debug logging to understand what we're getting\n ${debug ? `\n console.log('[React-Runtime-JS]Component ${componentName} type:', typeof UserComponent);\n if (typeof UserComponent === 'object' && UserComponent !== null) {\n console.log('[React-Runtime-JS]Component ${componentName} keys:', Object.keys(UserComponent));\n console.log('[React-Runtime-JS]Component ${componentName} has .component:', 'component' in UserComponent);\n if ('component' in UserComponent) {\n console.log('[React-Runtime-JS]Component ${componentName}.component type:', typeof UserComponent.component);\n }\n }` : ''}\n \n // Validate that we have a function (React component)\n if (typeof ActualComponent !== 'function') {\n console.error('[React-Runtime-JS] Invalid component type for ${componentName}:', typeof ActualComponent);\n console.error('[React-Runtime-JS] ActualComponent value:', ActualComponent);\n console.error('[React-Runtime-JS] Original UserComponent value:', UserComponent);\n throw new Error('[React-Runtime-JS] Component \"${componentName}\" must be a function (React component) or an object with a .component property that is a function. Got: ' + typeof ActualComponent);\n }\n\n let componentsOuter = null, utilitiesOuter = null;\n const DestructureWrapperUserComponent = (props) => {\n if (!componentsOuter) {\n componentsOuter = props?.components || components;\n }\n if (!utilitiesOuter) {\n utilitiesOuter = props?.utilities;\n }\n ${debug ? `\n console.log('[React-Runtime-JS] DestructureWrapperUserComponent for ${componentName}:');\n console.log(' - Props:', props);\n console.log(' - componentsOuter type:', typeof componentsOuter);\n console.log(' - componentsOuter:', componentsOuter);\n if (componentsOuter && typeof componentsOuter === 'object') {\n console.log(' - componentsOuter keys:', Object.keys(componentsOuter));\n for (const key of Object.keys(componentsOuter)) {\n const comp = componentsOuter[key];\n console.log(\\` - componentsOuter[\\${key}] type:\\`, typeof comp);\n if (comp && typeof comp === 'object') {\n console.log(\\` - Has .component: \\${'component' in comp}\\`);\n console.log(\\` - .component type: \\${typeof comp.component}\\`);\n }\n }\n }\n console.log(' - styles:', styles);\n console.log(' - utilities:', utilitiesOuter);\n console.log(' - libraries:', libraries);` : ''}\n ${duplicateWarnings ? '// Duplicate dependency warnings\\n ' + duplicateWarnings + '\\n ' : ''}\n ${libraryDeclarations ? '// Destructure Libraries\\n' + libraryDeclarations + '\\n ' : ''}\n ${componentDeclarations ? '// Destructure Dependencies\\n' + componentDeclarations + '\\n ' : ''}\n ${libraryLogChecks}\n ${componentLogChecks} \n\n const newProps = {\n ...props,\n components: componentsOuter,\n utilities: utilitiesOuter \n }\n return ActualComponent(newProps);\n };\n \n // Create a fresh method registry for each factory call\n const methodRegistry = new Map();\n \n // Create a wrapper component that provides RegisterMethod in callbacks\n const ComponentWithMethodRegistry = (props) => {\n // Register methods on mount\n React.useEffect(() => {\n // Clear previous methods\n methodRegistry.clear();\n \n // Provide RegisterMethod callback if callbacks exist\n if (props.callbacks && typeof props.callbacks.RegisterMethod === 'function') {\n // Component can now register its methods\n // This will be called from within the component\n }\n }, [props.callbacks]);\n \n // Create enhanced callbacks with RegisterMethod\n const enhancedCallbacks = React.useMemo(() => {\n if (!props.callbacks) return {};\n \n return {\n ...props.callbacks,\n RegisterMethod: (methodName, handler) => {\n if (methodName && handler) {\n methodRegistry.set(methodName, handler);\n }\n }\n };\n }, [props.callbacks]);\n \n // Render the original component with enhanced callbacks\n return React.createElement(DestructureWrapperUserComponent, {\n ...props,\n callbacks: enhancedCallbacks\n });\n };\n \n ComponentWithMethodRegistry.displayName = '${componentName}WithMethods';\n \n // Return the component object with method access\n return {\n component: ComponentWithMethodRegistry,\n \n print: function() { \n const printMethod = methodRegistry.get('print');\n if (printMethod) {\n printMethod();\n } else if (typeof window !== 'undefined' && window.print) {\n window.print(); \n }\n },\n refresh: function(data) { \n const refreshMethod = methodRegistry.get('refresh');\n if (refreshMethod) {\n refreshMethod(data);\n }\n // Refresh functionality is handled by the host environment\n },\n \n // Standard method accessors with type safety\n getCurrentDataState: function() {\n const method = methodRegistry.get('getCurrentDataState');\n return method ? method() : undefined;\n },\n getDataStateHistory: function() {\n const method = methodRegistry.get('getDataStateHistory');\n return method ? method() : [];\n },\n validate: function() {\n const method = methodRegistry.get('validate');\n return method ? method() : true;\n },\n isDirty: function() {\n const method = methodRegistry.get('isDirty');\n return method ? method() : false;\n },\n reset: function() {\n const method = methodRegistry.get('reset');\n if (method) method();\n },\n scrollTo: function(target) {\n const method = methodRegistry.get('scrollTo');\n if (method) method(target);\n },\n focus: function(target) {\n const method = methodRegistry.get('focus');\n if (method) method(target);\n },\n \n // Generic method invoker for custom methods\n invokeMethod: function(methodName, ...args) {\n const method = methodRegistry.get(methodName);\n if (method) {\n return method(...args);\n }\n console.warn(\\`[React-Runtime-JS] Method '\\${methodName}' is not registered on component ${componentName}\\`);\n return undefined;\n },\n \n // Check if a method exists\n hasMethod: function(methodName) {\n return methodRegistry.has(methodName);\n }\n };\n }\n `;\n\n return wrappedCode;\n }\n\n /**\n * Load required libraries from the registry with dependency resolution\n * @param libraries - Array of library dependencies\n * @param componentLibraries - All available component libraries for dependency resolution\n * @returns Map of loaded libraries\n */\n private async loadRequiredLibraries(libraries: any[], componentLibraries: ComponentLibraryEntity[]): Promise<Map<string, any>> {\n const loadedLibraries = new Map<string, any>();\n \n if (this.config.debug) {\n console.log('🔍 loadRequiredLibraries called with:', {\n librariesCount: libraries?.length || 0,\n libraries: libraries?.map(l => ({ name: l.name, version: l.version, globalVariable: l.globalVariable }))\n });\n }\n \n if (!libraries || libraries.length === 0) {\n if (this.config.debug) {\n console.log('📚 No libraries to load, returning empty map');\n }\n return loadedLibraries;\n }\n\n // Only works in browser environment\n if (typeof window === 'undefined') {\n console.warn('Library loading is only supported in browser environments');\n return loadedLibraries;\n }\n\n // Initialize LibraryRegistry with componentLibraries if provided\n if (componentLibraries) {\n await LibraryRegistry.Config(false, componentLibraries);\n } else {\n console.warn('⚠️ No componentLibraries provided for LibraryRegistry initialization');\n }\n\n // Filter out React, ReactDOM, and invalid library entries\n const filteredLibraries = libraries.filter(lib => {\n // Check if library object is valid\n if (!lib || typeof lib !== 'object' || !lib.name) {\n console.warn(`⚠️ Invalid library entry detected (missing name):`, lib);\n return false;\n }\n \n // Filter out entries with 'unknown' name or missing globalVariable\n if (lib.name === 'unknown' || lib.name === 'null' || lib.name === 'undefined') {\n console.warn(`⚠️ Filtering out invalid library with name '${lib.name}':`, lib);\n return false;\n }\n \n // Check for missing or invalid globalVariable\n if (!lib.globalVariable || lib.globalVariable === 'undefined' || lib.globalVariable === 'null') {\n console.warn(`⚠️ Filtering out library '${lib.name}' with invalid globalVariable:`, lib.globalVariable);\n return false;\n }\n \n const libNameLower = lib.name.toLowerCase();\n if (libNameLower === 'react' || libNameLower === 'reactdom') {\n console.warn(`⚠️ Library '${lib.name}' is automatically loaded by the React runtime and should not be requested separately`);\n return false;\n }\n return true;\n });\n \n // Extract library names from the filtered libraries (with extra safety)\n const libraryNames = filteredLibraries\n .map(lib => lib.name)\n .filter(name => name && typeof name === 'string');\n \n if (this.config.debug) {\n console.log('📦 Using dependency-aware loading for libraries:', libraryNames);\n }\n \n // If all libraries were filtered out, return empty map\n if (filteredLibraries.length === 0) {\n if (this.config.debug) {\n console.log('📚 All requested libraries were filtered out (React/ReactDOM), returning empty map');\n }\n return loadedLibraries;\n }\n\n try {\n // Use the new dependency-aware loading\n const loadedLibraryMap = await LibraryLoader.loadLibrariesWithDependencies(\n libraryNames,\n componentLibraries,\n 'component-compiler',\n { debug: this.config.debug }\n );\n\n // Map the results to match the expected format\n // We need to map from library name to global variable\n for (const lib of filteredLibraries) {\n // Check if library is approved first\n const isApproved = LibraryRegistry.isApproved(lib.name);\n if (!isApproved) {\n console.error(`❌ Library '${lib.name}' is not approved`);\n throw new Error(`Library '${lib.name}' is not approved. Only approved libraries can be used.`);\n }\n\n // Get the loaded library from the map\n const loadedValue = loadedLibraryMap.get(lib.name);\n \n if (loadedValue) {\n // Store by global variable name for component access\n loadedLibraries.set(lib.globalVariable, loadedValue);\n if (this.config.debug) {\n console.log(`✅ Mapped ${lib.name} to global variable ${lib.globalVariable}`);\n }\n } else {\n // Fallback: check if it's already globally available (might be a dependency)\n const globalValue = (window as any)[lib.globalVariable];\n if (globalValue) {\n loadedLibraries.set(lib.globalVariable, globalValue);\n if (this.config.debug) {\n console.log(`✅ Found ${lib.name} already loaded as ${lib.globalVariable}`);\n }\n } else {\n console.error(`❌ Library '${lib.name}' failed to load`);\n throw new Error(`Library '${lib.name}' failed to load or did not expose '${lib.globalVariable}'`);\n }\n }\n }\n } catch (error: any) {\n console.error('Failed to load libraries with dependencies:', error);\n \n // Fallback to old loading method if dependency resolution fails\n if (this.config.debug) {\n console.warn('⚠️ Falling back to non-dependency-aware loading due to error');\n }\n \n // Load each library independently (old method)\n for (const lib of libraries) {\n if ((window as any)[lib.globalVariable]) {\n loadedLibraries.set(lib.globalVariable, (window as any)[lib.globalVariable]);\n } else {\n // Try to load using LibraryRegistry\n const libraryDef = LibraryRegistry.getLibrary(lib.name);\n if (libraryDef) {\n const resolvedVersion = LibraryRegistry.resolveVersion(lib.name, lib.version);\n const cdnUrl = LibraryRegistry.getCdnUrl(lib.name, resolvedVersion);\n \n if (cdnUrl) {\n await this.loadScript(cdnUrl, lib.globalVariable);\n const libraryValue = (window as any)[lib.globalVariable];\n if (libraryValue) {\n loadedLibraries.set(lib.globalVariable, libraryValue);\n }\n }\n }\n }\n }\n }\n \n if (this.config.debug) {\n console.log(`✅ All libraries loaded successfully. Total: ${loadedLibraries.size}`);\n console.log('📚 Loaded libraries map:', Array.from(loadedLibraries.keys()));\n }\n \n return loadedLibraries;\n }\n\n /**\n * Load CSS stylesheets dynamically\n * @param urls - Array of CSS URLs to load\n * @returns Promise that resolves when all stylesheets are loaded\n */\n private async loadStyles(urls: string[]): Promise<void> {\n const loadPromises = urls.map(url => {\n return new Promise<void>((resolve) => {\n // Check if stylesheet already exists\n const existingLink = document.querySelector(`link[href=\"${url}\"]`);\n if (existingLink) {\n resolve();\n return;\n }\n\n // Create new link element\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n \n // CSS load events are not reliable cross-browser, so resolve immediately\n // The CSS will load asynchronously but won't block component rendering\n document.head.appendChild(link);\n resolve();\n });\n });\n\n await Promise.all(loadPromises);\n }\n\n /**\n * Load a script dynamically\n * @param url - Script URL\n * @param globalName - Expected global variable name\n * @returns Promise that resolves when script is loaded\n */\n private loadScript(url: string, globalName: string): Promise<void> {\n return new Promise((resolve, reject) => {\n // Check if script already exists\n const existingScript = document.querySelector(`script[src=\"${url}\"]`);\n if (existingScript) {\n // Wait for it to finish loading with exponential backoff\n let attempts = 0;\n const maxAttempts = 50; // 5 seconds total with 100ms intervals\n const checkLoaded = () => {\n if ((window as any)[globalName]) {\n resolve();\n } else if (attempts >= maxAttempts) {\n reject(new Error(`${globalName} not found after ${maxAttempts * 100}ms waiting for existing script`));\n } else {\n attempts++;\n setTimeout(checkLoaded, 100);\n }\n };\n checkLoaded();\n return;\n }\n\n // Create new script element\n const script = document.createElement('script');\n script.src = url;\n script.async = true;\n \n script.onload = () => {\n // More robust checking with multiple attempts\n let attempts = 0;\n const maxAttempts = 20; // 2 seconds total\n const checkInterval = 100; // Check every 100ms\n \n const checkGlobal = () => {\n if ((window as any)[globalName]) {\n if (this.config.debug) {\n console.log(` ✓ Global variable ${globalName} found after ${attempts * checkInterval}ms`);\n }\n resolve();\n } else if (attempts >= maxAttempts) {\n // Final check - some libraries might use a different global name pattern\n if (this.config.debug) {\n console.error(` ❌ ${globalName} not found after ${attempts * checkInterval}ms`);\n // Only log matching property names, not the entire window object\n const matchingKeys = Object.keys(window).filter(k => k.toLowerCase().includes(globalName.toLowerCase()));\n console.log(` ℹ️ Matching window properties: ${matchingKeys.join(', ') || 'none'}`);\n }\n reject(new Error(`${globalName} not found after loading script from ${url}`));\n } else {\n attempts++;\n setTimeout(checkGlobal, checkInterval);\n }\n };\n \n // Start checking immediately (don't wait 100ms first)\n checkGlobal();\n };\n \n script.onerror = () => {\n reject(new Error(`Failed to load script: ${url}`));\n };\n \n document.head.appendChild(script);\n });\n }\n\n /**\n * Creates a component factory function from transpiled code\n * @param transpiledCode - Transpiled JavaScript code\n * @param componentName - Name of the component\n * @param loadedLibraries - Map of loaded libraries\n * @param options - Compile options containing spec and other metadata\n * @returns Component factory function\n */\n private createComponentFactory(\n transpiledCode: string, \n componentName: string,\n loadedLibraries: Map<string, any>,\n options: CompileOptions\n ): (context: RuntimeContext, styles?: ComponentStyles) => ComponentObject {\n try {\n // Create the factory function with all React hooks and utility functions\n const factoryCreator = new Function(\n 'React', 'ReactDOM',\n 'useState', 'useEffect', 'useCallback', 'useMemo', 'useRef', 'useContext', 'useReducer', 'useLayoutEffect',\n 'libraries', 'styles', 'console', 'components',\n 'unwrapLibraryComponent', 'unwrapLibraryComponents', 'unwrapAllLibraryComponents',\n `${transpiledCode}; return createComponent;`\n );\n\n // Return a function that executes the factory with runtime context\n return (context: RuntimeContext, styles: any = {}, components: Record<string, any> = {}) => {\n const { React, ReactDOM, libraries = {} } = context;\n \n // Diagnostic: Check if React is null when creating component\n if (!React) {\n console.error('🔴 CRITICAL: React is NULL in createComponentFactory!');\n console.error('Context provided:', context);\n console.error('Context keys:', Object.keys(context));\n throw new Error('React is null in runtime context when creating component factory');\n }\n \n // Additional diagnostic for React hooks\n if (!React.useState || !React.useEffect) {\n console.error('🔴 CRITICAL: React hooks are missing!');\n console.error('React object keys:', React ? Object.keys(React) : 'React is null');\n console.error('useState:', typeof React?.useState);\n console.error('useEffect:', typeof React?.useEffect);\n }\n \n // Merge loaded libraries with context libraries\n // IMPORTANT: Only include libraries that are NOT dependency-only\n // We need to filter based on the libraries array from options\n const mergedLibraries = { ...libraries };\n \n // Only add libraries that are explicitly requested in the component\n // This prevents dependency-only libraries from being accessible\n const specLibraryNames = new Set(\n (options.libraries || []).map((lib: any) => lib.globalVariable).filter(Boolean)\n );\n \n loadedLibraries.forEach((value, key) => {\n // Only add if this library is in the spec (not just a dependency)\n if (specLibraryNames.has(key)) {\n mergedLibraries[key] = value;\n } else if (this.config.debug) {\n console.log(`⚠️ Filtering out dependency-only library: ${key}`);\n }\n });\n\n // Create bound versions of unwrap functions with debug flag\n const boundUnwrapLibraryComponent = (lib: any, name: string) => unwrapLibraryComponent(lib, name, this.config.debug);\n const boundUnwrapLibraryComponents = (lib: any, ...names: string[]) => unwrapLibraryComponents(lib, ...names, this.config.debug as any);\n const boundUnwrapAllLibraryComponents = (lib: any) => unwrapAllLibraryComponents(lib, this.config.debug);\n\n // Execute the factory creator to get the createComponent function\n let createComponentFn;\n try {\n createComponentFn = factoryCreator(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components,\n boundUnwrapLibraryComponent,\n boundUnwrapLibraryComponents,\n boundUnwrapAllLibraryComponents\n );\n } catch (error: any) {\n console.error('🔴 CRITICAL: Error calling factoryCreator with React hooks!');\n console.error('Error:', error?.message || error);\n console.error('React is:', React);\n console.error('React type:', typeof React);\n if (React) {\n console.error('React.useState:', typeof React.useState);\n console.error('React.useEffect:', typeof React.useEffect);\n }\n throw new Error(`Failed to create component factory: ${error?.message || error}`);\n }\n\n // Call createComponent to get the actual component\n const Component = createComponentFn(\n React,\n ReactDOM,\n React.useState,\n React.useEffect,\n React.useCallback,\n React.useMemo,\n React.useRef,\n React.useContext,\n React.useReducer,\n React.useLayoutEffect,\n mergedLibraries,\n styles,\n console,\n components,\n boundUnwrapLibraryComponent,\n boundUnwrapLibraryComponents,\n boundUnwrapAllLibraryComponents\n );\n\n // Return the component directly\n return Component;\n };\n } catch (error: any) {\n throw new Error(`Failed to create component factory: ${error.message}`);\n }\n }\n\n\n /**\n * Validates compilation options\n * @param options - Options to validate\n * @throws Error if validation fails\n */\n private validateCompileOptions(options: CompileOptions): void {\n // Check if options object exists\n if (!options) {\n throw new Error(\n 'Component compilation failed: No options provided.\\n' +\n 'Expected an object with componentName and componentCode properties.\\n' +\n 'Example: { componentName: \"MyComponent\", componentCode: \"function MyComponent() { ... }\" }'\n );\n }\n\n // Check component name\n if (!options.componentName) {\n const providedKeys = Object.keys(options).join(', ');\n throw new Error(\n 'Component compilation failed: Component name is required.\\n' +\n `Received options with keys: [${providedKeys}]\\n` +\n 'Please ensure your component spec includes a \"name\" property.\\n' +\n 'Example: { name: \"MyComponent\", code: \"...\" }'\n );\n }\n\n // Check component code\n if (!options.componentCode) {\n throw new Error(\n `Component compilation failed: Component code is required for \"${options.componentName}\".\\n` +\n 'Please ensure your component spec includes a \"code\" property with the component source code.\\n' +\n 'Example: { name: \"MyComponent\", code: \"function MyComponent() { return <div>Hello</div>; }\" }'\n );\n }\n\n // Check code type\n if (typeof options.componentCode !== 'string') {\n const actualType = typeof options.componentCode;\n throw new Error(\n `Component compilation failed: Component code must be a string for \"${options.componentName}\".\\n` +\n `Received type: ${actualType}\\n` +\n `Received value: ${JSON.stringify(options.componentCode).substring(0, 100)}...\\n` +\n 'Please ensure the code property contains a string of JavaScript/JSX code.'\n );\n }\n\n // Check if code is empty or whitespace only\n if (options.componentCode.trim().length === 0) {\n throw new Error(\n `Component compilation failed: Component code is empty for \"${options.componentName}\".\\n` +\n 'The code property must contain valid JavaScript/JSX code defining a React component.'\n );\n }\n\n // Basic syntax check\n if (!options.componentCode.includes(options.componentName)) {\n throw new Error(\n `Component compilation failed: Component code must define a component named \"${options.componentName}\".\\n` +\n 'The function/component name in the code must match the componentName property.\\n' +\n `Expected to find: function ${options.componentName}(...) or const ${options.componentName} = ...\\n` +\n 'Code preview: ' + options.componentCode.substring(0, 200) + '...'\n );\n }\n }\n\n /**\n * Generates a unique component ID\n * @param componentName - Name of the component\n * @returns Unique component ID\n */\n private generateComponentId(componentName: string): string {\n return `${componentName}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Gets a cached component if available\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cached component or undefined\n */\n private getCachedComponent(componentName: string, code: string): CompiledComponent | undefined {\n // Create cache key based on name AND content hash\n const cacheKey = this.createCacheKey(componentName, code);\n return this.compilationCache.get(cacheKey);\n }\n\n /**\n * Creates a cache key based on component name and code content\n * @param componentName - Name of the component\n * @param code - Component source code\n * @returns Cache key\n */\n private createCacheKey(componentName: string, code: string): string {\n // Simple hash function for code content\n let hash = 0;\n for (let i = 0; i < code.length; i++) {\n const char = code.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return `${componentName}_${hash.toString(36)}`;\n }\n\n /**\n * Caches a compiled component\n * @param component - Component to cache\n * @param code - Original source code\n */\n private cacheComponent(component: CompiledComponent, code: string): void {\n // Enforce cache size limit\n if (this.compilationCache.size >= this.config.maxCacheSize) {\n // Remove oldest entry (first in map)\n const firstKey = this.compilationCache.keys().next().value;\n if (firstKey)\n this.compilationCache.delete(firstKey);\n }\n\n const cacheKey = this.createCacheKey(component.name, code);\n this.compilationCache.set(cacheKey, component);\n }\n\n /**\n * Creates a standardized compilation error\n * @param error - Original error\n * @param componentName - Name of the component\n * @returns Formatted component error\n */\n private createCompilationError(error: any, componentName: string): ComponentError {\n return {\n message: error.message || 'Unknown compilation error',\n stack: error.stack,\n componentName,\n phase: 'compilation',\n details: error\n };\n }\n\n /**\n * Clears the compilation cache\n */\n clearCache(): void {\n this.compilationCache.clear();\n }\n\n /**\n * Gets current cache size\n * @returns Number of cached components\n */\n getCacheSize(): number {\n return this.compilationCache.size;\n }\n\n /**\n * Updates compiler configuration\n * @param config - New configuration options\n */\n updateConfig(config: Partial<CompilerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"component-manager.d.ts","sourceRoot":"","sources":["../../src/component-manager/component-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAA8B,MAAM,6CAA6C,CAAC;AAIxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAmB,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,sBAAsB,EAA8B,MAAM,SAAS,CAAC;AAMvH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAyB;IAGvC,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,eAAe,CAA+C;IAGtE,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,aAAa,CAAa;gBAGhC,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc,EAC9B,MAAM,GAAE,sBAA2B;IAyB/B,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;YAiC1E,eAAe;IA4JvB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;YAiFnF,sBAAsB;YA0EtB,uBAAuB;IAiBrC,OAAO,CAAC,UAAU;YAeJ,kBAAkB;IA6FhC,OAAO,CAAC,mBAAmB;YAsCb,gBAAgB;YA8ChB,2BAA2B;YA+B3B,uBAAuB;IAgBrC,OAAO,CAAC,YAAY;YAQN,aAAa;IAsB3B,OAAO,CAAC,eAAe;IAUvB,UAAU,IAAI,IAAI;IAUlB,aAAa,IAAI;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;KACtB;IAWD,OAAO,CAAC,GAAG;CAKZ"}
1
+ {"version":3,"file":"component-manager.d.ts","sourceRoot":"","sources":["../../src/component-manager/component-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAA8B,MAAM,6CAA6C,CAAC;AAIxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,cAAc,EAAmB,MAAM,UAAU,CAAC;AAC3D,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,EACf,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AAMjB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAyB;IAGvC,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,eAAe,CAA+C;IAGtE,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,aAAa,CAAa;gBAGhC,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc,EAC9B,MAAM,GAAE,sBAA2B;IAyB/B,aAAa,CACjB,IAAI,EAAE,aAAa,EACnB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC;YAiCR,eAAe;IAuKvB,aAAa,CACjB,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;YAuFb,sBAAsB;YAkFtB,uBAAuB;IAoBrC,OAAO,CAAC,UAAU;YAeJ,kBAAkB;IA+FhC,OAAO,CAAC,mBAAmB;YA0Cb,gBAAgB;YAkDhB,2BAA2B;YAkC3B,uBAAuB;IAgBrC,OAAO,CAAC,YAAY;YAQN,aAAa;IAsB3B,OAAO,CAAC,eAAe;IAUvB,UAAU,IAAI,IAAI;IAUlB,aAAa,IAAI;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;KACtB;IAWD,OAAO,CAAC,GAAG;CAKZ"}
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.ComponentManager = void 0;
27
- const global_1 = require("@memberjunction/global");
27
+ const core_1 = require("@memberjunction/core");
28
28
  const core_entities_1 = require("@memberjunction/core-entities");
29
29
  class ComponentManager {
30
30
  constructor(compiler, registry, runtimeContext, config = {}) {
@@ -43,12 +43,12 @@ class ComponentManager {
43
43
  enableUsageTracking: true,
44
44
  dependencyBatchSize: 5,
45
45
  fetchTimeout: 30000,
46
- ...config,
46
+ ...config
47
47
  };
48
48
  this.log('ComponentManager initialized', {
49
49
  debug: this.config.debug,
50
50
  cacheTTL: this.config.cacheTTL,
51
- usageTracking: this.config.enableUsageTracking,
51
+ usageTracking: this.config.enableUsageTracking
52
52
  });
53
53
  }
54
54
  async loadComponent(spec, options = {}) {
@@ -58,7 +58,7 @@ class ComponentManager {
58
58
  key: componentKey,
59
59
  location: spec.location,
60
60
  registry: spec.registry,
61
- forceRefresh: options.forceRefresh,
61
+ forceRefresh: options.forceRefresh
62
62
  });
63
63
  const existingPromise = this.loadingPromises.get(componentKey);
64
64
  if (existingPromise && !options.forceRefresh) {
@@ -91,7 +91,7 @@ class ComponentManager {
91
91
  success: true,
92
92
  component: existing,
93
93
  spec: cachedEntry?.spec || spec,
94
- fromCache: true,
94
+ fromCache: true
95
95
  };
96
96
  }
97
97
  let fullSpec = spec;
@@ -99,20 +99,20 @@ class ComponentManager {
99
99
  this.log(`Fetching component spec: ${spec.name}`);
100
100
  try {
101
101
  fullSpec = await this.fetchComponentSpec(spec, options.contextUser, {
102
- resolutionMode: options.resolutionMode,
102
+ resolutionMode: options.resolutionMode
103
103
  });
104
104
  this.fetchCache.set(componentKey, {
105
105
  spec: fullSpec,
106
106
  fetchedAt: new Date(),
107
107
  hash: await this.calculateHash(fullSpec),
108
- usageNotified: false,
108
+ usageNotified: false
109
109
  });
110
110
  }
111
111
  catch (error) {
112
112
  errors.push({
113
113
  message: `Failed to fetch component: ${error instanceof Error ? error.message : String(error)}`,
114
114
  phase: 'fetch',
115
- componentName: spec.name,
115
+ componentName: spec.name
116
116
  });
117
117
  throw error;
118
118
  }
@@ -121,7 +121,7 @@ class ComponentManager {
121
121
  if (spec.location === 'registry' && spec.code) {
122
122
  this.log(`Skipping fetch for registry component: ${spec.name} (code already provided)`, {
123
123
  location: spec.location,
124
- registry: spec.registry,
124
+ registry: spec.registry
125
125
  });
126
126
  }
127
127
  if (spec.code && !this.fetchCache.has(componentKey)) {
@@ -129,7 +129,7 @@ class ComponentManager {
129
129
  spec: fullSpec,
130
130
  fetchedAt: new Date(),
131
131
  hash: await this.calculateHash(fullSpec),
132
- usageNotified: false,
132
+ usageNotified: false
133
133
  });
134
134
  }
135
135
  }
@@ -146,7 +146,7 @@ class ComponentManager {
146
146
  errors.push({
147
147
  message: `Failed to compile component: ${error instanceof Error ? error.message : String(error)}`,
148
148
  phase: 'compile',
149
- componentName: spec.name,
149
+ componentName: spec.name
150
150
  });
151
151
  throw error;
152
152
  }
@@ -161,7 +161,7 @@ class ComponentManager {
161
161
  const depResults = await this.loadDependenciesBatched(fullSpec.dependencies, { ...options, isDependent: true });
162
162
  for (const result of depResults) {
163
163
  if (result.success && result.component) {
164
- const depSpec = fullSpec.dependencies.find((d) => d.name === (result.spec?.name || ''));
164
+ const depSpec = fullSpec.dependencies.find(d => d.name === (result.spec?.name || ''));
165
165
  if (depSpec) {
166
166
  dependencies[depSpec.name] = result.component;
167
167
  }
@@ -174,7 +174,7 @@ class ComponentManager {
174
174
  const elapsed = Date.now() - startTime;
175
175
  this.log(`Component loaded successfully: ${spec.name} (${elapsed}ms)`, {
176
176
  fromCache: false,
177
- dependencyCount: Object.keys(dependencies).length,
177
+ dependencyCount: Object.keys(dependencies).length
178
178
  });
179
179
  return {
180
180
  success: errors.length === 0,
@@ -182,7 +182,7 @@ class ComponentManager {
182
182
  spec: fullSpec,
183
183
  fromCache: false,
184
184
  dependencies,
185
- errors: errors.length > 0 ? errors : undefined,
185
+ errors: errors.length > 0 ? errors : undefined
186
186
  };
187
187
  }
188
188
  catch (error) {
@@ -191,15 +191,11 @@ class ComponentManager {
191
191
  return {
192
192
  success: false,
193
193
  fromCache: false,
194
- errors: errors.length > 0
195
- ? errors
196
- : [
197
- {
198
- message: error instanceof Error ? error.message : String(error),
199
- phase: 'fetch',
200
- componentName: spec.name,
201
- },
202
- ],
194
+ errors: errors.length > 0 ? errors : [{
195
+ message: error instanceof Error ? error.message : String(error),
196
+ phase: 'fetch',
197
+ componentName: spec.name
198
+ }]
203
199
  };
204
200
  }
205
201
  }
@@ -212,11 +208,11 @@ class ComponentManager {
212
208
  fromCache: 0,
213
209
  fetched: 0,
214
210
  compiled: 0,
215
- totalTime: 0,
211
+ totalTime: 0
216
212
  };
217
213
  this.log(`Loading component hierarchy: ${rootSpec.name}`, {
218
214
  location: rootSpec.location,
219
- registry: rootSpec.registry,
215
+ registry: rootSpec.registry
220
216
  });
221
217
  try {
222
218
  if (this.componentEngine && typeof this.componentEngine.Config === 'function') {
@@ -228,7 +224,7 @@ class ComponentManager {
228
224
  success: errors.length === 0,
229
225
  loadedCount: loaded.length,
230
226
  errors: errors.length,
231
- ...stats,
227
+ ...stats
232
228
  });
233
229
  const unwrappedComponents = {};
234
230
  for (const [name, componentObject] of Object.entries(components)) {
@@ -246,7 +242,7 @@ class ComponentManager {
246
242
  loadedComponents: loaded,
247
243
  errors,
248
244
  components: unwrappedComponents,
249
- stats,
245
+ stats
250
246
  };
251
247
  }
252
248
  catch (error) {
@@ -255,15 +251,12 @@ class ComponentManager {
255
251
  return {
256
252
  success: false,
257
253
  loadedComponents: loaded,
258
- errors: [
259
- ...errors,
260
- {
254
+ errors: [...errors, {
261
255
  message: error instanceof Error ? error.message : String(error),
262
256
  phase: 'fetch',
263
- componentName: rootSpec.name,
264
- },
265
- ],
266
- stats,
257
+ componentName: rootSpec.name
258
+ }],
259
+ stats
267
260
  };
268
261
  }
269
262
  }
@@ -275,7 +268,7 @@ class ComponentManager {
275
268
  success: true,
276
269
  component: components[spec.name],
277
270
  spec,
278
- fromCache: true,
271
+ fromCache: true
279
272
  };
280
273
  }
281
274
  visited.add(componentKey);
@@ -315,7 +308,7 @@ class ComponentManager {
315
308
  const results = [];
316
309
  for (let i = 0; i < dependencies.length; i += batchSize) {
317
310
  const batch = dependencies.slice(i, i + batchSize);
318
- const batchPromises = batch.map((dep) => this.loadComponent(dep, options));
311
+ const batchPromises = batch.map(dep => this.loadComponent(dep, options));
319
312
  const batchResults = await Promise.all(batchPromises);
320
313
  results.push(...batchResults);
321
314
  }
@@ -350,7 +343,7 @@ class ComponentManager {
350
343
  this.fetchCache.set(cacheKey, {
351
344
  spec: fullSpec,
352
345
  fetchedAt: new Date(),
353
- usageNotified: false,
346
+ usageNotified: false
354
347
  });
355
348
  return fullSpec;
356
349
  }
@@ -365,7 +358,7 @@ class ComponentManager {
365
358
  registryName: spec.registry,
366
359
  namespace: spec.namespace || 'Global',
367
360
  name: spec.name,
368
- version: spec.version || 'latest',
361
+ version: spec.version || 'latest'
369
362
  });
370
363
  if (!fullSpec) {
371
364
  throw new Error(`Component not found in registry: ${spec.registry}/${spec.name}`);
@@ -374,7 +367,7 @@ class ComponentManager {
374
367
  this.fetchCache.set(cacheKey, {
375
368
  spec: processedSpec,
376
369
  fetchedAt: new Date(),
377
- usageNotified: false,
370
+ usageNotified: false
378
371
  });
379
372
  return processedSpec;
380
373
  }
@@ -393,11 +386,11 @@ class ComponentManager {
393
386
  location: originalSpec.location,
394
387
  registry: originalSpec.registry,
395
388
  namespace: originalSpec.namespace || fullSpec.namespace,
396
- name: originalSpec.name || fullSpec.name,
389
+ name: originalSpec.name || fullSpec.name
397
390
  };
398
391
  }
399
392
  if (processedSpec.dependencies && processedSpec.dependencies.length > 0) {
400
- processedSpec.dependencies = processedSpec.dependencies.map((dep) => {
393
+ processedSpec.dependencies = processedSpec.dependencies.map(dep => {
401
394
  return this.applyResolutionMode(dep, dep, resolutionMode);
402
395
  });
403
396
  }
@@ -405,13 +398,14 @@ class ComponentManager {
405
398
  }
406
399
  async compileComponent(spec, options) {
407
400
  const allLibraries = options.allLibraries || this.componentEngine.ComponentLibraries || [];
408
- const validLibraries = spec.libraries?.filter((lib) => lib && lib.name && lib.globalVariable && lib.name !== 'unknown' && lib.globalVariable !== 'undefined');
401
+ const validLibraries = spec.libraries?.filter(lib => lib && lib.name && lib.globalVariable &&
402
+ lib.name !== 'unknown' && lib.globalVariable !== 'undefined');
409
403
  const result = await this.compiler.compile({
410
404
  componentName: spec.name,
411
405
  componentCode: spec.code || '',
412
406
  libraries: validLibraries,
413
407
  dependencies: spec.dependencies,
414
- allLibraries,
408
+ allLibraries
415
409
  });
416
410
  if (!result.success || !result.component) {
417
411
  throw new Error(result.error?.message || 'Compilation failed');
@@ -450,7 +444,7 @@ class ComponentManager {
450
444
  }
451
445
  async initializeGraphQLClient() {
452
446
  try {
453
- const provider = global_1.Metadata?.Provider;
447
+ const provider = core_1.Metadata?.Provider;
454
448
  if (provider && provider.ExecuteGQL) {
455
449
  const { GraphQLComponentRegistryClient } = await Promise.resolve().then(() => __importStar(require('@memberjunction/graphql-dataprovider')));
456
450
  this.graphQLClient = new GraphQLComponentRegistryClient(provider);
@@ -458,7 +452,7 @@ class ComponentManager {
458
452
  }
459
453
  }
460
454
  catch (error) {
461
- (0, global_1.LogError)(`Failed to initialize GraphQL client: ${error instanceof Error ? error.message : String(error)}`);
455
+ (0, core_1.LogError)(`Failed to initialize GraphQL client: ${error instanceof Error ? error.message : String(error)}`);
462
456
  }
463
457
  }
464
458
  isCacheValid(entry) {
@@ -470,12 +464,12 @@ class ComponentManager {
470
464
  name: spec.name,
471
465
  version: spec.version,
472
466
  code: spec.code,
473
- libraries: spec.libraries,
467
+ libraries: spec.libraries
474
468
  });
475
469
  let hash = 0;
476
470
  for (let i = 0; i < content.length; i++) {
477
471
  const char = content.charCodeAt(i);
478
- hash = (hash << 5) - hash + char;
472
+ hash = ((hash << 5) - hash) + char;
479
473
  hash = hash & hash;
480
474
  }
481
475
  return hash.toString(16);
@@ -496,7 +490,7 @@ class ComponentManager {
496
490
  return {
497
491
  fetchCacheSize: this.fetchCache.size,
498
492
  notificationsCount: this.registryNotifications.size,
499
- loadingCount: this.loadingPromises.size,
493
+ loadingCount: this.loadingPromises.size
500
494
  };
501
495
  }
502
496
  log(message, data) {