export type BulkStructureRoot = 'phase' | 'milestone' | 'activity'; export type BulkStructureEntityType = 'phase' | 'milestone' | 'activity' | 'task'; export type BulkStructureParserErrorCode = 'INVALID_INDENTATION_CHARACTER' | 'INVALID_INDENTATION_SIZE' | 'TOO_MANY_INDENTATION_LEVELS' | 'EXPECTED_PARENT_BEFORE'; export interface BulkStructureNode { type: BulkStructureEntityType; name: string; children?: BulkStructureNode[]; } export interface BulkStructureError { line: number; code: BulkStructureParserErrorCode; params?: Record; } export interface BulkStructureParseResult { valid: boolean; data: BulkStructureNode[]; errors: BulkStructureError[]; } export interface BulkStructureConvention { rootType: BulkStructureRoot; levels: BulkStructureEntityType[]; indentSize: number; indentCharacter: string; } export interface BulkPhaseHierarchyPayload { name: string; rank: string; milestones?: BulkMilestoneHierarchyPayload[]; } export interface BulkMilestoneHierarchyPayload { name: string; rank: string; activities?: BulkActivityHierarchyPayload[]; } export interface BulkActivityHierarchyPayload { name: string; rank: string; tasks?: BulkTaskHierarchyPayload[]; } export interface BulkTaskHierarchyPayload { name: string; }