ngx-blocks-studio 0.0.3 → 0.0.4

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.

Potentially problematic release.


This version of ngx-blocks-studio might be problematic. Click here for more details.

@@ -1144,22 +1144,36 @@ class BlockLoaderService {
1144
1144
  }
1145
1145
  const services = normalizeServices(desc.services);
1146
1146
  const selfServices = services.filter((s) => typeof s === 'object' && s.scope === 'self');
1147
- const serviceTypes = await this.getServiceTypes(selfServices);
1148
- const childInjector = this.buildChildInjectorFromTypes(serviceTypes);
1147
+ const rootEntries = services
1148
+ .filter((s) => typeof s === 'string' || s.scope !== 'self')
1149
+ .map((s) => typeof s === 'string'
1150
+ ? { id: s, alias: s }
1151
+ : { id: s.id, alias: s.alias ?? s.id });
1152
+ const selfServiceTypes = await this.getServiceTypes(selfServices);
1153
+ const rootServiceTypes = await this.getServiceTypes(rootEntries);
1154
+ const childInjector = this.buildChildInjectorFromTypes(selfServiceTypes);
1149
1155
  const componentRef = viewContainerRef.createComponent(componentType, {
1150
1156
  injector: childInjector,
1151
1157
  });
1152
1158
  const blockInstance = {};
1153
1159
  for (let i = 0; i < selfServices.length; i++) {
1154
- const id = selfServices[i].id;
1155
- const alias = selfServices[i].alias ?? id;
1156
- const serviceType = serviceTypes[i];
1160
+ const alias = selfServices[i].alias ?? selfServices[i].id;
1161
+ const serviceType = selfServiceTypes[i];
1157
1162
  if (serviceType) {
1158
1163
  const svc = componentRef.injector.get(serviceType);
1159
1164
  if (svc != null)
1160
1165
  blockInstance[alias] = svc;
1161
1166
  }
1162
1167
  }
