@agility/cli
Version:
Agility CLI for working with your content. (Public Beta)
141 lines (140 loc) • 3.35 kB
TypeScript
/**
* Shared TypeScript interfaces and types for sync analysis system
*/
/**
* Model tracking to prevent duplicates across all chain displays
*/
export interface ModelTracker {
displayedModels: Set<string>;
isModelDisplayed(modelName: string): boolean;
markModelDisplayed(modelName: string): void;
reset(): void;
}
/**
* Context for sync analysis operations
*/
export interface SyncAnalysisContext {
sourceGuid: string;
locale: string;
isPreview: boolean;
rootPath: string;
legacyFolders?: boolean;
debug: boolean;
elements: string[];
modelTracker?: ModelTracker;
}
/**
* Base interface for all sync analysis services
*/
export interface SyncAnalysisService {
/**
* Initialize the service with context
*/
initialize(context: SyncAnalysisContext): void;
}
/**
* Interface for services that analyze specific entity chains
*/
export interface ChainAnalysisService extends SyncAnalysisService {
/**
* Analyze and display the chains for this service's domain
*/
analyzeChains(sourceEntities: SourceEntities): void;
}
/**
* Interface for utility services that extract references
*/
export interface ReferenceExtractionService extends SyncAnalysisService {
/**
* Extract references from the given data structure
*/
extractReferences(data: any): any[];
}
/**
* Interface for services that validate dependencies
*/
export interface DependencyValidationService extends SyncAnalysisService {
/**
* Validate dependencies for a given entity
*/
validateDependencies(entity: any, sourceEntities: SourceEntities): DependencyValidationResult;
}
/**
* Result of dependency validation
*/
export interface DependencyValidationResult {
missing: string[];
isBroken: boolean;
}
export interface SitemapNode {
title: string | null;
name: string;
pageID: number;
menuText: string;
visible: {
menu: boolean;
sitemap: boolean;
};
path: string;
redirect: {
url: string;
target: string;
} | null;
isFolder: boolean;
contentID?: number;
children?: SitemapNode[];
}
export interface PageHierarchy {
[parentPageID: number]: number[];
}
export interface HierarchicalPageGroup {
rootPage: any;
childPages: any[];
allPageIds: Set<number>;
}
export interface SourceEntities {
pages?: any[];
content?: any[];
models?: any[];
templates?: any[];
containers?: any[];
assets?: any[];
galleries?: any[];
}
export interface MissingDependency {
type: string;
id: string | number;
name?: string;
}
export interface BrokenChain {
entity: any;
missing: string[];
type: 'page' | 'container' | 'model';
}
export interface EntityCounts {
pages: number;
content: number;
models: number;
templates: number;
containers: number;
assets: number;
galleries: number;
}
export interface EntitiesInChains {
pages: Set<number>;
content: Set<number>;
models: Set<string>;
templates: Set<string>;
containers: Set<number>;
assets: Set<string>;
galleries: Set<number>;
}
export interface AssetReference {
url: string;
fieldPath: string;
}
export interface ContainerReference {
contentID: number;
fieldPath: string;
referenceName?: string;
}