@agility/cli
Version:
Agility CLI for working with your content. (Public Beta)
130 lines (129 loc) • 4.09 kB
TypeScript
/**
* 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[];
};
}