export type DocumentationType = | 'function' | 'class' | 'interface' | 'module' | 'api' | 'readme' | 'changelog' | 'architecture' | 'tutorial' | 'other'; export type DocumentationFormat = 'markdown' | 'jsdoc' | 'tsdoc' | 'asciidoc' | 'rst' | 'plain'; export interface DocSuggestion { readonly id: string; readonly type: DocumentationType; readonly format: DocumentationFormat; readonly title: string; readonly content: string; readonly targetFile?: string; readonly targetFunction?: string; readonly targetClass?: string; readonly targetModule?: string; readonly language?: string; readonly examples?: string[]; readonly parameters?: DocParameter[]; readonly returnType?: string; readonly seeAlso?: string[]; readonly metadata?: Record; } export interface DocParameter { readonly name: string; readonly type: string; readonly description: string; readonly required: boolean; readonly defaultValue?: string; } export interface DocSuggestionBuilder { id(id: string): DocSuggestionBuilder; type(type: DocumentationType): DocSuggestionBuilder; format(format: DocumentationFormat): DocSuggestionBuilder; title(title: string): DocSuggestionBuilder; content(content: string): DocSuggestionBuilder; targetFile(targetFile: string): DocSuggestionBuilder; targetFunction(targetFunction: string): DocSuggestionBuilder; targetClass(targetClass: string): DocSuggestionBuilder; targetModule(targetModule: string): DocSuggestionBuilder; language(language: string): DocSuggestionBuilder; addExample(example: string): DocSuggestionBuilder; examples(examples: string[]): DocSuggestionBuilder; addParameter(parameter: DocParameter): DocSuggestionBuilder; parameters(parameters: DocParameter[]): DocSuggestionBuilder; returnType(returnType: string): DocSuggestionBuilder; addSeeAlso(seeAlso: string): DocSuggestionBuilder; seeAlso(seeAlso: string[]): DocSuggestionBuilder; metadata(metadata: Record): DocSuggestionBuilder; build(): DocSuggestion; } export class DocSuggestionImpl implements DocSuggestionBuilder { private doc: any = { examples: [], parameters: [], seeAlso: [], }; id(id: string): DocSuggestionBuilder { this.doc.id = id; return this; } type(type: DocumentationType): DocSuggestionBuilder { this.doc.type = type; return this; } format(format: DocumentationFormat): DocSuggestionBuilder { this.doc.format = format; return this; } title(title: string): DocSuggestionBuilder { this.doc.title = title; return this; } content(content: string): DocSuggestionBuilder { this.doc.content = content; return this; } targetFile(targetFile: string): DocSuggestionBuilder { this.doc.targetFile = targetFile; return this; } targetFunction(targetFunction: string): DocSuggestionBuilder { this.doc.targetFunction = targetFunction; return this; } targetClass(targetClass: string): DocSuggestionBuilder { this.doc.targetClass = targetClass; return this; } targetModule(targetModule: string): DocSuggestionBuilder { this.doc.targetModule = targetModule; return this; } language(language: string): DocSuggestionBuilder { this.doc.language = language; return this; } addExample(example: string): DocSuggestionBuilder { if (!this.doc.examples) { this.doc.examples = []; } this.doc.examples.push(example); return this; } examples(examples: string[]): DocSuggestionBuilder { this.doc.examples = examples; return this; } addParameter(parameter: DocParameter): DocSuggestionBuilder { if (!this.doc.parameters) { this.doc.parameters = []; } this.doc.parameters.push(parameter); return this; } parameters(parameters: DocParameter[]): DocSuggestionBuilder { this.doc.parameters = parameters; return this; } returnType(returnType: string): DocSuggestionBuilder { this.doc.returnType = returnType; return this; } addSeeAlso(seeAlso: string): DocSuggestionBuilder { if (!this.doc.seeAlso) { this.doc.seeAlso = []; } this.doc.seeAlso.push(seeAlso); return this; } seeAlso(seeAlso: string[]): DocSuggestionBuilder { this.doc.seeAlso = seeAlso; return this; } metadata(metadata: Record): DocSuggestionBuilder { this.doc.metadata = metadata; return this; } build(): DocSuggestion { if (!this.doc.id || !this.doc.type || !this.doc.format || !this.doc.title || !this.doc.content || !this.doc.examples || !this.doc.parameters || !this.doc.seeAlso) { throw new Error('Required fields missing for DocSuggestion'); } const result: any = { id: this.doc.id, type: this.doc.type, format: this.doc.format, title: this.doc.title, content: this.doc.content, examples: this.doc.examples, parameters: this.doc.parameters, seeAlso: this.doc.seeAlso, }; if (this.doc.targetFile) { result.targetFile = this.doc.targetFile; } if (this.doc.targetFunction) { result.targetFunction = this.doc.targetFunction; } if (this.doc.targetClass) { result.targetClass = this.doc.targetClass; } if (this.doc.targetModule) { result.targetModule = this.doc.targetModule; } if (this.doc.language) { result.language = this.doc.language; } if (this.doc.returnType) { result.returnType = this.doc.returnType; } if (this.doc.metadata) { result.metadata = this.doc.metadata; } return result; } }