(response: Response)
| 84 | } |
| 85 | |
| 86 | const parseFileParserResponse = async (response: Response): Promise<FileParserOutput> => { |
| 87 | logger.info('Received response status:', response.status) |
| 88 | |
| 89 | const result: unknown = await response.json() |
| 90 | logger.info('Response parsed successfully') |
| 91 | |
| 92 | // Handle multiple files response |
| 93 | if (isRecord(result) && Array.isArray(result.results)) { |
| 94 | logger.info('Processing multiple files response') |
| 95 | |
| 96 | const failedResults = result.results.filter( |
| 97 | (fileResult) => isRecord(fileResult) && fileResult.success === false |
| 98 | ) |
| 99 | if (failedResults.length === result.results.length) { |
| 100 | const firstError = failedResults.find( |
| 101 | (fileResult) => isRecord(fileResult) && typeof fileResult.error === 'string' |
| 102 | ) |
| 103 | return { |
| 104 | success: false, |
| 105 | output: { |
| 106 | files: [], |
| 107 | combinedContent: '', |
| 108 | }, |
| 109 | error: |
| 110 | isRecord(firstError) && typeof firstError.error === 'string' |
| 111 | ? firstError.error |
| 112 | : 'Failed to parse files', |
| 113 | } |
| 114 | } |
| 115 | |
| 116 | // Extract individual file results |
| 117 | const fileResults: FileParseResult[] = result.results |
| 118 | .filter((fileResult) => !(isRecord(fileResult) && fileResult.success === false)) |
| 119 | .map((fileResult) => normalizeFileParseResult(fileResult)) |
| 120 | |
| 121 | const processedFiles = fileResults.flatMap((file) => (file.file ? [file.file] : [])) |
| 122 | |
| 123 | // Combine all file contents with clear dividers |
| 124 | const combinedContent = fileResults |
| 125 | .map((file, index) => { |
| 126 | const divider = `\n${'='.repeat(80)}\n` |
| 127 | |
| 128 | return file.content + (index < fileResults.length - 1 ? divider : '') |
| 129 | }) |
| 130 | .join('\n') |
| 131 | |
| 132 | // Create the base output |
| 133 | const output: FileParserOutputData = { |
| 134 | files: fileResults, |
| 135 | combinedContent, |
| 136 | ...(processedFiles.length > 0 && { processedFiles }), |
| 137 | } |
| 138 | const error = typeof result.error === 'string' ? result.error : undefined |
| 139 | |
| 140 | return { |
| 141 | success: true, |
| 142 | output, |
| 143 | ...(error ? { error } : {}), |
no test coverage detected