repoweaver
Version:
A GitHub App that skillfully weaves multiple templates together to create and update repositories with intelligent merge strategies
101 lines • 2.76 kB
TypeScript
export interface TemplateRepository {
url: string;
name: string;
branch?: string;
subDirectory?: string;
}
export interface RepositoryConfig {
name: string;
path: string;
templates: TemplateRepository[];
gitRemote?: string;
excludePatterns?: string[];
mergeStrategy?: 'overwrite' | 'merge' | 'skip';
}
export interface BootstrapOptions {
targetPath: string;
templates: TemplateRepository[];
repositoryName: string;
initGit?: boolean;
addRemote?: string;
mergeStrategy?: 'overwrite' | 'merge' | 'skip';
excludePatterns?: string[];
}
export interface TemplateProcessingResult {
success: boolean;
template: TemplateRepository;
filesProcessed: number;
errors: string[];
pullRequestNumber?: number;
}
export interface BootstrapResult {
success: boolean;
repositoryPath: string;
templateResults: TemplateProcessingResult[];
totalFilesProcessed: number;
errors: string[];
}
export interface MergeStrategyConfig {
type: 'overwrite' | 'merge' | 'skip' | 'custom' | 'plugin';
implementation?: string;
options?: Record<string, any>;
}
export interface FilePatternMergeStrategy {
patterns: string[];
strategy: MergeStrategyConfig;
priority?: number;
}
export interface WeaverConfig {
name?: string;
description?: string;
templates: (string | TemplateRepository)[];
mergeStrategy?: 'overwrite' | 'merge' | 'skip' | MergeStrategyConfig;
mergeStrategies?: FilePatternMergeStrategy[];
excludePatterns?: string[];
includePatterns?: string[];
autoUpdate?: boolean;
createRepository?: boolean;
privateRepository?: boolean;
initGit?: boolean;
addRemote?: string;
hooks?: {
preTemplate?: string[];
postTemplate?: string[];
preBootstrap?: string[];
postBootstrap?: string[];
};
variables?: Record<string, string>;
plugins?: string[];
}
export interface WeaverIgnoreConfig {
patterns: string[];
includePatterns?: string[];
}
export interface MergeContext {
filePath: string;
templateName: string;
existingContent: string;
newContent: string;
options?: Record<string, any>;
}
export interface MergeResult {
success: boolean;
content: string;
conflicts?: string[];
warnings?: string[];
metadata?: Record<string, any>;
}
export interface MergeStrategy {
name: string;
description: string;
merge(context: MergeContext): Promise<MergeResult>;
}
export interface MergePlugin {
name: string;
version: string;
description: string;
strategies: MergeStrategy[];
initialize?(options?: Record<string, any>): Promise<void>;
cleanup?(): Promise<void>;
}
//# sourceMappingURL=types.d.ts.map