@memberjunction/react-runtime 4.3.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +33 -31
- package/CHANGELOG.md +29 -0
- package/dist/324.runtime.umd.js +17 -17
- package/dist/compiler/component-compiler.js.map +1 -1
- package/dist/component-manager/component-manager.js.map +1 -1
- package/dist/component-manager/types.d.ts +2 -2
- 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.js.map +1 -1
- package/dist/runtime/component-hierarchy.d.ts +3 -3
- package/dist/runtime/component-hierarchy.d.ts.map +1 -1
- package/dist/runtime/component-hierarchy.js.map +1 -1
- package/dist/runtime/component-wrapper.d.ts +18 -0
- package/dist/runtime/component-wrapper.d.ts.map +1 -0
- package/dist/runtime/component-wrapper.js +108 -0
- package/dist/runtime.umd.js +1 -1
- package/dist/types/dependency-types.d.ts +3 -3
- package/dist/types/dependency-types.d.ts.map +1 -1
- package/dist/types/dependency-types.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/utilities/library-dependency-resolver.d.ts +7 -7
- package/dist/utilities/library-dependency-resolver.d.ts.map +1 -1
- package/dist/utilities/library-dependency-resolver.js.map +1 -1
- package/dist/utilities/library-loader.d.ts +3 -3
- package/dist/utilities/library-loader.d.ts.map +1 -1
- package/dist/utilities/library-loader.js.map +1 -1
- package/dist/utilities/library-registry.d.ts +2 -2
- package/dist/utilities/library-registry.d.ts.map +1 -1
- package/dist/utilities/library-registry.js.map +1 -1
- package/dist/utilities/runtime-utilities.d.ts +10 -0
- package/dist/utilities/runtime-utilities.d.ts.map +1 -0
- package/dist/utilities/runtime-utilities.js +92 -0
- package/package.json +6 -6
- package/src/compiler/component-compiler.ts +2 -2
- package/src/component-manager/component-manager.ts +1 -1
- package/src/component-manager/types.ts +2 -2
- package/src/registry/component-registry-service.ts +10 -10
- package/src/runtime/component-hierarchy.ts +3 -3
- package/src/types/dependency-types.ts +3 -3
- package/src/types/index.ts +2 -2
- package/src/utilities/library-dependency-resolver.ts +11 -11
- package/src/utilities/library-loader.ts +3 -3
- package/src/utilities/library-registry.ts +4 -4
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-registry-service.js","sourceRoot":"","sources":["../../src/registry/component-registry-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Service for managing registry-based component loading with caching\n * @module @memberjunction/react-runtime/registry\n */\n\nimport { ComponentSpec, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { ComponentCompiler } from '../compiler';\nimport { RuntimeContext } from '../types';\nimport { \n RegistryProvider, \n RegistryComponentResponse,\n ComponentDependencyInfo,\n DependencyTree, \n RegistryComponentMetadata\n} from './registry-provider';\nimport { UserInfo, Metadata } from '@memberjunction/core';\nimport { \n ComponentEntity, \n ComponentRegistryEntity,\n ComponentDependencyEntity,\n ComponentLibraryLinkEntity,\n ComponentMetadataEngine\n} from '@memberjunction/core-entities';\n\n// Type-only import for TypeScript - won't be included in UMD bundle\nimport type { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\n\n// Dynamic import of GraphQLComponentRegistryClient to avoid breaking UMD build\nlet GraphQLComponentRegistryClient: any;\n\n\n/**\n * Cached compiled component with metadata\n */\ninterface CachedCompiledComponent {\n component: (context: RuntimeContext, styles?: any, components?: Record<string, any>) => ComponentObject;\n metadata: RegistryComponentResponse['metadata'];\n compiledAt: Date;\n lastUsed: Date;\n useCount: number;\n specHash?: string; // SHA-256 hash of the spec used for compilation\n}\n\n/**\n * GraphQL client interface for registry operations\n */\nexport interface IComponentRegistryClient {\n GetRegistryComponent(params: {\n registryName: string;\n namespace: string;\n name: string;\n version?: string;\n hash?: string;\n }): Promise<ComponentSpec | null>;\n}\n\n/**\n * Service for managing component loading from registries with compilation caching\n */\nexport class ComponentRegistryService {\n private static instance: ComponentRegistryService | null = null;\n \n // Caches\n private compiledComponentCache = new Map<string, CachedCompiledComponent>();\n private componentReferences = new Map<string, Set<string>>();\n \n // Dependencies\n private compiler: ComponentCompiler;\n private runtimeContext: RuntimeContext;\n private componentEngine = ComponentMetadataEngine.Instance;\n private registryProviders = new Map<string, RegistryProvider>();\n private debug: boolean = false;\n private graphQLClient?: IComponentRegistryClient;\n \n private constructor(\n compiler: ComponentCompiler,\n runtimeContext: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ) {\n this.compiler = compiler;\n this.runtimeContext = runtimeContext;\n this.debug = debug;\n this.graphQLClient = graphQLClient;\n }\n \n /**\n * Get or create the singleton instance\n */\n static getInstance(\n compiler: ComponentCompiler, \n context: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ): ComponentRegistryService {\n if (!ComponentRegistryService.instance) {\n ComponentRegistryService.instance = new ComponentRegistryService(compiler, context, debug, graphQLClient);\n }\n return ComponentRegistryService.instance;\n }\n \n /**\n * Set the GraphQL client for registry operations\n */\n setGraphQLClient(client: IComponentRegistryClient): void {\n this.graphQLClient = client;\n if (this.debug) {\n console.log('✅ GraphQL client configured for component registry');\n }\n }\n \n /**\n * Cached GraphQL client instance created from Metadata.Provider\n */\n private cachedProviderClient: IComponentRegistryClient | null = null;\n \n /**\n * Get the GraphQL client, using the provided one or falling back to creating one with Metadata.Provider\n * @returns The GraphQL client if available\n */\n private async getGraphQLClient(): Promise<IComponentRegistryClient | null> {\n // If explicitly set, use that\n if (this.graphQLClient) {\n return this.graphQLClient;\n }\n \n // If we've already created one from the provider, reuse it\n if (this.cachedProviderClient) {\n return this.cachedProviderClient;\n }\n \n // Try to create GraphQLComponentRegistryClient with Metadata.Provider\n try {\n const provider = Metadata?.Provider;\n if (provider && (provider as any).ExecuteGQL !== undefined) {\n // Dynamically load GraphQLComponentRegistryClient if not already loaded\n if (!GraphQLComponentRegistryClient) {\n try {\n const graphqlModule = await import('@memberjunction/graphql-dataprovider');\n GraphQLComponentRegistryClient = graphqlModule.GraphQLComponentRegistryClient;\n } catch (importError) {\n if (this.debug) {\n console.log('⚠️ [ComponentRegistryService] @memberjunction/graphql-dataprovider not available');\n }\n return null;\n }\n }\n \n // Create the client if we have the class\n if (GraphQLComponentRegistryClient) {\n try {\n const client = new GraphQLComponentRegistryClient(provider as GraphQLDataProvider);\n this.cachedProviderClient = client;\n if (this.debug) {\n console.log('📡 [ComponentRegistryService] Created GraphQL client from Metadata.Provider');\n }\n return client;\n } catch (error) {\n if (this.debug) {\n console.log('⚠️ [ComponentRegistryService] Failed to create GraphQL client:', error);\n }\n }\n }\n }\n } catch (error) {\n // Provider might not be available in all environments\n if (this.debug) {\n console.log('⚠️ [ComponentRegistryService] Could not access Metadata.Provider:', error);\n }\n }\n \n return null;\n }\n \n /**\n * Initialize the service with metadata\n */\n async initialize(contextUser?: UserInfo): Promise<void> {\n // Initialize metadata engine\n await this.componentEngine.Config(false, contextUser);\n }\n \n /**\n * Calculate SHA-256 hash of a component spec for cache comparison\n * Uses Web Crypto API which is available in modern browsers and Node.js 15+\n */\n private async calculateSpecHash(spec: ComponentSpec): Promise<string> {\n // Check for crypto.subtle availability\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error(\n 'Web Crypto API not available. This typically happens when running in an insecure context. ' +\n 'Please use HTTPS or localhost for development. ' +\n 'Note: crypto.subtle is available in Node.js 15+ and all modern browsers on secure contexts.'\n );\n }\n \n const specString = JSON.stringify(spec);\n const encoder = new TextEncoder();\n const data = encoder.encode(specString);\n \n // Calculate SHA-256 hash using Web Crypto API\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n \n // Convert ArrayBuffer to hex string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n \n return hashHex;\n }\n \n /**\n * Get a compiled component, using cache if available\n */\n async getCompiledComponent(\n componentId: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<ComponentObject> {\n await this.initialize(contextUser);\n \n // Find component in metadata\n const component = this.componentEngine.Components.find((c: ComponentEntity) => c.ID === componentId);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n \n const key = this.getComponentKey(component.Name, component.Namespace, component.Version, component.SourceRegistryID);\n \n // Check if already compiled and cached\n if (this.compiledComponentCache.has(key)) {\n const cached = this.compiledComponentCache.get(key)!;\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference if provided\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`✅ Reusing compiled component from cache: ${key} (use count: ${cached.useCount})`);\n }\n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Not in cache, need to load and compile\n if (this.debug) {\n console.log(`🔄 Loading and compiling component: ${key}`);\n }\n \n // Get the component specification\n const spec = await this.getComponentSpec(componentId, contextUser);\n \n // Compile the component\n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n let compilationResult;\n try {\n compilationResult = await this.compiler.compile({\n componentName: component.Name,\n componentCode: spec.code,\n libraries: spec.libraries,\n allLibraries\n });\n }\n catch (compileEx) {\n // log then throw\n console.error(`🔴 Error compiling component ${component.Name}`,compileEx);\n throw compileEx;\n }\n \n if (!compilationResult.success) {\n console.error(`🔴 Error compiling component ${component.Name}`, compilationResult, 'Code', spec.code);\n throw new Error(`Failed to compile component ${component.Name}: ${compilationResult.error}`);\n }\n \n // Cache the compiled component\n const metadata: RegistryComponentMetadata = {\n name: component.Name,\n namespace: component.Namespace || '',\n version: component.Version,\n description: component.Description || '',\n title: component.Title || undefined,\n type: component.Type || undefined,\n status: component.Status || undefined,\n properties: spec.properties,\n events: spec.events,\n libraries: spec.libraries,\n dependencies: spec.dependencies,\n sourceRegistryID: component.SourceRegistryID,\n isLocal: !component.SourceRegistryID\n };\n \n if (!compilationResult.component) {\n throw new Error(`Component compilation succeeded but no component returned`);\n }\n const compiledComponentFactory = compilationResult.component.factory;\n this.compiledComponentCache.set(key, {\n component: compiledComponentFactory,\n metadata,\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return compiledComponentFactory(this.runtimeContext);\n }\n \n /**\n * Get compiled component from external registry by registry name\n * This is used when spec.registry field is populated\n */\n async getCompiledComponentFromRegistry(\n registryName: string,\n namespace: string,\n name: string,\n version: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<any> {\n await this.initialize(contextUser);\n \n if (this.debug) {\n console.log(`🌐 [ComponentRegistryService] Fetching from external registry: ${registryName}/${namespace}/${name}@${version}`);\n }\n \n // Find the registry by name in ComponentRegistries\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => r.Name === registryName && r.Status === 'Active'\n );\n \n if (!registry) {\n throw new Error(`Registry not found or inactive: ${registryName}`);\n }\n \n if (this.debug) {\n console.log(`✅ [ComponentRegistryService] Found registry: ${registry.Name} (ID: ${registry.ID})`);\n }\n \n // Get GraphQL client - use provided one or fallback to Metadata.Provider\n const graphQLClient = await this.getGraphQLClient();\n if (!graphQLClient) {\n throw new Error('GraphQL client not available for external registry fetching. No client provided and Metadata.Provider is not a GraphQLDataProvider.');\n }\n \n // Check if we have a cached version first\n const key = `external:${registryName}:${namespace}:${name}:${version}`;\n const cached = this.compiledComponentCache.get(key);\n \n try {\n // Fetch component spec from external registry via MJServer\n // Pass cached hash if available for efficient caching\n const spec = await graphQLClient.GetRegistryComponent({\n registryName: registry.Name, // Pass registry name, not ID\n namespace,\n name,\n version,\n hash: cached?.specHash // Pass cached hash if available\n });\n \n // If null returned, it means not modified (304)\n if (!spec && cached?.specHash) {\n if (this.debug) {\n console.log(`♻️ [ComponentRegistryService] Component not modified, using cached: ${key}`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n if (!spec) {\n throw new Error(`Component not found in registry ${registryName}: ${namespace}/${name}@${version}`);\n }\n \n if (this.debug) {\n console.log(`✅ [ComponentRegistryService] Fetched spec from external registry: ${spec.name}`);\n }\n \n // Calculate hash of the fetched spec\n const specHash = await this.calculateSpecHash(spec);\n \n // Check if hash matches cached version (shouldn't happen if server works correctly)\n if (cached && cached.specHash === specHash) {\n if (this.debug) {\n console.log(`♻️ [ComponentRegistryService] Using cached compilation for: ${key} (hash match)`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Spec has changed or is new, need to compile\n if (cached && this.debug) {\n console.log(`🔄 [ComponentRegistryService] Spec changed for: ${key}, recompiling (old hash: ${cached.specHash?.substring(0, 8)}..., new hash: ${specHash.substring(0, 8)}...)`);\n }\n \n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n // Compile the component\n const compilationResult = await this.compiler.compile({\n componentName: spec.name,\n componentCode: spec.code || '',\n allLibraries: allLibraries\n });\n \n if (!compilationResult.success || !compilationResult.component) {\n throw new Error(`Failed to compile component: ${compilationResult.error?.message || 'Unknown error'}`);\n }\n \n // Cache the compiled component with spec hash\n this.compiledComponentCache.set(key, {\n component: compilationResult.component.factory,\n metadata: {\n name: spec.name,\n namespace: spec.namespace || '',\n version: spec.version || '1.0.0',\n description: spec.description || '',\n type: spec.type,\n isLocal: false // This is from an external registry\n },\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1,\n specHash: specHash // Store the hash for future comparison\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`🎯 [ComponentRegistryService] Successfully compiled external component: ${spec.name}`);\n }\n \n // Call the factory function to get the ComponentObject\n return compilationResult.component.factory(this.runtimeContext);\n } catch (error) {\n console.error(`❌ [ComponentRegistryService] Failed to fetch from external registry:`, error);\n throw error;\n }\n }\n \n /**\n * Get component specification from database or external registry\n */\n async getComponentSpec(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentSpec> {\n await this.initialize(contextUser);\n \n const component = this.componentEngine.Components.find((c: ComponentEntity) => c.ID === componentId);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n \n if (!component.SourceRegistryID) {\n // LOCAL: Use specification from database\n if (!component.Specification) {\n throw new Error(`Local component ${component.Name} has no specification`);\n }\n return JSON.parse(component.Specification);\n }\n \n // EXTERNAL: Check if we have a cached version\n if (component.Specification && component.LastSyncedAt) {\n // For now, always use cached version (no expiration)\n if (this.debug) {\n console.log(`Using cached external component: ${component.Name} (synced: ${component.LastSyncedAt})`);\n }\n return JSON.parse(component.Specification);\n }\n \n // Need to fetch from external registry\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => r.ID === component.SourceRegistryID\n );\n \n if (!registry) {\n throw new Error(`Registry not found: ${component.SourceRegistryID}`);\n }\n \n // Try GraphQL client first if available\n let spec: ComponentSpec;\n \n if (this.graphQLClient) {\n if (this.debug) {\n console.log(`Fetching from registry via GraphQL: ${component.Name}`);\n }\n \n const result = await this.graphQLClient.GetRegistryComponent({\n registryName: registry.Name,\n namespace: component.Namespace || '',\n name: component.Name,\n version: component.Version\n });\n \n if (!result) {\n throw new Error(`Component not found in registry: ${component.Name}`);\n }\n \n spec = result;\n } else {\n // Fallback to direct HTTP if no GraphQL client\n spec = await this.fetchFromExternalRegistry(\n registry.URI || '',\n component.Name,\n component.Namespace || '',\n component.Version,\n this.getRegistryApiKey(registry.ID)\n );\n }\n \n // Store in local database for future use\n await this.cacheExternalComponent(componentId, spec, contextUser);\n \n return spec;\n }\n \n /**\n * Fetch component from external registry via HTTP\n */\n private async fetchFromExternalRegistry(\n uri: string,\n name: string,\n namespace: string,\n version: string,\n apiKey?: string\n ): Promise<ComponentSpec> {\n const url = `${uri}/components/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}/${version}`;\n \n const headers: HeadersInit = {\n 'Accept': 'application/json'\n };\n \n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n \n if (this.debug) {\n console.log(`Fetching from external registry: ${url}`);\n }\n \n const response = await fetch(url, { headers });\n \n if (!response.ok) {\n throw new Error(`Registry fetch failed: ${response.status} ${response.statusText}`);\n }\n \n const spec = await response.json() as ComponentSpec;\n return spec;\n }\n \n /**\n * Cache an external component in the local database\n */\n private async cacheExternalComponent(\n componentId: string,\n spec: ComponentSpec,\n contextUser?: UserInfo\n ): Promise<void> {\n // Get the actual entity object to save\n const md = new Metadata();\n const componentEntity = await md.GetEntityObject<ComponentEntity>('MJ: Components', contextUser);\n \n // Load the existing component\n if (!await componentEntity.Load(componentId)) {\n throw new Error(`Failed to load component entity: ${componentId}`);\n }\n \n // Update with fetched specification and all fields from spec\n componentEntity.Specification = JSON.stringify(spec);\n componentEntity.LastSyncedAt = new Date();\n \n // Set ReplicatedAt only on first fetch\n if (!componentEntity.ReplicatedAt) {\n componentEntity.ReplicatedAt = new Date();\n }\n \n // Update all fields from the spec with strong typing\n if (spec.name) {\n componentEntity.Name = spec.name;\n }\n \n if (spec.namespace) {\n componentEntity.Namespace = spec.namespace;\n }\n \n if (spec.version) {\n componentEntity.Version = spec.version;\n }\n \n if (spec.title) {\n componentEntity.Title = spec.title;\n }\n \n if (spec.description) {\n componentEntity.Description = spec.description;\n }\n \n if (spec.type) {\n // Map spec type to entity type (entity has specific enum values)\n const typeMap: Record<string, ComponentEntity['Type']> = {\n 'report': 'Report',\n 'dashboard': 'Dashboard',\n 'form': 'Form',\n 'table': 'Table',\n 'chart': 'Chart',\n 'navigation': 'Navigation',\n 'search': 'Search',\n 'widget': 'Widget',\n 'utility': 'Utility',\n 'other': 'Other'\n };\n \n const mappedType = typeMap[spec.type.toLowerCase()];\n if (mappedType) {\n componentEntity.Type = mappedType;\n }\n }\n \n if (spec.functionalRequirements) {\n componentEntity.FunctionalRequirements = spec.functionalRequirements;\n }\n \n if (spec.technicalDesign) {\n componentEntity.TechnicalDesign = spec.technicalDesign;\n }\n \n // Save back to database\n const result = await componentEntity.Save();\n if (!result) {\n throw new Error(`Failed to save cached component: ${componentEntity.Name}\\n${componentEntity.LatestResult?.CompleteMessage || 'Unknown error'}`);\n }\n \n if (this.debug) {\n console.log(`Cached external component: ${componentEntity.Name} at ${componentEntity.LastSyncedAt}`);\n }\n \n // Refresh metadata cache after saving\n await this.componentEngine.Config(true, contextUser);\n }\n \n /**\n * Load component dependencies from database\n */\n async loadDependencies(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentDependencyInfo[]> {\n await this.initialize(contextUser);\n \n // Get dependencies from metadata cache\n const dependencies = this.componentEngine.ComponentDependencies?.filter(\n d => d.ComponentID === componentId\n ) || [];\n \n const result: ComponentDependencyInfo[] = [];\n \n for (const dep of dependencies) {\n // Find the dependency component\n const depComponent = this.componentEngine.Components.find(\n (c: ComponentEntity) => c.ID === dep.DependencyComponentID\n );\n \n if (depComponent) {\n result.push({\n name: depComponent.Name,\n namespace: depComponent.Namespace || '',\n version: depComponent.Version, // Version comes from the linked Component record\n isRequired: true, // All dependencies are required in MemberJunction\n location: depComponent.SourceRegistryID ? 'registry' : 'embedded',\n sourceRegistryID: depComponent.SourceRegistryID\n });\n }\n }\n \n return result;\n }\n \n /**\n * Resolve full dependency tree for a component\n */\n async resolveDependencyTree(\n componentId: string,\n contextUser?: UserInfo,\n visited = new Set<string>()\n ): Promise<DependencyTree> {\n if (visited.has(componentId)) {\n return { \n componentId, \n circular: true \n };\n }\n visited.add(componentId);\n \n await this.initialize(contextUser);\n \n const component = this.componentEngine.Components.find((c: ComponentEntity) => c.ID === componentId);\n if (!component) {\n return { componentId, dependencies: [] };\n }\n \n // Get direct dependencies\n const directDeps = await this.loadDependencies(componentId, contextUser);\n \n // Recursively resolve each dependency\n const dependencies: DependencyTree[] = [];\n for (const dep of directDeps) {\n // Find the dependency component\n const depComponent = this.componentEngine.Components.find(\n c => c.Name.trim().toLowerCase() === dep.name.trim().toLowerCase() && \n c.Namespace?.trim().toLowerCase() === dep.namespace?.trim().toLowerCase()\n );\n \n if (depComponent) {\n const subTree = await this.resolveDependencyTree(\n depComponent.ID, \n contextUser, \n visited\n );\n dependencies.push(subTree);\n }\n }\n \n return {\n componentId,\n name: component.Name,\n namespace: component.Namespace || undefined,\n version: component.Version,\n dependencies,\n totalCount: dependencies.reduce((sum, d) => sum + (d.totalCount || 1), 1)\n };\n }\n \n /**\n * Get components to load in dependency order\n */\n async getComponentsToLoad(\n rootComponentId: string,\n contextUser?: UserInfo\n ): Promise<string[]> {\n const tree = await this.resolveDependencyTree(rootComponentId, contextUser);\n \n // Flatten tree in dependency order (depth-first)\n const ordered: string[] = [];\n const processNode = (node: DependencyTree) => {\n if (node.dependencies) {\n node.dependencies.forEach(processNode);\n }\n if (!ordered.includes(node.componentId)) {\n ordered.push(node.componentId);\n }\n };\n processNode(tree);\n \n return ordered;\n }\n \n /**\n * Add a reference to a component\n */\n private addComponentReference(componentKey: string, referenceId: string): void {\n if (!this.componentReferences.has(componentKey)) {\n this.componentReferences.set(componentKey, new Set());\n }\n this.componentReferences.get(componentKey)!.add(referenceId);\n }\n \n /**\n * Remove a reference to a component\n */\n removeComponentReference(componentKey: string, referenceId: string): void {\n const refs = this.componentReferences.get(componentKey);\n if (refs) {\n refs.delete(referenceId);\n \n // If no more references and cache cleanup is enabled\n if (refs.size === 0) {\n this.considerCacheEviction(componentKey);\n }\n }\n }\n \n /**\n * Consider evicting a component from cache\n */\n private considerCacheEviction(componentKey: string): void {\n const cached = this.compiledComponentCache.get(componentKey);\n if (cached) {\n const timeSinceLastUse = Date.now() - cached.lastUsed.getTime();\n const evictionThreshold = 5 * 60 * 1000; // 5 minutes\n \n if (timeSinceLastUse > evictionThreshold) {\n if (this.debug) {\n console.log(`🗑️ Evicting unused component from cache: ${componentKey}`);\n }\n this.compiledComponentCache.delete(componentKey);\n }\n }\n }\n \n /**\n * Get API key for a registry from secure configuration\n * @param registryId - Registry ID\n * @returns API key or undefined\n */\n private getRegistryApiKey(registryId: string): string | undefined {\n // API keys should be stored in environment variables or secure configuration\n // Format: REGISTRY_API_KEY_{registryId} or similar\n // This is a placeholder - actual implementation would depend on the security infrastructure\n const envKey = `REGISTRY_API_KEY_${registryId.replace(/-/g, '_').toUpperCase()}`;\n return process.env[envKey];\n }\n \n /**\n * Get cache statistics\n */\n getCacheStats(): {\n compiledComponents: number;\n totalUseCount: number;\n memoryEstimate: string;\n } {\n let totalUseCount = 0;\n this.compiledComponentCache.forEach(cached => {\n totalUseCount += cached.useCount;\n });\n \n return {\n compiledComponents: this.compiledComponentCache.size,\n totalUseCount,\n memoryEstimate: `~${(this.compiledComponentCache.size * 50)}KB` // Rough estimate\n };\n }\n \n /**\n * Clear all caches\n */\n clearCache(): void {\n if (this.debug) {\n console.log('🧹 Clearing all component caches');\n }\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n }\n\n /**\n * Force clear all compiled components\n * Used for Component Studio to ensure fresh loads\n */\n forceClearAll(): void {\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n console.log('🧹 Component cache force cleared');\n }\n\n /**\n * Reset the singleton instance\n * Forces new instance creation on next access\n */\n static reset(): void {\n if (ComponentRegistryService.instance) {\n ComponentRegistryService.instance.forceClearAll();\n ComponentRegistryService.instance = null;\n }\n }\n \n /**\n * Generate a cache key for a component\n */\n private getComponentKey(\n name: string, \n namespace: string | null | undefined, \n version: string, \n sourceRegistryId: string | null | undefined\n ): string {\n const registryPart = sourceRegistryId || 'local';\n const namespacePart = namespace || 'global';\n return `${registryPart}/${namespacePart}/${name}@${version}`;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"component-registry-service.js","sourceRoot":"","sources":["../../src/registry/component-registry-service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Service for managing registry-based component loading with caching\n * @module @memberjunction/react-runtime/registry\n */\n\nimport { ComponentSpec, ComponentObject } from '@memberjunction/interactive-component-types';\nimport { ComponentCompiler } from '../compiler';\nimport { RuntimeContext } from '../types';\nimport { \n RegistryProvider, \n RegistryComponentResponse,\n ComponentDependencyInfo,\n DependencyTree, \n RegistryComponentMetadata\n} from './registry-provider';\nimport { UserInfo, Metadata } from '@memberjunction/core';\nimport { \n MJComponentEntity, \n MJComponentRegistryEntity,\n MJComponentDependencyEntity,\n MJComponentLibraryLinkEntity,\n ComponentMetadataEngine\n} from '@memberjunction/core-entities';\n\n// Type-only import for TypeScript - won't be included in UMD bundle\nimport type { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\n\n// Dynamic import of GraphQLComponentRegistryClient to avoid breaking UMD build\nlet GraphQLComponentRegistryClient: any;\n\n\n/**\n * Cached compiled component with metadata\n */\ninterface CachedCompiledComponent {\n component: (context: RuntimeContext, styles?: any, components?: Record<string, any>) => ComponentObject;\n metadata: RegistryComponentResponse['metadata'];\n compiledAt: Date;\n lastUsed: Date;\n useCount: number;\n specHash?: string; // SHA-256 hash of the spec used for compilation\n}\n\n/**\n * GraphQL client interface for registry operations\n */\nexport interface IComponentRegistryClient {\n GetRegistryComponent(params: {\n registryName: string;\n namespace: string;\n name: string;\n version?: string;\n hash?: string;\n }): Promise<ComponentSpec | null>;\n}\n\n/**\n * Service for managing component loading from registries with compilation caching\n */\nexport class ComponentRegistryService {\n private static instance: ComponentRegistryService | null = null;\n \n // Caches\n private compiledComponentCache = new Map<string, CachedCompiledComponent>();\n private componentReferences = new Map<string, Set<string>>();\n \n // Dependencies\n private compiler: ComponentCompiler;\n private runtimeContext: RuntimeContext;\n private componentEngine = ComponentMetadataEngine.Instance;\n private registryProviders = new Map<string, RegistryProvider>();\n private debug: boolean = false;\n private graphQLClient?: IComponentRegistryClient;\n \n private constructor(\n compiler: ComponentCompiler,\n runtimeContext: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ) {\n this.compiler = compiler;\n this.runtimeContext = runtimeContext;\n this.debug = debug;\n this.graphQLClient = graphQLClient;\n }\n \n /**\n * Get or create the singleton instance\n */\n static getInstance(\n compiler: ComponentCompiler, \n context: RuntimeContext,\n debug: boolean = false,\n graphQLClient?: IComponentRegistryClient\n ): ComponentRegistryService {\n if (!ComponentRegistryService.instance) {\n ComponentRegistryService.instance = new ComponentRegistryService(compiler, context, debug, graphQLClient);\n }\n return ComponentRegistryService.instance;\n }\n \n /**\n * Set the GraphQL client for registry operations\n */\n setGraphQLClient(client: IComponentRegistryClient): void {\n this.graphQLClient = client;\n if (this.debug) {\n console.log('✅ GraphQL client configured for component registry');\n }\n }\n \n /**\n * Cached GraphQL client instance created from Metadata.Provider\n */\n private cachedProviderClient: IComponentRegistryClient | null = null;\n \n /**\n * Get the GraphQL client, using the provided one or falling back to creating one with Metadata.Provider\n * @returns The GraphQL client if available\n */\n private async getGraphQLClient(): Promise<IComponentRegistryClient | null> {\n // If explicitly set, use that\n if (this.graphQLClient) {\n return this.graphQLClient;\n }\n \n // If we've already created one from the provider, reuse it\n if (this.cachedProviderClient) {\n return this.cachedProviderClient;\n }\n \n // Try to create GraphQLComponentRegistryClient with Metadata.Provider\n try {\n const provider = Metadata?.Provider;\n if (provider && (provider as any).ExecuteGQL !== undefined) {\n // Dynamically load GraphQLComponentRegistryClient if not already loaded\n if (!GraphQLComponentRegistryClient) {\n try {\n const graphqlModule = await import('@memberjunction/graphql-dataprovider');\n GraphQLComponentRegistryClient = graphqlModule.GraphQLComponentRegistryClient;\n } catch (importError) {\n if (this.debug) {\n console.log('⚠️ [ComponentRegistryService] @memberjunction/graphql-dataprovider not available');\n }\n return null;\n }\n }\n \n // Create the client if we have the class\n if (GraphQLComponentRegistryClient) {\n try {\n const client = new GraphQLComponentRegistryClient(provider as GraphQLDataProvider);\n this.cachedProviderClient = client;\n if (this.debug) {\n console.log('📡 [ComponentRegistryService] Created GraphQL client from Metadata.Provider');\n }\n return client;\n } catch (error) {\n if (this.debug) {\n console.log('⚠️ [ComponentRegistryService] Failed to create GraphQL client:', error);\n }\n }\n }\n }\n } catch (error) {\n // Provider might not be available in all environments\n if (this.debug) {\n console.log('⚠️ [ComponentRegistryService] Could not access Metadata.Provider:', error);\n }\n }\n \n return null;\n }\n \n /**\n * Initialize the service with metadata\n */\n async initialize(contextUser?: UserInfo): Promise<void> {\n // Initialize metadata engine\n await this.componentEngine.Config(false, contextUser);\n }\n \n /**\n * Calculate SHA-256 hash of a component spec for cache comparison\n * Uses Web Crypto API which is available in modern browsers and Node.js 15+\n */\n private async calculateSpecHash(spec: ComponentSpec): Promise<string> {\n // Check for crypto.subtle availability\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error(\n 'Web Crypto API not available. This typically happens when running in an insecure context. ' +\n 'Please use HTTPS or localhost for development. ' +\n 'Note: crypto.subtle is available in Node.js 15+ and all modern browsers on secure contexts.'\n );\n }\n \n const specString = JSON.stringify(spec);\n const encoder = new TextEncoder();\n const data = encoder.encode(specString);\n \n // Calculate SHA-256 hash using Web Crypto API\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n \n // Convert ArrayBuffer to hex string\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n \n return hashHex;\n }\n \n /**\n * Get a compiled component, using cache if available\n */\n async getCompiledComponent(\n componentId: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<ComponentObject> {\n await this.initialize(contextUser);\n \n // Find component in metadata\n const component = this.componentEngine.Components.find((c: MJComponentEntity) => c.ID === componentId);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n \n const key = this.getComponentKey(component.Name, component.Namespace, component.Version, component.SourceRegistryID);\n \n // Check if already compiled and cached\n if (this.compiledComponentCache.has(key)) {\n const cached = this.compiledComponentCache.get(key)!;\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference if provided\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`✅ Reusing compiled component from cache: ${key} (use count: ${cached.useCount})`);\n }\n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Not in cache, need to load and compile\n if (this.debug) {\n console.log(`🔄 Loading and compiling component: ${key}`);\n }\n \n // Get the component specification\n const spec = await this.getComponentSpec(componentId, contextUser);\n \n // Compile the component\n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n let compilationResult;\n try {\n compilationResult = await this.compiler.compile({\n componentName: component.Name,\n componentCode: spec.code,\n libraries: spec.libraries,\n allLibraries\n });\n }\n catch (compileEx) {\n // log then throw\n console.error(`🔴 Error compiling component ${component.Name}`,compileEx);\n throw compileEx;\n }\n \n if (!compilationResult.success) {\n console.error(`🔴 Error compiling component ${component.Name}`, compilationResult, 'Code', spec.code);\n throw new Error(`Failed to compile component ${component.Name}: ${compilationResult.error}`);\n }\n \n // Cache the compiled component\n const metadata: RegistryComponentMetadata = {\n name: component.Name,\n namespace: component.Namespace || '',\n version: component.Version,\n description: component.Description || '',\n title: component.Title || undefined,\n type: component.Type || undefined,\n status: component.Status || undefined,\n properties: spec.properties,\n events: spec.events,\n libraries: spec.libraries,\n dependencies: spec.dependencies,\n sourceRegistryID: component.SourceRegistryID,\n isLocal: !component.SourceRegistryID\n };\n \n if (!compilationResult.component) {\n throw new Error(`Component compilation succeeded but no component returned`);\n }\n const compiledComponentFactory = compilationResult.component.factory;\n this.compiledComponentCache.set(key, {\n component: compiledComponentFactory,\n metadata,\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return compiledComponentFactory(this.runtimeContext);\n }\n \n /**\n * Get compiled component from external registry by registry name\n * This is used when spec.registry field is populated\n */\n async getCompiledComponentFromRegistry(\n registryName: string,\n namespace: string,\n name: string,\n version: string,\n referenceId?: string,\n contextUser?: UserInfo\n ): Promise<any> {\n await this.initialize(contextUser);\n \n if (this.debug) {\n console.log(`🌐 [ComponentRegistryService] Fetching from external registry: ${registryName}/${namespace}/${name}@${version}`);\n }\n \n // Find the registry by name in ComponentRegistries\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => r.Name === registryName && r.Status === 'Active'\n );\n \n if (!registry) {\n throw new Error(`Registry not found or inactive: ${registryName}`);\n }\n \n if (this.debug) {\n console.log(`✅ [ComponentRegistryService] Found registry: ${registry.Name} (ID: ${registry.ID})`);\n }\n \n // Get GraphQL client - use provided one or fallback to Metadata.Provider\n const graphQLClient = await this.getGraphQLClient();\n if (!graphQLClient) {\n throw new Error('GraphQL client not available for external registry fetching. No client provided and Metadata.Provider is not a GraphQLDataProvider.');\n }\n \n // Check if we have a cached version first\n const key = `external:${registryName}:${namespace}:${name}:${version}`;\n const cached = this.compiledComponentCache.get(key);\n \n try {\n // Fetch component spec from external registry via MJServer\n // Pass cached hash if available for efficient caching\n const spec = await graphQLClient.GetRegistryComponent({\n registryName: registry.Name, // Pass registry name, not ID\n namespace,\n name,\n version,\n hash: cached?.specHash // Pass cached hash if available\n });\n \n // If null returned, it means not modified (304)\n if (!spec && cached?.specHash) {\n if (this.debug) {\n console.log(`♻️ [ComponentRegistryService] Component not modified, using cached: ${key}`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n if (!spec) {\n throw new Error(`Component not found in registry ${registryName}: ${namespace}/${name}@${version}`);\n }\n \n if (this.debug) {\n console.log(`✅ [ComponentRegistryService] Fetched spec from external registry: ${spec.name}`);\n }\n \n // Calculate hash of the fetched spec\n const specHash = await this.calculateSpecHash(spec);\n \n // Check if hash matches cached version (shouldn't happen if server works correctly)\n if (cached && cached.specHash === specHash) {\n if (this.debug) {\n console.log(`♻️ [ComponentRegistryService] Using cached compilation for: ${key} (hash match)`);\n }\n cached.lastUsed = new Date();\n cached.useCount++;\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n // Call the factory function to get the ComponentObject\n return cached.component(this.runtimeContext);\n }\n \n // Spec has changed or is new, need to compile\n if (cached && this.debug) {\n console.log(`🔄 [ComponentRegistryService] Spec changed for: ${key}, recompiling (old hash: ${cached.specHash?.substring(0, 8)}..., new hash: ${specHash.substring(0, 8)}...)`);\n }\n \n // Load all libraries from metadata engine\n const allLibraries = this.componentEngine.ComponentLibraries || [];\n \n // Compile the component\n const compilationResult = await this.compiler.compile({\n componentName: spec.name,\n componentCode: spec.code || '',\n allLibraries: allLibraries\n });\n \n if (!compilationResult.success || !compilationResult.component) {\n throw new Error(`Failed to compile component: ${compilationResult.error?.message || 'Unknown error'}`);\n }\n \n // Cache the compiled component with spec hash\n this.compiledComponentCache.set(key, {\n component: compilationResult.component.factory,\n metadata: {\n name: spec.name,\n namespace: spec.namespace || '',\n version: spec.version || '1.0.0',\n description: spec.description || '',\n type: spec.type,\n isLocal: false // This is from an external registry\n },\n compiledAt: new Date(),\n lastUsed: new Date(),\n useCount: 1,\n specHash: specHash // Store the hash for future comparison\n });\n \n // Track reference\n if (referenceId) {\n this.addComponentReference(key, referenceId);\n }\n \n if (this.debug) {\n console.log(`🎯 [ComponentRegistryService] Successfully compiled external component: ${spec.name}`);\n }\n \n // Call the factory function to get the ComponentObject\n return compilationResult.component.factory(this.runtimeContext);\n } catch (error) {\n console.error(`❌ [ComponentRegistryService] Failed to fetch from external registry:`, error);\n throw error;\n }\n }\n \n /**\n * Get component specification from database or external registry\n */\n async getComponentSpec(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentSpec> {\n await this.initialize(contextUser);\n \n const component = this.componentEngine.Components.find((c: MJComponentEntity) => c.ID === componentId);\n if (!component) {\n throw new Error(`Component not found: ${componentId}`);\n }\n \n if (!component.SourceRegistryID) {\n // LOCAL: Use specification from database\n if (!component.Specification) {\n throw new Error(`Local component ${component.Name} has no specification`);\n }\n return JSON.parse(component.Specification);\n }\n \n // EXTERNAL: Check if we have a cached version\n if (component.Specification && component.LastSyncedAt) {\n // For now, always use cached version (no expiration)\n if (this.debug) {\n console.log(`Using cached external component: ${component.Name} (synced: ${component.LastSyncedAt})`);\n }\n return JSON.parse(component.Specification);\n }\n \n // Need to fetch from external registry\n const registry = this.componentEngine.ComponentRegistries?.find(\n r => r.ID === component.SourceRegistryID\n );\n \n if (!registry) {\n throw new Error(`Registry not found: ${component.SourceRegistryID}`);\n }\n \n // Try GraphQL client first if available\n let spec: ComponentSpec;\n \n if (this.graphQLClient) {\n if (this.debug) {\n console.log(`Fetching from registry via GraphQL: ${component.Name}`);\n }\n \n const result = await this.graphQLClient.GetRegistryComponent({\n registryName: registry.Name,\n namespace: component.Namespace || '',\n name: component.Name,\n version: component.Version\n });\n \n if (!result) {\n throw new Error(`Component not found in registry: ${component.Name}`);\n }\n \n spec = result;\n } else {\n // Fallback to direct HTTP if no GraphQL client\n spec = await this.fetchFromExternalRegistry(\n registry.URI || '',\n component.Name,\n component.Namespace || '',\n component.Version,\n this.getRegistryApiKey(registry.ID)\n );\n }\n \n // Store in local database for future use\n await this.cacheExternalComponent(componentId, spec, contextUser);\n \n return spec;\n }\n \n /**\n * Fetch component from external registry via HTTP\n */\n private async fetchFromExternalRegistry(\n uri: string,\n name: string,\n namespace: string,\n version: string,\n apiKey?: string\n ): Promise<ComponentSpec> {\n const url = `${uri}/components/${encodeURIComponent(namespace)}/${encodeURIComponent(name)}/${version}`;\n \n const headers: HeadersInit = {\n 'Accept': 'application/json'\n };\n \n if (apiKey) {\n headers['Authorization'] = `Bearer ${apiKey}`;\n }\n \n if (this.debug) {\n console.log(`Fetching from external registry: ${url}`);\n }\n \n const response = await fetch(url, { headers });\n \n if (!response.ok) {\n throw new Error(`Registry fetch failed: ${response.status} ${response.statusText}`);\n }\n \n const spec = await response.json() as ComponentSpec;\n return spec;\n }\n \n /**\n * Cache an external component in the local database\n */\n private async cacheExternalComponent(\n componentId: string,\n spec: ComponentSpec,\n contextUser?: UserInfo\n ): Promise<void> {\n // Get the actual entity object to save\n const md = new Metadata();\n const componentEntity = await md.GetEntityObject<MJComponentEntity>('MJ: Components', contextUser);\n \n // Load the existing component\n if (!await componentEntity.Load(componentId)) {\n throw new Error(`Failed to load component entity: ${componentId}`);\n }\n \n // Update with fetched specification and all fields from spec\n componentEntity.Specification = JSON.stringify(spec);\n componentEntity.LastSyncedAt = new Date();\n \n // Set ReplicatedAt only on first fetch\n if (!componentEntity.ReplicatedAt) {\n componentEntity.ReplicatedAt = new Date();\n }\n \n // Update all fields from the spec with strong typing\n if (spec.name) {\n componentEntity.Name = spec.name;\n }\n \n if (spec.namespace) {\n componentEntity.Namespace = spec.namespace;\n }\n \n if (spec.version) {\n componentEntity.Version = spec.version;\n }\n \n if (spec.title) {\n componentEntity.Title = spec.title;\n }\n \n if (spec.description) {\n componentEntity.Description = spec.description;\n }\n \n if (spec.type) {\n // Map spec type to entity type (entity has specific enum values)\n const typeMap: Record<string, MJComponentEntity['Type']> = {\n 'report': 'Report',\n 'dashboard': 'Dashboard',\n 'form': 'Form',\n 'table': 'Table',\n 'chart': 'Chart',\n 'navigation': 'Navigation',\n 'search': 'Search',\n 'widget': 'Widget',\n 'utility': 'Utility',\n 'other': 'Other'\n };\n \n const mappedType = typeMap[spec.type.toLowerCase()];\n if (mappedType) {\n componentEntity.Type = mappedType;\n }\n }\n \n if (spec.functionalRequirements) {\n componentEntity.FunctionalRequirements = spec.functionalRequirements;\n }\n \n if (spec.technicalDesign) {\n componentEntity.TechnicalDesign = spec.technicalDesign;\n }\n \n // Save back to database\n const result = await componentEntity.Save();\n if (!result) {\n throw new Error(`Failed to save cached component: ${componentEntity.Name}\\n${componentEntity.LatestResult?.CompleteMessage || 'Unknown error'}`);\n }\n \n if (this.debug) {\n console.log(`Cached external component: ${componentEntity.Name} at ${componentEntity.LastSyncedAt}`);\n }\n \n // Refresh metadata cache after saving\n await this.componentEngine.Config(true, contextUser);\n }\n \n /**\n * Load component dependencies from database\n */\n async loadDependencies(\n componentId: string,\n contextUser?: UserInfo\n ): Promise<ComponentDependencyInfo[]> {\n await this.initialize(contextUser);\n \n // Get dependencies from metadata cache\n const dependencies = this.componentEngine.ComponentDependencies?.filter(\n d => d.ComponentID === componentId\n ) || [];\n \n const result: ComponentDependencyInfo[] = [];\n \n for (const dep of dependencies) {\n // Find the dependency component\n const depComponent = this.componentEngine.Components.find(\n (c: MJComponentEntity) => c.ID === dep.DependencyComponentID\n );\n \n if (depComponent) {\n result.push({\n name: depComponent.Name,\n namespace: depComponent.Namespace || '',\n version: depComponent.Version, // Version comes from the linked Component record\n isRequired: true, // All dependencies are required in MemberJunction\n location: depComponent.SourceRegistryID ? 'registry' : 'embedded',\n sourceRegistryID: depComponent.SourceRegistryID\n });\n }\n }\n \n return result;\n }\n \n /**\n * Resolve full dependency tree for a component\n */\n async resolveDependencyTree(\n componentId: string,\n contextUser?: UserInfo,\n visited = new Set<string>()\n ): Promise<DependencyTree> {\n if (visited.has(componentId)) {\n return { \n componentId, \n circular: true \n };\n }\n visited.add(componentId);\n \n await this.initialize(contextUser);\n \n const component = this.componentEngine.Components.find((c: MJComponentEntity) => c.ID === componentId);\n if (!component) {\n return { componentId, dependencies: [] };\n }\n \n // Get direct dependencies\n const directDeps = await this.loadDependencies(componentId, contextUser);\n \n // Recursively resolve each dependency\n const dependencies: DependencyTree[] = [];\n for (const dep of directDeps) {\n // Find the dependency component\n const depComponent = this.componentEngine.Components.find(\n c => c.Name.trim().toLowerCase() === dep.name.trim().toLowerCase() && \n c.Namespace?.trim().toLowerCase() === dep.namespace?.trim().toLowerCase()\n );\n \n if (depComponent) {\n const subTree = await this.resolveDependencyTree(\n depComponent.ID, \n contextUser, \n visited\n );\n dependencies.push(subTree);\n }\n }\n \n return {\n componentId,\n name: component.Name,\n namespace: component.Namespace || undefined,\n version: component.Version,\n dependencies,\n totalCount: dependencies.reduce((sum, d) => sum + (d.totalCount || 1), 1)\n };\n }\n \n /**\n * Get components to load in dependency order\n */\n async getComponentsToLoad(\n rootComponentId: string,\n contextUser?: UserInfo\n ): Promise<string[]> {\n const tree = await this.resolveDependencyTree(rootComponentId, contextUser);\n \n // Flatten tree in dependency order (depth-first)\n const ordered: string[] = [];\n const processNode = (node: DependencyTree) => {\n if (node.dependencies) {\n node.dependencies.forEach(processNode);\n }\n if (!ordered.includes(node.componentId)) {\n ordered.push(node.componentId);\n }\n };\n processNode(tree);\n \n return ordered;\n }\n \n /**\n * Add a reference to a component\n */\n private addComponentReference(componentKey: string, referenceId: string): void {\n if (!this.componentReferences.has(componentKey)) {\n this.componentReferences.set(componentKey, new Set());\n }\n this.componentReferences.get(componentKey)!.add(referenceId);\n }\n \n /**\n * Remove a reference to a component\n */\n removeComponentReference(componentKey: string, referenceId: string): void {\n const refs = this.componentReferences.get(componentKey);\n if (refs) {\n refs.delete(referenceId);\n \n // If no more references and cache cleanup is enabled\n if (refs.size === 0) {\n this.considerCacheEviction(componentKey);\n }\n }\n }\n \n /**\n * Consider evicting a component from cache\n */\n private considerCacheEviction(componentKey: string): void {\n const cached = this.compiledComponentCache.get(componentKey);\n if (cached) {\n const timeSinceLastUse = Date.now() - cached.lastUsed.getTime();\n const evictionThreshold = 5 * 60 * 1000; // 5 minutes\n \n if (timeSinceLastUse > evictionThreshold) {\n if (this.debug) {\n console.log(`🗑️ Evicting unused component from cache: ${componentKey}`);\n }\n this.compiledComponentCache.delete(componentKey);\n }\n }\n }\n \n /**\n * Get API key for a registry from secure configuration\n * @param registryId - Registry ID\n * @returns API key or undefined\n */\n private getRegistryApiKey(registryId: string): string | undefined {\n // API keys should be stored in environment variables or secure configuration\n // Format: REGISTRY_API_KEY_{registryId} or similar\n // This is a placeholder - actual implementation would depend on the security infrastructure\n const envKey = `REGISTRY_API_KEY_${registryId.replace(/-/g, '_').toUpperCase()}`;\n return process.env[envKey];\n }\n \n /**\n * Get cache statistics\n */\n getCacheStats(): {\n compiledComponents: number;\n totalUseCount: number;\n memoryEstimate: string;\n } {\n let totalUseCount = 0;\n this.compiledComponentCache.forEach(cached => {\n totalUseCount += cached.useCount;\n });\n \n return {\n compiledComponents: this.compiledComponentCache.size,\n totalUseCount,\n memoryEstimate: `~${(this.compiledComponentCache.size * 50)}KB` // Rough estimate\n };\n }\n \n /**\n * Clear all caches\n */\n clearCache(): void {\n if (this.debug) {\n console.log('🧹 Clearing all component caches');\n }\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n }\n\n /**\n * Force clear all compiled components\n * Used for Component Studio to ensure fresh loads\n */\n forceClearAll(): void {\n this.compiledComponentCache.clear();\n this.componentReferences.clear();\n console.log('🧹 Component cache force cleared');\n }\n\n /**\n * Reset the singleton instance\n * Forces new instance creation on next access\n */\n static reset(): void {\n if (ComponentRegistryService.instance) {\n ComponentRegistryService.instance.forceClearAll();\n ComponentRegistryService.instance = null;\n }\n }\n \n /**\n * Generate a cache key for a component\n */\n private getComponentKey(\n name: string, \n namespace: string | null | undefined, \n version: string, \n sourceRegistryId: string | null | undefined\n ): string {\n const registryPart = sourceRegistryId || 'local';\n const namespacePart = namespace || 'global';\n return `${registryPart}/${namespacePart}/${name}@${version}`;\n }\n}"]}
|
|
@@ -3,7 +3,7 @@ import { ComponentCompiler } from '../compiler';
|
|
|
3
3
|
import { ComponentRegistry } from '../registry';
|
|
4
4
|
import { ComponentSpec, ComponentStyles } from '@memberjunction/interactive-component-types';
|
|
5
5
|
import { UserInfo } from '@memberjunction/core';
|
|
6
|
-
import {
|
|
6
|
+
import { MJComponentLibraryEntity } from '@memberjunction/core-entities';
|
|
7
7
|
export interface HierarchyRegistrationResult {
|
|
8
8
|
success: boolean;
|
|
9
9
|
registeredComponents: string[];
|
|
@@ -22,7 +22,7 @@ export interface HierarchyRegistrationOptions {
|
|
|
22
22
|
version?: string;
|
|
23
23
|
continueOnError?: boolean;
|
|
24
24
|
allowOverride?: boolean;
|
|
25
|
-
allLibraries:
|
|
25
|
+
allLibraries: MJComponentLibraryEntity[];
|
|
26
26
|
debug?: boolean;
|
|
27
27
|
contextUser?: UserInfo;
|
|
28
28
|
}
|
|
@@ -38,7 +38,7 @@ export declare class ComponentHierarchyRegistrar {
|
|
|
38
38
|
namespace?: string;
|
|
39
39
|
version?: string;
|
|
40
40
|
allowOverride?: boolean;
|
|
41
|
-
allLibraries:
|
|
41
|
+
allLibraries: MJComponentLibraryEntity[];
|
|
42
42
|
}): Promise<{
|
|
43
43
|
success: boolean;
|
|
44
44
|
error?: ComponentRegistrationError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-hierarchy.d.ts","sourceRoot":"","sources":["../../src/runtime/component-hierarchy.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,cAAc,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAA4C,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"component-hierarchy.d.ts","sourceRoot":"","sources":["../../src/runtime/component-hierarchy.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,cAAc,EAEf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAA4C,MAAM,sBAAsB,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAKzE,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAKD,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,aAAa,GAAG,cAAc,GAAG,YAAY,CAAC;CACtD;AAKD,MAAM,WAAW,4BAA4B;IAE3C,MAAM,CAAC,EAAE,eAAe,CAAC;IAEzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,aAAa,CAAC,EAAE,OAAO,CAAC;IAIxB,YAAY,EAAE,wBAAwB,EAAE,CAAC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,WAAW,CAAC,EAAE,QAAQ,CAAC;CACxB;AAKD,qBAAa,2BAA2B;IAEpC,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;gBAFd,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc;YAM1B,sBAAsB;IA2C9B,iBAAiB,CACrB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,2BAA2B,CAAC;IAuLjC,uBAAuB,CAC3B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE;QACP,MAAM,CAAC,EAAE,eAAe,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,YAAY,EAAE,wBAAwB,EAAE,CAAC;KAC1C,GACA,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,0BAA0B,CAAA;KAAE,CAAC;YAuHtD,uBAAuB;CAyCtC;AAWD,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,iBAAiB,EAC3B,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,2BAA2B,CAAC,CAGtC;AAOD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,EAAE,CA2BnE;AAOD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE,CASlF;AAQD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,aAAa,EACvB,YAAY,GAAE,OAAe,GAC5B,MAAM,CAaR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-hierarchy.js","sourceRoot":"","sources":["../../src/runtime/component-hierarchy.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Component hierarchy registration utilities for MemberJunction React Runtime.\n * Provides functionality to register a hierarchy of components from Skip component specifications.\n * @module @memberjunction/react-runtime/hierarchy\n */\n\nimport {\n CompilationResult,\n CompileOptions,\n RuntimeContext,\n CompiledComponent\n} from '../types';\nimport { ComponentCompiler } from '../compiler';\nimport { ComponentRegistry } from '../registry';\n\nimport { ComponentSpec, ComponentStyles } from '@memberjunction/interactive-component-types';\nimport { UserInfo, Metadata, LogStatus, GetProductionStatus } from '@memberjunction/core';\nimport { ComponentLibraryEntity } from '@memberjunction/core-entities';\n\n/**\n * Result of a hierarchy registration operation\n */\nexport interface HierarchyRegistrationResult {\n success: boolean;\n registeredComponents: string[];\n errors: ComponentRegistrationError[];\n warnings: string[];\n /** The fully resolved component specification with all dependencies and libraries */\n resolvedSpec?: ComponentSpec;\n}\n\n/**\n * Error information for component registration\n */\nexport interface ComponentRegistrationError {\n componentName: string;\n error: string;\n phase: 'compilation' | 'registration' | 'validation';\n}\n\n/**\n * Options for hierarchy registration\n */\nexport interface HierarchyRegistrationOptions {\n /** Component styles to apply to all components */\n styles?: ComponentStyles;\n /** Namespace for component registration */\n namespace?: string;\n /** Version for component registration */\n version?: string;\n /** Whether to continue on errors */\n continueOnError?: boolean;\n /** Whether to override existing components */\n allowOverride?: boolean;\n /**\n * Required, metadata for all possible libraries allowed by the system\n */\n allLibraries: ComponentLibraryEntity[];\n debug?: boolean;\n /** Optional user context for fetching from external registries */\n contextUser?: UserInfo;\n}\n\n/**\n * Utility class for registering component hierarchies\n */\nexport class ComponentHierarchyRegistrar {\n constructor(\n private compiler: ComponentCompiler,\n private registry: ComponentRegistry,\n private runtimeContext: RuntimeContext\n ) {}\n \n /**\n * Fetches a component specification from an external registry\n */\n private async fetchExternalComponent(\n spec: ComponentSpec,\n contextUser?: UserInfo\n ): Promise<ComponentSpec | null> {\n try {\n const provider = Metadata?.Provider;\n if (!provider || !(provider as any).ExecuteGQL) {\n console.warn('⚠️ [ComponentHierarchyRegistrar] No GraphQL provider available for external registry fetch');\n return null;\n }\n \n // Dynamically import the GraphQL client to avoid circular dependencies\n const { GraphQLComponentRegistryClient } = await import('@memberjunction/graphql-dataprovider');\n const graphQLClient = new GraphQLComponentRegistryClient(provider as any);\n \n const fullSpec = await graphQLClient.GetRegistryComponent({\n registryName: spec.registry!,\n namespace: spec.namespace || 'Global',\n name: spec.name,\n version: spec.version || 'latest'\n });\n\n if (fullSpec && fullSpec.code) {\n if (!GetProductionStatus()) {\n LogStatus(`✅ [ComponentHierarchyRegistrar] Fetched external component ${spec.name} with code (${fullSpec.code.length} chars)`);\n }\n return fullSpec;\n } else {\n console.warn(`⚠️ [ComponentHierarchyRegistrar] Failed to fetch external component ${spec.name} or no code`);\n return null;\n }\n } catch (error) {\n console.error(`❌ [ComponentHierarchyRegistrar] Error fetching external component ${spec.name}:`, error);\n return null;\n }\n }\n\n /**\n * Registers a complete component hierarchy from a root specification\n * @param rootSpec - The root component specification\n * @param options - Registration options\n * @returns Registration result with details about success/failures\n */\n async registerHierarchy(\n rootSpec: ComponentSpec,\n options: HierarchyRegistrationOptions\n ): Promise<HierarchyRegistrationResult> {\n // If this is an external registry component without code, fetch it first\n let resolvedRootSpec = rootSpec;\n if (rootSpec.location === 'registry' && rootSpec.registry && !rootSpec.code) {\n if (!GetProductionStatus()) {\n LogStatus(`🌐 [ComponentHierarchyRegistrar] Fetching external registry component: ${rootSpec.registry}/${rootSpec.name}`);\n }\n resolvedRootSpec = await this.fetchExternalComponent(rootSpec, options.contextUser) || rootSpec;\n }\n const {\n styles,\n namespace = 'Global',\n version = 'v1',\n continueOnError = true,\n allowOverride = true\n } = options;\n\n const registeredComponents: string[] = [];\n const errors: ComponentRegistrationError[] = [];\n const warnings: string[] = [];\n\n if (!GetProductionStatus()) {\n LogStatus('🌳 ComponentHierarchyRegistrar.registerHierarchy:', undefined, {\n rootComponent: resolvedRootSpec.name,\n hasLibraries: !!(resolvedRootSpec.libraries && resolvedRootSpec.libraries.length > 0),\n libraryCount: resolvedRootSpec.libraries?.length || 0\n });\n }\n\n // PHASE 1: Compile all components first (but defer factory execution)\n const compiledMap = new Map<string, CompiledComponent>();\n const specMap = new Map<string, ComponentSpec>();\n const allLoadedLibraries = new Map<string, any>(); // Track all loaded libraries\n \n // Helper to compile a component without calling its factory\n const compileOnly = async (spec: ComponentSpec): Promise<{ success: boolean; error?: ComponentRegistrationError }> => {\n if (!spec.code) return { success: true };\n \n try {\n // Filter out invalid library entries before compilation\n const validLibraries = spec.libraries?.filter(lib => {\n if (!lib || typeof lib !== 'object') return false;\n if (!lib.name || lib.name === 'unknown' || lib.name === 'null' || lib.name === 'undefined') return false;\n if (!lib.globalVariable || lib.globalVariable === 'undefined' || lib.globalVariable === 'null') return false;\n return true;\n });\n \n const compileOptions: CompileOptions = {\n componentName: spec.name,\n componentCode: spec.code,\n styles,\n libraries: validLibraries,\n dependencies: spec.dependencies,\n allLibraries: options.allLibraries\n };\n \n const result = await this.compiler.compile(compileOptions);\n if (result.success && result.component) {\n compiledMap.set(spec.name, result.component);\n specMap.set(spec.name, spec);\n \n // Extract and accumulate loaded libraries from the compilation\n if (result.loadedLibraries) {\n result.loadedLibraries.forEach((value, key) => {\n if (!allLoadedLibraries.has(key)) {\n allLoadedLibraries.set(key, value);\n if (!GetProductionStatus()) {\n LogStatus(`📚 [registerHierarchy] Added library ${key} to accumulated libraries`);\n }\n }\n });\n }\n \n return { success: true };\n } else {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: result.error?.message || 'Unknown compilation error',\n phase: 'compilation'\n }\n };\n }\n } catch (error) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: error instanceof Error ? error.message : String(error),\n phase: 'compilation'\n }\n };\n }\n };\n \n // Compile all components in hierarchy\n const compileQueue = [resolvedRootSpec];\n const visited = new Set<string>();\n \n while (compileQueue.length > 0) {\n let spec = compileQueue.shift()!;\n if (visited.has(spec.name)) continue;\n visited.add(spec.name);\n \n // If this is an external registry component without code, fetch it first\n if (spec.location === 'registry' && spec.registry && !spec.code) {\n const fetched = await this.fetchExternalComponent(spec, options.contextUser);\n if (fetched) {\n spec = fetched;\n } else {\n console.warn(`⚠️ [ComponentHierarchyRegistrar] Could not fetch external component ${spec.name}, skipping`);\n continue;\n }\n }\n \n const result = await compileOnly(spec);\n if (!result.success) {\n errors.push(result.error!);\n if (!continueOnError) {\n return { success: false, registeredComponents, errors, warnings, resolvedSpec: resolvedRootSpec };\n }\n }\n \n if (spec.dependencies) {\n compileQueue.push(...spec.dependencies);\n }\n }\n \n // Add all accumulated libraries to runtime context\n if (allLoadedLibraries.size > 0) {\n if (!this.runtimeContext.libraries) {\n this.runtimeContext.libraries = {};\n }\n allLoadedLibraries.forEach((value, key) => {\n this.runtimeContext.libraries![key] = value;\n if (!GetProductionStatus()) {\n LogStatus(`✅ [registerHierarchy] Added ${key} to runtime context libraries`);\n }\n });\n }\n \n // PHASE 2: Execute all factories with components available\n for (const [name, compiled] of compiledMap) {\n const spec = specMap.get(name)!;\n \n // Build components object from all registered components\n const components: Record<string, any> = {};\n for (const [depName, depCompiled] of compiledMap) {\n // Call factory to get ComponentObject, then extract React component\n const depObject = depCompiled.factory(this.runtimeContext, styles);\n components[depName] = depObject.component;\n }\n \n // Now call factory with components available\n const componentObject = compiled.factory(this.runtimeContext, styles, components);\n \n // Register in registry\n this.registry.register(\n spec.name,\n componentObject,\n spec.namespace || namespace,\n version\n );\n \n registeredComponents.push(spec.name);\n }\n\n return {\n success: errors.length === 0,\n registeredComponents,\n errors,\n warnings,\n resolvedSpec: resolvedRootSpec\n };\n }\n\n /**\n * Registers a single component from a specification\n * @param spec - Component specification\n * @param options - Registration options\n * @returns Registration result for this component\n */\n async registerSingleComponent(\n spec: ComponentSpec,\n options: {\n styles?: ComponentStyles;\n namespace?: string;\n version?: string;\n allowOverride?: boolean;\n allLibraries: ComponentLibraryEntity[];\n }\n ): Promise<{ success: boolean; error?: ComponentRegistrationError }> {\n const { styles, namespace = 'Global', version = 'v1', allowOverride = true } = options;\n\n try {\n // Skip if no component code\n if (!spec.code) {\n return {\n success: true,\n error: undefined\n };\n }\n\n // Check if component already exists\n const existingComponent = this.registry.get(spec.name, namespace, version);\n if (existingComponent && !allowOverride) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: `Component already registered in ${namespace}/${version}`,\n phase: 'registration'\n }\n };\n }\n\n // Filter out invalid library entries before compilation\n const validLibraries = spec.libraries?.filter(lib => {\n if (!lib || typeof lib !== 'object') return false;\n if (!lib.name || lib.name === 'unknown' || lib.name === 'null' || lib.name === 'undefined') return false;\n if (!lib.globalVariable || lib.globalVariable === 'undefined' || lib.globalVariable === 'null') return false;\n return true;\n });\n\n if (!GetProductionStatus()) {\n LogStatus(`🔧 Compiling component ${spec.name} with libraries:`, undefined, {\n originalCount: spec.libraries?.length || 0,\n filteredCount: validLibraries?.length || 0,\n libraries: validLibraries?.map(l => l.name) || []\n });\n }\n\n // Compile the component\n const compileOptions: CompileOptions = {\n componentName: spec.name,\n componentCode: spec.code,\n styles,\n libraries: validLibraries, // Pass along filtered library dependencies\n dependencies: spec.dependencies, // Pass along child component dependencies\n allLibraries: options.allLibraries\n };\n\n const compilationResult = await this.compiler.compile(compileOptions);\n\n if (!compilationResult.success) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: compilationResult.error?.message || 'Unknown compilation error',\n phase: 'compilation'\n }\n };\n }\n\n // Add loaded libraries to runtime context\n if (compilationResult.loadedLibraries && compilationResult.loadedLibraries.size > 0) {\n if (!this.runtimeContext.libraries) {\n this.runtimeContext.libraries = {};\n }\n compilationResult.loadedLibraries.forEach((value, key) => {\n this.runtimeContext.libraries![key] = value;\n if (!GetProductionStatus()) {\n LogStatus(`✅ [registerSingleComponent] Added ${key} to runtime context libraries`);\n }\n });\n }\n\n // Call the factory to create the ComponentObject\n // IMPORTANT: We don't pass components here because child components may not be registered yet\n // Components are resolved later when the component is actually rendered\n if (!GetProductionStatus()) {\n LogStatus(`🏭 Calling factory for ${spec.name} with runtime context:`, undefined, {\n hasReact: !!this.runtimeContext.React,\n hasReactDOM: !!this.runtimeContext.ReactDOM,\n libraryCount: Object.keys(this.runtimeContext.libraries || {}).length\n });\n }\n const componentObject = compilationResult.component!.factory(this.runtimeContext, styles);\n\n // Register the full ComponentObject (not just the React component)\n this.registry.register(\n spec.name,\n componentObject,\n spec.namespace || namespace,\n version\n );\n\n return { success: true };\n\n } catch (error) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: error instanceof Error ? error.message : String(error),\n phase: 'registration'\n }\n };\n }\n }\n\n /**\n * Recursively registers child components\n * @param children - Array of child component specifications\n * @param options - Registration options\n * @param registeredComponents - Array to track registered components\n * @param errors - Array to collect errors\n * @param warnings - Array to collect warnings\n */\n private async registerChildComponents(\n children: ComponentSpec[],\n options: HierarchyRegistrationOptions,\n registeredComponents: string[],\n errors: ComponentRegistrationError[],\n warnings: string[]\n ): Promise<void> {\n for (const child of children) {\n // Register this child\n const childResult = await this.registerSingleComponent(child, {\n styles: options.styles,\n namespace: options.namespace,\n version: options.version,\n allowOverride: options.allowOverride,\n allLibraries: options.allLibraries\n });\n\n if (childResult.success) {\n if (child.code) {\n registeredComponents.push(child.name);\n }\n } else {\n errors.push(childResult.error!);\n if (!options.continueOnError) {\n return;\n }\n }\n\n // Register nested children recursively\n const nestedChildren = child.dependencies || [];\n if (nestedChildren.length > 0) {\n await this.registerChildComponents(\n nestedChildren,\n options,\n registeredComponents,\n errors,\n warnings\n );\n }\n }\n }\n}\n\n/**\n * Convenience function to register a component hierarchy\n * @param rootSpec - The root component specification\n * @param compiler - Component compiler instance\n * @param registry - Component registry instance\n * @param runtimeContext - Runtime context with React and other libraries\n * @param options - Registration options\n * @returns Registration result\n */\nexport async function registerComponentHierarchy(\n rootSpec: ComponentSpec,\n compiler: ComponentCompiler,\n registry: ComponentRegistry,\n runtimeContext: RuntimeContext,\n options: HierarchyRegistrationOptions\n): Promise<HierarchyRegistrationResult> {\n const registrar = new ComponentHierarchyRegistrar(compiler, registry, runtimeContext);\n return registrar.registerHierarchy(rootSpec, options);\n}\n\n/**\n * Validates a component specification before registration\n * @param spec - Component specification to validate\n * @returns Array of validation errors (empty if valid)\n */\nexport function validateComponentSpec(spec: ComponentSpec): string[] {\n const errors: string[] = [];\n\n if (!spec.name) {\n errors.push('Component specification must have a name');\n }\n\n // If componentCode is provided, do basic validation\n if (spec.code) {\n if (typeof spec.code !== 'string') {\n errors.push(`Component code for ${spec.name} must be a string`);\n }\n if (spec.code.trim().length === 0) {\n errors.push(`Component code for ${spec.name} cannot be empty`);\n }\n }\n\n // Validate child components recursively\n const children = spec.dependencies || [];\n children.forEach((child, index) => {\n const childErrors = validateComponentSpec(child);\n childErrors.forEach(error => {\n errors.push(`Child ${index} (${child.name || 'unnamed'}): ${error}`);\n });\n });\n\n return errors;\n}\n\n/**\n * Flattens a component hierarchy into a list of all components\n * @param rootSpec - The root component specification\n * @returns Array of all component specifications in the hierarchy\n */\nexport function flattenComponentHierarchy(rootSpec: ComponentSpec): ComponentSpec[] {\n const components: ComponentSpec[] = [rootSpec];\n \n const children = rootSpec.dependencies || [];\n children.forEach(child => {\n components.push(...flattenComponentHierarchy(child));\n });\n\n return components;\n}\n\n/**\n * Counts the total number of components in a hierarchy\n * @param rootSpec - The root component specification\n * @param includeEmpty - Whether to include components without code\n * @returns Total component count\n */\nexport function countComponentsInHierarchy(\n rootSpec: ComponentSpec,\n includeEmpty: boolean = false\n): number {\n let count = 0;\n \n if (includeEmpty || rootSpec.code) {\n count = 1;\n }\n\n const children = rootSpec.dependencies || [];\n children.forEach(child => {\n count += countComponentsInHierarchy(child, includeEmpty);\n });\n\n return count;\n}"]}
|
|
1
|
+
{"version":3,"file":"component-hierarchy.js","sourceRoot":"","sources":["../../src/runtime/component-hierarchy.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAY,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAkD1F,MAAM,OAAO,2BAA2B;IACtC,YACU,QAA2B,EAC3B,QAA2B,EAC3B,cAA8B;QAF9B,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,aAAQ,GAAR,QAAQ,CAAmB;QAC3B,mBAAc,GAAd,cAAc,CAAgB;IACrC,CAAC;IAKI,KAAK,CAAC,sBAAsB,CAClC,IAAmB,EACnB,WAAsB;QAEtB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ,CAAC;YACpC,IAAI,CAAC,QAAQ,IAAI,CAAE,QAAgB,CAAC,UAAU,EAAE,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;gBAC3G,OAAO,IAAI,CAAC;YACd,CAAC;YAGD,MAAM,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,CAAC;YAChG,MAAM,aAAa,GAAG,IAAI,8BAA8B,CAAC,QAAe,CAAC,CAAC;YAE1E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,oBAAoB,CAAC;gBACxD,YAAY,EAAE,IAAI,CAAC,QAAS;gBAC5B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,QAAQ;gBACrC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,QAAQ;aAClC,CAAC,CAAC;YAEH,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC9B,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBAC3B,SAAS,CAAC,8DAA8D,IAAI,CAAC,IAAI,eAAe,QAAQ,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;gBACjI,CAAC;gBACD,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,uEAAuE,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;gBAC5G,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qEAAqE,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACxG,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAQD,KAAK,CAAC,iBAAiB,CACrB,QAAuB,EACvB,OAAqC;QAGrC,IAAI,gBAAgB,GAAG,QAAQ,CAAC;QAChC,IAAI,QAAQ,CAAC,QAAQ,KAAK,UAAU,IAAI,QAAQ,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC5E,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC3B,SAAS,CAAC,0EAA0E,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5H,CAAC;YACD,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC;QAClG,CAAC;QACD,MAAM,EACJ,MAAM,EACN,SAAS,GAAG,QAAQ,EACpB,OAAO,GAAG,IAAI,EACd,eAAe,GAAG,IAAI,EACtB,aAAa,GAAG,IAAI,EACrB,GAAG,OAAO,CAAC;QAEZ,MAAM,oBAAoB,GAAa,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAiC,EAAE,CAAC;QAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC3B,SAAS,CAAC,mDAAmD,EAAE,SAAS,EAAE;gBACxE,aAAa,EAAE,gBAAgB,CAAC,IAAI;gBACpC,YAAY,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,IAAI,gBAAgB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACrF,YAAY,EAAE,gBAAgB,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;aACtD,CAAC,CAAC;QACL,CAAC;QAGD,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;QACjD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAe,CAAC;QAGlD,MAAM,WAAW,GAAG,KAAK,EAAE,IAAmB,EAAqE,EAAE;YACnH,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAEzC,IAAI,CAAC;gBAEH,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;oBAClD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBAClD,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;wBAAE,OAAO,KAAK,CAAC;oBACzG,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,KAAK,WAAW,IAAI,GAAG,CAAC,cAAc,KAAK,MAAM;wBAAE,OAAO,KAAK,CAAC;oBAC7G,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBAEH,MAAM,cAAc,GAAmB;oBACrC,aAAa,EAAE,IAAI,CAAC,IAAI;oBACxB,aAAa,EAAE,IAAI,CAAC,IAAI;oBACxB,MAAM;oBACN,SAAS,EAAE,cAAc;oBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;iBACnC,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACvC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAG7B,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;wBAC3B,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;4BAC5C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gCACjC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gCACnC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;oCAC3B,SAAS,CAAC,wCAAwC,GAAG,2BAA2B,CAAC,CAAC;gCACpF,CAAC;4BACH,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC;oBAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC3B,CAAC;qBAAM,CAAC;oBACN,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE;4BACL,aAAa,EAAE,IAAI,CAAC,IAAI;4BACxB,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,2BAA2B;4BAC3D,KAAK,EAAE,aAAa;yBACrB;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,aAAa,EAAE,IAAI,CAAC,IAAI;wBACxB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;wBAC7D,KAAK,EAAE,aAAa;qBACrB;iBACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAGF,MAAM,YAAY,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,IAAI,GAAG,YAAY,CAAC,KAAK,EAAG,CAAC;YACjC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAGvB,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC7E,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,GAAG,OAAO,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,uEAAuE,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC;oBAC3G,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAM,CAAC,CAAC;gBAC3B,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;gBACpG,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAGD,IAAI,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;gBACnC,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC;YACrC,CAAC;YACD,kBAAkB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACxC,IAAI,CAAC,cAAc,CAAC,SAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC5C,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;oBAC3B,SAAS,CAAC,+BAA+B,GAAG,+BAA+B,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAGD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAGhC,MAAM,UAAU,GAAwB,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,WAAW,EAAE,CAAC;gBAEjD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACnE,UAAU,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC;YAC5C,CAAC;YAGD,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAGlF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,IAAI,EACT,eAAe,EACf,IAAI,CAAC,SAAS,IAAI,SAAS,EAC3B,OAAO,CACR,CAAC;YAEF,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,oBAAoB;YACpB,MAAM;YACN,QAAQ;YACR,YAAY,EAAE,gBAAgB;SAC/B,CAAC;IACJ,CAAC;IAQD,KAAK,CAAC,uBAAuB,CAC3B,IAAmB,EACnB,OAMC;QAED,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,EAAE,OAAO,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAEvF,IAAI,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,SAAS;iBACjB,CAAC;YACJ,CAAC;YAGD,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3E,IAAI,iBAAiB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACxC,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,aAAa,EAAE,IAAI,CAAC,IAAI;wBACxB,KAAK,EAAE,mCAAmC,SAAS,IAAI,OAAO,EAAE;wBAChE,KAAK,EAAE,cAAc;qBACtB;iBACF,CAAC;YACJ,CAAC;YAGD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;gBAClD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAClD,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;oBAAE,OAAO,KAAK,CAAC;gBACzG,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,KAAK,WAAW,IAAI,GAAG,CAAC,cAAc,KAAK,MAAM;oBAAE,OAAO,KAAK,CAAC;gBAC7G,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC3B,SAAS,CAAC,0BAA0B,IAAI,CAAC,IAAI,kBAAkB,EAAE,SAAS,EAAE;oBAC1E,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;oBAC1C,aAAa,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;oBAC1C,SAAS,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;iBAClD,CAAC,CAAC;YACL,CAAC;YAGD,MAAM,cAAc,GAAmB;gBACrC,aAAa,EAAE,IAAI,CAAC,IAAI;gBACxB,aAAa,EAAE,IAAI,CAAC,IAAI;gBACxB,MAAM;gBACN,SAAS,EAAE,cAAc;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC;YAEF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAEtE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBAC/B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,aAAa,EAAE,IAAI,CAAC,IAAI;wBACxB,KAAK,EAAE,iBAAiB,CAAC,KAAK,EAAE,OAAO,IAAI,2BAA2B;wBACtE,KAAK,EAAE,aAAa;qBACrB;iBACF,CAAC;YACJ,CAAC;YAGD,IAAI,iBAAiB,CAAC,eAAe,IAAI,iBAAiB,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACpF,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;oBACnC,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,EAAE,CAAC;gBACrC,CAAC;gBACD,iBAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBACvD,IAAI,CAAC,cAAc,CAAC,SAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC5C,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;wBAC3B,SAAS,CAAC,qCAAqC,GAAG,+BAA+B,CAAC,CAAC;oBACrF,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAKD,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;gBAC3B,SAAS,CAAC,0BAA0B,IAAI,CAAC,IAAI,wBAAwB,EAAE,SAAS,EAAE;oBAChF,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK;oBACrC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ;oBAC3C,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM;iBACtE,CAAC,CAAC;YACL,CAAC;YACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,SAAU,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;YAG1F,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,IAAI,EACT,eAAe,EACf,IAAI,CAAC,SAAS,IAAI,SAAS,EAC3B,OAAO,CACR,CAAC;YAEF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAE3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,aAAa,EAAE,IAAI,CAAC,IAAI;oBACxB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC7D,KAAK,EAAE,cAAc;iBACtB;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAUO,KAAK,CAAC,uBAAuB,CACnC,QAAyB,EACzB,OAAqC,EACrC,oBAA8B,EAC9B,MAAoC,EACpC,QAAkB;QAElB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAE7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE;gBAC5D,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,YAAY,EAAE,OAAO,CAAC,YAAY;aACnC,CAAC,CAAC;YAEH,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAM,CAAC,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC7B,OAAO;gBACT,CAAC;YACH,CAAC;YAGD,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC;YAChD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,IAAI,CAAC,uBAAuB,CAChC,cAAc,EACd,OAAO,EACP,oBAAoB,EACpB,MAAM,EACN,QAAQ,CACT,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAWD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAAuB,EACvB,QAA2B,EAC3B,QAA2B,EAC3B,cAA8B,EAC9B,OAAqC;IAErC,MAAM,SAAS,GAAG,IAAI,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtF,OAAO,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAOD,MAAM,UAAU,qBAAqB,CAAC,IAAmB;IACvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;IAGD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,mBAAmB,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACjD,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,SAAS,MAAM,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,MAAM,UAAU,yBAAyB,CAAC,QAAuB;IAC/D,MAAM,UAAU,GAAoB,CAAC,QAAQ,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACvB,UAAU,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAQD,MAAM,UAAU,0BAA0B,CACxC,QAAuB,EACvB,eAAwB,KAAK;IAE7B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,YAAY,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,KAAK,GAAG,CAAC,CAAC;IACZ,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACvB,KAAK,IAAI,0BAA0B,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * @fileoverview Component hierarchy registration utilities for MemberJunction React Runtime.\n * Provides functionality to register a hierarchy of components from Skip component specifications.\n * @module @memberjunction/react-runtime/hierarchy\n */\n\nimport {\n CompilationResult,\n CompileOptions,\n RuntimeContext,\n CompiledComponent\n} from '../types';\nimport { ComponentCompiler } from '../compiler';\nimport { ComponentRegistry } from '../registry';\n\nimport { ComponentSpec, ComponentStyles } from '@memberjunction/interactive-component-types';\nimport { UserInfo, Metadata, LogStatus, GetProductionStatus } from '@memberjunction/core';\nimport { MJComponentLibraryEntity } from '@memberjunction/core-entities';\n\n/**\n * Result of a hierarchy registration operation\n */\nexport interface HierarchyRegistrationResult {\n success: boolean;\n registeredComponents: string[];\n errors: ComponentRegistrationError[];\n warnings: string[];\n /** The fully resolved component specification with all dependencies and libraries */\n resolvedSpec?: ComponentSpec;\n}\n\n/**\n * Error information for component registration\n */\nexport interface ComponentRegistrationError {\n componentName: string;\n error: string;\n phase: 'compilation' | 'registration' | 'validation';\n}\n\n/**\n * Options for hierarchy registration\n */\nexport interface HierarchyRegistrationOptions {\n /** Component styles to apply to all components */\n styles?: ComponentStyles;\n /** Namespace for component registration */\n namespace?: string;\n /** Version for component registration */\n version?: string;\n /** Whether to continue on errors */\n continueOnError?: boolean;\n /** Whether to override existing components */\n allowOverride?: boolean;\n /**\n * Required, metadata for all possible libraries allowed by the system\n */\n allLibraries: MJComponentLibraryEntity[];\n debug?: boolean;\n /** Optional user context for fetching from external registries */\n contextUser?: UserInfo;\n}\n\n/**\n * Utility class for registering component hierarchies\n */\nexport class ComponentHierarchyRegistrar {\n constructor(\n private compiler: ComponentCompiler,\n private registry: ComponentRegistry,\n private runtimeContext: RuntimeContext\n ) {}\n \n /**\n * Fetches a component specification from an external registry\n */\n private async fetchExternalComponent(\n spec: ComponentSpec,\n contextUser?: UserInfo\n ): Promise<ComponentSpec | null> {\n try {\n const provider = Metadata?.Provider;\n if (!provider || !(provider as any).ExecuteGQL) {\n console.warn('⚠️ [ComponentHierarchyRegistrar] No GraphQL provider available for external registry fetch');\n return null;\n }\n \n // Dynamically import the GraphQL client to avoid circular dependencies\n const { GraphQLComponentRegistryClient } = await import('@memberjunction/graphql-dataprovider');\n const graphQLClient = new GraphQLComponentRegistryClient(provider as any);\n \n const fullSpec = await graphQLClient.GetRegistryComponent({\n registryName: spec.registry!,\n namespace: spec.namespace || 'Global',\n name: spec.name,\n version: spec.version || 'latest'\n });\n\n if (fullSpec && fullSpec.code) {\n if (!GetProductionStatus()) {\n LogStatus(`✅ [ComponentHierarchyRegistrar] Fetched external component ${spec.name} with code (${fullSpec.code.length} chars)`);\n }\n return fullSpec;\n } else {\n console.warn(`⚠️ [ComponentHierarchyRegistrar] Failed to fetch external component ${spec.name} or no code`);\n return null;\n }\n } catch (error) {\n console.error(`❌ [ComponentHierarchyRegistrar] Error fetching external component ${spec.name}:`, error);\n return null;\n }\n }\n\n /**\n * Registers a complete component hierarchy from a root specification\n * @param rootSpec - The root component specification\n * @param options - Registration options\n * @returns Registration result with details about success/failures\n */\n async registerHierarchy(\n rootSpec: ComponentSpec,\n options: HierarchyRegistrationOptions\n ): Promise<HierarchyRegistrationResult> {\n // If this is an external registry component without code, fetch it first\n let resolvedRootSpec = rootSpec;\n if (rootSpec.location === 'registry' && rootSpec.registry && !rootSpec.code) {\n if (!GetProductionStatus()) {\n LogStatus(`🌐 [ComponentHierarchyRegistrar] Fetching external registry component: ${rootSpec.registry}/${rootSpec.name}`);\n }\n resolvedRootSpec = await this.fetchExternalComponent(rootSpec, options.contextUser) || rootSpec;\n }\n const {\n styles,\n namespace = 'Global',\n version = 'v1',\n continueOnError = true,\n allowOverride = true\n } = options;\n\n const registeredComponents: string[] = [];\n const errors: ComponentRegistrationError[] = [];\n const warnings: string[] = [];\n\n if (!GetProductionStatus()) {\n LogStatus('🌳 ComponentHierarchyRegistrar.registerHierarchy:', undefined, {\n rootComponent: resolvedRootSpec.name,\n hasLibraries: !!(resolvedRootSpec.libraries && resolvedRootSpec.libraries.length > 0),\n libraryCount: resolvedRootSpec.libraries?.length || 0\n });\n }\n\n // PHASE 1: Compile all components first (but defer factory execution)\n const compiledMap = new Map<string, CompiledComponent>();\n const specMap = new Map<string, ComponentSpec>();\n const allLoadedLibraries = new Map<string, any>(); // Track all loaded libraries\n \n // Helper to compile a component without calling its factory\n const compileOnly = async (spec: ComponentSpec): Promise<{ success: boolean; error?: ComponentRegistrationError }> => {\n if (!spec.code) return { success: true };\n \n try {\n // Filter out invalid library entries before compilation\n const validLibraries = spec.libraries?.filter(lib => {\n if (!lib || typeof lib !== 'object') return false;\n if (!lib.name || lib.name === 'unknown' || lib.name === 'null' || lib.name === 'undefined') return false;\n if (!lib.globalVariable || lib.globalVariable === 'undefined' || lib.globalVariable === 'null') return false;\n return true;\n });\n \n const compileOptions: CompileOptions = {\n componentName: spec.name,\n componentCode: spec.code,\n styles,\n libraries: validLibraries,\n dependencies: spec.dependencies,\n allLibraries: options.allLibraries\n };\n \n const result = await this.compiler.compile(compileOptions);\n if (result.success && result.component) {\n compiledMap.set(spec.name, result.component);\n specMap.set(spec.name, spec);\n \n // Extract and accumulate loaded libraries from the compilation\n if (result.loadedLibraries) {\n result.loadedLibraries.forEach((value, key) => {\n if (!allLoadedLibraries.has(key)) {\n allLoadedLibraries.set(key, value);\n if (!GetProductionStatus()) {\n LogStatus(`📚 [registerHierarchy] Added library ${key} to accumulated libraries`);\n }\n }\n });\n }\n \n return { success: true };\n } else {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: result.error?.message || 'Unknown compilation error',\n phase: 'compilation'\n }\n };\n }\n } catch (error) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: error instanceof Error ? error.message : String(error),\n phase: 'compilation'\n }\n };\n }\n };\n \n // Compile all components in hierarchy\n const compileQueue = [resolvedRootSpec];\n const visited = new Set<string>();\n \n while (compileQueue.length > 0) {\n let spec = compileQueue.shift()!;\n if (visited.has(spec.name)) continue;\n visited.add(spec.name);\n \n // If this is an external registry component without code, fetch it first\n if (spec.location === 'registry' && spec.registry && !spec.code) {\n const fetched = await this.fetchExternalComponent(spec, options.contextUser);\n if (fetched) {\n spec = fetched;\n } else {\n console.warn(`⚠️ [ComponentHierarchyRegistrar] Could not fetch external component ${spec.name}, skipping`);\n continue;\n }\n }\n \n const result = await compileOnly(spec);\n if (!result.success) {\n errors.push(result.error!);\n if (!continueOnError) {\n return { success: false, registeredComponents, errors, warnings, resolvedSpec: resolvedRootSpec };\n }\n }\n \n if (spec.dependencies) {\n compileQueue.push(...spec.dependencies);\n }\n }\n \n // Add all accumulated libraries to runtime context\n if (allLoadedLibraries.size > 0) {\n if (!this.runtimeContext.libraries) {\n this.runtimeContext.libraries = {};\n }\n allLoadedLibraries.forEach((value, key) => {\n this.runtimeContext.libraries![key] = value;\n if (!GetProductionStatus()) {\n LogStatus(`✅ [registerHierarchy] Added ${key} to runtime context libraries`);\n }\n });\n }\n \n // PHASE 2: Execute all factories with components available\n for (const [name, compiled] of compiledMap) {\n const spec = specMap.get(name)!;\n \n // Build components object from all registered components\n const components: Record<string, any> = {};\n for (const [depName, depCompiled] of compiledMap) {\n // Call factory to get ComponentObject, then extract React component\n const depObject = depCompiled.factory(this.runtimeContext, styles);\n components[depName] = depObject.component;\n }\n \n // Now call factory with components available\n const componentObject = compiled.factory(this.runtimeContext, styles, components);\n \n // Register in registry\n this.registry.register(\n spec.name,\n componentObject,\n spec.namespace || namespace,\n version\n );\n \n registeredComponents.push(spec.name);\n }\n\n return {\n success: errors.length === 0,\n registeredComponents,\n errors,\n warnings,\n resolvedSpec: resolvedRootSpec\n };\n }\n\n /**\n * Registers a single component from a specification\n * @param spec - Component specification\n * @param options - Registration options\n * @returns Registration result for this component\n */\n async registerSingleComponent(\n spec: ComponentSpec,\n options: {\n styles?: ComponentStyles;\n namespace?: string;\n version?: string;\n allowOverride?: boolean;\n allLibraries: MJComponentLibraryEntity[];\n }\n ): Promise<{ success: boolean; error?: ComponentRegistrationError }> {\n const { styles, namespace = 'Global', version = 'v1', allowOverride = true } = options;\n\n try {\n // Skip if no component code\n if (!spec.code) {\n return {\n success: true,\n error: undefined\n };\n }\n\n // Check if component already exists\n const existingComponent = this.registry.get(spec.name, namespace, version);\n if (existingComponent && !allowOverride) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: `Component already registered in ${namespace}/${version}`,\n phase: 'registration'\n }\n };\n }\n\n // Filter out invalid library entries before compilation\n const validLibraries = spec.libraries?.filter(lib => {\n if (!lib || typeof lib !== 'object') return false;\n if (!lib.name || lib.name === 'unknown' || lib.name === 'null' || lib.name === 'undefined') return false;\n if (!lib.globalVariable || lib.globalVariable === 'undefined' || lib.globalVariable === 'null') return false;\n return true;\n });\n\n if (!GetProductionStatus()) {\n LogStatus(`🔧 Compiling component ${spec.name} with libraries:`, undefined, {\n originalCount: spec.libraries?.length || 0,\n filteredCount: validLibraries?.length || 0,\n libraries: validLibraries?.map(l => l.name) || []\n });\n }\n\n // Compile the component\n const compileOptions: CompileOptions = {\n componentName: spec.name,\n componentCode: spec.code,\n styles,\n libraries: validLibraries, // Pass along filtered library dependencies\n dependencies: spec.dependencies, // Pass along child component dependencies\n allLibraries: options.allLibraries\n };\n\n const compilationResult = await this.compiler.compile(compileOptions);\n\n if (!compilationResult.success) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: compilationResult.error?.message || 'Unknown compilation error',\n phase: 'compilation'\n }\n };\n }\n\n // Add loaded libraries to runtime context\n if (compilationResult.loadedLibraries && compilationResult.loadedLibraries.size > 0) {\n if (!this.runtimeContext.libraries) {\n this.runtimeContext.libraries = {};\n }\n compilationResult.loadedLibraries.forEach((value, key) => {\n this.runtimeContext.libraries![key] = value;\n if (!GetProductionStatus()) {\n LogStatus(`✅ [registerSingleComponent] Added ${key} to runtime context libraries`);\n }\n });\n }\n\n // Call the factory to create the ComponentObject\n // IMPORTANT: We don't pass components here because child components may not be registered yet\n // Components are resolved later when the component is actually rendered\n if (!GetProductionStatus()) {\n LogStatus(`🏭 Calling factory for ${spec.name} with runtime context:`, undefined, {\n hasReact: !!this.runtimeContext.React,\n hasReactDOM: !!this.runtimeContext.ReactDOM,\n libraryCount: Object.keys(this.runtimeContext.libraries || {}).length\n });\n }\n const componentObject = compilationResult.component!.factory(this.runtimeContext, styles);\n\n // Register the full ComponentObject (not just the React component)\n this.registry.register(\n spec.name,\n componentObject,\n spec.namespace || namespace,\n version\n );\n\n return { success: true };\n\n } catch (error) {\n return {\n success: false,\n error: {\n componentName: spec.name,\n error: error instanceof Error ? error.message : String(error),\n phase: 'registration'\n }\n };\n }\n }\n\n /**\n * Recursively registers child components\n * @param children - Array of child component specifications\n * @param options - Registration options\n * @param registeredComponents - Array to track registered components\n * @param errors - Array to collect errors\n * @param warnings - Array to collect warnings\n */\n private async registerChildComponents(\n children: ComponentSpec[],\n options: HierarchyRegistrationOptions,\n registeredComponents: string[],\n errors: ComponentRegistrationError[],\n warnings: string[]\n ): Promise<void> {\n for (const child of children) {\n // Register this child\n const childResult = await this.registerSingleComponent(child, {\n styles: options.styles,\n namespace: options.namespace,\n version: options.version,\n allowOverride: options.allowOverride,\n allLibraries: options.allLibraries\n });\n\n if (childResult.success) {\n if (child.code) {\n registeredComponents.push(child.name);\n }\n } else {\n errors.push(childResult.error!);\n if (!options.continueOnError) {\n return;\n }\n }\n\n // Register nested children recursively\n const nestedChildren = child.dependencies || [];\n if (nestedChildren.length > 0) {\n await this.registerChildComponents(\n nestedChildren,\n options,\n registeredComponents,\n errors,\n warnings\n );\n }\n }\n }\n}\n\n/**\n * Convenience function to register a component hierarchy\n * @param rootSpec - The root component specification\n * @param compiler - Component compiler instance\n * @param registry - Component registry instance\n * @param runtimeContext - Runtime context with React and other libraries\n * @param options - Registration options\n * @returns Registration result\n */\nexport async function registerComponentHierarchy(\n rootSpec: ComponentSpec,\n compiler: ComponentCompiler,\n registry: ComponentRegistry,\n runtimeContext: RuntimeContext,\n options: HierarchyRegistrationOptions\n): Promise<HierarchyRegistrationResult> {\n const registrar = new ComponentHierarchyRegistrar(compiler, registry, runtimeContext);\n return registrar.registerHierarchy(rootSpec, options);\n}\n\n/**\n * Validates a component specification before registration\n * @param spec - Component specification to validate\n * @returns Array of validation errors (empty if valid)\n */\nexport function validateComponentSpec(spec: ComponentSpec): string[] {\n const errors: string[] = [];\n\n if (!spec.name) {\n errors.push('Component specification must have a name');\n }\n\n // If componentCode is provided, do basic validation\n if (spec.code) {\n if (typeof spec.code !== 'string') {\n errors.push(`Component code for ${spec.name} must be a string`);\n }\n if (spec.code.trim().length === 0) {\n errors.push(`Component code for ${spec.name} cannot be empty`);\n }\n }\n\n // Validate child components recursively\n const children = spec.dependencies || [];\n children.forEach((child, index) => {\n const childErrors = validateComponentSpec(child);\n childErrors.forEach(error => {\n errors.push(`Child ${index} (${child.name || 'unnamed'}): ${error}`);\n });\n });\n\n return errors;\n}\n\n/**\n * Flattens a component hierarchy into a list of all components\n * @param rootSpec - The root component specification\n * @returns Array of all component specifications in the hierarchy\n */\nexport function flattenComponentHierarchy(rootSpec: ComponentSpec): ComponentSpec[] {\n const components: ComponentSpec[] = [rootSpec];\n \n const children = rootSpec.dependencies || [];\n children.forEach(child => {\n components.push(...flattenComponentHierarchy(child));\n });\n\n return components;\n}\n\n/**\n * Counts the total number of components in a hierarchy\n * @param rootSpec - The root component specification\n * @param includeEmpty - Whether to include components without code\n * @returns Total component count\n */\nexport function countComponentsInHierarchy(\n rootSpec: ComponentSpec,\n includeEmpty: boolean = false\n): number {\n let count = 0;\n \n if (includeEmpty || rootSpec.code) {\n count = 1;\n }\n\n const children = rootSpec.dependencies || [];\n children.forEach(child => {\n count += countComponentsInHierarchy(child, includeEmpty);\n });\n\n return count;\n}"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComponentProps, ComponentLifecycle } from '../types';
|
|
2
|
+
export interface WrapperOptions {
|
|
3
|
+
displayName?: string;
|
|
4
|
+
enableProfiling?: boolean;
|
|
5
|
+
logProps?: boolean;
|
|
6
|
+
lifecycle?: ComponentLifecycle;
|
|
7
|
+
defaultProps?: Partial<ComponentProps>;
|
|
8
|
+
}
|
|
9
|
+
export declare function wrapComponent(React: any, Component: any, options?: WrapperOptions): any;
|
|
10
|
+
export declare function memoizeComponent(React: any, Component: any, propsAreEqual?: (prevProps: any, nextProps: any) => boolean): any;
|
|
11
|
+
export declare function lazyComponent(React: any, loader: () => Promise<{
|
|
12
|
+
default: any;
|
|
13
|
+
}>, fallback?: any): any;
|
|
14
|
+
export declare function injectProps(React: any, Component: any, injectedProps: any): any;
|
|
15
|
+
export declare function conditionalComponent(React: any, Component: any, condition: boolean | ((props: any) => boolean), fallback?: any): any;
|
|
16
|
+
export declare function withErrorHandler(React: any, Component: any, errorHandler: (error: Error) => void): any;
|
|
17
|
+
export declare function portalComponent(React: any, ReactDOM: any, Component: any, container: Element | string): any;
|
|
18
|
+
//# sourceMappingURL=component-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-wrapper.d.ts","sourceRoot":"","sources":["../../src/runtime/component-wrapper.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAK9D,MAAM,WAAW,cAAc;IAE7B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAE/B,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACxC;AASD,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAE,cAAmB,GAAG,GAAG,CA+E3F;AASD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,GAAG,EACd,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,OAAO,GAC1D,GAAG,CAEL;AASD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,EACvC,QAAQ,CAAC,EAAE,GAAG,GACb,GAAG,CAYL;AASD,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,GAAG,GAAG,CAK/E;AAUD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,EAC9C,QAAQ,CAAC,EAAE,GAAG,GACb,GAAG,CAUL;AASD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,GAAG,EACd,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GACnC,GAAG,CAUL;AAUD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,OAAO,GAAG,MAAM,GAC1B,GAAG,CAqBL"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.portalComponent = exports.withErrorHandler = exports.conditionalComponent = exports.injectProps = exports.lazyComponent = exports.memoizeComponent = exports.wrapComponent = void 0;
|
|
4
|
+
function wrapComponent(React, Component, options = {}) {
|
|
5
|
+
const { displayName, enableProfiling = false, logProps = false, lifecycle = {}, defaultProps = {} } = options;
|
|
6
|
+
const WrappedComponent = React.forwardRef((props, ref) => {
|
|
7
|
+
const mergedProps = { ...defaultProps, ...props };
|
|
8
|
+
React.useEffect(() => {
|
|
9
|
+
if (logProps) {
|
|
10
|
+
console.log(`[${displayName || Component.name}] Props:`, mergedProps);
|
|
11
|
+
}
|
|
12
|
+
}, [mergedProps]);
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
if (lifecycle.beforeMount) {
|
|
15
|
+
lifecycle.beforeMount();
|
|
16
|
+
}
|
|
17
|
+
if (lifecycle.afterMount) {
|
|
18
|
+
lifecycle.afterMount();
|
|
19
|
+
}
|
|
20
|
+
return () => {
|
|
21
|
+
if (lifecycle.beforeUnmount) {
|
|
22
|
+
lifecycle.beforeUnmount();
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}, []);
|
|
26
|
+
const prevPropsRef = React.useRef(mergedProps);
|
|
27
|
+
React.useEffect(() => {
|
|
28
|
+
const prevProps = prevPropsRef.current;
|
|
29
|
+
if (lifecycle.beforeUpdate) {
|
|
30
|
+
lifecycle.beforeUpdate(prevProps, mergedProps);
|
|
31
|
+
}
|
|
32
|
+
if (lifecycle.afterUpdate) {
|
|
33
|
+
Promise.resolve().then(() => {
|
|
34
|
+
lifecycle.afterUpdate(prevProps, mergedProps);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
prevPropsRef.current = mergedProps;
|
|
38
|
+
});
|
|
39
|
+
if (enableProfiling && React.Profiler) {
|
|
40
|
+
return React.createElement(React.Profiler, {
|
|
41
|
+
id: displayName || Component.name || 'WrappedComponent',
|
|
42
|
+
onRender: (id, phase, actualDuration) => {
|
|
43
|
+
console.log(`[Profiler] ${id} (${phase}): ${actualDuration.toFixed(2)}ms`);
|
|
44
|
+
}
|
|
45
|
+
}, React.createElement(Component, { ...mergedProps, ref }));
|
|
46
|
+
}
|
|
47
|
+
return React.createElement(Component, { ...mergedProps, ref });
|
|
48
|
+
});
|
|
49
|
+
WrappedComponent.displayName = displayName || `Wrapped(${Component.displayName || Component.name || 'Component'})`;
|
|
50
|
+
return WrappedComponent;
|
|
51
|
+
}
|
|
52
|
+
exports.wrapComponent = wrapComponent;
|
|
53
|
+
function memoizeComponent(React, Component, propsAreEqual) {
|
|
54
|
+
return React.memo(Component, propsAreEqual);
|
|
55
|
+
}
|
|
56
|
+
exports.memoizeComponent = memoizeComponent;
|
|
57
|
+
function lazyComponent(React, loader, fallback) {
|
|
58
|
+
const LazyComponent = React.lazy(loader);
|
|
59
|
+
if (fallback) {
|
|
60
|
+
return (props) => React.createElement(React.Suspense, { fallback }, React.createElement(LazyComponent, props));
|
|
61
|
+
}
|
|
62
|
+
return LazyComponent;
|
|
63
|
+
}
|
|
64
|
+
exports.lazyComponent = lazyComponent;
|
|
65
|
+
function injectProps(React, Component, injectedProps) {
|
|
66
|
+
return React.forwardRef((props, ref) => {
|
|
67
|
+
const mergedProps = { ...injectedProps, ...props };
|
|
68
|
+
return React.createElement(Component, { ...mergedProps, ref });
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
exports.injectProps = injectProps;
|
|
72
|
+
function conditionalComponent(React, Component, condition, fallback) {
|
|
73
|
+
return (props) => {
|
|
74
|
+
const shouldRender = typeof condition === 'function' ? condition(props) : condition;
|
|
75
|
+
if (shouldRender) {
|
|
76
|
+
return React.createElement(Component, props);
|
|
77
|
+
}
|
|
78
|
+
return fallback || null;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
exports.conditionalComponent = conditionalComponent;
|
|
82
|
+
function withErrorHandler(React, Component, errorHandler) {
|
|
83
|
+
return class extends React.Component {
|
|
84
|
+
componentDidCatch(error, errorInfo) {
|
|
85
|
+
errorHandler(error);
|
|
86
|
+
}
|
|
87
|
+
render() {
|
|
88
|
+
return React.createElement(Component, this.props);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
exports.withErrorHandler = withErrorHandler;
|
|
93
|
+
function portalComponent(React, ReactDOM, Component, container) {
|
|
94
|
+
return (props) => {
|
|
95
|
+
const [mountNode, setMountNode] = React.useState(null);
|
|
96
|
+
React.useEffect(() => {
|
|
97
|
+
const node = typeof container === 'string'
|
|
98
|
+
? document.querySelector(container)
|
|
99
|
+
: container;
|
|
100
|
+
setMountNode(node);
|
|
101
|
+
}, []);
|
|
102
|
+
if (!mountNode || !ReactDOM.createPortal) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
return ReactDOM.createPortal(React.createElement(Component, props), mountNode);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
exports.portalComponent = portalComponent;
|