{"version":3,"file":"acorex-platform-domain.mjs","sources":["../../../../libs/platform/domain/src/lib/provide-entity.ts","../../../../libs/platform/domain/src/lib/entity-definition-crud.token.ts","../../../../libs/platform/domain/src/lib/registries/property/property-extension.token.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain-extension.token.ts","../../../../libs/platform/domain/src/lib/domain.module.ts","../../../../libs/platform/domain/src/lib/models/aggregate.model.ts","../../../../libs/platform/domain/src/lib/models/module.model.ts","../../../../libs/platform/domain/src/lib/models/property.model.ts","../../../../libs/platform/domain/src/lib/models/entity-field.model.ts","../../../../libs/platform/domain/src/lib/models/entity.model.ts","../../../../libs/platform/domain/src/lib/models/relation.model.ts","../../../../libs/platform/domain/src/lib/helpers/module-helper.ts","../../../../libs/platform/domain/src/lib/registries/property/property-middleware.functions.ts","../../../../libs/platform/domain/src/lib/registries/property/property.registry.ts","../../../../libs/platform/domain/src/lib/registries/property/property.service.ts","../../../../libs/platform/domain/src/lib/registries/property/property-loader.interface.ts","../../../../libs/platform/domain/src/lib/registries/property/provide-property-loaders.ts","../../../../libs/platform/domain/src/lib/registries/property/provide-property-setups.ts","../../../../libs/platform/domain/src/lib/registries/property/provide-property-middleware.ts","../../../../libs/platform/domain/src/lib/registries/property/index.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain-middleware.interface.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain.registry.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain.service.ts","../../../../libs/platform/domain/src/lib/registries/domain/domain-loader.interface.ts","../../../../libs/platform/domain/src/lib/registries/domain/provide-domain-loaders.ts","../../../../libs/platform/domain/src/lib/registries/domain/provide-domain-middleware.ts","../../../../libs/platform/domain/src/lib/registries/domain/index.ts","../../../../libs/platform/domain/src/index.ts","../../../../libs/platform/domain/src/acorex-platform-domain.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\n/**\n * Token for entity CRUD setup. Consumed by AXPDomainModule.\n * The actual provider is provideEntity() from @acorex/platform/layout/entity\n * to avoid circular dependency (domain must not depend on layout/entity).\n */\nexport const AXP_ENTITY_CRUD_SETUP = new InjectionToken<void>('AXP_ENTITY_CRUD_SETUP');\n","import { InjectionToken } from '@angular/core';\nimport type {\n  AXPCommandRegistryRecord,\n  AXPInterfaceDefinition,\n  AXPMenuDefinitionRecord,\n  AXPPermissionGroupDefinitionRecord,\n  AXPPluginDefinition,\n  AXPQueryRegistryRecord,\n  AXPRelationDefinition,\n  AXPValidationRuleDefinition,\n  AXPWidgetCatalogRecord,\n} from '@acorex/platform/domain-contracts';\n\n//#region ----   Entity Definition CRUD Interface   ----\n\n/**\n * Service interface for CRUD operations on entity and related definition records stored in Dexie/Firestore.\n * Provided by connectivity mock when using Dexie or Firestore as entity definition source.\n * Use this service from anywhere in the app (not just mock).\n */\nexport interface AXPEntityDefinitionCrudService {\n  list(): Promise<{ name: string; module: string; entityName?: string }[]>;\n  getRaw(moduleName: string, entityName: string): Promise<Record<string, unknown> | null>;\n  create(entityName: string, definition: Record<string, unknown>): Promise<void>;\n  update(entityName: string, definition: Record<string, unknown>): Promise<void>;\n  delete(entityName: string): Promise<void>;\n\n  listInterfaces(): Promise<AXPInterfaceDefinition[]>;\n  listInterfacesByCategory(categoryName: string): Promise<AXPInterfaceDefinition[]>;\n  getInterface(name: string): Promise<AXPInterfaceDefinition | null>;\n  createInterface(name: string, definition: AXPInterfaceDefinition): Promise<void>;\n  updateInterface(name: string, definition: AXPInterfaceDefinition): Promise<void>;\n  deleteInterface(name: string): Promise<void>;\n\n  listPlugins(): Promise<AXPPluginDefinition[]>;\n  getPlugin(name: string): Promise<AXPPluginDefinition | null>;\n  createPlugin(name: string, definition: AXPPluginDefinition): Promise<void>;\n  updatePlugin(name: string, definition: AXPPluginDefinition): Promise<void>;\n  deletePlugin(name: string): Promise<void>;\n\n  listValidations(): Promise<AXPValidationRuleDefinition[]>;\n  getValidation(name: string): Promise<AXPValidationRuleDefinition | null>;\n  createValidation(name: string, definition: AXPValidationRuleDefinition): Promise<void>;\n  updateValidation(name: string, definition: AXPValidationRuleDefinition): Promise<void>;\n  deleteValidation(name: string): Promise<void>;\n\n  listRelations(): Promise<Array<AXPRelationDefinition & { id: string }>>;\n  getRelation(id: string): Promise<AXPRelationDefinition | null>;\n  createRelation(id: string, definition: AXPRelationDefinition): Promise<void>;\n  updateRelation(id: string, definition: AXPRelationDefinition): Promise<void>;\n  deleteRelation(id: string): Promise<void>;\n\n  listModules(): Promise<Array<{ name: string; title?: string; icon?: string }>>;\n  getModule(name: string): Promise<{ name: string; title?: string; icon?: string } | null>;\n  createModule(name: string, definition: { name: string; title?: string; icon?: string }): Promise<void>;\n  updateModule(name: string, definition: { name: string; title?: string; icon?: string }): Promise<void>;\n  deleteModule(name: string): Promise<void>;\n\n  listAggregates(filter?: { module?: string }): Promise<Array<{ id: string; definition: Record<string, unknown> }>>;\n  getAggregate(id: string): Promise<Record<string, unknown> | null>;\n  createAggregate(id: string, definition: Record<string, unknown>): Promise<void>;\n  updateAggregate(id: string, definition: Record<string, unknown>): Promise<void>;\n  deleteAggregate(id: string): Promise<void>;\n\n  listMenus(): Promise<Array<{ id: string; definition: AXPMenuDefinitionRecord }>>;\n  getMenu(id: string): Promise<AXPMenuDefinitionRecord | null>;\n  createMenu(id: string, definition: AXPMenuDefinitionRecord): Promise<void>;\n  updateMenu(id: string, definition: AXPMenuDefinitionRecord): Promise<void>;\n  deleteMenu(id: string): Promise<void>;\n\n  listPermissionGroups(): Promise<Array<{ id: string; definition: AXPPermissionGroupDefinitionRecord }>>;\n  getPermissionGroup(id: string): Promise<AXPPermissionGroupDefinitionRecord | null>;\n  createPermissionGroup(id: string, definition: AXPPermissionGroupDefinitionRecord): Promise<void>;\n  updatePermissionGroup(id: string, definition: AXPPermissionGroupDefinitionRecord): Promise<void>;\n  deletePermissionGroup(id: string): Promise<void>;\n\n  listCommands(): Promise<Array<{ id: string; definition: AXPCommandRegistryRecord }>>;\n  getCommand(id: string): Promise<AXPCommandRegistryRecord | null>;\n  createCommand(id: string, definition: AXPCommandRegistryRecord): Promise<void>;\n  updateCommand(id: string, definition: AXPCommandRegistryRecord): Promise<void>;\n  deleteCommand(id: string): Promise<void>;\n\n  listQueries(): Promise<Array<{ id: string; definition: AXPQueryRegistryRecord }>>;\n  getQuery(id: string): Promise<AXPQueryRegistryRecord | null>;\n  createQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;\n  updateQuery(id: string, definition: AXPQueryRegistryRecord): Promise<void>;\n  deleteQuery(id: string): Promise<void>;\n\n  listWidgets(): Promise<Array<{ id: string; definition: AXPWidgetCatalogRecord }>>;\n  getWidget(id: string): Promise<AXPWidgetCatalogRecord | null>;\n  createWidget(id: string, definition: AXPWidgetCatalogRecord): Promise<void>;\n  updateWidget(id: string, definition: AXPWidgetCatalogRecord): Promise<void>;\n  deleteWidget(id: string): Promise<void>;\n}\n\n//#endregion\n\n//#region ----   Injection Token   ----\n\nexport const AXP_ENTITY_DEFINITION_CRUD_SERVICE = new InjectionToken<AXPEntityDefinitionCrudService | null>(\n  'AXP_ENTITY_DEFINITION_CRUD_SERVICE',\n  {\n    providedIn: null,\n    factory: () => null,\n  }\n);\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport { AXPPropertyMiddleware } from './property.middleware';\n\n//#region ----   Dependency Injection Tokens   ----\n\n/**\n * Targeted middleware extension (name or regex) for property resolution.\n */\nexport const AXP_PROPERTY_EXTENSION = new InjectionToken<{\n    target: string | RegExp;\n    middleware: AXPPropertyMiddleware;\n}>('AXP_PROPERTY_EXTENSION');\n\n/**\n * Bootstrap hook: register property definitions known at build time.\n */\nexport const AXP_PROPERTY_SETUP = new InjectionToken<void>('AXP_PROPERTY_SETUP');\n\n/**\n * Bootstrap hook: register global middleware for every property resolution.\n */\nexport const AXP_PROPERTY_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_PROPERTY_MIDDLEWARE_SETUP');\n\n/**\n * Bootstrap hook: register on-demand property loaders.\n */\nexport const AXP_PROPERTY_LOADER_SETUP = new InjectionToken<void>('AXP_PROPERTY_LOADER_SETUP');\n\n//#endregion ","import { InjectionToken } from '@angular/core';\nimport { AXPDomainMiddleware } from './domain-middleware.interface';\n\n//#region ----   Dependency Injection Tokens   ----\n\n/**\n * Injection token for schema-specific middleware extensions.\n * \n * Used for targeted middleware that applies only to schemas matching\n * specific patterns (name or regex). This enables fine-grained control\n * over which schemas receive which middleware.\n */\nexport const AXP_DOMAIN_EXTENSION = new InjectionToken<{\n    target: string | RegExp;\n    middleware: AXPDomainMiddleware;\n}>('AXP_DOMAIN_EXTENSION');\n\n/**\n * Injection token for schema setup initialization.\n * \n * Used during application bootstrap to register schemas that are\n * known at build time. Multiple providers can use this token to\n * contribute schemas to the registry.\n */\nexport const AXP_DOMAIN_SETUP = new InjectionToken<void>('AXP_DOMAIN_SETUP');\n\n/**\n * Injection token for schema middleware setup initialization.\n * \n * Used during application bootstrap to register global middleware\n * that applies to all schema resolutions. This enables centralized\n * schema processing logic.\n */\nexport const AXP_DOMAIN_MIDDLEWARE_SETUP = new InjectionToken<void>('AXP_DOMAIN_MIDDLEWARE_SETUP');\n\n/**\n * Injection token for schema loader setup initialization.\n * \n * Used during application bootstrap to register schema loaders\n * that can provide schemas on-demand when they're not found in\n * the registry.\n */\nexport const AXP_DOMAIN_LOADER_SETUP = new InjectionToken<void>('AXP_DOMAIN_LOADER_SETUP');\n\n//#endregion ","import { AXPRuntimeModule } from \"@acorex/platform/runtime\";\nimport { NgModule, inject } from \"@angular/core\";\nimport { AXP_ENTITY_CRUD_SETUP } from \"./provide-entity\";\nimport { AXP_PROPERTY_LOADER_SETUP, AXP_PROPERTY_MIDDLEWARE_SETUP, AXP_PROPERTY_SETUP } from \"./registries/property/property-extension.token\";\nimport { AXP_DOMAIN_LOADER_SETUP, AXP_DOMAIN_MIDDLEWARE_SETUP, AXP_DOMAIN_SETUP } from \"./registries/domain/domain-extension.token\";\n\n@NgModule({\n    imports: [\n        AXPRuntimeModule\n    ]\n})\nexport class AXPDomainModule {\n    private _commandSetup = inject(AXP_ENTITY_CRUD_SETUP, { optional: true });\n\n    /**\n     * Optional bootstrap hooks for registered property definitions (see {@link AXP_PROPERTY_SETUP} and related tokens).\n     */\n    private _propertySetup = inject(AXP_PROPERTY_SETUP, { optional: true });\n    private _propertyMiddlewareSetup = inject(AXP_PROPERTY_MIDDLEWARE_SETUP, { optional: true });\n    private _propertyLoaderSetup = inject(AXP_PROPERTY_LOADER_SETUP, { optional: true });\n\n    /**\n     * Injection token for domain loader setup initialization.\n     * \n     * Used during application bootstrap to register domain loaders\n     * that can provide domain definitions on-demand when they're not found in\n     * the registry.\n     */\n\n    private _domainLoaderSetup = inject(AXP_DOMAIN_LOADER_SETUP, { optional: true });\n    private _domainMiddlewareSetup = inject(AXP_DOMAIN_MIDDLEWARE_SETUP, { optional: true });\n    private _domainSetup = inject(AXP_DOMAIN_SETUP, { optional: true });\n}","import { AXPValidationRules } from '@acorex/platform/contracts';\n\nimport { AXPAggregateDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPDomainAction } from '@acorex/platform/domain-contracts';\n\n//#region ----   AXPAggregateModel   ----\n\n/**\n * Simple runtime model for aggregate definitions with parent references and navigation helpers.\n * Relations are stored in a separate collection; join when needed.\n */\nexport class AXPAggregateModel {\n    public readonly name: string;\n    public readonly title: string;\n    public readonly validations: AXPValidationRules;\n    public readonly actions: AXPDomainAction[];\n    public readonly parent: any; // Will be AXPModuleModel, using any to avoid circular dependency\n    public readonly entityReferences: Record<string, string>; // Just string references\n\n    constructor(definition: AXPAggregateDefinition, parent: any) {\n        this.name = definition.name;\n        this.title = definition.title;\n        this.validations = definition.validations || [];\n        this.actions = definition.actions || [];\n        this.parent = parent;\n\n        // Extract entity references - convert all formats to simple string map\n        this.entityReferences = this.extractEntityReferences(definition.entities);\n    }\n\n    //#endregion\n\n    //#region ----   Entity Reference Extraction   ----\n\n    /**\n     * Extract entity references from various entity definition formats\n     * and convert to simple string map\n     */\n    private extractEntityReferences(entities: any): Record<string, string> {\n        if (!entities) {\n            return {};\n        }\n\n        if (Array.isArray(entities)) {\n            // Format 1: Array of entity definitions - convert to self-references\n            const references: Record<string, string> = {};\n            for (const entity of entities) {\n                if (entity.name) {\n                    // Self-reference format: module.aggregate.entity\n                    references[entity.name] = `${this.parent.name}.${this.name}.${entity.name}`;\n                }\n            }\n            return references;\n        }\n\n        if (typeof entities === 'object') {\n            // Format 2: Object with string references - use as-is\n            return { ...entities };\n        }\n\n        return {};\n    }\n\n    //#endregion\n\n    //#region ----   Navigation Helpers   ----\n\n    /**\n     * Get entity reference by name\n     * \n     * @param entityName Name of the entity\n     * @returns Entity reference string or undefined if not found\n     */\n    getEntityReference(entityName: string): string | undefined {\n        return this.entityReferences[entityName];\n    }\n\n    /**\n     * Get full path for an entity in this aggregate\n     * \n     * @param entityName Name of the entity\n     * @returns Full entity path\n     */\n    getEntityPath(entityName: string): string {\n        return `${this.parent.name}.${this.name}.${entityName}`;\n    }\n\n    /**\n     * Get all available entity names\n     * \n     * @returns Array of entity names\n     */\n    getEntityNames(): string[] {\n        return Object.keys(this.entityReferences);\n    }\n\n    /**\n     * Check if entity exists in this aggregate\n     * \n     * @param entityName Name of the entity\n     * @returns True if entity exists\n     */\n    hasEntity(entityName: string): boolean {\n        return entityName in this.entityReferences;\n    }\n\n    //#endregion\n\n    //#region ----   Parent Navigation   ----\n\n    /**\n     * Get parent module\n     * \n     * @returns Parent module model\n     */\n    getModule(): any {\n        return this.parent;\n    }\n\n    /**\n     * Get full aggregate path (module.aggregate)\n     * \n     * @returns Full path string\n     */\n    getPath(): string {\n        return `${this.parent.name}.${this.name}`;\n    }\n\n    //#endregion\n\n    //#region ----   Utility Methods   ----\n\n    /**\n     * Get aggregate statistics\n     * \n     * @returns Statistics object\n     */\n    getStatistics(): {\n        entityCount: number;\n        actionCount: number;\n        validationCount: number;\n    } {\n        return {\n            entityCount: Object.keys(this.entityReferences).length,\n            actionCount: this.actions.length,\n            validationCount: this.validations.length\n        };\n    }\n\n    /**\n     * Convert back to interface definition\n     *\n     * @returns Aggregate definition\n     */\n    toDefinition(): AXPAggregateDefinition {\n        return {\n            name: this.name,\n            title: this.title,\n            entities: this.entityReferences, // Return as reference map\n            validations: this.validations,\n            actions: this.actions\n        };\n    }\n\n    //#endregion\n\n    //#region ----   Validation Methods   ----\n\n    /**\n     * Validate the aggregate structure (synchronous validation only)\n     * \n     * @returns Array of validation errors\n     */\n    validate(): string[] {\n        const errors: string[] = [];\n\n        // Validate aggregate structure\n        if (!this.name) errors.push('Aggregate name is required');\n        if (!this.title) errors.push('Aggregate title is required');\n\n        // Validate entity references\n        for (const [entityName, entityRef] of Object.entries(this.entityReferences)) {\n            if (!entityRef || typeof entityRef !== 'string') {\n                errors.push(`Invalid entity reference for '${entityName}': must be a non-empty string`);\n            }\n        }\n\n        return errors;\n    }\n\n    //#endregion\n}\n\n//#endregion ","import { AXPModuleDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPAggregateModel } from \"./aggregate.model\";\n\n//#region ----   AXPModuleModel   ----\n\n/**\n * Simple runtime model for module definitions with navigation helpers.\n * \n * This model is a pure data structure that provides:\n * - Access to module properties and metadata\n * - Navigation helpers for finding aggregates\n * - Hierarchy navigation and path generation\n * \n * All loading and resolution logic has been moved to AXPDomainRegistry.\n */\nexport class AXPModuleModel {\n    public readonly name: string;\n    public readonly title: string;\n    public readonly aggregates: AXPAggregateModel[] = [];\n\n    constructor(definition: AXPModuleDefinition) {\n        this.name = definition.name;\n        this.title = definition.title;\n\n        // Initialize aggregates with parent reference (simplified constructor)\n        this.aggregates = (definition.aggregates || []).map(aggDef =>\n            new AXPAggregateModel(aggDef, this)\n        );\n    }\n\n    //#endregion\n\n    //#region ----   Navigation Helpers   ----\n\n    /**\n     * Find aggregate by name\n     * \n     * @param name Aggregate name\n     * @returns Aggregate model or undefined if not found\n     */\n    findAggregate(name: string): AXPAggregateModel | undefined {\n        return this.aggregates.find(agg => agg.name === name);\n    }\n\n    /**\n     * Get all aggregates\n     * \n     * @returns Array of all aggregate models\n     */\n    getAllAggregates(): AXPAggregateModel[] {\n        return [...this.aggregates];\n    }\n\n    /**\n     * Check if aggregate exists in this module\n     * \n     * @param name Aggregate name\n     * @returns True if aggregate exists\n     */\n    hasAggregate(name: string): boolean {\n        return this.aggregates.some(agg => agg.name === name);\n    }\n\n    /**\n     * Get all aggregate names\n     * \n     * @returns Array of aggregate names\n     */\n    getAggregateNames(): string[] {\n        return this.aggregates.map(agg => agg.name);\n    }\n\n    /**\n     * Find entity reference across all aggregates\n     * \n     * @param entityName Entity name to search for\n     * @returns Object with aggregate and entity reference, or undefined if not found\n     */\n    findEntityReference(entityName: string): { aggregate: AXPAggregateModel; entityReference: string } | undefined {\n        for (const aggregate of this.aggregates) {\n            const entityReference = aggregate.getEntityReference(entityName);\n            if (entityReference) {\n                return { aggregate, entityReference };\n            }\n        }\n        return undefined;\n    }\n\n    /**\n     * Get entity path for a specific entity in a specific aggregate\n     * \n     * @param aggregateName Aggregate name\n     * @param entityName Entity name\n     * @returns Full entity path\n     */\n    getEntityPath(aggregateName: string, entityName: string): string {\n        return `${this.name}.${aggregateName}.${entityName}`;\n    }\n\n    /**\n     * Get aggregate path\n     * \n     * @param aggregateName Aggregate name\n     * @returns Full aggregate path\n     */\n    getAggregatePath(aggregateName: string): string {\n        return `${this.name}.${aggregateName}`;\n    }\n\n    //#endregion\n\n    //#region ----   Query Methods   ----\n\n    /**\n     * Get all entity references across all aggregates\n     * \n     * @returns Map of entity name to full path\n     */\n    getAllEntityReferences(): Record<string, string> {\n        const allReferences: Record<string, string> = {};\n\n        for (const aggregate of this.aggregates) {\n            const aggregateReferences = aggregate.entityReferences;\n            for (const [entityName, entityRef] of Object.entries(aggregateReferences)) {\n                // Use full path as key to avoid conflicts\n                const fullKey = `${aggregate.name}.${entityName}`;\n                allReferences[fullKey] = entityRef;\n            }\n        }\n\n        return allReferences;\n    }\n\n    /**\n     * Relations are stored in a separate collection. Use relation queries for join when needed.\n     * @deprecated Relations are no longer nested in aggregates.\n     */\n    getAllRelations(): Array<{ aggregate: AXPAggregateModel; relation: any }> {\n        return [];\n    }\n\n    //#endregion\n\n    //#region ----   Validation Methods   ----\n\n    /**\n     * Validate the module structure (synchronous validation only)\n     * \n     * @returns Array of validation errors\n     */\n    validate(): string[] {\n        const errors: string[] = [];\n\n        // Validate module structure\n        if (!this.name) errors.push('Module name is required');\n        if (!this.title) errors.push('Module title is required');\n\n        // Check for duplicate aggregate names\n        const aggregateNames = this.aggregates.map(agg => agg.name);\n        const duplicateNames = aggregateNames.filter((name, index) => aggregateNames.indexOf(name) !== index);\n        if (duplicateNames.length > 0) {\n            errors.push(`Duplicate aggregate names: ${duplicateNames.join(', ')}`);\n        }\n\n        // Validate aggregates\n        for (const aggregate of this.aggregates) {\n            const aggErrors = aggregate.validate();\n            if (aggErrors.length > 0) {\n                errors.push(...aggErrors.map((err: string) => `${aggregate.name}: ${err}`));\n            }\n        }\n\n        return errors;\n    }\n\n    //#endregion\n\n    //#region ----   Utility Methods   ----\n\n    /**\n     * Get module statistics\n     * \n     * @returns Statistics object\n     */\n    getStatistics(): {\n        aggregateCount: number;\n        entityCount: number;\n        actionCount: number;\n        validationCount: number;\n    } {\n        const aggregateStats = this.aggregates.map(agg => agg.getStatistics());\n\n        return {\n            aggregateCount: this.aggregates.length,\n            entityCount: aggregateStats.reduce((sum, stat) => sum + stat.entityCount, 0),\n            actionCount: aggregateStats.reduce((sum, stat) => sum + stat.actionCount, 0),\n            validationCount: aggregateStats.reduce((sum, stat) => sum + stat.validationCount, 0)\n        };\n    }\n\n    /**\n     * Convert back to interface definition\n     * \n     * @returns Module definition\n     */\n    toDefinition(): AXPModuleDefinition {\n        return {\n            name: this.name,\n            title: this.title,\n            aggregates: this.aggregates.map(agg => agg.toDefinition())\n        };\n    }\n\n    //#endregion\n}\n\n//#endregion ","import { AXPDataType, AXPMetaData, AXPOptionsData, AXPValidationRules } from '@acorex/platform/contracts';\nimport { AXPPropertyDefinition, AXPPropertyFeatures } from '@acorex/platform/domain-contracts';\nimport { AXPInterfaceDefinitionValue } from '@acorex/platform/domain-contracts';\n\n//#region ----   AXPPropertyModel   ----\n\n/**\n * Runtime model for a {@link AXPPropertyDefinition} with helper methods.\n */\nexport class AXPPropertyModel {\n    public readonly name: string;\n    public readonly title: string;\n    public readonly interface: AXPInterfaceDefinitionValue;\n    public readonly validations: AXPValidationRules;\n    public readonly features: AXPPropertyFeatures;\n    public readonly metadata?: AXPMetaData;\n    public readonly description?: string;\n    public readonly icon?: string;\n    public readonly defaultValue?: unknown;\n    public readonly disabled?: boolean;\n    public readonly dataType: AXPDataType;\n\n    constructor(definition: AXPPropertyDefinition) {\n        this.name = definition.name;\n        this.title = definition.title;\n        this.interface = definition.interface;\n        this.disabled = definition.disabled;\n        this.dataType = definition.dataType ?? 'string';\n        this.validations = definition.validations ?? [];\n        this.features = definition.features ?? {};\n        this.metadata = definition.metadata;\n        this.description = definition.description;\n        this.icon = definition.icon;\n        this.defaultValue = definition.defaultValue;\n    }\n\n    //#endregion\n\n    /**\n     * Get widget options\n     */\n    public getWidgetOptions(): AXPOptionsData | undefined {\n        return this.interface.options;\n    }\n\n    /**\n     * Check if the property is disabled\n     */\n    public isDisabled(): boolean {\n        return this.disabled ?? false;\n    }\n\n    //#endregion\n\n    //#region ----   Feature Methods   ----\n\n    /**\n     * Check if searchable\n     */\n    public isSearchable(): boolean {\n        return this.features.searchable?.enabled ?? false;\n    }\n\n    /**\n     * Check if full text searchable\n     */\n    public isFullTextSearchable(): boolean {\n        return this.features.searchable?.fullText ?? false;\n    }\n\n    /**\n     * Check if filterable\n     */\n    public isFilterable(): boolean {\n        return this.features.filterable?.enabled ?? false;\n    }\n\n    /**\n     * Check if inline filterable\n     */\n    public isInlineFilterable(): boolean {\n        return this.features.filterable?.inline ?? false;\n    }\n\n    /**\n     * Check if sortable\n     */\n    public isSortable(): boolean {\n        return this.features.sortable?.enabled ?? false;\n    }\n\n    /**\n     * Check if auditable\n     */\n    public isAuditable(): boolean {\n        return this.features.auditable?.enabled ?? false;\n    }\n\n    //#endregion\n\n    //#region ----   Validation Methods   ----\n\n    /**\n     * Validate the property definition structure\n     */\n    public async validate(): Promise<string[]> {\n        const errors: string[] = [];\n\n        // Validate interface\n        if (!this.interface.name) {\n            errors.push('Widget type is required');\n        }\n\n        return errors;\n    }\n\n    //#endregion\n\n    //#region ----   Utility Methods   ----\n\n    /**\n     * Get property capabilities\n     */\n    public getCapabilities(): {\n        searchable: boolean;\n        fullTextSearchable: boolean;\n        filterable: boolean;\n        inlineFilterable: boolean;\n        sortable: boolean;\n        auditable: boolean;\n        disabled: boolean;\n    } {\n        return {\n            searchable: this.isSearchable(),\n            fullTextSearchable: this.isFullTextSearchable(),\n            filterable: this.isFilterable(),\n            inlineFilterable: this.isInlineFilterable(),\n            sortable: this.isSortable(),\n            auditable: this.isAuditable(),\n            disabled: this.isDisabled()\n        };\n    }\n\n    /**\n     * Get property summary\n     */\n    public getSummary(): {\n        widget: string;\n        hasOptions: boolean;\n        hasMetadata: boolean;\n        hasValidations: boolean;\n        capabilityCount: number;\n    } {\n        const capabilities = this.getCapabilities();\n        const capabilityCount = Object.values(capabilities).filter(Boolean).length;\n\n        return {\n            widget: this.interface.name,\n            hasOptions: !!this.interface.options,\n            hasMetadata: !!this.metadata,\n            hasValidations: !!this.validations && this.validations.length > 0,\n            capabilityCount\n        };\n    }\n\n    /**\n     * Convert back to interface definition\n     */\n    public toDefinition(): AXPPropertyDefinition {\n        return {\n            name: this.name,\n            title: this.title,\n            description: this.description,\n            icon: this.icon,\n            dataType: this.dataType,\n            defaultValue: this.defaultValue,\n            disabled: this.disabled,\n            interface: this.interface,\n            validations: this.validations,\n            features: this.features,\n            metadata: this.metadata\n        };\n    }\n\n    //#endregion\n} ","import { AXPValidationRules } from '@acorex/platform/contracts';\nimport {\n    AXPEntityPropertyFeatures,\n    AXPEntityPropertyDefinition,\n} from '@acorex/platform/domain-contracts';\nimport { AXPDomainAction } from '@acorex/platform/domain-contracts';\nimport { AXPPropertyDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPPropertyModel } from \"./property.model\";\nimport { AXPPropertyService } from \"../registries/property\";\n\n//#region ----   Property definition helpers   ----\n\n/**\n * Strips entity-only fields so the payload matches {@link AXPPropertyDefinition}.\n */\nexport function toPropertyDefinition(def: AXPEntityPropertyDefinition): AXPPropertyDefinition {\n    const { actions, fieldFeatures, ...propertyDefinition } = def;\n    return propertyDefinition;\n}\n\n//#endregion\n\n//#region ----   AXPEntityFieldModel   ----\n\n/**\n * Runtime model for entity field definitions with parent references and helper methods\n */\nexport class AXPEntityFieldModel {\n    public readonly name: string;\n    public readonly title: string;\n    public readonly description?: string;\n    public readonly validations?: AXPValidationRules;\n    public readonly actions?: AXPDomainAction[];\n    public readonly fieldFeatures?: AXPEntityPropertyFeatures;\n    public readonly defaultValue?: unknown;\n    /** Resolved property definition model (interface, validations, features). */\n    public readonly property: AXPPropertyModel;\n    /** Same as entity field name; aligns with registered property definition name when applicable. */\n    public readonly propertyName: string;\n    public readonly parent: any; // Will be AXPEntityModel, using any to avoid circular dependency\n    public readonly propertyService: AXPPropertyService;\n\n    private readonly entityPropertyDefinition: AXPEntityPropertyDefinition;\n\n    constructor(definition: AXPEntityPropertyDefinition, parent: any, propertyService: AXPPropertyService) {\n        this.entityPropertyDefinition = definition;\n        this.name = definition.name;\n        this.title = definition.title;\n        this.description = definition.description;\n        this.validations = definition.validations;\n        this.actions = definition.actions;\n        this.fieldFeatures = definition.fieldFeatures;\n        this.defaultValue = definition.defaultValue;\n        this.parent = parent;\n        this.propertyService = propertyService;\n\n        this.property = new AXPPropertyModel(toPropertyDefinition(definition));\n        this.propertyName = definition.name;\n    }\n\n    //#region ----   Feature Check Methods   ----\n\n    /**\n     * Check if field is nullable\n     */\n    public isNullable(): boolean {\n        return this.fieldFeatures?.nullable ?? false;\n    }\n\n    /**\n     * Check if field is readonly\n     */\n    public isReadonly(): boolean {\n        return this.fieldFeatures?.readOnly ?? false;\n    }\n\n    /**\n     * Check if field is required (has required validation)\n     */\n    public isRequired(): boolean {\n        return this.validations?.some((validation) => validation.rule === \"required\") ?? false;\n    }\n\n    /**\n     * Check if field is searchable\n     */\n    public isSearchable(): boolean {\n        return this.property.features?.searchable?.enabled ?? false;\n    }\n\n    /**\n     * Check if field supports full text search\n     */\n    public isFullTextSearchable(): boolean {\n        return this.property.features?.searchable?.fullText ?? false;\n    }\n\n    /**\n     * Check if field is filterable\n     */\n    public isFilterable(): boolean {\n        return this.property.features?.filterable?.enabled ?? false;\n    }\n\n    /**\n     * Check if field has inline filtering\n     */\n    public hasInlineFiltering(): boolean {\n        return this.property.features?.filterable?.inline ?? false;\n    }\n\n    /**\n     * Check if field is sortable\n     */\n    public isSortable(): boolean {\n        return this.property.features?.sortable?.enabled ?? false;\n    }\n\n    /**\n     * Check if field is auditable\n     */\n    public isAuditable(): boolean {\n        return this.property.features?.auditable?.enabled ?? false;\n    }\n\n    //#endregion\n\n    //#region ----   Property info   ----\n\n    /**\n     * Registered property name (same as entity field name in the embedded model).\n     */\n    public getPropertyName(): string {\n        return this.propertyName;\n    }\n\n    /**\n     * Registration metadata when this field's definition name is registered; otherwise embedded summary.\n     */\n    public getPropertyInfo(): unknown {\n        if (this.propertyService.isRegistered(this.property.name)) {\n            return this.propertyService.getRegisteredProperty(this.property.name);\n        }\n        return this.property.getSummary();\n    }\n\n    /**\n     * Rebuild the property model from embedded definition (e.g. after definition updates).\n     */\n    public refreshProperty(): void {\n        (this as { property: AXPPropertyModel }).property = new AXPPropertyModel(\n            toPropertyDefinition(this.entityPropertyDefinition)\n        );\n    }\n\n    //#endregion\n\n    //#region ----   Navigation Methods   ----\n\n    /**\n     * Get parent entity\n     */\n    public getEntity(): any {\n        return this.parent;\n    }\n\n    /**\n     * Get parent aggregate\n     */\n    public getAggregate(): any {\n        return this.parent?.parent;\n    }\n\n    /**\n     * Get parent module\n     */\n    public getModule(): any {\n        return this.parent?.parent?.parent;\n    }\n\n    /**\n     * Get full path (module.aggregate.entity.field)\n     */\n    public getPath(): string {\n        return `${this.parent.parent.parent.name}.${this.parent.parent.name}.${this.parent.name}.${this.name}`;\n    }\n\n    //#endregion\n\n    //#region ----   Validation Methods   ----\n\n    /**\n     * Validate the field structure\n     */\n    public async validate(): Promise<string[]> {\n        const errors: string[] = [];\n\n        if (!this.name) errors.push(\"Field name is required\");\n        if (!this.title) errors.push(\"Field title is required\");\n\n        if (!this.property.interface?.name) {\n            errors.push(\"Widget type (interface.name) is required\");\n        }\n\n        if (this.property) {\n            const propertyErrors = await this.property.validate();\n            if (propertyErrors.length > 0) {\n                errors.push(...propertyErrors.map((err) => `Property: ${err}`));\n            }\n        }\n\n        return errors;\n    }\n\n    //#endregion\n\n    //#region ----   Utility Methods   ----\n\n    /**\n     * Get field statistics\n     */\n    public getStatistics(): {\n        hasValidations: boolean;\n        hasActions: boolean;\n        hasFieldFeatures: boolean;\n        hasDefaultValue: boolean;\n        validationCount: number;\n        actionCount: number;\n    } {\n        return {\n            hasValidations: !!this.validations && this.validations.length > 0,\n            hasActions: !!this.actions && this.actions.length > 0,\n            hasFieldFeatures: !!this.fieldFeatures,\n            hasDefaultValue: this.defaultValue !== undefined,\n            validationCount: this.validations?.length ?? 0,\n            actionCount: this.actions?.length ?? 0,\n        };\n    }\n\n    /**\n     * Get field capabilities\n     */\n    public getCapabilities(): {\n        searchable: boolean;\n        filterable: boolean;\n        sortable: boolean;\n        auditable: boolean;\n        nullable: boolean;\n        readonly: boolean;\n        required: boolean;\n    } {\n        return {\n            searchable: this.isSearchable(),\n            filterable: this.isFilterable(),\n            sortable: this.isSortable(),\n            auditable: this.isAuditable(),\n            nullable: this.isNullable(),\n            readonly: this.isReadonly(),\n            required: this.isRequired(),\n        };\n    }\n\n    /**\n     * Convert back to interface definition\n     */\n    public toDefinition(): AXPEntityPropertyDefinition {\n        return {\n            ...this.property.toDefinition(),\n            actions: this.actions,\n            fieldFeatures: this.fieldFeatures,\n        };\n    }\n}\n\n//#endregion\n","    \nimport { AXPEntityDefinition, AXPEntityType } from '@acorex/platform/domain-contracts';\nimport { AXPEntityFieldModel } from \"./entity-field.model\";\nimport { AXPPropertyService } from \"../registries/property\";\n\n//#region ----   AXPEntityModel   ----\n\n/**\n * Runtime model for entity definitions with parent references and helper methods\n */\nexport class AXPEntityModel {\n    public readonly name: string;\n    public readonly title: string;\n    public readonly fields: AXPEntityFieldModel[] = [];\n    public readonly type: AXPEntityType;\n    public readonly parent: any; // Will be AXPAggregateModel, using any to avoid circular dependency\n    public readonly propertyService: AXPPropertyService;\n\n    constructor(definition: AXPEntityDefinition, parent: any, propertyService: AXPPropertyService) {\n        this.name = definition.name;\n        this.title = definition.title;\n        this.type = definition.type;\n        this.parent = parent;\n        this.propertyService = propertyService;\n\n        // Initialize fields with parent reference and property service\n        this.fields = definition.fields.map(fieldDef =>\n            new AXPEntityFieldModel(fieldDef, this, propertyService)\n        );\n    }\n\n    //#endregion\n\n    //#region ----   Query Methods   ----\n\n    /**\n     * Find field by name\n     */\n    public findField(name: string): AXPEntityFieldModel | undefined {\n        return this.fields.find(field => field.name === name);\n    }\n\n    /**\n     * Get all fields\n     */\n    public getAllFields(): AXPEntityFieldModel[] {\n        return [...this.fields];\n    }\n\n    /**\n     * Get required fields\n     */\n    public getRequiredFields(): AXPEntityFieldModel[] {\n        return this.fields.filter(field => field.isRequired());\n    }\n\n    /**\n     * Get readonly fields\n     */\n    public getReadonlyFields(): AXPEntityFieldModel[] {\n        return this.fields.filter(field => field.isReadonly());\n    }\n\n    /**\n     * Get searchable fields\n     */\n    public getSearchableFields(): AXPEntityFieldModel[] {\n        return this.fields.filter(field => field.isSearchable());\n    }\n\n    /**\n     * Get filterable fields\n     */\n    public getFilterableFields(): AXPEntityFieldModel[] {\n        return this.fields.filter(field => field.isFilterable());\n    }\n\n    /**\n     * Get sortable fields\n     */\n    public getSortableFields(): AXPEntityFieldModel[] {\n        return this.fields.filter(field => field.isSortable());\n    }\n\n    //#endregion\n\n    //#region ----   Type Checking Methods   ----\n\n    /**\n     * Check if this entity is an aggregate root\n     */\n    public isAggregateRoot(): boolean {\n        return this.type === AXPEntityType.AggregateRoot;\n    }\n\n    /**\n     * Check if this entity is a regular entity\n     */\n    public isEntity(): boolean {\n        return this.type === AXPEntityType.Entity;\n    }\n\n    /**\n     * Check if this entity is a value object\n     */\n    public isValueObject(): boolean {\n        return this.type === AXPEntityType.ValueObject;\n    }\n\n    //#endregion\n\n    //#region ----   Navigation Methods   ----\n\n    /**\n     * Get parent aggregate\n     */\n    public getAggregate(): any {\n        return this.parent;\n    }\n\n    /**\n     * Get parent module\n     */\n    public getModule(): any {\n        return this.parent?.parent;\n    }\n\n    /**\n     * Get full path (module.aggregate.entity)\n     */\n    public getPath(): string {\n        return `${this.parent.parent.name}.${this.parent.name}.${this.name}`;\n    }\n\n    //#endregion\n\n    //#region ----   Validation Methods   ----\n\n    /**\n     * Validate the entity structure\n     */\n    public async validate(): Promise<string[]> {\n        const errors: string[] = [];\n\n        // Validate entity structure\n        if (!this.name) errors.push('Entity name is required');\n        if (!this.title) errors.push('Entity title is required');\n\n        // Validate fields\n        for (const field of this.fields) {\n            const fieldErrors = await field.validate();\n            if (fieldErrors.length > 0) {\n                errors.push(...fieldErrors.map(err => `${field.name}: ${err}`));\n            }\n        }\n\n        return errors;\n    }\n\n    //#endregion\n\n    //#region ----   Utility Methods   ----\n\n    /**\n     * Get entity statistics\n     */\n    public getStatistics(): {\n        fieldCount: number;\n        requiredFieldCount: number;\n        readonlyFieldCount: number;\n        searchableFieldCount: number;\n        filterableFieldCount: number;\n        sortableFieldCount: number;\n    } {\n        return {\n            fieldCount: this.fields.length,\n            requiredFieldCount: this.getRequiredFields().length,\n            readonlyFieldCount: this.getReadonlyFields().length,\n            searchableFieldCount: this.getSearchableFields().length,\n            filterableFieldCount: this.getFilterableFields().length,\n            sortableFieldCount: this.getSortableFields().length\n        };\n    }\n\n    /**\n     * Convert back to interface definition\n     */\n    public toDefinition(): AXPEntityDefinition {\n        return {\n            name: this.name,\n            title: this.title,\n            fields: this.fields.map(field => field.toDefinition()),\n            type: this.type\n        };\n    }\n\n    //#endregion\n} ","import {\n    AXPRelationDefinition,\n    AXPRelationshipCardinality,\n    AXPRelationshipKind,\n} from '@acorex/platform/domain-contracts';\n\n//#region ----   AXPRelationModel   ----\n\n/**\n * Runtime model for standalone relation definitions.\n * Relations live in their own collection; join when needed.\n */\nexport class AXPRelationModel {\n    public readonly type: AXPRelationshipCardinality;\n    public readonly kind: AXPRelationshipKind;\n    public readonly target: {\n        aggregate: string;\n        entity: string;\n        key: string;\n    };\n    public readonly source: {\n        aggregate: string;\n        entity: string;\n        key: string;\n    };\n    public readonly isRequired: boolean;\n    public readonly parent: any; // Will be AXPAggregateModel, using any to avoid circular dependency\n\n    constructor(definition: AXPRelationDefinition, parent: any) {\n        this.type = definition.type;\n        this.kind = definition.kind;\n        this.target = { ...definition.target };\n        this.source = { ...definition.source };\n        this.isRequired = definition.isRequired;\n        this.parent = parent;\n    }\n\n    //#endregion\n\n    //#region ----   Cardinality Methods   ----\n\n    /**\n     * Check if relation is one-to-one\n     */\n    public isOneToOne(): boolean {\n        return this.type === AXPRelationshipCardinality.OneToOne;\n    }\n\n    /**\n     * Check if relation is one-to-many\n     */\n    public isOneToMany(): boolean {\n        return this.type === AXPRelationshipCardinality.OneToMany;\n    }\n\n    /**\n     * Check if relation is many-to-many\n     */\n    public isManyToMany(): boolean {\n        return this.type === AXPRelationshipCardinality.ManyToMany;\n    }\n\n    //#endregion\n\n    //#region ----   Kind Methods   ----\n\n    /**\n     * Check if relation is association\n     */\n    public isAssociation(): boolean {\n        return this.kind === AXPRelationshipKind.Association;\n    }\n\n    /**\n     * Check if relation is composition\n     */\n    public isComposition(): boolean {\n        return this.kind === AXPRelationshipKind.Composition;\n    }\n\n    /**\n     * Check if relation is aggregation\n     */\n    public isAggregation(): boolean {\n        return this.kind === AXPRelationshipKind.Aggregation;\n    }\n\n    //#endregion\n\n    //#region ----   Navigation Methods   ----\n\n    /**\n     * Get parent aggregate\n     */\n    public getAggregate(): any {\n        return this.parent;\n    }\n\n    /**\n     * Get parent module\n     */\n    public getModule(): any {\n        return this.parent?.parent;\n    }\n\n    /**\n     * Get full path (module.aggregate.relation)\n     */\n    public getPath(): string {\n        return `${this.parent.parent.name}.${this.parent.name}.${this.source.entity}->${this.target.entity}`;\n    }\n\n    //#endregion\n\n    //#region ----   Query Methods   ----\n\n    /**\n     * Get relation description\n     */\n    public getDescription(): string {\n        const cardinalityDesc = this.getCardinalityDescription();\n        const kindDesc = this.getKindDescription();\n        const requiredDesc = this.isRequired ? 'required' : 'optional';\n\n        return `${cardinalityDesc} ${kindDesc} (${requiredDesc})`;\n    }\n\n    /**\n     * Get cardinality description\n     */\n    public getCardinalityDescription(): string {\n        switch (this.type) {\n            case AXPRelationshipCardinality.OneToOne:\n                return 'one-to-one';\n            case AXPRelationshipCardinality.OneToMany:\n                return 'one-to-many';\n            case AXPRelationshipCardinality.ManyToMany:\n                return 'many-to-many';\n            default:\n                return 'unknown';\n        }\n    }\n\n    /**\n     * Get kind description\n     */\n    public getKindDescription(): string {\n        switch (this.kind) {\n            case AXPRelationshipKind.Association:\n                return 'association';\n            case AXPRelationshipKind.Composition:\n                return 'composition';\n            case AXPRelationshipKind.Aggregation:\n                return 'aggregation';\n            default:\n                return 'unknown';\n        }\n    }\n\n    /**\n     * Get relation summary\n     */\n    public getSummary(): string {\n        return `${this.source.entity}.${this.source.key} -> ${this.target.aggregate}.${this.target.entity}.${this.target.key}`;\n    }\n\n    //#endregion\n\n    //#region ----   Validation Methods   ----\n\n    /**\n     * Validate the relation structure\n     */\n    public validate(): string[] {\n        const errors: string[] = [];\n\n        // Validate source\n        if (!this.source.entity) errors.push('Source entity is required');\n        if (!this.source.key) errors.push('Source key is required');\n\n        // Validate target\n        if (!this.target.aggregate) errors.push('Target aggregate is required');\n        if (!this.target.entity) errors.push('Target entity is required');\n        if (!this.target.key) errors.push('Target key is required');\n\n        return errors;\n    }\n\n    //#endregion\n\n    //#region ----   Utility Methods   ----\n\n    /**\n     * Get relation characteristics\n     */\n    public getCharacteristics(): {\n        type: string;\n        kind: string;\n        required: boolean;\n        isOwning: boolean;\n        isNavigable: boolean;\n    } {\n        return {\n            type: this.getCardinalityDescription(),\n            kind: this.getKindDescription(),\n            required: this.isRequired,\n            isOwning: this.isComposition(),\n            isNavigable: !this.isComposition() || this.isOneToOne()\n        };\n    }\n\n    /**\n     * Check if relation involves entity\n     */\n    public involvesEntity(entityName: string): boolean {\n        return this.source.entity === entityName || this.target.entity === entityName;\n    }\n\n    /**\n     * Check if relation targets aggregate\n     */\n    public targetsAggregate(aggregateName: string): boolean {\n        return this.target.aggregate === aggregateName;\n    }\n\n    /**\n     * Get the other entity in the relation\n     */\n    public getOtherEntity(entityName: string): string | null {\n        if (this.source.entity === entityName) {\n            return this.target.entity;\n        } else if (this.target.entity === entityName) {\n            return this.source.entity;\n        }\n        return null;\n    }\n\n    /**\n     * Convert back to interface definition (AXPRelationDefinition with full source/target)\n     */\n    public toDefinition(): AXPRelationDefinition {\n        return {\n            type: this.type,\n            kind: this.kind,\n            target: { ...this.target },\n            source: { ...this.source },\n            isRequired: this.isRequired\n        };\n    }\n\n    //#endregion\n} ","import { AXPModuleModel } from \"../models/module.model\";\nimport { AXPEntityModel } from \"../models/entity.model\";\nimport { AXPEntityFieldModel } from \"../models/entity-field.model\";\nimport { AXPEntityType } from '@acorex/platform/domain-contracts';\n\n//#region ----   AXPModuleHelper   ----\n\n/**\n * Helper utility class for working with module models\n * \n * @deprecated This helper class is deprecated and will be updated to work with the new domain registry system.\n * Use AXPDomainService for domain operations instead.\n * \n * TODO: Update this helper to work with the new simplified models and domain registry system.\n */\nexport class AXPModuleHelper {\n\n    //#endregion\n\n    //#region ----   Deprecated Methods - To Be Updated   ----\n\n    /**\n     * @deprecated Use AXPDomainService.findEntitiesByName() instead\n     */\n    public static findEntitiesByName(module: AXPModuleModel, name: string): AXPEntityModel[] {\n        console.warn('AXPModuleHelper.findEntitiesByName is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with entity field queries instead\n     */\n    public static findFieldsByName(module: AXPModuleModel, fieldName: string): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.findFieldsByName is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with entity type queries instead\n     */\n    public static findEntitiesByType(module: AXPModuleModel, type: AXPEntityType): AXPEntityModel[] {\n        console.warn('AXPModuleHelper.findEntitiesByType is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with field validation queries instead\n     */\n    public static findFieldsWithValidation(module: AXPModuleModel, validationRule: string): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.findFieldsWithValidation is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with field queries instead\n     */\n    public static findFieldsByDataType(module: AXPModuleModel, dataType: string): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.findFieldsByDataType is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with required field queries instead\n     */\n    public static findRequiredFields(module: AXPModuleModel): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.findRequiredFields is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with nullable field queries instead\n     */\n    public static findNullableFields(module: AXPModuleModel): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.findNullableFields is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with default value queries instead\n     */\n    public static findFieldsWithDefaultValues(module: AXPModuleModel): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.findFieldsWithDefaultValues is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with registered property name queries instead\n     */\n    public static findFieldsByRegisteredPropertyName(module: AXPModuleModel, propertyName: string): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.findFieldsByRegisteredPropertyName is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use module.validate() method instead\n     */\n    public static validateModule(module: AXPModuleModel): string[] {\n        return module.validate();\n    }\n\n    /**\n     * @deprecated Use aggregate relation queries instead\n     */\n    public static findRelationsByType(module: AXPModuleModel, relationType: string): any[] {\n        console.warn('AXPModuleHelper.findRelationsByType is deprecated. Use relation queries instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with entity dependency queries instead\n     */\n    public static findEntityDependencies(module: AXPModuleModel, entityName: string): any[] {\n        console.warn('AXPModuleHelper.findEntityDependencies is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use module.getStatistics() method instead\n     */\n    public static getModuleStatistics(module: AXPModuleModel): any {\n        return module.getStatistics();\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with entity queries instead\n     */\n    public static getAllEntities(module: AXPModuleModel): AXPEntityModel[] {\n        console.warn('AXPModuleHelper.getAllEntities is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    /**\n     * @deprecated Use AXPDomainService with field queries instead\n     */\n    public static getAllFields(module: AXPModuleModel): AXPEntityFieldModel[] {\n        console.warn('AXPModuleHelper.getAllFields is deprecated. Use AXPDomainService instead.');\n        return [];\n    }\n\n    //#endregion\n} ","import { AXPMetaData, AXPValidationRule } from '@acorex/platform/contracts';\nimport { AXPPropertyDefinition } from '@acorex/platform/domain-contracts';\n\n//#region ----   Schema Middleware Context   ----\n\n/**\n * Context class for schema middleware operations providing a fluent API for schema manipulation.\n * \n * This class serves as the interface between middleware functions and schema definitions,\n * offering methods to modify various aspects of a schema including:\n * - Widget configuration and options\n * - Validation rules\n * - Feature flags (searchable, filterable, sortable)\n * - Metadata and custom properties\n * - UI behavior (visibility, readonly state)\n * \n * All methods return `this` to enable fluent method chaining.\n * \n * @example\n * ```typescript\n * // Example middleware using the context\n * (context) => {\n *   context\n *     .addValidation({ rule: 'required' })\n *     .searchable(true)\n *     .withDefaultValue('default text')\n *     .readonly(false);\n * }\n * ```\n */\nexport class AXPPropertyMiddlewareContext {\n    private _definition: AXPPropertyDefinition;\n\n    constructor(definition: AXPPropertyDefinition) {\n        // Deep clone to avoid mutating the original definition\n        this._definition = JSON.parse(JSON.stringify(definition));\n    }\n\n    //#region ----   Schema Access Properties   ----\n\n    /**\n     * Get the current schema definition (readonly access)\n     */\n    get definition(): Readonly<AXPPropertyDefinition> {\n        return this._definition;\n    }\n\n    /**\n     * Get the schema name for conditional logic\n     */\n    get name(): string {\n        return this._definition.name;\n    }\n\n    //#endregion\n\n    //#region ----   Default Value Management   ----\n\n    /**\n     * Set a default value for the widget\n     * @param defaultValue The default value to set\n     */\n    withDefaultValue(defaultValue: unknown): this {\n        if (!this._definition.interface.options) {\n            this._definition.interface.options = {};\n        }\n        (this._definition.interface.options as Record<string, unknown>)['defaultValue'] = defaultValue;\n        return this;\n    }\n\n    /**\n     * Remove the default value from the widget\n     */\n    removeDefaultValue(): this {\n        if (this._definition.interface.options) {\n            delete (this._definition.interface.options as Record<string, unknown>)['defaultValue'];\n        }\n        return this;\n    }\n\n    //#endregion\n\n    //#region ----   Validation Management   ----\n\n    /**\n     * Add multiple validation rules to the schema\n     * @param rules Array of validation rules to add\n     */\n    withValidation(rules: any[]): this {\n        if (!this._definition.validations) {\n            this._definition.validations = [];\n        }\n        this._definition.validations.push(...rules);\n        return this;\n    }\n\n    /**\n     * Add a single validation rule to the schema\n     * @param rule The validation rule to add\n     */\n    addValidation(rule: any): this {\n        if (!this._definition.validations) {\n            this._definition.validations = [];\n        }\n        this._definition.validations.push(rule);\n        return this;\n    }\n\n    /**\n     * Add a single validation rule (alias for addValidation for backward compatibility)\n     * @param rule The validation rule to add\n     */\n    withValidationRule(rule: any): this {\n        return this.addValidation(rule);\n    }\n\n    /**\n     * Remove all validation rules from the schema\n     */\n    clearValidations(): this {\n        this._definition.validations = [];\n        return this;\n    }\n\n    /**\n     * Remove a specific validation rule by its rule name\n     * @param ruleName The name of the rule to remove (e.g., 'required', 'email')\n     */\n    removeValidation(ruleName: string): this {\n        if (this._definition.validations) {\n            this._definition.validations = this._definition.validations.filter(\n                (v: { rule?: string }) => v.rule !== ruleName\n            );\n        }\n        return this;\n    }\n\n    //#endregion\n\n    //#region ----   Widget Configuration   ----\n\n    /**\n     * Set or merge widget options\n     * @param options Object containing widget-specific options to merge\n     */\n    withWidgetOptions(options: Record<string, unknown>): this {\n        const current = this._definition.interface.options ?? {};\n        this._definition.interface.options = {\n            ...current,\n            ...options\n        } as AXPMetaData;\n        return this;\n    }\n\n    /**\n     * Remove a specific widget option by key\n     * @param optionKey The key of the option to remove\n     */\n    removeWidgetOption(optionKey: string): this {\n        if (this._definition.interface.options) {\n            delete (this._definition.interface.options as Record<string, unknown>)[optionKey];\n        }\n        return this;\n    }\n\n    /**\n     * Change the widget type for this schema\n     * @param widgetType The new widget type identifier\n     */\n    withWidgetType(widgetType: string): this {\n        this._definition.interface.name = widgetType;\n        return this;\n    }\n\n    //#endregion\n\n    //#region ----   Feature Configuration   ----\n\n    /**\n     * Configure general features using an object\n     * @param features Object containing feature configurations to merge\n     */\n    withFeatures(features: Partial<any>): this {\n        this._definition.features = {\n            ...this._definition.features,\n            ...features\n        };\n        return this;\n    }\n\n    /**\n     * Configure searchable feature with fine-grained control\n     * @param enabled Whether searching is enabled\n     * @param fullText Whether full-text search is enabled\n     */\n    searchable(enabled: boolean = true, fullText: boolean = false): this {\n        if (!this._definition.features) {\n            this._definition.features = {};\n        }\n        this._definition.features.searchable = { enabled, fullText };\n        return this;\n    }\n\n    /**\n     * Configure filterable feature with inline filter support\n     * @param enabled Whether filtering is enabled\n     * @param inline Whether inline filtering is supported\n     */\n    filterable(enabled: boolean = true, inline: boolean = false): this {\n        if (!this._definition.features) {\n            this._definition.features = {};\n        }\n        this._definition.features.filterable = { enabled, inline };\n        return this;\n    }\n\n    /**\n     * Configure sortable feature\n     * @param enabled Whether sorting is enabled\n     */\n    sortable(enabled: boolean = true): this {\n        if (!this._definition.features) {\n            this._definition.features = {};\n        }\n        this._definition.features.sortable = { enabled };\n        return this;\n    }\n\n    //#endregion\n\n    //#region ----   Metadata Management   ----\n\n    /**\n     * Add or merge metadata to the schema\n     * @param metadata Object containing metadata to merge\n     */\n    withMetadata(metadata: any): this {\n        this._definition.metadata = {\n            ...this._definition.metadata,\n            ...metadata\n        };\n        return this;\n    }\n\n    /**\n     * Remove a specific metadata property by key\n     * @param key The metadata key to remove\n     */\n    removeMetadata(key: string): this {\n        if (this._definition.metadata) {\n            delete this._definition.metadata[key];\n        }\n        return this;\n    }\n\n    //#endregion\n\n    //#region ----   UI State Management   ----\n\n    /**\n     * Set the disabled state of the widget\n     * @param isDisabled Whether the widget should be disabled\n     */\n    disabled(isDisabled: boolean = true): this {\n        this._definition.disabled = isDisabled;\n        return this;\n    }\n\n    /**\n     * Set the visibility of the widget\n     * @param visible Whether the widget should be visible\n     */\n    withVisibility(visible: boolean): this {\n        if (!this._definition.interface.options) {\n            this._definition.interface.options = {};\n        }\n        (this._definition.interface.options as Record<string, unknown>)['visible'] = visible;\n        return this;\n    }\n\n    /**\n     * Set the readonly state of the widget\n     * @param isReadonly Whether the widget should be readonly\n     */\n    readonly(isReadonly: boolean = true): this {\n        if (!this._definition.interface.options) {\n            this._definition.interface.options = {};\n        }\n        (this._definition.interface.options as Record<string, unknown>)['readonly'] = isReadonly;\n        return this;\n    }\n\n    //#endregion\n}\n\n//#endregion\n\n//#region ----   Builder-Based Middleware Types   ----\n\n","import { Injectable, Type } from '@angular/core';\nimport { AXPPropertyDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPPropertyModel } from '../../models/property.model';\nimport { AXPPropertyLoader } from './property-loader.interface';\nimport { AXPPropertyMiddleware } from './property.middleware';\nimport { AXPPropertyMiddlewareContext } from './property-middleware.functions';\n\n//#region ----   Types and Interfaces   ----\n\n/**\n * Options for registering a schema with additional metadata and middleware\n */\nexport interface AXPPropertyRegistrationOptions {\n    /** Optional description for documentation purposes */\n    description?: string;\n    /** Tags for categorizing and finding schemas */\n    tags?: string[];\n    /** Version information for schema evolution */\n    version?: string;\n    /** Schema-specific middleware that applies only to this schema */\n    middleware?: AXPPropertyMiddleware[];\n}\n\n/**\n * Internal representation of a registered schema with metadata\n */\nexport interface AXPRegisteredProperty {\n    /** Unique identifier for the schema */\n    name: string;\n    /** The actual schema definition */\n    definition: AXPPropertyDefinition;\n    /** Registration options and metadata */\n    options: AXPPropertyRegistrationOptions;\n    /** Timestamp when the schema was registered */\n    registeredAt: Date;\n}\n\n//#endregion\n\n//#region ----   Schema Registry Service   ----\n\n/**\n * Central registry for managing schema definitions, middleware, and dynamic loading.\n * \n * Provides:\n * - Schema registration and retrieval\n * - Middleware processing pipeline\n * - On-demand schema loading\n * - Caching and performance optimization\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPPropertyRegistry {\n    private readonly _registrations = new Map<string, AXPRegisteredProperty>();\n    private readonly _globalMiddleware: AXPPropertyMiddleware[] = [];\n    private readonly _modelCache = new Map<string, AXPPropertyModel>();\n    private _loaders: AXPPropertyLoader[] | null = null;\n\n    constructor() { }\n\n    //#region ----   Registration Methods   ----\n\n    /**\n     * Register a schema definition with optional metadata and middleware\n     */\n    register(\n        definition: AXPPropertyDefinition,\n        options: AXPPropertyRegistrationOptions = {}\n    ): void {\n        if (!definition.name || definition.name.trim() === '') {\n            throw new Error('Property name is required and cannot be empty');\n        }\n\n        const registered: AXPRegisteredProperty = {\n            name: definition.name,\n            definition,\n            options,\n            registeredAt: new Date()\n        };\n\n        this._registrations.set(definition.name, registered);\n        this.invalidateCache(definition.name);\n    }\n\n    /**\n     * Register multiple schemas at once for batch operations\n     */\n    registerBatch(entries: { name: string; definition: AXPPropertyDefinition; options?: AXPPropertyRegistrationOptions }[]): void {\n        for (const entry of entries) {\n            this.register(entry.definition, entry.options || {});\n        }\n    }\n\n    /**\n     * Remove a schema from the registry\n     */\n    unregister(name: string): boolean {\n        const removed = this._registrations.delete(name);\n        if (removed) {\n            this.invalidateCache(name);\n        }\n        return removed;\n    }\n\n    /**\n     * Check if a schema is currently registered\n     */\n    isRegistered(name: string): boolean {\n        return this._registrations.has(name);\n    }\n\n    //#endregion\n\n    //#region ----   Resolution Methods   ----\n\n    /**\n     * Resolve a schema by name with full middleware processing and caching.\n     * Supports on-demand loading if schema is not registered.\n     */\n    async resolve(name: string): Promise<AXPPropertyModel> {\n        // Check cache first for performance\n        if (this._modelCache.has(name)) {\n            return this._modelCache.get(name)!;\n        }\n\n        // Try to get from registered schemas first\n        let registered = this._registrations.get(name);\n\n        // If not found, attempt on-demand loading\n        if (!registered) {\n            const definition = await this.loadFromLoaders(name);\n            if (definition) {\n                registered = {\n                    name,\n                    definition,\n                    options: {},\n                    registeredAt: new Date()\n                };\n                this._registrations.set(name, registered);\n            } else {\n                throw new Error(`Property '${name}' is not registered and no loader can provide it`);\n            }\n        }\n\n        // Clone and process through middleware pipeline\n        const definition = this.cloneDefinition(registered.definition);\n        const context = new AXPPropertyMiddlewareContext(definition);\n\n        // Apply global middleware first\n        for (const middleware of this._globalMiddleware) {\n            await middleware(context);\n        }\n\n        // Apply registration-specific middleware\n        if (registered.options.middleware) {\n            for (const middleware of registered.options.middleware) {\n                await middleware(context);\n            }\n        }\n\n        // Create final model and cache it\n        const model = new AXPPropertyModel(context.definition);\n        this._modelCache.set(name, model);\n\n        return model;\n    }\n\n    /**\n     * Synchronous resolution without middleware processing.\n     * Use only when middleware is not needed for performance.\n     */\n    resolveSync(name: string): AXPPropertyModel {\n        const registered = this._registrations.get(name);\n        if (!registered) {\n            throw new Error(`Property '${name}' is not registered`);\n        }\n\n        return new AXPPropertyModel(this.cloneDefinition(registered.definition));\n    }\n\n    //#endregion\n\n    //#region ----   Middleware Management   ----\n\n    /**\n     * Add global middleware that applies to all schema resolutions\n     */\n    addGlobalMiddleware(middleware: AXPPropertyMiddleware): void {\n        if (typeof middleware !== 'function') {\n            throw new Error('Middleware must be a function');\n        }\n        this._globalMiddleware.push(middleware);\n    }\n\n    /**\n     * Remove specific global middleware\n     */\n    removeGlobalMiddleware(middleware: AXPPropertyMiddleware): boolean {\n        const index = this._globalMiddleware.indexOf(middleware);\n        if (index > -1) {\n            this._globalMiddleware.splice(index, 1);\n            return true;\n        }\n        return false;\n    }\n\n    /**\n     * Clear all global middleware\n     */\n    clearGlobalMiddleware(): void {\n        this._globalMiddleware.length = 0;\n    }\n\n    //#endregion\n\n    //#region ----   Loader Management   ----\n\n    /**\n     * Add a schema loader for on-demand loading\n     */\n    addLoader(loader: Type<AXPPropertyLoader>): void {\n        if (this._loaders === null) {\n            this._loaders = [];\n        }\n        this._loaders.push(new loader());\n    }\n\n    //#endregion\n\n    //#region ----   Query Methods   ----\n\n    /**\n     * Get all registered schema names\n     */\n    getRegisteredNames(): string[] {\n        return Array.from(this._registrations.keys());\n    }\n\n    /**\n     * Get detailed registration information for a schema\n     */\n    getRegisteredProperty(name: string): AXPRegisteredProperty | undefined {\n        return this._registrations.get(name);\n    }\n\n    /**\n     * Get all registered properties with their metadata\n     */\n    getAllRegisteredProperties(): AXPRegisteredProperty[] {\n        return Array.from(this._registrations.values());\n    }\n\n    /**\n     * Find registered properties by tag for categorization\n     */\n    findByTag(tag: string): AXPRegisteredProperty[] {\n        return Array.from(this._registrations.values()).filter((registration) =>\n            registration.options.tags?.includes(tag)\n        );\n    }\n\n    /**\n     * Find registered properties by widget type for widget-specific operations\n     */\n    findByWidget(widgetType: string): AXPRegisteredProperty[] {\n        return Array.from(this._registrations.values()).filter((registration) =>\n            registration.definition.interface.name === widgetType\n        );\n    }\n\n    /**\n     * Get comprehensive registry statistics\n     */\n    getStatistics(): {\n        propertyCount: number;\n        globalMiddlewareCount: number;\n        propertiesByWidget: { [widget: string]: number };\n        propertiesByTag: { [tag: string]: number };\n    } {\n        const propertiesByWidget: { [widget: string]: number } = {};\n        const propertiesByTag: { [tag: string]: number } = {};\n\n        for (const registration of this._registrations.values()) {\n            const widget = registration.definition.interface.name;\n            propertiesByWidget[widget] = (propertiesByWidget[widget] || 0) + 1;\n\n            if (registration.options.tags) {\n                for (const tag of registration.options.tags) {\n                    propertiesByTag[tag] = (propertiesByTag[tag] || 0) + 1;\n                }\n            }\n        }\n\n        return {\n            propertyCount: this._registrations.size,\n            globalMiddlewareCount: this._globalMiddleware.length,\n            propertiesByWidget,\n            propertiesByTag\n        };\n    }\n\n    //#endregion\n\n    //#region ----   Cache Management   ----\n\n    /**\n     * Clear all cached models (useful when schemas need to be reloaded)\n     */\n    clearCache(): void {\n        this._modelCache.clear();\n    }\n\n    /**\n     * Invalidate cache for a specific schema\n     */\n    invalidateCache(name: string): void {\n        this._modelCache.delete(name);\n    }\n\n    /**\n     * Clear all registered schemas, middleware, and cached models\n     */\n    clear(): void {\n        this._registrations.clear();\n        this._globalMiddleware.length = 0;\n        this._modelCache.clear();\n        this._loaders = null;\n    }\n\n    //#endregion\n\n    //#region ----   Private Helper Methods   ----\n\n    /**\n     * Attempt to load schema from registered loaders\n     */\n    private async loadFromLoaders(name: string): Promise<AXPPropertyDefinition | null> {\n        const loaders = this.getLoaders();\n\n        for (const loader of loaders) {\n            if (loader.canLoad(name)) {\n                try {\n                    const definition = await loader.load(name);\n                    if (definition) {\n                        console.log(`Property '${name}' loaded from ${loader.constructor.name}`);\n                        return definition;\n                    }\n                } catch (error) {\n                    console.warn(`Loader ${loader.constructor.name} failed to load '${name}':`, error);\n                }\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * Get loaders sorted by priority (lazy initialization)\n     */\n    private getLoaders(): AXPPropertyLoader[] {\n        if (this._loaders === null) {\n            try {\n                this._loaders = [];\n                // Sort by priority (higher priority first)\n                this._loaders.sort((a, b) => {\n                    const priorityA = a.priority ?? 0;\n                    const priorityB = b.priority ?? 0;\n                    return priorityB - priorityA;\n                });\n            } catch (error) {\n                console.warn('Failed to initialize property loaders:', error);\n                this._loaders = [];\n            }\n        }\n        return this._loaders;\n    }\n\n    /**\n     * Create a deep clone of a schema definition to prevent mutations\n     */\n    private cloneDefinition(definition: AXPPropertyDefinition): AXPPropertyDefinition {\n        return JSON.parse(JSON.stringify(definition));\n    }\n\n    //#endregion\n}\n\n//#endregion ","import { Injectable, inject } from '@angular/core';\nimport { AXPPropertyDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPPropertyModel } from '../../models/property.model';\nimport { AXPPropertyRegistry, AXPPropertyRegistrationOptions, AXPRegisteredProperty } from './property.registry';\nimport { AXPPropertyMiddleware } from './property.middleware';\n\n//#region ----   Property Service   ----\n\n/**\n * High-level facade for registered property definitions ({@link AXPPropertyDefinition}).\n *\n * Wraps {@link AXPPropertyRegistry} with convenience methods for resolution and discovery.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPPropertyService {\n    private readonly registry = inject(AXPPropertyRegistry);\n\n    //#region ----   Registration   ----\n\n    /**\n     * Register a property definition with optional configuration\n     */\n    register(definition: AXPPropertyDefinition, options?: AXPPropertyRegistrationOptions): void {\n        this.registry.register(definition, options);\n    }\n\n    /**\n     * Register multiple property definitions at once\n     */\n    registerBatch(entries: { name: string; definition: AXPPropertyDefinition; options?: AXPPropertyRegistrationOptions }[]): void {\n        this.registry.registerBatch(entries);\n    }\n\n    /**\n     * Remove a property definition from the registry\n     */\n    unregister(name: string): boolean {\n        return this.registry.unregister(name);\n    }\n\n    /**\n     * Check if a property definition is registered by name\n     */\n    isRegistered(name: string): boolean {\n        return this.registry.isRegistered(name);\n    }\n\n    /**\n     * Get all registered property names\n     */\n    getRegisteredNames(): string[] {\n        return this.registry.getRegisteredNames();\n    }\n\n    /**\n     * Clear all registrations and reset the registry\n     */\n    clear(): void {\n        this.registry.clear();\n    }\n\n    //#endregion\n\n    //#region ----   Resolution   ----\n\n    /**\n     * Resolve a registered property by name with full middleware processing\n     */\n    async resolve(name: string): Promise<AXPPropertyModel> {\n        return this.registry.resolve(name);\n    }\n\n    /**\n     * Resolve synchronously without middleware (for performance)\n     */\n    resolveSync(name: string): AXPPropertyModel {\n        return this.registry.resolveSync(name);\n    }\n\n    /**\n     * Resolve multiple registered properties for form building and batch operations\n     */\n    async resolveMultiple(\n        fieldConfigs: { name: string; propertyName: string }[],\n    ): Promise<{ name: string; property: AXPPropertyModel }[]> {\n        const resolvedFields = await Promise.all(\n            fieldConfigs.map(async (config) => ({\n                name: config.name,\n                property: await this.resolve(config.propertyName),\n            })),\n        );\n        return resolvedFields;\n    }\n\n    //#endregion\n\n    //#region ----   Middleware Management   ----\n\n    /**\n     * Add global middleware that applies to all property resolutions\n     */\n    addGlobalMiddleware(middleware: AXPPropertyMiddleware): void {\n        this.registry.addGlobalMiddleware(middleware);\n    }\n\n    /**\n     * Remove specific global middleware\n     */\n    removeGlobalMiddleware(middleware: AXPPropertyMiddleware): boolean {\n        return this.registry.removeGlobalMiddleware(middleware);\n    }\n\n    /**\n     * Clear all global middleware\n     */\n    clearGlobalMiddleware(): void {\n        this.registry.clearGlobalMiddleware();\n    }\n\n    //#endregion\n\n    //#region ----   Query and Discovery   ----\n\n    /**\n     * Get detailed information about a registered property definition\n     */\n    getRegisteredProperty(name: string): AXPRegisteredProperty | undefined {\n        return this.registry.getRegisteredProperty(name);\n    }\n\n    /**\n     * Get all registered property definitions with their metadata\n     */\n    getAllRegisteredProperties(): AXPRegisteredProperty[] {\n        return this.registry.getAllRegisteredProperties();\n    }\n\n    /**\n     * Find registered properties by tag for categorization and grouping\n     */\n    findByTag(tag: string): AXPRegisteredProperty[] {\n        return this.registry.findByTag(tag);\n    }\n\n    /**\n     * Find registered properties by widget type for widget-specific operations\n     */\n    findByWidget(widgetType: string): AXPRegisteredProperty[] {\n        return this.registry.findByWidget(widgetType);\n    }\n\n    /**\n     * Get comprehensive registry statistics and analytics\n     */\n    getStatistics() {\n        const stats = this.registry.getStatistics();\n\n        // Enhance with top-used analytics\n        const mostUsedWidgets = Object.entries(stats.propertiesByWidget)\n            .sort(([, a], [, b]) => b - a)\n            .slice(0, 5)\n            .map(([widget]) => widget);\n\n        const mostUsedTags = Object.entries(stats.propertiesByTag)\n            .sort(([, a], [, b]) => b - a)\n            .slice(0, 5)\n            .map(([tag]) => tag);\n\n        return {\n            ...stats,\n            mostUsedWidgets,\n            mostUsedTags\n        };\n    }\n\n    //#endregion\n\n    //#region ----   Validation and Analysis   ----\n\n    /**\n     * Validate that all referenced property names exist in the registry\n     */\n    validatePropertyReferences(propertyNames: string[]): { valid: boolean; missingPropertyNames: string[] } {\n        const missingPropertyNames: string[] = [];\n\n        for (const propertyName of propertyNames) {\n            if (!this.isRegistered(propertyName)) {\n                missingPropertyNames.push(propertyName);\n            }\n        }\n\n        return {\n            valid: missingPropertyNames.length === 0,\n            missingPropertyNames,\n        };\n    }\n\n    //#endregion\n}\n\n//#endregion ","import { AXPPropertyDefinition } from '@acorex/platform/domain-contracts';\n\n//#region ----   Property loader interface   ----\n\n/**\n * Loads {@link AXPPropertyDefinition} instances on demand when not registered in {@link AXPPropertyRegistry}.\n */\nexport interface AXPPropertyLoader {\n    /**\n     * Optional priority for loader ordering. Higher numbers = higher priority.\n     * If not specified, uses registration order.\n     */\n    readonly priority?: number;\n\n    /**\n     * Determines if this loader can handle the given registered property name.\n     */\n    canLoad(propertyName: string): boolean;\n\n    /**\n     * Loads the property definition for the given name, or null if not found.\n     */\n    load(propertyName: string): Promise<AXPPropertyDefinition | null>;\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders, Type } from '@angular/core';\nimport { AXPPropertyLoader } from './property-loader.interface';\nimport { AXP_PROPERTY_LOADER_SETUP } from './property-extension.token';\nimport { AXPPropertyRegistry } from './property.registry';\n\n//#region ----   Schema Loader Configuration   ----\n\n/**\n * Configuration for a schema loader with optional priority setting\n */\nexport interface AXPPropertyLoaderConfig {\n    /** The loader class to instantiate */\n    loader: Type<AXPPropertyLoader>;\n    /** Optional priority for loader ordering (higher = higher priority) */\n    priority?: number;\n}\n\n//#endregion\n\n//#region ----   Provider Functions   ----\n\n/**\n * Provide schema loaders for on-demand schema loading.\n * \n * Schema loaders enable the registry to load schemas that are not registered\n * at build time. This is useful for:\n * - Loading schemas from external APIs\n * - Dynamic schema generation\n * - Lazy loading of large schema sets\n * - Development-time schema hot-reloading\n * \n * @param loaders Array of loader classes or loader configurations\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * // Simple loader registration\n * providePropertyLoaders([\n *   HttpSchemaLoader,\n *   FileSystemSchemaLoader\n * ])\n * \n * // With priority configuration\n * providePropertyLoaders([\n *   { loader: HttpSchemaLoader, priority: 10 },\n *   { loader: FileSystemSchemaLoader, priority: 5 }\n * ])\n * ```\n */\nexport function providePropertyLoaders(\n    loaders: Array<Type<AXPPropertyLoader> | AXPPropertyLoaderConfig>\n): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: AXP_PROPERTY_LOADER_SETUP,\n            useFactory: async () => {\n                const registry = inject(AXPPropertyRegistry);\n\n                // Register each loader with the registry\n                for (const loader of loaders) {\n                    const loaderClass = typeof loader === 'function' ? loader : loader.loader;\n                    registry.addLoader(loaderClass);\n                }\n\n                return true;\n            },\n            multi: true\n        }\n    ]);\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPPropertyDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPPropertyRegistry, AXPPropertyRegistrationOptions } from './property.registry';\nimport { AXP_PROPERTY_SETUP } from './property-extension.token';\n\n//#region ----   Types   ----\n\n/**\n * Schema entry for registration containing definition and optional metadata\n */\nexport interface AXPPropertyEntry {\n    /** The schema definition to register */\n    definition: AXPPropertyDefinition;\n    /** Optional registration options and metadata */\n    options?: AXPPropertyRegistrationOptions;\n}\n\n//#endregion\n\n//#region ----   Provider Functions   ----\n\n/**\n * Provide schema setups for registration during application bootstrap.\n * \n * This is the primary way to register schemas that are known at build time.\n * Schemas registered this way are immediately available in the registry.\n * \n * @param schemas Array of schema entries to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * providePropertySetups([\n *   {\n *     definition: emailSchema,\n *     options: {\n *       tags: ['user', 'contact'],\n *       description: 'Email field schema'\n *     }\n *   },\n *   {\n *     definition: phoneSchema,\n *     options: { tags: ['contact'] }\n *   }\n * ])\n * ```\n */\nexport function providePropertySetups(entries: AXPPropertyEntry[]): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: AXP_PROPERTY_SETUP,\n            useFactory: () => {\n                const registry = inject(AXPPropertyRegistry);\n\n                for (const entry of entries) {\n                    registry.register(entry.definition, entry.options);\n                }\n\n                return true;\n            },\n            multi: true\n        }\n    ]);\n}\n\n/**\n * Convenience function to provide a single schema setup.\n * \n * Useful when you need to register just one schema or want to keep\n * schema registrations separate for organizational purposes.\n * \n * @param definition The schema definition to register\n * @param options Optional registration options and metadata\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideProperty(emailSchema, {\n *   tags: ['user', 'contact'],\n *   description: 'User email field'\n * })\n * ```\n */\nexport function provideProperty(\n    definition: AXPPropertyDefinition,\n    options?: AXPPropertyRegistrationOptions\n): EnvironmentProviders {\n    return providePropertySetups([{ definition, options }]);\n}\n\n/**\n * Provide schema setups from a factory function for dynamic registration.\n * \n * Useful when schemas need to be generated at runtime, loaded from external\n * sources, or depend on configuration that's not available at build time.\n * \n * @param schemaFactory Factory function that returns schema entries\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * providePropertiesFromFactory(async () => {\n *   const config = await loadConfiguration();\n *   return config.schemas.map(schema => ({\n *     definition: schema,\n *     options: { tags: ['dynamic'] }\n *   }));\n * })\n * ```\n */\nexport function providePropertiesFromFactory(\n    factory: () => AXPPropertyEntry[] | Promise<AXPPropertyEntry[]>\n): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: AXP_PROPERTY_SETUP,\n            useFactory: async () => {\n                const registry = inject(AXPPropertyRegistry);\n                const entries = await factory();\n\n                for (const entry of entries) {\n                    registry.register(entry.definition, entry.options);\n                }\n\n                return true;\n            },\n            multi: true\n        }\n    ]);\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders } from '@angular/core';\nimport { AXPPropertyRegistry } from './property.registry';\nimport { AXPPropertyMiddleware } from './property.middleware';\nimport { AXP_PROPERTY_EXTENSION, AXP_PROPERTY_MIDDLEWARE_SETUP } from './property-extension.token';\n\n//#region ----   Types   ----\n\n/**\n * Middleware entry for registration - can be either a simple function or targeted middleware\n */\nexport type AXPPropertyMiddlewareEntry =\n    | AXPPropertyMiddleware\n    | { target: string | RegExp; middleware: AXPPropertyMiddleware };\n\n//#endregion\n\n//#region ----   Provider Functions   ----\n\n/**\n * Provide schema middleware for registration in the application.\n * \n * Supports both global middleware (applies to all schemas) and targeted middleware\n * (applies only to schemas matching specific patterns).\n * \n * @param middleware Array of middleware entries to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * // Global middleware\n * providePropertyMiddleware([\n *   (context) => {\n *     if (context.definition.dataType === 'string') {\n *       context.searchable(true);\n *     }\n *   }\n * ])\n * \n * // Targeted middleware\n * providePropertyMiddleware([\n *   {\n *     target: /^user_/,\n *     middleware: (context) => context.withMetadata({ category: 'user' })\n *   }\n * ])\n * ```\n */\nexport function providePropertyMiddleware(\n    middleware: AXPPropertyMiddlewareEntry[]\n): EnvironmentProviders {\n\n    const global: AXPPropertyMiddleware[] = [];\n    const targeted: { target: string | RegExp; middleware: AXPPropertyMiddleware }[] = [];\n\n    // Separate global and targeted middleware for different processing\n    for (const entry of middleware) {\n        if (typeof entry === 'function') {\n            global.push(entry);\n        } else {\n            targeted.push(entry);\n        }\n    }\n\n    return makeEnvironmentProviders([\n        // Setup global middleware that applies to all schemas\n        ...(global.length > 0 ? [{\n            provide: AXP_PROPERTY_MIDDLEWARE_SETUP,\n            useFactory: () => {\n                const registry = inject(AXPPropertyRegistry);\n                for (const mw of global) {\n                    registry.addGlobalMiddleware(mw);\n                }\n                return true;\n            },\n            multi: true\n        }] : []),\n\n        // Register targeted middleware entries for future extension support\n        ...targeted.map(entry => ({\n            provide: AXP_PROPERTY_EXTENSION,\n            useValue: entry,\n            multi: true\n        }))\n    ]);\n}\n\n//#endregion ","//#region ----   Property registry core   ----\n\nexport * from './property.registry';\nexport * from './property.service';\n\n//#endregion\n\n//#region ----   Property middleware   ----\n\nexport * from './property.middleware';\nexport * from './property-middleware.functions';\n\n//#endregion\n\n//#region ----   Property loaders   ----\n\nexport * from './property-loader.interface';\nexport * from './provide-property-loaders';\n\n//#endregion\n\n//#region ----   Providers   ----\n\nexport * from './provide-property-setups';\nexport * from './provide-property-middleware';\n\n//#endregion\n\n//#region ----   DI tokens   ----\n\nexport * from './property-extension.token';\n\n//#endregion\n","import { AXPDomainDefinition } from './domain-loader.interface';\n\n//#region ----   Domain Middleware Context   ----\n\n/**\n * Context class for domain middleware operations providing a fluent API for domain definition manipulation.\n * \n * This class serves as the interface between middleware functions and domain definitions,\n * offering methods to modify various aspects of a domain definition including:\n * - Metadata and custom properties\n * - Validation rules\n * - Feature flags and configuration\n * - Transformations and augmentations\n * \n * All methods return `this` to enable fluent method chaining.\n */\nexport class AXPDomainMiddlewareContext {\n    private _definition: AXPDomainDefinition;\n    private _type: 'module' | 'aggregate' | 'entity';\n\n    constructor(definition: AXPDomainDefinition, type: 'module' | 'aggregate' | 'entity') {\n        // Deep clone to avoid mutating the original definition\n        this._definition = JSON.parse(JSON.stringify(definition));\n        this._type = type;\n    }\n\n    /**\n     * Get the current definition (read-only access)\n     */\n    get definition(): AXPDomainDefinition {\n        return this._definition;\n    }\n\n    /**\n     * Get the type of domain object being processed\n     */\n    get type(): 'module' | 'aggregate' | 'entity' {\n        return this._type;\n    }\n\n    /**\n     * Set metadata for the domain definition\n     */\n    setMetadata(key: string, value: any): this {\n        const def = this._definition as any;\n        if (!def.metadata) {\n            def.metadata = {};\n        }\n        def.metadata[key] = value;\n        return this;\n    }\n\n    /**\n     * Get metadata value\n     */\n    getMetadata(key: string): any {\n        const def = this._definition as any;\n        return def.metadata?.[key];\n    }\n\n    /**\n     * Add validation rule to the definition (for entities and aggregates)\n     */\n    addValidation(rule: any): this {\n        if ('validations' in this._definition) {\n            this._definition.validations = this._definition.validations || [];\n            this._definition.validations.push(rule);\n        }\n        return this;\n    }\n\n    /**\n     * Transform fields (for entities)\n     */\n    transformFields(transformer: (field: any) => any): this {\n        if ('fields' in this._definition && this._definition.fields) {\n            this._definition.fields = this._definition.fields.map(transformer);\n        }\n        return this;\n    }\n\n    /**\n     * Add field to entity definition\n     */\n    addField(field: any): this {\n        if ('fields' in this._definition) {\n            this._definition.fields = this._definition.fields || [];\n            this._definition.fields.push(field);\n        }\n        return this;\n    }\n\n    /**\n     * Set title with transformation\n     */\n    setTitle(title: string): this {\n        this._definition.title = title;\n        return this;\n    }\n\n    /**\n     * Apply conditional logic\n     */\n    when(condition: boolean, callback: (context: this) => void): this {\n        if (condition) {\n            callback(this);\n        }\n        return this;\n    }\n\n    /**\n     * Replace the entire definition\n     */\n    replaceDefinition(newDefinition: AXPDomainDefinition): this {\n        this._definition = JSON.parse(JSON.stringify(newDefinition));\n        return this;\n    }\n}\n\n//#endregion\n\n//#region ----   Domain Middleware Interface   ----\n\n/**\n * Middleware function that can transform domain definitions\n * @param context - Domain middleware context providing definition info and configuration methods\n */\nexport type AXPDomainMiddleware = (\n    context: AXPDomainMiddlewareContext\n) => void | Promise<void>;\n\n//#endregion ","import { Injectable, inject } from '@angular/core';\nimport { AXPDomainLoader, AXPDomainDefinition, AXPDomainPathInfo } from './domain-loader.interface';\nimport { AXPDomainMiddleware, AXPDomainMiddlewareContext } from './domain-middleware.interface';\nimport { AXPModuleModel } from '../../models/module.model';\nimport { AXPAggregateModel } from '../../models/aggregate.model';\nimport { AXPEntityModel } from '../../models/entity.model';\nimport { AXPPropertyService } from '../property';\n\n//#region ----   Domain Registry Service   ----\n\n/**\n * Central registry for managing domain definitions, middleware, and dynamic loading.\n * \n * Provides:\n * - Path-based domain resolution (module.aggregate.entity)\n * - Definition-level caching with fresh model creation\n * - Type-specific middleware processing\n * - On-demand domain loading with first-wins strategy\n * - Model creation and dependency injection\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDomainRegistry {\n    // Cache definitions (before middleware), not models\n    private readonly _definitionCache = new Map<string, AXPDomainDefinition>();\n\n    // Type-specific middleware collections\n    private readonly _moduleMiddleware: AXPDomainMiddleware[] = [];\n    private readonly _aggregateMiddleware: AXPDomainMiddleware[] = [];\n    private readonly _entityMiddleware: AXPDomainMiddleware[] = [];\n\n    // Registered loaders for on-demand loading\n    private _loaders: AXPDomainLoader[] = [];\n\n    // Injected dependencies\n    private readonly propertyService = inject(AXPPropertyService);\n\n    //#region ----   Main Resolution Method   ----\n\n    /**\n     * Resolve a domain object by path with full middleware processing.\n     * Supports definition-level caching with fresh model creation.\n     * \n     * @param path Domain path (e.g., \"user-management.user-aggregate.user\")\n     * @returns Promise that resolves to the domain model\n     */\n    async resolve<T>(path: string): Promise<T> {\n        const pathInfo = this.parsePath(path);\n\n        // Check definition cache first\n        let definition = this._definitionCache.get(path);\n\n        if (!definition) {\n            // Load from first available loader\n            definition = await this.loadFromLoaders(path, pathInfo.type);\n            if (!definition) {\n                throw new Error(`Cannot resolve domain path: ${path}`);\n            }\n            // Cache the raw definition\n            this._definitionCache.set(path, definition);\n        }\n\n        // Apply type-specific middleware (creates new processed definition)\n        const processedDefinition = await this.applyTypeMiddleware(definition, pathInfo.type, path);\n\n        // Create and return fresh model instance (not cached)\n        return this.createModel(processedDefinition, pathInfo) as T;\n    }\n\n    //#endregion\n\n    //#region ----   Path Parsing   ----\n\n    /**\n     * Parse domain path string into structured information\n     * \n     * @param path Domain path to parse\n     * @returns Parsed path information\n     */\n    private parsePath(path: string): AXPDomainPathInfo {\n        const parts = path.split('.');\n\n        if (parts.length === 1) {\n            return {\n                module: parts[0],\n                type: 'module',\n                fullPath: path\n            };\n        } else if (parts.length === 2) {\n            return {\n                module: parts[0],\n                aggregate: parts[1],\n                type: 'aggregate',\n                fullPath: path\n            };\n        } else if (parts.length === 3) {\n            return {\n                module: parts[0],\n                aggregate: parts[1],\n                entity: parts[2],\n                type: 'entity',\n                fullPath: path\n            };\n        }\n\n        throw new Error(`Invalid domain path format: ${path}. Expected: module, module.aggregate, or module.aggregate.entity`);\n    }\n\n    //#endregion\n\n    //#region ----   Loader Management   ----\n\n    /**\n     * Register a domain loader for on-demand loading\n     * \n     * @param loader The loader instance to register\n     */\n    addLoader(loader: AXPDomainLoader): void {\n        this._loaders.push(loader);\n        // Sort by priority (highest first) after adding\n        this._loaders.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n    }\n\n    /**\n     * Load definition from registered loaders using first-wins strategy\n     * \n     * @param path Domain path to load\n     * @param type Type of domain object\n     * @returns Promise that resolves to definition or undefined\n     */\n    private async loadFromLoaders(path: string, type: 'module' | 'aggregate' | 'entity'): Promise<AXPDomainDefinition | undefined> {\n        for (const loader of this._loaders) {\n            if (loader.canLoad(path, type)) {\n                try {\n                    const definition = await loader.load(path, type);\n                    if (definition) {\n                        console.log(`✓ Loaded ${path} from ${loader.constructor.name}`);\n                        return definition; // Return first successful result\n                    }\n                } catch (error) {\n                    console.warn(`⚠ Loader ${loader.constructor.name} failed for ${path}:`, error);\n                    // Continue to next loader instead of throwing\n                }\n            }\n        }\n\n        return undefined; // No loader could provide the definition\n    }\n\n    //#endregion\n\n    //#region ----   Middleware Management   ----\n\n    /**\n     * Add middleware for module processing\n     */\n    addModuleMiddleware(middleware: AXPDomainMiddleware): void {\n        this._moduleMiddleware.push(middleware);\n    }\n\n    /**\n     * Add middleware for aggregate processing\n     */\n    addAggregateMiddleware(middleware: AXPDomainMiddleware): void {\n        this._aggregateMiddleware.push(middleware);\n    }\n\n    /**\n     * Add middleware for entity processing\n     */\n    addEntityMiddleware(middleware: AXPDomainMiddleware): void {\n        this._entityMiddleware.push(middleware);\n    }\n\n    /**\n     * Apply type-specific middleware to definition\n     * \n     * @param definition Raw definition from cache or loader\n     * @param type Type of domain object\n     * @param path Original path for context\n     * @returns Processed definition\n     */\n    private async applyTypeMiddleware(\n        definition: AXPDomainDefinition,\n        type: 'module' | 'aggregate' | 'entity',\n        path: string\n    ): Promise<AXPDomainDefinition> {\n        const middleware = this.getMiddlewareForType(type);\n\n        if (middleware.length === 0) {\n            return definition; // No middleware to apply\n        }\n\n        const context = new AXPDomainMiddlewareContext(definition, type);\n\n        // Apply all middleware for this type\n        for (const mw of middleware) {\n            await mw(context);\n        }\n\n        return context.definition;\n    }\n\n    /**\n     * Get middleware collection for specific type\n     * \n     * @param type Domain object type\n     * @returns Array of middleware functions\n     */\n    private getMiddlewareForType(type: 'module' | 'aggregate' | 'entity'): AXPDomainMiddleware[] {\n        switch (type) {\n            case 'module': return this._moduleMiddleware;\n            case 'aggregate': return this._aggregateMiddleware;\n            case 'entity': return this._entityMiddleware;\n            default: return [];\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Model Creation   ----\n\n    /**\n * Create domain model from processed definition\n * \n * @param definition Processed definition (after middleware)\n * @param pathInfo Parsed path information\n * @returns Created domain model\n */\n    private createModel(definition: AXPDomainDefinition, pathInfo: AXPDomainPathInfo): any {\n        switch (pathInfo.type) {\n            case 'module':\n                return new AXPModuleModel(definition as any);\n\n            case 'aggregate':\n                // For aggregate, we need to resolve parent module first\n                // This will be simplified when we refactor the models\n                const moduleDefinition = {\n                    name: pathInfo.module,\n                    title: pathInfo.module,\n                    aggregates: [definition]\n                };\n                const parentModule = new AXPModuleModel(moduleDefinition as any);\n                return new AXPAggregateModel(definition as any, parentModule);\n\n            case 'entity':\n                // For entity, we need both module and aggregate parents\n                // This will be simplified when we refactor the models\n                const entityAggregateDefinition = {\n                    name: pathInfo.aggregate,\n                    title: pathInfo.aggregate || '',\n                    entities: [definition],\n                    validations: [],\n                    actions: []\n                };\n                const entityModuleDefinition = {\n                    name: pathInfo.module,\n                    title: pathInfo.module,\n                    aggregates: [entityAggregateDefinition]\n                };\n                const entityModule = new AXPModuleModel(entityModuleDefinition as any);\n                const entityAggregate = new AXPAggregateModel(entityAggregateDefinition as any, entityModule);\n                return new AXPEntityModel(definition as any, entityAggregate, this.propertyService);\n\n            default:\n                throw new Error(`Unknown domain type: ${pathInfo.type}`);\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Cache Management   ----\n\n    /**\n     * Clear definition cache for a specific path\n     * \n     * @param path Path to clear from cache\n     */\n    invalidateCache(path: string): void {\n        this._definitionCache.delete(path);\n    }\n\n    /**\n     * Clear all cached definitions\n     */\n    clearCache(): void {\n        this._definitionCache.clear();\n    }\n\n    /**\n     * Get cache statistics\n     */\n    getCacheStats(): { size: number; paths: string[] } {\n        return {\n            size: this._definitionCache.size,\n            paths: Array.from(this._definitionCache.keys())\n        };\n    }\n\n    //#endregion\n}\n\n//#endregion ","import { Injectable, inject } from '@angular/core';\nimport { AXPDomainRegistry } from './domain.registry';\nimport { AXPModuleModel } from '../../models/module.model';\nimport { AXPAggregateModel } from '../../models/aggregate.model';\nimport { AXPEntityModel } from '../../models/entity.model';\n\n//#region ----   Domain Service   ----\n\n/**\n * High-level facade service for domain operations.\n * \n * Provides simplified interfaces to the domain registry with additional\n * business logic and convenience methods for common operations.\n * \n * This service acts as the main entry point for domain model resolution\n * and provides a clean API for consuming applications.\n */\n@Injectable({ providedIn: 'root' })\nexport class AXPDomainService {\n\n    // Injected dependencies\n    private readonly registry = inject(AXPDomainRegistry);\n\n    //#region ----   Module Operations   ----\n\n    /**\n     * Get module by name\n     * \n     * @param name Module name\n     * @returns Promise that resolves to module model\n     */\n    async getModule(name: string): Promise<AXPModuleModel> {\n        return this.registry.resolve<AXPModuleModel>(name);\n    }\n\n    /**\n     * Check if module exists\n     * \n     * @param name Module name\n     * @returns Promise that resolves to boolean\n     */\n    async moduleExists(name: string): Promise<boolean> {\n        try {\n            await this.getModule(name);\n            return true;\n        } catch {\n            return false;\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Aggregate Operations   ----\n\n    /**\n     * Get aggregate by module and aggregate names\n     * \n     * @param moduleName Module name\n     * @param aggregateName Aggregate name\n     * @returns Promise that resolves to aggregate model\n     */\n    async getAggregate(moduleName: string, aggregateName: string): Promise<AXPAggregateModel> {\n        const path = `${moduleName}.${aggregateName}`;\n        return this.registry.resolve<AXPAggregateModel>(path);\n    }\n\n    /**\n     * Get aggregate by path\n     * \n     * @param path Aggregate path (module.aggregate)\n     * @returns Promise that resolves to aggregate model\n     */\n    async getAggregateByPath(path: string): Promise<AXPAggregateModel> {\n        return this.registry.resolve<AXPAggregateModel>(path);\n    }\n\n    /**\n     * Check if aggregate exists\n     * \n     * @param moduleName Module name\n     * @param aggregateName Aggregate name\n     * @returns Promise that resolves to boolean\n     */\n    async aggregateExists(moduleName: string, aggregateName: string): Promise<boolean> {\n        try {\n            await this.getAggregate(moduleName, aggregateName);\n            return true;\n        } catch {\n            return false;\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Entity Operations   ----\n\n    /**\n     * Get entity by full path\n     * \n     * @param path Full entity path (module.aggregate.entity)\n     * @returns Promise that resolves to entity model\n     */\n    async getEntity(path: string): Promise<AXPEntityModel> {\n        return this.registry.resolve<AXPEntityModel>(path);\n    }\n\n    /**\n     * Get entity by component parts\n     * \n     * @param moduleName Module name\n     * @param aggregateName Aggregate name\n     * @param entityName Entity name\n     * @returns Promise that resolves to entity model\n     */\n    async getEntityByParts(moduleName: string, aggregateName: string, entityName: string): Promise<AXPEntityModel> {\n        const path = `${moduleName}.${aggregateName}.${entityName}`;\n        return this.getEntity(path);\n    }\n\n    /**\n     * Check if entity exists\n     * \n     * @param path Full entity path\n     * @returns Promise that resolves to boolean\n     */\n    async entityExists(path: string): Promise<boolean> {\n        try {\n            await this.getEntity(path);\n            return true;\n        } catch {\n            return false;\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Batch Operations   ----\n\n    /**\n     * Get multiple modules in parallel\n     * \n     * @param moduleNames Array of module names\n     * @returns Promise that resolves to array of module models\n     */\n    async getModules(moduleNames: string[]): Promise<AXPModuleModel[]> {\n        return Promise.all(moduleNames.map(name => this.getModule(name)));\n    }\n\n    /**\n     * Get multiple aggregates in parallel\n     * \n     * @param aggregatePaths Array of aggregate paths\n     * @returns Promise that resolves to array of aggregate models\n     */\n    async getAggregates(aggregatePaths: string[]): Promise<AXPAggregateModel[]> {\n        return Promise.all(aggregatePaths.map(path => this.getAggregateByPath(path)));\n    }\n\n    /**\n     * Get multiple entities in parallel\n     * \n     * @param entityPaths Array of entity paths\n     * @returns Promise that resolves to array of entity models\n     */\n    async getEntities(entityPaths: string[]): Promise<AXPEntityModel[]> {\n        return Promise.all(entityPaths.map(path => this.getEntity(path)));\n    }\n\n    //#endregion\n\n    //#region ----   Search and Discovery   ----\n\n    /**\n     * Find entities by name across all loaded modules\n     * \n     * @param entityName Entity name to search for\n     * @returns Promise that resolves to array of matching entity paths\n     */\n    async findEntitiesByName(entityName: string): Promise<string[]> {\n        // This would require additional registry functionality\n        // For now, return empty array as placeholder\n        return [];\n    }\n\n    /**\n     * Get all aggregates for a module\n     * \n     * @param moduleName Module name\n     * @returns Promise that resolves to array of aggregate models\n     */\n    async getModuleAggregates(moduleName: string): Promise<AXPAggregateModel[]> {\n        const module = await this.getModule(moduleName);\n        return module.getAllAggregates();\n    }\n\n    /**\n     * Get all entity references for an aggregate\n     * \n     * @param moduleName Module name\n     * @param aggregateName Aggregate name\n     * @returns Promise that resolves to entity references map\n     */\n    async getAggregateEntityReferences(moduleName: string, aggregateName: string): Promise<Record<string, string>> {\n        const aggregate = await this.getAggregate(moduleName, aggregateName);\n        return aggregate.entityReferences;\n    }\n\n    //#endregion\n\n    //#region ----   Validation Operations   ----\n\n    /**\n     * Validate module and all its components\n     * \n     * @param moduleName Module name\n     * @returns Promise that resolves to validation errors array\n     */\n    async validateModule(moduleName: string): Promise<string[]> {\n        try {\n            const module = await this.getModule(moduleName);\n            return module.validate();\n        } catch (error) {\n            return [`Failed to load module '${moduleName}': ${error instanceof Error ? error.message : 'Unknown error'}`];\n        }\n    }\n\n    /**\n     * Validate aggregate and its components\n     * \n     * @param moduleName Module name\n     * @param aggregateName Aggregate name\n     * @returns Promise that resolves to validation errors array\n     */\n    async validateAggregate(moduleName: string, aggregateName: string): Promise<string[]> {\n        try {\n            const aggregate = await this.getAggregate(moduleName, aggregateName);\n            return aggregate.validate();\n        } catch (error) {\n            return [`Failed to load aggregate '${moduleName}.${aggregateName}': ${error instanceof Error ? error.message : 'Unknown error'}`];\n        }\n    }\n\n    //#endregion\n\n    //#region ----   Utility Operations   ----\n\n    /**\n     * Get statistics for a module\n     * \n     * @param moduleName Module name\n     * @returns Promise that resolves to module statistics\n     */\n    async getModuleStatistics(moduleName: string): Promise<any> {\n        const module = await this.getModule(moduleName);\n        return module.getStatistics();\n    }\n\n    /**\n     * Get statistics for an aggregate\n     * \n     * @param moduleName Module name\n     * @param aggregateName Aggregate name\n     * @returns Promise that resolves to aggregate statistics\n     */\n    async getAggregateStatistics(moduleName: string, aggregateName: string): Promise<any> {\n        const aggregate = await this.getAggregate(moduleName, aggregateName);\n        return aggregate.getStatistics();\n    }\n\n    /**\n     * Clear registry cache\n     */\n    clearCache(): void {\n        this.registry.clearCache();\n    }\n\n    /**\n     * Get cache statistics\n     * \n     * @returns Cache statistics object\n     */\n    getCacheStatistics(): { size: number; paths: string[] } {\n        return this.registry.getCacheStats();\n    }\n\n    /**\n     * Invalidate cache for specific path\n     * \n     * @param path Domain path to invalidate\n     */\n    invalidateCache(path: string): void {\n        this.registry.invalidateCache(path);\n    }\n\n    //#endregion\n\n    //#region ----   Helper Methods   ----\n\n    /**\n     * Parse domain path into components\n     * \n     * @param path Domain path to parse\n     * @returns Parsed path components\n     */\n    parsePath(path: string): { module: string; aggregate?: string; entity?: string; type: string } {\n        const parts = path.split('.');\n\n        if (parts.length === 1) {\n            return { module: parts[0], type: 'module' };\n        } else if (parts.length === 2) {\n            return { module: parts[0], aggregate: parts[1], type: 'aggregate' };\n        } else if (parts.length === 3) {\n            return { module: parts[0], aggregate: parts[1], entity: parts[2], type: 'entity' };\n        }\n\n        throw new Error(`Invalid domain path format: ${path}`);\n    }\n\n    /**\n     * Build path from components\n     * \n     * @param module Module name\n     * @param aggregate Aggregate name (optional)\n     * @param entity Entity name (optional)\n     * @returns Built path string\n     */\n    buildPath(module: string, aggregate?: string, entity?: string): string {\n        if (entity && aggregate) {\n            return `${module}.${aggregate}.${entity}`;\n        } else if (aggregate) {\n            return `${module}.${aggregate}`;\n        } else {\n            return module;\n        }\n    }\n\n    //#endregion\n}\n\n//#endregion ","import { AXPModuleDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPAggregateDefinition } from '@acorex/platform/domain-contracts';\nimport { AXPEntityDefinition } from '@acorex/platform/domain-contracts';\n\n//#region ----   Domain Loader Interface   ----\n\n/**\n * Union type for all domain definition types\n */\nexport type AXPDomainDefinition = AXPModuleDefinition | AXPAggregateDefinition | AXPEntityDefinition;\n\n/**\n * Domain path information parsed from path string\n */\nexport interface AXPDomainPathInfo {\n    module: string;\n    aggregate?: string;\n    entity?: string;\n    type: 'module' | 'aggregate' | 'entity';\n    fullPath: string;\n}\n\n/**\n * Interface for domain loaders that can provide domain definitions on-demand\n */\nexport interface AXPDomainLoader {\n    /**\n     * Optional priority for loader ordering. Higher numbers = higher priority.\n     * If not specified, uses registration order.\n     */\n    readonly priority?: number;\n\n    /**\n     * Determines if this loader can handle the given domain path\n     * @param path The domain path to load (e.g., \"user-management.user-aggregate.user\")\n     * @param type The type of domain object being requested\n     * @returns true if this loader can load the domain definition\n     */\n    canLoad(path: string, type: 'module' | 'aggregate' | 'entity'): boolean;\n\n    /**\n     * Loads the domain definition for the given path\n     * @param path The domain path to load\n     * @param type The type of domain object being requested\n     * @returns Promise that resolves to the domain definition or null if not found\n     */\n    load(path: string, type: 'module' | 'aggregate' | 'entity'): Promise<AXPDomainDefinition | null>;\n}\n\n//#endregion ","import { EnvironmentProviders, inject, makeEnvironmentProviders, Type } from '@angular/core';\nimport { AXPDomainLoader } from './domain-loader.interface';\nimport { AXPDomainRegistry } from './domain.registry';\nimport { AXP_DOMAIN_LOADER_SETUP } from './domain-extension.token';\n\n//#region ----   Domain Loader Configuration   ----\n\n/**\n * Configuration for a domain loader with optional priority setting\n */\nexport interface AXPDomainLoaderConfig {\n    /** The loader class or instance to register */\n    loader: Type<AXPDomainLoader> | AXPDomainLoader;\n    /** Optional priority for loader ordering (higher = higher priority) */\n    priority?: number;\n}\n\n\n\n//#endregion\n\n//#region ----   Provider Functions   ----\n\n/**\n * Provide domain loaders for on-demand domain loading.\n * \n * Domain loaders enable the registry to load domain definitions that are not registered\n * at build time. This is useful for:\n * - Loading domain definitions from external APIs\n * - Dynamic domain generation\n * - Lazy loading of large domain sets\n * - Development-time domain hot-reloading\n * \n * @param loaders Array of loader classes, instances, or loader configurations\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * // Simple loader registration\n * provideDomainLoaders([\n *   HttpDomainLoader,\n *   FileSystemDomainLoader,\n *   new MemoryDomainLoader()\n * ])\n * \n * // With priority configuration\n * provideDomainLoaders([\n *   { loader: HttpDomainLoader, priority: 10 },\n *   { loader: FileSystemDomainLoader, priority: 5 },\n *   { loader: new MemoryDomainLoader(), priority: 15 }\n * ])\n * ```\n */\nexport function provideDomainLoaders(\n    loaders: Array<Type<AXPDomainLoader> | AXPDomainLoader | AXPDomainLoaderConfig>\n): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: AXP_DOMAIN_LOADER_SETUP,\n            useFactory: async () => {\n                const registry = inject(AXPDomainRegistry);\n                if (!registry) {\n                    console.warn('Domain registry not available during loader setup');\n                    return false;\n                }\n\n                // Register each loader with the registry\n                for (const loaderConfig of loaders) {\n                    try {\n                        let loaderInstance: AXPDomainLoader;\n                        let priority: number | undefined;\n\n                        if (typeof loaderConfig === 'function') {\n                            // Type<AXPDomainLoader>\n                            loaderInstance = new loaderConfig();\n                            priority = loaderInstance.priority;\n                        } else if (typeof loaderConfig === 'object' && 'canLoad' in loaderConfig) {\n                            // AXPDomainLoader instance\n                            loaderInstance = loaderConfig;\n                            priority = loaderInstance.priority;\n                        } else if (typeof loaderConfig === 'object' && 'loader' in loaderConfig) {\n                            // AXPDomainLoaderConfig\n                            if (typeof loaderConfig.loader === 'function') {\n                                loaderInstance = new loaderConfig.loader();\n                            } else {\n                                loaderInstance = loaderConfig.loader;\n                            }\n                            priority = loaderConfig.priority ?? loaderInstance.priority;\n                        } else {\n                            console.warn('Invalid loader configuration:', loaderConfig);\n                            continue;\n                        }\n\n                        // Apply custom priority if specified\n                        if (priority !== undefined && priority !== loaderInstance.priority) {\n                            (loaderInstance as any).priority = priority;\n                        }\n\n                        registry.addLoader(loaderInstance);\n                        console.log(`✓ Registered domain loader: ${loaderInstance.constructor.name} (priority: ${loaderInstance.priority ?? 0})`);\n\n                    } catch (error) {\n                        console.error('Failed to register domain loader:', error);\n                    }\n                }\n\n                return true;\n            },\n            multi: true\n        }\n    ]);\n}\n\n/**\n * Provide a single domain loader for convenience\n * \n * @param loader Loader class, instance, or configuration\n * @returns Environment providers for dependency injection\n */\nexport function provideDomainLoader(\n    loader: Type<AXPDomainLoader> | AXPDomainLoader | AXPDomainLoaderConfig\n): EnvironmentProviders {\n    return provideDomainLoaders([loader]);\n}\n\n//#endregion ","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { AXPDomainMiddleware } from './domain-middleware.interface';\nimport { AXPDomainRegistry } from './domain.registry';\n\n//#region ----   Injection Tokens   ----\n\n/**\n * Injection tokens for type-specific middleware setup\n */\nexport const AXP_MODULE_MIDDLEWARE_SETUP = 'AXP_MODULE_MIDDLEWARE_SETUP';\nexport const AXP_AGGREGATE_MIDDLEWARE_SETUP = 'AXP_AGGREGATE_MIDDLEWARE_SETUP';\nexport const AXP_ENTITY_MIDDLEWARE_SETUP = 'AXP_ENTITY_MIDDLEWARE_SETUP';\n\n//#endregion\n\n//#region ----   Provider Functions   ----\n\n/**\n * Provide middleware for module processing.\n * \n * Module middleware is applied when resolving module definitions and can:\n * - Add metadata and custom properties\n * - Validate module structure\n * - Transform module definitions\n * - Add computed properties\n * \n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideModuleMiddleware([\n *   (context) => {\n *     // Add common module metadata\n *     context.setMetadata('loadedAt', new Date());\n *     context.setMetadata('version', '1.0.0');\n *   },\n *   (context) => {\n *     // Add namespace prefix if not present\n *     if (!context.definition.name.includes('.')) {\n *       context.definition.name = `app.${context.definition.name}`;\n *     }\n *   }\n * ])\n * ```\n */\nexport function provideModuleMiddleware(\n    middleware: AXPDomainMiddleware[]\n): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: AXP_MODULE_MIDDLEWARE_SETUP,\n            useFactory: () => {\n                // Access registry through DI when available\n                const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n                if (!registry) {\n                    console.warn('Domain registry not available during module middleware setup');\n                    return false;\n                }\n\n                // Register all module middleware\n                for (const mw of middleware) {\n                    registry.addModuleMiddleware(mw);\n                }\n\n                console.log(`✓ Registered ${middleware.length} module middleware functions`);\n                return true;\n            },\n            multi: true\n        }\n    ]);\n}\n\n/**\n * Provide middleware for aggregate processing.\n * \n * Aggregate middleware is applied when resolving aggregate definitions and can:\n * - Add metadata and custom properties\n * - Validate aggregate structure\n * - Transform entity references\n * - Add computed relations\n * \n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideAggregateMiddleware([\n *   (context) => {\n *     // Add aggregate metadata\n *     context.setMetadata('type', 'business-aggregate');\n *   },\n *   (context) => {\n *     // Validate entity references\n *     const entities = context.definition.entities;\n *     if (Object.keys(entities).length === 0) {\n *       throw new Error('Aggregate must have at least one entity');\n *     }\n *   }\n * ])\n * ```\n */\nexport function provideAggregateMiddleware(\n    middleware: AXPDomainMiddleware[]\n): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: AXP_AGGREGATE_MIDDLEWARE_SETUP,\n            useFactory: () => {\n                // Access registry through DI when available\n                const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n                if (!registry) {\n                    console.warn('Domain registry not available during aggregate middleware setup');\n                    return false;\n                }\n\n                // Register all aggregate middleware\n                for (const mw of middleware) {\n                    registry.addAggregateMiddleware(mw);\n                }\n\n                console.log(`✓ Registered ${middleware.length} aggregate middleware functions`);\n                return true;\n            },\n            multi: true\n        }\n    ]);\n}\n\n/**\n * Provide middleware for entity processing.\n * \n * Entity middleware is applied when resolving entity definitions and can:\n * - Add auto-generated fields (id, timestamps)\n * - Apply field transformations\n * - Add validation rules\n * - Set default values\n * \n * @param middleware Array of middleware functions to register\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideEntityMiddleware([\n *   (context) => {\n *     // Add auto-generated ID field if not present\n *     if (!context.definition.fields.some(f => f.name === 'id')) {\n *       context.addField({\n *         name: 'id',\n *         type: 'uuid',\n *         required: true,\n *         generated: true\n *       });\n *     }\n *   },\n *   (context) => {\n *     // Add timestamp fields\n *     context.addField({\n *       name: 'createdAt',\n *       type: 'datetime',\n *       required: true,\n *       generated: true\n *     });\n *     context.addField({\n *       name: 'updatedAt',\n *       type: 'datetime',\n *       required: true,\n *       generated: true\n *     });\n *   }\n * ])\n * ```\n */\nexport function provideEntityMiddleware(\n    middleware: AXPDomainMiddleware[]\n): EnvironmentProviders {\n    return makeEnvironmentProviders([\n        {\n            provide: AXP_ENTITY_MIDDLEWARE_SETUP,\n            useFactory: () => {\n                // Access registry through DI when available\n                const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n                if (!registry) {\n                    console.warn('Domain registry not available during entity middleware setup');\n                    return false;\n                }\n\n                // Register all entity middleware\n                for (const mw of middleware) {\n                    registry.addEntityMiddleware(mw);\n                }\n\n                console.log(`✓ Registered ${middleware.length} entity middleware functions`);\n                return true;\n            },\n            multi: true\n        }\n    ]);\n}\n\n/**\n * Provide combined middleware for all domain types.\n * \n * This is a convenience function that allows registering middleware for multiple\n * domain types in a single call.\n * \n * @param config Configuration object with middleware for each type\n * @returns Environment providers for dependency injection\n * \n * @example\n * ```typescript\n * provideDomainMiddleware({\n *   modules: [\n *     (context) => context.setMetadata('loadedAt', new Date())\n *   ],\n *   aggregates: [\n *     (context) => context.setMetadata('type', 'business-aggregate')\n *   ],\n *   entities: [\n *     (context) => {\n *       if (!context.definition.fields.some(f => f.name === 'id')) {\n *         context.addField({ name: 'id', type: 'uuid', required: true });\n *       }\n *     }\n *   ]\n * })\n * ```\n */\nexport function provideDomainMiddleware(config: {\n    modules?: AXPDomainMiddleware[];\n    aggregates?: AXPDomainMiddleware[];\n    entities?: AXPDomainMiddleware[];\n}): EnvironmentProviders {\n    const allProviders: any[] = [];\n\n    // Add module middleware providers\n    if (config.modules && config.modules.length > 0) {\n        allProviders.push({\n            provide: AXP_MODULE_MIDDLEWARE_SETUP,\n            useFactory: () => {\n                const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n                if (!registry) {\n                    console.warn('Domain registry not available during module middleware setup');\n                    return false;\n                }\n                for (const mw of config.modules!) {\n                    registry.addModuleMiddleware(mw);\n                }\n                return true;\n            },\n            multi: true\n        });\n    }\n\n    // Add aggregate middleware providers\n    if (config.aggregates && config.aggregates.length > 0) {\n        allProviders.push({\n            provide: AXP_AGGREGATE_MIDDLEWARE_SETUP,\n            useFactory: () => {\n                const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n                if (!registry) {\n                    console.warn('Domain registry not available during aggregate middleware setup');\n                    return false;\n                }\n                for (const mw of config.aggregates!) {\n                    registry.addAggregateMiddleware(mw);\n                }\n                return true;\n            },\n            multi: true\n        });\n    }\n\n    // Add entity middleware providers\n    if (config.entities && config.entities.length > 0) {\n        allProviders.push({\n            provide: AXP_ENTITY_MIDDLEWARE_SETUP,\n            useFactory: () => {\n                const registry = (globalThis as any).__domainRegistry__ as AXPDomainRegistry;\n                if (!registry) {\n                    console.warn('Domain registry not available during entity middleware setup');\n                    return false;\n                }\n                for (const mw of config.entities!) {\n                    registry.addEntityMiddleware(mw);\n                }\n                return true;\n            },\n            multi: true\n        });\n    }\n\n    return makeEnvironmentProviders(allProviders);\n}\n\n//#endregion ","//#region ----   Core Registry System   ----\n\n// Main registry and service\nexport * from './domain.registry';\nexport * from './domain.service';\n\n//#endregion\n\n//#region ----   Loader System   ----\n\n// Loader interface and providers\nexport * from './domain-loader.interface';\nexport * from './provide-domain-loaders';\n\n//#endregion\n\n//#region ----   Middleware System   ----\n\n// Middleware interface and providers\nexport * from './domain-middleware.interface';\nexport * from './provide-domain-middleware';\n\n//#endregion ","export * from './lib/provide-entity';\nexport * from './lib/entity-definition-crud.token';\nexport * from './lib/domain.module';\n\n//#region ----   Runtime Models   ----\n\nexport * from './lib/models/module.model';\nexport * from './lib/models/aggregate.model';\nexport * from './lib/models/entity.model';\nexport * from './lib/models/entity-field.model';\nexport * from './lib/models/property.model';\nexport * from './lib/models/relation.model';\n\n//#endregion\n\n//#region ----   Helpers   ----\n\nexport * from './lib/helpers/module-helper';\n\n//#endregion\n\n//#region ----   Property registry services   ----\n\nexport * from './lib/registries/property';\n\n//#endregion\n\n//#region ----   Domain Registry Services   ----\n\nexport * from './lib/registries/domain';\n\n//#endregion\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}