jtcsv 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -518,19 +518,18 @@ function csvToJson(csv, options = {}) {
518
518
  if (lines.length === 0) {
519
519
  return [];
520
520
  }
521
- let rowsToProcess = lines;
522
521
  if (maxRows && lines.length > maxRows) {
523
522
  throw new errors_1.LimitError(`CSV size exceeds maximum limit of ${maxRows} rows`, maxRows, lines.length);
524
523
  }
525
524
  let headers = [];
526
- let dataRows = rowsToProcess;
525
+ let dataRows = lines;
527
526
  if (hasHeaders) {
528
- const headerLine = rowsToProcess[0];
527
+ const headerLine = lines[0];
529
528
  headers = parseCsvLine(headerLine, finalDelimiter, trim, 1);
530
- dataRows = rowsToProcess.slice(1);
529
+ dataRows = lines.slice(1);
531
530
  }
532
531
  else {
533
- const firstRow = parseCsvLine(rowsToProcess[0], finalDelimiter, trim, 1);
532
+ const firstRow = parseCsvLine(lines[0], finalDelimiter, trim, 1);
534
533
  headers = firstRow.map((_, index) => `column${index + 1}`);
535
534
  }
536
535
  if (Number.isFinite(memoryLimit) && dataRows.length > memoryLimit) {
@@ -1 +1 @@
1
- {"version":3,"file":"csv-to-json.js","sourceRoot":"","sources":["../csv-to-json.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * CSV to JSON Converter - TypeScript Module\r\n * \r\n * A lightweight, efficient module for converting CSV data to JSON format\r\n * with proper parsing and error handling.\r\n */\r\n\r\nimport {\r\n ValidationError,\r\n SecurityError,\r\n FileSystemError,\r\n ParsingError,\r\n LimitError,\r\n ConfigurationError,\r\n safeExecuteSync,\r\n safeExecuteAsync,\r\n ErrorCode\r\n} from './errors';\r\n\r\nimport { TransformHooks, predefinedHooks } from './src/core/transform-hooks';\r\nimport { DelimiterCache } from './src/core/delimiter-cache';\r\nimport FastPathEngine from './src/engines/fast-path-engine';\r\nimport { stripBomFromString, normalizeCsvInput } from './src/utils/bom-utils';\r\nimport { CsvToJsonOptions, AsyncCsvToJsonOptions, AnyObject, AnyArray } from './src/types';\r\n\r\n// Глобальный экземпляр кэша для авто-детектирования разделителя\r\nconst globalDelimiterCache = new DelimiterCache(100);\r\nconst globalFastPathEngine = new FastPathEngine();\r\n\r\n/**\r\n * Validates CSV input and options\r\n * @private\r\n */\r\nfunction validateCsvInput(csv: string, options?: CsvToJsonOptions): boolean {\r\n // Validate CSV input\r\n if (typeof csv !== 'string') {\r\n throw new ValidationError('Input must be a CSV string');\r\n }\r\n \r\n // Validate options\r\n if (options && typeof options !== 'object') {\r\n throw new ConfigurationError('Options must be an object');\r\n }\r\n \r\n // Validate delimiter\r\n if (options?.delimiter && typeof options.delimiter !== 'string') {\r\n throw new ConfigurationError('Delimiter must be a string');\r\n }\r\n \r\n if (options?.delimiter && options.delimiter.length !== 1) {\r\n throw new ConfigurationError('Delimiter must be a single character');\r\n }\r\n \r\n // Validate autoDetect\r\n if (options?.autoDetect !== undefined && typeof options.autoDetect !== 'boolean') {\r\n throw new ConfigurationError('autoDetect must be a boolean');\r\n }\r\n \r\n // Validate candidates\r\n if (options?.candidates && !Array.isArray(options.candidates)) {\r\n throw new ConfigurationError('candidates must be an array');\r\n }\r\n \r\n // Validate maxRows\r\n if (options?.maxRows !== undefined && (typeof options.maxRows !== 'number' || options.maxRows <= 0)) {\r\n throw new ConfigurationError('maxRows must be a positive number');\r\n }\r\n \r\n // Validate cache options\r\n if (options?.useCache !== undefined && typeof options.useCache !== 'boolean') {\r\n throw new ConfigurationError('useCache must be a boolean');\r\n }\r\n \r\n if (options?.cache && !(options.cache instanceof DelimiterCache)) {\r\n throw new ConfigurationError('cache must be an instance of DelimiterCache');\r\n }\r\n\r\n if (options?.useFastPath !== undefined && typeof options.useFastPath !== 'boolean') {\r\n throw new ConfigurationError('useFastPath must be a boolean');\r\n }\r\n\r\n if (options?.fastPathMode !== undefined\r\n && options.fastPathMode !== 'objects'\r\n && options.fastPathMode !== 'compact'\r\n && options.fastPathMode !== 'stream') {\r\n throw new ConfigurationError('fastPathMode must be \"objects\", \"compact\", or \"stream\"');\r\n }\r\n\r\n if (options?.memoryWarningThreshold !== undefined) {\r\n if (typeof options.memoryWarningThreshold !== 'number' || options.memoryWarningThreshold <= 0) {\r\n throw new ConfigurationError('memoryWarningThreshold must be a positive number');\r\n }\r\n }\r\n\r\n if (options?.memoryLimit !== undefined) {\r\n if (typeof options.memoryLimit !== 'number') {\r\n throw new ConfigurationError('memoryLimit must be a number');\r\n }\r\n if (options.memoryLimit !== Infinity && options.memoryLimit <= 0) {\r\n throw new ConfigurationError('memoryLimit must be a positive number or Infinity');\r\n }\r\n }\r\n\r\n if (options?.onError !== undefined\r\n && !['skip', 'warn', 'throw'].includes(options.onError)) {\r\n throw new ConfigurationError('onError must be \"skip\", \"warn\", or \"throw\"');\r\n }\r\n\r\n if (options?.errorHandler !== undefined && typeof options.errorHandler !== 'function') {\r\n throw new ConfigurationError('errorHandler must be a function');\r\n }\r\n\r\n // Validate hooks\r\n if (options?.hooks) {\r\n if (typeof options.hooks !== 'object') {\r\n throw new ConfigurationError('hooks must be an object');\r\n }\r\n \r\n if (options.hooks.beforeConvert && typeof options.hooks.beforeConvert !== 'function') {\r\n throw new ConfigurationError('hooks.beforeConvert must be a function');\r\n }\r\n \r\n if (options.hooks.afterConvert && typeof options.hooks.afterConvert !== 'function') {\r\n throw new ConfigurationError('hooks.afterConvert must be a function');\r\n }\r\n \r\n if (options.hooks.perRow && typeof options.hooks.perRow !== 'function') {\r\n throw new ConfigurationError('hooks.perRow must be a function');\r\n }\r\n\r\n if (options.hooks.transformHooks\r\n && !(options.hooks.transformHooks instanceof TransformHooks)) {\r\n throw new ConfigurationError('hooks.transformHooks must be an instance of TransformHooks');\r\n }\r\n\r\n if (options.hooks.onError && typeof options.hooks.onError !== 'function') {\r\n throw new ConfigurationError('hooks.onError must be a function');\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Auto-detects the delimiter from CSV content\r\n */\r\nexport function autoDetectDelimiter(\r\n csv: string,\r\n options: {\r\n candidates?: string[];\r\n useCache?: boolean;\r\n cache?: DelimiterCache;\r\n } | string[] = {}\r\n): string {\r\n if (!csv || typeof csv !== 'string' || csv.trim().length === 0) {\r\n return ';';\r\n }\r\n\r\n const resolvedOptions = Array.isArray(options)\r\n ? { candidates: options }\r\n : (options || {});\r\n\r\n const {\r\n candidates = [';', ',', '\\t', '|'],\r\n useCache = true,\r\n cache = globalDelimiterCache\r\n } = resolvedOptions;\r\n\r\n // Validate candidates\r\n if (!Array.isArray(candidates)) {\r\n throw new ConfigurationError('candidates must be an array');\r\n }\r\n\r\n for (const candidate of candidates) {\r\n if (typeof candidate !== 'string' || candidate.length !== 1) {\r\n throw new ConfigurationError('Each candidate must be a single character string');\r\n }\r\n }\r\n\r\n // Check cache if enabled\r\n if (useCache && cache) {\r\n const cached = cache.get(csv, candidates);\r\n if (cached !== null) {\r\n return cached;\r\n }\r\n }\r\n\r\n // Simple delimiter detection logic\r\n // Count occurrences of each candidate in the first few lines\r\n const sampleLines = csv.split('\\n').slice(0, 10).join('\\n');\r\n let bestDelimiter = candidates[0];\r\n let bestScore = -1;\r\n\r\n for (const delimiter of candidates) {\r\n let score = 0;\r\n \r\n // Count occurrences in sample\r\n for (let i = 0; i < sampleLines.length; i++) {\r\n if (sampleLines[i] === delimiter) {\r\n score++;\r\n }\r\n }\r\n \r\n // Bonus for consistent column count (only when delimiter appears)\r\n if (score > 0) {\r\n const lines = sampleLines.split('\\n').filter(line => line.trim().length > 0);\r\n if (lines.length > 1) {\r\n const firstLineColumns = lines[0].split(delimiter).length;\r\n let consistent = true;\r\n \r\n for (let i = 1; i < Math.min(lines.length, 5); i++) {\r\n if (lines[i].split(delimiter).length !== firstLineColumns) {\r\n consistent = false;\r\n break;\r\n }\r\n }\r\n \r\n if (consistent) {\r\n score += 100;\r\n }\r\n }\r\n }\r\n \r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestDelimiter = delimiter;\r\n }\r\n }\r\n\r\n const resolvedDelimiter = bestScore > 0 ? bestDelimiter : ';';\r\n\r\n if (useCache && cache) {\r\n cache.set(csv, candidates, resolvedDelimiter);\r\n }\r\n\r\n return resolvedDelimiter;\r\n}\r\n\r\nfunction getFirstNonEmptyLine(csv: string): string | null {\r\n if (!csv || typeof csv !== 'string') {\r\n return null;\r\n }\r\n const lines = csv.split('\\n');\r\n for (const line of lines) {\r\n if (line.trim().length > 0) {\r\n return line;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction refineDelimiterFromHeaderLine(\r\n csv: string,\r\n currentDelimiter: string | undefined,\r\n candidates: string[]\r\n): string | undefined {\r\n if (!currentDelimiter) {\r\n return currentDelimiter;\r\n }\r\n const headerLine = getFirstNonEmptyLine(csv);\r\n if (!headerLine) {\r\n return currentDelimiter;\r\n }\r\n const currentCount = headerLine.split(currentDelimiter).length - 1;\r\n if (currentCount > 0) {\r\n return currentDelimiter;\r\n }\r\n let bestDelimiter = currentDelimiter;\r\n let bestCount = 0;\r\n for (const candidate of candidates) {\r\n if (typeof candidate !== 'string' || candidate.length !== 1) {\r\n continue;\r\n }\r\n const count = headerLine.split(candidate).length - 1;\r\n if (count > bestCount) {\r\n bestCount = count;\r\n bestDelimiter = candidate;\r\n }\r\n }\r\n return bestCount > 0 ? bestDelimiter : currentDelimiter;\r\n}\r\n\r\n/**\r\n * Parses a CSV string into JSON objects\r\n */\r\nexport function csvToJson(\r\n csv: string,\r\n options: CsvToJsonOptions = {}\r\n): AnyArray {\r\n return safeExecuteSync(() => {\r\n // Validate input\r\n validateCsvInput(csv, options);\r\n \r\n const opts = options && typeof options === 'object' ? options : {};\r\n \r\n const {\r\n delimiter,\r\n autoDetect = true,\r\n candidates = [';', ',', '\\t', '|'],\r\n hasHeaders = true,\r\n renameMap = {},\r\n trim = true,\r\n parseNumbers = false,\r\n parseBooleans = false,\r\n maxRows,\r\n useFastPath = true,\r\n fastPathMode = 'objects',\r\n schema = null,\r\n transform,\r\n hooks,\r\n useCache = true,\r\n cache,\r\n onError = 'throw',\r\n errorHandler,\r\n repairRowShifts = true,\r\n normalizeQuotes = true,\r\n memoryWarningThreshold = 1000000,\r\n memoryLimit = 5000000\r\n } = opts;\r\n\r\n const delimiterProvided = delimiter !== undefined && delimiter !== null;\r\n const transformHooks = hooks?.transformHooks instanceof TransformHooks\r\n ? hooks.transformHooks\r\n : null;\r\n const hooksContext = { options: opts };\r\n\r\n let resolvedUseFastPath = useFastPath;\r\n if (onError !== 'throw' && resolvedUseFastPath) {\r\n resolvedUseFastPath = false;\r\n }\r\n\r\n if (fastPathMode === 'stream') {\r\n return csvToJsonIterator(csv, opts) as unknown as AnyArray;\r\n }\r\n \r\n // Handle empty CSV\r\n if (!csv.trim()) {\r\n return [];\r\n }\r\n \r\n // Normalize CSV input (remove BOM, normalize line endings)\r\n const normalizedCsv = normalizeCsvInput(csv);\r\n \r\n const cacheToUse = cache instanceof DelimiterCache ? cache : globalDelimiterCache;\r\n // Determine delimiter\r\n let finalDelimiter = delimiter;\r\n if (!finalDelimiter && autoDetect) {\r\n finalDelimiter = autoDetectDelimiter(normalizedCsv, { candidates, useCache, cache: cacheToUse });\r\n }\r\n \r\n if (!finalDelimiter) {\r\n finalDelimiter = ';'; // Default fallback\r\n }\r\n \r\n // Apply hooks if provided\r\n let processedCsv = normalizedCsv;\r\n if (transformHooks) {\r\n processedCsv = transformHooks.applyBeforeConvert(processedCsv, hooksContext);\r\n }\r\n if (hooks?.beforeConvert) {\r\n processedCsv = hooks.beforeConvert(processedCsv, opts);\r\n }\r\n if (!delimiterProvided && autoDetect) {\r\n const refined = refineDelimiterFromHeaderLine(processedCsv, finalDelimiter, candidates) || finalDelimiter;\r\n if (refined !== finalDelimiter && useCache && cacheToUse) {\r\n cacheToUse.set(processedCsv, candidates, refined);\r\n }\r\n finalDelimiter = refined;\r\n }\r\n\r\n const applyPerRowHooks = (row: AnyObject, index: number): AnyObject => {\r\n let result: AnyObject = row;\r\n if (transformHooks) {\r\n result = transformHooks.applyPerRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (hooks?.perRow) {\r\n result = hooks.perRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (transform) {\r\n result = transform(result);\r\n }\r\n return result;\r\n };\r\n\r\n const normalizeValue = (value: any): any => {\r\n let normalized = value;\r\n if (trim && typeof normalized === 'string') {\r\n normalized = normalized.trim();\r\n }\r\n if (typeof normalized === 'string') {\r\n if (normalized === '') {\r\n return null;\r\n }\r\n if (normalized[0] === \"'\" && normalized.length > 1) {\r\n const candidate = normalized.slice(1);\r\n const leading = trim ? candidate.trimStart() : candidate;\r\n const firstChar = leading[0];\r\n if (firstChar === '=' || firstChar === '+' || firstChar === '-' || firstChar === '@') {\r\n normalized = candidate;\r\n }\r\n }\r\n }\r\n if (parseNumbers && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if ((firstChar >= '0' && firstChar <= '9') || firstChar === '-' || firstChar === '+' || firstChar === '.') {\r\n const numValue = Number(normalized);\r\n if (!Number.isNaN(numValue)) {\r\n normalized = numValue;\r\n }\r\n }\r\n }\r\n if (parseBooleans && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if (firstChar === 't' || firstChar === 'T' || firstChar === 'f' || firstChar === 'F') {\r\n const lowerValue = normalized.toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n normalized = lowerValue === 'true';\r\n }\r\n }\r\n }\r\n return normalized;\r\n };\r\n\r\n const applyAfterConvertHooks = (rows: AnyArray): AnyArray => {\r\n let result: AnyArray = rows;\r\n if (hooks?.afterConvert) {\r\n result = hooks.afterConvert(result, opts);\r\n }\r\n if (transformHooks) {\r\n result = transformHooks.applyAfterConvert(result, hooksContext) as AnyArray;\r\n }\r\n return result;\r\n };\r\n \r\n // Use fast-path engine if enabled\r\n if (resolvedUseFastPath && globalFastPathEngine) {\r\n try {\r\n let fastPathRows: AnyArray | null = null;\r\n const fastPathOptions = {\r\n delimiter: finalDelimiter,\r\n hasHeaders,\r\n trim,\r\n parseNumbers,\r\n parseBooleans,\r\n maxRows,\r\n mode: fastPathMode\r\n };\r\n\r\n if (typeof (globalFastPathEngine as any).parse === 'function') {\r\n fastPathRows = (globalFastPathEngine as any).parse(processedCsv, fastPathOptions);\r\n } else if (typeof (globalFastPathEngine as any).parseRows === 'function') {\r\n const collected: AnyArray = [];\r\n (globalFastPathEngine as any).parseRows(processedCsv, fastPathOptions, (row: AnyArray) => {\r\n if (!Array.isArray(row) || row.length === 0) {\r\n return;\r\n }\r\n collected.push(row);\r\n });\r\n fastPathRows = collected;\r\n }\r\n\r\n if (!Array.isArray(fastPathRows)) {\r\n throw new Error('Fast-path parser returned invalid result');\r\n }\r\n\r\n const normalizeValue = (value: any): any => {\r\n let normalized = value;\r\n if (trim && typeof normalized === 'string') {\r\n normalized = normalized.trim();\r\n }\r\n if (typeof normalized === 'string') {\r\n if (normalized === '') {\r\n return null;\r\n }\r\n if (normalized[0] === \"'\" && normalized.length > 1) {\r\n const candidate = normalized.slice(1);\r\n const leading = trim ? candidate.trimStart() : candidate;\r\n const firstChar = leading[0];\r\n if (firstChar === '=' || firstChar === '+' || firstChar === '-' || firstChar === '@') {\r\n normalized = candidate;\r\n }\r\n }\r\n }\r\n if (parseNumbers && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if ((firstChar >= '0' && firstChar <= '9') || firstChar === '-' || firstChar === '+' || firstChar === '.') {\r\n const numValue = Number(normalized);\r\n if (!Number.isNaN(numValue)) {\r\n normalized = numValue;\r\n }\r\n }\r\n }\r\n if (parseBooleans && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if (firstChar === 't' || firstChar === 'T' || firstChar === 'f' || firstChar === 'F') {\r\n const lowerValue = normalized.toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n normalized = lowerValue === 'true';\r\n }\r\n }\r\n }\r\n return normalized;\r\n };\r\n\r\n const handleFastPathError = (error: Error, rowIndex: number, row: AnyArray) => {\r\n if (errorHandler) {\r\n errorHandler(error, row.join(finalDelimiter), hasHeaders ? rowIndex + 2 : rowIndex + 1);\r\n }\r\n if (onError === 'warn') {\r\n if (process.env['NODE_ENV'] !== 'test') {\r\n console.warn(`[jtcsv] Row ${hasHeaders ? rowIndex + 2 : rowIndex + 1}: ${error.message}`);\r\n }\r\n return true;\r\n }\r\n if (onError === 'skip') {\r\n return true;\r\n }\r\n throw error;\r\n };\r\n\r\n if (fastPathMode === 'compact') {\r\n const dataRows = hasHeaders ? fastPathRows.slice(1) : fastPathRows;\r\n if (maxRows && dataRows.length > maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n dataRows.length\r\n );\r\n }\r\n const limitedRows = dataRows;\r\n const normalizedRows: AnyArray = [];\r\n for (const row of limitedRows) {\r\n if (!Array.isArray(row) || row.length === 0) {\r\n continue;\r\n }\r\n normalizedRows.push(row.map((value) => normalizeValue(value)));\r\n }\r\n if (Number.isFinite(memoryLimit) && normalizedRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n normalizedRows.length\r\n );\r\n }\r\n if (memoryWarningThreshold\r\n && normalizedRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + normalizedRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n return applyAfterConvertHooks(normalizedRows);\r\n }\r\n\r\n if (fastPathRows.length === 0) {\r\n return applyAfterConvertHooks([]);\r\n }\r\n\r\n if (!Array.isArray(fastPathRows[0])) {\r\n const limitedRows = maxRows ? fastPathRows.slice(0, maxRows) : fastPathRows;\r\n const normalizedRows = limitedRows.map((row, index) => {\r\n let obj = row as AnyObject;\r\n if (Object.keys(renameMap).length > 0) {\r\n const renamed: AnyObject = {};\r\n for (const [key, value] of Object.entries(obj)) {\r\n const newKey = renameMap[key] || key;\r\n renamed[newKey] = value;\r\n }\r\n obj = renamed;\r\n }\r\n return applyPerRowHooks(obj, index);\r\n });\r\n\r\n if (Number.isFinite(memoryLimit) && normalizedRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n normalizedRows.length\r\n );\r\n }\r\n if (memoryWarningThreshold\r\n && normalizedRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + normalizedRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n\r\n return applyAfterConvertHooks(normalizedRows);\r\n }\r\n\r\n const headerRow = hasHeaders ? (fastPathRows[0] as AnyArray) : null;\r\n if (hasHeaders && Array.isArray(headerRow) && headerRow.length === 1) {\r\n const headerText = String(headerRow[0]);\r\n const hasCandidateDelimiter = (candidates || [';', ',', '\\t', '|'])\r\n .some((candidate) => headerText.includes(candidate));\r\n if (hasCandidateDelimiter) {\r\n throw new ParsingError('Fast-path parser failed to split headers');\r\n }\r\n }\r\n\r\n const baseHeaders = hasHeaders\r\n ? (headerRow as AnyArray).map((header) => (trim ? String(header).trim() : String(header)))\r\n : (fastPathRows[0] as AnyArray).map((_, index) => `column${index + 1}`);\r\n const finalHeaders = baseHeaders.map((header) => renameMap[header] || header);\r\n const dataRows = hasHeaders ? fastPathRows.slice(1) : fastPathRows;\r\n if (maxRows && dataRows.length > maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n dataRows.length\r\n );\r\n }\r\n const limitedRows = dataRows;\r\n\r\n const rawRows: AnyArray = [];\r\n for (let rowIndex = 0; rowIndex < limitedRows.length; rowIndex++) {\r\n const row = limitedRows[rowIndex];\r\n if (!Array.isArray(row) || row.length === 0) {\r\n continue;\r\n }\r\n let rowValues = row;\r\n if (rowValues.length !== baseHeaders.length) {\r\n if (rowValues.length > baseHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const lineNumber = hasHeaders ? rowIndex + 2 : rowIndex + 1;\r\n const extraCount = rowValues.length - baseHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n rowValues = rowValues.slice(0, baseHeaders.length);\r\n } else {\r\n while (rowValues.length < baseHeaders.length) {\r\n rowValues.push(undefined as any);\r\n }\r\n }\r\n }\r\n\r\n const obj: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n let value: any = rowValues[j];\r\n value = normalizeValue(value);\r\n obj[finalHeaders[j]] = value;\r\n }\r\n rawRows.push(obj);\r\n }\r\n\r\n const repairedRows = repairRowShifts\r\n ? repairShiftedRows(rawRows, finalHeaders, { normalizeQuotes })\r\n : rawRows;\r\n const normalizedRows = repairedRows.map((row, index) => applyPerRowHooks(row, index));\r\n\r\n if (Number.isFinite(memoryLimit) && normalizedRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n normalizedRows.length\r\n );\r\n }\r\n if (memoryWarningThreshold\r\n && normalizedRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + normalizedRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n \r\n return applyAfterConvertHooks(normalizedRows);\r\n } catch (error: unknown) {\r\n if (error instanceof LimitError) {\r\n throw error;\r\n }\r\n // Fall back to standard parsing if fast-path fails\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n console.warn('Fast-path parsing failed, falling back to standard parser:', errorMessage);\r\n }\r\n }\r\n \r\n // Standard CSV parsing implementation\r\n const lines = processedCsv.split('\\n').filter(line => line.trim().length > 0);\r\n \r\n if (lines.length === 0) {\r\n return [];\r\n }\r\n \r\n // Apply row limit if specified\r\n let rowsToProcess = lines;\r\n if (maxRows && lines.length > maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n lines.length\r\n );\r\n }\r\n \r\n // Parse headers\r\n let headers: string[] = [];\r\n let dataRows = rowsToProcess;\r\n \r\n if (hasHeaders) {\r\n const headerLine = rowsToProcess[0];\r\n headers = parseCsvLine(headerLine, finalDelimiter, trim, 1);\r\n dataRows = rowsToProcess.slice(1);\r\n } else {\r\n // Generate default headers (col0, col1, ...)\r\n const firstRow = parseCsvLine(rowsToProcess[0], finalDelimiter, trim, 1);\r\n headers = firstRow.map((_, index) => `column${index + 1}`);\r\n }\r\n\r\n if (Number.isFinite(memoryLimit) && dataRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n dataRows.length\r\n );\r\n }\r\n\r\n if (memoryWarningThreshold\r\n && dataRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + dataRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n \r\n // Apply rename map to headers\r\n const finalHeaders = headers.map(header => renameMap[header] || header);\r\n\r\n if (fastPathMode === 'compact') {\r\n const compactResult: AnyArray = [];\r\n for (let i = 0; i < dataRows.length; i++) {\r\n if (maxRows && compactResult.length >= maxRows) {\r\n break;\r\n }\r\n const line = dataRows[i];\r\n const lineNumber = hasHeaders ? i + 2 : i + 1;\r\n let values = parseCsvLine(line, finalDelimiter, trim, lineNumber);\r\n if (values.length !== finalHeaders.length) {\r\n if (values.length > finalHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, finalHeaders.length);\r\n } else {\r\n while (values.length < finalHeaders.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n compactResult.push(values.map((value) => normalizeValue(value)));\r\n }\r\n return applyAfterConvertHooks(compactResult);\r\n }\r\n \r\n // Parse data rows\r\n const rawRows: AnyArray = [];\r\n const handleRowError = (error: Error, line: string, lineNumber: number): boolean => {\r\n if (error instanceof LimitError) {\r\n throw error;\r\n }\r\n if (errorHandler) {\r\n errorHandler(error, line, lineNumber);\r\n }\r\n if (onError === 'warn') {\r\n if (process.env['NODE_ENV'] !== 'test') {\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${error.message}`);\r\n }\r\n return true;\r\n }\r\n if (onError === 'skip') {\r\n return true;\r\n }\r\n throw error;\r\n };\r\n \r\n for (let i = 0; i < dataRows.length; i++) {\r\n const line = dataRows[i];\r\n const lineNumber = hasHeaders ? i + 2 : i + 1;\r\n try {\r\n let values = parseCsvLine(line, finalDelimiter, trim, lineNumber);\r\n \r\n // Handle field count mismatch\r\n if (values.length !== finalHeaders.length) {\r\n if (values.length > finalHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, finalHeaders.length);\r\n } else {\r\n while (values.length < finalHeaders.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n \r\n // Create object\r\n const row: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n let value: any = values[j];\r\n \r\n // Parse numbers if enabled\r\n if (parseNumbers && !isNaN(Number(value)) && value.trim() !== '') {\r\n value = Number(value);\r\n }\r\n \r\n // Parse booleans if enabled\r\n if (parseBooleans) {\r\n const lowerValue = String(value).toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n value = lowerValue === 'true';\r\n }\r\n }\r\n \r\n row[finalHeaders[j]] = value;\r\n }\r\n \r\n // Apply transform function if provided\r\n rawRows.push(row);\r\n } catch (error: any) {\r\n if (handleRowError(error as Error, line, lineNumber)) {\r\n continue;\r\n }\r\n }\r\n }\r\n \r\n // Apply hooks if provided\r\n const repairedRows = repairRowShifts\r\n ? repairShiftedRows(rawRows, finalHeaders, { normalizeQuotes })\r\n : rawRows;\r\n const normalizedRows = repairedRows.map((row, index) => applyPerRowHooks(row, index));\r\n return applyAfterConvertHooks(normalizedRows);\r\n }, 'PARSING_ERROR', { function: 'csvToJson' });\r\n}\r\n\r\n/**\r\n * Parses a single CSV line\r\n */\r\nfunction parseCsvLine(\r\n line: string,\r\n delimiter: string,\r\n trim: boolean,\r\n lineNumber?: number\r\n): string[] {\r\n const result: string[] = [];\r\n let currentField = '';\r\n let inQuotes = false;\r\n let quoteChar = '\"';\r\n let escapeNext = false;\r\n \r\n for (let i = 0; i < line.length; i++) {\r\n const char = line[i];\r\n const nextChar = i < line.length - 1 ? line[i + 1] : '';\r\n\r\n if (escapeNext) {\r\n currentField += char;\r\n escapeNext = false;\r\n continue;\r\n }\r\n\r\n if (char === '\\\\') {\r\n escapeNext = true;\r\n continue;\r\n }\r\n \r\n if (!inQuotes && char === delimiter) {\r\n result.push(trim ? currentField.trim() : currentField);\r\n currentField = '';\r\n } else if (!inQuotes && (char === '\"' || char === \"'\")) {\r\n inQuotes = true;\r\n quoteChar = char;\r\n } else if (inQuotes && char === quoteChar && nextChar === quoteChar) {\r\n currentField += char;\r\n if (i + 2 === line.length) {\r\n inQuotes = false;\r\n }\r\n i++;\r\n } else if (inQuotes && char === quoteChar) {\r\n inQuotes = false;\r\n } else {\r\n currentField += char;\r\n }\r\n }\r\n\r\n if (escapeNext) {\r\n currentField += '\\\\';\r\n }\r\n \r\n result.push(trim ? currentField.trim() : currentField);\r\n \r\n if (inQuotes) {\r\n throw ParsingError.unclosedQuotes(\r\n lineNumber ?? null,\r\n null,\r\n line.substring(0, 100)\r\n );\r\n }\r\n \r\n return result;\r\n}\r\n\r\nfunction isEmptyValue(value: any): boolean {\r\n return value === undefined || value === null || value === '';\r\n}\r\n\r\nfunction hasOddQuotes(value: any): boolean {\r\n if (typeof value !== 'string') {\r\n return false;\r\n }\r\n let count = 0;\r\n for (let i = 0; i < value.length; i++) {\r\n if (value[i] === '\"') {\r\n count++;\r\n }\r\n }\r\n return count % 2 === 1;\r\n}\r\n\r\nfunction hasAnyQuotes(value: any): boolean {\r\n return typeof value === 'string' && value.includes('\"');\r\n}\r\n\r\nfunction normalizeQuotesInField(value: any): any {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n // Не нормализуем кавычки в JSON-строках - это ломит структуру JSON\r\n if ((value.startsWith('{') && value.endsWith('}')) ||\r\n (value.startsWith('[') && value.endsWith(']'))) {\r\n return value; // Возвращаем как есть для JSON\r\n }\r\n \r\n let normalized = value.replace(/\"{2,}/g, '\"');\r\n // Не применяем правило, которое ломает JSON:\r\n // normalized = normalized.replace(/\"\\s*,\\s*\"/g, ',');\r\n normalized = normalized.replace(/\"\\n/g, '\\n').replace(/\\n\"/g, '\\n');\r\n if (normalized.length >= 2 && normalized.startsWith('\"') && normalized.endsWith('\"')) {\r\n normalized = normalized.slice(1, -1);\r\n }\r\n return normalized;\r\n}\r\n\r\nfunction normalizeRowQuotes(row: AnyObject, headers: string[]): AnyObject {\r\n const normalized: AnyObject = {};\r\n const phoneKeys = new Set(['phone', 'phonenumber', 'phone_number', 'tel', 'telephone']);\r\n for (const header of headers) {\r\n const baseValue = normalizeQuotesInField(row[header]);\r\n if (phoneKeys.has(String(header).toLowerCase())) {\r\n normalized[header] = normalizePhoneValue(baseValue);\r\n } else {\r\n normalized[header] = baseValue;\r\n }\r\n }\r\n return normalized;\r\n}\r\n\r\nfunction normalizePhoneValue(value: any): any {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n const trimmed = value.trim();\r\n if (trimmed === '') {\r\n return trimmed;\r\n }\r\n return trimmed.replace(/[\"'\\\\]/g, '');\r\n}\r\n\r\nfunction looksLikeUserAgent(value: any): boolean {\r\n if (typeof value !== 'string') {\r\n return false;\r\n }\r\n return /Mozilla\\/|Opera\\/|MSIE|AppleWebKit|Gecko|Safari|Chrome\\//.test(value);\r\n}\r\n\r\nfunction isHexColor(value: any): boolean {\r\n return typeof value === 'string' && /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);\r\n}\r\n\r\nfunction repairShiftedRows(\r\n rows: AnyArray,\r\n headers: string[],\r\n options: { normalizeQuotes?: boolean } = {}\r\n): AnyArray {\r\n if (!Array.isArray(rows) || rows.length === 0 || headers.length === 0) {\r\n return rows;\r\n }\r\n\r\n const headerCount = headers.length;\r\n const merged: AnyArray = [];\r\n let index = 0;\r\n\r\n while (index < rows.length) {\r\n const row = rows[index] as AnyObject;\r\n if (!row || typeof row !== 'object') {\r\n merged.push(row);\r\n index++;\r\n continue;\r\n }\r\n\r\n const values = headers.map((header) => row[header]);\r\n let lastNonEmpty = -1;\r\n for (let i = headerCount - 1; i >= 0; i--) {\r\n if (!isEmptyValue(values[i])) {\r\n lastNonEmpty = i;\r\n break;\r\n }\r\n }\r\n\r\n const missingCount = headerCount - 1 - lastNonEmpty;\r\n if (lastNonEmpty >= 0 && missingCount > 0 && index + 1 < rows.length) {\r\n const nextRow = rows[index + 1] as AnyObject;\r\n if (nextRow && typeof nextRow === 'object') {\r\n const nextValues = headers.map((header) => nextRow[header]);\r\n const nextTrailingEmpty = nextValues\r\n .slice(headerCount - missingCount)\r\n .every((value) => isEmptyValue(value));\r\n\r\n const leadValues = nextValues\r\n .slice(0, missingCount)\r\n .filter((value) => !isEmptyValue(value));\r\n const shouldMerge = nextTrailingEmpty\r\n && leadValues.length > 0\r\n && (hasOddQuotes(values[lastNonEmpty]) || hasAnyQuotes(values[lastNonEmpty]));\r\n\r\n if (shouldMerge) {\r\n const toAppend = leadValues.map((value) => String(value));\r\n\r\n if (toAppend.length > 0) {\r\n const base = isEmptyValue(values[lastNonEmpty]) ? '' : String(values[lastNonEmpty]);\r\n values[lastNonEmpty] = base ? `${base}\\n${toAppend.join('\\n')}` : toAppend.join('\\n');\r\n }\r\n\r\n for (let i = 0; i < missingCount; i++) {\r\n values[lastNonEmpty + 1 + i] = nextValues[missingCount + i];\r\n }\r\n\r\n const mergedRow: AnyObject = {};\r\n for (let i = 0; i < headerCount; i++) {\r\n mergedRow[headers[i]] = values[i];\r\n }\r\n\r\n merged.push(mergedRow);\r\n index += 2;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n if (index + 1 < rows.length) {\r\n const nextRow = rows[index + 1] as AnyObject;\r\n if (nextRow && typeof nextRow === 'object') {\r\n const nextHex = nextRow[headers[4]];\r\n const nextUserAgentHead = nextRow[headers[2]];\r\n const nextUserAgentTail = nextRow[headers[3]];\r\n const shouldMergeUserAgent = isEmptyValue(values[4])\r\n && isEmptyValue(values[5])\r\n && isHexColor(nextHex)\r\n && (looksLikeUserAgent(nextUserAgentHead) || looksLikeUserAgent(nextUserAgentTail));\r\n\r\n if (shouldMergeUserAgent) {\r\n const addressParts = [values[3], nextRow[headers[0]], nextRow[headers[1]]]\r\n .filter((value) => !isEmptyValue(value))\r\n .map((value) => String(value));\r\n values[3] = addressParts.join('\\n');\r\n\r\n // Очищаем кавычки из частей userAgent перед объединением\r\n let uaHead = isEmptyValue(nextUserAgentHead) ? '' : String(nextUserAgentHead);\r\n let uaTail = isEmptyValue(nextUserAgentTail) ? '' : String(nextUserAgentTail);\r\n // Удаляем лишние кавычки из начала и конца каждой части\r\n uaHead = uaHead.replace(/^\"+|\"+$/g, '');\r\n uaTail = uaTail.replace(/^\"+|\"+$/g, '');\r\n const joiner = uaHead && uaTail ? (uaTail.startsWith(' ') ? '' : ',') : '';\r\n values[4] = uaHead + joiner + uaTail;\r\n values[5] = String(nextHex);\r\n\r\n const mergedRow: AnyObject = {};\r\n for (let i = 0; i < headerCount; i++) {\r\n mergedRow[headers[i]] = values[i];\r\n }\r\n\r\n merged.push(mergedRow);\r\n index += 2;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n merged.push(row);\r\n index++;\r\n }\r\n\r\n if (options.normalizeQuotes) {\r\n return merged.map((row) => normalizeRowQuotes(row, headers));\r\n }\r\n\r\n return merged;\r\n}\r\n\r\n/**\r\n * Asynchronous version of csvToJson with support for worker threads\r\n */\r\nexport async function csvToJsonAsync(\r\n csv: string,\r\n options: AsyncCsvToJsonOptions = {}\r\n): Promise<AnyArray> {\r\n return safeExecuteAsync(async () => {\r\n // For now, use the synchronous version\r\n // In the future, this will use worker threads for large datasets\r\n const { useWorkers = false, workerCount, chunkSize, onProgress, ...syncOptions } = options;\r\n \r\n // Simple implementation - just call the synchronous version\r\n // TODO: Implement worker thread support for large datasets\r\n return csvToJson(csv, syncOptions);\r\n }, 'PARSING_ERROR', { function: 'csvToJsonAsync' });\r\n}\r\n\r\n/**\r\n * Creates an iterator for streaming CSV parsing\r\n */\r\nexport function* csvToJsonIterator(\r\n csv: string,\r\n options: CsvToJsonOptions = {}\r\n): Generator<AnyObject, void, unknown> {\r\n // Validate input\r\n validateCsvInput(csv, options);\r\n \r\n const opts = options && typeof options === 'object' ? options : {};\r\n \r\n const {\r\n delimiter,\r\n autoDetect = true,\r\n candidates = [';', ',', '\\t', '|'],\r\n hasHeaders = true,\r\n renameMap = {},\r\n trim = true,\r\n parseNumbers = false,\r\n parseBooleans = false,\r\n maxRows,\r\n useFastPath = true,\r\n fastPathMode = 'objects',\r\n transform,\r\n hooks,\r\n useCache = true,\r\n cache,\r\n onError = 'throw',\r\n errorHandler,\r\n repairRowShifts = true,\r\n normalizeQuotes = true,\r\n memoryWarningThreshold = 1000000,\r\n memoryLimit = 5000000\r\n } = opts;\r\n\r\n const delimiterProvided = delimiter !== undefined && delimiter !== null;\r\n const transformHooks = hooks?.transformHooks instanceof TransformHooks\r\n ? hooks.transformHooks\r\n : null;\r\n const hooksContext = { options: opts };\r\n \r\n // Handle empty CSV\r\n if (!csv.trim()) {\r\n return;\r\n }\r\n \r\n // Normalize CSV input\r\n const normalizedCsv = normalizeCsvInput(csv);\r\n let processedCsv = normalizedCsv;\r\n if (transformHooks) {\r\n processedCsv = transformHooks.applyBeforeConvert(processedCsv, hooksContext);\r\n }\r\n if (hooks?.beforeConvert) {\r\n processedCsv = hooks.beforeConvert(processedCsv, opts);\r\n }\r\n \r\n // Determine delimiter\r\n let finalDelimiter = delimiter;\r\n if (!finalDelimiter && autoDetect) {\r\n const cacheToUse = cache instanceof DelimiterCache ? cache : globalDelimiterCache;\r\n finalDelimiter = autoDetectDelimiter(processedCsv, { candidates, useCache, cache: cacheToUse });\r\n }\r\n \r\n if (!finalDelimiter) {\r\n finalDelimiter = ';'; // Default fallback\r\n }\r\n if (!delimiterProvided && autoDetect) {\r\n const cacheToUse = cache instanceof DelimiterCache ? cache : globalDelimiterCache;\r\n const refined = refineDelimiterFromHeaderLine(processedCsv, finalDelimiter, candidates) || finalDelimiter;\r\n if (refined !== finalDelimiter && useCache && cacheToUse) {\r\n cacheToUse.set(processedCsv, candidates, refined);\r\n }\r\n finalDelimiter = refined;\r\n }\r\n\r\n const applyPerRowHooks = (row: AnyObject, index: number): AnyObject => {\r\n let result: AnyObject = row;\r\n if (transformHooks) {\r\n result = transformHooks.applyPerRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (hooks?.perRow) {\r\n result = hooks.perRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (transform) {\r\n result = transform(result);\r\n }\r\n return result;\r\n };\r\n\r\n const normalizeValue = (value: any): any => {\r\n let normalized = value;\r\n if (trim && typeof normalized === 'string') {\r\n normalized = normalized.trim();\r\n }\r\n if (typeof normalized === 'string') {\r\n if (normalized === '') {\r\n return null;\r\n }\r\n if (normalized[0] === \"'\" && normalized.length > 1) {\r\n const candidate = normalized.slice(1);\r\n const leading = trim ? candidate.trimStart() : candidate;\r\n const firstChar = leading[0];\r\n if (firstChar === '=' || firstChar === '+' || firstChar === '-' || firstChar === '@') {\r\n normalized = candidate;\r\n }\r\n }\r\n }\r\n if (parseNumbers && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if ((firstChar >= '0' && firstChar <= '9') || firstChar === '-' || firstChar === '+' || firstChar === '.') {\r\n const numValue = Number(normalized);\r\n if (!Number.isNaN(numValue)) {\r\n normalized = numValue;\r\n }\r\n }\r\n }\r\n if (parseBooleans && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if (firstChar === 't' || firstChar === 'T' || firstChar === 'f' || firstChar === 'F') {\r\n const lowerValue = normalized.toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n normalized = lowerValue === 'true';\r\n }\r\n }\r\n }\r\n return normalized;\r\n };\r\n \r\n const handleRowError = (error: Error, line: string, lineNumber: number): boolean => {\r\n if (error instanceof LimitError) {\r\n throw error;\r\n }\r\n if (errorHandler) {\r\n errorHandler(error, line, lineNumber);\r\n }\r\n if (onError === 'warn') {\r\n if (process.env['NODE_ENV'] !== 'test') {\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${error.message}`);\r\n }\r\n return true;\r\n }\r\n if (onError === 'skip') {\r\n return true;\r\n }\r\n throw error;\r\n };\r\n\r\n let rowCount = 0; // Объявляем rowCount выше, чтобы assertRowLimit мог его использовать\r\n \r\n const assertRowLimit = () => {\r\n if (maxRows && rowCount >= maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n rowCount + 1\r\n );\r\n }\r\n };\r\n\r\n const shouldWarnLargeMemory = memoryWarningThreshold && process.env['NODE_ENV'] !== 'test';\r\n let warnedLargeMemory = false;\r\n\r\n if (globalFastPathEngine && typeof (globalFastPathEngine as any).iterateRows === 'function') {\r\n const iterateOptions: any = { delimiter: finalDelimiter };\r\n if (!useFastPath) {\r\n iterateOptions.forceEngine = 'STANDARD';\r\n }\r\n\r\n const rowIterator = (globalFastPathEngine as any).iterateRows(processedCsv, iterateOptions);\r\n let headers: string[] = [];\r\n let finalHeaders: string[] = [];\r\n let headersProcessed = false;\r\n let pendingRow: AnyObject | null = null;\r\n\r\n try {\r\n for (const row of rowIterator) {\r\n if (!Array.isArray(row) || row.length === 0) {\r\n continue;\r\n }\r\n\r\n if (!headersProcessed) {\r\n if (hasHeaders) {\r\n headers = row.map((header) => (trim ? String(header).trim() : String(header)));\r\n headersProcessed = true;\r\n finalHeaders = headers.map((header) => renameMap[header] || header);\r\n continue;\r\n } else {\r\n headers = row.map((_, index) => `column${index + 1}`);\r\n headersProcessed = true;\r\n finalHeaders = headers.map((header) => renameMap[header] || header);\r\n }\r\n }\r\n\r\n if (maxRows && rowCount >= maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n rowCount + 1\r\n );\r\n }\r\n\r\n if (Number.isFinite(memoryLimit) && rowCount + 1 > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n rowCount + 1\r\n );\r\n }\r\n\r\n if (!warnedLargeMemory && shouldWarnLargeMemory && rowCount + 1 > memoryWarningThreshold) {\r\n warnedLargeMemory = true;\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + (rowCount + 1).toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n\r\n let values = row;\r\n if (values.length !== headers.length) {\r\n if (values.length > headers.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const lineNumber = hasHeaders ? rowCount + 2 : rowCount + 1;\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, headers.length);\r\n } else {\r\n while (values.length < headers.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n\r\n if (fastPathMode === 'compact') {\r\n yield values.map((value) => normalizeValue(value));\r\n rowCount++;\r\n continue;\r\n }\r\n\r\n const rowObj: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n rowObj[finalHeaders[j]] = normalizeValue(values[j]);\r\n }\r\n\r\n if (repairRowShifts) {\r\n if (!pendingRow) {\r\n pendingRow = rowObj;\r\n continue;\r\n }\r\n\r\n const repairedRows = repairShiftedRows([pendingRow, rowObj], finalHeaders, { normalizeQuotes });\r\n if (repairedRows.length === 1) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = null;\r\n continue;\r\n }\r\n\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = repairedRows[1] as AnyObject;\r\n } else {\r\n const normalizedRow = normalizeQuotes ? normalizeRowQuotes(rowObj, finalHeaders) : rowObj;\r\n assertRowLimit();\r\n yield applyPerRowHooks(normalizedRow, rowCount);\r\n rowCount++;\r\n }\r\n }\r\n } catch (error: any) {\r\n if (error && error.code === 'FAST_PATH_UNCLOSED_QUOTES') {\r\n throw ParsingError.unclosedQuotes(error.lineNumber ?? null);\r\n }\r\n throw error;\r\n }\r\n\r\n if (pendingRow) {\r\n const flushedRows = repairShiftedRows([pendingRow], finalHeaders, { normalizeQuotes });\r\n for (const row of flushedRows) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(row as AnyObject, rowCount);\r\n rowCount++;\r\n }\r\n pendingRow = null;\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Split into lines\r\n const lines = processedCsv.split('\\n').filter(line => line.trim().length > 0);\r\n \r\n if (lines.length === 0) {\r\n return;\r\n }\r\n \r\n // Parse headers\r\n let headers: string[] = [];\r\n let dataRows = lines;\r\n \r\n if (hasHeaders) {\r\n const headerLine = lines[0];\r\n headers = parseCsvLine(headerLine, finalDelimiter, trim, 1);\r\n dataRows = lines.slice(1);\r\n } else {\r\n // Generate default headers\r\n const firstRow = parseCsvLine(lines[0], finalDelimiter, trim, 1);\r\n headers = firstRow.map((_, index) => `column${index + 1}`);\r\n }\r\n \r\n // Apply rename map to headers\r\n const finalHeaders = headers.map(header => renameMap[header] || header);\r\n \r\n // Yield rows one by one\r\n // rowCount уже объявлен выше\r\n let pendingRow: AnyObject | null = null;\r\n\r\n for (let i = 0; i < dataRows.length; i++) {\r\n // Check maxRows limit\r\n if (maxRows && rowCount >= maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n rowCount + 1\r\n );\r\n }\r\n\r\n const line = dataRows[i];\r\n const lineNumber = hasHeaders ? i + 2 : i + 1;\r\n if (Number.isFinite(memoryLimit) && rowCount + 1 > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n rowCount + 1\r\n );\r\n }\r\n if (!warnedLargeMemory && shouldWarnLargeMemory && rowCount + 1 > memoryWarningThreshold) {\r\n warnedLargeMemory = true;\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + (rowCount + 1).toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n try {\r\n let values = parseCsvLine(line, finalDelimiter, trim, lineNumber);\r\n \r\n // Handle field count mismatch\r\n if (values.length !== finalHeaders.length) {\r\n if (values.length > finalHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, finalHeaders.length);\r\n } else {\r\n while (values.length < finalHeaders.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n \r\n if (fastPathMode === 'compact') {\r\n yield values.map((value) => normalizeValue(value));\r\n rowCount++;\r\n continue;\r\n }\r\n\r\n // Create object\r\n const row: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n const value = normalizeValue(values[j]);\r\n row[finalHeaders[j]] = value;\r\n }\r\n\r\n if (repairRowShifts) {\r\n if (!pendingRow) {\r\n pendingRow = row;\r\n continue;\r\n }\r\n\r\n const repairedRows = repairShiftedRows([pendingRow, row], finalHeaders, { normalizeQuotes });\r\n if (repairedRows.length === 1) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = null;\r\n continue;\r\n }\r\n\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = repairedRows[1] as AnyObject;\r\n } else {\r\n const normalizedRow = normalizeQuotes ? normalizeRowQuotes(row, finalHeaders) : row;\r\n assertRowLimit();\r\n yield applyPerRowHooks(normalizedRow, rowCount);\r\n rowCount++;\r\n }\r\n } catch (error: any) {\r\n if (handleRowError(error as Error, line, lineNumber)) {\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n if (pendingRow) {\r\n const flushedRows = repairShiftedRows([pendingRow], finalHeaders, { normalizeQuotes });\r\n for (const row of flushedRows) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(row as AnyObject, rowCount);\r\n rowCount++;\r\n }\r\n pendingRow = null;\r\n }\r\n}\r\n\r\n/**\r\n * Validates CSV file path for security\r\n * @private\r\n */\r\nfunction validateCsvFilePath(filePath: string): string {\r\n if (typeof filePath !== 'string' || filePath.trim() === '') {\r\n throw new ValidationError('File path must be a non-empty string');\r\n }\r\n\r\n if (!filePath.toLowerCase().endsWith('.csv')) {\r\n throw new ValidationError('File must have .csv extension');\r\n }\r\n \r\n // Basic path validation\r\n const normalizedPath = filePath.trim();\r\n \r\n // Check for directory traversal attempts\r\n if (normalizedPath.includes('..') || normalizedPath.includes('~')) {\r\n throw new SecurityError('Invalid file path: directory traversal detected');\r\n }\r\n \r\n // Check for dangerous extensions\r\n const dangerousExtensions = ['.exe', '.bat', '.cmd', '.sh', '.php', '.py'];\r\n const lowerPath = normalizedPath.toLowerCase();\r\n for (const ext of dangerousExtensions) {\r\n if (lowerPath.endsWith(ext)) {\r\n throw new SecurityError(`Invalid file extension: ${ext}`);\r\n }\r\n }\r\n \r\n return normalizedPath;\r\n}\r\n\r\n/**\r\n * Reads CSV file and converts to JSON (synchronous)\r\n */\r\nexport async function readCsvAsJson(\r\n filePath: string,\r\n options: CsvToJsonOptions & { validatePath?: boolean } = {}\r\n): Promise<AnyArray> {\r\n return safeExecuteAsync(async () => {\r\n const { validatePath = true, ...csvOptions } = options;\r\n const fs = require('fs');\r\n \r\n // Validate file path if requested\r\n const safePath = validatePath ? validateCsvFilePath(filePath) : filePath;\r\n \r\n try {\r\n // Read file\r\n const csvContent = await fs.promises.readFile(safePath, 'utf8');\r\n \r\n // Parse CSV with hooks and caching\r\n return csvToJson(csvContent, csvOptions);\r\n } catch (error: any) {\r\n // Re-throw parsing errors as-is\r\n if (error instanceof ParsingError || error instanceof ValidationError || error instanceof LimitError) {\r\n throw error;\r\n }\r\n \r\n // Wrap file system errors\r\n if (error.code === 'ENOENT') {\r\n throw new FileSystemError(`File not found: ${safePath}`, error);\r\n }\r\n if (error.code === 'EACCES') {\r\n throw new FileSystemError(`Permission denied: ${safePath}`, error);\r\n }\r\n if (error.code === 'EISDIR') {\r\n throw new FileSystemError(`Path is a directory: ${safePath}`, error);\r\n }\r\n \r\n throw new FileSystemError(`Failed to read CSV file: ${error.message}`, error);\r\n }\r\n }, 'FILE_SYSTEM_ERROR', { function: 'readCsvAsJson' });\r\n}\r\n\r\n/**\r\n * Reads CSV file and converts to JSON (synchronous)\r\n * \r\n * @param filePath - Path to CSV file\r\n * @param options - Configuration options (same as csvToJson)\r\n * @returns JSON array\r\n */\r\nexport function readCsvAsJsonSync(\r\n filePath: string,\r\n options: CsvToJsonOptions & { validatePath?: boolean } = {}\r\n): AnyArray {\r\n const fs = require('fs');\r\n \r\n // Validate file path\r\n const { validatePath = true, ...csvOptions } = options;\r\n const safePath = validatePath ? validateCsvFilePath(filePath) : filePath;\r\n \r\n try {\r\n // Read file\r\n const csvContent = fs.readFileSync(safePath, 'utf8');\r\n \r\n // Parse CSV with hooks and caching\r\n return csvToJson(csvContent, csvOptions);\r\n } catch (error: any) {\r\n // Re-throw parsing errors as-is\r\n if (error instanceof ParsingError || error instanceof ValidationError || error instanceof LimitError) {\r\n throw error;\r\n }\r\n \r\n // Wrap file system errors\r\n if (error.code === 'ENOENT') {\r\n throw new FileSystemError(`File not found: ${safePath}`, error);\r\n }\r\n if (error.code === 'EACCES') {\r\n throw new FileSystemError(`Permission denied: ${safePath}`, error);\r\n }\r\n if (error.code === 'EISDIR') {\r\n throw new FileSystemError(`Path is a directory: ${safePath}`, error);\r\n }\r\n \r\n throw new FileSystemError(`Failed to read CSV file: ${error.message}`, error);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new TransformHooks instance\r\n * @returns New TransformHooks instance\r\n */\r\nexport function createTransformHooks(): TransformHooks {\r\n return new TransformHooks();\r\n}\r\n\r\n/**\r\n * Creates a new DelimiterCache instance\r\n * @param maxSize - Maximum cache size (default: 100)\r\n * @returns New DelimiterCache instance\r\n */\r\nexport function createDelimiterCache(maxSize: number = 100): DelimiterCache {\r\n return new DelimiterCache(maxSize);\r\n}\r\n\r\n/**\r\n * Gets statistics from the global delimiter cache\r\n * @returns Cache statistics\r\n */\r\nexport function getDelimiterCacheStats(): any {\r\n return globalDelimiterCache.getStats();\r\n}\r\n\r\n/**\r\n * Clears the global delimiter cache\r\n */\r\nexport function clearDelimiterCache(): void {\r\n globalDelimiterCache.clear();\r\n}\r\n\r\nexport { TransformHooks, predefinedHooks };\r\n"]}
1
+ {"version":3,"file":"csv-to-json.js","sourceRoot":"","sources":["../csv-to-json.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * CSV to JSON Converter - TypeScript Module\r\n * \r\n * A lightweight, efficient module for converting CSV data to JSON format\r\n * with proper parsing and error handling.\r\n */\r\n\r\nimport {\r\n ValidationError,\r\n SecurityError,\r\n FileSystemError,\r\n ParsingError,\r\n LimitError,\r\n ConfigurationError,\r\n safeExecuteSync,\r\n safeExecuteAsync,\r\n ErrorCode\r\n} from './errors';\r\n\r\nimport { TransformHooks, predefinedHooks } from './src/core/transform-hooks';\r\nimport { DelimiterCache } from './src/core/delimiter-cache';\r\nimport FastPathEngine from './src/engines/fast-path-engine';\r\nimport { stripBomFromString, normalizeCsvInput } from './src/utils/bom-utils';\r\nimport { CsvToJsonOptions, AsyncCsvToJsonOptions, AnyObject, AnyArray } from './src/types';\r\n\r\n// Глобальный экземпляр кэша для авто-детектирования разделителя\r\nconst globalDelimiterCache = new DelimiterCache(100);\r\nconst globalFastPathEngine = new FastPathEngine();\r\n\r\n/**\r\n * Validates CSV input and options\r\n * @private\r\n */\r\nfunction validateCsvInput(csv: string, options?: CsvToJsonOptions): boolean {\r\n // Validate CSV input\r\n if (typeof csv !== 'string') {\r\n throw new ValidationError('Input must be a CSV string');\r\n }\r\n \r\n // Validate options\r\n if (options && typeof options !== 'object') {\r\n throw new ConfigurationError('Options must be an object');\r\n }\r\n \r\n // Validate delimiter\r\n if (options?.delimiter && typeof options.delimiter !== 'string') {\r\n throw new ConfigurationError('Delimiter must be a string');\r\n }\r\n \r\n if (options?.delimiter && options.delimiter.length !== 1) {\r\n throw new ConfigurationError('Delimiter must be a single character');\r\n }\r\n \r\n // Validate autoDetect\r\n if (options?.autoDetect !== undefined && typeof options.autoDetect !== 'boolean') {\r\n throw new ConfigurationError('autoDetect must be a boolean');\r\n }\r\n \r\n // Validate candidates\r\n if (options?.candidates && !Array.isArray(options.candidates)) {\r\n throw new ConfigurationError('candidates must be an array');\r\n }\r\n \r\n // Validate maxRows\r\n if (options?.maxRows !== undefined && (typeof options.maxRows !== 'number' || options.maxRows <= 0)) {\r\n throw new ConfigurationError('maxRows must be a positive number');\r\n }\r\n \r\n // Validate cache options\r\n if (options?.useCache !== undefined && typeof options.useCache !== 'boolean') {\r\n throw new ConfigurationError('useCache must be a boolean');\r\n }\r\n \r\n if (options?.cache && !(options.cache instanceof DelimiterCache)) {\r\n throw new ConfigurationError('cache must be an instance of DelimiterCache');\r\n }\r\n\r\n if (options?.useFastPath !== undefined && typeof options.useFastPath !== 'boolean') {\r\n throw new ConfigurationError('useFastPath must be a boolean');\r\n }\r\n\r\n if (options?.fastPathMode !== undefined\r\n && options.fastPathMode !== 'objects'\r\n && options.fastPathMode !== 'compact'\r\n && options.fastPathMode !== 'stream') {\r\n throw new ConfigurationError('fastPathMode must be \"objects\", \"compact\", or \"stream\"');\r\n }\r\n\r\n if (options?.memoryWarningThreshold !== undefined) {\r\n if (typeof options.memoryWarningThreshold !== 'number' || options.memoryWarningThreshold <= 0) {\r\n throw new ConfigurationError('memoryWarningThreshold must be a positive number');\r\n }\r\n }\r\n\r\n if (options?.memoryLimit !== undefined) {\r\n if (typeof options.memoryLimit !== 'number') {\r\n throw new ConfigurationError('memoryLimit must be a number');\r\n }\r\n if (options.memoryLimit !== Infinity && options.memoryLimit <= 0) {\r\n throw new ConfigurationError('memoryLimit must be a positive number or Infinity');\r\n }\r\n }\r\n\r\n if (options?.onError !== undefined\r\n && !['skip', 'warn', 'throw'].includes(options.onError)) {\r\n throw new ConfigurationError('onError must be \"skip\", \"warn\", or \"throw\"');\r\n }\r\n\r\n if (options?.errorHandler !== undefined && typeof options.errorHandler !== 'function') {\r\n throw new ConfigurationError('errorHandler must be a function');\r\n }\r\n\r\n // Validate hooks\r\n if (options?.hooks) {\r\n if (typeof options.hooks !== 'object') {\r\n throw new ConfigurationError('hooks must be an object');\r\n }\r\n \r\n if (options.hooks.beforeConvert && typeof options.hooks.beforeConvert !== 'function') {\r\n throw new ConfigurationError('hooks.beforeConvert must be a function');\r\n }\r\n \r\n if (options.hooks.afterConvert && typeof options.hooks.afterConvert !== 'function') {\r\n throw new ConfigurationError('hooks.afterConvert must be a function');\r\n }\r\n \r\n if (options.hooks.perRow && typeof options.hooks.perRow !== 'function') {\r\n throw new ConfigurationError('hooks.perRow must be a function');\r\n }\r\n\r\n if (options.hooks.transformHooks\r\n && !(options.hooks.transformHooks instanceof TransformHooks)) {\r\n throw new ConfigurationError('hooks.transformHooks must be an instance of TransformHooks');\r\n }\r\n\r\n if (options.hooks.onError && typeof options.hooks.onError !== 'function') {\r\n throw new ConfigurationError('hooks.onError must be a function');\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Auto-detects the delimiter from CSV content\r\n */\r\nexport function autoDetectDelimiter(\r\n csv: string,\r\n options: {\r\n candidates?: string[];\r\n useCache?: boolean;\r\n cache?: DelimiterCache;\r\n } | string[] = {}\r\n): string {\r\n if (!csv || typeof csv !== 'string' || csv.trim().length === 0) {\r\n return ';';\r\n }\r\n\r\n const resolvedOptions = Array.isArray(options)\r\n ? { candidates: options }\r\n : (options || {});\r\n\r\n const {\r\n candidates = [';', ',', '\\t', '|'],\r\n useCache = true,\r\n cache = globalDelimiterCache\r\n } = resolvedOptions;\r\n\r\n // Validate candidates\r\n if (!Array.isArray(candidates)) {\r\n throw new ConfigurationError('candidates must be an array');\r\n }\r\n\r\n for (const candidate of candidates) {\r\n if (typeof candidate !== 'string' || candidate.length !== 1) {\r\n throw new ConfigurationError('Each candidate must be a single character string');\r\n }\r\n }\r\n\r\n // Check cache if enabled\r\n if (useCache && cache) {\r\n const cached = cache.get(csv, candidates);\r\n if (cached !== null) {\r\n return cached;\r\n }\r\n }\r\n\r\n // Simple delimiter detection logic\r\n // Count occurrences of each candidate in the first few lines\r\n const sampleLines = csv.split('\\n').slice(0, 10).join('\\n');\r\n let bestDelimiter = candidates[0];\r\n let bestScore = -1;\r\n\r\n for (const delimiter of candidates) {\r\n let score = 0;\r\n \r\n // Count occurrences in sample\r\n for (let i = 0; i < sampleLines.length; i++) {\r\n if (sampleLines[i] === delimiter) {\r\n score++;\r\n }\r\n }\r\n \r\n // Bonus for consistent column count (only when delimiter appears)\r\n if (score > 0) {\r\n const lines = sampleLines.split('\\n').filter(line => line.trim().length > 0);\r\n if (lines.length > 1) {\r\n const firstLineColumns = lines[0].split(delimiter).length;\r\n let consistent = true;\r\n \r\n for (let i = 1; i < Math.min(lines.length, 5); i++) {\r\n if (lines[i].split(delimiter).length !== firstLineColumns) {\r\n consistent = false;\r\n break;\r\n }\r\n }\r\n \r\n if (consistent) {\r\n score += 100;\r\n }\r\n }\r\n }\r\n \r\n if (score > bestScore) {\r\n bestScore = score;\r\n bestDelimiter = delimiter;\r\n }\r\n }\r\n\r\n const resolvedDelimiter = bestScore > 0 ? bestDelimiter : ';';\r\n\r\n if (useCache && cache) {\r\n cache.set(csv, candidates, resolvedDelimiter);\r\n }\r\n\r\n return resolvedDelimiter;\r\n}\r\n\r\nfunction getFirstNonEmptyLine(csv: string): string | null {\r\n if (!csv || typeof csv !== 'string') {\r\n return null;\r\n }\r\n const lines = csv.split('\\n');\r\n for (const line of lines) {\r\n if (line.trim().length > 0) {\r\n return line;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction refineDelimiterFromHeaderLine(\r\n csv: string,\r\n currentDelimiter: string | undefined,\r\n candidates: string[]\r\n): string | undefined {\r\n if (!currentDelimiter) {\r\n return currentDelimiter;\r\n }\r\n const headerLine = getFirstNonEmptyLine(csv);\r\n if (!headerLine) {\r\n return currentDelimiter;\r\n }\r\n const currentCount = headerLine.split(currentDelimiter).length - 1;\r\n if (currentCount > 0) {\r\n return currentDelimiter;\r\n }\r\n let bestDelimiter = currentDelimiter;\r\n let bestCount = 0;\r\n for (const candidate of candidates) {\r\n if (typeof candidate !== 'string' || candidate.length !== 1) {\r\n continue;\r\n }\r\n const count = headerLine.split(candidate).length - 1;\r\n if (count > bestCount) {\r\n bestCount = count;\r\n bestDelimiter = candidate;\r\n }\r\n }\r\n return bestCount > 0 ? bestDelimiter : currentDelimiter;\r\n}\r\n\r\n/**\r\n * Parses a CSV string into JSON objects\r\n */\r\nexport function csvToJson(\r\n csv: string,\r\n options: CsvToJsonOptions = {}\r\n): AnyArray {\r\n return safeExecuteSync(() => {\r\n // Validate input\r\n validateCsvInput(csv, options);\r\n \r\n const opts = options && typeof options === 'object' ? options : {};\r\n \r\n const {\r\n delimiter,\r\n autoDetect = true,\r\n candidates = [';', ',', '\\t', '|'],\r\n hasHeaders = true,\r\n renameMap = {},\r\n trim = true,\r\n parseNumbers = false,\r\n parseBooleans = false,\r\n maxRows,\r\n useFastPath = true,\r\n fastPathMode = 'objects',\r\n schema = null,\r\n transform,\r\n hooks,\r\n useCache = true,\r\n cache,\r\n onError = 'throw',\r\n errorHandler,\r\n repairRowShifts = true,\r\n normalizeQuotes = true,\r\n memoryWarningThreshold = 1000000,\r\n memoryLimit = 5000000\r\n } = opts;\r\n\r\n const delimiterProvided = delimiter !== undefined && delimiter !== null;\r\n const transformHooks = hooks?.transformHooks instanceof TransformHooks\r\n ? hooks.transformHooks\r\n : null;\r\n const hooksContext = { options: opts };\r\n\r\n let resolvedUseFastPath = useFastPath;\r\n if (onError !== 'throw' && resolvedUseFastPath) {\r\n resolvedUseFastPath = false;\r\n }\r\n\r\n if (fastPathMode === 'stream') {\r\n return csvToJsonIterator(csv, opts) as unknown as AnyArray;\r\n }\r\n \r\n // Handle empty CSV\r\n if (!csv.trim()) {\r\n return [];\r\n }\r\n \r\n // Normalize CSV input (remove BOM, normalize line endings)\r\n const normalizedCsv = normalizeCsvInput(csv);\r\n \r\n const cacheToUse = cache instanceof DelimiterCache ? cache : globalDelimiterCache;\r\n // Determine delimiter\r\n let finalDelimiter = delimiter;\r\n if (!finalDelimiter && autoDetect) {\r\n finalDelimiter = autoDetectDelimiter(normalizedCsv, { candidates, useCache, cache: cacheToUse });\r\n }\r\n \r\n if (!finalDelimiter) {\r\n finalDelimiter = ';'; // Default fallback\r\n }\r\n \r\n // Apply hooks if provided\r\n let processedCsv = normalizedCsv;\r\n if (transformHooks) {\r\n processedCsv = transformHooks.applyBeforeConvert(processedCsv, hooksContext);\r\n }\r\n if (hooks?.beforeConvert) {\r\n processedCsv = hooks.beforeConvert(processedCsv, opts);\r\n }\r\n if (!delimiterProvided && autoDetect) {\r\n const refined = refineDelimiterFromHeaderLine(processedCsv, finalDelimiter, candidates) || finalDelimiter;\r\n if (refined !== finalDelimiter && useCache && cacheToUse) {\r\n cacheToUse.set(processedCsv, candidates, refined);\r\n }\r\n finalDelimiter = refined;\r\n }\r\n\r\n const applyPerRowHooks = (row: AnyObject, index: number): AnyObject => {\r\n let result: AnyObject = row;\r\n if (transformHooks) {\r\n result = transformHooks.applyPerRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (hooks?.perRow) {\r\n result = hooks.perRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (transform) {\r\n result = transform(result);\r\n }\r\n return result;\r\n };\r\n\r\n const normalizeValue = (value: any): any => {\r\n let normalized = value;\r\n if (trim && typeof normalized === 'string') {\r\n normalized = normalized.trim();\r\n }\r\n if (typeof normalized === 'string') {\r\n if (normalized === '') {\r\n return null;\r\n }\r\n if (normalized[0] === \"'\" && normalized.length > 1) {\r\n const candidate = normalized.slice(1);\r\n const leading = trim ? candidate.trimStart() : candidate;\r\n const firstChar = leading[0];\r\n if (firstChar === '=' || firstChar === '+' || firstChar === '-' || firstChar === '@') {\r\n normalized = candidate;\r\n }\r\n }\r\n }\r\n if (parseNumbers && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if ((firstChar >= '0' && firstChar <= '9') || firstChar === '-' || firstChar === '+' || firstChar === '.') {\r\n const numValue = Number(normalized);\r\n if (!Number.isNaN(numValue)) {\r\n normalized = numValue;\r\n }\r\n }\r\n }\r\n if (parseBooleans && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if (firstChar === 't' || firstChar === 'T' || firstChar === 'f' || firstChar === 'F') {\r\n const lowerValue = normalized.toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n normalized = lowerValue === 'true';\r\n }\r\n }\r\n }\r\n return normalized;\r\n };\r\n\r\n const applyAfterConvertHooks = (rows: AnyArray): AnyArray => {\r\n let result: AnyArray = rows;\r\n if (hooks?.afterConvert) {\r\n result = hooks.afterConvert(result, opts);\r\n }\r\n if (transformHooks) {\r\n result = transformHooks.applyAfterConvert(result, hooksContext) as AnyArray;\r\n }\r\n return result;\r\n };\r\n \r\n // Use fast-path engine if enabled\r\n if (resolvedUseFastPath && globalFastPathEngine) {\r\n try {\r\n let fastPathRows: AnyArray | null = null;\r\n const fastPathOptions = {\r\n delimiter: finalDelimiter,\r\n hasHeaders,\r\n trim,\r\n parseNumbers,\r\n parseBooleans,\r\n maxRows,\r\n mode: fastPathMode\r\n };\r\n\r\n if (typeof (globalFastPathEngine as any).parse === 'function') {\r\n fastPathRows = (globalFastPathEngine as any).parse(processedCsv, fastPathOptions);\r\n } else if (typeof (globalFastPathEngine as any).parseRows === 'function') {\r\n const collected: AnyArray = [];\r\n (globalFastPathEngine as any).parseRows(processedCsv, fastPathOptions, (row: AnyArray) => {\r\n if (!Array.isArray(row) || row.length === 0) {\r\n return;\r\n }\r\n collected.push(row);\r\n });\r\n fastPathRows = collected;\r\n }\r\n\r\n if (!Array.isArray(fastPathRows)) {\r\n throw new Error('Fast-path parser returned invalid result');\r\n }\r\n\r\n const normalizeValue = (value: any): any => {\r\n let normalized = value;\r\n if (trim && typeof normalized === 'string') {\r\n normalized = normalized.trim();\r\n }\r\n if (typeof normalized === 'string') {\r\n if (normalized === '') {\r\n return null;\r\n }\r\n if (normalized[0] === \"'\" && normalized.length > 1) {\r\n const candidate = normalized.slice(1);\r\n const leading = trim ? candidate.trimStart() : candidate;\r\n const firstChar = leading[0];\r\n if (firstChar === '=' || firstChar === '+' || firstChar === '-' || firstChar === '@') {\r\n normalized = candidate;\r\n }\r\n }\r\n }\r\n if (parseNumbers && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if ((firstChar >= '0' && firstChar <= '9') || firstChar === '-' || firstChar === '+' || firstChar === '.') {\r\n const numValue = Number(normalized);\r\n if (!Number.isNaN(numValue)) {\r\n normalized = numValue;\r\n }\r\n }\r\n }\r\n if (parseBooleans && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if (firstChar === 't' || firstChar === 'T' || firstChar === 'f' || firstChar === 'F') {\r\n const lowerValue = normalized.toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n normalized = lowerValue === 'true';\r\n }\r\n }\r\n }\r\n return normalized;\r\n };\r\n\r\n const handleFastPathError = (error: Error, rowIndex: number, row: AnyArray) => {\r\n if (errorHandler) {\r\n errorHandler(error, row.join(finalDelimiter), hasHeaders ? rowIndex + 2 : rowIndex + 1);\r\n }\r\n if (onError === 'warn') {\r\n if (process.env['NODE_ENV'] !== 'test') {\r\n console.warn(`[jtcsv] Row ${hasHeaders ? rowIndex + 2 : rowIndex + 1}: ${error.message}`);\r\n }\r\n return true;\r\n }\r\n if (onError === 'skip') {\r\n return true;\r\n }\r\n throw error;\r\n };\r\n\r\n if (fastPathMode === 'compact') {\r\n const dataRows = hasHeaders ? fastPathRows.slice(1) : fastPathRows;\r\n if (maxRows && dataRows.length > maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n dataRows.length\r\n );\r\n }\r\n const limitedRows = dataRows;\r\n const normalizedRows: AnyArray = [];\r\n for (const row of limitedRows) {\r\n if (!Array.isArray(row) || row.length === 0) {\r\n continue;\r\n }\r\n normalizedRows.push(row.map((value) => normalizeValue(value)));\r\n }\r\n if (Number.isFinite(memoryLimit) && normalizedRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n normalizedRows.length\r\n );\r\n }\r\n if (memoryWarningThreshold\r\n && normalizedRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + normalizedRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n return applyAfterConvertHooks(normalizedRows);\r\n }\r\n\r\n if (fastPathRows.length === 0) {\r\n return applyAfterConvertHooks([]);\r\n }\r\n\r\n if (!Array.isArray(fastPathRows[0])) {\r\n const limitedRows = maxRows ? fastPathRows.slice(0, maxRows) : fastPathRows;\r\n const normalizedRows = limitedRows.map((row, index) => {\r\n let obj = row as AnyObject;\r\n if (Object.keys(renameMap).length > 0) {\r\n const renamed: AnyObject = {};\r\n for (const [key, value] of Object.entries(obj)) {\r\n const newKey = renameMap[key] || key;\r\n renamed[newKey] = value;\r\n }\r\n obj = renamed;\r\n }\r\n return applyPerRowHooks(obj, index);\r\n });\r\n\r\n if (Number.isFinite(memoryLimit) && normalizedRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n normalizedRows.length\r\n );\r\n }\r\n if (memoryWarningThreshold\r\n && normalizedRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + normalizedRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n\r\n return applyAfterConvertHooks(normalizedRows);\r\n }\r\n\r\n const headerRow = hasHeaders ? (fastPathRows[0] as AnyArray) : null;\r\n if (hasHeaders && Array.isArray(headerRow) && headerRow.length === 1) {\r\n const headerText = String(headerRow[0]);\r\n const hasCandidateDelimiter = (candidates || [';', ',', '\\t', '|'])\r\n .some((candidate) => headerText.includes(candidate));\r\n if (hasCandidateDelimiter) {\r\n throw new ParsingError('Fast-path parser failed to split headers');\r\n }\r\n }\r\n\r\n const baseHeaders = hasHeaders\r\n ? (headerRow as AnyArray).map((header) => (trim ? String(header).trim() : String(header)))\r\n : (fastPathRows[0] as AnyArray).map((_, index) => `column${index + 1}`);\r\n const finalHeaders = baseHeaders.map((header) => renameMap[header] || header);\r\n const dataRows = hasHeaders ? fastPathRows.slice(1) : fastPathRows;\r\n if (maxRows && dataRows.length > maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n dataRows.length\r\n );\r\n }\r\n const limitedRows = dataRows;\r\n\r\n const rawRows: AnyArray = [];\r\n for (let rowIndex = 0; rowIndex < limitedRows.length; rowIndex++) {\r\n const row = limitedRows[rowIndex];\r\n if (!Array.isArray(row) || row.length === 0) {\r\n continue;\r\n }\r\n let rowValues = row;\r\n if (rowValues.length !== baseHeaders.length) {\r\n if (rowValues.length > baseHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const lineNumber = hasHeaders ? rowIndex + 2 : rowIndex + 1;\r\n const extraCount = rowValues.length - baseHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n rowValues = rowValues.slice(0, baseHeaders.length);\r\n } else {\r\n while (rowValues.length < baseHeaders.length) {\r\n rowValues.push(undefined as any);\r\n }\r\n }\r\n }\r\n\r\n const obj: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n let value: any = rowValues[j];\r\n value = normalizeValue(value);\r\n obj[finalHeaders[j]] = value;\r\n }\r\n rawRows.push(obj);\r\n }\r\n\r\n const repairedRows = repairRowShifts\r\n ? repairShiftedRows(rawRows, finalHeaders, { normalizeQuotes })\r\n : rawRows;\r\n const normalizedRows = repairedRows.map((row, index) => applyPerRowHooks(row, index));\r\n\r\n if (Number.isFinite(memoryLimit) && normalizedRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n normalizedRows.length\r\n );\r\n }\r\n if (memoryWarningThreshold\r\n && normalizedRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + normalizedRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n \r\n return applyAfterConvertHooks(normalizedRows);\r\n } catch (error: unknown) {\r\n if (error instanceof LimitError) {\r\n throw error;\r\n }\r\n // Fall back to standard parsing if fast-path fails\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n console.warn('Fast-path parsing failed, falling back to standard parser:', errorMessage);\r\n }\r\n }\r\n \r\n // Standard CSV parsing implementation\r\n const lines = processedCsv.split('\\n').filter(line => line.trim().length > 0);\r\n \r\n if (lines.length === 0) {\r\n return [];\r\n }\r\n \r\n // Apply row limit if specified\r\n if (maxRows && lines.length > maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n lines.length\r\n );\r\n }\r\n \r\n // Parse headers\r\n let headers: string[] = [];\r\n let dataRows = lines;\r\n \r\n if (hasHeaders) {\r\n const headerLine = lines[0];\r\n headers = parseCsvLine(headerLine, finalDelimiter, trim, 1);\r\n dataRows = lines.slice(1);\r\n } else {\r\n // Generate default headers (col0, col1, ...)\r\n const firstRow = parseCsvLine(lines[0], finalDelimiter, trim, 1);\r\n headers = firstRow.map((_, index) => `column${index + 1}`);\r\n }\r\n\r\n if (Number.isFinite(memoryLimit) && dataRows.length > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n dataRows.length\r\n );\r\n }\r\n\r\n if (memoryWarningThreshold\r\n && dataRows.length > memoryWarningThreshold\r\n && process.env['NODE_ENV'] !== 'test') {\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + dataRows.length.toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n \r\n // Apply rename map to headers\r\n const finalHeaders = headers.map(header => renameMap[header] || header);\r\n\r\n if (fastPathMode === 'compact') {\r\n const compactResult: AnyArray = [];\r\n for (let i = 0; i < dataRows.length; i++) {\r\n if (maxRows && compactResult.length >= maxRows) {\r\n break;\r\n }\r\n const line = dataRows[i];\r\n const lineNumber = hasHeaders ? i + 2 : i + 1;\r\n let values = parseCsvLine(line, finalDelimiter, trim, lineNumber);\r\n if (values.length !== finalHeaders.length) {\r\n if (values.length > finalHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, finalHeaders.length);\r\n } else {\r\n while (values.length < finalHeaders.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n compactResult.push(values.map((value) => normalizeValue(value)));\r\n }\r\n return applyAfterConvertHooks(compactResult);\r\n }\r\n \r\n // Parse data rows\r\n const rawRows: AnyArray = [];\r\n const handleRowError = (error: Error, line: string, lineNumber: number): boolean => {\r\n if (error instanceof LimitError) {\r\n throw error;\r\n }\r\n if (errorHandler) {\r\n errorHandler(error, line, lineNumber);\r\n }\r\n if (onError === 'warn') {\r\n if (process.env['NODE_ENV'] !== 'test') {\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${error.message}`);\r\n }\r\n return true;\r\n }\r\n if (onError === 'skip') {\r\n return true;\r\n }\r\n throw error;\r\n };\r\n \r\n for (let i = 0; i < dataRows.length; i++) {\r\n const line = dataRows[i];\r\n const lineNumber = hasHeaders ? i + 2 : i + 1;\r\n try {\r\n let values = parseCsvLine(line, finalDelimiter, trim, lineNumber);\r\n \r\n // Handle field count mismatch\r\n if (values.length !== finalHeaders.length) {\r\n if (values.length > finalHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, finalHeaders.length);\r\n } else {\r\n while (values.length < finalHeaders.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n \r\n // Create object\r\n const row: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n let value: any = values[j];\r\n \r\n // Parse numbers if enabled\r\n if (parseNumbers && !isNaN(Number(value)) && value.trim() !== '') {\r\n value = Number(value);\r\n }\r\n \r\n // Parse booleans if enabled\r\n if (parseBooleans) {\r\n const lowerValue = String(value).toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n value = lowerValue === 'true';\r\n }\r\n }\r\n \r\n row[finalHeaders[j]] = value;\r\n }\r\n \r\n // Apply transform function if provided\r\n rawRows.push(row);\r\n } catch (error: any) {\r\n if (handleRowError(error as Error, line, lineNumber)) {\r\n continue;\r\n }\r\n }\r\n }\r\n \r\n // Apply hooks if provided\r\n const repairedRows = repairRowShifts\r\n ? repairShiftedRows(rawRows, finalHeaders, { normalizeQuotes })\r\n : rawRows;\r\n const normalizedRows = repairedRows.map((row, index) => applyPerRowHooks(row, index));\r\n return applyAfterConvertHooks(normalizedRows);\r\n }, 'PARSING_ERROR', { function: 'csvToJson' });\r\n}\r\n\r\n/**\r\n * Parses a single CSV line\r\n */\r\nfunction parseCsvLine(\r\n line: string,\r\n delimiter: string,\r\n trim: boolean,\r\n lineNumber?: number\r\n): string[] {\r\n const result: string[] = [];\r\n let currentField = '';\r\n let inQuotes = false;\r\n let quoteChar = '\"';\r\n let escapeNext = false;\r\n \r\n for (let i = 0; i < line.length; i++) {\r\n const char = line[i];\r\n const nextChar = i < line.length - 1 ? line[i + 1] : '';\r\n\r\n if (escapeNext) {\r\n currentField += char;\r\n escapeNext = false;\r\n continue;\r\n }\r\n\r\n if (char === '\\\\') {\r\n escapeNext = true;\r\n continue;\r\n }\r\n \r\n if (!inQuotes && char === delimiter) {\r\n result.push(trim ? currentField.trim() : currentField);\r\n currentField = '';\r\n } else if (!inQuotes && (char === '\"' || char === \"'\")) {\r\n inQuotes = true;\r\n quoteChar = char;\r\n } else if (inQuotes && char === quoteChar && nextChar === quoteChar) {\r\n currentField += char;\r\n if (i + 2 === line.length) {\r\n inQuotes = false;\r\n }\r\n i++;\r\n } else if (inQuotes && char === quoteChar) {\r\n inQuotes = false;\r\n } else {\r\n currentField += char;\r\n }\r\n }\r\n\r\n if (escapeNext) {\r\n currentField += '\\\\';\r\n }\r\n \r\n result.push(trim ? currentField.trim() : currentField);\r\n \r\n if (inQuotes) {\r\n throw ParsingError.unclosedQuotes(\r\n lineNumber ?? null,\r\n null,\r\n line.substring(0, 100)\r\n );\r\n }\r\n \r\n return result;\r\n}\r\n\r\nfunction isEmptyValue(value: any): boolean {\r\n return value === undefined || value === null || value === '';\r\n}\r\n\r\nfunction hasOddQuotes(value: any): boolean {\r\n if (typeof value !== 'string') {\r\n return false;\r\n }\r\n let count = 0;\r\n for (let i = 0; i < value.length; i++) {\r\n if (value[i] === '\"') {\r\n count++;\r\n }\r\n }\r\n return count % 2 === 1;\r\n}\r\n\r\nfunction hasAnyQuotes(value: any): boolean {\r\n return typeof value === 'string' && value.includes('\"');\r\n}\r\n\r\nfunction normalizeQuotesInField(value: any): any {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n // Не нормализуем кавычки в JSON-строках - это ломит структуру JSON\r\n if ((value.startsWith('{') && value.endsWith('}')) ||\r\n (value.startsWith('[') && value.endsWith(']'))) {\r\n return value; // Возвращаем как есть для JSON\r\n }\r\n \r\n let normalized = value.replace(/\"{2,}/g, '\"');\r\n // Не применяем правило, которое ломает JSON:\r\n // normalized = normalized.replace(/\"\\s*,\\s*\"/g, ',');\r\n normalized = normalized.replace(/\"\\n/g, '\\n').replace(/\\n\"/g, '\\n');\r\n if (normalized.length >= 2 && normalized.startsWith('\"') && normalized.endsWith('\"')) {\r\n normalized = normalized.slice(1, -1);\r\n }\r\n return normalized;\r\n}\r\n\r\nfunction normalizeRowQuotes(row: AnyObject, headers: string[]): AnyObject {\r\n const normalized: AnyObject = {};\r\n const phoneKeys = new Set(['phone', 'phonenumber', 'phone_number', 'tel', 'telephone']);\r\n for (const header of headers) {\r\n const baseValue = normalizeQuotesInField(row[header]);\r\n if (phoneKeys.has(String(header).toLowerCase())) {\r\n normalized[header] = normalizePhoneValue(baseValue);\r\n } else {\r\n normalized[header] = baseValue;\r\n }\r\n }\r\n return normalized;\r\n}\r\n\r\nfunction normalizePhoneValue(value: any): any {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n const trimmed = value.trim();\r\n if (trimmed === '') {\r\n return trimmed;\r\n }\r\n return trimmed.replace(/[\"'\\\\]/g, '');\r\n}\r\n\r\nfunction looksLikeUserAgent(value: any): boolean {\r\n if (typeof value !== 'string') {\r\n return false;\r\n }\r\n return /Mozilla\\/|Opera\\/|MSIE|AppleWebKit|Gecko|Safari|Chrome\\//.test(value);\r\n}\r\n\r\nfunction isHexColor(value: any): boolean {\r\n return typeof value === 'string' && /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);\r\n}\r\n\r\nfunction repairShiftedRows(\r\n rows: AnyArray,\r\n headers: string[],\r\n options: { normalizeQuotes?: boolean } = {}\r\n): AnyArray {\r\n if (!Array.isArray(rows) || rows.length === 0 || headers.length === 0) {\r\n return rows;\r\n }\r\n\r\n const headerCount = headers.length;\r\n const merged: AnyArray = [];\r\n let index = 0;\r\n\r\n while (index < rows.length) {\r\n const row = rows[index] as AnyObject;\r\n if (!row || typeof row !== 'object') {\r\n merged.push(row);\r\n index++;\r\n continue;\r\n }\r\n\r\n const values = headers.map((header) => row[header]);\r\n let lastNonEmpty = -1;\r\n for (let i = headerCount - 1; i >= 0; i--) {\r\n if (!isEmptyValue(values[i])) {\r\n lastNonEmpty = i;\r\n break;\r\n }\r\n }\r\n\r\n const missingCount = headerCount - 1 - lastNonEmpty;\r\n if (lastNonEmpty >= 0 && missingCount > 0 && index + 1 < rows.length) {\r\n const nextRow = rows[index + 1] as AnyObject;\r\n if (nextRow && typeof nextRow === 'object') {\r\n const nextValues = headers.map((header) => nextRow[header]);\r\n const nextTrailingEmpty = nextValues\r\n .slice(headerCount - missingCount)\r\n .every((value) => isEmptyValue(value));\r\n\r\n const leadValues = nextValues\r\n .slice(0, missingCount)\r\n .filter((value) => !isEmptyValue(value));\r\n const shouldMerge = nextTrailingEmpty\r\n && leadValues.length > 0\r\n && (hasOddQuotes(values[lastNonEmpty]) || hasAnyQuotes(values[lastNonEmpty]));\r\n\r\n if (shouldMerge) {\r\n const toAppend = leadValues.map((value) => String(value));\r\n\r\n if (toAppend.length > 0) {\r\n const base = isEmptyValue(values[lastNonEmpty]) ? '' : String(values[lastNonEmpty]);\r\n values[lastNonEmpty] = base ? `${base}\\n${toAppend.join('\\n')}` : toAppend.join('\\n');\r\n }\r\n\r\n for (let i = 0; i < missingCount; i++) {\r\n values[lastNonEmpty + 1 + i] = nextValues[missingCount + i];\r\n }\r\n\r\n const mergedRow: AnyObject = {};\r\n for (let i = 0; i < headerCount; i++) {\r\n mergedRow[headers[i]] = values[i];\r\n }\r\n\r\n merged.push(mergedRow);\r\n index += 2;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n if (index + 1 < rows.length) {\r\n const nextRow = rows[index + 1] as AnyObject;\r\n if (nextRow && typeof nextRow === 'object') {\r\n const nextHex = nextRow[headers[4]];\r\n const nextUserAgentHead = nextRow[headers[2]];\r\n const nextUserAgentTail = nextRow[headers[3]];\r\n const shouldMergeUserAgent = isEmptyValue(values[4])\r\n && isEmptyValue(values[5])\r\n && isHexColor(nextHex)\r\n && (looksLikeUserAgent(nextUserAgentHead) || looksLikeUserAgent(nextUserAgentTail));\r\n\r\n if (shouldMergeUserAgent) {\r\n const addressParts = [values[3], nextRow[headers[0]], nextRow[headers[1]]]\r\n .filter((value) => !isEmptyValue(value))\r\n .map((value) => String(value));\r\n values[3] = addressParts.join('\\n');\r\n\r\n // Очищаем кавычки из частей userAgent перед объединением\r\n let uaHead = isEmptyValue(nextUserAgentHead) ? '' : String(nextUserAgentHead);\r\n let uaTail = isEmptyValue(nextUserAgentTail) ? '' : String(nextUserAgentTail);\r\n // Удаляем лишние кавычки из начала и конца каждой части\r\n uaHead = uaHead.replace(/^\"+|\"+$/g, '');\r\n uaTail = uaTail.replace(/^\"+|\"+$/g, '');\r\n const joiner = uaHead && uaTail ? (uaTail.startsWith(' ') ? '' : ',') : '';\r\n values[4] = uaHead + joiner + uaTail;\r\n values[5] = String(nextHex);\r\n\r\n const mergedRow: AnyObject = {};\r\n for (let i = 0; i < headerCount; i++) {\r\n mergedRow[headers[i]] = values[i];\r\n }\r\n\r\n merged.push(mergedRow);\r\n index += 2;\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n merged.push(row);\r\n index++;\r\n }\r\n\r\n if (options.normalizeQuotes) {\r\n return merged.map((row) => normalizeRowQuotes(row, headers));\r\n }\r\n\r\n return merged;\r\n}\r\n\r\n/**\r\n * Asynchronous version of csvToJson with support for worker threads\r\n */\r\nexport async function csvToJsonAsync(\r\n csv: string,\r\n options: AsyncCsvToJsonOptions = {}\r\n): Promise<AnyArray> {\r\n return safeExecuteAsync(async () => {\r\n // For now, use the synchronous version\r\n // In the future, this will use worker threads for large datasets\r\n const { useWorkers = false, workerCount, chunkSize, onProgress, ...syncOptions } = options;\r\n \r\n // Simple implementation - just call the synchronous version\r\n // TODO: Implement worker thread support for large datasets\r\n return csvToJson(csv, syncOptions);\r\n }, 'PARSING_ERROR', { function: 'csvToJsonAsync' });\r\n}\r\n\r\n/**\r\n * Creates an iterator for streaming CSV parsing\r\n */\r\nexport function* csvToJsonIterator(\r\n csv: string,\r\n options: CsvToJsonOptions = {}\r\n): Generator<AnyObject, void, unknown> {\r\n // Validate input\r\n validateCsvInput(csv, options);\r\n \r\n const opts = options && typeof options === 'object' ? options : {};\r\n \r\n const {\r\n delimiter,\r\n autoDetect = true,\r\n candidates = [';', ',', '\\t', '|'],\r\n hasHeaders = true,\r\n renameMap = {},\r\n trim = true,\r\n parseNumbers = false,\r\n parseBooleans = false,\r\n maxRows,\r\n useFastPath = true,\r\n fastPathMode = 'objects',\r\n transform,\r\n hooks,\r\n useCache = true,\r\n cache,\r\n onError = 'throw',\r\n errorHandler,\r\n repairRowShifts = true,\r\n normalizeQuotes = true,\r\n memoryWarningThreshold = 1000000,\r\n memoryLimit = 5000000\r\n } = opts;\r\n\r\n const delimiterProvided = delimiter !== undefined && delimiter !== null;\r\n const transformHooks = hooks?.transformHooks instanceof TransformHooks\r\n ? hooks.transformHooks\r\n : null;\r\n const hooksContext = { options: opts };\r\n \r\n // Handle empty CSV\r\n if (!csv.trim()) {\r\n return;\r\n }\r\n \r\n // Normalize CSV input\r\n const normalizedCsv = normalizeCsvInput(csv);\r\n let processedCsv = normalizedCsv;\r\n if (transformHooks) {\r\n processedCsv = transformHooks.applyBeforeConvert(processedCsv, hooksContext);\r\n }\r\n if (hooks?.beforeConvert) {\r\n processedCsv = hooks.beforeConvert(processedCsv, opts);\r\n }\r\n \r\n // Determine delimiter\r\n let finalDelimiter = delimiter;\r\n if (!finalDelimiter && autoDetect) {\r\n const cacheToUse = cache instanceof DelimiterCache ? cache : globalDelimiterCache;\r\n finalDelimiter = autoDetectDelimiter(processedCsv, { candidates, useCache, cache: cacheToUse });\r\n }\r\n \r\n if (!finalDelimiter) {\r\n finalDelimiter = ';'; // Default fallback\r\n }\r\n if (!delimiterProvided && autoDetect) {\r\n const cacheToUse = cache instanceof DelimiterCache ? cache : globalDelimiterCache;\r\n const refined = refineDelimiterFromHeaderLine(processedCsv, finalDelimiter, candidates) || finalDelimiter;\r\n if (refined !== finalDelimiter && useCache && cacheToUse) {\r\n cacheToUse.set(processedCsv, candidates, refined);\r\n }\r\n finalDelimiter = refined;\r\n }\r\n\r\n const applyPerRowHooks = (row: AnyObject, index: number): AnyObject => {\r\n let result: AnyObject = row;\r\n if (transformHooks) {\r\n result = transformHooks.applyPerRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (hooks?.perRow) {\r\n result = hooks.perRow(result, index, hooksContext) as AnyObject;\r\n }\r\n if (transform) {\r\n result = transform(result);\r\n }\r\n return result;\r\n };\r\n\r\n const normalizeValue = (value: any): any => {\r\n let normalized = value;\r\n if (trim && typeof normalized === 'string') {\r\n normalized = normalized.trim();\r\n }\r\n if (typeof normalized === 'string') {\r\n if (normalized === '') {\r\n return null;\r\n }\r\n if (normalized[0] === \"'\" && normalized.length > 1) {\r\n const candidate = normalized.slice(1);\r\n const leading = trim ? candidate.trimStart() : candidate;\r\n const firstChar = leading[0];\r\n if (firstChar === '=' || firstChar === '+' || firstChar === '-' || firstChar === '@') {\r\n normalized = candidate;\r\n }\r\n }\r\n }\r\n if (parseNumbers && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if ((firstChar >= '0' && firstChar <= '9') || firstChar === '-' || firstChar === '+' || firstChar === '.') {\r\n const numValue = Number(normalized);\r\n if (!Number.isNaN(numValue)) {\r\n normalized = numValue;\r\n }\r\n }\r\n }\r\n if (parseBooleans && typeof normalized === 'string') {\r\n const firstChar = normalized[0];\r\n if (firstChar === 't' || firstChar === 'T' || firstChar === 'f' || firstChar === 'F') {\r\n const lowerValue = normalized.toLowerCase();\r\n if (lowerValue === 'true' || lowerValue === 'false') {\r\n normalized = lowerValue === 'true';\r\n }\r\n }\r\n }\r\n return normalized;\r\n };\r\n \r\n const handleRowError = (error: Error, line: string, lineNumber: number): boolean => {\r\n if (error instanceof LimitError) {\r\n throw error;\r\n }\r\n if (errorHandler) {\r\n errorHandler(error, line, lineNumber);\r\n }\r\n if (onError === 'warn') {\r\n if (process.env['NODE_ENV'] !== 'test') {\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${error.message}`);\r\n }\r\n return true;\r\n }\r\n if (onError === 'skip') {\r\n return true;\r\n }\r\n throw error;\r\n };\r\n\r\n let rowCount = 0; // Объявляем rowCount выше, чтобы assertRowLimit мог его использовать\r\n \r\n const assertRowLimit = () => {\r\n if (maxRows && rowCount >= maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n rowCount + 1\r\n );\r\n }\r\n };\r\n\r\n const shouldWarnLargeMemory = memoryWarningThreshold && process.env['NODE_ENV'] !== 'test';\r\n let warnedLargeMemory = false;\r\n\r\n if (globalFastPathEngine && typeof (globalFastPathEngine as any).iterateRows === 'function') {\r\n const iterateOptions: any = { delimiter: finalDelimiter };\r\n if (!useFastPath) {\r\n iterateOptions.forceEngine = 'STANDARD';\r\n }\r\n\r\n const rowIterator = (globalFastPathEngine as any).iterateRows(processedCsv, iterateOptions);\r\n let headers: string[] = [];\r\n let finalHeaders: string[] = [];\r\n let headersProcessed = false;\r\n let pendingRow: AnyObject | null = null;\r\n\r\n try {\r\n for (const row of rowIterator) {\r\n if (!Array.isArray(row) || row.length === 0) {\r\n continue;\r\n }\r\n\r\n if (!headersProcessed) {\r\n if (hasHeaders) {\r\n headers = row.map((header) => (trim ? String(header).trim() : String(header)));\r\n headersProcessed = true;\r\n finalHeaders = headers.map((header) => renameMap[header] || header);\r\n continue;\r\n } else {\r\n headers = row.map((_, index) => `column${index + 1}`);\r\n headersProcessed = true;\r\n finalHeaders = headers.map((header) => renameMap[header] || header);\r\n }\r\n }\r\n\r\n if (maxRows && rowCount >= maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n rowCount + 1\r\n );\r\n }\r\n\r\n if (Number.isFinite(memoryLimit) && rowCount + 1 > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n rowCount + 1\r\n );\r\n }\r\n\r\n if (!warnedLargeMemory && shouldWarnLargeMemory && rowCount + 1 > memoryWarningThreshold) {\r\n warnedLargeMemory = true;\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + (rowCount + 1).toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n\r\n let values = row;\r\n if (values.length !== headers.length) {\r\n if (values.length > headers.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const lineNumber = hasHeaders ? rowCount + 2 : rowCount + 1;\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, headers.length);\r\n } else {\r\n while (values.length < headers.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n\r\n if (fastPathMode === 'compact') {\r\n yield values.map((value) => normalizeValue(value));\r\n rowCount++;\r\n continue;\r\n }\r\n\r\n const rowObj: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n rowObj[finalHeaders[j]] = normalizeValue(values[j]);\r\n }\r\n\r\n if (repairRowShifts) {\r\n if (!pendingRow) {\r\n pendingRow = rowObj;\r\n continue;\r\n }\r\n\r\n const repairedRows = repairShiftedRows([pendingRow, rowObj], finalHeaders, { normalizeQuotes });\r\n if (repairedRows.length === 1) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = null;\r\n continue;\r\n }\r\n\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = repairedRows[1] as AnyObject;\r\n } else {\r\n const normalizedRow = normalizeQuotes ? normalizeRowQuotes(rowObj, finalHeaders) : rowObj;\r\n assertRowLimit();\r\n yield applyPerRowHooks(normalizedRow, rowCount);\r\n rowCount++;\r\n }\r\n }\r\n } catch (error: any) {\r\n if (error && error.code === 'FAST_PATH_UNCLOSED_QUOTES') {\r\n throw ParsingError.unclosedQuotes(error.lineNumber ?? null);\r\n }\r\n throw error;\r\n }\r\n\r\n if (pendingRow) {\r\n const flushedRows = repairShiftedRows([pendingRow], finalHeaders, { normalizeQuotes });\r\n for (const row of flushedRows) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(row as AnyObject, rowCount);\r\n rowCount++;\r\n }\r\n pendingRow = null;\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Split into lines\r\n const lines = processedCsv.split('\\n').filter(line => line.trim().length > 0);\r\n \r\n if (lines.length === 0) {\r\n return;\r\n }\r\n \r\n // Parse headers\r\n let headers: string[] = [];\r\n let dataRows = lines;\r\n \r\n if (hasHeaders) {\r\n const headerLine = lines[0];\r\n headers = parseCsvLine(headerLine, finalDelimiter, trim, 1);\r\n dataRows = lines.slice(1);\r\n } else {\r\n // Generate default headers\r\n const firstRow = parseCsvLine(lines[0], finalDelimiter, trim, 1);\r\n headers = firstRow.map((_, index) => `column${index + 1}`);\r\n }\r\n \r\n // Apply rename map to headers\r\n const finalHeaders = headers.map(header => renameMap[header] || header);\r\n \r\n // Yield rows one by one\r\n // rowCount уже объявлен выше\r\n let pendingRow: AnyObject | null = null;\r\n\r\n for (let i = 0; i < dataRows.length; i++) {\r\n // Check maxRows limit\r\n if (maxRows && rowCount >= maxRows) {\r\n throw new LimitError(\r\n `CSV size exceeds maximum limit of ${maxRows} rows`,\r\n maxRows,\r\n rowCount + 1\r\n );\r\n }\r\n\r\n const line = dataRows[i];\r\n const lineNumber = hasHeaders ? i + 2 : i + 1;\r\n if (Number.isFinite(memoryLimit) && rowCount + 1 > memoryLimit) {\r\n throw new LimitError(\r\n `CSV size exceeds memory safety limit of ${memoryLimit} rows`,\r\n memoryLimit,\r\n rowCount + 1\r\n );\r\n }\r\n if (!warnedLargeMemory && shouldWarnLargeMemory && rowCount + 1 > memoryWarningThreshold) {\r\n warnedLargeMemory = true;\r\n console.warn(\r\n 'Warning: Large in-memory CSV parse detected.\\n' +\r\n 'Consider using createCsvToJsonStream() for big files.\\n' +\r\n 'Current size: ' + (rowCount + 1).toLocaleString() + ' rows\\n' +\r\n 'Tip: Increase memoryLimit or set memoryLimit: Infinity to override.'\r\n );\r\n }\r\n try {\r\n let values = parseCsvLine(line, finalDelimiter, trim, lineNumber);\r\n \r\n // Handle field count mismatch\r\n if (values.length !== finalHeaders.length) {\r\n if (values.length > finalHeaders.length) {\r\n if (process.env['NODE_ENV'] === 'development') {\r\n const extraCount = values.length - finalHeaders.length;\r\n console.warn(`[jtcsv] Line ${lineNumber}: ${extraCount} extra fields ignored`);\r\n }\r\n values = values.slice(0, finalHeaders.length);\r\n } else {\r\n while (values.length < finalHeaders.length) {\r\n values.push(undefined as any);\r\n }\r\n }\r\n }\r\n \r\n if (fastPathMode === 'compact') {\r\n yield values.map((value) => normalizeValue(value));\r\n rowCount++;\r\n continue;\r\n }\r\n\r\n // Create object\r\n const row: AnyObject = {};\r\n for (let j = 0; j < finalHeaders.length; j++) {\r\n const value = normalizeValue(values[j]);\r\n row[finalHeaders[j]] = value;\r\n }\r\n\r\n if (repairRowShifts) {\r\n if (!pendingRow) {\r\n pendingRow = row;\r\n continue;\r\n }\r\n\r\n const repairedRows = repairShiftedRows([pendingRow, row], finalHeaders, { normalizeQuotes });\r\n if (repairedRows.length === 1) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = null;\r\n continue;\r\n }\r\n\r\n assertRowLimit();\r\n yield applyPerRowHooks(repairedRows[0], rowCount);\r\n rowCount++;\r\n pendingRow = repairedRows[1] as AnyObject;\r\n } else {\r\n const normalizedRow = normalizeQuotes ? normalizeRowQuotes(row, finalHeaders) : row;\r\n assertRowLimit();\r\n yield applyPerRowHooks(normalizedRow, rowCount);\r\n rowCount++;\r\n }\r\n } catch (error: any) {\r\n if (handleRowError(error as Error, line, lineNumber)) {\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n if (pendingRow) {\r\n const flushedRows = repairShiftedRows([pendingRow], finalHeaders, { normalizeQuotes });\r\n for (const row of flushedRows) {\r\n assertRowLimit();\r\n yield applyPerRowHooks(row as AnyObject, rowCount);\r\n rowCount++;\r\n }\r\n pendingRow = null;\r\n }\r\n}\r\n\r\n/**\r\n * Validates CSV file path for security\r\n * @private\r\n */\r\nfunction validateCsvFilePath(filePath: string): string {\r\n if (typeof filePath !== 'string' || filePath.trim() === '') {\r\n throw new ValidationError('File path must be a non-empty string');\r\n }\r\n\r\n if (!filePath.toLowerCase().endsWith('.csv')) {\r\n throw new ValidationError('File must have .csv extension');\r\n }\r\n \r\n // Basic path validation\r\n const normalizedPath = filePath.trim();\r\n \r\n // Check for directory traversal attempts\r\n if (normalizedPath.includes('..') || normalizedPath.includes('~')) {\r\n throw new SecurityError('Invalid file path: directory traversal detected');\r\n }\r\n \r\n // Check for dangerous extensions\r\n const dangerousExtensions = ['.exe', '.bat', '.cmd', '.sh', '.php', '.py'];\r\n const lowerPath = normalizedPath.toLowerCase();\r\n for (const ext of dangerousExtensions) {\r\n if (lowerPath.endsWith(ext)) {\r\n throw new SecurityError(`Invalid file extension: ${ext}`);\r\n }\r\n }\r\n \r\n return normalizedPath;\r\n}\r\n\r\n/**\r\n * Reads CSV file and converts to JSON (synchronous)\r\n */\r\nexport async function readCsvAsJson(\r\n filePath: string,\r\n options: CsvToJsonOptions & { validatePath?: boolean } = {}\r\n): Promise<AnyArray> {\r\n return safeExecuteAsync(async () => {\r\n const { validatePath = true, ...csvOptions } = options;\r\n const fs = require('fs');\r\n \r\n // Validate file path if requested\r\n const safePath = validatePath ? validateCsvFilePath(filePath) : filePath;\r\n \r\n try {\r\n // Read file\r\n const csvContent = await fs.promises.readFile(safePath, 'utf8');\r\n \r\n // Parse CSV with hooks and caching\r\n return csvToJson(csvContent, csvOptions);\r\n } catch (error: any) {\r\n // Re-throw parsing errors as-is\r\n if (error instanceof ParsingError || error instanceof ValidationError || error instanceof LimitError) {\r\n throw error;\r\n }\r\n \r\n // Wrap file system errors\r\n if (error.code === 'ENOENT') {\r\n throw new FileSystemError(`File not found: ${safePath}`, error);\r\n }\r\n if (error.code === 'EACCES') {\r\n throw new FileSystemError(`Permission denied: ${safePath}`, error);\r\n }\r\n if (error.code === 'EISDIR') {\r\n throw new FileSystemError(`Path is a directory: ${safePath}`, error);\r\n }\r\n \r\n throw new FileSystemError(`Failed to read CSV file: ${error.message}`, error);\r\n }\r\n }, 'FILE_SYSTEM_ERROR', { function: 'readCsvAsJson' });\r\n}\r\n\r\n/**\r\n * Reads CSV file and converts to JSON (synchronous)\r\n * \r\n * @param filePath - Path to CSV file\r\n * @param options - Configuration options (same as csvToJson)\r\n * @returns JSON array\r\n */\r\nexport function readCsvAsJsonSync(\r\n filePath: string,\r\n options: CsvToJsonOptions & { validatePath?: boolean } = {}\r\n): AnyArray {\r\n const fs = require('fs');\r\n \r\n // Validate file path\r\n const { validatePath = true, ...csvOptions } = options;\r\n const safePath = validatePath ? validateCsvFilePath(filePath) : filePath;\r\n \r\n try {\r\n // Read file\r\n const csvContent = fs.readFileSync(safePath, 'utf8');\r\n \r\n // Parse CSV with hooks and caching\r\n return csvToJson(csvContent, csvOptions);\r\n } catch (error: any) {\r\n // Re-throw parsing errors as-is\r\n if (error instanceof ParsingError || error instanceof ValidationError || error instanceof LimitError) {\r\n throw error;\r\n }\r\n \r\n // Wrap file system errors\r\n if (error.code === 'ENOENT') {\r\n throw new FileSystemError(`File not found: ${safePath}`, error);\r\n }\r\n if (error.code === 'EACCES') {\r\n throw new FileSystemError(`Permission denied: ${safePath}`, error);\r\n }\r\n if (error.code === 'EISDIR') {\r\n throw new FileSystemError(`Path is a directory: ${safePath}`, error);\r\n }\r\n \r\n throw new FileSystemError(`Failed to read CSV file: ${error.message}`, error);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new TransformHooks instance\r\n * @returns New TransformHooks instance\r\n */\r\nexport function createTransformHooks(): TransformHooks {\r\n return new TransformHooks();\r\n}\r\n\r\n/**\r\n * Creates a new DelimiterCache instance\r\n * @param maxSize - Maximum cache size (default: 100)\r\n * @returns New DelimiterCache instance\r\n */\r\nexport function createDelimiterCache(maxSize: number = 100): DelimiterCache {\r\n return new DelimiterCache(maxSize);\r\n}\r\n\r\n/**\r\n * Gets statistics from the global delimiter cache\r\n * @returns Cache statistics\r\n */\r\nexport function getDelimiterCacheStats(): any {\r\n return globalDelimiterCache.getStats();\r\n}\r\n\r\n/**\r\n * Clears the global delimiter cache\r\n */\r\nexport function clearDelimiterCache(): void {\r\n globalDelimiterCache.clear();\r\n}\r\n\r\nexport { TransformHooks, predefinedHooks };\r\n"]}
@@ -528,7 +528,7 @@ function jsonToCsv(data, options = {}) {
528
528
  }
529
529
  rows.push(rowValues.join(delimiter));
530
530
  }
531
- let csv = rows.join(rfc4180Compliant ? '\r\n' : '\n');
531
+ const csv = rows.join(rfc4180Compliant ? '\r\n' : '\n');
532
532
  return csv;
533
533
  }, 'PARSING_ERROR', { function: 'jsonToCsv' });
534
534
  }