ngx-blocks-studio 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-blocks-studio.mjs","sources":["../../../projects/blocks-studio/src/lib/core/registry/registry-metadata.ts","../../../projects/blocks-studio/src/lib/core/registry/block-definitions.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/component.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/directive.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/guard.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/service.registry.ts","../../../projects/blocks-studio/src/lib/core/services/router-loader.service.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-registry.ts","../../../projects/blocks-studio/src/lib/core/services/block-registry.service.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-description-validate.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-description.schema.ts","../../../projects/blocks-studio/src/lib/core/block-loader/ref-expressions.ts","../../../projects/blocks-studio/src/lib/core/block-loader/ref-resolver.ts","../../../projects/blocks-studio/src/lib/core/block-loader/flow-template.ts","../../../projects/blocks-studio/src/lib/core/block-loader/safe-expression-evaluator.ts","../../../projects/blocks-studio/src/lib/core/block-loader/template-interpolation.ts","../../../projects/blocks-studio/src/lib/core/block-loader/output-reference.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-bindings.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-loader.service.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block.directive.ts","../../../projects/blocks-studio/src/public-api.ts","../../../projects/blocks-studio/src/ngx-blocks-studio.ts"],"sourcesContent":["/**\n * Registry entry type: component, service, guard, directive, or block definition.\n */\nexport type RegistryEntryType =\n | 'component'\n | 'service'\n | 'guard'\n | 'directive'\n | 'blockDefinition';\n\n/**\n * Metadata value stored per registry key.\n */\nexport type RegistryMetadataRecord = Record<string, unknown>;\n\nexport interface AllRegistryMetadata {\n components: Map<string, RegistryMetadataRecord>;\n services: Map<string, RegistryMetadataRecord>;\n guards: Map<string, RegistryMetadataRecord>;\n directives: Map<string, RegistryMetadataRecord>;\n blockDefinitions: Map<string, RegistryMetadataRecord>;\n}\n\n/**\n * Single source of truth for metadata across component, service, and guard registries.\n * All registries delegate to this store so metadata can be queried uniformly\n * and all metadata can be retrieved in one call.\n */\nexport class RegistryMetadataStore {\n private static instance: RegistryMetadataStore;\n private entries = new Map<string, { type: RegistryEntryType; data: RegistryMetadataRecord }>();\n\n private constructor() {}\n\n static getInstance(): RegistryMetadataStore {\n if (!RegistryMetadataStore.instance) {\n RegistryMetadataStore.instance = new RegistryMetadataStore();\n }\n return RegistryMetadataStore.instance;\n }\n\n /**\n * Set metadata for a registry key (component, service, guard, directive, or block definition).\n */\n set(key: string, type: RegistryEntryType, data: RegistryMetadataRecord): void {\n this.entries.set(key, { type, data });\n }\n\n /**\n * Get metadata for a key. Returns undefined if the key is not registered.\n */\n get(key: string): RegistryMetadataRecord | undefined {\n return this.entries.get(key)?.data;\n }\n\n /**\n * Alias for get(); allows registries to expose getMetadata(key).\n */\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.get(key);\n }\n\n /**\n * Get all metadata for a given type (components or services).\n */\n getByType(type: RegistryEntryType): Map<string, RegistryMetadataRecord> {\n const result = new Map<string, RegistryMetadataRecord>();\n for (const [key, entry] of this.entries) {\n if (entry.type === type) {\n result.set(key, entry.data);\n }\n }\n return result;\n }\n\n /**\n * Get all metadata for component, service, and guard registries in one call.\n */\n getAllMetadata(): AllRegistryMetadata {\n return {\n components: this.getByType('component'),\n services: this.getByType('service'),\n guards: this.getByType('guard'),\n directives: this.getByType('directive'),\n blockDefinitions: this.getByType('blockDefinition'),\n };\n }\n\n /**\n * Remove metadata for a key (e.g. when unregistering).\n */\n remove(key: string): boolean {\n return this.entries.delete(key);\n }\n\n /**\n * Check if metadata exists for a key.\n */\n has(key: string): boolean {\n return this.entries.has(key);\n }\n\n /**\n * Clear all metadata (e.g. when clearing registries).\n */\n clear(): void {\n this.entries.clear();\n }\n}\n","import { RegistryMetadataStore, type RegistryMetadataRecord } from './registry-metadata';\n\n/**\n * Global registry of block id → definition. Register block configs at app init\n * so they can be used as templates anywhere (e.g. nested blocks that reference\n * { id: 'AppNav' } resolve without passing blockDefinitions down).\n * Per-call blockDefinitions (e.g. from route data) override global entries.\n *\n * Values may be a plain definition object or a zero-arg loader\n * `() => Promise<Record<string, unknown>>` for lazy loading (same pattern as\n * ComponentRegistry / DirectiveRegistry).\n */\nexport type BlockDefinitionLoader = () => Promise<Record<string, unknown>>;\nexport type BlockDefinitionOrLoader = Record<string, unknown> | BlockDefinitionLoader;\n\n/** True for zero-arg async loaders (not class constructors). */\nexport function isBlockDefinitionLoader(value: unknown): value is BlockDefinitionLoader {\n if (typeof value !== 'function') {\n return false;\n }\n const looksLikeClass =\n typeof (value as { prototype?: unknown }).prototype !== 'undefined' &&\n (value as { prototype?: { constructor?: unknown } }).prototype?.constructor === value;\n return (value as BlockDefinitionLoader).length === 0 && !looksLikeClass;\n}\n\nexport class BlockDefinitionsRegistry {\n private static instance: BlockDefinitionsRegistry;\n private readonly definitions = new Map<string, BlockDefinitionOrLoader>();\n private readonly loadedDefinitions = new Map<string, Record<string, unknown>>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): BlockDefinitionsRegistry {\n if (!BlockDefinitionsRegistry.instance) {\n BlockDefinitionsRegistry.instance = new BlockDefinitionsRegistry();\n }\n return BlockDefinitionsRegistry.instance;\n }\n\n /**\n * Register a block template by id (plain object or async loader).\n * Optional metadata is stored in the shared {@link RegistryMetadataStore}.\n */\n register(\n id: string,\n definition: BlockDefinitionOrLoader,\n metadata?: RegistryMetadataRecord,\n ): void {\n this.definitions.set(id, definition);\n if (!isBlockDefinitionLoader(definition)) {\n this.loadedDefinitions.set(id, definition as Record<string, unknown>);\n } else {\n this.loadedDefinitions.delete(id);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(id, 'blockDefinition', metadata);\n }\n }\n\n /** Resolve definition by id; runs loader once and caches the result. */\n async get(id: string): Promise<Record<string, unknown> | undefined> {\n if (this.loadedDefinitions.has(id)) {\n return this.loadedDefinitions.get(id);\n }\n\n const defOrLoader = this.definitions.get(id);\n if (!defOrLoader) {\n return undefined;\n }\n\n if (isBlockDefinitionLoader(defOrLoader)) {\n try {\n const loaded = await defOrLoader();\n this.loadedDefinitions.set(id, loaded);\n return loaded;\n } catch (error) {\n console.error(`Failed to lazy load block definition \"${id}\":`, error);\n return undefined;\n }\n }\n\n const def = defOrLoader as Record<string, unknown>;\n this.loadedDefinitions.set(id, def);\n return def;\n }\n\n /** Sync access when the definition is already a plain object or was loaded. */\n getSync(id: string): Record<string, unknown> | undefined {\n if (this.loadedDefinitions.has(id)) {\n return this.loadedDefinitions.get(id);\n }\n\n const defOrLoader = this.definitions.get(id);\n if (!defOrLoader || isBlockDefinitionLoader(defOrLoader)) {\n return undefined;\n }\n\n const def = defOrLoader as Record<string, unknown>;\n this.loadedDefinitions.set(id, def);\n return def;\n }\n\n has(id: string): boolean {\n return this.definitions.has(id);\n }\n\n /** Plain definitions plus any lazy definitions that have been loaded at least once. */\n getAll(): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [id, def] of this.definitions) {\n if (isBlockDefinitionLoader(def)) {\n const loaded = this.loadedDefinitions.get(id);\n if (loaded != null) {\n out[id] = loaded;\n }\n } else {\n out[id] = def as Record<string, unknown>;\n }\n }\n return out;\n }\n\n unregister(id: string): boolean {\n this.metadataStore.remove(id);\n this.loadedDefinitions.delete(id);\n return this.definitions.delete(id);\n }\n\n clear(): void {\n for (const name of this.definitions.keys()) {\n this.metadataStore.remove(name);\n }\n this.definitions.clear();\n this.loadedDefinitions.clear();\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n}\n","import { Type } from '@angular/core';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\ntype ComponentLoader = () => Promise<Type<any>>;\ntype ComponentOrLoader = Type<any> | ComponentLoader;\n\nexport class ComponentRegistry {\n private static instance: ComponentRegistry;\n private components = new Map<string, ComponentOrLoader>();\n private loadedComponents = new Map<string, Type<any>>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): ComponentRegistry {\n if (!ComponentRegistry.instance) {\n ComponentRegistry.instance = new ComponentRegistry();\n }\n return ComponentRegistry.instance;\n }\n\n register(\n name: string,\n component: Type<any> | ComponentLoader,\n metadata?: RegistryMetadataRecord\n ): void {\n if (this.components.has(name)) {\n console.warn(`Component ${name} is already registered. Overwriting...`);\n }\n\n this.components.set(name, component);\n // If it's already a Type, cache it\n if (typeof component !== 'function' || component.prototype) {\n this.loadedComponents.set(name, component as Type<any>);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'component', metadata);\n }\n }\n\n async get(name: string): Promise<Type<any> | undefined> {\n // Check if already loaded\n if (this.loadedComponents.has(name)) {\n return this.loadedComponents.get(name);\n }\n\n const componentOrLoader = this.components.get(name);\n if (!componentOrLoader) {\n return undefined;\n }\n\n // Check if it's a loader function (not a Type)\n // Type functions have a prototype, loader functions don't\n const isLoader =\n typeof componentOrLoader === 'function' && !(componentOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n try {\n const loader = componentOrLoader as ComponentLoader;\n const component = await loader();\n this.loadedComponents.set(name, component);\n return component;\n } catch (error) {\n console.error(`Failed to lazy load component \"${name}\":`, error);\n return undefined;\n }\n }\n\n // It's already a Type\n const component = componentOrLoader as Type<any>;\n this.loadedComponents.set(name, component);\n return component;\n }\n\n getSync(name: string): Type<any> | undefined {\n // Check if already loaded\n if (this.loadedComponents.has(name)) {\n return this.loadedComponents.get(name);\n }\n\n const componentOrLoader = this.components.get(name);\n if (!componentOrLoader) {\n return undefined;\n }\n\n // Check if it's a loader function (not a Type)\n const isLoader =\n typeof componentOrLoader === 'function' && !(componentOrLoader as any).prototype?.constructor;\n\n // If it's a loader, we can't get it synchronously\n if (isLoader) {\n return undefined;\n }\n\n // It's already a Type\n const component = componentOrLoader as Type<any>;\n this.loadedComponents.set(name, component);\n return component;\n }\n\n has(name: string): boolean {\n return this.components.has(name);\n }\n\n getAll(): Map<string, Type<any>> {\n return new Map(this.loadedComponents);\n }\n\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedComponents.delete(name);\n return this.components.delete(name);\n }\n\n clear(): void {\n for (const name of this.components.keys()) {\n this.metadataStore.remove(name);\n }\n this.components.clear();\n this.loadedComponents.clear();\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n getAllWithMetadata(): Map<string, { component: Type<any>; metadata?: RegistryMetadataRecord }> {\n const result = new Map<string, { component: Type<any>; metadata?: RegistryMetadataRecord }>();\n for (const [name, component] of this.loadedComponents) {\n result.set(name, {\n component,\n metadata: this.metadataStore.getMetadata(name),\n });\n }\n return result;\n }\n}\n","import { Type } from '@angular/core';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\ntype DirectiveLoader = () => Promise<Type<unknown>>;\ntype DirectiveOrLoader = Type<unknown> | DirectiveLoader;\n\nexport class DirectiveRegistry {\n private static instance: DirectiveRegistry;\n private directives = new Map<string, DirectiveOrLoader>();\n private loadedDirectives = new Map<string, Type<unknown>>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): DirectiveRegistry {\n if (!DirectiveRegistry.instance) {\n DirectiveRegistry.instance = new DirectiveRegistry();\n }\n return DirectiveRegistry.instance;\n }\n\n register(\n name: string,\n directive: Type<unknown> | DirectiveLoader,\n metadata?: RegistryMetadataRecord\n ): void {\n if (this.directives.has(name)) {\n console.warn(`Directive \"${name}\" is already registered. Overwriting...`);\n }\n\n this.directives.set(name, directive);\n if (!this.isLoader(directive)) {\n this.loadedDirectives.set(name, directive as Type<unknown>);\n } else {\n this.loadedDirectives.delete(name);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'directive', metadata);\n }\n }\n\n async get(name: string): Promise<Type<unknown> | undefined> {\n if (this.loadedDirectives.has(name)) {\n return this.loadedDirectives.get(name);\n }\n\n const directiveOrLoader = this.directives.get(name);\n if (!directiveOrLoader) {\n return undefined;\n }\n\n if (this.isLoader(directiveOrLoader)) {\n try {\n const loader = directiveOrLoader as DirectiveLoader;\n const directive = await loader();\n this.loadedDirectives.set(name, directive);\n return directive;\n } catch (error) {\n console.error(`Failed to lazy load directive \"${name}\":`, error);\n return undefined;\n }\n }\n\n const directive = directiveOrLoader as Type<unknown>;\n this.loadedDirectives.set(name, directive);\n return directive;\n }\n\n getSync(name: string): Type<unknown> | undefined {\n if (this.loadedDirectives.has(name)) {\n return this.loadedDirectives.get(name);\n }\n\n const directiveOrLoader = this.directives.get(name);\n if (!directiveOrLoader || this.isLoader(directiveOrLoader)) {\n return undefined;\n }\n\n const directive = directiveOrLoader as Type<unknown>;\n this.loadedDirectives.set(name, directive);\n return directive;\n }\n\n has(name: string): boolean {\n return this.directives.has(name);\n }\n\n getAll(): Map<string, Type<unknown>> {\n return new Map(this.loadedDirectives);\n }\n\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedDirectives.delete(name);\n return this.directives.delete(name);\n }\n\n clear(): void {\n for (const name of this.directives.keys()) {\n this.metadataStore.remove(name);\n }\n this.directives.clear();\n this.loadedDirectives.clear();\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n getAllWithMetadata(): Map<string, { directive: Type<unknown>; metadata?: RegistryMetadataRecord }> {\n const result = new Map<string, { directive: Type<unknown>; metadata?: RegistryMetadataRecord }>();\n for (const [name, directive] of this.loadedDirectives) {\n result.set(name, {\n directive,\n metadata: this.metadataStore.getMetadata(name),\n });\n }\n return result;\n }\n\n private isLoader(value: DirectiveOrLoader): value is DirectiveLoader {\n if (typeof value !== 'function') {\n return false;\n }\n // Class constructors have prototype.constructor === themselves; loader functions (e.g. arrow)\n // do not, so we treat only non-class functions with 0 args as loaders.\n const looksLikeClass =\n typeof (value as Type<unknown>).prototype !== 'undefined' &&\n (value as Type<unknown>).prototype?.constructor === value;\n return (value as DirectiveLoader).length === 0 && !looksLikeClass;\n }\n}\n","import { Type } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\n/**\n * Guard type: functional guard or class-based guard type.\n * Registered by name; resolved by RouteLoader from route config guards array.\n */\nexport type GuardOrType = CanActivateFn | Type<unknown>;\n\n/** Loader for lazy-loaded guards. Must be a function with no parameters that returns Promise<GuardOrType>. */\nexport type GuardLoader = () => Promise<GuardOrType>;\n\nexport type GuardOrLoader = GuardOrType | GuardLoader;\n\nexport class GuardRegistry {\n private static instance: GuardRegistry;\n private guards = new Map<string, GuardOrLoader>();\n private loadedGuards = new Map<string, GuardOrType>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): GuardRegistry {\n if (!GuardRegistry.instance) {\n GuardRegistry.instance = new GuardRegistry();\n }\n return GuardRegistry.instance;\n }\n\n register(name: string, guard: GuardOrLoader, metadata?: RegistryMetadataRecord): void {\n if (this.guards.has(name)) {\n console.warn(`Guard \"${name}\" is already registered. Overwriting...`);\n }\n this.guards.set(name, guard);\n if (!this.isLoader(guard)) {\n this.loadedGuards.set(name, guard as GuardOrType);\n } else {\n this.loadedGuards.delete(name);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'guard', metadata);\n }\n }\n\n /**\n * Resolve guard by name (async; runs loader if needed).\n */\n async get(name: string): Promise<GuardOrType | undefined> {\n if (this.loadedGuards.has(name)) {\n return this.loadedGuards.get(name);\n }\n\n const guardOrLoader = this.guards.get(name);\n if (!guardOrLoader) {\n return undefined;\n }\n\n if (this.isLoader(guardOrLoader)) {\n try {\n const loader = guardOrLoader as GuardLoader;\n const guard = await loader();\n this.loadedGuards.set(name, guard);\n return guard;\n } catch (error) {\n console.error(`Failed to lazy load guard \"${name}\":`, error);\n return undefined;\n }\n }\n\n const guard = guardOrLoader as GuardOrType;\n this.loadedGuards.set(name, guard);\n return guard;\n }\n\n /**\n * Resolve guard synchronously. Returns undefined if the entry is a lazy loader not yet loaded.\n */\n getSync(name: string): GuardOrType | undefined {\n if (this.loadedGuards.has(name)) {\n return this.loadedGuards.get(name);\n }\n\n const guardOrLoader = this.guards.get(name);\n if (!guardOrLoader || this.isLoader(guardOrLoader)) {\n return undefined;\n }\n\n const guard = guardOrLoader as GuardOrType;\n this.loadedGuards.set(name, guard);\n return guard;\n }\n\n has(name: string): boolean {\n return this.guards.has(name);\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n getAllWithMetadata(): Map<string, { guard: GuardOrType; metadata?: RegistryMetadataRecord }> {\n const result = new Map<string, { guard: GuardOrType; metadata?: RegistryMetadataRecord }>();\n for (const [name, guard] of this.loadedGuards) {\n result.set(name, {\n guard,\n metadata: this.metadataStore.getMetadata(name),\n });\n }\n return result;\n }\n\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedGuards.delete(name);\n return this.guards.delete(name);\n }\n\n clear(): void {\n for (const name of this.guards.keys()) {\n this.metadataStore.remove(name);\n }\n this.guards.clear();\n this.loadedGuards.clear();\n }\n\n private isLoader(value: GuardOrLoader): value is GuardLoader {\n return (\n typeof value === 'function' &&\n (value as GuardLoader).length === 0\n );\n }\n}\n","import { Type, Injector, inject } from '@angular/core';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\ntype ServiceLoader = () => Promise<Type<any>>;\ntype ServiceOrLoader = Type<any> | ServiceLoader;\n\nexport class ServiceRegistry {\n private static instance: ServiceRegistry;\n private services = new Map<string, ServiceOrLoader>();\n private loadedServices = new Map<string, Type<any>>();\n private injector: Injector | null = null;\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): ServiceRegistry {\n if (!ServiceRegistry.instance) {\n ServiceRegistry.instance = new ServiceRegistry();\n }\n return ServiceRegistry.instance;\n }\n\n /**\n * Set the injector to use for service resolution\n */\n setInjector(injector: Injector): void {\n this.injector = injector;\n }\n\n /**\n * Register a service by name (supports lazy loading)\n */\n register(\n name: string,\n service: Type<any> | ServiceLoader,\n metadata?: RegistryMetadataRecord\n ): void {\n if (this.services.has(name)) {\n console.warn(`Service ${name} is already registered. Overwriting...`);\n }\n this.services.set(name, service);\n // If it's already a Type, cache it\n if (typeof service !== 'function' || (service as any).prototype) {\n this.loadedServices.set(name, service as Type<any>);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'service', metadata);\n }\n }\n\n /**\n * Get a service instance by name (supports lazy loading)\n * Requires injector to be set first\n */\n async get(name: string): Promise<any> {\n // Check if already loaded\n if (this.loadedServices.has(name)) {\n const serviceType = this.loadedServices.get(name)!;\n return this.injectService(serviceType);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n console.error(`Service \"${name}\" not found in registry`);\n return undefined;\n }\n\n // Check if it's a loader function (not a Type)\n const isLoader = typeof serviceOrLoader === 'function' && \n !(serviceOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n try {\n const loader = serviceOrLoader as ServiceLoader;\n const serviceType = await loader();\n this.loadedServices.set(name, serviceType);\n return this.injectService(serviceType);\n } catch (error) {\n console.error(`Failed to lazy load service \"${name}\":`, error);\n return undefined;\n }\n }\n\n // It's already a Type\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return this.injectService(serviceType);\n }\n\n /**\n * Get a service instance synchronously (only works for already loaded services)\n */\n getSync(name: string): any {\n // Check if already loaded\n if (this.loadedServices.has(name)) {\n const serviceType = this.loadedServices.get(name)!;\n return this.injectService(serviceType);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n console.error(`Service \"${name}\" not found in registry`);\n return undefined;\n }\n\n // Check if it's a loader function\n const isLoader = typeof serviceOrLoader === 'function' && \n !(serviceOrLoader as any).prototype?.constructor;\n\n // If it's a loader, we can't get it synchronously\n if (isLoader) {\n console.warn(`Service \"${name}\" is lazy loaded and cannot be retrieved synchronously. Use get() instead.`);\n return undefined;\n }\n\n // It's already a Type\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return this.injectService(serviceType);\n }\n\n /**\n * Inject a service type using the injector\n */\n private injectService(serviceType: Type<any>): any {\n if (!this.injector) {\n // Try to use inject() if no injector is set\n try {\n return inject(serviceType);\n } catch (error) {\n console.error(`Cannot inject service: No injector set and inject() failed`, error);\n return undefined;\n }\n }\n\n try {\n return this.injector.get(serviceType);\n } catch (error) {\n console.error(`Failed to get service from injector:`, error);\n return undefined;\n }\n }\n\n /**\n * Get the service Type (class) by name (supports lazy loading).\n * Use this to scope the provider to a child injector (e.g. \"self\" context).\n */\n async getType(name: string): Promise<Type<any> | undefined> {\n if (this.loadedServices.has(name)) {\n return this.loadedServices.get(name);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n console.error(`Service \"${name}\" not found in registry`);\n return undefined;\n }\n\n const isLoader =\n typeof serviceOrLoader === 'function' &&\n !(serviceOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n try {\n const loader = serviceOrLoader as ServiceLoader;\n const serviceType = await loader();\n this.loadedServices.set(name, serviceType);\n return serviceType;\n } catch (error) {\n console.error(`Failed to lazy load service \"${name}\":`, error);\n return undefined;\n }\n }\n\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return serviceType;\n }\n\n /**\n * Get the service Type synchronously (only for already loaded services).\n */\n getTypeSync(name: string): Type<any> | undefined {\n if (this.loadedServices.has(name)) {\n return this.loadedServices.get(name);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n return undefined;\n }\n\n const isLoader =\n typeof serviceOrLoader === 'function' &&\n !(serviceOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n return undefined;\n }\n\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return serviceType;\n }\n\n /**\n * Check if a service is registered\n */\n has(name: string): boolean {\n return this.services.has(name);\n }\n\n /**\n * Get all registered service names\n */\n getAllNames(): string[] {\n return Array.from(this.services.keys());\n }\n\n /**\n * Get metadata for a registered service by key.\n */\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n /**\n * Unregister a service\n */\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedServices.delete(name);\n return this.services.delete(name);\n }\n\n /**\n * Clear all registered services\n */\n clear(): void {\n for (const name of this.services.keys()) {\n this.metadataStore.remove(name);\n }\n this.services.clear();\n this.loadedServices.clear();\n }\n}\n\n","import { Router, Routes, RunGuardsAndResolvers } from '@angular/router';\nimport { Type, Injectable, inject, signal, computed } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { firstValueFrom } from 'rxjs';\nimport { ComponentRegistry } from '../registry/component.registry';\nimport { GuardRegistry, type GuardOrType } from '../registry/guard.registry';\n\n/**\n * Route configuration for the router.\n * @param path - The path of the route.\n * @param component - The component key to load for the route using the ComponentRegistry.\n * @param title - The title of the route.\n * @param canActivate - The guards keys to activate for the route using the GuardRegistry.\n * @param canDeactivate - The guards keys to deactivate for the route using the GuardRegistry.\n * @param canLoad - The guards keys to load for the route using the GuardRegistry.\n * @param canMatch - The guards keys to match for the route using the GuardRegistry.\n * @param pathMatch - The path match strategy for the route.\n * @param outlet - The outlet of the route.\n * @param canActivateChild - The guards keys to activate the children routes for the route using the GuardRegistry.\n * @param runGuardsAndResolvers - The strategy to run guards and resolvers for the route.\n * @param data - The data to pass to the route. It will be merged with the data from the route config file.\n * @param children - Nested routes and optional defaultRedirect/catchAllRedirect for the child segment.\n */\n\nexport interface RouteConfig {\n path: string;\n component: string;\n title?: string;\n canActivate?: string[];\n canDeactivate?: string[];\n canLoad?: string[];\n canMatch?: string[];\n outlet?: string;\n pathMatch?: 'full' | 'prefix';\n canActivateChild?: string[];\n runGuardsAndResolvers?: RunGuardsAndResolvers;\n data?: Record<string, any>;\n /** Child routes; can include defaultRedirect and catchAllRedirect for this segment. */\n children?: RouteConfigs;\n}\n\nexport interface RouteConfigs {\n routes: RouteConfig[];\n /** Redirect path for empty route (path: ''). Omit to not add a default redirect. */\n defaultRedirect?: string;\n /** Redirect path for unknown routes (path: '**'). Omit to not add a catch-all. */\n catchAllRedirect?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouteLoader {\n private router = inject(Router);\n private http = inject(HttpClient);\n private componentRegistry = ComponentRegistry.getInstance();\n private guardRegistry = GuardRegistry.getInstance();\n\n private readonly _routeConfigFile = signal<RouteConfigs | null>(null);\n private readonly _configPath = signal<string>('');\n\n /** Currently loaded route config file, or null if not yet loaded. */\n readonly routeConfigFile = this._routeConfigFile.asReadonly();\n /** Path from which the config was loaded. */\n readonly configPath = this._configPath.asReadonly();\n /** Route config array from the loaded file. */\n readonly routeConfig = computed<RouteConfig[]>(() => this._routeConfigFile()?.routes ?? []);\n\n /**\n * Load routes from a config object. Updates signals and resets the router.\n */\n async loadRoutes(config: RouteConfigs): Promise<void> {\n this._configPath.set('');\n this._routeConfigFile.set(config);\n\n await this.updateRoutes();\n }\n\n /**\n * Fetch route config from a URL (HTTP GET), then load it. Sets configPath signal to the requested URL.\n */\n async loadRoutesFromUrl(configPath: string): Promise<void> {\n try {\n const config = await firstValueFrom(this.http.get<RouteConfigs>(configPath));\n this._configPath.set(configPath);\n this._routeConfigFile.set(config);\n await this.updateRoutes();\n } catch (error) {\n console.error('Failed to load route configuration from URL:', error);\n throw error;\n }\n }\n\n private async updateRoutes(): Promise<void> {\n const config = this._routeConfigFile();\n const routeConfigList = this.routeConfig();\n const routes: Routes = await Promise.all(\n routeConfigList.map((routeConfig) => this.convertRouteConfig(routeConfig))\n );\n\n if (config?.defaultRedirect != null && config.defaultRedirect !== '') {\n routes.unshift({\n path: '',\n redirectTo: config.defaultRedirect,\n pathMatch: 'full',\n });\n }\n\n if (config?.catchAllRedirect != null && config.catchAllRedirect !== '') {\n routes.push({\n path: '**',\n redirectTo: config.catchAllRedirect,\n });\n }\n\n this.router.resetConfig(routes);\n }\n\n private async convertRouteConfig(config: RouteConfig): Promise<Routes[0]> {\n const routeData: Record<string, unknown> = { ...(config.data ?? {}) };\n if (config.component) {\n routeData['component'] = config.component;\n }\n\n const [\n canActivateGuards,\n canDeactivateGuards,\n canLoadGuards,\n canMatchGuards,\n canActivateChildGuards,\n ] = await Promise.all([\n this.resolveGuards(config.canActivate),\n this.resolveGuards(config.canDeactivate),\n this.resolveGuards(config.canLoad),\n this.resolveGuards(config.canMatch),\n this.resolveGuards(config.canActivateChild),\n ]);\n\n const route: Routes[0] = {\n path: config.path,\n loadComponent: () => this.loadComponent(config),\n data: routeData,\n ...(config.title != null && { title: config.title }),\n ...(config.outlet != null && { outlet: config.outlet }),\n ...(config.pathMatch != null && { pathMatch: config.pathMatch }),\n ...(config.runGuardsAndResolvers != null && {\n runGuardsAndResolvers: config.runGuardsAndResolvers,\n }),\n ...(canActivateGuards.length > 0 && {\n canActivate: canActivateGuards as Routes[0]['canActivate'],\n }),\n ...(canDeactivateGuards.length > 0 && {\n canDeactivate: canDeactivateGuards as Routes[0]['canDeactivate'],\n }),\n ...(canLoadGuards.length > 0 && { canLoad: canLoadGuards as Routes[0]['canLoad'] }),\n ...(canMatchGuards.length > 0 && { canMatch: canMatchGuards as Routes[0]['canMatch'] }),\n ...(canActivateChildGuards.length > 0 && {\n canActivateChild: canActivateChildGuards as Routes[0]['canActivateChild'],\n }),\n };\n\n if (config.children?.routes?.length) {\n const childConfigs = config.children;\n route.children = await Promise.all(\n childConfigs.routes.map((child) => this.convertRouteConfig(child))\n );\n if (childConfigs.defaultRedirect != null && childConfigs.defaultRedirect !== '') {\n route.children.unshift({\n path: '',\n redirectTo: childConfigs.defaultRedirect,\n pathMatch: 'full',\n });\n }\n if (childConfigs.catchAllRedirect != null && childConfigs.catchAllRedirect !== '') {\n route.children.push({\n path: '**',\n redirectTo: childConfigs.catchAllRedirect,\n });\n }\n }\n\n return route;\n }\n\n private async resolveGuards(guardNames: string[] | undefined): Promise<GuardOrType[]> {\n if (!guardNames?.length) return [];\n const resolved = await Promise.all(guardNames.map((name) => this.getGuard(name)));\n return resolved.filter((g): g is GuardOrType => g != null);\n }\n\n private async loadComponent(routeConfig: RouteConfig): Promise<Type<unknown>> {\n const componentName = routeConfig.component;\n if (!componentName) {\n throw new Error('Route config must specify a component key.');\n }\n const component = await this.componentRegistry.get(componentName);\n if (!component) {\n throw new Error(\n `Component \"${componentName}\" is not registered. Register it with ComponentRegistry before loading routes.`\n );\n }\n return component;\n }\n\n private async getGuard(guardName: string): Promise<GuardOrType | null> {\n const guard = await this.guardRegistry.get(guardName);\n if (guard == null) {\n console.warn(`Unknown guard: ${guardName}. Register it with GuardRegistry.`);\n return null;\n }\n return guard;\n }\n}\n","import type { Signal } from '@angular/core';\n\nexport interface CurrentInstance {\n model?: Signal<unknown>;\n /**\n * Services/state exposed by name for ref/expression resolution.\n * (Kept separate from `model` to avoid alias collisions.)\n */\n services: Record<string, unknown>;\n}\n\n/**\n * Handle for a registered block: exposes instance (services/state by name) for ref resolution.\n */\nexport interface BlockInstanceHandle {\n /** Instance: services and state by name (e.g. FormState, value). */\n instance: CurrentInstance;\n /** Optional cleanup when block is destroyed. */\n destroy?: () => void;\n}\n\n/**\n * Registry of block instances by (full) id within a tree.\n * One registry per logical tree; duplicate id throws.\n */\nexport interface BlockRegistry {\n register(id: string, handle: BlockInstanceHandle): void;\n unregister(id: string): void;\n get(id: string): BlockInstanceHandle | undefined;\n /** True if id resolves in this registry or any parent (for refs). */\n has(id: string): boolean;\n /** True only if id is registered on this registry layer (not parent). Used before register. */\n hasLocal(id: string): boolean;\n}\n\n/**\n * Registry that chains lookups to a parent registry (lexical scoping).\n * Registration/unregistration always happens on the local registry only.\n */\nexport class ChainedBlockRegistry implements BlockRegistry {\n constructor(\n private readonly local: BlockRegistry,\n private readonly parent: BlockRegistry | null,\n ) {}\n\n register(id: string, handle: BlockInstanceHandle): void {\n this.local.register(id, handle);\n }\n\n unregister(id: string): void {\n this.local.unregister(id);\n }\n\n get(id: string): BlockInstanceHandle | undefined {\n return this.local.get(id) ?? this.parent?.get(id);\n }\n\n has(id: string): boolean {\n return this.local.has(id) || (this.parent?.has(id) ?? false);\n }\n\n hasLocal(id: string): boolean {\n return this.local.hasLocal(id);\n }\n}\n\n/**\n * Default in-memory BlockRegistry.\n */\nexport class BlockRegistryImpl implements BlockRegistry {\n private readonly map = new Map<string, BlockInstanceHandle>();\n\n register(id: string, handle: BlockInstanceHandle): void {\n if (this.map.has(id)) {\n throw new Error(`Block id \"${id}\" is already registered. Each id may only occur once per tree.`);\n }\n this.map.set(id, handle);\n }\n\n unregister(id: string): void {\n this.map.delete(id);\n }\n\n get(id: string): BlockInstanceHandle | undefined {\n return this.map.get(id);\n }\n\n has(id: string): boolean {\n return this.map.has(id);\n }\n\n hasLocal(id: string): boolean {\n return this.map.has(id);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BlockRegistryImpl, type BlockRegistry } from '../block-loader/block-registry';\n\nexport interface ScopedRegistryNode {\n registry: BlockRegistry;\n parentScopeKey: string | null;\n}\n\n/**\n * Holds named block registries (e.g. `root` for a route outlet, scoped keys for list items/columns).\n * This enables explicit cross-scope ref resolution like `ScopeKey/BlockId:model.title`.\n */\n@Injectable({ providedIn: 'root' })\nexport class BlockRegistryService {\n readonly registry = new Map<string, ScopedRegistryNode>([\n ['root', { registry: new BlockRegistryImpl(), parentScopeKey: null }],\n ]);\n\n setScopedRegistry(key: string, reg: BlockRegistry, parentScopeKey: string | null = 'root'): void {\n if (key === 'root') {\n throw new Error('Cannot set scoped registry under reserved key \"root\".');\n }\n this.registry.set(key, { registry: reg, parentScopeKey });\n }\n\n removeScopedRegistry(key: string): void {\n if (key === 'root') return;\n this.registry.delete(key);\n }\n\n getRegistryForScope(scopeKey: string): BlockRegistry | null {\n return this.registry.get(scopeKey)?.registry ?? null;\n }\n\n getParentScopeKey(scopeKey: string): string | null {\n return this.registry.get(scopeKey)?.parentScopeKey ?? null;\n }\n}\n\n","import type {\n BlockDescription,\n BlockOutputValue,\n SafeParseBlockDescriptionResult,\n ServiceEntry,\n} from './block-description.types';\n\nfunction isNonEmptyString(v: unknown): v is string {\n return typeof v === 'string' && v.length > 0;\n}\n\nfunction validateParams(v: unknown, path: string): string | null {\n if (v === undefined) return null;\n if (Array.isArray(v)) return null;\n if (typeof v === 'object' && v !== null && !Array.isArray(v)) return null;\n return `${path}: params must be array or record`;\n}\n\nfunction validateServiceEntry(v: unknown, path: string): string | null {\n if (isNonEmptyString(v)) return null;\n if (typeof v !== 'object' || v === null || Array.isArray(v))\n return `${path}: invalid service entry`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['id'])) return `${path}: service object requires non-empty id`;\n if (o['scope'] !== undefined && o['scope'] !== 'self') return `${path}: invalid scope`;\n if (o['alias'] !== undefined && !isNonEmptyString(o['alias'])) return `${path}: invalid alias`;\n return null;\n}\n\nfunction validateThenChainStep(v: unknown, path: string): string | null {\n if (isNonEmptyString(v)) return null;\n if (typeof v !== 'object' || v === null || Array.isArray(v))\n return `${path}: invalid then step`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['ref'])) return `${path}: then step object requires ref`;\n const p = validateParams(o['params'], `${path}.params`);\n if (p) return p;\n if (o['then'] !== undefined) {\n if (!Array.isArray(o['then'])) return `${path}.then must be an array`;\n for (let i = 0; i < o['then'].length; i++) {\n const e = validateThenChainStep(o['then'][i], `${path}.then[${i}]`);\n if (e) return e;\n }\n }\n return null;\n}\n\nfunction validateOnError(v: unknown, path: string): string | null {\n if (typeof v !== 'object' || v === null || Array.isArray(v)) return `${path}: invalid onError`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['ref'])) return `${path}: onError requires ref`;\n return validateParams(o['params'], `${path}.params`);\n}\n\nfunction validateOutputCallObject(v: unknown, path: string): string | null {\n if (typeof v !== 'object' || v === null || Array.isArray(v))\n return `${path}: invalid output object`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['ref'])) return `${path}: output object requires ref`;\n const p = validateParams(o['params'], `${path}.params`);\n if (p) return p;\n if (o['then'] !== undefined) {\n if (!Array.isArray(o['then'])) return `${path}.then must be an array`;\n for (let i = 0; i < o['then'].length; i++) {\n const e = validateThenChainStep(o['then'][i], `${path}.then[${i}]`);\n if (e) return e;\n }\n }\n if (o['onError'] !== undefined) {\n const e = validateOnError(o['onError'], `${path}.onError`);\n if (e) return e;\n }\n return null;\n}\n\nfunction validateOutputValue(v: unknown, path: string): string | null {\n if (isNonEmptyString(v)) return null;\n return validateOutputCallObject(v, path);\n}\n\nfunction validateBlockDescriptionShape(data: unknown): string | null {\n if (data === null || typeof data !== 'object' || Array.isArray(data)) {\n return 'Expected an object';\n }\n const o = data as Record<string, unknown>;\n if (!isNonEmptyString(o['component'])) return 'component is required and must be non-empty';\n if (o['id'] !== undefined && !isNonEmptyString(o['id'])) return 'id must be a non-empty string';\n\n if (o['services'] !== undefined && o['services'] !== null) {\n const s = o['services'];\n const entries = Array.isArray(s) ? s : [s];\n for (let i = 0; i < entries.length; i++) {\n const e = validateServiceEntry(entries[i], `services[${i}]`);\n if (e) return e;\n }\n }\n\n if (o['directives'] !== undefined && o['directives'] !== null) {\n const d = o['directives'];\n if (isNonEmptyString(d)) {\n /* ok */\n } else if (Array.isArray(d)) {\n for (let i = 0; i < d.length; i++) {\n if (!isNonEmptyString(d[i])) return `directives[${i}] must be a non-empty string`;\n }\n } else {\n return 'directives must be a string or array of strings';\n }\n }\n\n if (o['inputs'] !== undefined && o['inputs'] !== null) {\n if (typeof o['inputs'] !== 'object' || Array.isArray(o['inputs'])) return 'inputs must be an object';\n }\n\n if (o['outputs'] !== undefined && o['outputs'] !== null) {\n if (typeof o['outputs'] !== 'object' || Array.isArray(o['outputs'])) return 'outputs must be an object';\n const outs = o['outputs'] as Record<string, unknown>;\n for (const key of Object.keys(outs)) {\n const e = validateOutputValue(outs[key], `outputs.${key}`);\n if (e) return e;\n }\n }\n\n return null;\n}\n\nexport function safeParseBlockDescription(data: unknown): SafeParseBlockDescriptionResult {\n const message = validateBlockDescriptionShape(data);\n if (message) return { success: false, error: { message } };\n\n const o = data as Record<string, unknown>;\n const servicesRaw = o['services'];\n const services: ServiceEntry[] =\n servicesRaw == null\n ? []\n : Array.isArray(servicesRaw)\n ? (servicesRaw as ServiceEntry[])\n : [servicesRaw as ServiceEntry];\n\n const directivesRaw = o['directives'];\n const directives: string | string[] =\n directivesRaw == null ? [] : (directivesRaw as string | string[]);\n\n const result: BlockDescription = {\n component: o['component'] as string,\n services,\n directives,\n };\n if (o['id'] !== undefined) result.id = o['id'] as string;\n if (o['inputs'] !== undefined) result.inputs = o['inputs'] as Record<string, unknown>;\n if (o['outputs'] !== undefined) result.outputs = o['outputs'] as Record<string, BlockOutputValue>;\n\n return { success: true, data: result };\n}\n","import type {\n BlockDescription,\n BlockInput,\n OutputCallObject,\n ServiceEntry,\n} from './block-description.types';\nimport {\n BlockDefinitionsRegistry,\n type BlockDefinitionOrLoader,\n isBlockDefinitionLoader,\n} from '../registry/block-definitions.registry';\nexport type {\n BlockDescription,\n BlockInput,\n BlockOutputValue,\n OutputCallObject,\n SafeParseBlockDescriptionResult,\n ServiceEntry,\n ThenChainStep,\n} from './block-description.types';\nexport type { OutputOnError } from './block-description.types';\n\nexport { safeParseBlockDescription } from './block-description-validate';\n\nasync function resolveBlockDefinitionValue(\n raw: BlockDefinitionOrLoader,\n): Promise<Record<string, unknown>> {\n if (isBlockDefinitionLoader(raw)) {\n return raw();\n }\n return raw;\n}\n\n/** @deprecated Use OutputCallObject */\nexport type OutputReference = OutputCallObject;\n\n/** Normalize services to array. */\nexport function normalizeServices(services: BlockDescription['services']): ServiceEntry[] {\n if (services == null) return [];\n return Array.isArray(services) ? services : [services];\n}\n\n/** Normalize directives to array of directive ids. */\nexport function normalizeDirectives(directives: BlockDescription['directives']): string[] {\n if (directives == null) return [];\n return Array.isArray(directives) ? directives : [directives];\n}\n\nexport function isOutputCallObject(value: unknown): value is OutputCallObject {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n typeof (value as OutputCallObject).ref === 'string' &&\n (value as OutputCallObject).ref.length > 0\n );\n}\n\n/** @deprecated Use isOutputCallObject */\nexport function isOutputReference(value: unknown): value is OutputReference {\n return isOutputCallObject(value);\n}\n\n/**\n * Reference to a registered block: { blockId: string, blockDefinition?: object }.\n * Resolution uses blockId only to look up the registered block description.\n * When blockDefinition is provided, it is deep-merged onto the base so only\n * specified properties override (e.g. inputs.model); other keys are preserved.\n */\nexport interface BlockReference {\n /** Used by isBlockReference only; resolution uses blockId. */\n id?: string;\n /** Registered block id used to resolve the block description. */\n blockId?: string;\n /** Override merged onto the resolved block; only specified keys (e.g. inputs) are applied. */\n blockDefinition?: Partial<BlockInput>;\n}\n\nexport function isBlockReference(value: unknown): value is BlockReference {\n if (typeof value !== 'object' || value === null || 'component' in value) return false;\n const id = (value as BlockReference).id ?? (value as BlockReference).blockId;\n return typeof id === 'string' && id.length > 0;\n}\n\n/**\n * Deep-merge override onto base. Only keys present in override are changed; nested objects\n * are merged recursively so e.g. override.inputs.model does not remove base.inputs.rows.\n * Arrays and primitives in override replace the base value.\n */\nexport function deepMergeBlockDefinition(\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...base };\n for (const key of Object.keys(override)) {\n const baseVal = result[key];\n const overrideVal = override[key];\n if (\n overrideVal != null &&\n typeof overrideVal === 'object' &&\n !Array.isArray(overrideVal) &&\n baseVal != null &&\n typeof baseVal === 'object' &&\n !Array.isArray(baseVal)\n ) {\n result[key] = deepMergeBlockDefinition(\n baseVal as Record<string, unknown>,\n overrideVal as Record<string, unknown>,\n );\n } else {\n result[key] = overrideVal;\n }\n }\n return result;\n}\n\n/**\n * Resolve a block reference to a full description using optional per-call definitions\n * and the global BlockDefinitionsRegistry. Per-call blockDefinitions take precedence\n * over global entries. If blockDefinition is present, it is deep-merged onto the base;\n * otherwise returns a shallow copy of the base.\n *\n * Registry and per-call map entries may be plain objects or async loaders (same pattern\n * as ComponentRegistry / DirectiveRegistry).\n */\nexport async function resolveBlockReference(\n ref: BlockReference,\n blockDefinitions: Record<string, BlockDefinitionOrLoader> | null | undefined,\n): Promise<Record<string, unknown>> {\n const blockId = ref.blockId;\n const id = ref.id;\n const registry: BlockDefinitionsRegistry = BlockDefinitionsRegistry.getInstance();\n if (!blockId || typeof blockId !== 'string')\n throw new Error('Block reference must have blockId.');\n\n let base: Record<string, unknown> | undefined;\n if (blockDefinitions && Object.prototype.hasOwnProperty.call(blockDefinitions, blockId)) {\n const raw = blockDefinitions[blockId] as BlockDefinitionOrLoader;\n base = await resolveBlockDefinitionValue(raw);\n } else {\n base = await registry.get(blockId);\n }\n\n if (base == null || typeof base !== 'object')\n throw new Error(`Block \"${blockId}\" has no definition.`);\n\n if (id != null && id !== '') {\n base = { ...base, id };\n }\n\n const overrides = ref.blockDefinition;\n if (overrides == null || typeof overrides !== 'object' || Object.keys(overrides).length === 0)\n return { ...base };\n return deepMergeBlockDefinition(base, overrides);\n}\n","/**\n * Parse ref paths and detect {{ref}} (read-only) and [(ref)] (two-way) in strings.\n */\n\nconst READONLY_REF_RE = /\\{\\{([^}]+)\\}\\}/g;\nconst TWOWAY_REF_RE = /^\\[\\(([^)]+)\\)\\]$/;\n\nexport interface ParsedRefPath {\n /** Optional scope key prefix for cross-scope refs: `ScopeKey/BlockId:...` */\n scopeKey?: string;\n blockId?: string;\n serviceOrModel: string;\n pathParts: string[];\n}\n\nconst PARSE_REF_PATH_CACHE_MAX = 64;\nconst parseRefPathCache = new Map<string, ParsedRefPath>();\n\n/**\n * Parse ref path in the form \"BlockID:model.info.title\" or \"model.info.title\".\n * - With colon: first segment before \":\" is block id, rest is instance path (service/model + property path).\n * - Without colon: current block; entire string is instance path (service/model + property path).\n * - Single segment (e.g. \"FormState\"): resolved as service/model name on current instance; if missing, resolution returns null (e.g. \"age\" for model path fallback).\n */\nfunction parseRefPathUncached(refPath: string): ParsedRefPath {\n const trimmed = refPath.trim();\n const colonIndex = trimmed.indexOf(':');\n\n if (colonIndex !== -1) {\n const prefix = trimmed.slice(0, colonIndex).trim();\n const rest = trimmed.slice(colonIndex + 1).trim();\n // Prefix may be \"BlockID\" or \"ScopeKey/BlockID\" (scope key may contain '/').\n // BlockID must not contain a dot (so \"BlockID:model.info.title\" is valid; \"a:b:c\" → prefix \"a\", rest \"b:c\")\n if (prefix.length > 0 && !prefix.includes('.')) {\n const lastSlash = prefix.lastIndexOf('/');\n const scopeKey = lastSlash !== -1 ? prefix.slice(0, lastSlash) : undefined;\n const blockId = lastSlash !== -1 ? prefix.slice(lastSlash + 1) : prefix;\n if (!blockId) {\n throw new Error(`Invalid block id: ${prefix}`);\n }\n const pathParts = rest.split('.').filter(Boolean);\n return { scopeKey, blockId, serviceOrModel: pathParts[0], pathParts: pathParts.slice(1) };\n } else {\n throw new Error(`Invalid block id: ${prefix}`);\n }\n }\n\n const pathParts = trimmed.split('.').filter(Boolean);\n if (pathParts.length === 0) {\n return { serviceOrModel: '', pathParts: [] };\n }\n if (pathParts.length === 1) {\n // Single segment: treat as service/model name (e.g. \"FormState\" -> instance.FormState)\n return { serviceOrModel: pathParts[0], pathParts: [] };\n }\n return { serviceOrModel: pathParts[0], pathParts: pathParts.slice(1) };\n}\n\nexport function parseRefPath(refPath: string): ParsedRefPath {\n const cached = parseRefPathCache.get(refPath);\n if (cached) return cached;\n const result = parseRefPathUncached(refPath);\n if (parseRefPathCache.size >= PARSE_REF_PATH_CACHE_MAX) parseRefPathCache.clear();\n parseRefPathCache.set(refPath, result);\n return result;\n}\n\nexport function extractReadonlyRefs(template: string): string[] {\n const refs: string[] = [];\n let m: RegExpExecArray | null;\n READONLY_REF_RE.lastIndex = 0;\n while ((m = READONLY_REF_RE.exec(template)) !== null) {\n const ref = m[1].trim();\n if (ref && !refs.includes(ref)) refs.push(ref);\n }\n return refs;\n}\n\nexport function isTwoWayRefString(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n return TWOWAY_REF_RE.test(value.trim());\n}\n\n/**\n * True when a string contains two-way ref delimiters `[(` or `)]` but is not a valid\n * standalone two-way ref (exact form `[(refPath)]`). Mixing two-way with literals or {{ }} is invalid.\n */\nexport function isInvalidTwoWayMix(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n const s = value.trim();\n const hasDelimiters = s.includes('[(') || s.includes(')]');\n return hasDelimiters && !TWOWAY_REF_RE.test(s);\n}\n\n/**\n * One trim + one pass: classify string for two-way ref handling. Use instead of calling\n * isInvalidTwoWayMix and isTwoWayRefString separately to avoid double trim/regex.\n */\nexport function classifyTwoWayString(value: unknown): 'two-way' | 'invalid-mix' | 'none' {\n if (typeof value !== 'string') return 'none';\n const s = value.trim();\n if (TWOWAY_REF_RE.test(s)) return 'two-way';\n\n const hasOpen = s.includes('[(');\n const hasClose = s.includes(')]');\n if (!hasOpen && !hasClose) return 'none';\n\n // Only treat as invalid mix when the string looks like an attempted two-way ref\n // wrapper, not when it contains \")]\" from normal indexing/calls inside templates.\n if ((hasOpen && hasClose) || s.startsWith('[(') || s.endsWith(')]')) {\n return 'invalid-mix';\n }\n\n return 'none';\n}\n\nexport function parseTwoWayRef(value: string): string | null {\n const m = value.trim().match(TWOWAY_REF_RE);\n return m ? m[1].trim() : null;\n}\n\nexport function getRefPathFromReadonly(template: string, match: string): string {\n const re = new RegExp(`\\\\{\\\\{${escapeRe(match)}\\\\}\\\\}`, 'g');\n const m = re.exec(template);\n return m ? match : '';\n}\n\nfunction escapeRe(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { computed, isSignal, signal, type Signal } from '@angular/core';\nimport type { BlockRegistry, CurrentInstance } from './block-registry';\nimport { parseRefPath } from './ref-expressions';\n\nexport interface ResolverContext {\n registry: BlockRegistry;\n /** Current block's full id (nearest block with id). */\n currentBlockId?: string;\n /** Current block's instance (services/state by name). */\n currentInstance?: CurrentInstance;\n /** Optional scope-key → registry lookup for explicit `ScopeKey/BlockId:...` refs. */\n getRegistryForScope?: (scopeKey: string) => BlockRegistry | null;\n}\n\nconst WARN_CACHE_MAX = 200;\nconst warnCache = new Set<string>();\nfunction warnOnce(msg: string): void {\n if (warnCache.has(msg)) return;\n if (warnCache.size >= WARN_CACHE_MAX) warnCache.clear();\n warnCache.add(msg);\n console.warn(msg);\n}\n\n/**\n * Resolve a ref path to the target object and path.\n * Path format: \"model.info.title\" (current block) or \"BlockID:model.info.title\" (named block).\n * First segment after the optional BlockID: is the service/model name; the rest is the property path.\n * Single-segment refs (e.g. \"age\") return null so interpolation falls back to model path.\n */\nexport function resolveRefPath(\n refPath: string,\n ctx: ResolverContext,\n): { target: unknown; path: string[] } | null {\n const parsed = parseRefPath(refPath);\n const { scopeKey, blockId, serviceOrModel, pathParts } = parsed;\n\n if (!serviceOrModel) {\n return null;\n }\n\n const registry =\n scopeKey != null\n ? (ctx.getRegistryForScope?.(scopeKey) ?? null)\n : ctx.registry;\n if (scopeKey != null && registry == null) {\n warnOnce(`Ref \"${refPath}\" could not resolve scope \"${scopeKey}\".`);\n return null;\n }\n\n let instance: CurrentInstance | undefined;\n if (blockId != null) {\n // Allow self-references during load before the current block is registered.\n // Important: only shortcut when there is no explicit scope. Scoped refs must resolve through that scope's registry.\n if (\n scopeKey == null &&\n ctx.currentBlockId != null &&\n blockId === ctx.currentBlockId &&\n ctx.currentInstance != null\n ) {\n instance = ctx.currentInstance;\n } else {\n const handle = (registry ?? ctx.registry).get(blockId);\n if (!handle) {\n warnOnce(`Ref \"${refPath}\" could not resolve block id \"${blockId}\".`);\n return null;\n }\n instance = handle.instance;\n }\n } else {\n instance = ctx.currentInstance ?? undefined;\n }\n\n if (instance == null) return null;\n\n // Special-case: `model` refers to the instance model signal (not a service).\n if (serviceOrModel === 'model') {\n const base = instance.model;\n if (!base) {\n warnOnce(`Ref \"${refPath}\" could not resolve model (no instance model).`);\n return null;\n }\n if (pathParts.length === 0) {\n return { target: base, path: [] };\n }\n let current: unknown = base;\n for (let i = 0; i < pathParts.length - 1; i++) {\n if (current != null && isSignal(current)) {\n current = (current as Signal<unknown>)();\n }\n if (current == null || typeof current !== 'object') return null;\n current = (current as Record<string, unknown>)[pathParts[i]];\n }\n return { target: current, path: pathParts.slice(-1) };\n }\n\n const service = instance.services?.[serviceOrModel];\n\n // If the named service/model is not present on the instance, fall back to `model.<serviceOrModel>...`\n // (e.g. `Kanban:title` -> `Kanban.model.title`) but only for named-block refs.\n const shouldModelFallback = blockId != null && service == null && instance.model != null;\n const base = shouldModelFallback ? instance.model : service;\n const effectiveParts = shouldModelFallback ? [serviceOrModel, ...pathParts] : pathParts;\n\n if (!base) {\n warnOnce(`Ref \"${refPath}\" could not resolve service/model \"${serviceOrModel}\".`);\n return null;\n }\n if (effectiveParts.length === 0) {\n return { target: base, path: [] };\n }\n\n let current: unknown = base;\n\n for (let i = 0; i < effectiveParts.length - 1; i++) {\n // Unwrap signals at each segment so model.item.a works even when\n // model or item are signals.\n if (current != null && isSignal(current)) {\n current = (current as Signal<unknown>)();\n }\n if (current == null || typeof current !== 'object') return null;\n current = (current as Record<string, unknown>)[effectiveParts[i]];\n }\n\n // Do not unwrap the final segment here; leave it to getRefValue / setRefValue so they\n // can consistently handle signals and functions at the leaf.\n return { target: current, path: effectiveParts.slice(-1) };\n}\n\n/**\n * Get a value from an object by dot-notation path (e.g. \"name.firstName\" -> obj.name?.firstName).\n * Returns undefined if any segment is null/undefined or not an object.\n */\nexport function getValueByPath(obj: unknown, path: string): unknown {\n if (obj == null) return undefined;\n const parts = path.trim().split('.').filter(Boolean);\n let current: unknown = obj;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Return true if the value at ref path is an Angular signal (so reading it in an effect would be reactive).\n */\nexport function refPathResolvesToSignal(refPath: string, ctx: ResolverContext): boolean {\n const resolved = resolveRefPath(refPath, ctx);\n if (resolved == null) return false;\n const val =\n resolved.path.length === 0\n ? resolved.target\n : (resolved.target as Record<string, unknown>)?.[resolved.path[0]];\n return val != null && isSignal(val);\n}\n\n/**\n * Get value at ref path (read-only). Returns undefined if not found.\n * When target is a Signal (e.g. model) and path has segments, unwraps the Signal first\n * so refs like PersonForm:model.firstName resolve correctly.\n */\nexport function getRefValue(refPath: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(refPath, ctx);\n\n if (resolved == null || resolved.path.length === 0) {\n return resolved?.target;\n }\n\n let obj: unknown = resolved.target;\n // Unwrap Signal so we can read properties (e.g. PersonForm:model.firstName)\n if (obj != null && isSignal(obj)) {\n obj = (obj as Signal<unknown>)();\n }\n const key = resolved.path[0];\n const val = (obj as Record<string, unknown>)?.[key];\n if (val != null && isSignal(val)) {\n return val();\n }\n if (typeof val === 'function') {\n return (val as () => unknown)();\n }\n return val;\n}\n\nexport function getRefSignal(refPath: string, ctx: ResolverContext): Signal<unknown> | undefined {\n const resolved = resolveRefPath(refPath, ctx);\n\n if (resolved == null) return undefined;\n\n let value: unknown;\n if (resolved.path.length === 0) {\n value = resolved.target;\n } else {\n if (isSignal(resolved.target)) {\n const signalValue = resolved.target();\n\n value =\n signalValue != null && typeof signalValue === 'object'\n ? (signalValue as Record<string, unknown>)[resolved.path[0]]\n : undefined;\n } else {\n value = (resolved.target as Record<string, unknown>)?.[resolved.path[0]];\n }\n }\n\n return value != null && isSignal(value) ? (value as Signal<unknown>) : undefined;\n}\n\n/**\n * Set value at ref path (write). No-op if target is not writable.\n */\nexport function setRefValue(refPath: string, ctx: ResolverContext, value: unknown): void {\n const resolved = resolveRefPath(refPath, ctx);\n if (resolved == null || resolved.path.length === 0) return;\n const obj = resolved.target as Record<string, unknown>;\n const key = resolved.path[0];\n const val = obj?.[key];\n // use isSignal so we only treat real signals as writable\n type WritableSignalLike = { set: (v: unknown) => void };\n const writable =\n val != null && isSignal(val) && typeof (val as unknown as WritableSignalLike).set === 'function'\n ? (val as unknown as WritableSignalLike)\n : null;\n if (writable) {\n writable.set(value);\n } else if (obj != null && typeof obj === 'object') {\n (obj as Record<string, unknown>)[key] = value;\n }\n}\n\n/**\n * Build a computed signal for a template string with {{refPath}} placeholders.\n */\nexport function buildComputedForTemplate(\n template: string,\n refPaths: string[],\n ctx: ResolverContext,\n): Signal<string> {\n const escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return computed(() => {\n let out = template;\n for (const refPath of refPaths) {\n const val = getRefValue(refPath, ctx);\n const str = val != null ? String(val) : '';\n out = out.replace(new RegExp(`\\\\{\\\\{${escapeRe(refPath)}\\\\}\\\\}`, 'g'), str);\n }\n return out;\n });\n}\n","import type { ResolverContext } from './ref-resolver';\nimport {\n getRefValue,\n getValueByPath,\n resolveRefPath,\n} from './ref-resolver';\n\n/** AST node types for flow template */\nexport type FlowNode =\n | { type: 'text'; value: string }\n | { type: 'ref'; refPath: string }\n | { type: 'if'; refPath: string; body: FlowNode[]; elseBody?: FlowNode[] }\n | { type: 'for'; itemVar: string; refPath: string; body: FlowNode[] };\n\n/** Scope for @for (e.g. item, $index) */\nexport interface FlowScope {\n [key: string]: unknown;\n}\n\nexport interface InterpretFlowOptions {\n /**\n * Called for each `text` node (e.g. to expand `{{ }}` inside flow bodies).\n * Defaults to identity.\n */\n interpolateText?: (segment: string) => string;\n /**\n * When set, `@if (…)` evaluates this instead of `resolveRefOrModel` (e.g. safe expressions + payload).\n */\n resolveCondition?: (expression: string, scope: FlowScope) => unknown;\n /**\n * When false, `${…}` values are appended without HTML escaping (e.g. output handler params). Default true.\n */\n escapeRefValues?: boolean;\n}\n\n/** Match ${refPath} at start of string (no g flag so match() returns groups). */\nconst REF_AT_START_RE = /^\\$\\{([^}]*)\\}/;\nconst IF_PREFIX_RE = /^@if\\s*\\(/;\nconst FOR_PREFIX_RE = /^@for\\s*\\(/;\n\n/** `s[openIdx] === '('` → index of matching `)`, or -1. */\nfunction findMatchingParen(s: string, openIdx: number): number {\n let depth = 0;\n for (let k = openIdx; k < s.length; k++) {\n const c = s[k];\n if (c === '(') depth++;\n else if (c === ')') {\n depth--;\n if (depth === 0) return k;\n }\n }\n return -1;\n}\n\nfunction findMatchingBrace(s: string, start: number): number {\n let depth = 1;\n for (let i = start; i < s.length; i++) {\n if (s[i] === '{') depth++;\n else if (s[i] === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\n/**\n * Parses a flow template string into an AST.\n * Supports: ${refPath}, @if (refPath) { ... }, @else { ... }, @for (item of refPath) { ... }\n */\nexport function parseFlowTemplate(template: string): FlowNode[] {\n const nodes: FlowNode[] = [];\n let i = 0;\n\n while (i < template.length) {\n const rest = template.slice(i);\n\n const ifPrefix = rest.match(IF_PREFIX_RE);\n if (ifPrefix) {\n const openParenIdx = i + ifPrefix[0].length - 1;\n const closeParenIdx = findMatchingParen(template, openParenIdx);\n if (closeParenIdx === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const refPath = template.slice(openParenIdx + 1, closeParenIdx).trim();\n let bodyOpen = closeParenIdx + 1;\n while (bodyOpen < template.length && /\\s/.test(template[bodyOpen])) bodyOpen++;\n if (template[bodyOpen] !== '{') {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const bodyStart = bodyOpen + 1;\n const bodyEnd = findMatchingBrace(template, bodyStart);\n if (bodyEnd === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const body = template.slice(bodyStart, bodyEnd);\n let next = bodyEnd + 1;\n let elseBody: FlowNode[] | undefined;\n let cursor = next;\n while (cursor < template.length && /\\s/.test(template[cursor] ?? '')) {\n cursor++;\n }\n if (template.startsWith('@else', cursor)) {\n let elseCursor = cursor + '@else'.length;\n while (elseCursor < template.length && /\\s/.test(template[elseCursor] ?? '')) {\n elseCursor++;\n }\n if (template[elseCursor] === '{') {\n const elseEnd = findMatchingBrace(template, elseCursor + 1);\n if (elseEnd !== -1) {\n elseBody = parseFlowTemplate(template.slice(elseCursor + 1, elseEnd));\n next = elseEnd + 1;\n }\n }\n }\n nodes.push({ type: 'if', refPath, body: parseFlowTemplate(body), elseBody });\n i = next;\n continue;\n }\n\n const forPrefix = rest.match(FOR_PREFIX_RE);\n if (forPrefix) {\n const openParenIdx = i + forPrefix[0].length - 1;\n const closeParenIdx = findMatchingParen(template, openParenIdx);\n if (closeParenIdx === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const inner = template.slice(openParenIdx + 1, closeParenIdx).trim();\n const ofMatch = inner.match(/^(\\w+)\\s+of\\s+([\\s\\S]+)$/);\n if (!ofMatch) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const itemVar = ofMatch[1];\n const refPath = ofMatch[2].trim();\n let bodyOpen = closeParenIdx + 1;\n while (bodyOpen < template.length && /\\s/.test(template[bodyOpen])) bodyOpen++;\n if (template[bodyOpen] !== '{') {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const bodyStart = bodyOpen + 1;\n const bodyEnd = findMatchingBrace(template, bodyStart);\n if (bodyEnd === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const body = template.slice(bodyStart, bodyEnd);\n nodes.push({ type: 'for', itemVar, refPath, body: parseFlowTemplate(body) });\n i = bodyEnd + 1;\n continue;\n }\n\n const refMatch = rest.match(REF_AT_START_RE);\n if (refMatch) {\n const refPath = refMatch[1].trim();\n nodes.push({ type: 'ref', refPath });\n i += refMatch[0].length;\n continue;\n }\n\n const nextAt = rest.search(/@(?:if|else|for)\\s/);\n const nextDollar = rest.indexOf('${');\n let end: number;\n if (nextAt >= 0 && (nextDollar < 0 || nextAt < nextDollar)) end = i + nextAt;\n else if (nextDollar >= 0) end = i + nextDollar;\n else end = template.length;\n\n if (end > i) {\n nodes.push({ type: 'text', value: template.slice(i, end) });\n i = end;\n } else {\n nodes.push({ type: 'text', value: rest[0] ?? '' });\n i++;\n }\n }\n\n return nodes;\n}\n\n/** Collect all ref paths used in the AST (for reactivity). */\nexport function collectRefPaths(nodes: FlowNode[]): Set<string> {\n const paths = new Set<string>();\n function walk(ns: FlowNode[]) {\n for (const n of ns) {\n if (n.type === 'ref') paths.add(n.refPath);\n else if (n.type === 'if') {\n paths.add(n.refPath);\n walk(n.body);\n if (n.elseBody) walk(n.elseBody);\n } else if (n.type === 'for') {\n paths.add(n.refPath);\n walk(n.body);\n }\n }\n }\n walk(nodes);\n return paths;\n}\n\nfunction escapeHtml(s: string): string {\n const el = typeof document !== 'undefined' ? document.createElement('div') : null;\n if (el) {\n el.textContent = s;\n return el.innerHTML;\n }\n return s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction resolveInScope(refPath: string, scope: FlowScope): unknown {\n const parts = refPath.trim().split('.');\n let v: unknown = scope[parts[0]];\n for (let i = 1; i < parts.length && v !== undefined && v !== null; i++) {\n v = (v as Record<string, unknown>)[parts[i]];\n }\n return v;\n}\n\nfunction isTruthyFlowValue(value: unknown): boolean {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return false;\n if (normalized === 'false' || normalized === '0' || normalized === 'no' || normalized === 'off') {\n return false;\n }\n return true;\n }\n return !!value;\n}\n\n/**\n * Same resolution rules as `interpolateTemplateMixed` for refs: named block ref, else current block `model` path.\n */\nexport function resolveRefOrModel(refPath: string, ctx: ResolverContext): unknown {\n const ref = refPath.trim();\n if (!ref) return undefined;\n const resolved = resolveRefPath(ref, ctx);\n if (resolved != null) {\n return getRefValue(ref, ctx);\n }\n return getValueByPath(ctx.currentInstance?.model?.() ?? {}, ref);\n}\n\n/**\n * Interprets the AST with the given resolver context and optional scope (e.g. item, $index).\n * Escapes interpolated values for safe innerHTML.\n */\nexport function interpretFlow(\n nodes: FlowNode[],\n ctx: ResolverContext,\n scope: FlowScope = {},\n options?: InterpretFlowOptions,\n): string {\n const interpText = options?.interpolateText ?? ((s: string) => s);\n const escapeRefs = options?.escapeRefValues !== false;\n let out = '';\n for (const node of nodes) {\n if (node.type === 'text') {\n out += interpText(node.value);\n continue;\n }\n if (node.type === 'ref') {\n const refPath = node.refPath.trim();\n const firstSegment = refPath.split('.')[0];\n let value: unknown;\n if (firstSegment && firstSegment in scope) {\n value = resolveInScope(refPath, scope);\n } else {\n value = resolveRefOrModel(refPath, ctx);\n }\n if (value !== undefined && value !== null) {\n const chunk = String(value);\n out += escapeRefs ? escapeHtml(chunk) : chunk;\n }\n continue;\n }\n if (node.type === 'if') {\n const rawExpr = node.refPath.trim();\n const cond = options?.resolveCondition\n ? options.resolveCondition(rawExpr, scope)\n : resolveRefOrModel(rawExpr, ctx);\n if (isTruthyFlowValue(cond)) {\n out += interpretFlow(node.body, ctx, scope, options);\n } else if (node.elseBody?.length) {\n out += interpretFlow(node.elseBody, ctx, scope, options);\n }\n continue;\n }\n if (node.type === 'for') {\n const arr = resolveRefOrModel(node.refPath, ctx);\n const list = Array.isArray(arr) ? arr : [];\n for (let idx = 0; idx < list.length; idx++) {\n out += interpretFlow(node.body, ctx, {\n ...scope,\n [node.itemVar]: list[idx],\n $index: idx,\n }, options);\n }\n continue;\n }\n }\n return out;\n}\n\n/** True if the string uses flow syntax (not plain `{{ }}` only). */\nexport function looksLikeFlowTemplate(s: string): boolean {\n return /@(?:if|for)\\s*\\(/.test(s) || /\\$\\{[^}]+\\}/.test(s);\n}\n","import type { ResolverContext } from './ref-resolver';\n\ntype TokenType =\n | 'identifier'\n | 'number'\n | 'string'\n | 'boolean'\n | 'null'\n | 'operator'\n | 'lparen'\n | 'rparen'\n | 'lbracket'\n | 'rbracket'\n | 'dot'\n | 'comma'\n | 'question'\n | 'colon'\n | 'eof';\n\ninterface Token {\n type: TokenType;\n value: string;\n}\n\ntype Expr =\n | { kind: 'literal'; value: unknown }\n | { kind: 'identifier'; name: string }\n | { kind: 'member'; object: Expr; property: string }\n | { kind: 'index'; object: Expr; index: Expr }\n | { kind: 'call'; callee: Expr; args: Expr[] }\n | { kind: 'unary'; op: string; argument: Expr }\n | { kind: 'binary'; op: string; left: Expr; right: Expr }\n | { kind: 'conditional'; test: Expr; consequent: Expr; alternate: Expr };\n\ninterface EvalContext {\n payload: unknown;\n model: Record<string, unknown>;\n services: Record<string, unknown> | undefined;\n resolveRefValue: (ref: string) => unknown;\n}\n\nfunction isIdentStart(ch: string): boolean {\n return /[A-Za-z_$]/.test(ch);\n}\n\nfunction isIdentPart(ch: string): boolean {\n return /[A-Za-z0-9_$]/.test(ch);\n}\n\nfunction tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n let i = 0;\n while (i < input.length) {\n const ch = input[i];\n if (/\\s/.test(ch)) {\n i++;\n continue;\n }\n if (ch === '(') {\n tokens.push({ type: 'lparen', value: ch }); i++; continue;\n }\n if (ch === ')') {\n tokens.push({ type: 'rparen', value: ch }); i++; continue;\n }\n if (ch === '[') {\n tokens.push({ type: 'lbracket', value: ch }); i++; continue;\n }\n if (ch === ']') {\n tokens.push({ type: 'rbracket', value: ch }); i++; continue;\n }\n if (ch === '.') {\n tokens.push({ type: 'dot', value: ch }); i++; continue;\n }\n if (ch === ',') {\n tokens.push({ type: 'comma', value: ch }); i++; continue;\n }\n if (ch === '?') {\n tokens.push({ type: 'question', value: ch }); i++; continue;\n }\n if (ch === ':') {\n tokens.push({ type: 'colon', value: ch }); i++; continue;\n }\n if (ch === '\"' || ch === \"'\") {\n const quote = ch;\n let out = '';\n i++;\n while (i < input.length && input[i] !== quote) {\n if (input[i] === '\\\\' && i + 1 < input.length) {\n i++;\n out += input[i];\n } else {\n out += input[i];\n }\n i++;\n }\n if (input[i] !== quote) throw new Error('Unterminated string');\n i++;\n tokens.push({ type: 'string', value: out });\n continue;\n }\n if (/[0-9]/.test(ch)) {\n let n = ch;\n i++;\n while (i < input.length && /[0-9.]/.test(input[i])) {\n n += input[i++];\n }\n tokens.push({ type: 'number', value: n });\n continue;\n }\n const three = input.slice(i, i + 3);\n const two = input.slice(i, i + 2);\n if (['===', '!=='].includes(three)) {\n tokens.push({ type: 'operator', value: three }); i += 3; continue;\n }\n if (['&&', '||', '==', '!=', '<=', '>='].includes(two)) {\n tokens.push({ type: 'operator', value: two }); i += 2; continue;\n }\n if (['+', '-', '*', '/', '%', '<', '>', '!'].includes(ch)) {\n tokens.push({ type: 'operator', value: ch }); i++; continue;\n }\n if (isIdentStart(ch)) {\n let id = ch;\n i++;\n while (i < input.length && isIdentPart(input[i])) id += input[i++];\n if (id === 'true' || id === 'false') tokens.push({ type: 'boolean', value: id });\n else if (id === 'null') tokens.push({ type: 'null', value: id });\n else tokens.push({ type: 'identifier', value: id });\n continue;\n }\n throw new Error(`Unexpected token: ${ch}`);\n }\n tokens.push({ type: 'eof', value: '' });\n return tokens;\n}\n\nclass Parser {\n constructor(private readonly tokens: Token[], private pos = 0) {}\n private peek(): Token { return this.tokens[this.pos]; }\n private next(): Token { return this.tokens[this.pos++]; }\n private expect(type: TokenType): Token {\n const t = this.next();\n if (t.type !== type) throw new Error(`Expected ${type}, got ${t.type}`);\n return t;\n }\n parse(): Expr {\n const expr = this.parseConditional();\n if (this.peek().type !== 'eof') throw new Error('Unexpected trailing tokens');\n return expr;\n }\n private parseConditional(): Expr {\n const test = this.parseLogicalOr();\n if (this.peek().type === 'question') {\n this.next();\n const consequent = this.parseConditional();\n this.expect('colon');\n const alternate = this.parseConditional();\n return { kind: 'conditional', test, consequent, alternate };\n }\n return test;\n }\n private parseLogicalOr(): Expr {\n let left = this.parseLogicalAnd();\n while (this.peek().type === 'operator' && this.peek().value === '||') {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseLogicalAnd() };\n }\n return left;\n }\n private parseLogicalAnd(): Expr {\n let left = this.parseEquality();\n while (this.peek().type === 'operator' && this.peek().value === '&&') {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseEquality() };\n }\n return left;\n }\n private parseEquality(): Expr {\n let left = this.parseComparison();\n while (this.peek().type === 'operator' && ['==', '!=', '===', '!=='].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseComparison() };\n }\n return left;\n }\n private parseComparison(): Expr {\n let left = this.parseAdditive();\n while (this.peek().type === 'operator' && ['<', '>', '<=', '>='].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseAdditive() };\n }\n return left;\n }\n private parseAdditive(): Expr {\n let left = this.parseMultiplicative();\n while (this.peek().type === 'operator' && ['+', '-'].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseMultiplicative() };\n }\n return left;\n }\n private parseMultiplicative(): Expr {\n let left = this.parseUnary();\n while (this.peek().type === 'operator' && ['*', '/', '%'].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseUnary() };\n }\n return left;\n }\n private parseUnary(): Expr {\n if (this.peek().type === 'operator' && ['!', '+', '-'].includes(this.peek().value)) {\n const op = this.next().value;\n return { kind: 'unary', op, argument: this.parseUnary() };\n }\n return this.parsePostfix();\n }\n private parsePostfix(): Expr {\n let expr = this.parsePrimary();\n while (true) {\n if (this.peek().type === 'dot') {\n this.next();\n const id = this.expect('identifier');\n expr = { kind: 'member', object: expr, property: id.value };\n continue;\n }\n if (this.peek().type === 'lbracket') {\n this.next();\n const index = this.parseConditional();\n this.expect('rbracket');\n expr = { kind: 'index', object: expr, index };\n continue;\n }\n if (this.peek().type === 'lparen') {\n this.next();\n const args: Expr[] = [];\n if (this.peek().type !== 'rparen') {\n args.push(this.parseConditional());\n while (this.peek().type === 'comma') {\n this.next();\n args.push(this.parseConditional());\n }\n }\n this.expect('rparen');\n expr = { kind: 'call', callee: expr, args };\n continue;\n }\n break;\n }\n return expr;\n }\n private parsePrimary(): Expr {\n const t = this.next();\n if (t.type === 'number') return { kind: 'literal', value: Number(t.value) };\n if (t.type === 'string') return { kind: 'literal', value: t.value };\n if (t.type === 'boolean') return { kind: 'literal', value: t.value === 'true' };\n if (t.type === 'null') return { kind: 'literal', value: null };\n if (t.type === 'identifier') return { kind: 'identifier', name: t.value };\n if (t.type === 'lparen') {\n const expr = this.parseConditional();\n this.expect('rparen');\n return expr;\n }\n throw new Error(`Unexpected token type: ${t.type}`);\n }\n}\n\nfunction evalExpr(expr: Expr, ctx: EvalContext): unknown {\n switch (expr.kind) {\n case 'literal': return expr.value;\n case 'identifier':\n if (expr.name === '$event' || expr.name === 'event' || expr.name === 'payload' || expr.name === 'value') {\n return ctx.payload;\n }\n if (expr.name in ctx.model) return ctx.model[expr.name];\n if (ctx.services != null && expr.name in ctx.services) return ctx.services[expr.name];\n return undefined;\n case 'member': {\n let obj = evalExpr(expr.object, ctx);\n // Support expressions like ref(\"Block:model\").title where ref(...) can return a signal/function.\n if (\n expr.object.kind === 'call' &&\n expr.object.callee.kind === 'identifier' &&\n expr.object.callee.name === 'ref' &&\n typeof obj === 'function'\n ) {\n obj = (obj as () => unknown)();\n }\n if (obj == null || typeof obj !== 'object') return undefined;\n return (obj as Record<string, unknown>)[expr.property];\n }\n case 'index': {\n let obj = evalExpr(expr.object, ctx);\n if (\n expr.object.kind === 'call' &&\n expr.object.callee.kind === 'identifier' &&\n expr.object.callee.name === 'ref' &&\n typeof obj === 'function'\n ) {\n obj = (obj as () => unknown)();\n }\n if (obj == null || (typeof obj !== 'object' && typeof obj !== 'function')) return undefined;\n const key = evalExpr(expr.index, ctx);\n if (typeof key !== 'string' && typeof key !== 'number') return undefined;\n return (obj as Record<string | number, unknown>)[key];\n }\n case 'call': {\n if (expr.callee.kind !== 'identifier' || expr.callee.name !== 'ref') {\n throw new Error('Only ref(...) calls are allowed');\n }\n if (expr.args.length < 1 || expr.args.length > 2) {\n throw new Error('ref(...) requires one or two arguments');\n }\n const arg = evalExpr(expr.args[0], ctx);\n if (typeof arg !== 'string') return undefined;\n const resolved = ctx.resolveRefValue(arg);\n const shouldInvoke =\n expr.args.length === 2\n ? evalExpr(expr.args[1], ctx) === true\n : false;\n if (shouldInvoke && typeof resolved === 'function') {\n return (resolved as () => unknown)();\n }\n return resolved;\n }\n case 'unary': {\n const v = evalExpr(expr.argument, ctx);\n if (expr.op === '!') return !v;\n if (expr.op === '+') return Number(v);\n if (expr.op === '-') return -Number(v);\n return undefined;\n }\n case 'binary': {\n const left = evalExpr(expr.left, ctx);\n if (expr.op === '&&') return left && evalExpr(expr.right, ctx);\n if (expr.op === '||') return left || evalExpr(expr.right, ctx);\n const right = evalExpr(expr.right, ctx);\n switch (expr.op) {\n case '+': return (left as unknown as any) + (right as unknown as any);\n case '-': return Number(left) - Number(right);\n case '*': return Number(left) * Number(right);\n case '/': return Number(left) / Number(right);\n case '%': return Number(left) % Number(right);\n case '<': return (left as number | string) < (right as number | string);\n case '>': return (left as number | string) > (right as number | string);\n case '<=': return (left as number | string) <= (right as number | string);\n case '>=': return (left as number | string) >= (right as number | string);\n case '==': return left == right;\n case '!=': return left != right;\n case '===': return left === right;\n case '!==': return left !== right;\n default: return undefined;\n }\n }\n case 'conditional':\n return evalExpr(expr.test, ctx) ? evalExpr(expr.consequent, ctx) : evalExpr(expr.alternate, ctx);\n }\n}\n\nexport function evaluateSafeExpression(\n expression: string,\n resolverContext: ResolverContext,\n payload: unknown,\n resolveRefValue: (ref: string, ctx: ResolverContext) => unknown\n): unknown {\n const ast = new Parser(tokenize(expression)).parse();\n\n return evalExpr(ast, {\n payload,\n model: (resolverContext.currentInstance?.model?.() ?? {}) as Record<string, unknown>,\n services: resolverContext.currentInstance?.services,\n resolveRefValue: (ref: string) => resolveRefValue(ref, resolverContext),\n });\n}\n","import { interpretFlow, looksLikeFlowTemplate, parseFlowTemplate } from './flow-template';\n\nexport { looksLikeFlowTemplate };\nimport type { ResolverContext } from './ref-resolver';\nimport { getRefValue, getValueByPath, resolveRefPath } from './ref-resolver';\nimport { evaluateSafeExpression } from './safe-expression-evaluator';\n\nconst MUSTACHE_MAX_SEGMENTS = 200;\n\nexport function resolveReferenceValue(ref: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(ref, ctx);\n if (resolved != null) return getRefValue(ref, ctx);\n return getValueByPath(ctx.currentInstance?.model?.() ?? {}, ref);\n}\n\n/**\n * Safe expression evaluation (same as output `{{ }}` / `@if (...)` when used with this module).\n * Falls back to `resolveReferenceValue` if parsing fails (treat whole string as a ref path).\n */\nexport function evaluateExpression(\n expression: string,\n ctx: ResolverContext,\n payload: unknown,\n): unknown {\n const trimmed = expression.trim();\n if (!trimmed) return undefined;\n try {\n return evaluateSafeExpression(trimmed, ctx, payload, resolveReferenceValue);\n } catch {\n return resolveReferenceValue(trimmed, ctx);\n }\n}\n\n/**\n * Resolves only `{{ … }}` segments via `evaluateExpression`.\n * Single full-string `{{ expr }}` preserves the evaluated type; mixed templates return a string.\n */\nexport function resolveMustacheInterpolatedString(\n value: string,\n ctx: ResolverContext,\n payload: unknown,\n): unknown {\n if (!value.includes('{{') || !value.includes('}}')) return value;\n\n const re = /\\{\\{([\\s\\S]*?)\\}\\}/g;\n const matches = [...value.matchAll(re)];\n if (matches.length === 0) return value;\n if (matches.length > MUSTACHE_MAX_SEGMENTS) {\n console.warn(\n `Template has more than ${MUSTACHE_MAX_SEGMENTS} mustache segments; truncating interpolation.`,\n );\n }\n const limited = matches.slice(0, MUSTACHE_MAX_SEGMENTS);\n\n if (\n limited.length === 1 &&\n limited[0][0].length === value.trim().length &&\n limited[0][0] === value.trim()\n ) {\n return evaluateExpression(limited[0][1], ctx, payload);\n }\n\n let out = '';\n let lastIndex = 0;\n for (const match of limited) {\n const start = match.index ?? 0;\n out += value.slice(lastIndex, start);\n const evaluated = evaluateExpression(match[1], ctx, payload);\n out += evaluated != null ? String(evaluated) : '';\n lastIndex = start + match[0].length;\n }\n out += value.slice(lastIndex);\n return out;\n}\n\nexport function mustacheSegmentToString(\n segment: string,\n ctx: ResolverContext,\n payload: unknown,\n): string {\n const v = resolveMustacheInterpolatedString(segment, ctx, payload);\n if (v == null) return '';\n if (typeof v === 'string') return v;\n return String(v);\n}\n\nexport interface ResolveTemplateStringOptions {\n /**\n * When true (default), `${…}` in flow output is HTML-escaped (block / innerHTML-friendly).\n * Set false for plain strings (e.g. output handler method params).\n */\n escapeFlowRefs?: boolean;\n}\n\n/**\n * Unified template resolution: flow (`@if`, `@for`, `${}`) plus `{{ }}` in flow text segments.\n * `@if` conditions use `evaluateExpression` (safe expressions + ref fallback).\n */\nexport function resolveTemplateString(\n value: string,\n ctx: ResolverContext,\n payload: unknown = undefined,\n options?: ResolveTemplateStringOptions,\n): unknown {\n const escapeFlowRefs = options?.escapeFlowRefs !== false;\n\n if (looksLikeFlowTemplate(value)) {\n return interpretFlow(parseFlowTemplate(value), ctx, {}, {\n escapeRefValues: escapeFlowRefs,\n resolveCondition: (expr) => evaluateExpression(expr, ctx, payload),\n interpolateText: (segment) => mustacheSegmentToString(segment, ctx, payload),\n });\n }\n return resolveMustacheInterpolatedString(value, ctx, payload);\n}\n","import type { OutputCallObject } from './block-description.schema';\nimport { isOutputCallObject } from './block-description.schema';\nimport type { ResolverContext } from './ref-resolver';\nimport { resolveRefPath } from './ref-resolver';\nimport { resolveTemplateString } from './template-interpolation';\n\nfunction getCallTarget(reference: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(reference, ctx);\n if (resolved == null) return undefined;\n const { target, path } = resolved;\n if (path.length === 0) return target;\n const parent = target as Record<string, unknown>;\n return parent?.[path[0]];\n}\n\nfunction resolveReferencePath(reference: string, ctx: ResolverContext, payload: unknown): string {\n const resolved = resolveTemplateString(reference, ctx, payload, { escapeFlowRefs: false });\n return typeof resolved === 'string' ? resolved : String(resolved ?? '');\n}\n\n/**\n * Split `Block:path.to.method` or `service.path.method` (current block) into ref path + method name.\n * Last dot-separated segment after `:` is the method; before that is the ref path.\n */\nexport function splitCallableRef(fullPath: string): { refPath: string; method: string } | null {\n const trimmed = fullPath.trim();\n if (!trimmed) return null;\n const colonIdx = trimmed.indexOf(':');\n if (colonIdx !== -1) {\n const prefix = trimmed.slice(0, colonIdx).trim();\n const rest = trimmed.slice(colonIdx + 1).trim();\n const parts = rest.split('.').filter(Boolean);\n if (parts.length < 2) return null;\n const method = parts[parts.length - 1]!;\n const parentRest = parts.slice(0, -1).join('.');\n return { refPath: `${prefix}:${parentRest}`, method };\n }\n const parts = trimmed.split('.').filter(Boolean);\n if (parts.length < 2) return null;\n const method = parts[parts.length - 1]!;\n const refPath = parts.slice(0, -1).join('.');\n return { refPath, method };\n}\n\nfunction getMethodOnTarget(\n target: unknown,\n methodName: string,\n): ((...args: unknown[]) => unknown) | null {\n if (target == null) return null;\n const m = (target as Record<string, unknown>)[methodName];\n return typeof m === 'function' ? (m as (...args: unknown[]) => unknown) : null;\n}\n\nfunction warnNotCallable(\n resolvedFullRef: string,\n refPath: string,\n method: string,\n callTarget: unknown,\n): void {\n const leafDesc =\n callTarget != null && typeof callTarget === 'object'\n ? typeof (callTarget as Record<string, unknown>)[method]\n : 'n/a';\n console.warn(\n `Output call \"${resolvedFullRef}\": \"${method}\" is not a callable function ` +\n `(ref path \"${refPath}\"); resolved leaf type: ${leafDesc}.`,\n );\n}\n\nfunction resolveOutputParamValue(value: unknown, ctx: ResolverContext, payload: unknown): unknown {\n if (typeof value === 'string') {\n return resolveTemplateString(value, ctx, payload, { escapeFlowRefs: false });\n }\n if (Array.isArray(value)) {\n return value.map((item) => resolveOutputParamValue(item, ctx, payload));\n }\n\n if (value != null && typeof value === 'object' && !('component' in value)) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [\n key,\n resolveOutputParamValue(item, ctx, payload),\n ]),\n );\n }\n\n return value;\n}\n\nfunction isTruthyOutputCondition(value: unknown): boolean {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return false;\n if (normalized === 'false' || normalized === '0' || normalized === 'no' || normalized === 'off') {\n return false;\n }\n return true;\n }\n return !!value;\n}\n\nfunction shouldRunWhen(when: unknown, ctx: ResolverContext, payload: unknown): boolean {\n if (when == null) return true;\n const resolved = resolveOutputParamValue(when, ctx, payload);\n return isTruthyOutputCondition(resolved);\n}\n\ntype CallableExtras = Pick<OutputCallObject, 'when' | 'params' | 'then' | 'onError'>;\n\nfunction buildOutputHandlerFromCall(\n refTemplate: string,\n extras: CallableExtras,\n ctx: ResolverContext,\n eventValue: unknown,\n): (value: unknown) => void {\n const def: OutputCallObject = { ref: refTemplate, ...extras };\n return (value: unknown) => {\n const payload = value ?? eventValue;\n if (!shouldRunWhen(def.when, ctx, payload)) {\n return;\n }\n const resolvedCallable = resolveReferencePath(refTemplate, ctx, payload);\n const split = splitCallableRef(resolvedCallable);\n if (split == null) {\n console.warn(\n `Invalid output callable ref \"${resolvedCallable}\" (expected e.g. Block:path.method or service.path.method)`,\n );\n return;\n }\n const { refPath, method } = split;\n const callTarget = getCallTarget(refPath, ctx);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn == null) {\n warnNotCallable(resolvedCallable, refPath, method, callTarget);\n return;\n }\n\n const params =\n def.params != null\n ? (Array.isArray(def.params) ? def.params : [def.params]).map((param) =>\n resolveOutputParamValue(param, ctx, payload),\n )\n : [payload];\n\n const result = fn.call(callTarget, ...params);\n if (result != null && typeof (result as Promise<unknown>).then === 'function') {\n (result as Promise<unknown>).then(\n () => runThenOrSuccess(def, ctx, payload),\n () => runOnError(def, ctx, payload),\n );\n } else {\n runThenOrSuccess(def, ctx, payload);\n }\n };\n}\n\nfunction resolveStepParams(\n p: unknown[] | Record<string, unknown> | undefined,\n ctx: ResolverContext,\n payload: unknown,\n): unknown[] {\n if (p == null) return [];\n const arr = Array.isArray(p) ? p : [p];\n return arr.map((item) => resolveOutputParamValue(item, ctx, payload));\n}\n\nfunction runThenOrSuccess(def: OutputCallObject, ctx: ResolverContext, payload: unknown): void {\n if (def.then?.length) {\n runThenChain(def.then, 0, ctx, def, payload, () => {});\n }\n}\n\nfunction runThenChain(\n steps: NonNullable<OutputCallObject['then']>,\n index: number,\n ctx: ResolverContext,\n parentDef: OutputCallObject,\n payload: unknown,\n onComplete: () => void,\n): void {\n if (index >= steps.length) {\n onComplete();\n return;\n }\n const step = steps[index];\n const runNextSibling = () => runThenChain(steps, index + 1, ctx, parentDef, payload, onComplete);\n\n const refTemplate = typeof step === 'string' ? step : step.ref;\n const when = typeof step === 'string' ? undefined : step.when;\n const stepParams = typeof step === 'string' ? undefined : step.params;\n const nestedThen = typeof step === 'string' ? undefined : step.then;\n\n if (!shouldRunWhen(when, ctx, payload)) {\n runNextSibling();\n return;\n }\n\n const resolvedCallable = resolveReferencePath(refTemplate, ctx, payload);\n const split = splitCallableRef(resolvedCallable);\n if (split == null) {\n console.warn(\n `then chain: invalid callable ref \"${resolvedCallable}\" (expected e.g. Block:path.method)`,\n );\n return;\n }\n const { refPath, method } = split;\n const callTarget = getCallTarget(refPath, ctx);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn == null) {\n warnNotCallable(resolvedCallable, refPath, method, callTarget);\n return;\n }\n const params = resolveStepParams(stepParams, ctx, payload);\n const result = fn.call(callTarget, ...params);\n const afterStep = () => {\n if (nestedThen?.length) {\n runThenChain(nestedThen, 0, ctx, parentDef, payload, runNextSibling);\n } else {\n runNextSibling();\n }\n };\n if (result != null && typeof (result as Promise<unknown>).then === 'function') {\n (result as Promise<unknown>).then(afterStep, () => runOnError(parentDef, ctx, payload));\n } else {\n afterStep();\n }\n}\n\nfunction runOnError(def: OutputCallObject, ctx: ResolverContext, payload: unknown): void {\n if (def.onError && shouldRunWhen(def.onError.when, ctx, payload)) {\n invokeRefMethod(\n ctx,\n def.onError.ref,\n payload,\n resolveStepParams(def.onError.params, ctx, payload),\n );\n }\n}\n\nfunction invokeRefMethod(\n ctx: ResolverContext,\n refTemplate: string,\n payload: unknown,\n params: unknown[],\n): void {\n const resolvedCallable = resolveReferencePath(refTemplate, ctx, payload);\n const split = splitCallableRef(resolvedCallable);\n if (split == null) {\n console.warn(`onError: invalid callable ref \"${resolvedCallable}\"`);\n return;\n }\n const { refPath, method } = split;\n const callTarget = getCallTarget(refPath, ctx);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn == null) {\n warnNotCallable(resolvedCallable, refPath, method, callTarget);\n return;\n }\n fn.call(callTarget, ...params);\n}\n\nexport function createOutputHandler(\n outputValue: unknown,\n _outputKey: string,\n ctx: ResolverContext,\n): (value: unknown) => void {\n if (typeof outputValue === 'string') {\n return buildOutputHandlerFromCall(outputValue, {}, ctx, undefined);\n }\n if (isOutputCallObject(outputValue)) {\n return buildOutputHandlerFromCall(outputValue.ref, outputValue, ctx, undefined);\n }\n return () => {};\n}\n","import { computed, isWritableSignal, linkedSignal, signal, WritableSignal } from '@angular/core';\nimport { BlockDescription } from './block-description.schema';\nimport { createOutputHandler } from './output-reference';\nimport { classifyTwoWayString, parseTwoWayRef } from './ref-expressions';\nimport { getRefSignal, ResolverContext } from './ref-resolver';\nimport { looksLikeFlowTemplate, resolveTemplateString } from './template-interpolation';\n\nexport function getBlockInputsAndOutputs(componentOrDirectives: any[]): {\n inputs: Set<string>;\n outputs: Set<string>;\n twoWay: Set<string>;\n} {\n const inputs = new Set<string>();\n const outputs = new Set<string>();\n const twoWay = new Set<string>();\n\n for (const componentOrDirective of componentOrDirectives) {\n const metadata = getDirectiveMetadata(componentOrDirective);\n if (!metadata) continue;\n metadata.inputs.forEach((input) => inputs.add(input));\n metadata.outputs.forEach((output) => outputs.add(output));\n metadata.twoWay.forEach((twoWayKey) => twoWay.add(twoWayKey));\n }\n return { inputs, outputs, twoWay };\n}\n\nfunction getDirectiveMetadata(type: any) {\n // Directives have ɵdir, Components have ɵcmp\n const def = type.ɵdir || type.ɵcmp;\n\n if (!def) return null;\n\n // def.inputs and def.outputs are objects where:\n // Key = Public Template Name (alias)\n // Value = Internal Class Property Name\n const publicInputs = Object.keys(def.inputs || {});\n const publicOutputs = Object.keys(def.outputs || {});\n\n const twoWay = publicInputs.filter(\n (key) => publicOutputs.includes(`${key}Change`) && def.inputs[key][1],\n );\n\n return {\n inputs: publicInputs.filter((key) => !twoWay.includes(key)),\n outputs: publicOutputs.filter((key) => !twoWay.includes(key)),\n twoWay,\n isComponent: !!type.ɵcmp,\n };\n}\n\nexport function resolveBlockInputsAndOutputs(\n description: BlockDescription,\n inputKeys: Set<string>,\n outputKeys: Set<string>,\n twoWayKeys: Set<string>,\n ctx: ResolverContext,\n) {\n const resolvedInputs: Record<string, () => unknown> = {};\n const resolvedOutputs: Record<string, (value: unknown) => void> = {};\n const resolvedTwoWay: Record<string, WritableSignal<unknown>> = {};\n\n const inputs = description.inputs ?? {};\n const outputs = description.outputs ?? {};\n\n if (inputKeys.has('registry')) {\n resolvedInputs['registry'] = () => ctx.registry;\n }\n\n for (const [key, value] of Object.entries(inputs)) {\n if (!inputKeys.has(key) && !twoWayKeys.has(key)) {\n console.warn(\n `Block input \"${key}\" is not defined on the component or any host directive; skipping.`,\n );\n continue;\n }\n if (typeof value === 'string') {\n const twoWayKind = classifyTwoWayString(value);\n if (twoWayKind === 'invalid-mix') {\n throw new Error(\n `Invalid input \"${String(key)}\": two-way ref \"[( )]\" cannot be mixed with literals or \"{{ }}\". ` +\n `Use exactly \"[(refPath)]\" for two-way or \"{{ refPath }}\" for read-only.`,\n );\n }\n\n if (twoWayKind === 'two-way') {\n const refPath = parseTwoWayRef(value);\n if (refPath) {\n const valueSignal = getRefSignal(refPath, ctx);\n\n if (twoWayKeys.has(key))\n if (!isWritableSignal(valueSignal)) {\n console.warn(\n `Input \"${key}\" of ref \"${refPath}\" is a two-way ref but is not a writable signal. Path might not be resolved correctly.`,\n );\n resolvedTwoWay[key] = linkedSignal(() => valueSignal?.());\n } else {\n resolvedTwoWay[key] = valueSignal;\n }\n if (inputKeys.has(key))\n resolvedInputs[key] = computed(() => {\n return valueSignal?.();\n });\n }\n continue;\n }\n\n const str = value as string;\n const hasMustache =\n typeof value === 'string' &&\n str.indexOf('{{') !== -1 &&\n str.indexOf('}}', str.indexOf('{{')) !== -1;\n const hasFlow = typeof value === 'string' && looksLikeFlowTemplate(str);\n if (hasMustache || hasFlow) {\n resolvedInputs[key] = computed(() =>\n resolveTemplateString(str, ctx, undefined, { escapeFlowRefs: true }),\n );\n continue;\n }\n }\n\n if (Array.isArray(value)) {\n resolvedInputs[key] = computed(() =>\n value.map((item) => {\n if (typeof item === 'string') {\n return resolveTemplateString(item, ctx, undefined, { escapeFlowRefs: true });\n }\n\n return item;\n }),\n );\n\n continue;\n }\n\n if (inputKeys.has(key)) resolvedInputs[key] = () => value;\n if (twoWayKeys.has(key)) resolvedTwoWay[key] = signal(value);\n }\n\n for (const [key, value] of Object.entries(outputs)) {\n if (!outputKeys.has(key)) {\n console.warn(\n `Block output \"${key}\" is not defined on the component or any host directive; skipping.`,\n );\n continue;\n }\n\n resolvedOutputs[key] = createOutputHandler(value, key, ctx);\n }\n\n return { resolvedInputs, resolvedOutputs, resolvedTwoWay };\n}\n","import {\n ComponentRef,\n Injectable,\n inject,\n Injector,\n Type,\n ViewContainerRef,\n WritableSignal,\n inputBinding,\n isSignal,\n linkedSignal,\n outputBinding,\n twoWayBinding,\n type Signal,\n} from '@angular/core';\nimport { ComponentRegistry } from '../registry/component.registry';\nimport { DirectiveRegistry } from '../registry/directive.registry';\nimport { ServiceRegistry } from '../registry/service.registry';\nimport { getBlockInputsAndOutputs, resolveBlockInputsAndOutputs } from './block-bindings';\nimport {\n BlockDescription,\n isBlockReference,\n normalizeDirectives,\n normalizeServices,\n resolveBlockReference,\n safeParseBlockDescription,\n type BlockInput,\n type BlockReference,\n type ServiceEntry,\n} from './block-description.schema';\nimport type { BlockDefinitionOrLoader } from '../registry/block-definitions.registry';\nimport {\n BlockRegistryImpl,\n CurrentInstance,\n type BlockInstanceHandle,\n type BlockRegistry,\n} from './block-registry';\nimport { ResolverContext, getRefSignal } from './ref-resolver';\nimport { BlockRegistryService } from '../services/block-registry.service';\nimport { resolveTemplateString } from './template-interpolation';\n\nexport interface BlockLoadOptions {\n registry?: BlockRegistry;\n /** Map of block id → full description or loader; used when description is a block reference. */\n blockDefinitions?: Record<string, BlockDefinitionOrLoader>;\n}\n\nexport const INTERPOLATE_MAX_PLACEHOLDERS = 200;\n\nfunction createInputBindingsWithWarnings(\n ownerName: string,\n inputKeys: Set<string>,\n twoWayKeys: Set<string>,\n outputKeys: Set<string>,\n resolvedInputs: Record<string, (() => unknown) | undefined>,\n resolvedTwoWay: Record<string, unknown>,\n resolvedOutputs: Record<string, (value: unknown) => void>,\n) {\n const inputBindingsArray = Array.from(inputKeys)\n .filter((key) => {\n if (resolvedInputs[key] == null) {\n return false;\n }\n return true;\n })\n .map((key) => inputBinding(key, resolvedInputs[key]!));\n\n const twoWayBindingsArray = Array.from(twoWayKeys)\n .filter((key) => {\n if (resolvedTwoWay[key] == null && resolvedInputs[key] == null) {\n return false;\n }\n return true;\n })\n // resolvedTwoWay is guaranteed non-null after the filter.\n .map((key) =>\n twoWayBinding(\n key,\n (resolvedTwoWay[key] ??\n linkedSignal(() => resolvedInputs[key]?.())) as WritableSignal<unknown>,\n ),\n );\n\n const outputBindingsArray = Array.from(outputKeys)\n .filter((key) => {\n if (resolvedOutputs[key] == null) {\n return false;\n }\n return true;\n })\n .map((key) => outputBinding(key, resolvedOutputs[key]));\n\n return [...inputBindingsArray, ...twoWayBindingsArray, ...outputBindingsArray];\n}\n\n/** JSON-like objects only — skip class instances, Date, Map, etc. */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false;\n if (Array.isArray(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BlockLoaderService {\n private readonly componentRegistry = ComponentRegistry.getInstance();\n private readonly directiveRegistry = DirectiveRegistry.getInstance();\n private readonly serviceRegistry = ServiceRegistry.getInstance();\n private readonly blockRegistryService = inject(BlockRegistryService);\n\n async load(\n description: BlockInput | BlockReference,\n viewContainerRef: ViewContainerRef,\n model: Signal<unknown | undefined>,\n options?: BlockLoadOptions,\n ): Promise<ComponentRef<unknown>> {\n let resolved: unknown = description;\n if (isBlockReference(description)) {\n resolved = await resolveBlockReference(description, options?.blockDefinitions);\n }\n const parsed = safeParseBlockDescription(resolved);\n\n if (!parsed.success) {\n throw new Error(`Invalid block description: ${parsed.error.message}`);\n }\n const desc = parsed.data;\n const registry = options?.registry ?? new BlockRegistryImpl();\n if (desc.id != null && desc.id !== '' && registry.hasLocal(desc.id)) {\n throw new Error(`Block id \"${desc.id}\" is already registered.`);\n }\n\n const componentType = await this.componentRegistry.get(desc.component);\n if (!componentType) {\n throw new Error(`Component \"${desc.component}\" is not registered.`);\n }\n\n //... Generate and new resolver context\n const blockInstance: CurrentInstance = { services: {} };\n const ctx: ResolverContext = {\n registry,\n currentBlockId: desc.id ?? undefined,\n currentInstance: blockInstance,\n getRegistryForScope: (scopeKey: string) => this.blockRegistryService.getRegistryForScope(scopeKey),\n };\n\n //... Resolve model for the block\n this.resolveContextModel(ctx, model);\n const resolvedModel = blockInstance.model;\n\n const handle: BlockInstanceHandle = { instance: blockInstance };\n\n //... Register the block instance with the registry if it has an id\n if (desc.id != null && desc.id !== '') registry.register(desc.id, handle);\n\n //... Resolve services for the block\n\n await this.resolveServices(viewContainerRef, blockInstance, desc, resolvedModel, model);\n\n const directiveIds = normalizeDirectives(desc.directives);\n const directiveTypes = await this.getDirectiveTypes(directiveIds);\n const nonNullDirectiveTypes = directiveTypes.filter((d): d is Type<unknown> => d != null);\n\n // get inputs and outputs from the component and host directives\n const componentMetadata = getBlockInputsAndOutputs([componentType]);\n const directivesMetadata = nonNullDirectiveTypes.map((d) => ({\n type: d,\n metadata: getBlockInputsAndOutputs([d]),\n }));\n const inputKeys = new Set([\n ...componentMetadata.inputs,\n ...directivesMetadata.map((d) => Array.from(d.metadata.inputs)).flat(),\n ]);\n const outputKeys = new Set([\n ...componentMetadata.outputs,\n ...directivesMetadata.map((d) => Array.from(d.metadata.outputs)).flat(),\n ]);\n const twoWayKeys = new Set([\n ...componentMetadata.twoWay,\n ...directivesMetadata.map((d) => Array.from(d.metadata.twoWay)).flat(),\n ]);\n\n // Initial bindings for component; directive inputs are applied separately.\n const initialResolved = resolveBlockInputsAndOutputs(\n desc,\n inputKeys,\n outputKeys,\n twoWayKeys,\n ctx,\n );\n\n const componentBindings = [\n // Component inputs / two-way bindings\n ...createInputBindingsWithWarnings(\n 'component',\n componentMetadata.inputs,\n componentMetadata.twoWay,\n componentMetadata.outputs,\n initialResolved.resolvedInputs,\n initialResolved.resolvedTwoWay,\n initialResolved.resolvedOutputs,\n ),\n ];\n\n const directiveAndBindings = directivesMetadata.map((d) => ({\n type: d.type,\n bindings: [\n ...createInputBindingsWithWarnings(\n `directive \"${d.type.name}\"`,\n d.metadata.inputs,\n d.metadata.twoWay,\n d.metadata.outputs,\n initialResolved.resolvedInputs,\n initialResolved.resolvedTwoWay,\n initialResolved.resolvedOutputs,\n ),\n ],\n }));\n\n const componentRef = viewContainerRef.createComponent(componentType as Type<unknown>, {\n directives: directiveAndBindings,\n bindings: componentBindings,\n });\n\n return componentRef;\n }\n\n private async resolveServices(\n viewContainerRef: ViewContainerRef,\n blockInstance: CurrentInstance,\n desc: BlockDescription,\n resolvedModel: Signal<unknown | undefined> | undefined,\n model: Signal<unknown | undefined>,\n ): Promise<void> {\n // services are stored under `blockInstance.services`, so `model` no longer collides structurally,\n // but `model` is a reserved ref keyword (`BlockId:model...`). Warn to avoid confusion.\n const reservedAliases = new Set(['services', 'model']);\n const services = normalizeServices(desc.services);\n const selfServices = services.filter(\n (s): s is { id: string; scope: 'self'; alias?: string } =>\n typeof s === 'object' && (s as { scope?: string }).scope === 'self',\n );\n\n /** Root = string id or object with scope undefined/not 'self' (e.g. [{ id: 'State' }]). */\n const rootEntries = services\n .filter(\n (s): s is Exclude<ServiceEntry, { scope: 'self' }> =>\n typeof s === 'string' || (typeof s === 'object' && s.scope !== 'self'),\n )\n .map((s): { id: string; alias: string } =>\n typeof s === 'string' ? { id: s, alias: s } : { id: s.id, alias: s.alias ?? s.id },\n );\n\n const rootServiceTypes = await this.getServiceTypes(rootEntries);\n\n for (let i = 0; i < rootEntries.length; i++) {\n const alias = rootEntries[i].alias;\n const serviceType = rootServiceTypes[i];\n if (serviceType) {\n const svc = viewContainerRef.injector.get(serviceType as Type<unknown>, null);\n\n if (reservedAliases.has(alias)) {\n console.warn(\n `Service alias \"${alias}\" is reserved and conflicts with ref keywords; skipping assignment.`,\n );\n } else if (svc != null) {\n blockInstance.services[alias] = svc;\n }\n // if the service is not found, add it to the selfServices array\n else selfServices.push({ id: alias, scope: 'self' });\n }\n }\n\n const selfServiceTypes = await this.getServiceTypes(selfServices);\n\n const selfInjector = this.buildChildInjectorFromTypes(\n selfServiceTypes,\n viewContainerRef.injector,\n );\n\n for (let i = 0; i < selfServices.length; i++) {\n const alias = selfServices[i].alias ?? selfServices[i].id;\n const serviceType = selfServiceTypes[i];\n\n if (serviceType) {\n const svc = selfInjector.get(serviceType as Type<unknown>, null, {\n self: true,\n });\n if (svc != null) {\n if (reservedAliases.has(alias)) {\n console.warn(\n `Service alias \"${alias}\" is reserved and conflicts with ref keywords; skipping assignment.`,\n );\n } else {\n blockInstance.services[alias] = svc;\n }\n if (\n model() != null &&\n resolvedModel != null &&\n 'model' in (svc as Record<string, unknown>) &&\n isSignal((svc as { model?: unknown }).model)\n ) {\n (svc as { model: WritableSignal<any | undefined> }).model.set(resolvedModel);\n (svc as { setModel?: () => void }).setModel?.();\n }\n }\n }\n }\n }\n private buildChildInjectorFromTypes(\n serviceTypes: (Type<unknown> | undefined)[],\n parentInjector: Injector,\n ): Injector {\n const providers = serviceTypes\n .filter((t): t is Type<unknown> => t != null)\n .map((t) => ({ provide: t, useClass: t }));\n return providers.length === 0\n ? parentInjector\n : Injector.create({ providers, parent: parentInjector });\n }\n\n /** Resolve all service types in parallel (single batch for load). */\n private async getServiceTypes(entries: { id: string }[]): Promise<(Type<unknown> | undefined)[]> {\n if (entries.length === 0) return [];\n return Promise.all(entries.map((e) => this.serviceRegistry.getType(e.id)));\n }\n\n /** Resolve all directive types by id in parallel. */\n private async getDirectiveTypes(ids: string[]): Promise<(Type<unknown> | undefined)[]> {\n if (ids.length === 0) return [];\n return Promise.all(ids.map((id) => this.directiveRegistry.get(id)));\n }\n\n /** Resolve model from desc (interpolate ref if string) and set on blockInstance. */\n private resolveContextModel(ctx: ResolverContext, blockModel: Signal<unknown | undefined>): void {\n const directiveModel = blockModel();\n const blockInstance = ctx.currentInstance;\n const templateCtx = this.withModelOverrideContext(ctx, blockModel);\n let blockInstanceModel: Signal<unknown | undefined> | undefined;\n if (typeof directiveModel === 'string') {\n const interpolated = resolveTemplateString(directiveModel, templateCtx);\n if (typeof interpolated !== 'string') {\n blockInstanceModel = linkedSignal(() => resolveTemplateString(directiveModel, templateCtx));\n } else {\n const refPath = interpolated.trim();\n if (refPath.length > 0) {\n const refSignal = getRefSignal(refPath, ctx);\n if (refSignal != null) {\n blockInstanceModel = refSignal;\n } else {\n blockInstanceModel = linkedSignal(() =>\n resolveTemplateString(directiveModel, templateCtx),\n );\n }\n }\n }\n } else {\n const hasTemplates = this.valueContainsTemplate(directiveModel);\n blockInstanceModel = hasTemplates\n ? linkedSignal(() =>\n this.resolveNestedModelTemplates(\n blockModel(),\n this.withModelOverrideContext(ctx, blockModel),\n ),\n )\n : blockModel;\n }\n\n if (blockInstanceModel != null) {\n if (!blockInstance) {\n throw new Error(\n 'Block instance not found in context. Make sure to pass the block registry to the block loader.',\n );\n }\n blockInstance.model = blockInstanceModel;\n }\n }\n\n private valueContainsTemplate(value: unknown, visited: WeakSet<object> = new WeakSet()): boolean {\n if (typeof value === 'string') {\n return value.includes('{{') && value.includes('}}');\n }\n if (Array.isArray(value)) {\n return value.some((item) => this.valueContainsTemplate(item, visited));\n }\n if (value != null && typeof value === 'object') {\n if (!isPlainObject(value)) return false;\n if (visited.has(value)) return false;\n visited.add(value);\n return Object.values(value).some((item) => this.valueContainsTemplate(item, visited));\n }\n return false;\n }\n\n private resolveNestedModelTemplates(\n value: unknown,\n ctx: ResolverContext,\n visited: WeakSet<object> = new WeakSet(),\n ): unknown {\n if (typeof value === 'string') {\n return resolveTemplateString(value, ctx);\n }\n if (Array.isArray(value)) {\n return value.map((item) => this.resolveNestedModelTemplates(item, ctx, visited));\n }\n if (value != null && typeof value === 'object') {\n if (!isPlainObject(value)) return value;\n if (visited.has(value)) return value;\n visited.add(value);\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n this.resolveNestedModelTemplates(item, ctx, visited),\n ]),\n );\n }\n return value;\n }\n\n private withModelOverrideContext(\n ctx: ResolverContext,\n model: Signal<unknown | undefined>,\n ): ResolverContext {\n if (ctx.currentInstance == null) return ctx;\n return {\n ...ctx,\n currentInstance: {\n ...ctx.currentInstance,\n model,\n },\n };\n }\n}\n","import {\n Directive,\n input,\n effect,\n ViewContainerRef,\n inject,\n DestroyRef,\n type ComponentRef,\n} from '@angular/core';\nimport { BlockLoaderService } from './block-loader.service';\nimport type { BlockRegistry } from './block-registry';\nimport type { BlockDefinitionOrLoader } from '../registry/block-definitions.registry';\nimport type { BlockDescription, BlockInput } from './block-description.schema';\nimport {\n safeParseBlockDescription,\n normalizeServices,\n isBlockReference,\n resolveBlockReference,\n type BlockReference,\n} from './block-description.schema';\n\n/** Compact key for services to avoid JSON.stringify of large config in effect. */\nfunction getServicesKey(services: BlockDescription['services']): string {\n const arr = normalizeServices(services);\n if (arr.length === 0) return '';\n return arr\n .map((s) =>\n typeof s === 'string'\n ? s\n : `${(s as { id: string }).id}:${(s as { scope?: string }).scope ?? ''}`,\n )\n .join(',');\n}\n\nfunction safeJsonKey(value: unknown): string {\n try {\n return JSON.stringify(value) ?? 'null';\n } catch {\n return String(value);\n }\n}\n\n@Directive({\n selector: '[block]',\n standalone: true,\n})\nexport class BlockDirective {\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly loader = inject(BlockLoaderService);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Full description, or { id } / { blockId, blockDefinition? } to reuse/override from blockDefinitions. */\n readonly description = input<BlockInput | BlockReference | null>(null);\n /** Registry for block instances by id; pass from root so nested blocks share it. */\n readonly blockRegistry = input<BlockRegistry | null>(null);\n /** Map id → full description or loader; used when description is a block reference (id/blockId). */\n readonly blockDefinitions = input<Record<string, BlockDefinitionOrLoader> | null>(null);\n /** Model for the block. */\n readonly model = input<Record<string, unknown> | string | undefined>(undefined);\n /**\n * Forces a reload when this value changes, even if component/services are the same.\n * Useful for \"same component, different inputs\" scenarios like tabs/switch blocks.\n */\n readonly reloadKey = input<unknown>(null);\n\n private loadResult: ComponentRef<unknown> | null = null;\n private lastRegistry: BlockRegistry | null = null;\n private lastId: string | null = null;\n private loadedComponent: string | null = null;\n private loadedServicesKey: string | null = null;\n private loadedReloadKey: unknown = null;\n private loadedDescKey: string | null = null;\n private loadGeneration = 0;\n /** Invalidates in-flight block-reference resolution when the effect re-runs. */\n private effectRunId = 0;\n /** Avoid re-parsing when the same description reference is passed (e.g. stable signal). */\n private lastDescRef: unknown = null;\n private lastParsedData: BlockDescription | null = null;\n\n constructor() {\n effect(() => {\n const desc = this.description();\n const inputDefs = this.blockDefinitions();\n const reloadKey = this.reloadKey();\n const runId = ++this.effectRunId;\n\n if (desc == null) {\n this.lastDescRef = null;\n this.lastParsedData = null;\n this.clear();\n return;\n }\n\n const runAfterResolved = (resolved: Record<string, unknown>) => {\n if (runId !== this.effectRunId) {\n return;\n }\n\n let data: BlockDescription;\n if (resolved === this.lastDescRef && this.lastParsedData != null) {\n data = this.lastParsedData;\n } else {\n const parsed = safeParseBlockDescription(resolved);\n if (!parsed.success) {\n return;\n }\n this.lastDescRef = resolved;\n this.lastParsedData = parsed.data;\n data = parsed.data;\n }\n const servicesKey = getServicesKey(data.services);\n const descKey = safeJsonKey(resolved);\n const effectiveReloadKey = reloadKey ?? descKey;\n\n // Only clear when the logical description changed (component or services). Avoids\n // clear+reload when the parent passes a new reference with the same content (e.g. BlockFor).\n const mustReload =\n this.loadResult == null ||\n this.loadedComponent !== data.component ||\n this.loadedServicesKey !== servicesKey ||\n this.loadedReloadKey !== effectiveReloadKey ||\n this.loadedDescKey !== descKey;\n if (!mustReload) {\n // Description is logically unchanged (same component + services); no work needed.\n return;\n }\n\n this.clear();\n const registry = this.blockRegistry() ?? undefined;\n this.lastRegistry = registry ?? null;\n this.lastId = data.id ?? null;\n\n const generation = ++this.loadGeneration;\n this.loader\n .load(resolved, this.viewContainerRef, this.model, {\n registry,\n blockDefinitions: inputDefs ?? undefined,\n })\n .then((result) => {\n if (generation !== this.loadGeneration) return;\n this.loadResult = result;\n this.loadedComponent = data.component;\n this.loadedServicesKey = servicesKey;\n this.loadedReloadKey = effectiveReloadKey;\n this.loadedDescKey = descKey;\n })\n .catch((err: unknown) => {\n if (generation !== this.loadGeneration) return;\n console.error('Block load failed:', err);\n });\n };\n\n if (isBlockReference(desc)) {\n void resolveBlockReference(desc, inputDefs ?? undefined)\n .then((resolved) => {\n runAfterResolved(resolved);\n })\n .catch((err: unknown) => {\n if (runId !== this.effectRunId) return;\n console.error('Block reference resolution failed:', err);\n });\n return;\n }\n\n runAfterResolved(desc as unknown as Record<string, unknown>);\n });\n\n this.destroyRef.onDestroy(() => this.clear());\n }\n\n private clear(): void {\n this.loadGeneration++;\n this.lastDescRef = null;\n this.lastParsedData = null;\n if (this.lastId != null) {\n this.lastRegistry?.unregister(this.lastId);\n this.lastId = null;\n }\n if (this.loadResult) {\n this.viewContainerRef.clear();\n this.loadResult = null;\n this.loadedComponent = null;\n this.loadedServicesKey = null;\n this.loadedReloadKey = null;\n this.loadedDescKey = null;\n }\n }\n}\n","/*\n * Public API Surface of blocks-studio\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngx-blocks-studio.mjs","sources":["../../../projects/blocks-studio/src/lib/core/registry/registry-metadata.ts","../../../projects/blocks-studio/src/lib/core/registry/block-definitions.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/component.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/directive.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/guard.registry.ts","../../../projects/blocks-studio/src/lib/core/registry/service.registry.ts","../../../projects/blocks-studio/src/lib/core/services/router-loader.service.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-registry.ts","../../../projects/blocks-studio/src/lib/core/services/block-registry.service.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-description-validate.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-description.schema.ts","../../../projects/blocks-studio/src/lib/core/block-loader/ref-expressions.ts","../../../projects/blocks-studio/src/lib/core/block-loader/ref-resolver.ts","../../../projects/blocks-studio/src/lib/core/block-loader/flow-template.ts","../../../projects/blocks-studio/src/lib/core/block-loader/safe-expression-evaluator.ts","../../../projects/blocks-studio/src/lib/core/block-loader/template-interpolation.ts","../../../projects/blocks-studio/src/lib/core/block-loader/output-reference.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-bindings.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-loader.service.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block.directive.ts","../../../projects/blocks-studio/src/public-api.ts","../../../projects/blocks-studio/src/ngx-blocks-studio.ts"],"sourcesContent":["/**\n * Registry entry type: component, service, guard, directive, or block definition.\n */\nexport type RegistryEntryType =\n | 'component'\n | 'service'\n | 'guard'\n | 'directive'\n | 'blockDefinition';\n\n/**\n * Metadata value stored per registry key.\n */\nexport type RegistryMetadataRecord = Record<string, unknown>;\n\nexport interface AllRegistryMetadata {\n components: Map<string, RegistryMetadataRecord>;\n services: Map<string, RegistryMetadataRecord>;\n guards: Map<string, RegistryMetadataRecord>;\n directives: Map<string, RegistryMetadataRecord>;\n blockDefinitions: Map<string, RegistryMetadataRecord>;\n}\n\n/**\n * Single source of truth for metadata across component, service, and guard registries.\n * All registries delegate to this store so metadata can be queried uniformly\n * and all metadata can be retrieved in one call.\n */\nexport class RegistryMetadataStore {\n private static instance: RegistryMetadataStore;\n private entries = new Map<string, { type: RegistryEntryType; data: RegistryMetadataRecord }>();\n\n private constructor() {}\n\n static getInstance(): RegistryMetadataStore {\n if (!RegistryMetadataStore.instance) {\n RegistryMetadataStore.instance = new RegistryMetadataStore();\n }\n return RegistryMetadataStore.instance;\n }\n\n /**\n * Set metadata for a registry key (component, service, guard, directive, or block definition).\n */\n set(key: string, type: RegistryEntryType, data: RegistryMetadataRecord): void {\n this.entries.set(key, { type, data });\n }\n\n /**\n * Get metadata for a key. Returns undefined if the key is not registered.\n */\n get(key: string): RegistryMetadataRecord | undefined {\n return this.entries.get(key)?.data;\n }\n\n /**\n * Alias for get(); allows registries to expose getMetadata(key).\n */\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.get(key);\n }\n\n /**\n * Get all metadata for a given type (components or services).\n */\n getByType(type: RegistryEntryType): Map<string, RegistryMetadataRecord> {\n const result = new Map<string, RegistryMetadataRecord>();\n for (const [key, entry] of this.entries) {\n if (entry.type === type) {\n result.set(key, entry.data);\n }\n }\n return result;\n }\n\n /**\n * Get all metadata for component, service, and guard registries in one call.\n */\n getAllMetadata(): AllRegistryMetadata {\n return {\n components: this.getByType('component'),\n services: this.getByType('service'),\n guards: this.getByType('guard'),\n directives: this.getByType('directive'),\n blockDefinitions: this.getByType('blockDefinition'),\n };\n }\n\n /**\n * Remove metadata for a key (e.g. when unregistering).\n */\n remove(key: string): boolean {\n return this.entries.delete(key);\n }\n\n /**\n * Check if metadata exists for a key.\n */\n has(key: string): boolean {\n return this.entries.has(key);\n }\n\n /**\n * Clear all metadata (e.g. when clearing registries).\n */\n clear(): void {\n this.entries.clear();\n }\n}\n","import { RegistryMetadataStore, type RegistryMetadataRecord } from './registry-metadata';\n\n/**\n * Global registry of block id → definition. Register block configs at app init\n * so they can be used as templates anywhere (e.g. nested blocks that reference\n * { id: 'AppNav' } resolve without passing blockDefinitions down).\n * Per-call blockDefinitions (e.g. from route data) override global entries.\n *\n * Values may be a plain definition object or a zero-arg loader\n * `() => Promise<Record<string, unknown>>` for lazy loading (same pattern as\n * ComponentRegistry / DirectiveRegistry).\n */\nexport type BlockDefinitionLoader = () => Promise<Record<string, unknown>>;\nexport type BlockDefinitionOrLoader = Record<string, unknown> | BlockDefinitionLoader;\n\n/** True for zero-arg async loaders (not class constructors). */\nexport function isBlockDefinitionLoader(value: unknown): value is BlockDefinitionLoader {\n if (typeof value !== 'function') {\n return false;\n }\n const looksLikeClass =\n typeof (value as { prototype?: unknown }).prototype !== 'undefined' &&\n (value as { prototype?: { constructor?: unknown } }).prototype?.constructor === value;\n return (value as BlockDefinitionLoader).length === 0 && !looksLikeClass;\n}\n\nexport class BlockDefinitionsRegistry {\n private static instance: BlockDefinitionsRegistry;\n private readonly definitions = new Map<string, BlockDefinitionOrLoader>();\n private readonly loadedDefinitions = new Map<string, Record<string, unknown>>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): BlockDefinitionsRegistry {\n if (!BlockDefinitionsRegistry.instance) {\n BlockDefinitionsRegistry.instance = new BlockDefinitionsRegistry();\n }\n return BlockDefinitionsRegistry.instance;\n }\n\n /**\n * Register a block template by id (plain object or async loader).\n * Optional metadata is stored in the shared {@link RegistryMetadataStore}.\n */\n register(\n id: string,\n definition: BlockDefinitionOrLoader,\n metadata?: RegistryMetadataRecord,\n ): void {\n this.definitions.set(id, definition);\n if (!isBlockDefinitionLoader(definition)) {\n this.loadedDefinitions.set(id, definition as Record<string, unknown>);\n } else {\n this.loadedDefinitions.delete(id);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(id, 'blockDefinition', metadata);\n }\n }\n\n /** Resolve definition by id; runs loader once and caches the result. */\n async get(id: string): Promise<Record<string, unknown> | undefined> {\n if (this.loadedDefinitions.has(id)) {\n return this.loadedDefinitions.get(id);\n }\n\n const defOrLoader = this.definitions.get(id);\n if (!defOrLoader) {\n return undefined;\n }\n\n if (isBlockDefinitionLoader(defOrLoader)) {\n try {\n const loaded = await defOrLoader();\n this.loadedDefinitions.set(id, loaded);\n return loaded;\n } catch (error) {\n console.error(`Failed to lazy load block definition \"${id}\":`, error);\n return undefined;\n }\n }\n\n const def = defOrLoader as Record<string, unknown>;\n this.loadedDefinitions.set(id, def);\n return def;\n }\n\n /** Sync access when the definition is already a plain object or was loaded. */\n getSync(id: string): Record<string, unknown> | undefined {\n if (this.loadedDefinitions.has(id)) {\n return this.loadedDefinitions.get(id);\n }\n\n const defOrLoader = this.definitions.get(id);\n if (!defOrLoader || isBlockDefinitionLoader(defOrLoader)) {\n return undefined;\n }\n\n const def = defOrLoader as Record<string, unknown>;\n this.loadedDefinitions.set(id, def);\n return def;\n }\n\n has(id: string): boolean {\n return this.definitions.has(id);\n }\n\n /** Plain definitions plus any lazy definitions that have been loaded at least once. */\n getAll(): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [id, def] of this.definitions) {\n if (isBlockDefinitionLoader(def)) {\n const loaded = this.loadedDefinitions.get(id);\n if (loaded != null) {\n out[id] = loaded;\n }\n } else {\n out[id] = def as Record<string, unknown>;\n }\n }\n return out;\n }\n\n unregister(id: string): boolean {\n this.metadataStore.remove(id);\n this.loadedDefinitions.delete(id);\n return this.definitions.delete(id);\n }\n\n clear(): void {\n for (const name of this.definitions.keys()) {\n this.metadataStore.remove(name);\n }\n this.definitions.clear();\n this.loadedDefinitions.clear();\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n}\n","import { Type } from '@angular/core';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\ntype ComponentLoader = () => Promise<Type<any>>;\ntype ComponentOrLoader = Type<any> | ComponentLoader;\n\nexport class ComponentRegistry {\n private static instance: ComponentRegistry;\n private components = new Map<string, ComponentOrLoader>();\n private loadedComponents = new Map<string, Type<any>>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): ComponentRegistry {\n if (!ComponentRegistry.instance) {\n ComponentRegistry.instance = new ComponentRegistry();\n }\n return ComponentRegistry.instance;\n }\n\n register(\n name: string,\n component: Type<any> | ComponentLoader,\n metadata?: RegistryMetadataRecord\n ): void {\n if (this.components.has(name)) {\n console.warn(`Component ${name} is already registered. Overwriting...`);\n }\n\n this.components.set(name, component);\n // If it's already a Type, cache it\n if (typeof component !== 'function' || component.prototype) {\n this.loadedComponents.set(name, component as Type<any>);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'component', metadata);\n }\n }\n\n async get(name: string): Promise<Type<any> | undefined> {\n // Check if already loaded\n if (this.loadedComponents.has(name)) {\n return this.loadedComponents.get(name);\n }\n\n const componentOrLoader = this.components.get(name);\n if (!componentOrLoader) {\n return undefined;\n }\n\n // Check if it's a loader function (not a Type)\n // Type functions have a prototype, loader functions don't\n const isLoader =\n typeof componentOrLoader === 'function' && !(componentOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n try {\n const loader = componentOrLoader as ComponentLoader;\n const component = await loader();\n this.loadedComponents.set(name, component);\n return component;\n } catch (error) {\n console.error(`Failed to lazy load component \"${name}\":`, error);\n return undefined;\n }\n }\n\n // It's already a Type\n const component = componentOrLoader as Type<any>;\n this.loadedComponents.set(name, component);\n return component;\n }\n\n getSync(name: string): Type<any> | undefined {\n // Check if already loaded\n if (this.loadedComponents.has(name)) {\n return this.loadedComponents.get(name);\n }\n\n const componentOrLoader = this.components.get(name);\n if (!componentOrLoader) {\n return undefined;\n }\n\n // Check if it's a loader function (not a Type)\n const isLoader =\n typeof componentOrLoader === 'function' && !(componentOrLoader as any).prototype?.constructor;\n\n // If it's a loader, we can't get it synchronously\n if (isLoader) {\n return undefined;\n }\n\n // It's already a Type\n const component = componentOrLoader as Type<any>;\n this.loadedComponents.set(name, component);\n return component;\n }\n\n has(name: string): boolean {\n return this.components.has(name);\n }\n\n getAll(): Map<string, Type<any>> {\n return new Map(this.loadedComponents);\n }\n\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedComponents.delete(name);\n return this.components.delete(name);\n }\n\n clear(): void {\n for (const name of this.components.keys()) {\n this.metadataStore.remove(name);\n }\n this.components.clear();\n this.loadedComponents.clear();\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n getAllWithMetadata(): Map<string, { component: Type<any>; metadata?: RegistryMetadataRecord }> {\n const result = new Map<string, { component: Type<any>; metadata?: RegistryMetadataRecord }>();\n for (const [name, component] of this.loadedComponents) {\n result.set(name, {\n component,\n metadata: this.metadataStore.getMetadata(name),\n });\n }\n return result;\n }\n}\n","import { Type } from '@angular/core';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\ntype DirectiveLoader = () => Promise<Type<unknown>>;\ntype DirectiveOrLoader = Type<unknown> | DirectiveLoader;\n\nexport class DirectiveRegistry {\n private static instance: DirectiveRegistry;\n private directives = new Map<string, DirectiveOrLoader>();\n private loadedDirectives = new Map<string, Type<unknown>>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): DirectiveRegistry {\n if (!DirectiveRegistry.instance) {\n DirectiveRegistry.instance = new DirectiveRegistry();\n }\n return DirectiveRegistry.instance;\n }\n\n register(\n name: string,\n directive: Type<unknown> | DirectiveLoader,\n metadata?: RegistryMetadataRecord\n ): void {\n if (this.directives.has(name)) {\n console.warn(`Directive \"${name}\" is already registered. Overwriting...`);\n }\n\n this.directives.set(name, directive);\n if (!this.isLoader(directive)) {\n this.loadedDirectives.set(name, directive as Type<unknown>);\n } else {\n this.loadedDirectives.delete(name);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'directive', metadata);\n }\n }\n\n async get(name: string): Promise<Type<unknown> | undefined> {\n if (this.loadedDirectives.has(name)) {\n return this.loadedDirectives.get(name);\n }\n\n const directiveOrLoader = this.directives.get(name);\n if (!directiveOrLoader) {\n return undefined;\n }\n\n if (this.isLoader(directiveOrLoader)) {\n try {\n const loader = directiveOrLoader as DirectiveLoader;\n const directive = await loader();\n this.loadedDirectives.set(name, directive);\n return directive;\n } catch (error) {\n console.error(`Failed to lazy load directive \"${name}\":`, error);\n return undefined;\n }\n }\n\n const directive = directiveOrLoader as Type<unknown>;\n this.loadedDirectives.set(name, directive);\n return directive;\n }\n\n getSync(name: string): Type<unknown> | undefined {\n if (this.loadedDirectives.has(name)) {\n return this.loadedDirectives.get(name);\n }\n\n const directiveOrLoader = this.directives.get(name);\n if (!directiveOrLoader || this.isLoader(directiveOrLoader)) {\n return undefined;\n }\n\n const directive = directiveOrLoader as Type<unknown>;\n this.loadedDirectives.set(name, directive);\n return directive;\n }\n\n has(name: string): boolean {\n return this.directives.has(name);\n }\n\n getAll(): Map<string, Type<unknown>> {\n return new Map(this.loadedDirectives);\n }\n\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedDirectives.delete(name);\n return this.directives.delete(name);\n }\n\n clear(): void {\n for (const name of this.directives.keys()) {\n this.metadataStore.remove(name);\n }\n this.directives.clear();\n this.loadedDirectives.clear();\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n getAllWithMetadata(): Map<string, { directive: Type<unknown>; metadata?: RegistryMetadataRecord }> {\n const result = new Map<string, { directive: Type<unknown>; metadata?: RegistryMetadataRecord }>();\n for (const [name, directive] of this.loadedDirectives) {\n result.set(name, {\n directive,\n metadata: this.metadataStore.getMetadata(name),\n });\n }\n return result;\n }\n\n private isLoader(value: DirectiveOrLoader): value is DirectiveLoader {\n if (typeof value !== 'function') {\n return false;\n }\n // Class constructors have prototype.constructor === themselves; loader functions (e.g. arrow)\n // do not, so we treat only non-class functions with 0 args as loaders.\n const looksLikeClass =\n typeof (value as Type<unknown>).prototype !== 'undefined' &&\n (value as Type<unknown>).prototype?.constructor === value;\n return (value as DirectiveLoader).length === 0 && !looksLikeClass;\n }\n}\n","import { Type } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\n/**\n * Guard type: functional guard or class-based guard type.\n * Registered by name; resolved by RouteLoader from route config guards array.\n */\nexport type GuardOrType = CanActivateFn | Type<unknown>;\n\n/** Loader for lazy-loaded guards. Must be a function with no parameters that returns Promise<GuardOrType>. */\nexport type GuardLoader = () => Promise<GuardOrType>;\n\nexport type GuardOrLoader = GuardOrType | GuardLoader;\n\nexport class GuardRegistry {\n private static instance: GuardRegistry;\n private guards = new Map<string, GuardOrLoader>();\n private loadedGuards = new Map<string, GuardOrType>();\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): GuardRegistry {\n if (!GuardRegistry.instance) {\n GuardRegistry.instance = new GuardRegistry();\n }\n return GuardRegistry.instance;\n }\n\n register(name: string, guard: GuardOrLoader, metadata?: RegistryMetadataRecord): void {\n if (this.guards.has(name)) {\n console.warn(`Guard \"${name}\" is already registered. Overwriting...`);\n }\n this.guards.set(name, guard);\n if (!this.isLoader(guard)) {\n this.loadedGuards.set(name, guard as GuardOrType);\n } else {\n this.loadedGuards.delete(name);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'guard', metadata);\n }\n }\n\n /**\n * Resolve guard by name (async; runs loader if needed).\n */\n async get(name: string): Promise<GuardOrType | undefined> {\n if (this.loadedGuards.has(name)) {\n return this.loadedGuards.get(name);\n }\n\n const guardOrLoader = this.guards.get(name);\n if (!guardOrLoader) {\n return undefined;\n }\n\n if (this.isLoader(guardOrLoader)) {\n try {\n const loader = guardOrLoader as GuardLoader;\n const guard = await loader();\n this.loadedGuards.set(name, guard);\n return guard;\n } catch (error) {\n console.error(`Failed to lazy load guard \"${name}\":`, error);\n return undefined;\n }\n }\n\n const guard = guardOrLoader as GuardOrType;\n this.loadedGuards.set(name, guard);\n return guard;\n }\n\n /**\n * Resolve guard synchronously. Returns undefined if the entry is a lazy loader not yet loaded.\n */\n getSync(name: string): GuardOrType | undefined {\n if (this.loadedGuards.has(name)) {\n return this.loadedGuards.get(name);\n }\n\n const guardOrLoader = this.guards.get(name);\n if (!guardOrLoader || this.isLoader(guardOrLoader)) {\n return undefined;\n }\n\n const guard = guardOrLoader as GuardOrType;\n this.loadedGuards.set(name, guard);\n return guard;\n }\n\n has(name: string): boolean {\n return this.guards.has(name);\n }\n\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n getAllWithMetadata(): Map<string, { guard: GuardOrType; metadata?: RegistryMetadataRecord }> {\n const result = new Map<string, { guard: GuardOrType; metadata?: RegistryMetadataRecord }>();\n for (const [name, guard] of this.loadedGuards) {\n result.set(name, {\n guard,\n metadata: this.metadataStore.getMetadata(name),\n });\n }\n return result;\n }\n\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedGuards.delete(name);\n return this.guards.delete(name);\n }\n\n clear(): void {\n for (const name of this.guards.keys()) {\n this.metadataStore.remove(name);\n }\n this.guards.clear();\n this.loadedGuards.clear();\n }\n\n private isLoader(value: GuardOrLoader): value is GuardLoader {\n return (\n typeof value === 'function' &&\n (value as GuardLoader).length === 0\n );\n }\n}\n","import { Type, Injector, inject } from '@angular/core';\nimport {\n RegistryMetadataStore,\n RegistryMetadataRecord,\n} from './registry-metadata';\n\ntype ServiceLoader = () => Promise<Type<any>>;\ntype ServiceOrLoader = Type<any> | ServiceLoader;\n\nexport class ServiceRegistry {\n private static instance: ServiceRegistry;\n private services = new Map<string, ServiceOrLoader>();\n private loadedServices = new Map<string, Type<any>>();\n private injector: Injector | null = null;\n private readonly metadataStore = RegistryMetadataStore.getInstance();\n\n private constructor() {}\n\n static getInstance(): ServiceRegistry {\n if (!ServiceRegistry.instance) {\n ServiceRegistry.instance = new ServiceRegistry();\n }\n return ServiceRegistry.instance;\n }\n\n /**\n * Set the injector to use for service resolution\n */\n setInjector(injector: Injector): void {\n this.injector = injector;\n }\n\n /**\n * Register a service by name (supports lazy loading)\n */\n register(\n name: string,\n service: Type<any> | ServiceLoader,\n metadata?: RegistryMetadataRecord\n ): void {\n if (this.services.has(name)) {\n console.warn(`Service ${name} is already registered. Overwriting...`);\n }\n this.services.set(name, service);\n // If it's already a Type, cache it\n if (typeof service !== 'function' || (service as any).prototype) {\n this.loadedServices.set(name, service as Type<any>);\n }\n if (metadata != null && Object.keys(metadata).length > 0) {\n this.metadataStore.set(name, 'service', metadata);\n }\n }\n\n /**\n * Get a service instance by name (supports lazy loading)\n * Requires injector to be set first\n */\n async get(name: string): Promise<any> {\n // Check if already loaded\n if (this.loadedServices.has(name)) {\n const serviceType = this.loadedServices.get(name)!;\n return this.injectService(serviceType);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n console.error(`Service \"${name}\" not found in registry`);\n return undefined;\n }\n\n // Check if it's a loader function (not a Type)\n const isLoader = typeof serviceOrLoader === 'function' && \n !(serviceOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n try {\n const loader = serviceOrLoader as ServiceLoader;\n const serviceType = await loader();\n this.loadedServices.set(name, serviceType);\n return this.injectService(serviceType);\n } catch (error) {\n console.error(`Failed to lazy load service \"${name}\":`, error);\n return undefined;\n }\n }\n\n // It's already a Type\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return this.injectService(serviceType);\n }\n\n /**\n * Get a service instance synchronously (only works for already loaded services)\n */\n getSync(name: string): any {\n // Check if already loaded\n if (this.loadedServices.has(name)) {\n const serviceType = this.loadedServices.get(name)!;\n return this.injectService(serviceType);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n console.error(`Service \"${name}\" not found in registry`);\n return undefined;\n }\n\n // Check if it's a loader function\n const isLoader = typeof serviceOrLoader === 'function' && \n !(serviceOrLoader as any).prototype?.constructor;\n\n // If it's a loader, we can't get it synchronously\n if (isLoader) {\n console.warn(`Service \"${name}\" is lazy loaded and cannot be retrieved synchronously. Use get() instead.`);\n return undefined;\n }\n\n // It's already a Type\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return this.injectService(serviceType);\n }\n\n /**\n * Inject a service type using the injector\n */\n private injectService(serviceType: Type<any>): any {\n if (!this.injector) {\n // Try to use inject() if no injector is set\n try {\n return inject(serviceType);\n } catch (error) {\n console.error(`Cannot inject service: No injector set and inject() failed`, error);\n return undefined;\n }\n }\n\n try {\n return this.injector.get(serviceType);\n } catch (error) {\n console.error(`Failed to get service from injector:`, error);\n return undefined;\n }\n }\n\n /**\n * Get the service Type (class) by name (supports lazy loading).\n * Use this to scope the provider to a child injector (e.g. \"self\" context).\n */\n async getType(name: string): Promise<Type<any> | undefined> {\n if (this.loadedServices.has(name)) {\n return this.loadedServices.get(name);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n console.error(`Service \"${name}\" not found in registry`);\n return undefined;\n }\n\n const isLoader =\n typeof serviceOrLoader === 'function' &&\n !(serviceOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n try {\n const loader = serviceOrLoader as ServiceLoader;\n const serviceType = await loader();\n this.loadedServices.set(name, serviceType);\n return serviceType;\n } catch (error) {\n console.error(`Failed to lazy load service \"${name}\":`, error);\n return undefined;\n }\n }\n\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return serviceType;\n }\n\n /**\n * Get the service Type synchronously (only for already loaded services).\n */\n getTypeSync(name: string): Type<any> | undefined {\n if (this.loadedServices.has(name)) {\n return this.loadedServices.get(name);\n }\n\n const serviceOrLoader = this.services.get(name);\n if (!serviceOrLoader) {\n return undefined;\n }\n\n const isLoader =\n typeof serviceOrLoader === 'function' &&\n !(serviceOrLoader as any).prototype?.constructor;\n\n if (isLoader) {\n return undefined;\n }\n\n const serviceType = serviceOrLoader as Type<any>;\n this.loadedServices.set(name, serviceType);\n return serviceType;\n }\n\n /**\n * Check if a service is registered\n */\n has(name: string): boolean {\n return this.services.has(name);\n }\n\n /**\n * Get all registered service names\n */\n getAllNames(): string[] {\n return Array.from(this.services.keys());\n }\n\n /**\n * Get metadata for a registered service by key.\n */\n getMetadata(key: string): RegistryMetadataRecord | undefined {\n return this.metadataStore.getMetadata(key);\n }\n\n /**\n * Unregister a service\n */\n unregister(name: string): boolean {\n this.metadataStore.remove(name);\n this.loadedServices.delete(name);\n return this.services.delete(name);\n }\n\n /**\n * Clear all registered services\n */\n clear(): void {\n for (const name of this.services.keys()) {\n this.metadataStore.remove(name);\n }\n this.services.clear();\n this.loadedServices.clear();\n }\n}\n\n","import { Router, Routes, RunGuardsAndResolvers } from '@angular/router';\nimport { Type, Injectable, inject, signal, computed } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { firstValueFrom } from 'rxjs';\nimport { ComponentRegistry } from '../registry/component.registry';\nimport { GuardRegistry, type GuardOrType } from '../registry/guard.registry';\n\n/**\n * Route configuration for the router.\n * @param path - The path of the route.\n * @param component - The component key to load for the route using the ComponentRegistry.\n * @param title - The title of the route.\n * @param canActivate - The guards keys to activate for the route using the GuardRegistry.\n * @param canDeactivate - The guards keys to deactivate for the route using the GuardRegistry.\n * @param canLoad - The guards keys to load for the route using the GuardRegistry.\n * @param canMatch - The guards keys to match for the route using the GuardRegistry.\n * @param pathMatch - The path match strategy for the route.\n * @param outlet - The outlet of the route.\n * @param canActivateChild - The guards keys to activate the children routes for the route using the GuardRegistry.\n * @param runGuardsAndResolvers - The strategy to run guards and resolvers for the route.\n * @param data - The data to pass to the route. It will be merged with the data from the route config file.\n * @param children - Nested routes and optional defaultRedirect/catchAllRedirect for the child segment.\n */\n\nexport interface RouteConfig {\n path: string;\n component: string;\n title?: string;\n canActivate?: string[];\n canDeactivate?: string[];\n canLoad?: string[];\n canMatch?: string[];\n outlet?: string;\n pathMatch?: 'full' | 'prefix';\n canActivateChild?: string[];\n runGuardsAndResolvers?: RunGuardsAndResolvers;\n data?: Record<string, any>;\n /** Child routes; can include defaultRedirect and catchAllRedirect for this segment. */\n children?: RouteConfigs;\n}\n\nexport interface RouteConfigs {\n routes: RouteConfig[];\n /** Redirect path for empty route (path: ''). Omit to not add a default redirect. */\n defaultRedirect?: string;\n /** Redirect path for unknown routes (path: '**'). Omit to not add a catch-all. */\n catchAllRedirect?: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouteLoader {\n private router = inject(Router);\n private http = inject(HttpClient);\n private componentRegistry = ComponentRegistry.getInstance();\n private guardRegistry = GuardRegistry.getInstance();\n\n private readonly _routeConfigFile = signal<RouteConfigs | null>(null);\n private readonly _configPath = signal<string>('');\n\n /** Currently loaded route config file, or null if not yet loaded. */\n readonly routeConfigFile = this._routeConfigFile.asReadonly();\n /** Path from which the config was loaded. */\n readonly configPath = this._configPath.asReadonly();\n /** Route config array from the loaded file. */\n readonly routeConfig = computed<RouteConfig[]>(() => this._routeConfigFile()?.routes ?? []);\n\n /**\n * Load routes from a config object. Updates signals and resets the router.\n */\n async loadRoutes(config: RouteConfigs): Promise<void> {\n this._configPath.set('');\n this._routeConfigFile.set(config);\n\n await this.updateRoutes();\n }\n\n /**\n * Fetch route config from a URL (HTTP GET), then load it. Sets configPath signal to the requested URL.\n */\n async loadRoutesFromUrl(configPath: string): Promise<void> {\n try {\n const config = await firstValueFrom(this.http.get<RouteConfigs>(configPath));\n this._configPath.set(configPath);\n this._routeConfigFile.set(config);\n await this.updateRoutes();\n } catch (error) {\n console.error('Failed to load route configuration from URL:', error);\n throw error;\n }\n }\n\n private async updateRoutes(): Promise<void> {\n const config = this._routeConfigFile();\n const routeConfigList = this.routeConfig();\n const routes: Routes = await Promise.all(\n routeConfigList.map((routeConfig) => this.convertRouteConfig(routeConfig))\n );\n\n if (config?.defaultRedirect != null && config.defaultRedirect !== '') {\n routes.unshift({\n path: '',\n redirectTo: config.defaultRedirect,\n pathMatch: 'full',\n });\n }\n\n if (config?.catchAllRedirect != null && config.catchAllRedirect !== '') {\n routes.push({\n path: '**',\n redirectTo: config.catchAllRedirect,\n });\n }\n\n this.router.resetConfig(routes);\n }\n\n private async convertRouteConfig(config: RouteConfig): Promise<Routes[0]> {\n const routeData: Record<string, unknown> = { ...(config.data ?? {}) };\n if (config.component) {\n routeData['component'] = config.component;\n }\n\n const [\n canActivateGuards,\n canDeactivateGuards,\n canLoadGuards,\n canMatchGuards,\n canActivateChildGuards,\n ] = await Promise.all([\n this.resolveGuards(config.canActivate),\n this.resolveGuards(config.canDeactivate),\n this.resolveGuards(config.canLoad),\n this.resolveGuards(config.canMatch),\n this.resolveGuards(config.canActivateChild),\n ]);\n\n const route: Routes[0] = {\n path: config.path,\n loadComponent: () => this.loadComponent(config),\n data: routeData,\n ...(config.title != null && { title: config.title }),\n ...(config.outlet != null && { outlet: config.outlet }),\n ...(config.pathMatch != null && { pathMatch: config.pathMatch }),\n ...(config.runGuardsAndResolvers != null && {\n runGuardsAndResolvers: config.runGuardsAndResolvers,\n }),\n ...(canActivateGuards.length > 0 && {\n canActivate: canActivateGuards as Routes[0]['canActivate'],\n }),\n ...(canDeactivateGuards.length > 0 && {\n canDeactivate: canDeactivateGuards as Routes[0]['canDeactivate'],\n }),\n ...(canLoadGuards.length > 0 && { canLoad: canLoadGuards as Routes[0]['canLoad'] }),\n ...(canMatchGuards.length > 0 && { canMatch: canMatchGuards as Routes[0]['canMatch'] }),\n ...(canActivateChildGuards.length > 0 && {\n canActivateChild: canActivateChildGuards as Routes[0]['canActivateChild'],\n }),\n };\n\n if (config.children?.routes?.length) {\n const childConfigs = config.children;\n route.children = await Promise.all(\n childConfigs.routes.map((child) => this.convertRouteConfig(child))\n );\n if (childConfigs.defaultRedirect != null && childConfigs.defaultRedirect !== '') {\n route.children.unshift({\n path: '',\n redirectTo: childConfigs.defaultRedirect,\n pathMatch: 'full',\n });\n }\n if (childConfigs.catchAllRedirect != null && childConfigs.catchAllRedirect !== '') {\n route.children.push({\n path: '**',\n redirectTo: childConfigs.catchAllRedirect,\n });\n }\n }\n\n return route;\n }\n\n private async resolveGuards(guardNames: string[] | undefined): Promise<GuardOrType[]> {\n if (!guardNames?.length) return [];\n const resolved = await Promise.all(guardNames.map((name) => this.getGuard(name)));\n return resolved.filter((g): g is GuardOrType => g != null);\n }\n\n private async loadComponent(routeConfig: RouteConfig): Promise<Type<unknown>> {\n const componentName = routeConfig.component;\n if (!componentName) {\n throw new Error('Route config must specify a component key.');\n }\n const component = await this.componentRegistry.get(componentName);\n if (!component) {\n throw new Error(\n `Component \"${componentName}\" is not registered. Register it with ComponentRegistry before loading routes.`\n );\n }\n return component;\n }\n\n private async getGuard(guardName: string): Promise<GuardOrType | null> {\n const guard = await this.guardRegistry.get(guardName);\n if (guard == null) {\n console.warn(`Unknown guard: ${guardName}. Register it with GuardRegistry.`);\n return null;\n }\n return guard;\n }\n}\n","import type { Signal } from '@angular/core';\n\nexport interface CurrentInstance {\n model?: Signal<unknown>;\n /**\n * Services/state exposed by name for ref/expression resolution.\n * (Kept separate from `model` to avoid alias collisions.)\n */\n services: Record<string, unknown>;\n}\n\n/**\n * Handle for a registered block: exposes instance (services/state by name) for ref resolution.\n */\nexport interface BlockInstanceHandle {\n /** Instance: services and state by name (e.g. FormState, value). */\n instance: CurrentInstance;\n /** Optional cleanup when block is destroyed. */\n destroy?: () => void;\n}\n\n/**\n * Registry of block instances by (full) id within a tree.\n * One registry per logical tree; duplicate id throws.\n */\nexport interface BlockRegistry {\n register(id: string, handle: BlockInstanceHandle): void;\n unregister(id: string): void;\n get(id: string): BlockInstanceHandle | undefined;\n /** True if id resolves in this registry or any parent (for refs). */\n has(id: string): boolean;\n /** True only if id is registered on this registry layer (not parent). Used before register. */\n hasLocal(id: string): boolean;\n}\n\n/**\n * Registry that chains lookups to a parent registry (lexical scoping).\n * Registration/unregistration always happens on the local registry only.\n */\nexport class ChainedBlockRegistry implements BlockRegistry {\n constructor(\n private readonly local: BlockRegistry,\n private readonly parent: BlockRegistry | null,\n ) {}\n\n register(id: string, handle: BlockInstanceHandle): void {\n this.local.register(id, handle);\n }\n\n unregister(id: string): void {\n this.local.unregister(id);\n }\n\n get(id: string): BlockInstanceHandle | undefined {\n return this.local.get(id) ?? this.parent?.get(id);\n }\n\n has(id: string): boolean {\n return this.local.has(id) || (this.parent?.has(id) ?? false);\n }\n\n hasLocal(id: string): boolean {\n return this.local.hasLocal(id);\n }\n}\n\n/**\n * Default in-memory BlockRegistry.\n */\nexport class BlockRegistryImpl implements BlockRegistry {\n private readonly map = new Map<string, BlockInstanceHandle>();\n\n register(id: string, handle: BlockInstanceHandle): void {\n if (this.map.has(id)) {\n throw new Error(`Block id \"${id}\" is already registered. Each id may only occur once per tree.`);\n }\n this.map.set(id, handle);\n }\n\n unregister(id: string): void {\n this.map.delete(id);\n }\n\n get(id: string): BlockInstanceHandle | undefined {\n return this.map.get(id);\n }\n\n has(id: string): boolean {\n return this.map.has(id);\n }\n\n hasLocal(id: string): boolean {\n return this.map.has(id);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BlockRegistryImpl, type BlockRegistry } from '../block-loader/block-registry';\n\nexport interface ScopedRegistryNode {\n registry: BlockRegistry;\n parentScopeKey: string | null;\n}\n\n/**\n * Holds named block registries (e.g. `root` for a route outlet, scoped keys for list items/columns).\n * This enables explicit cross-scope ref resolution like `ScopeKey/BlockId:model.title`.\n */\n@Injectable({ providedIn: 'root' })\nexport class BlockRegistryService {\n readonly registry = new Map<string, ScopedRegistryNode>([\n ['root', { registry: new BlockRegistryImpl(), parentScopeKey: null }],\n ]);\n\n setScopedRegistry(key: string, reg: BlockRegistry, parentScopeKey: string | null = 'root'): void {\n if (key === 'root') {\n throw new Error('Cannot set scoped registry under reserved key \"root\".');\n }\n this.registry.set(key, { registry: reg, parentScopeKey });\n }\n\n removeScopedRegistry(key: string): void {\n if (key === 'root') return;\n this.registry.delete(key);\n }\n\n getRegistryForScope(scopeKey: string): BlockRegistry | null {\n return this.registry.get(scopeKey)?.registry ?? null;\n }\n\n getParentScopeKey(scopeKey: string): string | null {\n return this.registry.get(scopeKey)?.parentScopeKey ?? null;\n }\n}\n\n","import type {\n BlockDescription,\n BlockOutputValue,\n SafeParseBlockDescriptionResult,\n ServiceEntry,\n} from './block-description.types';\n\nfunction isNonEmptyString(v: unknown): v is string {\n return typeof v === 'string' && v.length > 0;\n}\n\nfunction validateParams(v: unknown, path: string): string | null {\n if (v === undefined) return null;\n if (Array.isArray(v)) return null;\n if (typeof v === 'object' && v !== null && !Array.isArray(v)) return null;\n return `${path}: params must be array or record`;\n}\n\nfunction validateServiceEntry(v: unknown, path: string): string | null {\n if (isNonEmptyString(v)) return null;\n if (typeof v !== 'object' || v === null || Array.isArray(v))\n return `${path}: invalid service entry`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['id'])) return `${path}: service object requires non-empty id`;\n if (o['scope'] !== undefined && o['scope'] !== 'self') return `${path}: invalid scope`;\n if (o['alias'] !== undefined && !isNonEmptyString(o['alias'])) return `${path}: invalid alias`;\n return null;\n}\n\nfunction validateThenChainStep(v: unknown, path: string): string | null {\n if (isNonEmptyString(v)) return null;\n if (typeof v !== 'object' || v === null || Array.isArray(v))\n return `${path}: invalid then step`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['ref'])) return `${path}: then step object requires ref`;\n const p = validateParams(o['params'], `${path}.params`);\n if (p) return p;\n if (o['then'] !== undefined) {\n if (!Array.isArray(o['then'])) return `${path}.then must be an array`;\n for (let i = 0; i < o['then'].length; i++) {\n const e = validateThenChainStep(o['then'][i], `${path}.then[${i}]`);\n if (e) return e;\n }\n }\n return null;\n}\n\nfunction validateOnError(v: unknown, path: string): string | null {\n if (typeof v !== 'object' || v === null || Array.isArray(v)) return `${path}: invalid onError`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['ref'])) return `${path}: onError requires ref`;\n return validateParams(o['params'], `${path}.params`);\n}\n\nfunction validateOutputCallObject(v: unknown, path: string): string | null {\n if (typeof v !== 'object' || v === null || Array.isArray(v))\n return `${path}: invalid output object`;\n const o = v as Record<string, unknown>;\n if (!isNonEmptyString(o['ref'])) return `${path}: output object requires ref`;\n const p = validateParams(o['params'], `${path}.params`);\n if (p) return p;\n if (o['then'] !== undefined) {\n if (!Array.isArray(o['then'])) return `${path}.then must be an array`;\n for (let i = 0; i < o['then'].length; i++) {\n const e = validateThenChainStep(o['then'][i], `${path}.then[${i}]`);\n if (e) return e;\n }\n }\n if (o['onError'] !== undefined) {\n const e = validateOnError(o['onError'], `${path}.onError`);\n if (e) return e;\n }\n return null;\n}\n\nfunction validateOutputValue(v: unknown, path: string): string | null {\n if (isNonEmptyString(v)) return null;\n return validateOutputCallObject(v, path);\n}\n\nfunction validateBlockDescriptionShape(data: unknown): string | null {\n if (data === null || typeof data !== 'object' || Array.isArray(data)) {\n return 'Expected an object';\n }\n const o = data as Record<string, unknown>;\n if (!isNonEmptyString(o['component'])) return 'component is required and must be non-empty';\n if (o['id'] !== undefined && !isNonEmptyString(o['id'])) return 'id must be a non-empty string';\n\n if (o['services'] !== undefined && o['services'] !== null) {\n const s = o['services'];\n const entries = Array.isArray(s) ? s : [s];\n for (let i = 0; i < entries.length; i++) {\n const e = validateServiceEntry(entries[i], `services[${i}]`);\n if (e) return e;\n }\n }\n\n if (o['directives'] !== undefined && o['directives'] !== null) {\n const d = o['directives'];\n if (isNonEmptyString(d)) {\n /* ok */\n } else if (Array.isArray(d)) {\n for (let i = 0; i < d.length; i++) {\n if (!isNonEmptyString(d[i])) return `directives[${i}] must be a non-empty string`;\n }\n } else {\n return 'directives must be a string or array of strings';\n }\n }\n\n if (o['inputs'] !== undefined && o['inputs'] !== null) {\n if (typeof o['inputs'] !== 'object' || Array.isArray(o['inputs'])) return 'inputs must be an object';\n }\n\n if (o['outputs'] !== undefined && o['outputs'] !== null) {\n if (typeof o['outputs'] !== 'object' || Array.isArray(o['outputs'])) return 'outputs must be an object';\n const outs = o['outputs'] as Record<string, unknown>;\n for (const key of Object.keys(outs)) {\n const e = validateOutputValue(outs[key], `outputs.${key}`);\n if (e) return e;\n }\n }\n\n return null;\n}\n\nexport function safeParseBlockDescription(data: unknown): SafeParseBlockDescriptionResult {\n const message = validateBlockDescriptionShape(data);\n if (message) return { success: false, error: { message } };\n\n const o = data as Record<string, unknown>;\n const servicesRaw = o['services'];\n const services: ServiceEntry[] =\n servicesRaw == null\n ? []\n : Array.isArray(servicesRaw)\n ? (servicesRaw as ServiceEntry[])\n : [servicesRaw as ServiceEntry];\n\n const directivesRaw = o['directives'];\n const directives: string | string[] =\n directivesRaw == null ? [] : (directivesRaw as string | string[]);\n\n const result: BlockDescription = {\n component: o['component'] as string,\n services,\n directives,\n };\n if (o['id'] !== undefined) result.id = o['id'] as string;\n if (o['inputs'] !== undefined) result.inputs = o['inputs'] as Record<string, unknown>;\n if (o['outputs'] !== undefined) result.outputs = o['outputs'] as Record<string, BlockOutputValue>;\n\n return { success: true, data: result };\n}\n","import type {\n BlockDescription,\n BlockInput,\n OutputCallObject,\n ServiceEntry,\n} from './block-description.types';\nimport {\n BlockDefinitionsRegistry,\n type BlockDefinitionOrLoader,\n isBlockDefinitionLoader,\n} from '../registry/block-definitions.registry';\nexport type {\n BlockDescription,\n BlockInput,\n BlockOutputValue,\n OutputCallObject,\n SafeParseBlockDescriptionResult,\n ServiceEntry,\n ThenChainStep,\n} from './block-description.types';\nexport type { OutputOnError } from './block-description.types';\n\nexport { safeParseBlockDescription } from './block-description-validate';\n\nasync function resolveBlockDefinitionValue(\n raw: BlockDefinitionOrLoader,\n): Promise<Record<string, unknown>> {\n if (isBlockDefinitionLoader(raw)) {\n return raw();\n }\n return raw;\n}\n\n/** @deprecated Use OutputCallObject */\nexport type OutputReference = OutputCallObject;\n\n/** Normalize services to array. */\nexport function normalizeServices(services: BlockDescription['services']): ServiceEntry[] {\n if (services == null) return [];\n return Array.isArray(services) ? services : [services];\n}\n\n/** Normalize directives to array of directive ids. */\nexport function normalizeDirectives(directives: BlockDescription['directives']): string[] {\n if (directives == null) return [];\n return Array.isArray(directives) ? directives : [directives];\n}\n\nexport function isOutputCallObject(value: unknown): value is OutputCallObject {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n typeof (value as OutputCallObject).ref === 'string' &&\n (value as OutputCallObject).ref.length > 0\n );\n}\n\n/** @deprecated Use isOutputCallObject */\nexport function isOutputReference(value: unknown): value is OutputReference {\n return isOutputCallObject(value);\n}\n\n/**\n * Reference to a registered block: { blockId: string, blockDefinition?: object }.\n * Resolution uses blockId only to look up the registered block description.\n * When blockDefinition is provided, it is deep-merged onto the base so only\n * specified properties override (e.g. inputs.model); other keys are preserved.\n */\nexport interface BlockReference {\n /** Used by isBlockReference only; resolution uses blockId. */\n id?: string;\n /** Registered block id used to resolve the block description. */\n blockId?: string;\n /** Override merged onto the resolved block; only specified keys (e.g. inputs) are applied. */\n blockDefinition?: Partial<BlockInput>;\n}\n\nexport function isBlockReference(value: unknown): value is BlockReference {\n if (typeof value !== 'object' || value === null || 'component' in value) return false;\n const id = (value as BlockReference).id ?? (value as BlockReference).blockId;\n return typeof id === 'string' && id.length > 0;\n}\n\n/**\n * Deep-merge override onto base. Only keys present in override are changed; nested objects\n * are merged recursively so e.g. override.inputs.model does not remove base.inputs.rows.\n * Arrays and primitives in override replace the base value.\n */\nexport function deepMergeBlockDefinition(\n base: Record<string, unknown>,\n override: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...base };\n for (const key of Object.keys(override)) {\n const baseVal = result[key];\n const overrideVal = override[key];\n if (\n overrideVal != null &&\n typeof overrideVal === 'object' &&\n !Array.isArray(overrideVal) &&\n baseVal != null &&\n typeof baseVal === 'object' &&\n !Array.isArray(baseVal)\n ) {\n result[key] = deepMergeBlockDefinition(\n baseVal as Record<string, unknown>,\n overrideVal as Record<string, unknown>,\n );\n } else {\n result[key] = overrideVal;\n }\n }\n return result;\n}\n\n/**\n * Resolve a block reference to a full description using optional per-call definitions\n * and the global BlockDefinitionsRegistry. Per-call blockDefinitions take precedence\n * over global entries. If blockDefinition is present, it is deep-merged onto the base;\n * otherwise returns a shallow copy of the base.\n *\n * Registry and per-call map entries may be plain objects or async loaders (same pattern\n * as ComponentRegistry / DirectiveRegistry).\n */\nexport async function resolveBlockReference(\n ref: BlockReference,\n blockDefinitions: Record<string, BlockDefinitionOrLoader> | null | undefined,\n): Promise<Record<string, unknown>> {\n const blockId = ref.blockId;\n const id = ref.id;\n const registry: BlockDefinitionsRegistry = BlockDefinitionsRegistry.getInstance();\n if (!blockId || typeof blockId !== 'string')\n throw new Error('Block reference must have blockId.');\n\n let base: Record<string, unknown> | undefined;\n if (blockDefinitions && Object.prototype.hasOwnProperty.call(blockDefinitions, blockId)) {\n const raw = blockDefinitions[blockId] as BlockDefinitionOrLoader;\n base = await resolveBlockDefinitionValue(raw);\n } else {\n base = await registry.get(blockId);\n }\n\n if (base == null || typeof base !== 'object')\n throw new Error(`Block \"${blockId}\" has no definition.`);\n\n if (id != null && id !== '') {\n base = { ...base, id };\n }\n\n const overrides = ref.blockDefinition;\n if (overrides == null || typeof overrides !== 'object' || Object.keys(overrides).length === 0)\n return { ...base };\n return deepMergeBlockDefinition(base, overrides);\n}\n","/**\n * Parse ref paths and detect {{ref}} (read-only) and [(ref)] (two-way) in strings.\n */\n\nconst READONLY_REF_RE = /\\{\\{([^}]+)\\}\\}/g;\nconst TWOWAY_REF_RE = /^\\[\\(([^)]+)\\)\\]$/;\n\nexport interface ParsedRefPath {\n /** Optional scope key prefix for cross-scope refs: `ScopeKey/BlockId:...` */\n scopeKey?: string;\n blockId?: string;\n serviceOrModel: string;\n pathParts: string[];\n}\n\nconst PARSE_REF_PATH_CACHE_MAX = 64;\nconst parseRefPathCache = new Map<string, ParsedRefPath>();\n\n/**\n * Parse ref path in the form \"BlockID:model.info.title\" or \"model.info.title\".\n * - With colon: first segment before \":\" is block id, rest is instance path (service/model + property path).\n * - Without colon: current block; entire string is instance path (service/model + property path).\n * - Single segment (e.g. \"FormState\"): resolved as service/model name on current instance; if missing, resolution returns null (e.g. \"age\" for model path fallback).\n */\nfunction parseRefPathUncached(refPath: string): ParsedRefPath {\n const trimmed = refPath.trim();\n const colonIndex = trimmed.indexOf(':');\n\n if (colonIndex !== -1) {\n const prefix = trimmed.slice(0, colonIndex).trim();\n const rest = trimmed.slice(colonIndex + 1).trim();\n // Prefix may be \"BlockID\" or \"ScopeKey/BlockID\" (scope key may contain '/').\n // BlockID must not contain a dot (so \"BlockID:model.info.title\" is valid; \"a:b:c\" → prefix \"a\", rest \"b:c\")\n if (prefix.length > 0 && !prefix.includes('.')) {\n const lastSlash = prefix.lastIndexOf('/');\n const scopeKey = lastSlash !== -1 ? prefix.slice(0, lastSlash) : undefined;\n const blockId = lastSlash !== -1 ? prefix.slice(lastSlash + 1) : prefix;\n if (!blockId) {\n throw new Error(`Invalid block id: ${prefix}`);\n }\n const pathParts = rest.split('.').filter(Boolean);\n return { scopeKey, blockId, serviceOrModel: pathParts[0], pathParts: pathParts.slice(1) };\n } else {\n throw new Error(`Invalid block id: ${prefix}`);\n }\n }\n\n const pathParts = trimmed.split('.').filter(Boolean);\n if (pathParts.length === 0) {\n return { serviceOrModel: '', pathParts: [] };\n }\n if (pathParts.length === 1) {\n // Single segment: treat as service/model name (e.g. \"FormState\" -> instance.FormState)\n return { serviceOrModel: pathParts[0], pathParts: [] };\n }\n return { serviceOrModel: pathParts[0], pathParts: pathParts.slice(1) };\n}\n\nexport function parseRefPath(refPath: string): ParsedRefPath {\n const cached = parseRefPathCache.get(refPath);\n if (cached) return cached;\n const result = parseRefPathUncached(refPath);\n if (parseRefPathCache.size >= PARSE_REF_PATH_CACHE_MAX) parseRefPathCache.clear();\n parseRefPathCache.set(refPath, result);\n return result;\n}\n\nexport function extractReadonlyRefs(template: string): string[] {\n const refs: string[] = [];\n let m: RegExpExecArray | null;\n READONLY_REF_RE.lastIndex = 0;\n while ((m = READONLY_REF_RE.exec(template)) !== null) {\n const ref = m[1].trim();\n if (ref && !refs.includes(ref)) refs.push(ref);\n }\n return refs;\n}\n\nexport function isTwoWayRefString(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n return TWOWAY_REF_RE.test(value.trim());\n}\n\n/**\n * True when a string contains two-way ref delimiters `[(` or `)]` but is not a valid\n * standalone two-way ref (exact form `[(refPath)]`). Mixing two-way with literals or {{ }} is invalid.\n */\nexport function isInvalidTwoWayMix(value: unknown): value is string {\n if (typeof value !== 'string') return false;\n const s = value.trim();\n const hasDelimiters = s.includes('[(') || s.includes(')]');\n return hasDelimiters && !TWOWAY_REF_RE.test(s);\n}\n\n/**\n * One trim + one pass: classify string for two-way ref handling. Use instead of calling\n * isInvalidTwoWayMix and isTwoWayRefString separately to avoid double trim/regex.\n */\nexport function classifyTwoWayString(value: unknown): 'two-way' | 'invalid-mix' | 'none' {\n if (typeof value !== 'string') return 'none';\n const s = value.trim();\n if (TWOWAY_REF_RE.test(s)) return 'two-way';\n\n const hasOpen = s.includes('[(');\n const hasClose = s.includes(')]');\n if (!hasOpen && !hasClose) return 'none';\n\n // Only treat as invalid mix when the string looks like an attempted two-way ref\n // wrapper, not when it contains \")]\" from normal indexing/calls inside templates.\n if ((hasOpen && hasClose) || s.startsWith('[(') || s.endsWith(')]')) {\n return 'invalid-mix';\n }\n\n return 'none';\n}\n\nexport function parseTwoWayRef(value: string): string | null {\n const m = value.trim().match(TWOWAY_REF_RE);\n return m ? m[1].trim() : null;\n}\n\nexport function getRefPathFromReadonly(template: string, match: string): string {\n const re = new RegExp(`\\\\{\\\\{${escapeRe(match)}\\\\}\\\\}`, 'g');\n const m = re.exec(template);\n return m ? match : '';\n}\n\nfunction escapeRe(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { computed, isSignal, signal, type Signal } from '@angular/core';\nimport type { BlockRegistry, CurrentInstance } from './block-registry';\nimport { parseRefPath } from './ref-expressions';\n\nexport interface ResolverContext {\n registry: BlockRegistry;\n /** Current block's full id (nearest block with id). */\n currentBlockId?: string;\n /** Current block's instance (services/state by name). */\n currentInstance?: CurrentInstance;\n /** Optional scope-key → registry lookup for explicit `ScopeKey/BlockId:...` refs. */\n getRegistryForScope?: (scopeKey: string) => BlockRegistry | null;\n}\n\nconst WARN_CACHE_MAX = 200;\nconst warnCache = new Set<string>();\nfunction warnOnce(msg: string): void {\n if (warnCache.has(msg)) return;\n if (warnCache.size >= WARN_CACHE_MAX) warnCache.clear();\n warnCache.add(msg);\n console.warn(msg);\n}\n\n/**\n * Resolve a ref path to the target object and path.\n * Path format: \"model.info.title\" (current block) or \"BlockID:model.info.title\" (named block).\n * First segment after the optional BlockID: is the service/model name; the rest is the property path.\n * Single-segment refs (e.g. \"age\") return null so interpolation falls back to model path.\n */\nexport function resolveRefPath(\n refPath: string,\n ctx: ResolverContext,\n): { target: unknown; path: string[] } | null {\n const parsed = parseRefPath(refPath);\n const { scopeKey, blockId, serviceOrModel, pathParts } = parsed;\n\n if (!serviceOrModel) {\n return null;\n }\n\n const registry =\n scopeKey != null\n ? (ctx.getRegistryForScope?.(scopeKey) ?? null)\n : ctx.registry;\n if (scopeKey != null && registry == null) {\n warnOnce(`Ref \"${refPath}\" could not resolve scope \"${scopeKey}\".`);\n return null;\n }\n\n let instance: CurrentInstance | undefined;\n if (blockId != null) {\n // Allow self-references during load before the current block is registered.\n // Important: only shortcut when there is no explicit scope. Scoped refs must resolve through that scope's registry.\n if (\n scopeKey == null &&\n ctx.currentBlockId != null &&\n blockId === ctx.currentBlockId &&\n ctx.currentInstance != null\n ) {\n instance = ctx.currentInstance;\n } else {\n const handle = (registry ?? ctx.registry).get(blockId);\n if (!handle) {\n warnOnce(`Ref \"${refPath}\" could not resolve block id \"${blockId}\".`);\n return null;\n }\n instance = handle.instance;\n }\n } else {\n instance = ctx.currentInstance ?? undefined;\n }\n\n if (instance == null) return null;\n\n // Special-case: `model` refers to the instance model signal (not a service).\n if (serviceOrModel === 'model') {\n const base = instance.model;\n if (!base) {\n warnOnce(`Ref \"${refPath}\" could not resolve model (no instance model).`);\n return null;\n }\n if (pathParts.length === 0) {\n return { target: base, path: [] };\n }\n let current: unknown = base;\n for (let i = 0; i < pathParts.length - 1; i++) {\n if (current != null && isSignal(current)) {\n current = (current as Signal<unknown>)();\n }\n if (current == null || typeof current !== 'object') return null;\n current = (current as Record<string, unknown>)[pathParts[i]];\n }\n return { target: current, path: pathParts.slice(-1) };\n }\n\n const service = instance.services?.[serviceOrModel];\n\n // If the named service/model is not present on the instance, fall back to `model.<serviceOrModel>...`\n // (e.g. `Kanban:title` -> `Kanban.model.title`) but only for named-block refs.\n const shouldModelFallback = blockId != null && service == null && instance.model != null;\n const base = shouldModelFallback ? instance.model : service;\n const effectiveParts = shouldModelFallback ? [serviceOrModel, ...pathParts] : pathParts;\n\n if (!base) {\n warnOnce(`Ref \"${refPath}\" could not resolve service/model \"${serviceOrModel}\".`);\n return null;\n }\n if (effectiveParts.length === 0) {\n return { target: base, path: [] };\n }\n\n let current: unknown = base;\n\n for (let i = 0; i < effectiveParts.length - 1; i++) {\n // Unwrap signals at each segment so model.item.a works even when\n // model or item are signals.\n if (current != null && isSignal(current)) {\n current = (current as Signal<unknown>)();\n }\n if (current == null || typeof current !== 'object') return null;\n current = (current as Record<string, unknown>)[effectiveParts[i]];\n }\n\n // Do not unwrap the final segment here; leave it to getRefValue / setRefValue so they\n // can consistently handle signals and functions at the leaf.\n return { target: current, path: effectiveParts.slice(-1) };\n}\n\n/**\n * Get a value from an object by dot-notation path (e.g. \"name.firstName\" -> obj.name?.firstName).\n * Returns undefined if any segment is null/undefined or not an object.\n */\nexport function getValueByPath(obj: unknown, path: string): unknown {\n if (obj == null) return undefined;\n const parts = path.trim().split('.').filter(Boolean);\n let current: unknown = obj;\n for (const part of parts) {\n if (current == null || typeof current !== 'object') return undefined;\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Return true if the value at ref path is an Angular signal (so reading it in an effect would be reactive).\n */\nexport function refPathResolvesToSignal(refPath: string, ctx: ResolverContext): boolean {\n const resolved = resolveRefPath(refPath, ctx);\n if (resolved == null) return false;\n const val =\n resolved.path.length === 0\n ? resolved.target\n : (resolved.target as Record<string, unknown>)?.[resolved.path[0]];\n return val != null && isSignal(val);\n}\n\n/**\n * Get value at ref path (read-only). Returns undefined if not found.\n * When target is a Signal (e.g. model) and path has segments, unwraps the Signal first\n * so refs like PersonForm:model.firstName resolve correctly.\n */\nexport function getRefValue(refPath: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(refPath, ctx);\n\n if (resolved == null || resolved.path.length === 0) {\n return resolved?.target;\n }\n\n let obj: unknown = resolved.target;\n // Unwrap Signal so we can read properties (e.g. PersonForm:model.firstName)\n if (obj != null && isSignal(obj)) {\n obj = (obj as Signal<unknown>)();\n }\n const key = resolved.path[0];\n const val = (obj as Record<string, unknown>)?.[key];\n if (val != null && isSignal(val)) {\n return val();\n }\n if (typeof val === 'function') {\n return (val as () => unknown)();\n }\n return val;\n}\n\nexport function getRefSignal(refPath: string, ctx: ResolverContext): Signal<unknown> | undefined {\n const resolved = resolveRefPath(refPath, ctx);\n\n if (resolved == null) return undefined;\n\n let value: unknown;\n if (resolved.path.length === 0) {\n value = resolved.target;\n } else {\n if (isSignal(resolved.target)) {\n const signalValue = resolved.target();\n\n value =\n signalValue != null && typeof signalValue === 'object'\n ? (signalValue as Record<string, unknown>)[resolved.path[0]]\n : undefined;\n } else {\n value = (resolved.target as Record<string, unknown>)?.[resolved.path[0]];\n }\n }\n\n return value != null && isSignal(value) ? (value as Signal<unknown>) : undefined;\n}\n\n/**\n * Set value at ref path (write). No-op if target is not writable.\n */\nexport function setRefValue(refPath: string, ctx: ResolverContext, value: unknown): void {\n const resolved = resolveRefPath(refPath, ctx);\n if (resolved == null || resolved.path.length === 0) return;\n const obj = resolved.target as Record<string, unknown>;\n const key = resolved.path[0];\n const val = obj?.[key];\n // use isSignal so we only treat real signals as writable\n type WritableSignalLike = { set: (v: unknown) => void };\n const writable =\n val != null && isSignal(val) && typeof (val as unknown as WritableSignalLike).set === 'function'\n ? (val as unknown as WritableSignalLike)\n : null;\n if (writable) {\n writable.set(value);\n } else if (obj != null && typeof obj === 'object') {\n (obj as Record<string, unknown>)[key] = value;\n }\n}\n\n/**\n * Build a computed signal for a template string with {{refPath}} placeholders.\n */\nexport function buildComputedForTemplate(\n template: string,\n refPaths: string[],\n ctx: ResolverContext,\n): Signal<string> {\n const escapeRe = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return computed(() => {\n let out = template;\n for (const refPath of refPaths) {\n const val = getRefValue(refPath, ctx);\n const str = val != null ? String(val) : '';\n out = out.replace(new RegExp(`\\\\{\\\\{${escapeRe(refPath)}\\\\}\\\\}`, 'g'), str);\n }\n return out;\n });\n}\n","import type { ResolverContext } from './ref-resolver';\nimport {\n getRefValue,\n getValueByPath,\n resolveRefPath,\n} from './ref-resolver';\n\n/** AST node types for flow template */\nexport type FlowNode =\n | { type: 'text'; value: string }\n | { type: 'ref'; refPath: string }\n | { type: 'if'; refPath: string; body: FlowNode[]; elseBody?: FlowNode[] }\n | { type: 'for'; itemVar: string; refPath: string; body: FlowNode[] };\n\n/** Scope for @for (e.g. item, $index) */\nexport interface FlowScope {\n [key: string]: unknown;\n}\n\nexport interface InterpretFlowOptions {\n /**\n * Called for each `text` node (e.g. to expand `{{ }}` inside flow bodies).\n * Defaults to identity.\n */\n interpolateText?: (segment: string) => string;\n /**\n * When set, `@if (…)` evaluates this instead of `resolveRefOrModel` (e.g. safe expressions + payload).\n */\n resolveCondition?: (expression: string, scope: FlowScope) => unknown;\n /**\n * When false, `${…}` values are appended without HTML escaping (e.g. output handler params). Default true.\n */\n escapeRefValues?: boolean;\n}\n\n/** Match ${refPath} at start of string (no g flag so match() returns groups). */\nconst REF_AT_START_RE = /^\\$\\{([^}]*)\\}/;\nconst IF_PREFIX_RE = /^@if\\s*\\(/;\nconst FOR_PREFIX_RE = /^@for\\s*\\(/;\n\n/** `s[openIdx] === '('` → index of matching `)`, or -1. */\nfunction findMatchingParen(s: string, openIdx: number): number {\n let depth = 0;\n for (let k = openIdx; k < s.length; k++) {\n const c = s[k];\n if (c === '(') depth++;\n else if (c === ')') {\n depth--;\n if (depth === 0) return k;\n }\n }\n return -1;\n}\n\nfunction findMatchingBrace(s: string, start: number): number {\n let depth = 1;\n for (let i = start; i < s.length; i++) {\n if (s[i] === '{') depth++;\n else if (s[i] === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\n/**\n * Parses a flow template string into an AST.\n * Supports: ${refPath}, @if (refPath) { ... }, @else { ... }, @for (item of refPath) { ... }\n */\nexport function parseFlowTemplate(template: string): FlowNode[] {\n const nodes: FlowNode[] = [];\n let i = 0;\n\n while (i < template.length) {\n const rest = template.slice(i);\n\n const ifPrefix = rest.match(IF_PREFIX_RE);\n if (ifPrefix) {\n const openParenIdx = i + ifPrefix[0].length - 1;\n const closeParenIdx = findMatchingParen(template, openParenIdx);\n if (closeParenIdx === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const refPath = template.slice(openParenIdx + 1, closeParenIdx).trim();\n let bodyOpen = closeParenIdx + 1;\n while (bodyOpen < template.length && /\\s/.test(template[bodyOpen])) bodyOpen++;\n if (template[bodyOpen] !== '{') {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const bodyStart = bodyOpen + 1;\n const bodyEnd = findMatchingBrace(template, bodyStart);\n if (bodyEnd === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const body = template.slice(bodyStart, bodyEnd);\n let next = bodyEnd + 1;\n let elseBody: FlowNode[] | undefined;\n let cursor = next;\n while (cursor < template.length && /\\s/.test(template[cursor] ?? '')) {\n cursor++;\n }\n if (template.startsWith('@else', cursor)) {\n let elseCursor = cursor + '@else'.length;\n while (elseCursor < template.length && /\\s/.test(template[elseCursor] ?? '')) {\n elseCursor++;\n }\n if (template[elseCursor] === '{') {\n const elseEnd = findMatchingBrace(template, elseCursor + 1);\n if (elseEnd !== -1) {\n elseBody = parseFlowTemplate(template.slice(elseCursor + 1, elseEnd));\n next = elseEnd + 1;\n }\n }\n }\n nodes.push({ type: 'if', refPath, body: parseFlowTemplate(body), elseBody });\n i = next;\n continue;\n }\n\n const forPrefix = rest.match(FOR_PREFIX_RE);\n if (forPrefix) {\n const openParenIdx = i + forPrefix[0].length - 1;\n const closeParenIdx = findMatchingParen(template, openParenIdx);\n if (closeParenIdx === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const inner = template.slice(openParenIdx + 1, closeParenIdx).trim();\n const ofMatch = inner.match(/^(\\w+)\\s+of\\s+([\\s\\S]+)$/);\n if (!ofMatch) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const itemVar = ofMatch[1];\n const refPath = ofMatch[2].trim();\n let bodyOpen = closeParenIdx + 1;\n while (bodyOpen < template.length && /\\s/.test(template[bodyOpen])) bodyOpen++;\n if (template[bodyOpen] !== '{') {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const bodyStart = bodyOpen + 1;\n const bodyEnd = findMatchingBrace(template, bodyStart);\n if (bodyEnd === -1) {\n nodes.push({ type: 'text', value: rest });\n break;\n }\n const body = template.slice(bodyStart, bodyEnd);\n nodes.push({ type: 'for', itemVar, refPath, body: parseFlowTemplate(body) });\n i = bodyEnd + 1;\n continue;\n }\n\n const refMatch = rest.match(REF_AT_START_RE);\n if (refMatch) {\n const refPath = refMatch[1].trim();\n nodes.push({ type: 'ref', refPath });\n i += refMatch[0].length;\n continue;\n }\n\n const nextAt = rest.search(/@(?:if|else|for)\\s/);\n const nextDollar = rest.indexOf('${');\n let end: number;\n if (nextAt >= 0 && (nextDollar < 0 || nextAt < nextDollar)) end = i + nextAt;\n else if (nextDollar >= 0) end = i + nextDollar;\n else end = template.length;\n\n if (end > i) {\n nodes.push({ type: 'text', value: template.slice(i, end) });\n i = end;\n } else {\n nodes.push({ type: 'text', value: rest[0] ?? '' });\n i++;\n }\n }\n\n return nodes;\n}\n\n/** Collect all ref paths used in the AST (for reactivity). */\nexport function collectRefPaths(nodes: FlowNode[]): Set<string> {\n const paths = new Set<string>();\n function walk(ns: FlowNode[]) {\n for (const n of ns) {\n if (n.type === 'ref') paths.add(n.refPath);\n else if (n.type === 'if') {\n paths.add(n.refPath);\n walk(n.body);\n if (n.elseBody) walk(n.elseBody);\n } else if (n.type === 'for') {\n paths.add(n.refPath);\n walk(n.body);\n }\n }\n }\n walk(nodes);\n return paths;\n}\n\nfunction escapeHtml(s: string): string {\n const el = typeof document !== 'undefined' ? document.createElement('div') : null;\n if (el) {\n el.textContent = s;\n return el.innerHTML;\n }\n return s\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n}\n\nfunction resolveInScope(refPath: string, scope: FlowScope): unknown {\n const parts = refPath.trim().split('.');\n let v: unknown = scope[parts[0]];\n for (let i = 1; i < parts.length && v !== undefined && v !== null; i++) {\n v = (v as Record<string, unknown>)[parts[i]];\n }\n return v;\n}\n\nfunction isTruthyFlowValue(value: unknown): boolean {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return false;\n if (normalized === 'false' || normalized === '0' || normalized === 'no' || normalized === 'off') {\n return false;\n }\n return true;\n }\n return !!value;\n}\n\n/**\n * Same resolution rules as `interpolateTemplateMixed` for refs: named block ref, else current block `model` path.\n */\nexport function resolveRefOrModel(refPath: string, ctx: ResolverContext): unknown {\n const ref = refPath.trim();\n if (!ref) return undefined;\n const resolved = resolveRefPath(ref, ctx);\n if (resolved != null) {\n return getRefValue(ref, ctx);\n }\n return getValueByPath(ctx.currentInstance?.model?.() ?? {}, ref);\n}\n\n/**\n * Interprets the AST with the given resolver context and optional scope (e.g. item, $index).\n * Escapes interpolated values for safe innerHTML.\n */\nexport function interpretFlow(\n nodes: FlowNode[],\n ctx: ResolverContext,\n scope: FlowScope = {},\n options?: InterpretFlowOptions,\n): string {\n const interpText = options?.interpolateText ?? ((s: string) => s);\n const escapeRefs = options?.escapeRefValues !== false;\n let out = '';\n for (const node of nodes) {\n if (node.type === 'text') {\n out += interpText(node.value);\n continue;\n }\n if (node.type === 'ref') {\n const refPath = node.refPath.trim();\n const firstSegment = refPath.split('.')[0];\n let value: unknown;\n if (firstSegment && firstSegment in scope) {\n value = resolveInScope(refPath, scope);\n } else {\n value = resolveRefOrModel(refPath, ctx);\n }\n if (value !== undefined && value !== null) {\n const chunk = String(value);\n out += escapeRefs ? escapeHtml(chunk) : chunk;\n }\n continue;\n }\n if (node.type === 'if') {\n const rawExpr = node.refPath.trim();\n const cond = options?.resolveCondition\n ? options.resolveCondition(rawExpr, scope)\n : resolveRefOrModel(rawExpr, ctx);\n if (isTruthyFlowValue(cond)) {\n out += interpretFlow(node.body, ctx, scope, options);\n } else if (node.elseBody?.length) {\n out += interpretFlow(node.elseBody, ctx, scope, options);\n }\n continue;\n }\n if (node.type === 'for') {\n const arr = resolveRefOrModel(node.refPath, ctx);\n const list = Array.isArray(arr) ? arr : [];\n for (let idx = 0; idx < list.length; idx++) {\n out += interpretFlow(node.body, ctx, {\n ...scope,\n [node.itemVar]: list[idx],\n $index: idx,\n }, options);\n }\n continue;\n }\n }\n return out;\n}\n\n/** True if the string uses flow syntax (not plain `{{ }}` only). */\nexport function looksLikeFlowTemplate(s: string): boolean {\n return /@(?:if|for)\\s*\\(/.test(s) || /\\$\\{[^}]+\\}/.test(s);\n}\n","import type { ResolverContext } from './ref-resolver';\n\ntype TokenType =\n | 'identifier'\n | 'number'\n | 'string'\n | 'boolean'\n | 'null'\n | 'operator'\n | 'lparen'\n | 'rparen'\n | 'lbracket'\n | 'rbracket'\n | 'dot'\n | 'comma'\n | 'question'\n | 'colon'\n | 'eof';\n\ninterface Token {\n type: TokenType;\n value: string;\n}\n\ntype Expr =\n | { kind: 'literal'; value: unknown }\n | { kind: 'identifier'; name: string }\n | { kind: 'member'; object: Expr; property: string }\n | { kind: 'index'; object: Expr; index: Expr }\n | { kind: 'call'; callee: Expr; args: Expr[] }\n | { kind: 'unary'; op: string; argument: Expr }\n | { kind: 'binary'; op: string; left: Expr; right: Expr }\n | { kind: 'conditional'; test: Expr; consequent: Expr; alternate: Expr };\n\ninterface EvalContext {\n payload: unknown;\n model: Record<string, unknown>;\n services: Record<string, unknown> | undefined;\n resolveRefValue: (ref: string) => unknown;\n}\n\nfunction isIdentStart(ch: string): boolean {\n return /[A-Za-z_$]/.test(ch);\n}\n\nfunction isIdentPart(ch: string): boolean {\n return /[A-Za-z0-9_$]/.test(ch);\n}\n\nfunction tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n let i = 0;\n while (i < input.length) {\n const ch = input[i];\n if (/\\s/.test(ch)) {\n i++;\n continue;\n }\n if (ch === '(') {\n tokens.push({ type: 'lparen', value: ch }); i++; continue;\n }\n if (ch === ')') {\n tokens.push({ type: 'rparen', value: ch }); i++; continue;\n }\n if (ch === '[') {\n tokens.push({ type: 'lbracket', value: ch }); i++; continue;\n }\n if (ch === ']') {\n tokens.push({ type: 'rbracket', value: ch }); i++; continue;\n }\n if (ch === '.') {\n tokens.push({ type: 'dot', value: ch }); i++; continue;\n }\n if (ch === ',') {\n tokens.push({ type: 'comma', value: ch }); i++; continue;\n }\n if (ch === '?') {\n tokens.push({ type: 'question', value: ch }); i++; continue;\n }\n if (ch === ':') {\n tokens.push({ type: 'colon', value: ch }); i++; continue;\n }\n if (ch === '\"' || ch === \"'\") {\n const quote = ch;\n let out = '';\n i++;\n while (i < input.length && input[i] !== quote) {\n if (input[i] === '\\\\' && i + 1 < input.length) {\n i++;\n out += input[i];\n } else {\n out += input[i];\n }\n i++;\n }\n if (input[i] !== quote) throw new Error('Unterminated string');\n i++;\n tokens.push({ type: 'string', value: out });\n continue;\n }\n if (/[0-9]/.test(ch)) {\n let n = ch;\n i++;\n while (i < input.length && /[0-9.]/.test(input[i])) {\n n += input[i++];\n }\n tokens.push({ type: 'number', value: n });\n continue;\n }\n const three = input.slice(i, i + 3);\n const two = input.slice(i, i + 2);\n if (['===', '!=='].includes(three)) {\n tokens.push({ type: 'operator', value: three }); i += 3; continue;\n }\n if (['&&', '||', '==', '!=', '<=', '>='].includes(two)) {\n tokens.push({ type: 'operator', value: two }); i += 2; continue;\n }\n if (['+', '-', '*', '/', '%', '<', '>', '!'].includes(ch)) {\n tokens.push({ type: 'operator', value: ch }); i++; continue;\n }\n if (isIdentStart(ch)) {\n let id = ch;\n i++;\n while (i < input.length && isIdentPart(input[i])) id += input[i++];\n if (id === 'true' || id === 'false') tokens.push({ type: 'boolean', value: id });\n else if (id === 'null') tokens.push({ type: 'null', value: id });\n else tokens.push({ type: 'identifier', value: id });\n continue;\n }\n throw new Error(`Unexpected token: ${ch}`);\n }\n tokens.push({ type: 'eof', value: '' });\n return tokens;\n}\n\nclass Parser {\n constructor(private readonly tokens: Token[], private pos = 0) {}\n private peek(): Token { return this.tokens[this.pos]; }\n private next(): Token { return this.tokens[this.pos++]; }\n private expect(type: TokenType): Token {\n const t = this.next();\n if (t.type !== type) throw new Error(`Expected ${type}, got ${t.type}`);\n return t;\n }\n parse(): Expr {\n const expr = this.parseConditional();\n if (this.peek().type !== 'eof') throw new Error('Unexpected trailing tokens');\n return expr;\n }\n private parseConditional(): Expr {\n const test = this.parseLogicalOr();\n if (this.peek().type === 'question') {\n this.next();\n const consequent = this.parseConditional();\n this.expect('colon');\n const alternate = this.parseConditional();\n return { kind: 'conditional', test, consequent, alternate };\n }\n return test;\n }\n private parseLogicalOr(): Expr {\n let left = this.parseLogicalAnd();\n while (this.peek().type === 'operator' && this.peek().value === '||') {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseLogicalAnd() };\n }\n return left;\n }\n private parseLogicalAnd(): Expr {\n let left = this.parseEquality();\n while (this.peek().type === 'operator' && this.peek().value === '&&') {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseEquality() };\n }\n return left;\n }\n private parseEquality(): Expr {\n let left = this.parseComparison();\n while (this.peek().type === 'operator' && ['==', '!=', '===', '!=='].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseComparison() };\n }\n return left;\n }\n private parseComparison(): Expr {\n let left = this.parseAdditive();\n while (this.peek().type === 'operator' && ['<', '>', '<=', '>='].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseAdditive() };\n }\n return left;\n }\n private parseAdditive(): Expr {\n let left = this.parseMultiplicative();\n while (this.peek().type === 'operator' && ['+', '-'].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseMultiplicative() };\n }\n return left;\n }\n private parseMultiplicative(): Expr {\n let left = this.parseUnary();\n while (this.peek().type === 'operator' && ['*', '/', '%'].includes(this.peek().value)) {\n const op = this.next().value;\n left = { kind: 'binary', op, left, right: this.parseUnary() };\n }\n return left;\n }\n private parseUnary(): Expr {\n if (this.peek().type === 'operator' && ['!', '+', '-'].includes(this.peek().value)) {\n const op = this.next().value;\n return { kind: 'unary', op, argument: this.parseUnary() };\n }\n return this.parsePostfix();\n }\n private parsePostfix(): Expr {\n let expr = this.parsePrimary();\n while (true) {\n if (this.peek().type === 'dot') {\n this.next();\n const id = this.expect('identifier');\n expr = { kind: 'member', object: expr, property: id.value };\n continue;\n }\n if (this.peek().type === 'lbracket') {\n this.next();\n const index = this.parseConditional();\n this.expect('rbracket');\n expr = { kind: 'index', object: expr, index };\n continue;\n }\n if (this.peek().type === 'lparen') {\n this.next();\n const args: Expr[] = [];\n if (this.peek().type !== 'rparen') {\n args.push(this.parseConditional());\n while (this.peek().type === 'comma') {\n this.next();\n args.push(this.parseConditional());\n }\n }\n this.expect('rparen');\n expr = { kind: 'call', callee: expr, args };\n continue;\n }\n break;\n }\n return expr;\n }\n private parsePrimary(): Expr {\n const t = this.next();\n if (t.type === 'number') return { kind: 'literal', value: Number(t.value) };\n if (t.type === 'string') return { kind: 'literal', value: t.value };\n if (t.type === 'boolean') return { kind: 'literal', value: t.value === 'true' };\n if (t.type === 'null') return { kind: 'literal', value: null };\n if (t.type === 'identifier') return { kind: 'identifier', name: t.value };\n if (t.type === 'lparen') {\n const expr = this.parseConditional();\n this.expect('rparen');\n return expr;\n }\n throw new Error(`Unexpected token type: ${t.type}`);\n }\n}\n\nfunction evalExpr(expr: Expr, ctx: EvalContext): unknown {\n switch (expr.kind) {\n case 'literal': return expr.value;\n case 'identifier':\n if (expr.name === '$event' || expr.name === 'event' || expr.name === 'payload' || expr.name === 'value') {\n return ctx.payload;\n }\n if (expr.name in ctx.model) return ctx.model[expr.name];\n if (ctx.services != null && expr.name in ctx.services) return ctx.services[expr.name];\n return undefined;\n case 'member': {\n let obj = evalExpr(expr.object, ctx);\n // Support expressions like ref(\"Block:model\").title where ref(...) can return a signal/function.\n if (\n expr.object.kind === 'call' &&\n expr.object.callee.kind === 'identifier' &&\n expr.object.callee.name === 'ref' &&\n typeof obj === 'function'\n ) {\n obj = (obj as () => unknown)();\n }\n if (obj == null || typeof obj !== 'object') return undefined;\n return (obj as Record<string, unknown>)[expr.property];\n }\n case 'index': {\n let obj = evalExpr(expr.object, ctx);\n if (\n expr.object.kind === 'call' &&\n expr.object.callee.kind === 'identifier' &&\n expr.object.callee.name === 'ref' &&\n typeof obj === 'function'\n ) {\n obj = (obj as () => unknown)();\n }\n if (obj == null || (typeof obj !== 'object' && typeof obj !== 'function')) return undefined;\n const key = evalExpr(expr.index, ctx);\n if (typeof key !== 'string' && typeof key !== 'number') return undefined;\n return (obj as Record<string | number, unknown>)[key];\n }\n case 'call': {\n if (expr.callee.kind !== 'identifier' || expr.callee.name !== 'ref') {\n throw new Error('Only ref(...) calls are allowed');\n }\n if (expr.args.length < 1 || expr.args.length > 2) {\n throw new Error('ref(...) requires one or two arguments');\n }\n const arg = evalExpr(expr.args[0], ctx);\n if (typeof arg !== 'string') return undefined;\n const resolved = ctx.resolveRefValue(arg);\n const shouldInvoke =\n expr.args.length === 2\n ? evalExpr(expr.args[1], ctx) === true\n : false;\n if (shouldInvoke && typeof resolved === 'function') {\n return (resolved as () => unknown)();\n }\n return resolved;\n }\n case 'unary': {\n const v = evalExpr(expr.argument, ctx);\n if (expr.op === '!') return !v;\n if (expr.op === '+') return Number(v);\n if (expr.op === '-') return -Number(v);\n return undefined;\n }\n case 'binary': {\n const left = evalExpr(expr.left, ctx);\n if (expr.op === '&&') return left && evalExpr(expr.right, ctx);\n if (expr.op === '||') return left || evalExpr(expr.right, ctx);\n const right = evalExpr(expr.right, ctx);\n switch (expr.op) {\n case '+': return (left as unknown as any) + (right as unknown as any);\n case '-': return Number(left) - Number(right);\n case '*': return Number(left) * Number(right);\n case '/': return Number(left) / Number(right);\n case '%': return Number(left) % Number(right);\n case '<': return (left as number | string) < (right as number | string);\n case '>': return (left as number | string) > (right as number | string);\n case '<=': return (left as number | string) <= (right as number | string);\n case '>=': return (left as number | string) >= (right as number | string);\n case '==': return left == right;\n case '!=': return left != right;\n case '===': return left === right;\n case '!==': return left !== right;\n default: return undefined;\n }\n }\n case 'conditional':\n return evalExpr(expr.test, ctx) ? evalExpr(expr.consequent, ctx) : evalExpr(expr.alternate, ctx);\n }\n}\n\nexport function evaluateSafeExpression(\n expression: string,\n resolverContext: ResolverContext,\n payload: unknown,\n resolveRefValue: (ref: string, ctx: ResolverContext) => unknown\n): unknown {\n const ast = new Parser(tokenize(expression)).parse();\n\n return evalExpr(ast, {\n payload,\n model: (resolverContext.currentInstance?.model?.() ?? {}) as Record<string, unknown>,\n services: resolverContext.currentInstance?.services,\n resolveRefValue: (ref: string) => resolveRefValue(ref, resolverContext),\n });\n}\n","import { interpretFlow, looksLikeFlowTemplate, parseFlowTemplate } from './flow-template';\n\nexport { looksLikeFlowTemplate };\nimport type { ResolverContext } from './ref-resolver';\nimport { getRefValue, getValueByPath, resolveRefPath } from './ref-resolver';\nimport { evaluateSafeExpression } from './safe-expression-evaluator';\n\nconst MUSTACHE_MAX_SEGMENTS = 200;\n\nexport function resolveReferenceValue(ref: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(ref, ctx);\n if (resolved != null) return getRefValue(ref, ctx);\n return getValueByPath(ctx.currentInstance?.model?.() ?? {}, ref);\n}\n\n/**\n * Safe expression evaluation (same as output `{{ }}` / `@if (...)` when used with this module).\n * Falls back to `resolveReferenceValue` if parsing fails (treat whole string as a ref path).\n */\nexport function evaluateExpression(\n expression: string,\n ctx: ResolverContext,\n payload: unknown,\n): unknown {\n const trimmed = expression.trim();\n if (!trimmed) return undefined;\n try {\n return evaluateSafeExpression(trimmed, ctx, payload, resolveReferenceValue);\n } catch {\n return resolveReferenceValue(trimmed, ctx);\n }\n}\n\n/**\n * Resolves only `{{ … }}` segments via `evaluateExpression`.\n * Single full-string `{{ expr }}` preserves the evaluated type; mixed templates return a string.\n */\nexport function resolveMustacheInterpolatedString(\n value: string,\n ctx: ResolverContext,\n payload: unknown,\n): unknown {\n if (!value.includes('{{') || !value.includes('}}')) return value;\n\n const re = /\\{\\{([\\s\\S]*?)\\}\\}/g;\n const matches = [...value.matchAll(re)];\n if (matches.length === 0) return value;\n if (matches.length > MUSTACHE_MAX_SEGMENTS) {\n console.warn(\n `Template has more than ${MUSTACHE_MAX_SEGMENTS} mustache segments; truncating interpolation.`,\n );\n }\n const limited = matches.slice(0, MUSTACHE_MAX_SEGMENTS);\n\n if (\n limited.length === 1 &&\n limited[0][0].length === value.trim().length &&\n limited[0][0] === value.trim()\n ) {\n return evaluateExpression(limited[0][1], ctx, payload);\n }\n\n let out = '';\n let lastIndex = 0;\n for (const match of limited) {\n const start = match.index ?? 0;\n out += value.slice(lastIndex, start);\n const evaluated = evaluateExpression(match[1], ctx, payload);\n out += evaluated != null ? String(evaluated) : '';\n lastIndex = start + match[0].length;\n }\n out += value.slice(lastIndex);\n return out;\n}\n\nexport function mustacheSegmentToString(\n segment: string,\n ctx: ResolverContext,\n payload: unknown,\n): string {\n const v = resolveMustacheInterpolatedString(segment, ctx, payload);\n if (v == null) return '';\n if (typeof v === 'string') return v;\n return String(v);\n}\n\nexport interface ResolveTemplateStringOptions {\n /**\n * When true (default), `${…}` in flow output is HTML-escaped (block / innerHTML-friendly).\n * Set false for plain strings (e.g. output handler method params).\n */\n escapeFlowRefs?: boolean;\n}\n\n/**\n * Unified template resolution: flow (`@if`, `@for`, `${}`) plus `{{ }}` in flow text segments.\n * `@if` conditions use `evaluateExpression` (safe expressions + ref fallback).\n */\nexport function resolveTemplateString(\n value: string,\n ctx: ResolverContext,\n payload: unknown = undefined,\n options?: ResolveTemplateStringOptions,\n): unknown {\n const escapeFlowRefs = options?.escapeFlowRefs !== false;\n\n if (looksLikeFlowTemplate(value)) {\n return interpretFlow(parseFlowTemplate(value), ctx, {}, {\n escapeRefValues: escapeFlowRefs,\n resolveCondition: (expr) => evaluateExpression(expr, ctx, payload),\n interpolateText: (segment) => mustacheSegmentToString(segment, ctx, payload),\n });\n }\n return resolveMustacheInterpolatedString(value, ctx, payload);\n}\n","import type { OutputCallObject } from './block-description.schema';\nimport { isOutputCallObject } from './block-description.schema';\nimport type { ResolverContext } from './ref-resolver';\nimport { resolveRefPath } from './ref-resolver';\nimport { resolveTemplateString } from './template-interpolation';\n\nfunction getCallTarget(reference: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(reference, ctx);\n if (resolved == null) return undefined;\n const { target, path } = resolved;\n if (path.length === 0) return target;\n const parent = target as Record<string, unknown>;\n return parent?.[path[0]];\n}\n\nfunction resolveReferencePath(reference: string, ctx: ResolverContext, payload: unknown): string {\n const resolved = resolveTemplateString(reference, ctx, payload, { escapeFlowRefs: false });\n return typeof resolved === 'string' ? resolved : String(resolved ?? '');\n}\n\n/**\n * Split `Block:path.to.method` or `service.path.method` (current block) into ref path + method name.\n * Last dot-separated segment after `:` is the method; before that is the ref path.\n */\nexport function splitCallableRef(fullPath: string): { refPath: string; method: string } | null {\n const trimmed = fullPath.trim();\n if (!trimmed) return null;\n const colonIdx = trimmed.indexOf(':');\n if (colonIdx !== -1) {\n const prefix = trimmed.slice(0, colonIdx).trim();\n const rest = trimmed.slice(colonIdx + 1).trim();\n const parts = rest.split('.').filter(Boolean);\n if (parts.length < 2) return null;\n const method = parts[parts.length - 1]!;\n const parentRest = parts.slice(0, -1).join('.');\n return { refPath: `${prefix}:${parentRest}`, method };\n }\n const parts = trimmed.split('.').filter(Boolean);\n if (parts.length < 2) return null;\n const method = parts[parts.length - 1]!;\n const refPath = parts.slice(0, -1).join('.');\n return { refPath, method };\n}\n\nfunction getMethodOnTarget(\n target: unknown,\n methodName: string,\n): ((...args: unknown[]) => unknown) | null {\n if (target == null) return null;\n const m = (target as Record<string, unknown>)[methodName];\n return typeof m === 'function' ? (m as (...args: unknown[]) => unknown) : null;\n}\n\nfunction warnNotCallable(\n resolvedFullRef: string,\n refPath: string,\n method: string,\n callTarget: unknown,\n): void {\n const leafDesc =\n callTarget != null && typeof callTarget === 'object'\n ? typeof (callTarget as Record<string, unknown>)[method]\n : 'n/a';\n console.warn(\n `Output call \"${resolvedFullRef}\": \"${method}\" is not a callable function ` +\n `(ref path \"${refPath}\"); resolved leaf type: ${leafDesc}.`,\n );\n}\n\nfunction resolveOutputParamValue(value: unknown, ctx: ResolverContext, payload: unknown): unknown {\n if (typeof value === 'string') {\n return resolveTemplateString(value, ctx, payload, { escapeFlowRefs: false });\n }\n if (Array.isArray(value)) {\n return value.map((item) => resolveOutputParamValue(item, ctx, payload));\n }\n\n if (value != null && typeof value === 'object' && !('component' in value)) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [\n key,\n resolveOutputParamValue(item, ctx, payload),\n ]),\n );\n }\n\n return value;\n}\n\nfunction isTruthyOutputCondition(value: unknown): boolean {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (!normalized) return false;\n if (normalized === 'false' || normalized === '0' || normalized === 'no' || normalized === 'off') {\n return false;\n }\n return true;\n }\n return !!value;\n}\n\nfunction shouldRunWhen(when: unknown, ctx: ResolverContext, payload: unknown): boolean {\n if (when == null) return true;\n const resolved = resolveOutputParamValue(when, ctx, payload);\n return isTruthyOutputCondition(resolved);\n}\n\ntype CallableExtras = Pick<OutputCallObject, 'when' | 'params' | 'then' | 'onError'>;\n\nfunction buildOutputHandlerFromCall(\n refTemplate: string,\n extras: CallableExtras,\n ctx: ResolverContext,\n eventValue: unknown,\n): (value: unknown) => void {\n const def: OutputCallObject = { ref: refTemplate, ...extras };\n return (value: unknown) => {\n const payload = value ?? eventValue;\n if (!shouldRunWhen(def.when, ctx, payload)) {\n return;\n }\n const resolvedCallable = resolveReferencePath(refTemplate, ctx, payload);\n const split = splitCallableRef(resolvedCallable);\n if (split == null) {\n console.warn(\n `Invalid output callable ref \"${resolvedCallable}\" (expected e.g. Block:path.method or service.path.method)`,\n );\n return;\n }\n const { refPath, method } = split;\n const callTarget = getCallTarget(refPath, ctx);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn == null) {\n warnNotCallable(resolvedCallable, refPath, method, callTarget);\n return;\n }\n\n const params =\n def.params != null\n ? (Array.isArray(def.params) ? def.params : [def.params]).map((param) =>\n resolveOutputParamValue(param, ctx, payload),\n )\n : [payload];\n\n const result = fn.call(callTarget, ...params);\n if (result != null && typeof (result as Promise<unknown>).then === 'function') {\n (result as Promise<unknown>).then(\n () => runThenOrSuccess(def, ctx, payload),\n () => runOnError(def, ctx, payload),\n );\n } else {\n runThenOrSuccess(def, ctx, payload);\n }\n };\n}\n\nfunction resolveStepParams(\n p: unknown[] | Record<string, unknown> | undefined,\n ctx: ResolverContext,\n payload: unknown,\n): unknown[] {\n if (p == null) return [];\n const arr = Array.isArray(p) ? p : [p];\n return arr.map((item) => resolveOutputParamValue(item, ctx, payload));\n}\n\nfunction runThenOrSuccess(def: OutputCallObject, ctx: ResolverContext, payload: unknown): void {\n if (def.then?.length) {\n runThenChain(def.then, 0, ctx, def, payload, () => {});\n }\n}\n\nfunction runThenChain(\n steps: NonNullable<OutputCallObject['then']>,\n index: number,\n ctx: ResolverContext,\n parentDef: OutputCallObject,\n payload: unknown,\n onComplete: () => void,\n): void {\n if (index >= steps.length) {\n onComplete();\n return;\n }\n const step = steps[index];\n const runNextSibling = () => runThenChain(steps, index + 1, ctx, parentDef, payload, onComplete);\n\n const refTemplate = typeof step === 'string' ? step : step.ref;\n const when = typeof step === 'string' ? undefined : step.when;\n const stepParams = typeof step === 'string' ? undefined : step.params;\n const nestedThen = typeof step === 'string' ? undefined : step.then;\n\n if (!shouldRunWhen(when, ctx, payload)) {\n runNextSibling();\n return;\n }\n\n const resolvedCallable = resolveReferencePath(refTemplate, ctx, payload);\n const split = splitCallableRef(resolvedCallable);\n if (split == null) {\n console.warn(\n `then chain: invalid callable ref \"${resolvedCallable}\" (expected e.g. Block:path.method)`,\n );\n return;\n }\n const { refPath, method } = split;\n const callTarget = getCallTarget(refPath, ctx);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn == null) {\n warnNotCallable(resolvedCallable, refPath, method, callTarget);\n return;\n }\n const params = resolveStepParams(stepParams, ctx, payload);\n const result = fn.call(callTarget, ...params);\n const afterStep = () => {\n if (nestedThen?.length) {\n runThenChain(nestedThen, 0, ctx, parentDef, payload, runNextSibling);\n } else {\n runNextSibling();\n }\n };\n if (result != null && typeof (result as Promise<unknown>).then === 'function') {\n (result as Promise<unknown>).then(afterStep, () => runOnError(parentDef, ctx, payload));\n } else {\n afterStep();\n }\n}\n\nfunction runOnError(def: OutputCallObject, ctx: ResolverContext, payload: unknown): void {\n if (def.onError && shouldRunWhen(def.onError.when, ctx, payload)) {\n invokeRefMethod(\n ctx,\n def.onError.ref,\n payload,\n resolveStepParams(def.onError.params, ctx, payload),\n );\n }\n}\n\nfunction invokeRefMethod(\n ctx: ResolverContext,\n refTemplate: string,\n payload: unknown,\n params: unknown[],\n): void {\n const resolvedCallable = resolveReferencePath(refTemplate, ctx, payload);\n const split = splitCallableRef(resolvedCallable);\n if (split == null) {\n console.warn(`onError: invalid callable ref \"${resolvedCallable}\"`);\n return;\n }\n const { refPath, method } = split;\n const callTarget = getCallTarget(refPath, ctx);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn == null) {\n warnNotCallable(resolvedCallable, refPath, method, callTarget);\n return;\n }\n fn.call(callTarget, ...params);\n}\n\nexport function createOutputHandler(\n outputValue: unknown,\n _outputKey: string,\n ctx: ResolverContext,\n): (value: unknown) => void {\n if (typeof outputValue === 'string') {\n return buildOutputHandlerFromCall(outputValue, {}, ctx, undefined);\n }\n if (isOutputCallObject(outputValue)) {\n return buildOutputHandlerFromCall(outputValue.ref, outputValue, ctx, undefined);\n }\n return () => {};\n}\n","import { computed, isWritableSignal, linkedSignal, signal, WritableSignal } from '@angular/core';\nimport { BlockDescription } from './block-description.schema';\nimport { createOutputHandler } from './output-reference';\nimport { classifyTwoWayString, parseTwoWayRef } from './ref-expressions';\nimport { getRefSignal, ResolverContext } from './ref-resolver';\nimport { looksLikeFlowTemplate, resolveTemplateString } from './template-interpolation';\n\nexport function getBlockInputsAndOutputs(componentOrDirectives: any[]): {\n inputs: Set<string>;\n outputs: Set<string>;\n twoWay: Set<string>;\n} {\n const inputs = new Set<string>();\n const outputs = new Set<string>();\n const twoWay = new Set<string>();\n\n for (const componentOrDirective of componentOrDirectives) {\n const metadata = getDirectiveMetadata(componentOrDirective);\n if (!metadata) continue;\n metadata.inputs.forEach((input) => inputs.add(input));\n metadata.outputs.forEach((output) => outputs.add(output));\n metadata.twoWay.forEach((twoWayKey) => twoWay.add(twoWayKey));\n }\n return { inputs, outputs, twoWay };\n}\n\nfunction getDirectiveMetadata(type: any) {\n // Directives have ɵdir, Components have ɵcmp\n const def = type.ɵdir || type.ɵcmp;\n\n if (!def) return null;\n\n // def.inputs and def.outputs are objects where:\n // Key = Public Template Name (alias)\n // Value = Internal Class Property Name\n const publicInputs = Object.keys(def.inputs || {});\n const publicOutputs = Object.keys(def.outputs || {});\n\n const twoWay = publicInputs.filter(\n (key) => publicOutputs.includes(`${key}Change`) && def.inputs[key][1],\n );\n\n return {\n inputs: publicInputs.filter((key) => !twoWay.includes(key)),\n outputs: publicOutputs.filter((key) => !twoWay.includes(key)),\n twoWay,\n isComponent: !!type.ɵcmp,\n };\n}\n\nexport function resolveBlockInputsAndOutputs(\n description: BlockDescription,\n inputKeys: Set<string>,\n outputKeys: Set<string>,\n twoWayKeys: Set<string>,\n ctx: ResolverContext,\n) {\n const resolvedInputs: Record<string, () => unknown> = {};\n const resolvedOutputs: Record<string, (value: unknown) => void> = {};\n const resolvedTwoWay: Record<string, WritableSignal<unknown>> = {};\n\n const inputs = description.inputs ?? {};\n const outputs = description.outputs ?? {};\n\n if (inputKeys.has('registry')) {\n resolvedInputs['registry'] = () => ctx.registry;\n }\n\n for (const [key, value] of Object.entries(inputs)) {\n if (!inputKeys.has(key) && !twoWayKeys.has(key)) {\n console.warn(\n `Block input \"${key}\" is not defined on the component or any host directive; skipping.`,\n );\n continue;\n }\n if (typeof value === 'string') {\n const twoWayKind = classifyTwoWayString(value);\n if (twoWayKind === 'invalid-mix') {\n throw new Error(\n `Invalid input \"${String(key)}\": two-way ref \"[( )]\" cannot be mixed with literals or \"{{ }}\". ` +\n `Use exactly \"[(refPath)]\" for two-way or \"{{ refPath }}\" for read-only.`,\n );\n }\n\n if (twoWayKind === 'two-way') {\n const refPath = parseTwoWayRef(value);\n if (refPath) {\n const valueSignal = getRefSignal(refPath, ctx);\n\n if (twoWayKeys.has(key))\n if (!isWritableSignal(valueSignal)) {\n console.warn(\n `Input \"${key}\" of ref \"${refPath}\" is a two-way ref but is not a writable signal. Path might not be resolved correctly.`,\n );\n resolvedTwoWay[key] = linkedSignal(() => valueSignal?.());\n } else {\n resolvedTwoWay[key] = valueSignal;\n }\n if (inputKeys.has(key))\n resolvedInputs[key] = computed(() => {\n return valueSignal?.();\n });\n }\n continue;\n }\n\n const str = value as string;\n const hasMustache =\n typeof value === 'string' &&\n str.indexOf('{{') !== -1 &&\n str.indexOf('}}', str.indexOf('{{')) !== -1;\n const hasFlow = typeof value === 'string' && looksLikeFlowTemplate(str);\n if (hasMustache || hasFlow) {\n resolvedInputs[key] = computed(() =>\n resolveTemplateString(str, ctx, undefined, { escapeFlowRefs: true }),\n );\n continue;\n }\n }\n\n if (Array.isArray(value)) {\n resolvedInputs[key] = computed(() =>\n value.map((item) => {\n if (typeof item === 'string') {\n return resolveTemplateString(item, ctx, undefined, { escapeFlowRefs: true });\n }\n\n return item;\n }),\n );\n\n continue;\n }\n\n if (inputKeys.has(key)) resolvedInputs[key] = () => value;\n if (twoWayKeys.has(key)) resolvedTwoWay[key] = signal(value);\n }\n\n for (const [key, value] of Object.entries(outputs)) {\n if (!outputKeys.has(key)) {\n console.warn(\n `Block output \"${key}\" is not defined on the component or any host directive; skipping.`,\n );\n continue;\n }\n\n resolvedOutputs[key] = createOutputHandler(value, key, ctx);\n }\n\n return { resolvedInputs, resolvedOutputs, resolvedTwoWay };\n}\n","import {\n ComponentRef,\n Injectable,\n inject,\n Injector,\n Type,\n ViewContainerRef,\n WritableSignal,\n inputBinding,\n isSignal,\n linkedSignal,\n outputBinding,\n twoWayBinding,\n type Signal,\n} from '@angular/core';\nimport { ComponentRegistry } from '../registry/component.registry';\nimport { DirectiveRegistry } from '../registry/directive.registry';\nimport { ServiceRegistry } from '../registry/service.registry';\nimport { getBlockInputsAndOutputs, resolveBlockInputsAndOutputs } from './block-bindings';\nimport {\n BlockDescription,\n isBlockReference,\n normalizeDirectives,\n normalizeServices,\n resolveBlockReference,\n safeParseBlockDescription,\n type BlockInput,\n type BlockReference,\n type ServiceEntry,\n} from './block-description.schema';\nimport type { BlockDefinitionOrLoader } from '../registry/block-definitions.registry';\nimport {\n BlockRegistryImpl,\n CurrentInstance,\n type BlockInstanceHandle,\n type BlockRegistry,\n} from './block-registry';\nimport { ResolverContext, getRefSignal } from './ref-resolver';\nimport { BlockRegistryService } from '../services/block-registry.service';\nimport { resolveTemplateString } from './template-interpolation';\n\nexport interface BlockLoadOptions {\n registry?: BlockRegistry;\n /** Map of block id → full description or loader; used when description is a block reference. */\n blockDefinitions?: Record<string, BlockDefinitionOrLoader>;\n}\n\nexport const INTERPOLATE_MAX_PLACEHOLDERS = 200;\n\nfunction createInputBindingsWithWarnings(\n ownerName: string,\n inputKeys: Set<string>,\n twoWayKeys: Set<string>,\n outputKeys: Set<string>,\n resolvedInputs: Record<string, (() => unknown) | undefined>,\n resolvedTwoWay: Record<string, unknown>,\n resolvedOutputs: Record<string, (value: unknown) => void>,\n) {\n const inputBindingsArray = Array.from(inputKeys)\n .filter((key) => {\n if (resolvedInputs[key] == null) {\n return false;\n }\n return true;\n })\n .map((key) => inputBinding(key, resolvedInputs[key]!));\n\n const twoWayBindingsArray = Array.from(twoWayKeys)\n .filter((key) => {\n if (resolvedTwoWay[key] == null && resolvedInputs[key] == null) {\n return false;\n }\n return true;\n })\n // resolvedTwoWay is guaranteed non-null after the filter.\n .map((key) =>\n twoWayBinding(\n key,\n (resolvedTwoWay[key] ??\n linkedSignal(() => resolvedInputs[key]?.())) as WritableSignal<unknown>,\n ),\n );\n\n const outputBindingsArray = Array.from(outputKeys)\n .filter((key) => {\n if (resolvedOutputs[key] == null) {\n return false;\n }\n return true;\n })\n .map((key) => outputBinding(key, resolvedOutputs[key]));\n\n return [...inputBindingsArray, ...twoWayBindingsArray, ...outputBindingsArray];\n}\n\n/** JSON-like objects only — skip class instances, Date, Map, etc. */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== 'object') return false;\n if (Array.isArray(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BlockLoaderService {\n private readonly componentRegistry = ComponentRegistry.getInstance();\n private readonly directiveRegistry = DirectiveRegistry.getInstance();\n private readonly serviceRegistry = ServiceRegistry.getInstance();\n private readonly blockRegistryService = inject(BlockRegistryService);\n\n async load(\n description: BlockInput | BlockReference,\n viewContainerRef: ViewContainerRef,\n model: Signal<unknown | undefined>,\n options?: BlockLoadOptions,\n ): Promise<ComponentRef<unknown>> {\n let resolved: unknown = description;\n if (isBlockReference(description)) {\n resolved = await resolveBlockReference(description, options?.blockDefinitions);\n }\n const parsed = safeParseBlockDescription(resolved);\n\n if (!parsed.success) {\n throw new Error(`Invalid block description: ${parsed.error.message}`);\n }\n const desc = parsed.data;\n const registry = options?.registry ?? new BlockRegistryImpl();\n if (desc.id != null && desc.id !== '' && registry.hasLocal(desc.id)) {\n throw new Error(`Block id \"${desc.id}\" is already registered.`);\n }\n\n const componentType = await this.componentRegistry.get(desc.component);\n if (!componentType) {\n throw new Error(`Component \"${desc.component}\" is not registered.`);\n }\n\n //... Generate and new resolver context\n const blockInstance: CurrentInstance = { services: {} };\n const ctx: ResolverContext = {\n registry,\n currentBlockId: desc.id ?? undefined,\n currentInstance: blockInstance,\n getRegistryForScope: (scopeKey: string) => this.blockRegistryService.getRegistryForScope(scopeKey),\n };\n\n //... Resolve model for the block\n this.resolveContextModel(ctx, model);\n const resolvedModel = blockInstance.model;\n\n const handle: BlockInstanceHandle = { instance: blockInstance };\n\n //... Register the block instance with the registry if it has an id\n if (desc.id != null && desc.id !== '') registry.register(desc.id, handle);\n\n //... Resolve services for the block\n\n await this.resolveServices(viewContainerRef, blockInstance, desc, resolvedModel, model);\n\n const directiveIds = normalizeDirectives(desc.directives);\n const directiveTypes = await this.getDirectiveTypes(directiveIds);\n const nonNullDirectiveTypes = directiveTypes.filter((d): d is Type<unknown> => d != null);\n\n // get inputs and outputs from the component and host directives\n const componentMetadata = getBlockInputsAndOutputs([componentType]);\n const directivesMetadata = nonNullDirectiveTypes.map((d) => ({\n type: d,\n metadata: getBlockInputsAndOutputs([d]),\n }));\n const inputKeys = new Set([\n ...componentMetadata.inputs,\n ...directivesMetadata.map((d) => Array.from(d.metadata.inputs)).flat(),\n ]);\n const outputKeys = new Set([\n ...componentMetadata.outputs,\n ...directivesMetadata.map((d) => Array.from(d.metadata.outputs)).flat(),\n ]);\n const twoWayKeys = new Set([\n ...componentMetadata.twoWay,\n ...directivesMetadata.map((d) => Array.from(d.metadata.twoWay)).flat(),\n ]);\n\n // Initial bindings for component; directive inputs are applied separately.\n const initialResolved = resolveBlockInputsAndOutputs(\n desc,\n inputKeys,\n outputKeys,\n twoWayKeys,\n ctx,\n );\n\n const componentBindings = [\n // Component inputs / two-way bindings\n ...createInputBindingsWithWarnings(\n 'component',\n componentMetadata.inputs,\n componentMetadata.twoWay,\n componentMetadata.outputs,\n initialResolved.resolvedInputs,\n initialResolved.resolvedTwoWay,\n initialResolved.resolvedOutputs,\n ),\n ];\n\n const directiveAndBindings = directivesMetadata.map((d) => ({\n type: d.type,\n bindings: [\n ...createInputBindingsWithWarnings(\n `directive \"${d.type.name}\"`,\n d.metadata.inputs,\n d.metadata.twoWay,\n d.metadata.outputs,\n initialResolved.resolvedInputs,\n initialResolved.resolvedTwoWay,\n initialResolved.resolvedOutputs,\n ),\n ],\n }));\n\n const componentRef = viewContainerRef.createComponent(componentType as Type<unknown>, {\n directives: directiveAndBindings,\n bindings: componentBindings,\n });\n\n return componentRef;\n }\n\n private async resolveServices(\n viewContainerRef: ViewContainerRef,\n blockInstance: CurrentInstance,\n desc: BlockDescription,\n resolvedModel: Signal<unknown | undefined> | undefined,\n model: Signal<unknown | undefined>,\n ): Promise<void> {\n // services are stored under `blockInstance.services`, so `model` no longer collides structurally,\n // but `model` is a reserved ref keyword (`BlockId:model...`). Warn to avoid confusion.\n const reservedAliases = new Set(['services', 'model']);\n const services = normalizeServices(desc.services);\n const selfServices = services.filter(\n (s): s is { id: string; scope: 'self'; alias?: string } =>\n typeof s === 'object' && (s as { scope?: string }).scope === 'self',\n );\n\n /** Root = string id or object with scope undefined/not 'self' (e.g. [{ id: 'State' }]). */\n const rootEntries = services\n .filter(\n (s): s is Exclude<ServiceEntry, { scope: 'self' }> =>\n typeof s === 'string' || (typeof s === 'object' && s.scope !== 'self'),\n )\n .map((s): { id: string; alias: string } =>\n typeof s === 'string' ? { id: s, alias: s } : { id: s.id, alias: s.alias ?? s.id },\n );\n\n const rootServiceTypes = await this.getServiceTypes(rootEntries);\n\n for (let i = 0; i < rootEntries.length; i++) {\n const alias = rootEntries[i].alias;\n const serviceType = rootServiceTypes[i];\n if (serviceType) {\n const svc = viewContainerRef.injector.get(serviceType as Type<unknown>, null);\n\n if (reservedAliases.has(alias)) {\n console.warn(\n `Service alias \"${alias}\" is reserved and conflicts with ref keywords; skipping assignment.`,\n );\n } else if (svc != null) {\n blockInstance.services[alias] = svc;\n }\n // if the service is not found, add it to the selfServices array\n else selfServices.push({ id: alias, scope: 'self' });\n }\n }\n\n const selfServiceTypes = await this.getServiceTypes(selfServices);\n\n const selfInjector = this.buildChildInjectorFromTypes(\n selfServiceTypes,\n viewContainerRef.injector,\n );\n\n for (let i = 0; i < selfServices.length; i++) {\n const alias = selfServices[i].alias ?? selfServices[i].id;\n const serviceType = selfServiceTypes[i];\n\n if (serviceType) {\n const svc = selfInjector.get(serviceType as Type<unknown>, null, {\n self: true,\n });\n if (svc != null) {\n if (reservedAliases.has(alias)) {\n console.warn(\n `Service alias \"${alias}\" is reserved and conflicts with ref keywords; skipping assignment.`,\n );\n } else {\n blockInstance.services[alias] = svc;\n }\n if (\n model() != null &&\n resolvedModel != null &&\n 'model' in (svc as Record<string, unknown>) &&\n isSignal((svc as { model?: unknown }).model)\n ) {\n (svc as { model: WritableSignal<any | undefined> }).model.set(resolvedModel);\n (svc as { setModel?: () => void }).setModel?.();\n }\n }\n }\n }\n }\n private buildChildInjectorFromTypes(\n serviceTypes: (Type<unknown> | undefined)[],\n parentInjector: Injector,\n ): Injector {\n const providers = serviceTypes\n .filter((t): t is Type<unknown> => t != null)\n .map((t) => ({ provide: t, useClass: t }));\n return providers.length === 0\n ? parentInjector\n : Injector.create({ providers, parent: parentInjector });\n }\n\n /** Resolve all service types in parallel (single batch for load). */\n private async getServiceTypes(entries: { id: string }[]): Promise<(Type<unknown> | undefined)[]> {\n if (entries.length === 0) return [];\n return Promise.all(entries.map((e) => this.serviceRegistry.getType(e.id)));\n }\n\n /** Resolve all directive types by id in parallel. */\n private async getDirectiveTypes(ids: string[]): Promise<(Type<unknown> | undefined)[]> {\n if (ids.length === 0) return [];\n return Promise.all(ids.map((id) => this.directiveRegistry.get(id)));\n }\n\n /** Resolve model from desc (interpolate ref if string) and set on blockInstance. */\n private resolveContextModel(ctx: ResolverContext, blockModel: Signal<unknown | undefined>): void {\n const directiveModel = blockModel();\n const blockInstance = ctx.currentInstance;\n const templateCtx = this.withModelOverrideContext(ctx, blockModel);\n let blockInstanceModel: Signal<unknown | undefined> | undefined;\n if (typeof directiveModel === 'string') {\n const interpolated = resolveTemplateString(directiveModel, templateCtx);\n if (typeof interpolated !== 'string') {\n blockInstanceModel = linkedSignal(() => resolveTemplateString(directiveModel, templateCtx));\n } else {\n const refPath = interpolated.trim();\n if (refPath.length > 0) {\n const refSignal = getRefSignal(refPath, ctx);\n if (refSignal != null) {\n blockInstanceModel = refSignal;\n } else {\n blockInstanceModel = linkedSignal(() =>\n resolveTemplateString(directiveModel, templateCtx),\n );\n }\n }\n }\n } else {\n const hasTemplates = this.valueContainsTemplate(directiveModel);\n blockInstanceModel = hasTemplates\n ? linkedSignal(() =>\n this.resolveNestedModelTemplates(\n blockModel(),\n this.withModelOverrideContext(ctx, blockModel),\n ),\n )\n : blockModel;\n }\n\n if (blockInstanceModel != null) {\n if (!blockInstance) {\n throw new Error(\n 'Block instance not found in context. Make sure to pass the block registry to the block loader.',\n );\n }\n blockInstance.model = blockInstanceModel;\n }\n }\n\n private valueContainsTemplate(value: unknown, visited: WeakSet<object> = new WeakSet()): boolean {\n if (typeof value === 'string') {\n return value.includes('{{') && value.includes('}}');\n }\n if (Array.isArray(value)) {\n return value.some((item) => this.valueContainsTemplate(item, visited));\n }\n if (value != null && typeof value === 'object') {\n if (!isPlainObject(value)) return false;\n if (visited.has(value)) return false;\n visited.add(value);\n return Object.values(value).some((item) => this.valueContainsTemplate(item, visited));\n }\n return false;\n }\n\n private resolveNestedModelTemplates(\n value: unknown,\n ctx: ResolverContext,\n visited: WeakSet<object> = new WeakSet(),\n ): unknown {\n if (typeof value === 'string') {\n return resolveTemplateString(value, ctx);\n }\n if (Array.isArray(value)) {\n return value.map((item) => this.resolveNestedModelTemplates(item, ctx, visited));\n }\n if (value != null && typeof value === 'object') {\n if (!isPlainObject(value)) return value;\n if (visited.has(value)) return value;\n visited.add(value);\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n this.resolveNestedModelTemplates(item, ctx, visited),\n ]),\n );\n }\n return value;\n }\n\n private withModelOverrideContext(\n ctx: ResolverContext,\n model: Signal<unknown | undefined>,\n ): ResolverContext {\n if (ctx.currentInstance == null) return ctx;\n return {\n ...ctx,\n currentInstance: {\n ...ctx.currentInstance,\n model,\n },\n };\n }\n}\n","import {\n Directive,\n input,\n effect,\n ViewContainerRef,\n inject,\n DestroyRef,\n type ComponentRef,\n} from '@angular/core';\nimport { BlockLoaderService } from './block-loader.service';\nimport type { BlockRegistry } from './block-registry';\nimport type { BlockDefinitionOrLoader } from '../registry/block-definitions.registry';\nimport type { BlockDescription, BlockInput } from './block-description.schema';\nimport {\n safeParseBlockDescription,\n normalizeServices,\n isBlockReference,\n resolveBlockReference,\n type BlockReference,\n} from './block-description.schema';\n\n/** Compact key for services to avoid JSON.stringify of large config in effect. */\nfunction getServicesKey(services: BlockDescription['services']): string {\n const arr = normalizeServices(services);\n if (arr.length === 0) return '';\n return arr\n .map((s) =>\n typeof s === 'string'\n ? s\n : `${(s as { id: string }).id}:${(s as { scope?: string }).scope ?? ''}`,\n )\n .join(',');\n}\n\nfunction safeJsonKey(value: unknown): string {\n try {\n return JSON.stringify(value) ?? 'null';\n } catch {\n return String(value);\n }\n}\n\n@Directive({\n selector: '[block]',\n standalone: true,\n})\nexport class BlockDirective {\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly loader = inject(BlockLoaderService);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Full description, or { id } / { blockId, blockDefinition? } to reuse/override from blockDefinitions. */\n readonly description = input<BlockInput | BlockReference | null>(null);\n /** Registry for block instances by id; pass from root so nested blocks share it. */\n readonly blockRegistry = input<BlockRegistry | null>(null);\n /** Map id → full description or loader; used when description is a block reference (id/blockId). */\n readonly blockDefinitions = input<Record<string, BlockDefinitionOrLoader> | null>(null);\n /** Model for the block. */\n readonly model = input<Record<string, unknown> | string | undefined>(undefined);\n /**\n * Forces a reload when this value changes, even if component/services are the same.\n * Useful for \"same component, different inputs\" scenarios like tabs/switch blocks.\n */\n readonly reloadKey = input<unknown>(null);\n\n private loadResult: ComponentRef<unknown> | null = null;\n private lastRegistry: BlockRegistry | null = null;\n private lastId: string | null = null;\n private loadedComponent: string | null = null;\n private loadedServicesKey: string | null = null;\n private loadedReloadKey: unknown = null;\n private loadedDescKey: string | null = null;\n private loadGeneration = 0;\n /** Invalidates in-flight block-reference resolution when the effect re-runs. */\n private effectRunId = 0;\n /** Avoid re-parsing when the same description reference is passed (e.g. stable signal). */\n private lastDescRef: unknown = null;\n private lastParsedData: BlockDescription | null = null;\n\n constructor() {\n effect(() => {\n const desc = this.description();\n const inputDefs = this.blockDefinitions();\n const reloadKey = this.reloadKey();\n const runId = ++this.effectRunId;\n\n if (desc == null) {\n this.lastDescRef = null;\n this.lastParsedData = null;\n this.clear();\n return;\n }\n\n const runAfterResolved = (resolved: Record<string, unknown>) => {\n if (runId !== this.effectRunId) {\n return;\n }\n\n let data: BlockDescription;\n if (resolved === this.lastDescRef && this.lastParsedData != null) {\n data = this.lastParsedData;\n } else {\n const parsed = safeParseBlockDescription(resolved);\n if (!parsed.success) {\n return;\n }\n this.lastDescRef = resolved;\n this.lastParsedData = parsed.data;\n data = parsed.data;\n }\n const servicesKey = getServicesKey(data.services);\n const descKey = safeJsonKey(resolved);\n const effectiveReloadKey = reloadKey ?? descKey;\n\n // Only clear when the logical description changed (component or services). Avoids\n // clear+reload when the parent passes a new reference with the same content (e.g. BlockFor).\n const mustReload =\n this.loadResult == null ||\n this.loadedComponent !== data.component ||\n this.loadedServicesKey !== servicesKey ||\n this.loadedReloadKey !== effectiveReloadKey ||\n this.loadedDescKey !== descKey;\n if (!mustReload) {\n // Description is logically unchanged (same component + services); no work needed.\n return;\n }\n\n this.clear();\n const registry = this.blockRegistry() ?? undefined;\n this.lastRegistry = registry ?? null;\n this.lastId = data.id ?? null;\n\n const generation = ++this.loadGeneration;\n this.loader\n .load(resolved, this.viewContainerRef, this.model, {\n registry,\n blockDefinitions: inputDefs ?? undefined,\n })\n .then((result) => {\n if (generation !== this.loadGeneration) return;\n this.loadResult = result;\n this.loadedComponent = data.component;\n this.loadedServicesKey = servicesKey;\n this.loadedReloadKey = effectiveReloadKey;\n this.loadedDescKey = descKey;\n })\n .catch((err: unknown) => {\n if (generation !== this.loadGeneration) return;\n console.error('Block load failed:', err);\n });\n };\n\n if (isBlockReference(desc)) {\n void resolveBlockReference(desc, inputDefs ?? undefined)\n .then((resolved) => {\n runAfterResolved(resolved);\n })\n .catch((err: unknown) => {\n if (runId !== this.effectRunId) return;\n console.error('Block reference resolution failed:', err);\n });\n return;\n }\n\n runAfterResolved(desc as unknown as Record<string, unknown>);\n });\n\n this.destroyRef.onDestroy(() => this.clear());\n }\n\n private clear(): void {\n this.loadGeneration++;\n this.lastDescRef = null;\n this.lastParsedData = null;\n if (this.lastId != null) {\n this.lastRegistry?.unregister(this.lastId);\n this.lastId = null;\n }\n if (this.loadResult) {\n this.viewContainerRef.clear();\n this.loadResult = null;\n this.loadedComponent = null;\n this.loadedServicesKey = null;\n this.loadedReloadKey = null;\n this.loadedDescKey = null;\n }\n }\n}\n","/*\n * Public API Surface of blocks-studio\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}