UNPKG

@agility/cli

Version:

Agility CLI for working with your content. (Public Beta)

130 lines (129 loc) 4.09 kB
/** * Model Dependency Tree Builder Service * * Builds comprehensive dependency trees for selective model-based sync operations. * Analyzes all entity relationships to ensure complete synchronization of specified models. * * Task 104: Create Model Dependency Tree Builder * Phase 21: Selective Model-Based Sync Implementation */ import { SourceData } from '../../types/sourceData'; export interface ModelDependencyTree { models: Set<string>; containers: Set<number>; lists: Set<number>; content: Set<number>; templates: Set<number>; pages: Set<number>; assets: Set<string>; galleries: Set<number>; } export declare class ModelDependencyTreeBuilder { private sourceData; constructor(sourceData: SourceData); /** * Build comprehensive dependency tree from specified model names */ buildDependencyTree(modelNames: string[], channel: string): ModelDependencyTree; /** * Find containers that use the specified models */ private findContainersForModels; /** * Find content items of the specified models */ private findContentForModels; /** * Find templates that use the discovered containers */ private findTemplatesForContainers; /** * Find pages that use the discovered templates or reference discovered content */ private findPagesForTemplatesAndContent; /** * Find templates used by pages that reference discovered content */ private findTemplatesUsedByPages; /** * Extract template IDs from a page */ private extractTemplateIdsFromPage; /** * Find ALL content referenced by discovered pages for complete renderability * This ensures pages can render completely even if they reference content from other models */ private findAllContentReferencedByPages; /** * Find ALL ancestor pages for discovered pages to ensure proper hierarchy and security * Recursively walks up the hierarchy to find all parents, grandparents, etc. */ private findParentPagesForDiscoveredPages; /** * Recursively find all ancestor pages (parents, grandparents, etc.) for a given page */ private findAllAncestorPages; /** * Find the direct parent page for a given page * Returns null if no parent exists (root level page) */ private findParentPage; /** * Find models for all discovered content to ensure complete model coverage */ private findModelsForDiscoveredContent; /** * Find containers for newly discovered models */ private findContainersForDiscoveredModels; /** * Find containers that contain discovered content items * Uses case-insensitive matching to handle Agility CMS pattern: * - Containers: "news1_RichTextArea" (PascalCase) * - Content: "news1_richtextarea" (lowercase) */ private findContainersForDiscoveredContent; /** * Extract all content IDs referenced in a page's zones */ private extractContentIdsFromPage; /** * Find assets referenced in discovered content and pages */ private findAssetsInContent; /** * Find galleries referenced in discovered content */ private findGalleriesInContent; /** * Extract asset URLs from content item fields */ private extractAssetUrlsFromContent; /** * Extract asset URLs from page content */ private extractAssetUrlsFromPage; /** * Extract gallery IDs from content item fields */ private extractGalleryIdsFromContent; /** * Recursively scan object for asset URLs (cdn.aglty.io references) */ private scanObjectForAssetUrls; /** * Recursively scan object for gallery ID references */ private scanObjectForGalleryIds; /** * Get a summary string of the dependency tree */ private getTreeSummary; /** * Validate that specified models exist in source data */ validateModels(modelNames: string[]): { valid: string[]; invalid: string[]; }; }