@memberjunction/react-runtime 2.111.0 → 2.112.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 +10 -11
- package/CHANGELOG.md +6 -6
- package/dist/compiler/component-compiler.d.ts.map +1 -1
- package/dist/compiler/component-compiler.js +66 -56
- package/dist/compiler/component-compiler.js.map +1 -1
- package/dist/component-manager/component-manager.d.ts.map +1 -1
- package/dist/component-manager/component-manager.js +48 -42
- package/dist/component-manager/component-manager.js.map +1 -1
- package/dist/component-manager/types.d.ts +1 -1
- package/dist/component-manager/types.d.ts.map +1 -1
- package/dist/component-manager/types.js.map +1 -1
- package/dist/registry/component-registry-service.d.ts +1 -1
- package/dist/registry/component-registry-service.d.ts.map +1 -1
- package/dist/registry/component-registry-service.js +34 -34
- package/dist/registry/component-registry-service.js.map +1 -1
- package/dist/registry/component-resolver.d.ts +1 -1
- package/dist/registry/component-resolver.d.ts.map +1 -1
- package/dist/registry/component-resolver.js +10 -11
- package/dist/registry/component-resolver.js.map +1 -1
- package/dist/runtime/component-hierarchy.d.ts +1 -1
- package/dist/runtime/component-hierarchy.d.ts.map +1 -1
- package/dist/runtime/component-hierarchy.js +43 -43
- package/dist/runtime/component-hierarchy.js.map +1 -1
- package/dist/runtime/prop-builder.d.ts.map +1 -1
- package/dist/runtime/prop-builder.js +22 -24
- package/dist/runtime/prop-builder.js.map +1 -1
- package/dist/runtime.umd.js +494 -511
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/library-registry.d.ts +1 -1
- package/dist/utilities/library-registry.d.ts.map +1 -1
- package/dist/utilities/library-registry.js +10 -10
- package/dist/utilities/library-registry.js.map +1 -1
- package/package.json +5 -6
- package/src/compiler/component-compiler.ts +186 -164
- package/src/component-manager/component-manager.ts +162 -216
- package/src/component-manager/types.ts +27 -27
- package/src/registry/component-registry-service.ts +190 -218
- package/src/registry/component-resolver.ts +87 -98
- package/src/runtime/component-hierarchy.ts +57 -94
- package/src/runtime/prop-builder.ts +28 -33
- package/src/types/index.ts +3 -4
- package/src/utilities/library-registry.ts +14 -19
|
@@ -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/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
|
+
{"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 +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,
|
|
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"}
|
|
@@ -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
|
|
27
|
+
const global_1 = require("@memberjunction/global");
|
|
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,11 +191,15 @@ class ComponentManager {
|
|
|
191
191
|
return {
|
|
192
192
|
success: false,
|
|
193
193
|
fromCache: false,
|
|
194
|
-
errors: errors.length > 0
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
+
],
|
|
199
203
|
};
|
|
200
204
|
}
|
|
201
205
|
}
|
|
@@ -208,11 +212,11 @@ class ComponentManager {
|
|
|
208
212
|
fromCache: 0,
|
|
209
213
|
fetched: 0,
|
|
210
214
|
compiled: 0,
|
|
211
|
-
totalTime: 0
|
|
215
|
+
totalTime: 0,
|
|
212
216
|
};
|
|
213
217
|
this.log(`Loading component hierarchy: ${rootSpec.name}`, {
|
|
214
218
|
location: rootSpec.location,
|
|
215
|
-
registry: rootSpec.registry
|
|
219
|
+
registry: rootSpec.registry,
|
|
216
220
|
});
|
|
217
221
|
try {
|
|
218
222
|
if (this.componentEngine && typeof this.componentEngine.Config === 'function') {
|
|
@@ -224,7 +228,7 @@ class ComponentManager {
|
|
|
224
228
|
success: errors.length === 0,
|
|
225
229
|
loadedCount: loaded.length,
|
|
226
230
|
errors: errors.length,
|
|
227
|
-
...stats
|
|
231
|
+
...stats,
|
|
228
232
|
});
|
|
229
233
|
const unwrappedComponents = {};
|
|
230
234
|
for (const [name, componentObject] of Object.entries(components)) {
|
|
@@ -242,7 +246,7 @@ class ComponentManager {
|
|
|
242
246
|
loadedComponents: loaded,
|
|
243
247
|
errors,
|
|
244
248
|
components: unwrappedComponents,
|
|
245
|
-
stats
|
|
249
|
+
stats,
|
|
246
250
|
};
|
|
247
251
|
}
|
|
248
252
|
catch (error) {
|
|
@@ -251,12 +255,15 @@ class ComponentManager {
|
|
|
251
255
|
return {
|
|
252
256
|
success: false,
|
|
253
257
|
loadedComponents: loaded,
|
|
254
|
-
errors: [
|
|
258
|
+
errors: [
|
|
259
|
+
...errors,
|
|
260
|
+
{
|
|
255
261
|
message: error instanceof Error ? error.message : String(error),
|
|
256
262
|
phase: 'fetch',
|
|
257
|
-
componentName: rootSpec.name
|
|
258
|
-
}
|
|
259
|
-
|
|
263
|
+
componentName: rootSpec.name,
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
stats,
|
|
260
267
|
};
|
|
261
268
|
}
|
|
262
269
|
}
|
|
@@ -268,7 +275,7 @@ class ComponentManager {
|
|
|
268
275
|
success: true,
|
|
269
276
|
component: components[spec.name],
|
|
270
277
|
spec,
|
|
271
|
-
fromCache: true
|
|
278
|
+
fromCache: true,
|
|
272
279
|
};
|
|
273
280
|
}
|
|
274
281
|
visited.add(componentKey);
|
|
@@ -308,7 +315,7 @@ class ComponentManager {
|
|
|
308
315
|
const results = [];
|
|
309
316
|
for (let i = 0; i < dependencies.length; i += batchSize) {
|
|
310
317
|
const batch = dependencies.slice(i, i + batchSize);
|
|
311
|
-
const batchPromises = batch.map(dep => this.loadComponent(dep, options));
|
|
318
|
+
const batchPromises = batch.map((dep) => this.loadComponent(dep, options));
|
|
312
319
|
const batchResults = await Promise.all(batchPromises);
|
|
313
320
|
results.push(...batchResults);
|
|
314
321
|
}
|
|
@@ -343,7 +350,7 @@ class ComponentManager {
|
|
|
343
350
|
this.fetchCache.set(cacheKey, {
|
|
344
351
|
spec: fullSpec,
|
|
345
352
|
fetchedAt: new Date(),
|
|
346
|
-
usageNotified: false
|
|
353
|
+
usageNotified: false,
|
|
347
354
|
});
|
|
348
355
|
return fullSpec;
|
|
349
356
|
}
|
|
@@ -358,7 +365,7 @@ class ComponentManager {
|
|
|
358
365
|
registryName: spec.registry,
|
|
359
366
|
namespace: spec.namespace || 'Global',
|
|
360
367
|
name: spec.name,
|
|
361
|
-
version: spec.version || 'latest'
|
|
368
|
+
version: spec.version || 'latest',
|
|
362
369
|
});
|
|
363
370
|
if (!fullSpec) {
|
|
364
371
|
throw new Error(`Component not found in registry: ${spec.registry}/${spec.name}`);
|
|
@@ -367,7 +374,7 @@ class ComponentManager {
|
|
|
367
374
|
this.fetchCache.set(cacheKey, {
|
|
368
375
|
spec: processedSpec,
|
|
369
376
|
fetchedAt: new Date(),
|
|
370
|
-
usageNotified: false
|
|
377
|
+
usageNotified: false,
|
|
371
378
|
});
|
|
372
379
|
return processedSpec;
|
|
373
380
|
}
|
|
@@ -386,11 +393,11 @@ class ComponentManager {
|
|
|
386
393
|
location: originalSpec.location,
|
|
387
394
|
registry: originalSpec.registry,
|
|
388
395
|
namespace: originalSpec.namespace || fullSpec.namespace,
|
|
389
|
-
name: originalSpec.name || fullSpec.name
|
|
396
|
+
name: originalSpec.name || fullSpec.name,
|
|
390
397
|
};
|
|
391
398
|
}
|
|
392
399
|
if (processedSpec.dependencies && processedSpec.dependencies.length > 0) {
|
|
393
|
-
processedSpec.dependencies = processedSpec.dependencies.map(dep => {
|
|
400
|
+
processedSpec.dependencies = processedSpec.dependencies.map((dep) => {
|
|
394
401
|
return this.applyResolutionMode(dep, dep, resolutionMode);
|
|
395
402
|
});
|
|
396
403
|
}
|
|
@@ -398,14 +405,13 @@ class ComponentManager {
|
|
|
398
405
|
}
|
|
399
406
|
async compileComponent(spec, options) {
|
|
400
407
|
const allLibraries = options.allLibraries || this.componentEngine.ComponentLibraries || [];
|
|
401
|
-
const validLibraries = spec.libraries?.filter(lib => lib && lib.name && lib.globalVariable &&
|
|
402
|
-
lib.name !== 'unknown' && lib.globalVariable !== 'undefined');
|
|
408
|
+
const validLibraries = spec.libraries?.filter((lib) => lib && lib.name && lib.globalVariable && lib.name !== 'unknown' && lib.globalVariable !== 'undefined');
|
|
403
409
|
const result = await this.compiler.compile({
|
|
404
410
|
componentName: spec.name,
|
|
405
411
|
componentCode: spec.code || '',
|
|
406
412
|
libraries: validLibraries,
|
|
407
413
|
dependencies: spec.dependencies,
|
|
408
|
-
allLibraries
|
|
414
|
+
allLibraries,
|
|
409
415
|
});
|
|
410
416
|
if (!result.success || !result.component) {
|
|
411
417
|
throw new Error(result.error?.message || 'Compilation failed');
|
|
@@ -444,7 +450,7 @@ class ComponentManager {
|
|
|
444
450
|
}
|
|
445
451
|
async initializeGraphQLClient() {
|
|
446
452
|
try {
|
|
447
|
-
const provider =
|
|
453
|
+
const provider = global_1.Metadata?.Provider;
|
|
448
454
|
if (provider && provider.ExecuteGQL) {
|
|
449
455
|
const { GraphQLComponentRegistryClient } = await Promise.resolve().then(() => __importStar(require('@memberjunction/graphql-dataprovider')));
|
|
450
456
|
this.graphQLClient = new GraphQLComponentRegistryClient(provider);
|
|
@@ -452,7 +458,7 @@ class ComponentManager {
|
|
|
452
458
|
}
|
|
453
459
|
}
|
|
454
460
|
catch (error) {
|
|
455
|
-
(0,
|
|
461
|
+
(0, global_1.LogError)(`Failed to initialize GraphQL client: ${error instanceof Error ? error.message : String(error)}`);
|
|
456
462
|
}
|
|
457
463
|
}
|
|
458
464
|
isCacheValid(entry) {
|
|
@@ -464,12 +470,12 @@ class ComponentManager {
|
|
|
464
470
|
name: spec.name,
|
|
465
471
|
version: spec.version,
|
|
466
472
|
code: spec.code,
|
|
467
|
-
libraries: spec.libraries
|
|
473
|
+
libraries: spec.libraries,
|
|
468
474
|
});
|
|
469
475
|
let hash = 0;
|
|
470
476
|
for (let i = 0; i < content.length; i++) {
|
|
471
477
|
const char = content.charCodeAt(i);
|
|
472
|
-
hash = (
|
|
478
|
+
hash = (hash << 5) - hash + char;
|
|
473
479
|
hash = hash & hash;
|
|
474
480
|
}
|
|
475
481
|
return hash.toString(16);
|
|
@@ -490,7 +496,7 @@ class ComponentManager {
|
|
|
490
496
|
return {
|
|
491
497
|
fetchCacheSize: this.fetchCache.size,
|
|
492
498
|
notificationsCount: this.registryNotifications.size,
|
|
493
|
-
loadingCount: this.loadingPromises.size
|
|
499
|
+
loadingCount: this.loadingPromises.size,
|
|
494
500
|
};
|
|
495
501
|
}
|
|
496
502
|
log(message, data) {
|