1168
+ for (let i = 0; i < rootEntries.length; i++) {
1169
+ const alias = rootEntries[i].alias;
1170
+ const serviceType = rootServiceTypes[i];
1171
+ if (serviceType) {
1172
+ const svc = this.injector.get(serviceType);
1173
+ if (svc != null)
1174
+ blockInstance[alias] = svc;
1175
+ }
1176
+ }
1163
1177
  const ctx = {
1164
1178
  registry,
1165
1179
  currentBlockId: desc.id ?? undefined,
@@ -1195,10 +1209,10 @@ class BlockLoaderService {
1195
1209
  return { componentRef, destroy: doDestroy, updateInputs };
1196
1210
  }
1197
1211
  /** Resolve all service types in parallel (single batch for load). */
1198
- async getServiceTypes(selfServices) {
1199
- if (selfServices.length === 0)
1212
+ async getServiceTypes(entries) {
1213
+ if (entries.length === 0)
1200
1214
  return [];
1201
- return Promise.all(selfServices.map((e) => this.serviceRegistry.getType(e.id)));
1215
+ return Promise.all(entries.map((e) => this.serviceRegistry.getType(e.id)));
1202
1216
  }
1203
1217
  buildChildInjectorFromTypes(serviceTypes) {
1204
1218
  const providers = serviceTypes
@@ -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/component.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-definitions.registry.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-description.schema.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-registry.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/output-reference.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, or guard.\n */\nexport type RegistryEntryType = 'component' | 'service' | 'guard';\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}\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, or guard).\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 };\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 { 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 { 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 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","/**\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 */\nexport class BlockDefinitionsRegistry {\n private static instance: BlockDefinitionsRegistry;\n private readonly definitions = new Map<string, Record<string, unknown>>();\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 /** Register a block template by id. Can be called before the block is needed. */\n register(id: string, definition: Record<string, unknown>): void {\n this.definitions.set(id, definition);\n }\n\n /** Get one definition by id. */\n get(id: string): Record<string, unknown> | undefined {\n return this.definitions.get(id);\n }\n\n /** Get all registered definitions (id → definition). Used to merge with per-call definitions. */\n getAll(): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n this.definitions.forEach((def, id) => {\n out[id] = def;\n });\n return out;\n }\n\n unregister(id: string): boolean {\n return this.definitions.delete(id);\n }\n}\n","import { z } from 'zod';\nimport { BlockDefinitionsRegistry } from './block-definitions.registry';\n\n/**\n * Service entry: root-scoped (string id) or self-scoped ({ id, scope: \"self\" }).\n */\nconst ServiceEntrySchema = z.union([\n z.string().min(1),\n z.object({\n id: z.string().min(1),\n scope: z.literal('self'),\n alias: z.string().min(1).optional(),\n }),\n]);\n\n/**\n * Output handler: empty (use directive-provided handler) or reference-based (call method on ref).\n */\nconst OutputReferenceSchema = z.object({\n type: z.literal('reference'),\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n then: z\n .array(\n z.object({\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n }),\n )\n .optional(),\n onSuccess: z\n .object({\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n })\n .optional(),\n onError: z\n .object({\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n })\n .optional(),\n});\n\nconst OutputValueSchema = z.union([z.record(z.string(), z.unknown()), OutputReferenceSchema]);\n\n/**\n * Block description: JSON-serializable descriptor for dynamic block loading.\n * Refs in inputs use instance namespace: instance.FormState.firstName or UserForm.instance.FormState.firstName.\n */\nexport const BlockDescriptionSchema = z.object({\n component: z.string().min(1),\n id: z.string().min(1).optional(),\n services: z\n .union([ServiceEntrySchema, z.array(ServiceEntrySchema)])\n .optional()\n .default([]),\n inputs: z.record(z.string(), z.unknown()).optional(),\n outputs: z.record(z.string(), OutputValueSchema).optional(),\n});\n\nexport type BlockDescription = z.infer<typeof BlockDescriptionSchema>;\nexport type BlockInput = z.input<typeof BlockDescriptionSchema>;\nexport type ServiceEntry = z.infer<typeof ServiceEntrySchema>;\nexport type OutputReference = z.infer<typeof OutputReferenceSchema>;\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\nexport function safeParseBlockDescription(\n data: unknown,\n): ReturnType<typeof BlockDescriptionSchema.safeParse> {\n return BlockDescriptionSchema.safeParse(data);\n}\n\nexport function isOutputReference(value: unknown): value is OutputReference {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as OutputReference).type === 'reference' &&\n typeof (value as OutputReference).reference === 'string' &&\n typeof (value as OutputReference).method === 'string'\n );\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 blockDefinition?: Record<string, unknown>;\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 */\nexport function resolveBlockReference(\n ref: BlockReference,\n blockDefinitions: Record<string, unknown> | null | undefined,\n): 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: unknown;\n if (blockDefinitions && Object.prototype.hasOwnProperty.call(blockDefinitions, blockId)) {\n base = blockDefinitions[blockId];\n } else {\n base = registry.get(blockId);\n }\n\n if (base == null || typeof base !== 'object')\n throw new Error(`Block \"${blockId}\" has no definition.`);\n\n const baseObj = { ...base, id };\n\n const overrides = ref.blockDefinition;\n if (overrides == null || typeof overrides !== 'object' || Object.keys(overrides).length === 0)\n return { ...baseObj };\n return deepMergeBlockDefinition(baseObj, overrides);\n}\n","import type { Signal } from '@angular/core';\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: Record<string, unknown>;\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 has(id: string): boolean;\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","/**\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 blockId?: string;\n instancePath: string;\n pathParts: string[];\n}\n\nconst PARSE_REF_PATH_CACHE_MAX = 64;\nconst parseRefPathCache = new Map<string, ParsedRefPath>();\n\nfunction toPathParts(instancePath: string): string[] {\n return instancePath.split('.').filter(Boolean);\n}\n\nfunction parseRefPathUncached(refPath: string): ParsedRefPath {\n const trimmed = refPath.trim();\n const parts = trimmed.split('.');\n if (parts.length >= 2 && parts[0] === 'instance') {\n return { instancePath: trimmed, pathParts: toPathParts(trimmed) };\n }\n if (parts.length >= 3 && parts[1] === 'instance') {\n const instancePath = parts.slice(1).join('.');\n return { blockId: parts[0], instancePath, pathParts: toPathParts(instancePath) };\n }\n return { instancePath: trimmed, pathParts: toPathParts(trimmed) };\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 (!s.includes('[(') && !s.includes(')]')) return 'none';\n return TWOWAY_REF_RE.test(s) ? 'two-way' : 'invalid-mix';\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, type Signal } from '@angular/core';\nimport type { BlockRegistry } 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?: Record<string, unknown>;\n}\n\n/**\n * Resolve a ref path to the target object and path.\n * Path format: \"instance.FormState.firstName\" (context) or \"UserForm.instance.FormState.firstName\" (registry).\n */\nexport function resolveRefPath(\n refPath: string,\n ctx: ResolverContext\n): { target: unknown; path: string[] } | null {\n const { blockId, pathParts } = parseRefPath(refPath);\n if (pathParts[0] !== 'instance' || pathParts.length < 2) {\n return null;\n }\n const rest = pathParts.slice(2);\n const serviceOrProp = pathParts[1];\n\n let instance: Record<string, unknown> | undefined;\n if (blockId != null) {\n // Prefer current block's instance when ref points to this block (e.g. root resolving nested refs to itself)\n if (blockId === ctx.currentBlockId && ctx.currentInstance != null) {\n instance = ctx.currentInstance;\n } else {\n const handle = ctx.registry.get(blockId);\n instance = handle?.instance as Record<string, unknown> | undefined;\n }\n } else if (ctx.currentInstance != null) {\n instance = ctx.currentInstance;\n }\n if (instance == null) return null;\n\n const service = instance[serviceOrProp];\n if (rest.length === 0) {\n return { target: service, path: [] };\n }\n let current: unknown = service;\n for (let i = 0; i < rest.length - 1; i++) {\n if (current == null || typeof current !== 'object') return null;\n current = (current as Record<string, unknown>)[rest[i]];\n }\n return { target: current, path: rest.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 */\nexport function getRefValue(refPath: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(refPath, ctx);\n if (resolved == null || resolved.path.length === 0) {\n return resolved?.target;\n }\n const obj = resolved.target as Record<string, unknown>;\n const key = resolved.path[0];\n const val = obj?.[key];\n // Unwrap Angular signals and other getter functions by calling them\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 if (resolved == null) return undefined;\n const val =\n resolved.path.length === 0\n ? resolved.target\n : (resolved.target as Record<string, unknown>)?.[resolved.path[0]];\n if (val != null && isSignal(val)) {\n return val as Signal<unknown>;\n }\n return 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 &&\n isSignal(val) &&\n 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 { BlockRegistry } from './block-registry';\nimport { type OutputReference, isOutputReference } from './block-description.schema';\nimport { resolveRefPath } from './ref-resolver';\n\nfunction getCallTarget(\n reference: string,\n registry: BlockRegistry\n): unknown {\n const resolved = resolveRefPath(reference, { registry });\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 getMethodOnTarget(target: unknown, methodName: string): ((...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\nexport function resolveOutputReference(\n ref: OutputReference,\n eventValue: unknown,\n registry: BlockRegistry\n): (value: unknown) => void {\n return (value: unknown) => {\n const payload = value ?? eventValue;\n const callTarget = getCallTarget(ref.reference, registry);\n const method = getMethodOnTarget(callTarget, ref.method);\n if (method == null) return;\n const params = ref.params != null\n ? (Array.isArray(ref.params) ? ref.params : [ref.params])\n : [payload];\n const result = method.call(callTarget, ...params);\n if (result != null && typeof (result as Promise<unknown>).then === 'function') {\n (result as Promise<unknown>).then(\n () => runThenOrSuccess(ref, registry),\n () => runOnError(ref, registry)\n );\n } else {\n runThenOrSuccess(ref, registry);\n }\n };\n}\n\nfunction toParams(p: unknown[] | Record<string, unknown> | undefined): unknown[] {\n if (p == null) return [];\n return Array.isArray(p) ? p : [p];\n}\n\nfunction runThenOrSuccess(ref: OutputReference, registry: BlockRegistry): void {\n if (ref.then?.length) {\n for (const step of ref.then) {\n invokeRefMethod(registry, step.reference, step.method, toParams(step.params));\n }\n } else if (ref.onSuccess) {\n invokeRefMethod(registry, ref.onSuccess.reference, ref.onSuccess.method, toParams(ref.onSuccess.params));\n }\n}\n\nfunction runOnError(ref: OutputReference, registry: BlockRegistry): void {\n if (ref.onError) {\n invokeRefMethod(registry, ref.onError.reference, ref.onError.method, toParams(ref.onError.params));\n }\n}\n\nfunction invokeRefMethod(\n registry: BlockRegistry,\n reference: string,\n method: string,\n params: unknown[]\n): void {\n const callTarget = getCallTarget(reference, registry);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn) fn.call(callTarget, ...params);\n}\n\nexport function createOutputHandler(\n outputValue: unknown,\n outputKey: string,\n registry: BlockRegistry,\n directiveHandlers?: Record<string, (value: unknown) => void>\n): (value: unknown) => void {\n if (isOutputReference(outputValue)) {\n return resolveOutputReference(outputValue, undefined, registry);\n }\n const fromDirective = directiveHandlers?.[outputKey];\n return fromDirective ?? (() => {});\n}\n","import {\n ComponentRef,\n Injectable,\n Injector,\n Type,\n ViewContainerRef,\n effect,\n inject,\n isSignal,\n type EffectRef,\n type Signal,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ComponentRegistry } from '../registry/component.registry';\nimport { ServiceRegistry } from '../registry/service.registry';\nimport {\n BlockDescription,\n isBlockReference,\n normalizeServices,\n resolveBlockReference,\n safeParseBlockDescription,\n} from './block-description.schema';\nimport { BlockRegistryImpl, type BlockInstanceHandle, type BlockRegistry } from './block-registry';\nimport { createOutputHandler } from './output-reference';\nimport { classifyTwoWayString, parseTwoWayRef } from './ref-expressions';\nimport {\n ResolverContext,\n getRefSignal,\n getRefValue,\n getValueByPath,\n resolveRefPath,\n setRefValue,\n} from './ref-resolver';\n\nexport interface BlockLoadOptions {\n outputHandlers?: Record<string, (value: unknown) => void>;\n registry?: BlockRegistry;\n /** Map of block id → full description; used when description is an id-only reference. */\n blockDefinitions?: Record<string, unknown>;\n}\n\nexport interface BlockLoadResult {\n componentRef: ComponentRef<unknown>;\n destroy: () => void;\n updateInputs: (description: unknown) => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BlockLoaderService {\n private readonly injector = inject(Injector);\n private readonly componentRegistry = ComponentRegistry.getInstance();\n private readonly serviceRegistry = ServiceRegistry.getInstance();\n\n async load(\n description: unknown,\n viewContainerRef: ViewContainerRef,\n model: Signal<unknown | undefined>,\n options?: BlockLoadOptions,\n ): Promise<BlockLoadResult> {\n let resolved: unknown = description;\n if (isBlockReference(description)) {\n resolved = 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.has(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 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 const serviceTypes = await this.getServiceTypes(selfServices);\n const childInjector = this.buildChildInjectorFromTypes(serviceTypes);\n const componentRef = viewContainerRef.createComponent(componentType as Type<unknown>, {\n injector: childInjector,\n });\n\n const blockInstance: Record<string, unknown> = {};\n for (let i = 0; i < selfServices.length; i++) {\n const id = selfServices[i].id;\n const alias = selfServices[i].alias ?? id;\n const serviceType = serviceTypes[i];\n if (serviceType) {\n const svc = componentRef.injector.get(serviceType as Type<unknown>);\n if (svc != null) blockInstance[alias] = svc;\n }\n }\n const ctx: ResolverContext = {\n registry,\n currentBlockId: desc.id ?? undefined,\n currentInstance: blockInstance,\n };\n const handle: BlockInstanceHandle = { instance: blockInstance };\n if (desc.id != null && desc.id !== '') registry.register(desc.id, handle);\n\n this.applyInitialModel(desc, ctx, blockInstance, model);\n\n let currentEffectRefs = this.setInputs(componentRef, desc, ctx, model);\n currentEffectRefs = currentEffectRefs.concat(\n this.applyModelReactivity(desc, ctx, blockInstance, model),\n );\n const subscriptions = this.wireOutputs(componentRef, desc, registry, options?.outputHandlers);\n\n const doDestroy = (): void => {\n if (desc.id != null && desc.id !== '') registry.unregister(desc.id);\n currentEffectRefs.forEach((ref) => ref.destroy());\n subscriptions.forEach((s) => s.unsubscribe());\n const idx = viewContainerRef.indexOf(componentRef.hostView);\n if (idx !== -1) viewContainerRef.remove(idx);\n componentRef.destroy();\n };\n handle.destroy = doDestroy;\n\n const updateInputs = (newDesc: unknown): void => {\n const p = safeParseBlockDescription(newDesc);\n if (p.success) {\n currentEffectRefs.forEach((ref) => ref.destroy());\n this.applyInitialModel(p.data, ctx, blockInstance, model);\n currentEffectRefs = this.setInputs(componentRef, p.data, ctx, model);\n currentEffectRefs = currentEffectRefs.concat(\n this.applyModelReactivity(p.data, ctx, blockInstance, model),\n );\n }\n };\n\n return { componentRef, destroy: doDestroy, updateInputs };\n }\n\n /** Resolve all service types in parallel (single batch for load). */\n private async getServiceTypes(\n selfServices: { id: string; scope: 'self' }[],\n ): Promise<(Type<unknown> | undefined)[]> {\n if (selfServices.length === 0) return [];\n return Promise.all(selfServices.map((e) => this.serviceRegistry.getType(e.id)));\n }\n\n private buildChildInjectorFromTypes(serviceTypes: (Type<unknown> | undefined)[]): 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 ? this.injector\n : Injector.create({ providers, parent: this.injector });\n }\n\n /** Set inputs and wire template/two-way effects. Single pass over inputs for large configs. */\n private setInputs(\n componentRef: ComponentRef<unknown>,\n desc: BlockDescription,\n ctx: ResolverContext,\n blockModel?: Signal<unknown | undefined>,\n ): EffectRef[] {\n const effectRefs: EffectRef[] = [];\n const inputs = desc.inputs ?? {};\n const inst = componentRef.instance as Record<string, unknown>;\n for (const [key, value] of Object.entries(inputs)) {\n if (key === 'model') {\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 if (twoWayKind === 'two-way') {\n const refPath = parseTwoWayRef(value);\n if (refPath) {\n const modelSig = inst[key];\n if (modelSig != null && isSignal(modelSig)) {\n effectRefs.push(\n effect(\n () => {\n const fromRef = getRefValue(refPath, ctx);\n if (fromRef === undefined) return;\n if (componentRef.setInput) {\n componentRef.setInput(key as never, fromRef as never);\n componentRef.changeDetectorRef.detectChanges();\n }\n },\n { injector: this.injector },\n ),\n );\n effectRefs.push(\n effect(\n () => {\n const current = modelSig();\n setRefValue(refPath, ctx, current);\n },\n { injector: this.injector },\n ),\n );\n }\n }\n continue;\n }\n }\n const str = value as string;\n if (\n typeof value === 'string' &&\n str.indexOf('{{') !== -1 &&\n str.indexOf('}}', str.indexOf('{{')) !== -1\n ) {\n effectRefs.push(\n effect(\n () => {\n const modelSig = ctx.currentInstance?.['model'];\n const model =\n modelSig != null && isSignal(modelSig)\n ? (modelSig as Signal<unknown>)()\n : (modelSig as unknown);\n const resolved = this.interpolateTemplateMixed(str, ctx, model);\n if (componentRef.setInput) componentRef.setInput(key as never, resolved as never);\n else inst[key] = resolved;\n },\n { injector: this.injector },\n ),\n );\n continue;\n }\n\n const resolved = this.resolveInputValue(value, ctx);\n if (componentRef.setInput) componentRef.setInput(key as never, resolved as never);\n else inst[key] = resolved;\n }\n return effectRefs;\n }\n\n /** Resolve model from desc (interpolate ref if string) and set on services and blockInstance. */\n private applyInitialModel(\n desc: BlockDescription,\n ctx: ResolverContext,\n blockInstance: Record<string, unknown>,\n blockModel: Signal<unknown | undefined>,\n ): void {\n const rawModel = desc.inputs?.['model'];\n if (rawModel === undefined || rawModel === null) {\n const model = blockModel();\n for (const svc of Object.values(blockInstance)) {\n if (svc != null && typeof (svc as Record<string, unknown>)['setModel'] === 'function') {\n ((svc as Record<string, unknown>)['setModel'] as (v: unknown) => void)(model);\n }\n }\n blockInstance['model'] = blockModel;\n return;\n }\n let model: unknown = rawModel;\n if (typeof rawModel === 'string') {\n const refPath = rawModel.trim().replace(/^\\{\\{\\s*|\\s*\\}\\}$/g, '');\n if (refPath.length > 0) {\n const refSignal = getRefSignal(refPath, ctx);\n \n if (refSignal != null) {\n model = refSignal();\n blockInstance['model'] = refSignal;\n } else {\n model = getRefValue(refPath, ctx);\n }\n }\n }\n for (const svc of Object.values(blockInstance)) {\n if (svc != null && typeof (svc as Record<string, unknown>)['setModel'] === 'function') {\n ((svc as Record<string, unknown>)['setModel'] as (v: unknown) => void)(model);\n }\n }\n }\n\n /** If model is a ref string, return an effect that keeps setModel/blockInstance in sync with the ref. */\n private applyModelReactivity(\n desc: BlockDescription,\n ctx: ResolverContext,\n blockInstance: Record<string, unknown>,\n blockModel: Signal<unknown | undefined>,\n ): EffectRef[] {\n const rawModel = desc.inputs?.['model'];\n const refPath =\n rawModel != null && typeof rawModel === 'string'\n ? rawModel.trim().replace(/^\\{\\{\\s*|\\s*\\}\\}$/g, '')\n : '';\n if (refPath.length === 0) {\n return [];\n }\n const effectRef = effect(\n () => {\n const model = refPath ? getRefValue(refPath, ctx) : blockModel();\n for (const svc of Object.values(blockInstance)) {\n if (svc != null && typeof (svc as Record<string, unknown>)['setModel'] === 'function') {\n ((svc as Record<string, unknown>)['setModel'] as (v: unknown) => void)(model);\n }\n }\n },\n { injector: this.injector },\n );\n return [effectRef];\n }\n\n /**\n * Replace each {{ refPath }} with a value: resolve as ref first (e.g. Person.instance.AuthState.firstName),\n * else as model path (e.g. firstName, instance.model.firstName). Allows mixing both in one template.\n */\n private interpolateTemplateMixed(template: string, ctx: ResolverContext, model: unknown): string {\n const parts: string[] = [];\n let s = template;\n for (let i = 0; i < BlockLoaderService.INTERPOLATE_MAX_PLACEHOLDERS; i++) {\n const start = s.indexOf('{{');\n if (start === -1) {\n parts.push(s);\n break;\n }\n parts.push(s.slice(0, start));\n const end = s.indexOf('}}', start);\n if (end === -1) {\n parts.push(s.slice(start));\n break;\n }\n const ref = s.slice(start + 2, end).trim();\n const val = ref\n ? resolveRefPath(ref, ctx) != null\n ? getRefValue(ref, ctx)\n : getValueByPath(model, ref)\n : null;\n parts.push(val != null ? String(val) : '');\n s = s.slice(end + 2);\n }\n return parts.join('');\n }\n\n /** Replace all {{ refPath }} with resolved values. Uses parts array + join to avoid N string concats. */\n private static readonly INTERPOLATE_MAX_PLACEHOLDERS = 200;\n private interpolateTemplate(template: string, ctx: ResolverContext): string {\n const parts: string[] = [];\n let s = template;\n for (let i = 0; i < BlockLoaderService.INTERPOLATE_MAX_PLACEHOLDERS; i++) {\n const start = s.indexOf('{{');\n if (start === -1) {\n parts.push(s);\n break;\n }\n parts.push(s.slice(0, start));\n const end = s.indexOf('}}', start);\n if (end === -1) {\n parts.push(s.slice(start));\n break;\n }\n const ref = s.slice(start + 2, end).trim();\n const val = ref ? getRefValue(ref, ctx) : null;\n parts.push(val != null ? String(val) : '');\n s = s.slice(end + 2);\n }\n return parts.join('');\n }\n\n /**\n * Resolve a single input value: resolve two-way refs, recurse into arrays/objects.\n * Strings with {{ }} are left as-is so child blocks receive the template for reactive interpolation.\n * Two-way refs inside nested block descriptors (object with \"component\" + \"inputs\") are left as-is\n * so that when a child block is loaded it still sees value: '[(ref)]' and can wire two-way binding.\n */\n private resolveInputValue(\n value: unknown,\n ctx: ResolverContext,\n options?: { preserveTwoWayRefs?: boolean },\n ): unknown {\n const preserveTwoWayRefs = options?.preserveTwoWayRefs ?? false;\n if (typeof value === 'string') {\n const twoWayKind = classifyTwoWayString(value);\n if (twoWayKind === 'invalid-mix') {\n const preview = value.length > 200 ? `${value.slice(0, 200)}...` : value;\n throw new Error(\n `Invalid input: two-way ref \"[( )]\" cannot be mixed with literals or \"{{ }}\". ` +\n `Use exactly \"[(refPath)]\" for two-way or \"{{ refPath }}\" for read-only. Got: ${JSON.stringify(preview)}`,\n );\n }\n if (twoWayKind === 'two-way') {\n if (preserveTwoWayRefs) return value;\n const refPath = parseTwoWayRef(value);\n return refPath ? getRefValue(refPath, ctx) : value;\n }\n return value;\n }\n if (Array.isArray(value)) {\n let changed = false;\n const resolved = value.map((item) => {\n const r = this.resolveInputValue(item, ctx, options);\n if (r !== item) changed = true;\n return r;\n });\n return changed ? resolved : value;\n }\n if (value != null && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n const isNestedBlockDescriptor = typeof obj['component'] === 'string' && obj['inputs'] != null;\n const entries = Object.entries(value as Record<string, unknown>);\n const resolvedPairs: [string, unknown][] = [];\n let changed = false;\n for (const [k, v] of entries) {\n const childOptions =\n isNestedBlockDescriptor && k === 'inputs' ? { preserveTwoWayRefs: true } : options;\n const resolved = this.resolveInputValue(v, ctx, childOptions);\n if (resolved !== v) changed = true;\n resolvedPairs.push([k, resolved]);\n }\n if (!changed) return value;\n const out: Record<string, unknown> = {};\n for (const [k, r] of resolvedPairs) out[k] = r;\n return out;\n }\n return value;\n }\n\n private wireOutputs(\n componentRef: ComponentRef<unknown>,\n desc: BlockDescription,\n registry: BlockRegistry,\n outputHandlers?: Record<string, (value: unknown) => void>,\n ): Subscription[] {\n const subs: Subscription[] = [];\n const outputs = desc.outputs ?? {};\n const inst = componentRef.instance as Record<string, unknown>;\n for (const [outputKey, outputValue] of Object.entries(outputs)) {\n const handler = createOutputHandler(outputValue, outputKey, registry, outputHandlers);\n const emitter = inst[outputKey];\n if (\n emitter != null &&\n typeof (\n emitter as { subscribe?: (fn: (v: unknown) => void) => { unsubscribe: () => void } }\n ).subscribe === 'function'\n ) {\n const sub = (\n emitter as { subscribe: (fn: (v: unknown) => void) => { unsubscribe: () => void } }\n ).subscribe((v: unknown) => handler(v));\n subs.push(sub as unknown as Subscription);\n }\n }\n return subs;\n }\n}\n","import { Directive, input, effect, ViewContainerRef, inject, DestroyRef } from '@angular/core';\nimport { BlockLoaderService, type BlockLoadResult } from './block-loader.service';\nimport type { BlockRegistry } from './block-registry';\nimport type { BlockDescription, BlockInput } from './block-description.schema';\nimport {\n safeParseBlockDescription,\n normalizeServices,\n isBlockReference,\n resolveBlockReference,\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\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 | null>(null);\n /** Handlers for component outputs; keys match descriptor.outputs. */\n readonly outputHandlers = input<Record<string, (value: unknown) => void>>({});\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; used when description is a block reference (id/blockId). */\n readonly blockDefinitions = input<Record<string, unknown> | null>(null);\n /** Model for the block. */\n readonly model = input<unknown | undefined>(undefined);\n\n private loadResult: BlockLoadResult | null = null;\n private loadedComponent: string | null = null;\n private loadedServicesKey: string | null = null;\n private loadGeneration = 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 outputHandlers = this.outputHandlers();\n const inputDefs = this.blockDefinitions();\n\n if (desc == null) {\n this.lastDescRef = null;\n this.lastParsedData = null;\n this.clear();\n return;\n }\n\n const resolved = isBlockReference(desc)\n ? resolveBlockReference(desc, inputDefs ?? undefined)\n : desc;\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 canUpdate =\n this.loadResult != null &&\n this.loadedComponent === data.component &&\n this.loadedServicesKey === servicesKey;\n\n if (canUpdate && this.loadResult) {\n this.loadResult.updateInputs(resolved);\n return;\n }\n\n this.clear();\n const registry = this.blockRegistry() ?? undefined;\n const generation = ++this.loadGeneration;\n this.loader\n .load(resolved, this.viewContainerRef, this.model, {\n outputHandlers: Object.keys(outputHandlers).length > 0 ? outputHandlers : undefined,\n registry,\n\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 })\n .catch((err: unknown) => {\n if (generation !== this.loadGeneration) return;\n console.error('Block load failed:', err);\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.loadResult) {\n this.loadResult.destroy();\n this.loadResult = null;\n this.loadedComponent = null;\n this.loadedServicesKey = 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/component.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-definitions.registry.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-description.schema.ts","../../../projects/blocks-studio/src/lib/core/block-loader/block-registry.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/output-reference.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, or guard.\n */\nexport type RegistryEntryType = 'component' | 'service' | 'guard';\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}\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, or guard).\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 };\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 { 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 { 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 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","/**\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 */\nexport class BlockDefinitionsRegistry {\n private static instance: BlockDefinitionsRegistry;\n private readonly definitions = new Map<string, Record<string, unknown>>();\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 /** Register a block template by id. Can be called before the block is needed. */\n register(id: string, definition: Record<string, unknown>): void {\n this.definitions.set(id, definition);\n }\n\n /** Get one definition by id. */\n get(id: string): Record<string, unknown> | undefined {\n return this.definitions.get(id);\n }\n\n /** Get all registered definitions (id → definition). Used to merge with per-call definitions. */\n getAll(): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n this.definitions.forEach((def, id) => {\n out[id] = def;\n });\n return out;\n }\n\n unregister(id: string): boolean {\n return this.definitions.delete(id);\n }\n}\n","import { z } from 'zod';\nimport { BlockDefinitionsRegistry } from './block-definitions.registry';\n\n/**\n * Service entry: root-scoped (string id) or self-scoped ({ id, scope: \"self\" }).\n */\nconst ServiceEntrySchema = z.union([\n z.string().min(1),\n z.object({\n id: z.string().min(1),\n scope: z.literal('self'),\n alias: z.string().min(1).optional(),\n }),\n]);\n\n/**\n * Output handler: empty (use directive-provided handler) or reference-based (call method on ref).\n */\nconst OutputReferenceSchema = z.object({\n type: z.literal('reference'),\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n then: z\n .array(\n z.object({\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n }),\n )\n .optional(),\n onSuccess: z\n .object({\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n })\n .optional(),\n onError: z\n .object({\n reference: z.string().min(1),\n method: z.string().min(1),\n params: z.union([z.array(z.unknown()), z.record(z.string(), z.unknown())]).optional(),\n })\n .optional(),\n});\n\nconst OutputValueSchema = z.union([z.record(z.string(), z.unknown()), OutputReferenceSchema]);\n\n/**\n * Block description: JSON-serializable descriptor for dynamic block loading.\n * Refs in inputs use instance namespace: instance.FormState.firstName or UserForm.instance.FormState.firstName.\n */\nexport const BlockDescriptionSchema = z.object({\n component: z.string().min(1),\n id: z.string().min(1).optional(),\n services: z\n .union([ServiceEntrySchema, z.array(ServiceEntrySchema)])\n .optional()\n .default([]),\n inputs: z.record(z.string(), z.unknown()).optional(),\n outputs: z.record(z.string(), OutputValueSchema).optional(),\n});\n\nexport type BlockDescription = z.infer<typeof BlockDescriptionSchema>;\nexport type BlockInput = z.input<typeof BlockDescriptionSchema>;\nexport type ServiceEntry = z.infer<typeof ServiceEntrySchema>;\nexport type OutputReference = z.infer<typeof OutputReferenceSchema>;\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\nexport function safeParseBlockDescription(\n data: unknown,\n): ReturnType<typeof BlockDescriptionSchema.safeParse> {\n return BlockDescriptionSchema.safeParse(data);\n}\n\nexport function isOutputReference(value: unknown): value is OutputReference {\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as OutputReference).type === 'reference' &&\n typeof (value as OutputReference).reference === 'string' &&\n typeof (value as OutputReference).method === 'string'\n );\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 blockDefinition?: Record<string, unknown>;\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 */\nexport function resolveBlockReference(\n ref: BlockReference,\n blockDefinitions: Record<string, unknown> | null | undefined,\n): 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: unknown;\n if (blockDefinitions && Object.prototype.hasOwnProperty.call(blockDefinitions, blockId)) {\n base = blockDefinitions[blockId];\n } else {\n base = registry.get(blockId);\n }\n\n if (base == null || typeof base !== 'object')\n throw new Error(`Block \"${blockId}\" has no definition.`);\n\n const baseObj = { ...base, id };\n\n const overrides = ref.blockDefinition;\n if (overrides == null || typeof overrides !== 'object' || Object.keys(overrides).length === 0)\n return { ...baseObj };\n return deepMergeBlockDefinition(baseObj, overrides);\n}\n","import type { Signal } from '@angular/core';\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: Record<string, unknown>;\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 has(id: string): boolean;\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","/**\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 blockId?: string;\n instancePath: string;\n pathParts: string[];\n}\n\nconst PARSE_REF_PATH_CACHE_MAX = 64;\nconst parseRefPathCache = new Map<string, ParsedRefPath>();\n\nfunction toPathParts(instancePath: string): string[] {\n return instancePath.split('.').filter(Boolean);\n}\n\nfunction parseRefPathUncached(refPath: string): ParsedRefPath {\n const trimmed = refPath.trim();\n const parts = trimmed.split('.');\n if (parts.length >= 2 && parts[0] === 'instance') {\n return { instancePath: trimmed, pathParts: toPathParts(trimmed) };\n }\n if (parts.length >= 3 && parts[1] === 'instance') {\n const instancePath = parts.slice(1).join('.');\n return { blockId: parts[0], instancePath, pathParts: toPathParts(instancePath) };\n }\n return { instancePath: trimmed, pathParts: toPathParts(trimmed) };\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 (!s.includes('[(') && !s.includes(')]')) return 'none';\n return TWOWAY_REF_RE.test(s) ? 'two-way' : 'invalid-mix';\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, type Signal } from '@angular/core';\nimport type { BlockRegistry } 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?: Record<string, unknown>;\n}\n\n/**\n * Resolve a ref path to the target object and path.\n * Path format: \"instance.FormState.firstName\" (context) or \"UserForm.instance.FormState.firstName\" (registry).\n */\nexport function resolveRefPath(\n refPath: string,\n ctx: ResolverContext\n): { target: unknown; path: string[] } | null {\n const { blockId, pathParts } = parseRefPath(refPath);\n if (pathParts[0] !== 'instance' || pathParts.length < 2) {\n return null;\n }\n const rest = pathParts.slice(2);\n const serviceOrProp = pathParts[1];\n\n let instance: Record<string, unknown> | undefined;\n if (blockId != null) {\n // Prefer current block's instance when ref points to this block (e.g. root resolving nested refs to itself)\n if (blockId === ctx.currentBlockId && ctx.currentInstance != null) {\n instance = ctx.currentInstance;\n } else {\n const handle = ctx.registry.get(blockId);\n instance = handle?.instance as Record<string, unknown> | undefined;\n }\n } else if (ctx.currentInstance != null) {\n instance = ctx.currentInstance;\n }\n if (instance == null) return null;\n\n const service = instance[serviceOrProp];\n if (rest.length === 0) {\n return { target: service, path: [] };\n }\n let current: unknown = service;\n for (let i = 0; i < rest.length - 1; i++) {\n if (current == null || typeof current !== 'object') return null;\n current = (current as Record<string, unknown>)[rest[i]];\n }\n return { target: current, path: rest.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 */\nexport function getRefValue(refPath: string, ctx: ResolverContext): unknown {\n const resolved = resolveRefPath(refPath, ctx);\n if (resolved == null || resolved.path.length === 0) {\n return resolved?.target;\n }\n const obj = resolved.target as Record<string, unknown>;\n const key = resolved.path[0];\n const val = obj?.[key];\n // Unwrap Angular signals and other getter functions by calling them\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 if (resolved == null) return undefined;\n const val =\n resolved.path.length === 0\n ? resolved.target\n : (resolved.target as Record<string, unknown>)?.[resolved.path[0]];\n if (val != null && isSignal(val)) {\n return val as Signal<unknown>;\n }\n return 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 &&\n isSignal(val) &&\n 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 { BlockRegistry } from './block-registry';\nimport { type OutputReference, isOutputReference } from './block-description.schema';\nimport { resolveRefPath } from './ref-resolver';\n\nfunction getCallTarget(\n reference: string,\n registry: BlockRegistry\n): unknown {\n const resolved = resolveRefPath(reference, { registry });\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 getMethodOnTarget(target: unknown, methodName: string): ((...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\nexport function resolveOutputReference(\n ref: OutputReference,\n eventValue: unknown,\n registry: BlockRegistry\n): (value: unknown) => void {\n return (value: unknown) => {\n const payload = value ?? eventValue;\n const callTarget = getCallTarget(ref.reference, registry);\n const method = getMethodOnTarget(callTarget, ref.method);\n if (method == null) return;\n const params = ref.params != null\n ? (Array.isArray(ref.params) ? ref.params : [ref.params])\n : [payload];\n const result = method.call(callTarget, ...params);\n if (result != null && typeof (result as Promise<unknown>).then === 'function') {\n (result as Promise<unknown>).then(\n () => runThenOrSuccess(ref, registry),\n () => runOnError(ref, registry)\n );\n } else {\n runThenOrSuccess(ref, registry);\n }\n };\n}\n\nfunction toParams(p: unknown[] | Record<string, unknown> | undefined): unknown[] {\n if (p == null) return [];\n return Array.isArray(p) ? p : [p];\n}\n\nfunction runThenOrSuccess(ref: OutputReference, registry: BlockRegistry): void {\n if (ref.then?.length) {\n for (const step of ref.then) {\n invokeRefMethod(registry, step.reference, step.method, toParams(step.params));\n }\n } else if (ref.onSuccess) {\n invokeRefMethod(registry, ref.onSuccess.reference, ref.onSuccess.method, toParams(ref.onSuccess.params));\n }\n}\n\nfunction runOnError(ref: OutputReference, registry: BlockRegistry): void {\n if (ref.onError) {\n invokeRefMethod(registry, ref.onError.reference, ref.onError.method, toParams(ref.onError.params));\n }\n}\n\nfunction invokeRefMethod(\n registry: BlockRegistry,\n reference: string,\n method: string,\n params: unknown[]\n): void {\n const callTarget = getCallTarget(reference, registry);\n const fn = getMethodOnTarget(callTarget, method);\n if (fn) fn.call(callTarget, ...params);\n}\n\nexport function createOutputHandler(\n outputValue: unknown,\n outputKey: string,\n registry: BlockRegistry,\n directiveHandlers?: Record<string, (value: unknown) => void>\n): (value: unknown) => void {\n if (isOutputReference(outputValue)) {\n return resolveOutputReference(outputValue, undefined, registry);\n }\n const fromDirective = directiveHandlers?.[outputKey];\n return fromDirective ?? (() => {});\n}\n","import {\n ComponentRef,\n Injectable,\n Injector,\n Type,\n ViewContainerRef,\n effect,\n inject,\n isSignal,\n type EffectRef,\n type Signal,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ComponentRegistry } from '../registry/component.registry';\nimport { ServiceRegistry } from '../registry/service.registry';\nimport {\n BlockDescription,\n isBlockReference,\n normalizeServices,\n resolveBlockReference,\n safeParseBlockDescription,\n} from './block-description.schema';\nimport { BlockRegistryImpl, type BlockInstanceHandle, type BlockRegistry } from './block-registry';\nimport { createOutputHandler } from './output-reference';\nimport { classifyTwoWayString, parseTwoWayRef } from './ref-expressions';\nimport {\n ResolverContext,\n getRefSignal,\n getRefValue,\n getValueByPath,\n resolveRefPath,\n setRefValue,\n} from './ref-resolver';\n\nexport interface BlockLoadOptions {\n outputHandlers?: Record<string, (value: unknown) => void>;\n registry?: BlockRegistry;\n /** Map of block id → full description; used when description is an id-only reference. */\n blockDefinitions?: Record<string, unknown>;\n}\n\nexport interface BlockLoadResult {\n componentRef: ComponentRef<unknown>;\n destroy: () => void;\n updateInputs: (description: unknown) => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class BlockLoaderService {\n private readonly injector = inject(Injector);\n private readonly componentRegistry = ComponentRegistry.getInstance();\n private readonly serviceRegistry = ServiceRegistry.getInstance();\n\n async load(\n description: unknown,\n viewContainerRef: ViewContainerRef,\n model: Signal<unknown | undefined>,\n options?: BlockLoadOptions,\n ): Promise<BlockLoadResult> {\n let resolved: unknown = description;\n if (isBlockReference(description)) {\n resolved = 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.has(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 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 const rootEntries = services\n .filter((s) => typeof s === 'string' || (s as { scope?: string }).scope !== 'self')\n .map((s): { id: string; alias: string } =>\n typeof s === 'string'\n ? { id: s, alias: s }\n : { id: (s as { id: string; alias?: string }).id, alias: (s as { id: string; alias?: string }).alias ?? (s as { id: string }).id },\n );\n const selfServiceTypes = await this.getServiceTypes(selfServices);\n const rootServiceTypes = await this.getServiceTypes(rootEntries);\n const childInjector = this.buildChildInjectorFromTypes(selfServiceTypes);\n const componentRef = viewContainerRef.createComponent(componentType as Type<unknown>, {\n injector: childInjector,\n });\n\n const blockInstance: Record<string, unknown> = {};\n for (let i = 0; i < selfServices.length; i++) {\n const alias = selfServices[i].alias ?? selfServices[i].id;\n const serviceType = selfServiceTypes[i];\n if (serviceType) {\n const svc = componentRef.injector.get(serviceType as Type<unknown>);\n if (svc != null) blockInstance[alias] = svc;\n }\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 = this.injector.get(serviceType as Type<unknown>);\n if (svc != null) blockInstance[alias] = svc;\n }\n }\n const ctx: ResolverContext = {\n registry,\n currentBlockId: desc.id ?? undefined,\n currentInstance: blockInstance,\n };\n const handle: BlockInstanceHandle = { instance: blockInstance };\n if (desc.id != null && desc.id !== '') registry.register(desc.id, handle);\n\n this.applyInitialModel(desc, ctx, blockInstance, model);\n\n let currentEffectRefs = this.setInputs(componentRef, desc, ctx, model);\n currentEffectRefs = currentEffectRefs.concat(\n this.applyModelReactivity(desc, ctx, blockInstance, model),\n );\n const subscriptions = this.wireOutputs(componentRef, desc, registry, options?.outputHandlers);\n\n const doDestroy = (): void => {\n if (desc.id != null && desc.id !== '') registry.unregister(desc.id);\n currentEffectRefs.forEach((ref) => ref.destroy());\n subscriptions.forEach((s) => s.unsubscribe());\n const idx = viewContainerRef.indexOf(componentRef.hostView);\n if (idx !== -1) viewContainerRef.remove(idx);\n componentRef.destroy();\n };\n handle.destroy = doDestroy;\n\n const updateInputs = (newDesc: unknown): void => {\n const p = safeParseBlockDescription(newDesc);\n if (p.success) {\n currentEffectRefs.forEach((ref) => ref.destroy());\n this.applyInitialModel(p.data, ctx, blockInstance, model);\n currentEffectRefs = this.setInputs(componentRef, p.data, ctx, model);\n currentEffectRefs = currentEffectRefs.concat(\n this.applyModelReactivity(p.data, ctx, blockInstance, model),\n );\n }\n };\n\n return { componentRef, destroy: doDestroy, updateInputs };\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 private buildChildInjectorFromTypes(serviceTypes: (Type<unknown> | undefined)[]): 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 ? this.injector\n : Injector.create({ providers, parent: this.injector });\n }\n\n /** Set inputs and wire template/two-way effects. Single pass over inputs for large configs. */\n private setInputs(\n componentRef: ComponentRef<unknown>,\n desc: BlockDescription,\n ctx: ResolverContext,\n blockModel?: Signal<unknown | undefined>,\n ): EffectRef[] {\n const effectRefs: EffectRef[] = [];\n const inputs = desc.inputs ?? {};\n const inst = componentRef.instance as Record<string, unknown>;\n for (const [key, value] of Object.entries(inputs)) {\n if (key === 'model') {\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 if (twoWayKind === 'two-way') {\n const refPath = parseTwoWayRef(value);\n if (refPath) {\n const modelSig = inst[key];\n if (modelSig != null && isSignal(modelSig)) {\n effectRefs.push(\n effect(\n () => {\n const fromRef = getRefValue(refPath, ctx);\n if (fromRef === undefined) return;\n if (componentRef.setInput) {\n componentRef.setInput(key as never, fromRef as never);\n componentRef.changeDetectorRef.detectChanges();\n }\n },\n { injector: this.injector },\n ),\n );\n effectRefs.push(\n effect(\n () => {\n const current = modelSig();\n setRefValue(refPath, ctx, current);\n },\n { injector: this.injector },\n ),\n );\n }\n }\n continue;\n }\n }\n const str = value as string;\n if (\n typeof value === 'string' &&\n str.indexOf('{{') !== -1 &&\n str.indexOf('}}', str.indexOf('{{')) !== -1\n ) {\n effectRefs.push(\n effect(\n () => {\n const modelSig = ctx.currentInstance?.['model'];\n const model =\n modelSig != null && isSignal(modelSig)\n ? (modelSig as Signal<unknown>)()\n : (modelSig as unknown);\n const resolved = this.interpolateTemplateMixed(str, ctx, model);\n if (componentRef.setInput) componentRef.setInput(key as never, resolved as never);\n else inst[key] = resolved;\n },\n { injector: this.injector },\n ),\n );\n continue;\n }\n\n const resolved = this.resolveInputValue(value, ctx);\n if (componentRef.setInput) componentRef.setInput(key as never, resolved as never);\n else inst[key] = resolved;\n }\n return effectRefs;\n }\n\n /** Resolve model from desc (interpolate ref if string) and set on services and blockInstance. */\n private applyInitialModel(\n desc: BlockDescription,\n ctx: ResolverContext,\n blockInstance: Record<string, unknown>,\n blockModel: Signal<unknown | undefined>,\n ): void {\n const rawModel = desc.inputs?.['model'];\n if (rawModel === undefined || rawModel === null) {\n const model = blockModel();\n for (const svc of Object.values(blockInstance)) {\n if (svc != null && typeof (svc as Record<string, unknown>)['setModel'] === 'function') {\n ((svc as Record<string, unknown>)['setModel'] as (v: unknown) => void)(model);\n }\n }\n blockInstance['model'] = blockModel;\n return;\n }\n let model: unknown = rawModel;\n if (typeof rawModel === 'string') {\n const refPath = rawModel.trim().replace(/^\\{\\{\\s*|\\s*\\}\\}$/g, '');\n if (refPath.length > 0) {\n const refSignal = getRefSignal(refPath, ctx);\n \n if (refSignal != null) {\n model = refSignal();\n blockInstance['model'] = refSignal;\n } else {\n model = getRefValue(refPath, ctx);\n }\n }\n }\n for (const svc of Object.values(blockInstance)) {\n if (svc != null && typeof (svc as Record<string, unknown>)['setModel'] === 'function') {\n ((svc as Record<string, unknown>)['setModel'] as (v: unknown) => void)(model);\n }\n }\n }\n\n /** If model is a ref string, return an effect that keeps setModel/blockInstance in sync with the ref. */\n private applyModelReactivity(\n desc: BlockDescription,\n ctx: ResolverContext,\n blockInstance: Record<string, unknown>,\n blockModel: Signal<unknown | undefined>,\n ): EffectRef[] {\n const rawModel = desc.inputs?.['model'];\n const refPath =\n rawModel != null && typeof rawModel === 'string'\n ? rawModel.trim().replace(/^\\{\\{\\s*|\\s*\\}\\}$/g, '')\n : '';\n if (refPath.length === 0) {\n return [];\n }\n const effectRef = effect(\n () => {\n const model = refPath ? getRefValue(refPath, ctx) : blockModel();\n for (const svc of Object.values(blockInstance)) {\n if (svc != null && typeof (svc as Record<string, unknown>)['setModel'] === 'function') {\n ((svc as Record<string, unknown>)['setModel'] as (v: unknown) => void)(model);\n }\n }\n },\n { injector: this.injector },\n );\n return [effectRef];\n }\n\n /**\n * Replace each {{ refPath }} with a value: resolve as ref first (e.g. Person.instance.AuthState.firstName),\n * else as model path (e.g. firstName, instance.model.firstName). Allows mixing both in one template.\n */\n private interpolateTemplateMixed(template: string, ctx: ResolverContext, model: unknown): string {\n const parts: string[] = [];\n let s = template;\n for (let i = 0; i < BlockLoaderService.INTERPOLATE_MAX_PLACEHOLDERS; i++) {\n const start = s.indexOf('{{');\n if (start === -1) {\n parts.push(s);\n break;\n }\n parts.push(s.slice(0, start));\n const end = s.indexOf('}}', start);\n if (end === -1) {\n parts.push(s.slice(start));\n break;\n }\n const ref = s.slice(start + 2, end).trim();\n const val = ref\n ? resolveRefPath(ref, ctx) != null\n ? getRefValue(ref, ctx)\n : getValueByPath(model, ref)\n : null;\n parts.push(val != null ? String(val) : '');\n s = s.slice(end + 2);\n }\n return parts.join('');\n }\n\n /** Replace all {{ refPath }} with resolved values. Uses parts array + join to avoid N string concats. */\n private static readonly INTERPOLATE_MAX_PLACEHOLDERS = 200;\n private interpolateTemplate(template: string, ctx: ResolverContext): string {\n const parts: string[] = [];\n let s = template;\n for (let i = 0; i < BlockLoaderService.INTERPOLATE_MAX_PLACEHOLDERS; i++) {\n const start = s.indexOf('{{');\n if (start === -1) {\n parts.push(s);\n break;\n }\n parts.push(s.slice(0, start));\n const end = s.indexOf('}}', start);\n if (end === -1) {\n parts.push(s.slice(start));\n break;\n }\n const ref = s.slice(start + 2, end).trim();\n const val = ref ? getRefValue(ref, ctx) : null;\n parts.push(val != null ? String(val) : '');\n s = s.slice(end + 2);\n }\n return parts.join('');\n }\n\n /**\n * Resolve a single input value: resolve two-way refs, recurse into arrays/objects.\n * Strings with {{ }} are left as-is so child blocks receive the template for reactive interpolation.\n * Two-way refs inside nested block descriptors (object with \"component\" + \"inputs\") are left as-is\n * so that when a child block is loaded it still sees value: '[(ref)]' and can wire two-way binding.\n */\n private resolveInputValue(\n value: unknown,\n ctx: ResolverContext,\n options?: { preserveTwoWayRefs?: boolean },\n ): unknown {\n const preserveTwoWayRefs = options?.preserveTwoWayRefs ?? false;\n if (typeof value === 'string') {\n const twoWayKind = classifyTwoWayString(value);\n if (twoWayKind === 'invalid-mix') {\n const preview = value.length > 200 ? `${value.slice(0, 200)}...` : value;\n throw new Error(\n `Invalid input: two-way ref \"[( )]\" cannot be mixed with literals or \"{{ }}\". ` +\n `Use exactly \"[(refPath)]\" for two-way or \"{{ refPath }}\" for read-only. Got: ${JSON.stringify(preview)}`,\n );\n }\n if (twoWayKind === 'two-way') {\n if (preserveTwoWayRefs) return value;\n const refPath = parseTwoWayRef(value);\n return refPath ? getRefValue(refPath, ctx) : value;\n }\n return value;\n }\n if (Array.isArray(value)) {\n let changed = false;\n const resolved = value.map((item) => {\n const r = this.resolveInputValue(item, ctx, options);\n if (r !== item) changed = true;\n return r;\n });\n return changed ? resolved : value;\n }\n if (value != null && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n const isNestedBlockDescriptor = typeof obj['component'] === 'string' && obj['inputs'] != null;\n const entries = Object.entries(value as Record<string, unknown>);\n const resolvedPairs: [string, unknown][] = [];\n let changed = false;\n for (const [k, v] of entries) {\n const childOptions =\n isNestedBlockDescriptor && k === 'inputs' ? { preserveTwoWayRefs: true } : options;\n const resolved = this.resolveInputValue(v, ctx, childOptions);\n if (resolved !== v) changed = true;\n resolvedPairs.push([k, resolved]);\n }\n if (!changed) return value;\n const out: Record<string, unknown> = {};\n for (const [k, r] of resolvedPairs) out[k] = r;\n return out;\n }\n return value;\n }\n\n private wireOutputs(\n componentRef: ComponentRef<unknown>,\n desc: BlockDescription,\n registry: BlockRegistry,\n outputHandlers?: Record<string, (value: unknown) => void>,\n ): Subscription[] {\n const subs: Subscription[] = [];\n const outputs = desc.outputs ?? {};\n const inst = componentRef.instance as Record<string, unknown>;\n for (const [outputKey, outputValue] of Object.entries(outputs)) {\n const handler = createOutputHandler(outputValue, outputKey, registry, outputHandlers);\n const emitter = inst[outputKey];\n if (\n emitter != null &&\n typeof (\n emitter as { subscribe?: (fn: (v: unknown) => void) => { unsubscribe: () => void } }\n ).subscribe === 'function'\n ) {\n const sub = (\n emitter as { subscribe: (fn: (v: unknown) => void) => { unsubscribe: () => void } }\n ).subscribe((v: unknown) => handler(v));\n subs.push(sub as unknown as Subscription);\n }\n }\n return subs;\n }\n}\n","import { Directive, input, effect, ViewContainerRef, inject, DestroyRef } from '@angular/core';\nimport { BlockLoaderService, type BlockLoadResult } from './block-loader.service';\nimport type { BlockRegistry } from './block-registry';\nimport type { BlockDescription, BlockInput } from './block-description.schema';\nimport {\n safeParseBlockDescription,\n normalizeServices,\n isBlockReference,\n resolveBlockReference,\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\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 | null>(null);\n /** Handlers for component outputs; keys match descriptor.outputs. */\n readonly outputHandlers = input<Record<string, (value: unknown) => void>>({});\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; used when description is a block reference (id/blockId). */\n readonly blockDefinitions = input<Record<string, unknown> | null>(null);\n /** Model for the block. */\n readonly model = input<unknown | undefined>(undefined);\n\n private loadResult: BlockLoadResult | null = null;\n private loadedComponent: string | null = null;\n private loadedServicesKey: string | null = null;\n private loadGeneration = 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 outputHandlers = this.outputHandlers();\n const inputDefs = this.blockDefinitions();\n\n if (desc == null) {\n this.lastDescRef = null;\n this.lastParsedData = null;\n this.clear();\n return;\n }\n\n const resolved = isBlockReference(desc)\n ? resolveBlockReference(desc, inputDefs ?? undefined)\n : desc;\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 canUpdate =\n this.loadResult != null &&\n this.loadedComponent === data.component &&\n this.loadedServicesKey === servicesKey;\n\n if (canUpdate && this.loadResult) {\n this.loadResult.updateInputs(resolved);\n return;\n }\n\n this.clear();\n const registry = this.blockRegistry() ?? undefined;\n const generation = ++this.loadGeneration;\n this.loader\n .load(resolved, this.viewContainerRef, this.model, {\n outputHandlers: Object.keys(outputHandlers).length > 0 ? outputHandlers : undefined,\n registry,\n\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 })\n .catch((err: unknown) => {\n if (generation !== this.loadGeneration) return;\n console.error('Block load failed:', err);\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.loadResult) {\n this.loadResult.destroy();\n this.loadResult = null;\n this.loadedComponent = null;\n this.loadedServicesKey = 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-blocks-studio",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -536,21 +536,21 @@ declare class BlockDirective {
536
536
  type: "reference";
537
537
  reference: string;
538
538
  method: string;
539
- params?: Record<string, unknown> | unknown[] | undefined;
539
+ params?: unknown[] | Record<string, unknown> | undefined;
540
540
  then?: {
541
541
  reference: string;
542
542
  method: string;
543
- params?: Record<string, unknown> | unknown[] | undefined;
543
+ params?: unknown[] | Record<string, unknown> | undefined;
544
544
  }[] | undefined;
545
545
  onSuccess?: {
546
546
  reference: string;
547
547
  method: string;
548
- params?: Record<string, unknown> | unknown[] | undefined;
548
+ params?: unknown[] | Record<string, unknown> | undefined;
549
549
  } | undefined;
550
550
  onError?: {
551
551
  reference: string;
552
552
  method: string;
553
- params?: Record<string, unknown> | unknown[] | undefined;
553
+ params?: unknown[] | Record<string, unknown> | undefined;
554
554
  } | undefined;
555
555
  }> | undefined;
556
556
  } | null>;