{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-QMF755U6.cjs","../src/core/file-readers/utils/batch-processor.ts"],"names":["BatchFileProcessor","#fileReaderManager","fileReaderManager","patterns","options","allFiles","pattern","files","glob","error","filePaths","supportedFiles","filePath","fs","#processSingleFile","_fileType","startTime","performance","result","processingTime","#processFilesSequentially","results","i","#processFilesInParallel","maxConcurrency","processedCount","chunkPromises","errorResult","chunkResults","#generateSummary","successfulFiles","r","failedFiles","totalProcessingTime","sum","averageProcessingTime","errors","cwd","nocase","ignore","absolute","dot","batchOptions","globOptions","expandedFiles"],"mappings":"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","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-QMF755U6.cjs","sourcesContent":[null,"import {promises as fs} from 'node:fs';\nimport {performance} from 'node:perf_hooks';\nimport {glob} from 'glob';\nimport type {\n  BatchFileResult,\n  BatchProcessingOptions,\n  BatchProcessingSummary,\n  GlobOptions,\n} from '../interfaces/types.js';\nimport type {FileReaderManager} from '../managers/file-reader.manager.js';\n\nexport class BatchFileProcessor {\n  #fileReaderManager: FileReaderManager;\n\n  constructor(fileReaderManager: FileReaderManager) {\n    this.#fileReaderManager = fileReaderManager;\n  }\n\n  async expandGlobPatterns(\n    patterns: string[],\n    options: GlobOptions = {},\n  ): Promise<string[]> {\n    const allFiles: string[] = [];\n\n    for (const pattern of patterns) {\n      try {\n        const files = await glob(pattern, {\n          cwd: options.cwd || process.cwd(),\n          nocase: options.nocase || false,\n          ignore: options.ignore || [],\n          absolute: true,\n          dot: false,\n        });\n\n        allFiles.push(...files);\n      } catch (error) {\n        console.warn(`Failed to expand glob pattern \"${pattern}\":`, error);\n      }\n    }\n\n    return [...new Set(allFiles)].sort();\n  }\n\n  async filterSupportedFiles(filePaths: string[]): Promise<string[]> {\n    const supportedFiles: string[] = [];\n\n    for (const filePath of filePaths) {\n      try {\n        await fs.access(filePath);\n        if (await this.#fileReaderManager.canReadFile(filePath)) {\n          supportedFiles.push(filePath);\n        }\n      } catch {}\n    }\n\n    return supportedFiles;\n  }\n\n  async #processSingleFile(\n    filePath: string,\n    _fileType?: string, // TODO: Add support for file type override\n  ): Promise<BatchFileResult> {\n    const startTime = performance.now();\n\n    try {\n      const result = await this.#fileReaderManager.readFile(filePath);\n\n      const processingTime = performance.now() - startTime;\n\n      return {\n        filePath,\n        result,\n        processingTime,\n      };\n    } catch (error) {\n      const processingTime = performance.now() - startTime;\n\n      return {\n        filePath,\n        result: {\n          success: false,\n          error: error instanceof Error ? error.message : String(error),\n        },\n        processingTime,\n      };\n    }\n  }\n\n  async #processFilesSequentially(\n    filePaths: string[],\n    options: BatchProcessingOptions,\n  ): Promise<BatchFileResult[]> {\n    const results: BatchFileResult[] = [];\n\n    for (let i = 0; i < filePaths.length; i++) {\n      const filePath = filePaths[i];\n\n      try {\n        const result = await this.#processSingleFile(\n          filePath,\n          options.fileType,\n        );\n        results.push(result);\n\n        if (options.onProgress) {\n          options.onProgress(i + 1, filePaths.length, filePath, result.result);\n        }\n\n        if (!result.result.success && !options.continueOnError) {\n          break;\n        }\n      } catch (error) {\n        if (!options.continueOnError) {\n          throw error;\n        }\n\n        results.push({\n          filePath,\n          result: {\n            success: false,\n            error: error instanceof Error ? error.message : String(error),\n          },\n          processingTime: 0,\n        });\n\n        if (options.onProgress) {\n          options.onProgress(i + 1, filePaths.length, filePath);\n        }\n      }\n    }\n\n    return results;\n  }\n\n  async #processFilesInParallel(\n    filePaths: string[],\n    options: BatchProcessingOptions,\n  ): Promise<BatchFileResult[]> {\n    const maxConcurrency =\n      options.maxConcurrency || Math.min(filePaths.length, 5);\n    const results: BatchFileResult[] = [];\n    let processedCount = 0;\n\n    for (let i = 0; i < filePaths.length; i += maxConcurrency) {\n      const chunk = filePaths.slice(i, i + maxConcurrency);\n\n      const chunkPromises = chunk.map(async (filePath) => {\n        try {\n          const result = await this.#processSingleFile(\n            filePath,\n            options.fileType,\n          );\n\n          processedCount++;\n          if (options.onProgress) {\n            options.onProgress(\n              processedCount,\n              filePaths.length,\n              filePath,\n              result.result,\n            );\n          }\n\n          return result;\n        } catch (error) {\n          processedCount++;\n          const errorResult: BatchFileResult = {\n            filePath,\n            result: {\n              success: false,\n              error: error instanceof Error ? error.message : String(error),\n            },\n            processingTime: 0,\n          };\n\n          if (options.onProgress) {\n            options.onProgress(\n              processedCount,\n              filePaths.length,\n              filePath,\n              errorResult.result,\n            );\n          }\n\n          if (!options.continueOnError) {\n            throw error;\n          }\n\n          return errorResult;\n        }\n      });\n\n      const chunkResults = await Promise.all(chunkPromises);\n      results.push(...chunkResults);\n\n      if (!options.continueOnError) {\n        const hasFailure = chunkResults.some(\n          (result) => !result.result.success,\n        );\n        if (hasFailure) {\n          break;\n        }\n      }\n    }\n\n    return results;\n  }\n\n  #generateSummary(results: BatchFileResult[]): BatchProcessingSummary {\n    const successfulFiles = results.filter((r) => r.result.success).length;\n    const failedFiles = results.length - successfulFiles;\n    const totalProcessingTime = results.reduce(\n      (sum, r) => sum + r.processingTime,\n      0,\n    );\n    const averageProcessingTime =\n      results.length > 0 ? totalProcessingTime / results.length : 0;\n\n    const errors = results\n      .filter((r) => !r.result.success)\n      .map((r) => ({\n        filePath: r.filePath,\n        error: r.result.error || 'Unknown error',\n      }));\n\n    return {\n      totalFiles: results.length,\n      successfulFiles,\n      failedFiles,\n      totalProcessingTime,\n      averageProcessingTime,\n      results,\n      errors,\n    };\n  }\n\n  async processFiles(\n    filePaths: string[],\n    options: BatchProcessingOptions = {},\n  ): Promise<BatchProcessingSummary> {\n    if (filePaths.length === 0) {\n      return this.#generateSummary([]);\n    }\n\n    const results = options.parallel\n      ? await this.#processFilesInParallel(filePaths, options)\n      : await this.#processFilesSequentially(filePaths, options);\n\n    return this.#generateSummary(results);\n  }\n\n  async processGlobPatterns(\n    patterns: string[],\n    options: BatchProcessingOptions & GlobOptions = {},\n  ): Promise<BatchProcessingSummary> {\n    const {cwd, nocase, ignore, absolute, dot, ...batchOptions} = options;\n    const globOptions = {cwd, nocase, ignore, absolute, dot};\n\n    const expandedFiles = await this.expandGlobPatterns(patterns, globOptions);\n\n    const supportedFiles = await this.filterSupportedFiles(expandedFiles);\n\n    return this.processFiles(supportedFiles, batchOptions);\n  }\n}\n"]}