jtcsv 2.1.3 → 2.2.2
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.
- package/LICENSE +1 -1
- package/README.md +60 -341
- package/bin/jtcsv.js +2462 -1372
- package/csv-to-json.js +35 -26
- package/dist/jtcsv.cjs.js +807 -133
- package/dist/jtcsv.cjs.js.map +1 -1
- package/dist/jtcsv.esm.js +800 -134
- package/dist/jtcsv.esm.js.map +1 -1
- package/dist/jtcsv.umd.js +807 -133
- package/dist/jtcsv.umd.js.map +1 -1
- package/errors.js +20 -0
- package/examples/browser-vanilla.html +37 -0
- package/examples/cli-batch-processing.js +38 -0
- package/examples/error-handling.js +324 -0
- package/examples/ndjson-processing.js +434 -0
- package/examples/react-integration.jsx +637 -0
- package/examples/schema-validation.js +640 -0
- package/examples/simple-usage.js +10 -7
- package/examples/typescript-example.ts +486 -0
- package/examples/web-workers-advanced.js +28 -0
- package/index.d.ts +2 -0
- package/json-save.js +2 -1
- package/json-to-csv.js +171 -131
- package/package.json +20 -4
- package/plugins/README.md +41 -467
- package/plugins/express-middleware/README.md +32 -274
- package/plugins/hono/README.md +16 -13
- package/plugins/nestjs/README.md +13 -11
- package/plugins/nextjs-api/README.md +28 -423
- package/plugins/nextjs-api/index.js +1 -2
- package/plugins/nextjs-api/route.js +1 -2
- package/plugins/nuxt/README.md +6 -7
- package/plugins/remix/README.md +9 -9
- package/plugins/sveltekit/README.md +8 -8
- package/plugins/trpc/README.md +8 -5
- package/src/browser/browser-functions.js +33 -3
- package/src/browser/csv-to-json-browser.js +269 -11
- package/src/browser/errors-browser.js +19 -1
- package/src/browser/index.js +39 -5
- package/src/browser/streams.js +393 -0
- package/src/browser/workers/csv-parser.worker.js +20 -2
- package/src/browser/workers/worker-pool.js +507 -447
- package/src/core/plugin-system.js +4 -0
- package/src/engines/fast-path-engine.js +31 -23
- package/src/errors.js +26 -0
- package/src/formats/ndjson-parser.js +54 -5
- package/src/formats/tsv-parser.js +4 -1
- package/src/utils/schema-validator.js +594 -0
- package/src/utils/transform-loader.js +205 -0
- package/src/web-server/index.js +683 -0
- package/stream-csv-to-json.js +16 -87
- package/stream-json-to-csv.js +18 -86
package/dist/jtcsv.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jtcsv.cjs.js","sources":["../src/browser/errors-browser.js","../src/browser/json-to-csv-browser.js","../src/browser/csv-to-json-browser.js","../src/browser/browser-functions.js","../src/browser/workers/worker-pool.js","../src/browser/index.js"],"sourcesContent":["// Система ошибок для браузерной версии jtcsv\n// Адаптирована для работы без Node.js специфичных API\n\n/**\n * Базовый класс ошибки jtcsv\n */\nexport class JTCSVError extends Error {\n constructor(message, code = 'JTCSV_ERROR', details = {}) {\n super(message);\n this.name = 'JTCSVError';\n this.code = code;\n this.details = details;\n \n // Сохранение stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, JTCSVError);\n }\n }\n}\n\n/**\n * Ошибка валидации\n */\nexport class ValidationError extends JTCSVError {\n constructor(message, details = {}) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Ошибка безопасности\n */\nexport class SecurityError extends JTCSVError {\n constructor(message, details = {}) {\n super(message, 'SECURITY_ERROR', details);\n this.name = 'SecurityError';\n }\n}\n\n/**\n * Ошибка файловой системы (адаптирована для браузера)\n */\nexport class FileSystemError extends JTCSVError {\n constructor(message, originalError = null, details = {}) {\n super(message, 'FILE_SYSTEM_ERROR', { ...details, originalError });\n this.name = 'FileSystemError';\n \n if (originalError && originalError.code) {\n this.code = originalError.code;\n }\n }\n}\n\n/**\n * Ошибка парсинга\n */\nexport class ParsingError extends JTCSVError {\n constructor(message, lineNumber = null, details = {}) {\n super(message, 'PARSING_ERROR', { ...details, lineNumber });\n this.name = 'ParsingError';\n this.lineNumber = lineNumber;\n }\n}\n\n/**\n * Ошибка превышения лимита\n */\nexport class LimitError extends JTCSVError {\n constructor(message, limit, actual, details = {}) {\n super(message, 'LIMIT_ERROR', { ...details, limit, actual });\n this.name = 'LimitError';\n this.limit = limit;\n this.actual = actual;\n }\n}\n\n/**\n * Ошибка конфигурации\n */\nexport class ConfigurationError extends JTCSVError {\n constructor(message, details = {}) {\n super(message, 'CONFIGURATION_ERROR', details);\n this.name = 'ConfigurationError';\n }\n}\n\n/**\n * Безопасное выполнение функции с обработкой ошибок\n * \n * @param {Function} fn - Функция для выполнения\n * @param {string} errorCode - Код ошибки по умолчанию\n * @param {Object} errorDetails - Детали ошибки\n * @returns {*} Результат выполнения функции\n */\nexport function safeExecute(fn, errorCode = 'UNKNOWN_ERROR', errorDetails = {}) {\n try {\n if (typeof fn === 'function') {\n return fn();\n }\n throw new ValidationError('Function expected');\n } catch (error) {\n // Если ошибка уже является JTCSVError, перебросить её\n if (error instanceof JTCSVError) {\n throw error;\n }\n \n // Определить тип ошибки на основе сообщения или кода\n let enhancedError;\n const errorMessage = error.message || String(error);\n \n if (errorMessage.includes('validation') || errorMessage.includes('Validation')) {\n enhancedError = new ValidationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('security') || errorMessage.includes('Security')) {\n enhancedError = new SecurityError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('parsing') || errorMessage.includes('Parsing')) {\n enhancedError = new ParsingError(errorMessage, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('limit') || errorMessage.includes('Limit')) {\n enhancedError = new LimitError(errorMessage, null, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('configuration') || errorMessage.includes('Configuration')) {\n enhancedError = new ConfigurationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('file') || errorMessage.includes('File')) {\n enhancedError = new FileSystemError(errorMessage, error, errorDetails);\n } else {\n // Общая ошибка\n enhancedError = new JTCSVError(errorMessage, errorCode, { ...errorDetails, originalError: error });\n }\n \n // Сохранить оригинальный stack trace если возможно\n if (error.stack) {\n enhancedError.stack = error.stack;\n }\n \n throw enhancedError;\n }\n}\n\n/**\n * Асинхронная версия safeExecute\n */\nexport async function safeExecuteAsync(fn, errorCode = 'UNKNOWN_ERROR', errorDetails = {}) {\n try {\n if (typeof fn === 'function') {\n return await fn();\n }\n throw new ValidationError('Function expected');\n } catch (error) {\n // Если ошибка уже является JTCSVError, перебросить её\n if (error instanceof JTCSVError) {\n throw error;\n }\n \n // Определить тип ошибки\n let enhancedError;\n const errorMessage = error.message || String(error);\n \n if (errorMessage.includes('validation') || errorMessage.includes('Validation')) {\n enhancedError = new ValidationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('security') || errorMessage.includes('Security')) {\n enhancedError = new SecurityError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('parsing') || errorMessage.includes('Parsing')) {\n enhancedError = new ParsingError(errorMessage, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('limit') || errorMessage.includes('Limit')) {\n enhancedError = new LimitError(errorMessage, null, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('configuration') || errorMessage.includes('Configuration')) {\n enhancedError = new ConfigurationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('file') || errorMessage.includes('File')) {\n enhancedError = new FileSystemError(errorMessage, error, errorDetails);\n } else {\n enhancedError = new JTCSVError(errorMessage, errorCode, { ...errorDetails, originalError: error });\n }\n \n if (error.stack) {\n enhancedError.stack = error.stack;\n }\n \n throw enhancedError;\n }\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n JTCSVError,\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError,\n safeExecute,\n safeExecuteAsync\n };\n}\r\n","// Браузерная версия JSON to CSV конвертера\n// Адаптирована для работы в браузере без Node.js API\n\nimport {\n ValidationError,\n ConfigurationError,\n LimitError,\n safeExecute\n} from './errors-browser.js';\n\n/**\n * Валидация входных данных и опций\n * @private\n */\nfunction validateInput(data, options) {\n // Validate data\n if (!Array.isArray(data)) {\n throw new ValidationError('Input data must be an array');\n }\n \n // Validate options\n if (options && typeof options !== 'object') {\n throw new ConfigurationError('Options must be an object');\n }\n \n // Validate delimiter\n if (options?.delimiter && typeof options.delimiter !== 'string') {\n throw new ConfigurationError('Delimiter must be a string');\n }\n \n if (options?.delimiter && options.delimiter.length !== 1) {\n throw new ConfigurationError('Delimiter must be a single character');\n }\n \n // Validate renameMap\n if (options?.renameMap && typeof options.renameMap !== 'object') {\n throw new ConfigurationError('renameMap must be an object');\n }\n \n // Validate maxRecords\n if (options && options.maxRecords !== undefined) {\n if (typeof options.maxRecords !== 'number' || options.maxRecords <= 0) {\n throw new ConfigurationError('maxRecords must be a positive number');\n }\n }\n \n // Validate preventCsvInjection\n if (options?.preventCsvInjection !== undefined && typeof options.preventCsvInjection !== 'boolean') {\n throw new ConfigurationError('preventCsvInjection must be a boolean');\n }\n \n // Validate rfc4180Compliant\n if (options?.rfc4180Compliant !== undefined && typeof options.rfc4180Compliant !== 'boolean') {\n throw new ConfigurationError('rfc4180Compliant must be a boolean');\n }\n \n return true;\n}\n\n/**\n * Конвертирует JSON данные в CSV формат\n * \n * @param {Array<Object>} data - Массив объектов для конвертации в CSV\n * @param {Object} [options] - Опции конфигурации\n * @param {string} [options.delimiter=';'] - CSV разделитель\n * @param {boolean} [options.includeHeaders=true] - Включать ли заголовки\n * @param {Object} [options.renameMap={}] - Маппинг переименования заголовков\n * @param {Object} [options.template={}] - Шаблон для порядка колонок\n * @param {number} [options.maxRecords] - Максимальное количество записей\n * @param {boolean} [options.preventCsvInjection=true] - Защита от CSV инъекций\n * @param {boolean} [options.rfc4180Compliant=true] - Соответствие RFC 4180\n * @returns {string} CSV строка\n */\nexport function jsonToCsv(data, options = {}) {\n return safeExecute(() => {\n // Валидация входных данных\n validateInput(data, options);\n \n const opts = options && typeof options === 'object' ? options : {};\n \n const {\n delimiter = ';',\n includeHeaders = true,\n renameMap = {},\n template = {},\n maxRecords,\n preventCsvInjection = true,\n rfc4180Compliant = true\n } = opts;\n\n // Обработка пустых данных\n if (data.length === 0) {\n return '';\n }\n\n // Предупреждение для больших наборов данных\n if (data.length > 1000000 && !maxRecords && process.env.NODE_ENV !== 'production') {\n console.warn(\n '⚠️ Warning: Processing >1M records in memory may be slow.\\n' +\n '💡 Consider processing data in batches or using Web Workers for large files.\\n' +\n '📊 Current size: ' + data.length.toLocaleString() + ' records'\n );\n }\n\n // Применение ограничения по количеству записей\n if (maxRecords && data.length > maxRecords) {\n throw new LimitError(\n `Data size exceeds maximum limit of ${maxRecords} records`,\n maxRecords,\n data.length\n );\n }\n\n // Получение всех уникальных ключей\n const allKeys = new Set();\n data.forEach((item) => {\n if (!item || typeof item !== 'object') {\n return;\n }\n Object.keys(item).forEach(key => allKeys.add(key));\n });\n \n const originalKeys = Array.from(allKeys);\n \n // Применение rename map для создания заголовков\n const headers = originalKeys.map(key => renameMap[key] || key);\n \n // Создание обратного маппинга\n const reverseRenameMap = {};\n originalKeys.forEach((key, index) => {\n reverseRenameMap[headers[index]] = key;\n });\n\n // Применение порядка из шаблона\n let finalHeaders = headers;\n if (Object.keys(template).length > 0) {\n const templateHeaders = Object.keys(template).map(key => renameMap[key] || key);\n const extraHeaders = headers.filter(h => !templateHeaders.includes(h));\n finalHeaders = [...templateHeaders, ...extraHeaders];\n }\n\n /**\n * Экранирование значения для CSV с защитой от инъекций\n * @private\n */\n const escapeValue = (value) => {\n if (value === null || value === undefined || value === '') {\n return '';\n }\n \n const stringValue = String(value);\n \n // Защита от CSV инъекций\n let escapedValue = stringValue;\n if (preventCsvInjection && /^[=+\\-@]/.test(stringValue)) {\n escapedValue = \"'\" + stringValue;\n }\n \n // Соответствие RFC 4180\n const needsQuoting = rfc4180Compliant \n ? (escapedValue.includes(delimiter) ||\n escapedValue.includes('\"') ||\n escapedValue.includes('\\n') ||\n escapedValue.includes('\\r'))\n : (escapedValue.includes(delimiter) ||\n escapedValue.includes('\"') ||\n escapedValue.includes('\\n') ||\n escapedValue.includes('\\r'));\n \n if (needsQuoting) {\n return `\"${escapedValue.replace(/\"/g, '\"\"')}\"`;\n }\n \n return escapedValue;\n };\n\n // Построение CSV строк\n const rows = [];\n \n // Добавление заголовков\n if (includeHeaders && finalHeaders.length > 0) {\n rows.push(finalHeaders.join(delimiter));\n }\n \n // Добавление данных\n for (const item of data) {\n if (!item || typeof item !== 'object') {\n continue;\n }\n \n const row = finalHeaders.map(header => {\n const originalKey = reverseRenameMap[header] || header;\n const value = item[originalKey];\n return escapeValue(value);\n }).join(delimiter);\n \n rows.push(row);\n }\n \n // Разделители строк согласно RFC 4180\n const lineEnding = rfc4180Compliant ? '\\r\\n' : '\\n';\n return rows.join(lineEnding);\n }, 'PARSE_FAILED', { function: 'jsonToCsv' });\n}\n\n/**\n * Глубокое разворачивание вложенных объектов и массивов\n * \n * @param {*} value - Значение для разворачивания\n * @param {number} [depth=0] - Текущая глубина рекурсии\n * @param {number} [maxDepth=5] - Максимальная глубина рекурсии\n * @param {Set} [visited=new Set()] - Посещенные объекты для обнаружения циклических ссылок\n * @returns {string} Развернутое строковое значение\n */\nexport function deepUnwrap(value, depth = 0, maxDepth = 5, visited = new Set()) {\n // Проверка глубины\n if (depth >= maxDepth) {\n return '[Too Deep]';\n }\n if (value === null || value === undefined) {\n return '';\n }\n \n // Обработка циклических ссылок\n if (typeof value === 'object') {\n if (visited.has(value)) {\n return '[Circular Reference]';\n }\n visited.add(value);\n }\n \n // Обработка массивов\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '';\n }\n const unwrappedItems = value.map(item => \n deepUnwrap(item, depth + 1, maxDepth, visited)\n ).filter(item => item !== '');\n return unwrappedItems.join(', ');\n }\n \n // Обработка объектов\n if (typeof value === 'object') {\n const keys = Object.keys(value);\n if (keys.length === 0) {\n return '';\n }\n \n if (depth + 1 >= maxDepth) {\n return '[Too Deep]';\n }\n \n // Сериализация сложных объектов\n try {\n return JSON.stringify(value);\n } catch (error) {\n if (error.message.includes('circular') || error.message.includes('Converting circular')) {\n return '[Circular Reference]';\n }\n return '[Unstringifiable Object]';\n }\n }\n \n // Примитивные значения\n return String(value);\n}\n\n/**\n * Предобработка JSON данных путем глубокого разворачивания вложенных структур\n * \n * @param {Array<Object>} data - Массив объектов для предобработки\n * @returns {Array<Object>} Предобработанные данные с развернутыми значениями\n */\nexport function preprocessData(data) {\n if (!Array.isArray(data)) {\n return [];\n }\n \n return data.map(item => {\n if (!item || typeof item !== 'object') {\n return {};\n }\n \n const processed = {};\n \n for (const key in item) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const value = item[key];\n if (value && typeof value === 'object') {\n processed[key] = deepUnwrap(value);\n } else {\n processed[key] = value;\n }\n }\n }\n \n return processed;\n });\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n jsonToCsv,\n preprocessData,\n deepUnwrap\n };\n}\r\n","// Браузерная версия CSV to JSON конвертера\n// Адаптирована для работы в браузере без Node.js API\n\nimport {\n ValidationError,\n ParsingError,\n LimitError,\n ConfigurationError,\n safeExecute\n} from './errors-browser.js';\n\n/**\n * Валидация CSV ввода и опций\n * @private\n */\nfunction validateCsvInput(csv, options) {\n // Validate CSV input\n if (typeof csv !== 'string') {\n throw new ValidationError('Input must be a CSV string');\n }\n \n // Validate options\n if (options && typeof options !== 'object') {\n throw new ConfigurationError('Options must be an object');\n }\n \n // Validate delimiter\n if (options?.delimiter && typeof options.delimiter !== 'string') {\n throw new ConfigurationError('Delimiter must be a string');\n }\n \n if (options?.delimiter && options.delimiter.length !== 1) {\n throw new ConfigurationError('Delimiter must be a single character');\n }\n \n // Validate autoDetect\n if (options?.autoDetect !== undefined && typeof options.autoDetect !== 'boolean') {\n throw new ConfigurationError('autoDetect must be a boolean');\n }\n \n // Validate candidates\n if (options?.candidates && !Array.isArray(options.candidates)) {\n throw new ConfigurationError('candidates must be an array');\n }\n \n // Validate maxRows\n if (options?.maxRows !== undefined && (typeof options.maxRows !== 'number' || options.maxRows <= 0)) {\n throw new ConfigurationError('maxRows must be a positive number');\n }\n \n return true;\n}\n\n/**\n * Парсинг одной строки CSV с правильным экранированием\n * @private\n */\nfunction parseCsvLine(line, lineNumber, delimiter) {\n const fields = [];\n let currentField = '';\n let insideQuotes = false;\n let escapeNext = false;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n \n if (escapeNext) {\n currentField += char;\n escapeNext = false;\n continue;\n }\n\n if (char === '\\\\') {\n if (i + 1 === line.length) {\n // Обратный слеш в конце строки\n currentField += char;\n } else if (line[i + 1] === '\\\\') {\n // Двойной обратный слеш\n currentField += char;\n i++; // Пропустить следующий слеш\n } else {\n // Экранирование следующего символа\n escapeNext = true;\n }\n continue;\n }\n\n if (char === '\"') {\n if (insideQuotes) {\n if (i + 1 < line.length && line[i + 1] === '\"') {\n // Экранированная кавычка внутри кавычек\n currentField += '\"';\n i++; // Пропустить следующую кавычку\n \n // Проверка конца поля\n let isEndOfField = false;\n let j = i + 1;\n while (j < line.length && (line[j] === ' ' || line[j] === '\\t')) {\n j++;\n }\n if (j === line.length || line[j] === delimiter) {\n isEndOfField = true;\n }\n \n if (isEndOfField) {\n insideQuotes = false;\n }\n } else {\n // Проверка конца поля\n let isEndOfField = false;\n let j = i + 1;\n while (j < line.length && (line[j] === ' ' || line[j] === '\\t')) {\n j++;\n }\n if (j === line.length || line[j] === delimiter) {\n isEndOfField = true;\n }\n \n if (isEndOfField) {\n insideQuotes = false;\n } else {\n currentField += '\"';\n }\n }\n } else {\n // Начало поля в кавычках\n insideQuotes = true;\n }\n continue;\n }\n\n if (!insideQuotes && char === delimiter) {\n // Конец поля\n fields.push(currentField);\n currentField = '';\n continue;\n }\n\n currentField += char;\n }\n\n // Обработка незавершенного экранирования\n if (escapeNext) {\n currentField += '\\\\';\n }\n\n // Добавление последнего поля\n fields.push(currentField);\n\n // Проверка незакрытых кавычек\n if (insideQuotes) {\n throw new ParsingError('Unclosed quotes in CSV', lineNumber);\n }\n\n // Валидация количества полей\n if (fields.length === 0) {\n throw new ParsingError('No fields found', lineNumber);\n }\n\n return fields;\n}\n\n/**\n * Парсинг значения на основе опций\n * @private\n */\nfunction parseCsvValue(value, options) {\n const { trim = true, parseNumbers = false, parseBooleans = false } = options;\n \n let result = value;\n \n if (trim) {\n result = result.trim();\n }\n \n // Удаление защиты формул Excel\n if (result.startsWith(\"'\")) {\n result = result.substring(1);\n }\n \n // Парсинг чисел\n if (parseNumbers && /^-?\\d+(\\.\\d+)?$/.test(result)) {\n const num = parseFloat(result);\n if (!isNaN(num)) {\n return num;\n }\n }\n \n // Парсинг булевых значений\n if (parseBooleans) {\n const lowerValue = result.toLowerCase();\n if (lowerValue === 'true') {\n return true; \n }\n if (lowerValue === 'false') {\n return false; \n }\n }\n \n // Пустые строки как null\n if (result === '') {\n return null;\n }\n \n return result;\n}\n\n/**\n * Автоматическое определение разделителя CSV\n * \n * @param {string} csv - CSV строка\n * @param {Array} [candidates=[';', ',', '\\t', '|']] - Кандидаты на разделитель\n * @returns {string} Определенный разделитель\n */\nexport function autoDetectDelimiter(csv, candidates = [';', ',', '\\t', '|']) {\n if (!csv || typeof csv !== 'string') {\n return ';'; // значение по умолчанию\n }\n\n const lines = csv.split('\\n').filter(line => line.trim().length > 0);\n \n if (lines.length === 0) {\n return ';'; // значение по умолчанию\n }\n\n // Использование первой непустой строки для определения\n const firstLine = lines[0];\n \n const counts = {};\n candidates.forEach(delim => {\n const escapedDelim = delim.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escapedDelim, 'g');\n const matches = firstLine.match(regex);\n counts[delim] = matches ? matches.length : 0;\n });\n\n // Поиск разделителя с максимальным количеством\n let maxCount = -1;\n let detectedDelimiter = ';'; // значение по умолчанию\n \n for (const [delim, count] of Object.entries(counts)) {\n if (count > maxCount) {\n maxCount = count;\n detectedDelimiter = delim;\n }\n }\n\n // Если разделитель не найден или ничья\n if (maxCount === 0) {\n return ';'; // значение по умолчанию\n }\n\n return detectedDelimiter;\n}\n\n/**\n * Конвертирует CSV строку в JSON массив\n * \n * @param {string} csv - CSV строка для конвертации\n * @param {Object} [options] - Опции конфигурации\n * @param {string} [options.delimiter] - CSV разделитель (по умолчанию: автоопределение)\n * @param {boolean} [options.autoDetect=true] - Автоопределение разделителя\n * @param {Array} [options.candidates=[';', ',', '\\t', '|']] - Кандидаты для автоопределения\n * @param {boolean} [options.hasHeaders=true] - Есть ли заголовки в CSV\n * @param {Object} [options.renameMap={}] - Маппинг переименования заголовков\n * @param {boolean} [options.trim=true] - Обрезать пробелы\n * @param {boolean} [options.parseNumbers=false] - Парсить числовые значения\n * @param {boolean} [options.parseBooleans=false] - Парсить булевы значения\n * @param {number} [options.maxRows] - Максимальное количество строк\n * @returns {Array<Object>} JSON массив\n */\nexport function csvToJson(csv, options = {}) {\n return safeExecute(() => {\n // Валидация ввода\n validateCsvInput(csv, options);\n \n const opts = options && typeof options === 'object' ? options : {};\n \n const {\n delimiter,\n autoDetect = true,\n candidates = [';', ',', '\\t', '|'],\n hasHeaders = true,\n renameMap = {},\n trim = true,\n parseNumbers = false,\n parseBooleans = false,\n maxRows\n } = opts;\n\n // Определение разделителя\n let finalDelimiter = delimiter;\n if (!finalDelimiter && autoDetect) {\n finalDelimiter = autoDetectDelimiter(csv, candidates);\n }\n finalDelimiter = finalDelimiter || ';'; // fallback\n\n // Обработка пустого CSV\n if (csv.trim() === '') {\n return [];\n }\n\n // Парсинг CSV с обработкой кавычек и переносов строк\n const lines = [];\n let currentLine = '';\n let insideQuotes = false;\n \n for (let i = 0; i < csv.length; i++) {\n const char = csv[i];\n \n if (char === '\"') {\n if (insideQuotes && i + 1 < csv.length && csv[i + 1] === '\"') {\n // Экранированная кавычка внутри кавычек\n currentLine += '\"';\n i++; // Пропустить следующую кавычку\n } else {\n // Переключение режима кавычек\n insideQuotes = !insideQuotes;\n }\n currentLine += char;\n continue;\n }\n \n if (char === '\\n' && !insideQuotes) {\n // Конец строки (вне кавычек)\n lines.push(currentLine);\n currentLine = '';\n continue;\n }\n \n if (char === '\\r') {\n // Игнорировать carriage return\n continue;\n }\n \n currentLine += char;\n }\n \n // Добавление последней строки\n if (currentLine !== '' || insideQuotes) {\n lines.push(currentLine);\n }\n \n if (lines.length === 0) {\n return [];\n }\n\n // Предупреждение для больших наборов данных\n if (lines.length > 1000000 && !maxRows && process.env.NODE_ENV !== 'production') {\n console.warn(\n '⚠️ Warning: Processing >1M records in memory may be slow.\\n' +\n '💡 Consider using Web Workers for better performance with large files.\\n' +\n '📊 Current size: ' + lines.length.toLocaleString() + ' rows'\n );\n }\n\n // Применение ограничения по строкам\n if (maxRows && lines.length > maxRows) {\n throw new LimitError(\n `CSV size exceeds maximum limit of ${maxRows} rows`,\n maxRows,\n lines.length\n );\n }\n\n let headers = [];\n let startIndex = 0;\n \n // Парсинг заголовков если есть\n if (hasHeaders && lines.length > 0) {\n try {\n headers = parseCsvLine(lines[0], 1, finalDelimiter).map(header => {\n const trimmed = trim ? header.trim() : header;\n return renameMap[trimmed] || trimmed;\n });\n startIndex = 1;\n } catch (error) {\n if (error instanceof ParsingError) {\n throw new ParsingError(`Failed to parse headers: ${error.message}`, 1);\n }\n throw error;\n }\n } else {\n // Генерация числовых заголовков из первой строки\n try {\n const firstLineFields = parseCsvLine(lines[0], 1, finalDelimiter);\n headers = firstLineFields.map((_, index) => `column${index + 1}`);\n } catch (error) {\n if (error instanceof ParsingError) {\n throw new ParsingError(`Failed to parse first line: ${error.message}`, 1);\n }\n throw error;\n }\n }\n\n // Парсинг строк данных\n const result = [];\n \n for (let i = startIndex; i < lines.length; i++) {\n const line = lines[i];\n \n // Пропуск пустых строк\n if (line.trim() === '') {\n continue;\n }\n \n try {\n const fields = parseCsvLine(line, i + 1, finalDelimiter);\n \n // Обработка несоответствия количества полей\n const row = {};\n const fieldCount = Math.min(fields.length, headers.length);\n \n for (let j = 0; j < fieldCount; j++) {\n row[headers[j]] = parseCsvValue(fields[j], { trim, parseNumbers, parseBooleans });\n }\n \n // Предупреждение о лишних полях\n if (fields.length > headers.length && process.env.NODE_ENV === 'development') {\n console.warn(`[jtcsv] Line ${i + 1}: ${fields.length - headers.length} extra fields ignored`);\n }\n \n result.push(row);\n } catch (error) {\n if (error instanceof ParsingError) {\n throw new ParsingError(`Line ${i + 1}: ${error.message}`, i + 1);\n }\n throw error;\n }\n }\n\n return result;\n }, 'PARSE_FAILED', { function: 'csvToJson' });\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n csvToJson,\n autoDetectDelimiter\n };\n}\r\n","// Браузерные специфичные функции для jtcsv\n// Функции, которые работают только в браузере\n\nimport { jsonToCsv } from './json-to-csv-browser.js';\nimport { csvToJson } from './csv-to-json-browser.js';\nimport { ValidationError } from './errors-browser.js';\n\n/**\n * Скачивает JSON данные как CSV файл\n * \n * @param {Array<Object>} data - Массив объектов для конвертации\n * @param {string} [filename='data.csv'] - Имя файла для скачивания\n * @param {Object} [options] - Опции для jsonToCsv\n * @returns {void}\n * \n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' }\n * ];\n * downloadAsCsv(data, 'users.csv', { delimiter: ',' });\n */\nexport function downloadAsCsv(data, filename = 'data.csv', options = {}) {\n // Проверка что мы в браузере\n if (typeof window === 'undefined') {\n throw new ValidationError('downloadAsCsv() работает только в браузере. Используйте saveAsCsv() в Node.js');\n }\n \n // Валидация имени файла\n if (typeof filename !== 'string' || filename.trim() === '') {\n throw new ValidationError('Filename must be a non-empty string');\n }\n \n // Добавление расширения .csv если его нет\n if (!filename.toLowerCase().endsWith('.csv')) {\n filename += '.csv';\n }\n \n // Конвертация в CSV\n const csv = jsonToCsv(data, options);\n \n // Создание Blob\n const blob = new Blob([csv], { \n type: 'text/csv;charset=utf-8;' \n });\n \n // Создание ссылки для скачивания\n const link = document.createElement('a');\n \n // Создание URL для Blob\n const url = URL.createObjectURL(blob);\n \n // Настройка ссылки\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.style.visibility = 'hidden';\n \n // Добавление в DOM и клик\n document.body.appendChild(link);\n link.click();\n \n // Очистка\n setTimeout(() => {\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }, 100);\n}\n\n/**\n * Парсит CSV файл из input[type=\"file\"] в JSON\n * \n * @param {File} file - File объект из input\n * @param {Object} [options] - Опции для csvToJson\n * @returns {Promise<Array<Object>>} Promise с JSON данными\n * \n * @example\n * // HTML: <input type=\"file\" id=\"csvFile\" accept=\".csv\">\n * const fileInput = document.getElementById('csvFile');\n * const json = await parseCsvFile(fileInput.files[0], { delimiter: ',' });\n */\nexport async function parseCsvFile(file, options = {}) {\n // Проверка что мы в браузере\n if (typeof window === 'undefined') {\n throw new ValidationError('parseCsvFile() работает только в браузере. Используйте readCsvAsJson() в Node.js');\n }\n \n // Валидация файла\n if (!(file instanceof File)) {\n throw new ValidationError('Input must be a File object');\n }\n \n // Проверка расширения файла\n if (!file.name.toLowerCase().endsWith('.csv')) {\n throw new ValidationError('File must have .csv extension');\n }\n \n // Проверка размера файла (предупреждение для больших файлов)\n const MAX_SIZE_WARNING = 50 * 1024 * 1024; // 50MB\n if (file.size > MAX_SIZE_WARNING && process.env.NODE_ENV !== 'production') {\n console.warn(\n `⚠️ Warning: Processing large file (${(file.size / 1024 / 1024).toFixed(2)}MB).\\n` +\n '💡 Consider using Web Workers for better performance.\\n' +\n '🔧 Tip: Use parseCSVWithWorker() for files > 10MB.'\n );\n }\n \n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n \n reader.onload = function (event) {\n try {\n const csvText = event.target.result;\n const json = csvToJson(csvText, options);\n resolve(json);\n } catch (error) {\n reject(error);\n }\n };\n \n reader.onerror = function () {\n reject(new ValidationError('Ошибка чтения файла'));\n };\n \n reader.onabort = function () {\n reject(new ValidationError('Чтение файла прервано'));\n };\n \n // Чтение как текст\n reader.readAsText(file, 'UTF-8');\n });\n}\n\n/**\n * Создает CSV файл из JSON данных (альтернатива downloadAsCsv)\n * Возвращает Blob вместо автоматического скачивания\n * \n * @param {Array<Object>} data - Массив объектов\n * @param {Object} [options] - Опции для jsonToCsv\n * @returns {Blob} CSV Blob\n */\nexport function createCsvBlob(data, options = {}) {\n const csv = jsonToCsv(data, options);\n return new Blob([csv], { \n type: 'text/csv;charset=utf-8;' \n });\n}\n\n/**\n * Парсит CSV строку из Blob\n * \n * @param {Blob} blob - CSV Blob\n * @param {Object} [options] - Опции для csvToJson\n * @returns {Promise<Array<Object>>} Promise с JSON данными\n */\nexport async function parseCsvBlob(blob, options = {}) {\n if (!(blob instanceof Blob)) {\n throw new ValidationError('Input must be a Blob object');\n }\n \n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n \n reader.onload = function (event) {\n try {\n const csvText = event.target.result;\n const json = csvToJson(csvText, options);\n resolve(json);\n } catch (error) {\n reject(error);\n }\n };\n \n reader.onerror = function () {\n reject(new ValidationError('Ошибка чтения Blob'));\n };\n \n reader.readAsText(blob, 'UTF-8');\n });\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n downloadAsCsv,\n parseCsvFile,\n createCsvBlob,\n parseCsvBlob\n };\n}\r\n","// Worker Pool для параллельной обработки CSV\n// Использует Comlink для простой коммуникации с Web Workers\n\nimport { ValidationError, ConfigurationError } from '../errors-browser.js';\n\n// Проверка поддержки Web Workers\nconst WORKERS_SUPPORTED = typeof Worker !== 'undefined';\n\n/**\n * Опции для Worker Pool\n * @typedef {Object} WorkerPoolOptions\n * @property {number} [workerCount=4] - Количество workers в pool\n * @property {number} [maxQueueSize=100] - Максимальный размер очереди задач\n * @property {boolean} [autoScale=true] - Автоматическое масштабирование pool\n * @property {number} [idleTimeout=60000] - Таймаут простоя worker (мс)\n */\n\n/**\n * Статистика Worker Pool\n * @typedef {Object} WorkerPoolStats\n * @property {number} totalWorkers - Всего workers\n * @property {number} activeWorkers - Активные workers\n * @property {number} idleWorkers - Простаивающие workers\n * @property {number} queueSize - Размер очереди\n * @property {number} tasksCompleted - Завершенные задачи\n * @property {number} tasksFailed - Неудачные задачи\n */\n\n/**\n * Прогресс обработки задачи\n * @typedef {Object} TaskProgress\n * @property {number} processed - Обработано элементов\n * @property {number} total - Всего элементов\n * @property {number} percentage - Процент выполнения\n * @property {number} speed - Скорость обработки (элементов/сек)\n */\n\n/**\n * Worker Pool для параллельной обработки CSV\n */\nexport class WorkerPool {\n /**\n * Создает новый Worker Pool\n * @param {string} workerScript - URL скрипта worker\n * @param {WorkerPoolOptions} [options] - Опции pool\n */\n constructor(workerScript, options = {}) {\n if (!WORKERS_SUPPORTED) {\n throw new ValidationError('Web Workers не поддерживаются в этом браузере');\n }\n \n this.workerScript = workerScript;\n this.options = {\n workerCount: 4,\n maxQueueSize: 100,\n autoScale: true,\n idleTimeout: 60000,\n ...options\n };\n \n this.workers = [];\n this.taskQueue = [];\n this.activeTasks = new Map();\n this.stats = {\n totalWorkers: 0,\n activeWorkers: 0,\n idleWorkers: 0,\n queueSize: 0,\n tasksCompleted: 0,\n tasksFailed: 0\n };\n \n this.initializeWorkers();\n }\n \n /**\n * Инициализация workers\n * @private\n */\n initializeWorkers() {\n const { workerCount } = this.options;\n \n for (let i = 0; i < workerCount; i++) {\n this.createWorker();\n }\n \n this.updateStats();\n }\n \n /**\n * Создает нового worker\n * @private\n */\n createWorker() {\n try {\n const worker = new Worker(this.workerScript, { type: 'module' });\n \n worker.id = `worker-${this.workers.length}`;\n worker.status = 'idle';\n worker.lastUsed = Date.now();\n worker.taskId = null;\n \n // Обработчики событий\n worker.onmessage = (event) => this.handleWorkerMessage(worker, event);\n worker.onerror = (error) => this.handleWorkerError(worker, error);\n worker.onmessageerror = (error) => this.handleWorkerMessageError(worker, error);\n \n this.workers.push(worker);\n this.stats.totalWorkers++;\n this.stats.idleWorkers++;\n \n return worker;\n } catch (error) {\n throw new ConfigurationError(`Не удалось создать worker: ${error.message}`);\n }\n }\n \n /**\n * Обработка сообщений от worker\n * @private\n */\n handleWorkerMessage(worker, event) {\n const { data } = event;\n \n if (data.type === 'PROGRESS') {\n this.handleProgress(worker, data);\n } else if (data.type === 'RESULT') {\n this.handleResult(worker, data);\n } else if (data.type === 'ERROR') {\n this.handleWorkerTaskError(worker, data);\n }\n }\n \n /**\n * Обработка прогресса задачи\n * @private\n */\n handleProgress(worker, progressData) {\n const taskId = worker.taskId;\n if (taskId && this.activeTasks.has(taskId)) {\n const task = this.activeTasks.get(taskId);\n if (task.onProgress) {\n task.onProgress({\n processed: progressData.processed,\n total: progressData.total,\n percentage: (progressData.processed / progressData.total) * 100,\n speed: progressData.speed || 0\n });\n }\n }\n }\n \n /**\n * Обработка результата задачи\n * @private\n */\n handleResult(worker, resultData) {\n const taskId = worker.taskId;\n if (taskId && this.activeTasks.has(taskId)) {\n const task = this.activeTasks.get(taskId);\n \n // Освобождение worker\n worker.status = 'idle';\n worker.lastUsed = Date.now();\n worker.taskId = null;\n this.stats.activeWorkers--;\n this.stats.idleWorkers++;\n \n // Завершение задачи\n task.resolve(resultData.data);\n this.activeTasks.delete(taskId);\n this.stats.tasksCompleted++;\n \n // Обработка следующей задачи в очереди\n this.processQueue();\n this.updateStats();\n }\n }\n \n /**\n * Обработка ошибки задачи\n * @private\n */\n handleWorkerTaskError(worker, errorData) {\n const taskId = worker.taskId;\n if (taskId && this.activeTasks.has(taskId)) {\n const task = this.activeTasks.get(taskId);\n \n // Освобождение worker\n worker.status = 'idle';\n worker.lastUsed = Date.now();\n worker.taskId = null;\n this.stats.activeWorkers--;\n this.stats.idleWorkers++;\n \n // Завершение с ошибкой\n task.reject(new Error(errorData.message || 'Ошибка в worker'));\n this.activeTasks.delete(taskId);\n this.stats.tasksFailed++;\n \n // Обработка следующей задачи\n this.processQueue();\n this.updateStats();\n }\n }\n \n /**\n * Обработка ошибок worker\n * @private\n */\n handleWorkerError(worker, error) {\n console.error(`Worker ${worker.id} error:`, error);\n \n // Перезапуск worker\n this.restartWorker(worker);\n }\n \n /**\n * Обработка ошибок сообщений\n * @private\n */\n handleWorkerMessageError(worker, error) {\n console.error(`Worker ${worker.id} message error:`, error);\n }\n \n /**\n * Перезапуск worker\n * @private\n */\n restartWorker(worker) {\n const index = this.workers.indexOf(worker);\n if (index !== -1) {\n // Завершение старого worker\n worker.terminate();\n \n // Удаление из статистики\n if (worker.status === 'active') {\n this.stats.activeWorkers--;\n } else {\n this.stats.idleWorkers--;\n }\n this.stats.totalWorkers--;\n \n // Создание нового worker\n const newWorker = this.createWorker();\n this.workers[index] = newWorker;\n \n // Перезапуск задачи если была активна\n if (worker.taskId && this.activeTasks.has(worker.taskId)) {\n const task = this.activeTasks.get(worker.taskId);\n this.executeTask(newWorker, task);\n }\n }\n }\n \n /**\n * Выполнение задачи на worker\n * @private\n */\n executeTask(worker, task) {\n worker.status = 'active';\n worker.lastUsed = Date.now();\n worker.taskId = task.id;\n \n this.stats.idleWorkers--;\n this.stats.activeWorkers++;\n \n // Отправка задачи в worker\n worker.postMessage({\n type: 'EXECUTE',\n taskId: task.id,\n method: task.method,\n args: task.args,\n options: task.options\n });\n }\n \n /**\n * Обработка очереди задач\n * @private\n */\n processQueue() {\n if (this.taskQueue.length === 0) {\n return;\n }\n \n // Поиск свободного worker\n const idleWorker = this.workers.find(w => w.status === 'idle');\n if (!idleWorker) {\n // Автомасштабирование если включено\n if (this.options.autoScale && this.workers.length < this.options.maxQueueSize) {\n this.createWorker();\n this.processQueue();\n }\n return;\n }\n \n // Получение задачи из очереди\n const task = this.taskQueue.shift();\n this.stats.queueSize--;\n \n // Выполнение задачи\n this.executeTask(idleWorker, task);\n this.updateStats();\n }\n \n /**\n * Обновление статистики\n * @private\n */\n updateStats() {\n this.stats.queueSize = this.taskQueue.length;\n }\n \n /**\n * Выполнение задачи через pool\n * @param {string} method - Метод для вызова в worker\n * @param {Array} args - Аргументы метода\n * @param {Object} [options] - Опции задачи\n * @param {Function} [onProgress] - Callback прогресса\n * @returns {Promise<any>} Результат выполнения\n */\n async exec(method, args = [], options = {}, onProgress = null) {\n return new Promise((resolve, reject) => {\n // Проверка размера очереди\n if (this.taskQueue.length >= this.options.maxQueueSize) {\n reject(new Error('Очередь задач переполнена'));\n return;\n }\n \n // Создание задачи\n const taskId = `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const task = {\n id: taskId,\n method,\n args,\n options,\n onProgress,\n resolve,\n reject,\n createdAt: Date.now()\n };\n \n // Добавление в очередь\n this.taskQueue.push(task);\n this.stats.queueSize++;\n \n // Запуск обработки очереди\n this.processQueue();\n this.updateStats();\n });\n }\n \n /**\n * Получение статистики pool\n * @returns {WorkerPoolStats} Статистика\n */\n getStats() {\n return { ...this.stats };\n }\n \n /**\n * Очистка простаивающих workers\n */\n cleanupIdleWorkers() {\n const now = Date.now();\n const { idleTimeout } = this.options;\n \n for (let i = this.workers.length - 1; i >= 0; i--) {\n const worker = this.workers[i];\n if (worker.status === 'idle' && (now - worker.lastUsed) > idleTimeout) {\n // Сохранение минимального количества workers\n if (this.workers.length > 1) {\n worker.terminate();\n this.workers.splice(i, 1);\n this.stats.totalWorkers--;\n this.stats.idleWorkers--;\n }\n }\n }\n }\n \n /**\n * Завершение всех workers\n */\n terminate() {\n this.workers.forEach(worker => {\n worker.terminate();\n });\n \n this.workers = [];\n this.taskQueue = [];\n this.activeTasks.clear();\n \n // Сброс статистики\n this.stats = {\n totalWorkers: 0,\n activeWorkers: 0,\n idleWorkers: 0,\n queueSize: 0,\n tasksCompleted: 0,\n tasksFailed: 0\n };\n }\n}\n\n/**\n * Создает Worker Pool для обработки CSV\n * @param {WorkerPoolOptions} [options] - Опции pool\n * @returns {WorkerPool} Worker Pool\n */\nexport function createWorkerPool(options = {}) {\n // Используем встроенный worker скрипт\n const workerScript = new URL('./csv-parser.worker.js', import.meta.url).href;\n return new WorkerPool(workerScript, options);\n}\n\n/**\n * Парсит CSV с использованием Web Workers\n * @param {string|File} csvInput - CSV строка или File объект\n * @param {Object} [options] - Опции парсинга\n * @param {Function} [onProgress] - Callback прогресса\n * @returns {Promise<Array<Object>>} JSON данные\n */\nexport async function parseCSVWithWorker(csvInput, options = {}, onProgress = null) {\n // Создание pool если нужно\n if (!parseCSVWithWorker.pool) {\n parseCSVWithWorker.pool = createWorkerPool();\n }\n \n const pool = parseCSVWithWorker.pool;\n \n // Подготовка CSV строки\n let csvString;\n if (csvInput instanceof File) {\n csvString = await readFileAsText(csvInput);\n } else if (typeof csvInput === 'string') {\n csvString = csvInput;\n } else {\n throw new ValidationError('Input must be a CSV string or File object');\n }\n \n // Выполнение через pool\n return pool.exec('parseCSV', [csvString, options], {}, onProgress);\n}\n\n/**\n * Чтение файла как текст\n * @private\n */\nasync function readFileAsText(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => resolve(event.target.result);\n reader.onerror = (error) => reject(error);\n reader.readAsText(file, 'UTF-8');\n });\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n WorkerPool,\n createWorkerPool,\n parseCSVWithWorker\n };\n}\r\n","// Браузерный entry point для jtcsv\n// Экспортирует все функции с поддержкой браузера\n\nimport { jsonToCsv, preprocessData, deepUnwrap } from './json-to-csv-browser.js';\nimport { csvToJson, autoDetectDelimiter } from './csv-to-json-browser.js';\nimport { downloadAsCsv, parseCsvFile } from './browser-functions.js';\nimport { createWorkerPool, parseCSVWithWorker } from './workers/worker-pool.js';\nimport {\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError\n} from './errors-browser.js';\n\n// Основной экспорт\nconst jtcsv = {\n // JSON to CSV функции\n jsonToCsv,\n preprocessData,\n downloadAsCsv,\n deepUnwrap,\n \n // CSV to JSON функции\n csvToJson,\n parseCsvFile,\n autoDetectDelimiter,\n \n // Web Workers функции\n createWorkerPool,\n parseCSVWithWorker,\n \n // Error classes\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError,\n \n // Удобные алиасы\n parse: csvToJson,\n unparse: jsonToCsv,\n \n // Версия\n version: '2.0.0-browser'\n};\n\n// Экспорт для разных сред\nif (typeof module !== 'undefined' && module.exports) {\n // Node.js CommonJS\n module.exports = jtcsv;\n} else if (typeof define === 'function' && define.amd) {\n // AMD\n define([], () => jtcsv);\n} else if (typeof window !== 'undefined') {\n // Браузер (глобальная переменная)\n window.jtcsv = jtcsv;\n}\n\nexport default jtcsv;\nexport {\n jsonToCsv,\n preprocessData,\n downloadAsCsv,\n deepUnwrap,\n csvToJson,\n parseCsvFile,\n autoDetectDelimiter,\n createWorkerPool,\n parseCSVWithWorker,\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError\n};\r\n"],"names":["JTCSVError","Error","constructor","message","code","details","name","captureStackTrace","ValidationError","SecurityError","FileSystemError","originalError","ParsingError","lineNumber","LimitError","limit","actual","ConfigurationError","safeExecute","fn","errorCode","errorDetails","error","enhancedError","errorMessage","String","includes","stack","safeExecuteAsync","module","exports","validateInput","data","options","Array","isArray","delimiter","length","renameMap","maxRecords","undefined","preventCsvInjection","rfc4180Compliant","jsonToCsv","opts","includeHeaders","template","process","env","NODE_ENV","console","warn","toLocaleString","allKeys","Set","forEach","item","Object","keys","key","add","originalKeys","from","headers","map","reverseRenameMap","index","finalHeaders","templateHeaders","extraHeaders","filter","h","escapeValue","value","stringValue","escapedValue","test","needsQuoting","replace","rows","push","join","row","header","originalKey","lineEnding","function","deepUnwrap","depth","maxDepth","visited","has","unwrappedItems","JSON","stringify","preprocessData","processed","prototype","hasOwnProperty","call","validateCsvInput","csv","autoDetect","candidates","maxRows","parseCsvLine","line","fields","currentField","insideQuotes","escapeNext","i","char","isEndOfField","j","parseCsvValue","trim","parseNumbers","parseBooleans","result","startsWith","substring","num","parseFloat","isNaN","lowerValue","toLowerCase","autoDetectDelimiter","lines","split","firstLine","counts","delim","escapedDelim","regex","RegExp","matches","match","maxCount","detectedDelimiter","count","entries","csvToJson","hasHeaders","finalDelimiter","currentLine","startIndex","trimmed","firstLineFields","_","fieldCount","Math","min","downloadAsCsv","filename","window","endsWith","blob","Blob","type","link","document","createElement","url","URL","createObjectURL","setAttribute","style","visibility","body","appendChild","click","setTimeout","removeChild","revokeObjectURL","parseCsvFile","file","File","MAX_SIZE_WARNING","size","toFixed","Promise","resolve","reject","reader","FileReader","onload","event","csvText","target","json","onerror","onabort","readAsText","createCsvBlob","parseCsvBlob","WORKERS_SUPPORTED","Worker","WorkerPool","workerScript","workerCount","maxQueueSize","autoScale","idleTimeout","workers","taskQueue","activeTasks","Map","stats","totalWorkers","activeWorkers","idleWorkers","queueSize","tasksCompleted","tasksFailed","initializeWorkers","createWorker","updateStats","worker","id","status","lastUsed","Date","now","taskId","onmessage","handleWorkerMessage","handleWorkerError","onmessageerror","handleWorkerMessageError","handleProgress","handleResult","handleWorkerTaskError","progressData","task","get","onProgress","total","percentage","speed","resultData","delete","processQueue","errorData","restartWorker","indexOf","terminate","newWorker","executeTask","postMessage","method","args","idleWorker","find","w","shift","exec","random","toString","substr","createdAt","getStats","cleanupIdleWorkers","splice","clear","createWorkerPool","import","href","parseCSVWithWorker","csvInput","pool","csvString","readFileAsText","jtcsv","parse","unparse","version","define","amd"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"jtcsv.cjs.js","sources":["../src/browser/errors-browser.js","../src/browser/json-to-csv-browser.js","../src/browser/csv-to-json-browser.js","../src/browser/streams.js","../src/browser/browser-functions.js","../src/browser/workers/worker-pool.js","../src/browser/index.js"],"sourcesContent":["// Система ошибок для браузерной версии jtcsv\n// Адаптирована для работы без Node.js специфичных API\n\n/**\n * Базовый класс ошибки jtcsv\n */\nexport class JTCSVError extends Error {\n constructor(message, code = 'JTCSV_ERROR', details = {}) {\n super(message);\n this.name = 'JTCSVError';\n this.code = code;\n this.details = details;\n \n // Сохранение stack trace\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, JTCSVError);\n }\n }\n}\n\n/**\n * Ошибка валидации\n */\nexport class ValidationError extends JTCSVError {\n constructor(message, details = {}) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Ошибка безопасности\n */\nexport class SecurityError extends JTCSVError {\n constructor(message, details = {}) {\n super(message, 'SECURITY_ERROR', details);\n this.name = 'SecurityError';\n }\n}\n\n/**\n * Ошибка файловой системы (адаптирована для браузера)\n */\nexport class FileSystemError extends JTCSVError {\n constructor(message, originalError = null, details = {}) {\n super(message, 'FILE_SYSTEM_ERROR', { ...details, originalError });\n this.name = 'FileSystemError';\n \n if (originalError && originalError.code) {\n this.code = originalError.code;\n }\n }\n}\n\n/**\n * Ошибка парсинга\n */\nexport class ParsingError extends JTCSVError {\n constructor(message, lineNumber = null, details = {}) {\n super(message, 'PARSING_ERROR', { ...details, lineNumber });\n this.name = 'ParsingError';\n this.lineNumber = lineNumber;\n }\n}\n\n/**\n * Ошибка превышения лимита\n */\nexport class LimitError extends JTCSVError {\n constructor(message, limit, actual, details = {}) {\n super(message, 'LIMIT_ERROR', { ...details, limit, actual });\n this.name = 'LimitError';\n this.limit = limit;\n this.actual = actual;\n }\n}\n\n/**\n * Ошибка конфигурации\n */\nexport class ConfigurationError extends JTCSVError {\n constructor(message, details = {}) {\n super(message, 'CONFIGURATION_ERROR', details);\n this.name = 'ConfigurationError';\n }\n}\n\nexport const ERROR_CODES = {\n JTCSV_ERROR: 'JTCSV_ERROR',\n VALIDATION_ERROR: 'VALIDATION_ERROR',\n SECURITY_ERROR: 'SECURITY_ERROR',\n FILE_SYSTEM_ERROR: 'FILE_SYSTEM_ERROR',\n PARSING_ERROR: 'PARSING_ERROR',\n LIMIT_ERROR: 'LIMIT_ERROR',\n CONFIGURATION_ERROR: 'CONFIGURATION_ERROR',\n INVALID_INPUT: 'INVALID_INPUT',\n SECURITY_VIOLATION: 'SECURITY_VIOLATION',\n FILE_NOT_FOUND: 'FILE_NOT_FOUND',\n PARSE_FAILED: 'PARSE_FAILED',\n SIZE_LIMIT: 'SIZE_LIMIT',\n INVALID_CONFIG: 'INVALID_CONFIG',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR'\n};\n\n/**\n * Безопасное выполнение функции с обработкой ошибок\n * \n * @param {Function} fn - Функция для выполнения\n * @param {string} errorCode - Код ошибки по умолчанию\n * @param {Object} errorDetails - Детали ошибки\n * @returns {*} Результат выполнения функции\n */\nexport function safeExecute(fn, errorCode = 'UNKNOWN_ERROR', errorDetails = {}) {\n try {\n if (typeof fn === 'function') {\n return fn();\n }\n throw new ValidationError('Function expected');\n } catch (error) {\n // Если ошибка уже является JTCSVError, перебросить её\n if (error instanceof JTCSVError) {\n throw error;\n }\n \n // Определить тип ошибки на основе сообщения или кода\n let enhancedError;\n const errorMessage = error.message || String(error);\n \n if (errorMessage.includes('validation') || errorMessage.includes('Validation')) {\n enhancedError = new ValidationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('security') || errorMessage.includes('Security')) {\n enhancedError = new SecurityError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('parsing') || errorMessage.includes('Parsing')) {\n enhancedError = new ParsingError(errorMessage, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('limit') || errorMessage.includes('Limit')) {\n enhancedError = new LimitError(errorMessage, null, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('configuration') || errorMessage.includes('Configuration')) {\n enhancedError = new ConfigurationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('file') || errorMessage.includes('File')) {\n enhancedError = new FileSystemError(errorMessage, error, errorDetails);\n } else {\n // Общая ошибка\n enhancedError = new JTCSVError(errorMessage, errorCode, { ...errorDetails, originalError: error });\n }\n \n // Сохранить оригинальный stack trace если возможно\n if (error.stack) {\n enhancedError.stack = error.stack;\n }\n \n throw enhancedError;\n }\n}\n\n/**\n * Асинхронная версия safeExecute\n */\nexport async function safeExecuteAsync(fn, errorCode = 'UNKNOWN_ERROR', errorDetails = {}) {\n try {\n if (typeof fn === 'function') {\n return await fn();\n }\n throw new ValidationError('Function expected');\n } catch (error) {\n // Если ошибка уже является JTCSVError, перебросить её\n if (error instanceof JTCSVError) {\n throw error;\n }\n \n // Определить тип ошибки\n let enhancedError;\n const errorMessage = error.message || String(error);\n \n if (errorMessage.includes('validation') || errorMessage.includes('Validation')) {\n enhancedError = new ValidationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('security') || errorMessage.includes('Security')) {\n enhancedError = new SecurityError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('parsing') || errorMessage.includes('Parsing')) {\n enhancedError = new ParsingError(errorMessage, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('limit') || errorMessage.includes('Limit')) {\n enhancedError = new LimitError(errorMessage, null, null, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('configuration') || errorMessage.includes('Configuration')) {\n enhancedError = new ConfigurationError(errorMessage, { ...errorDetails, originalError: error });\n } else if (errorMessage.includes('file') || errorMessage.includes('File')) {\n enhancedError = new FileSystemError(errorMessage, error, errorDetails);\n } else {\n enhancedError = new JTCSVError(errorMessage, errorCode, { ...errorDetails, originalError: error });\n }\n \n if (error.stack) {\n enhancedError.stack = error.stack;\n }\n \n throw enhancedError;\n }\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n JTCSVError,\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError,\n ERROR_CODES,\n safeExecute,\n safeExecuteAsync\n };\n}\n","// Браузерная версия JSON to CSV конвертера\n// Адаптирована для работы в браузере без Node.js API\n\nimport {\n ValidationError,\n ConfigurationError,\n LimitError,\n safeExecute\n} from './errors-browser.js';\n\n/**\n * Валидация входных данных и опций\n * @private\n */\nfunction validateInput(data, options) {\n // Validate data\n if (!Array.isArray(data)) {\n throw new ValidationError('Input data must be an array');\n }\n \n // Validate options\n if (options && typeof options !== 'object') {\n throw new ConfigurationError('Options must be an object');\n }\n \n // Validate delimiter\n if (options?.delimiter && typeof options.delimiter !== 'string') {\n throw new ConfigurationError('Delimiter must be a string');\n }\n \n if (options?.delimiter && options.delimiter.length !== 1) {\n throw new ConfigurationError('Delimiter must be a single character');\n }\n \n // Validate renameMap\n if (options?.renameMap && typeof options.renameMap !== 'object') {\n throw new ConfigurationError('renameMap must be an object');\n }\n \n // Validate maxRecords\n if (options && options.maxRecords !== undefined) {\n if (typeof options.maxRecords !== 'number' || options.maxRecords <= 0) {\n throw new ConfigurationError('maxRecords must be a positive number');\n }\n }\n \n // Validate preventCsvInjection\n if (options?.preventCsvInjection !== undefined && typeof options.preventCsvInjection !== 'boolean') {\n throw new ConfigurationError('preventCsvInjection must be a boolean');\n }\n \n // Validate rfc4180Compliant\n if (options?.rfc4180Compliant !== undefined && typeof options.rfc4180Compliant !== 'boolean') {\n throw new ConfigurationError('rfc4180Compliant must be a boolean');\n }\n \n return true;\n}\n\n/**\n * Конвертирует JSON данные в CSV формат\n * \n * @param {Array<Object>} data - Массив объектов для конвертации в CSV\n * @param {Object} [options] - Опции конфигурации\n * @param {string} [options.delimiter=';'] - CSV разделитель\n * @param {boolean} [options.includeHeaders=true] - Включать ли заголовки\n * @param {Object} [options.renameMap={}] - Маппинг переименования заголовков\n * @param {Object} [options.template={}] - Шаблон для порядка колонок\n * @param {number} [options.maxRecords] - Максимальное количество записей\n * @param {boolean} [options.preventCsvInjection=true] - Защита от CSV инъекций\n * @param {boolean} [options.rfc4180Compliant=true] - Соответствие RFC 4180\n * @returns {string} CSV строка\n */\nexport function jsonToCsv(data, options = {}) {\n return safeExecute(() => {\n // Валидация входных данных\n validateInput(data, options);\n \n const opts = options && typeof options === 'object' ? options : {};\n \n const {\n delimiter = ';',\n includeHeaders = true,\n renameMap = {},\n template = {},\n maxRecords,\n preventCsvInjection = true,\n rfc4180Compliant = true\n } = opts;\n\n // Обработка пустых данных\n if (data.length === 0) {\n return '';\n }\n\n // Предупреждение для больших наборов данных\n if (data.length > 1000000 && !maxRecords && process.env.NODE_ENV !== 'production') {\n console.warn(\n '⚠️ Warning: Processing >1M records in memory may be slow.\\n' +\n '💡 Consider processing data in batches or using Web Workers for large files.\\n' +\n '📊 Current size: ' + data.length.toLocaleString() + ' records'\n );\n }\n\n // Применение ограничения по количеству записей\n if (maxRecords && data.length > maxRecords) {\n throw new LimitError(\n `Data size exceeds maximum limit of ${maxRecords} records`,\n maxRecords,\n data.length\n );\n }\n\n // Получение всех уникальных ключей\n const allKeys = new Set();\n data.forEach((item) => {\n if (!item || typeof item !== 'object') {\n return;\n }\n Object.keys(item).forEach(key => allKeys.add(key));\n });\n \n const originalKeys = Array.from(allKeys);\n \n // Применение rename map для создания заголовков\n const headers = originalKeys.map(key => renameMap[key] || key);\n \n // Создание обратного маппинга\n const reverseRenameMap = {};\n originalKeys.forEach((key, index) => {\n reverseRenameMap[headers[index]] = key;\n });\n\n // Применение порядка из шаблона\n let finalHeaders = headers;\n if (Object.keys(template).length > 0) {\n const templateHeaders = Object.keys(template).map(key => renameMap[key] || key);\n const extraHeaders = headers.filter(h => !templateHeaders.includes(h));\n finalHeaders = [...templateHeaders, ...extraHeaders];\n }\n\n /**\n * Экранирование значения для CSV с защитой от инъекций\n * @private\n */\n const escapeValue = (value) => {\n if (value === null || value === undefined || value === '') {\n return '';\n }\n \n const stringValue = String(value);\n \n // Защита от CSV инъекций\n let escapedValue = stringValue;\n if (preventCsvInjection && /^[=+\\-@]/.test(stringValue)) {\n escapedValue = \"'\" + stringValue;\n }\n \n // Соответствие RFC 4180\n const needsQuoting = rfc4180Compliant \n ? (escapedValue.includes(delimiter) ||\n escapedValue.includes('\"') ||\n escapedValue.includes('\\n') ||\n escapedValue.includes('\\r'))\n : (escapedValue.includes(delimiter) ||\n escapedValue.includes('\"') ||\n escapedValue.includes('\\n') ||\n escapedValue.includes('\\r'));\n \n if (needsQuoting) {\n return `\"${escapedValue.replace(/\"/g, '\"\"')}\"`;\n }\n \n return escapedValue;\n };\n\n // Построение CSV строк\n const rows = [];\n \n // Добавление заголовков\n if (includeHeaders && finalHeaders.length > 0) {\n rows.push(finalHeaders.join(delimiter));\n }\n \n // Добавление данных\n for (const item of data) {\n if (!item || typeof item !== 'object') {\n continue;\n }\n \n const row = finalHeaders.map(header => {\n const originalKey = reverseRenameMap[header] || header;\n const value = item[originalKey];\n return escapeValue(value);\n }).join(delimiter);\n \n rows.push(row);\n }\n \n // Разделители строк согласно RFC 4180\n const lineEnding = rfc4180Compliant ? '\\r\\n' : '\\n';\n return rows.join(lineEnding);\n }, 'PARSE_FAILED', { function: 'jsonToCsv' });\n}\n\n/**\n * Глубокое разворачивание вложенных объектов и массивов\n * \n * @param {*} value - Значение для разворачивания\n * @param {number} [depth=0] - Текущая глубина рекурсии\n * @param {number} [maxDepth=5] - Максимальная глубина рекурсии\n * @param {Set} [visited=new Set()] - Посещенные объекты для обнаружения циклических ссылок\n * @returns {string} Развернутое строковое значение\n */\nexport function deepUnwrap(value, depth = 0, maxDepth = 5, visited = new Set()) {\n // Проверка глубины\n if (depth >= maxDepth) {\n return '[Too Deep]';\n }\n if (value === null || value === undefined) {\n return '';\n }\n \n // Обработка циклических ссылок\n if (typeof value === 'object') {\n if (visited.has(value)) {\n return '[Circular Reference]';\n }\n visited.add(value);\n }\n \n // Обработка массивов\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '';\n }\n const unwrappedItems = value.map(item => \n deepUnwrap(item, depth + 1, maxDepth, visited)\n ).filter(item => item !== '');\n return unwrappedItems.join(', ');\n }\n \n // Обработка объектов\n if (typeof value === 'object') {\n const keys = Object.keys(value);\n if (keys.length === 0) {\n return '';\n }\n \n if (depth + 1 >= maxDepth) {\n return '[Too Deep]';\n }\n \n // Сериализация сложных объектов\n try {\n return JSON.stringify(value);\n } catch (error) {\n if (error.message.includes('circular') || error.message.includes('Converting circular')) {\n return '[Circular Reference]';\n }\n return '[Unstringifiable Object]';\n }\n }\n \n // Примитивные значения\n return String(value);\n}\n\n/**\n * Предобработка JSON данных путем глубокого разворачивания вложенных структур\n * \n * @param {Array<Object>} data - Массив объектов для предобработки\n * @returns {Array<Object>} Предобработанные данные с развернутыми значениями\n */\nexport function preprocessData(data) {\n if (!Array.isArray(data)) {\n return [];\n }\n \n return data.map(item => {\n if (!item || typeof item !== 'object') {\n return {};\n }\n \n const processed = {};\n \n for (const key in item) {\n if (Object.prototype.hasOwnProperty.call(item, key)) {\n const value = item[key];\n if (value && typeof value === 'object') {\n processed[key] = deepUnwrap(value);\n } else {\n processed[key] = value;\n }\n }\n }\n \n return processed;\n });\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n jsonToCsv,\n preprocessData,\n deepUnwrap\n };\n}\r\n","// Браузерная версия CSV to JSON конвертера\n// Адаптирована для работы в браузере без Node.js API\n\nimport {\n ValidationError,\n ParsingError,\n LimitError,\n ConfigurationError,\n safeExecute\n} from './errors-browser.js';\n\n/**\n * Валидация опций парсинга\n * @private\n */\nfunction validateCsvOptions(options) {\n // Validate options\n if (options && typeof options !== 'object') {\n throw new ConfigurationError('Options must be an object');\n }\n \n // Validate delimiter\n if (options?.delimiter && typeof options.delimiter !== 'string') {\n throw new ConfigurationError('Delimiter must be a string');\n }\n \n if (options?.delimiter && options.delimiter.length !== 1) {\n throw new ConfigurationError('Delimiter must be a single character');\n }\n \n // Validate autoDetect\n if (options?.autoDetect !== undefined && typeof options.autoDetect !== 'boolean') {\n throw new ConfigurationError('autoDetect must be a boolean');\n }\n \n // Validate candidates\n if (options?.candidates && !Array.isArray(options.candidates)) {\n throw new ConfigurationError('candidates must be an array');\n }\n \n // Validate maxRows\n if (options?.maxRows !== undefined && (typeof options.maxRows !== 'number' || options.maxRows <= 0)) {\n throw new ConfigurationError('maxRows must be a positive number');\n }\n\n if (options?.warnExtraFields !== undefined && typeof options.warnExtraFields !== 'boolean') {\n throw new ConfigurationError('warnExtraFields must be a boolean');\n }\n \n return true;\n}\n\n/**\n * Валидация CSV ввода и опций\n * @private\n */\nfunction validateCsvInput(csv, options) {\n // Validate CSV input\n if (typeof csv !== 'string') {\n throw new ValidationError('Input must be a CSV string');\n }\n \n return validateCsvOptions(options);\n}\n\n/**\n * Парсинг одной строки CSV с правильным экранированием\n * @private\n */\nfunction parseCsvLine(line, lineNumber, delimiter) {\n const fields = [];\n let currentField = '';\n let insideQuotes = false;\n let escapeNext = false;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n \n if (escapeNext) {\n currentField += char;\n escapeNext = false;\n continue;\n }\n\n if (char === '\\\\') {\n if (i + 1 === line.length) {\n // Обратный слеш в конце строки\n currentField += char;\n } else if (line[i + 1] === '\\\\') {\n // Двойной обратный слеш\n currentField += char;\n i++; // Пропустить следующий слеш\n } else {\n // Экранирование следующего символа\n escapeNext = true;\n }\n continue;\n }\n\n if (char === '\"') {\n if (insideQuotes) {\n if (i + 1 < line.length && line[i + 1] === '\"') {\n // Экранированная кавычка внутри кавычек\n currentField += '\"';\n i++; // Пропустить следующую кавычку\n \n // Проверка конца поля\n let isEndOfField = false;\n let j = i + 1;\n while (j < line.length && (line[j] === ' ' || line[j] === '\\t')) {\n j++;\n }\n if (j === line.length || line[j] === delimiter) {\n isEndOfField = true;\n }\n \n if (isEndOfField) {\n insideQuotes = false;\n }\n } else {\n // Проверка конца поля\n let isEndOfField = false;\n let j = i + 1;\n while (j < line.length && (line[j] === ' ' || line[j] === '\\t')) {\n j++;\n }\n if (j === line.length || line[j] === delimiter) {\n isEndOfField = true;\n }\n \n if (isEndOfField) {\n insideQuotes = false;\n } else {\n currentField += '\"';\n }\n }\n } else {\n // Начало поля в кавычках\n insideQuotes = true;\n }\n continue;\n }\n\n if (!insideQuotes && char === delimiter) {\n // Конец поля\n fields.push(currentField);\n currentField = '';\n continue;\n }\n\n currentField += char;\n }\n\n // Обработка незавершенного экранирования\n if (escapeNext) {\n currentField += '\\\\';\n }\n\n // Добавление последнего поля\n fields.push(currentField);\n\n // Проверка незакрытых кавычек\n if (insideQuotes) {\n throw new ParsingError('Unclosed quotes in CSV', lineNumber);\n }\n\n // Валидация количества полей\n if (fields.length === 0) {\n throw new ParsingError('No fields found', lineNumber);\n }\n\n return fields;\n}\n\n/**\n * Парсинг значения на основе опций\n * @private\n */\nfunction parseCsvValue(value, options) {\n const { trim = true, parseNumbers = false, parseBooleans = false } = options;\n \n let result = value;\n \n if (trim) {\n result = result.trim();\n }\n \n // Удаление защиты формул Excel\n if (result.startsWith(\"'\")) {\n result = result.substring(1);\n }\n \n // Парсинг чисел\n if (parseNumbers && /^-?\\d+(\\.\\d+)?$/.test(result)) {\n const num = parseFloat(result);\n if (!isNaN(num)) {\n return num;\n }\n }\n \n // Парсинг булевых значений\n if (parseBooleans) {\n const lowerValue = result.toLowerCase();\n if (lowerValue === 'true') {\n return true; \n }\n if (lowerValue === 'false') {\n return false; \n }\n }\n \n // Пустые строки как null\n if (result === '') {\n return null;\n }\n \n return result;\n}\n\nfunction isSimpleCsv(csv) {\n return csv.indexOf('\"') === -1 && csv.indexOf('\\\\') === -1;\n}\n\nfunction parseSimpleCsv(csv, delimiter, options) {\n const {\n hasHeaders = true,\n renameMap = {},\n trim = true,\n parseNumbers = false,\n parseBooleans = false,\n maxRows\n } = options;\n\n const result = [];\n let headers = null;\n let fieldStart = 0;\n let currentRow = [];\n let rowHasData = false;\n let rowCount = 0;\n\n const finalizeRow = (fields) => {\n if (fields.length === 1 && fields[0].trim() === '') {\n return;\n }\n\n if (!headers) {\n if (hasHeaders) {\n headers = fields.map(header => {\n const trimmed = trim ? header.trim() : header;\n return renameMap[trimmed] || trimmed;\n });\n return;\n }\n\n headers = fields.map((_, index) => `column${index + 1}`);\n }\n\n rowCount++;\n if (maxRows && rowCount > maxRows) {\n throw new LimitError(\n `CSV size exceeds maximum limit of ${maxRows} rows`,\n maxRows,\n rowCount\n );\n }\n\n const row = {};\n const fieldCount = Math.min(fields.length, headers.length);\n for (let i = 0; i < fieldCount; i++) {\n row[headers[i]] = parseCsvValue(fields[i], { trim, parseNumbers, parseBooleans });\n }\n\n result.push(row);\n };\n\n let i = 0;\n while (i <= csv.length) {\n const char = i < csv.length ? csv[i] : '\\n';\n\n if (char !== '\\r' && char !== '\\n' && char !== ' ' && char !== '\\t') {\n rowHasData = true;\n }\n\n if (char === delimiter || char === '\\n' || char === '\\r' || i === csv.length) {\n const field = csv.slice(fieldStart, i);\n currentRow.push(field);\n\n if (char === '\\n' || char === '\\r' || i === csv.length) {\n if (rowHasData || currentRow.length > 1) {\n finalizeRow(currentRow);\n }\n currentRow = [];\n rowHasData = false;\n }\n\n if (char === '\\r' && csv[i + 1] === '\\n') {\n i++;\n }\n\n fieldStart = i + 1;\n }\n\n i++;\n }\n\n return result;\n}\n\n/**\n * Автоматическое определение разделителя CSV\n * \n * @param {string} csv - CSV строка\n * @param {Array} [candidates=[';', ',', '\\t', '|']] - Кандидаты на разделитель\n * @returns {string} Определенный разделитель\n */\nexport function autoDetectDelimiter(csv, candidates = [';', ',', '\\t', '|']) {\n if (!csv || typeof csv !== 'string') {\n return ';'; // значение по умолчанию\n }\n\n const lines = csv.split('\\n').filter(line => line.trim().length > 0);\n \n if (lines.length === 0) {\n return ';'; // значение по умолчанию\n }\n\n // Использование первой непустой строки для определения\n const firstLine = lines[0];\n \n const counts = {};\n candidates.forEach(delim => {\n const escapedDelim = delim.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regex = new RegExp(escapedDelim, 'g');\n const matches = firstLine.match(regex);\n counts[delim] = matches ? matches.length : 0;\n });\n\n // Поиск разделителя с максимальным количеством\n let maxCount = -1;\n let detectedDelimiter = ';'; // значение по умолчанию\n \n for (const [delim, count] of Object.entries(counts)) {\n if (count > maxCount) {\n maxCount = count;\n detectedDelimiter = delim;\n }\n }\n\n // Если разделитель не найден или ничья\n if (maxCount === 0) {\n return ';'; // значение по умолчанию\n }\n\n return detectedDelimiter;\n}\n\n/**\n * Конвертирует CSV строку в JSON массив\n * \n * @param {string} csv - CSV строка для конвертации\n * @param {Object} [options] - Опции конфигурации\n * @param {string} [options.delimiter] - CSV разделитель (по умолчанию: автоопределение)\n * @param {boolean} [options.autoDetect=true] - Автоопределение разделителя\n * @param {Array} [options.candidates=[';', ',', '\\t', '|']] - Кандидаты для автоопределения\n * @param {boolean} [options.hasHeaders=true] - Есть ли заголовки в CSV\n * @param {Object} [options.renameMap={}] - Маппинг переименования заголовков\n * @param {boolean} [options.trim=true] - Обрезать пробелы\n * @param {boolean} [options.parseNumbers=false] - Парсить числовые значения\n * @param {boolean} [options.parseBooleans=false] - Парсить булевы значения\n * @param {number} [options.maxRows] - Максимальное количество строк\n * @returns {Array<Object>} JSON массив\n */\nexport function csvToJson(csv, options = {}) {\n return safeExecute(() => {\n // Валидация ввода\n validateCsvInput(csv, options);\n \n const opts = options && typeof options === 'object' ? options : {};\n \n const {\n delimiter,\n autoDetect = true,\n candidates = [';', ',', '\\t', '|'],\n hasHeaders = true,\n renameMap = {},\n trim = true,\n parseNumbers = false,\n parseBooleans = false,\n maxRows,\n warnExtraFields = true\n } = opts;\n\n // Определение разделителя\n let finalDelimiter = delimiter;\n if (!finalDelimiter && autoDetect) {\n finalDelimiter = autoDetectDelimiter(csv, candidates);\n }\n finalDelimiter = finalDelimiter || ';'; // fallback\n\n // Обработка пустого CSV\n if (csv.trim() === '') {\n return [];\n }\n\n if (isSimpleCsv(csv)) {\n return parseSimpleCsv(csv, finalDelimiter, {\n hasHeaders,\n renameMap,\n trim,\n parseNumbers,\n parseBooleans,\n maxRows\n });\n }\n\n // Парсинг CSV с обработкой кавычек и переносов строк\n const lines = [];\n let currentLine = '';\n let insideQuotes = false;\n \n for (let i = 0; i < csv.length; i++) {\n const char = csv[i];\n \n if (char === '\"') {\n if (insideQuotes && i + 1 < csv.length && csv[i + 1] === '\"') {\n // Экранированная кавычка внутри кавычек\n currentLine += '\"';\n i++; // Пропустить следующую кавычку\n } else {\n // Переключение режима кавычек\n insideQuotes = !insideQuotes;\n }\n currentLine += char;\n continue;\n }\n \n if (char === '\\n' && !insideQuotes) {\n // Конец строки (вне кавычек)\n lines.push(currentLine);\n currentLine = '';\n continue;\n }\n \n if (char === '\\r') {\n // Игнорировать carriage return\n continue;\n }\n \n currentLine += char;\n }\n \n // Добавление последней строки\n if (currentLine !== '' || insideQuotes) {\n lines.push(currentLine);\n }\n \n if (lines.length === 0) {\n return [];\n }\n\n // Предупреждение для больших наборов данных\n if (lines.length > 1000000 && !maxRows && process.env.NODE_ENV !== 'production') {\n console.warn(\n '⚠️ Warning: Processing >1M records in memory may be slow.\\n' +\n '💡 Consider using Web Workers for better performance with large files.\\n' +\n '📊 Current size: ' + lines.length.toLocaleString() + ' rows'\n );\n }\n\n // Применение ограничения по строкам\n if (maxRows && lines.length > maxRows) {\n throw new LimitError(\n `CSV size exceeds maximum limit of ${maxRows} rows`,\n maxRows,\n lines.length\n );\n }\n\n let headers = [];\n let startIndex = 0;\n \n // Парсинг заголовков если есть\n if (hasHeaders && lines.length > 0) {\n try {\n headers = parseCsvLine(lines[0], 1, finalDelimiter).map(header => {\n const trimmed = trim ? header.trim() : header;\n return renameMap[trimmed] || trimmed;\n });\n startIndex = 1;\n } catch (error) {\n if (error instanceof ParsingError) {\n throw new ParsingError(`Failed to parse headers: ${error.message}`, 1);\n }\n throw error;\n }\n } else {\n // Генерация числовых заголовков из первой строки\n try {\n const firstLineFields = parseCsvLine(lines[0], 1, finalDelimiter);\n headers = firstLineFields.map((_, index) => `column${index + 1}`);\n } catch (error) {\n if (error instanceof ParsingError) {\n throw new ParsingError(`Failed to parse first line: ${error.message}`, 1);\n }\n throw error;\n }\n }\n\n // Парсинг строк данных\n const result = [];\n \n for (let i = startIndex; i < lines.length; i++) {\n const line = lines[i];\n \n // Пропуск пустых строк\n if (line.trim() === '') {\n continue;\n }\n \n try {\n const fields = parseCsvLine(line, i + 1, finalDelimiter);\n \n // Обработка несоответствия количества полей\n const row = {};\n const fieldCount = Math.min(fields.length, headers.length);\n \n for (let j = 0; j < fieldCount; j++) {\n row[headers[j]] = parseCsvValue(fields[j], { trim, parseNumbers, parseBooleans });\n }\n \n // Предупреждение о лишних полях\n const isDev = typeof process !== 'undefined' && process.env && process.env.NODE_ENV === 'development';\n if (fields.length > headers.length && warnExtraFields && isDev) {\n console.warn(`[jtcsv] Line ${i + 1}: ${fields.length - headers.length} extra fields ignored`);\n }\n \n result.push(row);\n } catch (error) {\n if (error instanceof ParsingError) {\n throw new ParsingError(`Line ${i + 1}: ${error.message}`, i + 1);\n }\n throw error;\n }\n }\n\n return result;\n }, 'PARSE_FAILED', { function: 'csvToJson' });\n}\n\nexport async function* csvToJsonIterator(input, options = {}) {\n const opts = options && typeof options === 'object' ? options : {};\n validateCsvOptions(opts);\n\n if (typeof input === 'string') {\n const rows = csvToJson(input, options);\n for (const row of rows) {\n yield row;\n }\n return;\n }\n\n const {\n delimiter,\n autoDetect = true,\n candidates = [';', ',', '\\t', '|'],\n hasHeaders = true,\n renameMap = {},\n trim = true,\n parseNumbers = false,\n parseBooleans = false,\n maxRows\n } = opts;\n\n const stream = (input instanceof Blob && input.stream) ? input.stream() : input;\n if (!stream || typeof stream.getReader !== 'function') {\n throw new ValidationError('Input must be a CSV string, Blob/File, or ReadableStream');\n }\n\n const reader = stream.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n let insideQuotes = false;\n let headers = null;\n let rowCount = 0;\n let lineNumber = 0;\n let finalDelimiter = delimiter;\n let delimiterResolved = Boolean(finalDelimiter);\n\n const processFields = (fields) => {\n if (fields.length === 1 && fields[0].trim() === '') {\n return null;\n }\n\n rowCount++;\n if (maxRows && rowCount > maxRows) {\n throw new LimitError(\n `CSV size exceeds maximum limit of ${maxRows} rows`,\n maxRows,\n rowCount\n );\n }\n\n const row = {};\n const fieldCount = Math.min(fields.length, headers.length);\n for (let j = 0; j < fieldCount; j++) {\n row[headers[j]] = parseCsvValue(fields[j], { trim, parseNumbers, parseBooleans });\n }\n return row;\n };\n\n const processLine = (line) => {\n lineNumber++;\n let cleanLine = line;\n if (cleanLine.endsWith('\\r')) {\n cleanLine = cleanLine.slice(0, -1);\n }\n\n if (!delimiterResolved) {\n if (!finalDelimiter && autoDetect) {\n finalDelimiter = autoDetectDelimiter(cleanLine, candidates);\n }\n finalDelimiter = finalDelimiter || ';';\n delimiterResolved = true;\n }\n\n if (cleanLine.trim() === '') {\n return null;\n }\n\n if (!headers) {\n if (hasHeaders) {\n headers = parseCsvLine(cleanLine, lineNumber, finalDelimiter).map(header => {\n const trimmed = trim ? header.trim() : header;\n return renameMap[trimmed] || trimmed;\n });\n return null;\n }\n\n const fields = parseCsvLine(cleanLine, lineNumber, finalDelimiter);\n headers = fields.map((_, index) => `column${index + 1}`);\n return processFields(fields);\n }\n\n const fields = parseCsvLine(cleanLine, lineNumber, finalDelimiter);\n return processFields(fields);\n };\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n let start = 0;\n for (let i = 0; i < buffer.length; i++) {\n const char = buffer[i];\n if (char === '\"') {\n if (insideQuotes && buffer[i + 1] === '\"') {\n i++;\n continue;\n }\n insideQuotes = !insideQuotes;\n continue;\n }\n\n if (char === '\\n' && !insideQuotes) {\n const line = buffer.slice(start, i);\n start = i + 1;\n const row = processLine(line);\n if (row) {\n yield row;\n }\n }\n }\n\n buffer = buffer.slice(start);\n }\n\n if (buffer.length > 0) {\n const row = processLine(buffer);\n if (row) {\n yield row;\n }\n }\n\n if (insideQuotes) {\n throw new ParsingError('Unclosed quotes in CSV', lineNumber);\n }\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n csvToJson,\n autoDetectDelimiter,\n csvToJsonIterator\n };\n}\n","import {\n ValidationError,\n ConfigurationError,\n LimitError\n} from './errors-browser.js';\nimport { csvToJsonIterator } from './csv-to-json-browser.js';\n\nconst DEFAULT_MAX_CHUNK_SIZE = 64 * 1024;\n\nfunction isReadableStream(value) {\n return value && typeof value.getReader === 'function';\n}\n\nfunction isAsyncIterable(value) {\n return value && typeof value[Symbol.asyncIterator] === 'function';\n}\n\nfunction isIterable(value) {\n return value && typeof value[Symbol.iterator] === 'function';\n}\n\nfunction createReadableStreamFromIterator(iterator) {\n return new ReadableStream({\n async pull(controller) {\n try {\n const { value, done } = await iterator.next();\n if (done) {\n controller.close();\n return;\n }\n controller.enqueue(value);\n } catch (error) {\n controller.error(error);\n }\n },\n cancel() {\n if (iterator.return) {\n iterator.return();\n }\n }\n });\n}\n\nfunction detectInputFormat(input, options) {\n if (options && options.inputFormat) {\n return options.inputFormat;\n }\n\n if (typeof input === 'string') {\n const trimmed = input.trim();\n if (trimmed.startsWith('[')) {\n return 'json-array';\n }\n if (trimmed.includes('\\n')) {\n return 'ndjson';\n }\n return 'json-array';\n }\n\n if (input instanceof Blob || isReadableStream(input)) {\n return 'ndjson';\n }\n\n return 'json-array';\n}\n\nasync function* parseNdjsonText(text) {\n const lines = text.split(/\\r?\\n/);\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n yield JSON.parse(trimmed);\n }\n}\n\nasync function* parseNdjsonStream(stream) {\n const reader = stream.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(/\\r?\\n/);\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) {\n continue;\n }\n yield JSON.parse(trimmed);\n }\n }\n\n if (buffer.trim()) {\n yield JSON.parse(buffer.trim());\n }\n}\n\nasync function* normalizeJsonInput(input, options = {}) {\n const format = detectInputFormat(input, options);\n\n if (Array.isArray(input)) {\n for (const item of input) {\n yield item;\n }\n return;\n }\n\n if (isAsyncIterable(input)) {\n for await (const item of input) {\n yield item;\n }\n return;\n }\n\n if (isIterable(input)) {\n for (const item of input) {\n yield item;\n }\n return;\n }\n\n if (typeof input === 'string') {\n if (format === 'ndjson') {\n yield* parseNdjsonText(input);\n return;\n }\n\n const parsed = JSON.parse(input);\n if (Array.isArray(parsed)) {\n for (const item of parsed) {\n yield item;\n }\n return;\n }\n yield parsed;\n return;\n }\n\n if (input instanceof Blob) {\n if (format === 'ndjson') {\n yield* parseNdjsonStream(input.stream());\n return;\n }\n\n const text = await input.text();\n const parsed = JSON.parse(text);\n if (Array.isArray(parsed)) {\n for (const item of parsed) {\n yield item;\n }\n return;\n }\n yield parsed;\n return;\n }\n\n if (isReadableStream(input)) {\n if (format !== 'ndjson') {\n throw new ValidationError('ReadableStream input requires inputFormat=\"ndjson\"');\n }\n yield* parseNdjsonStream(input);\n return;\n }\n\n throw new ValidationError('Input must be an array, iterable, string, Blob, or ReadableStream');\n}\n\nfunction validateStreamOptions(options) {\n if (options && typeof options !== 'object') {\n throw new ConfigurationError('Options must be an object');\n }\n\n if (options?.delimiter && typeof options.delimiter !== 'string') {\n throw new ConfigurationError('Delimiter must be a string');\n }\n\n if (options?.delimiter && options.delimiter.length !== 1) {\n throw new ConfigurationError('Delimiter must be a single character');\n }\n\n if (options?.renameMap && typeof options.renameMap !== 'object') {\n throw new ConfigurationError('renameMap must be an object');\n }\n\n if (options?.maxRecords !== undefined) {\n if (typeof options.maxRecords !== 'number' || options.maxRecords <= 0) {\n throw new ConfigurationError('maxRecords must be a positive number');\n }\n }\n}\n\nfunction escapeCsvValue(value, options) {\n const {\n delimiter,\n preventCsvInjection = true,\n rfc4180Compliant = true\n } = options;\n\n if (value === null || value === undefined || value === '') {\n return '';\n }\n\n const stringValue = String(value);\n let escapedValue = stringValue;\n if (preventCsvInjection && /^[=+\\-@]/.test(stringValue)) {\n escapedValue = \"'\" + stringValue;\n }\n\n const needsQuoting = rfc4180Compliant\n ? (escapedValue.includes(delimiter) ||\n escapedValue.includes('\"') ||\n escapedValue.includes('\\n') ||\n escapedValue.includes('\\r'))\n : (escapedValue.includes(delimiter) ||\n escapedValue.includes('\"') ||\n escapedValue.includes('\\n') ||\n escapedValue.includes('\\r'));\n\n if (needsQuoting) {\n return `\"${escapedValue.replace(/\"/g, '\"\"')}\"`;\n }\n\n return escapedValue;\n}\n\nfunction buildHeaderState(keys, options) {\n const renameMap = options.renameMap || {};\n const template = options.template || {};\n const originalKeys = Array.isArray(options.headers) ? options.headers : keys;\n const headers = originalKeys.map((key) => renameMap[key] || key);\n\n const reverseRenameMap = {};\n originalKeys.forEach((key, index) => {\n reverseRenameMap[headers[index]] = key;\n });\n\n let finalHeaders = headers;\n if (Object.keys(template).length > 0) {\n const templateHeaders = Object.keys(template).map(key => renameMap[key] || key);\n const extraHeaders = headers.filter(h => !templateHeaders.includes(h));\n finalHeaders = [...templateHeaders, ...extraHeaders];\n }\n\n return {\n headers: finalHeaders,\n reverseRenameMap\n };\n}\n\nasync function* jsonToCsvChunkIterator(input, options = {}) {\n validateStreamOptions(options);\n\n const opts = options && typeof options === 'object' ? options : {};\n const {\n delimiter = ';',\n includeHeaders = true,\n maxRecords,\n maxChunkSize = DEFAULT_MAX_CHUNK_SIZE,\n headerMode\n } = opts;\n\n let headerState = null;\n let buffer = '';\n let recordCount = 0;\n const lineEnding = opts.rfc4180Compliant === false ? '\\n' : '\\r\\n';\n\n if (Array.isArray(input) && !opts.headers && (!headerMode || headerMode === 'all')) {\n const allKeys = new Set();\n for (const item of input) {\n if (!item || typeof item !== 'object') {\n continue;\n }\n Object.keys(item).forEach((key) => allKeys.add(key));\n }\n headerState = buildHeaderState(Array.from(allKeys), opts);\n if (includeHeaders && headerState.headers.length > 0) {\n buffer += headerState.headers.join(delimiter) + lineEnding;\n }\n } else if (Array.isArray(opts.headers)) {\n headerState = buildHeaderState(opts.headers, opts);\n if (includeHeaders && headerState.headers.length > 0) {\n buffer += headerState.headers.join(delimiter) + lineEnding;\n }\n }\n\n for await (const item of normalizeJsonInput(input, opts)) {\n if (!item || typeof item !== 'object') {\n continue;\n }\n\n if (!headerState) {\n headerState = buildHeaderState(Object.keys(item), opts);\n if (includeHeaders && headerState.headers.length > 0) {\n buffer += headerState.headers.join(delimiter) + lineEnding;\n }\n }\n\n recordCount += 1;\n if (maxRecords && recordCount > maxRecords) {\n throw new LimitError(\n `Data size exceeds maximum limit of ${maxRecords} records`,\n maxRecords,\n recordCount\n );\n }\n\n const row = headerState.headers.map((header) => {\n const originalKey = headerState.reverseRenameMap[header] || header;\n return escapeCsvValue(item[originalKey], {\n delimiter,\n preventCsvInjection: opts.preventCsvInjection !== false,\n rfc4180Compliant: opts.rfc4180Compliant !== false\n });\n }).join(delimiter);\n\n buffer += row + lineEnding;\n\n if (buffer.length >= maxChunkSize) {\n yield buffer;\n buffer = '';\n }\n }\n\n if (buffer.length > 0) {\n yield buffer;\n }\n}\n\nasync function* jsonToNdjsonChunkIterator(input, options = {}) {\n validateStreamOptions(options);\n for await (const item of normalizeJsonInput(input, options)) {\n if (item === undefined) {\n continue;\n }\n yield JSON.stringify(item) + '\\n';\n }\n}\n\nasync function* csvToJsonChunkIterator(input, options = {}) {\n const outputFormat = options.outputFormat || 'ndjson';\n const asArray = outputFormat === 'json-array' || outputFormat === 'array' || outputFormat === 'json';\n let first = true;\n\n if (asArray) {\n yield '[';\n }\n\n for await (const row of csvToJsonIterator(input, options)) {\n const payload = JSON.stringify(row);\n if (asArray) {\n yield (first ? '' : ',') + payload;\n } else {\n yield payload + '\\n';\n }\n first = false;\n }\n\n if (asArray) {\n yield ']';\n }\n}\n\nexport function jsonToCsvStream(input, options = {}) {\n const iterator = jsonToCsvChunkIterator(input, options);\n return createReadableStreamFromIterator(iterator);\n}\n\nexport function jsonToNdjsonStream(input, options = {}) {\n const iterator = jsonToNdjsonChunkIterator(input, options);\n return createReadableStreamFromIterator(iterator);\n}\n\nexport function csvToJsonStream(input, options = {}) {\n const iterator = csvToJsonChunkIterator(input, options);\n return createReadableStreamFromIterator(iterator);\n}\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n jsonToCsvStream,\n jsonToNdjsonStream,\n csvToJsonStream\n };\n}\n","// Браузерные специфичные функции для jtcsv\n// Функции, которые работают только в браузере\n\nimport { jsonToCsv } from './json-to-csv-browser.js';\nimport { csvToJson, csvToJsonIterator } from './csv-to-json-browser.js';\nimport { csvToJsonStream, jsonToCsvStream, jsonToNdjsonStream } from './streams.js';\nimport { ValidationError } from './errors-browser.js';\n\n/**\n * Скачивает JSON данные как CSV файл\n * \n * @param {Array<Object>} data - Массив объектов для конвертации\n * @param {string} [filename='data.csv'] - Имя файла для скачивания\n * @param {Object} [options] - Опции для jsonToCsv\n * @returns {void}\n * \n * @example\n * const data = [\n * { id: 1, name: 'John' },\n * { id: 2, name: 'Jane' }\n * ];\n * downloadAsCsv(data, 'users.csv', { delimiter: ',' });\n */\nexport function downloadAsCsv(data, filename = 'data.csv', options = {}) {\n // Проверка что мы в браузере\n if (typeof window === 'undefined') {\n throw new ValidationError('downloadAsCsv() работает только в браузере. Используйте saveAsCsv() в Node.js');\n }\n \n // Валидация имени файла\n if (typeof filename !== 'string' || filename.trim() === '') {\n throw new ValidationError('Filename must be a non-empty string');\n }\n \n // Добавление расширения .csv если его нет\n if (!filename.toLowerCase().endsWith('.csv')) {\n filename += '.csv';\n }\n \n // Конвертация в CSV\n const csv = jsonToCsv(data, options);\n \n // Создание Blob\n const blob = new Blob([csv], { \n type: 'text/csv;charset=utf-8;' \n });\n \n // Создание ссылки для скачивания\n const link = document.createElement('a');\n \n // Создание URL для Blob\n const url = URL.createObjectURL(blob);\n \n // Настройка ссылки\n link.setAttribute('href', url);\n link.setAttribute('download', filename);\n link.style.visibility = 'hidden';\n \n // Добавление в DOM и клик\n document.body.appendChild(link);\n link.click();\n \n // Очистка\n setTimeout(() => {\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }, 100);\n}\n\n/**\n * Парсит CSV файл из input[type=\"file\"] в JSON\n * \n * @param {File} file - File объект из input\n * @param {Object} [options] - Опции для csvToJson\n * @returns {Promise<Array<Object>>} Promise с JSON данными\n * \n * @example\n * // HTML: <input type=\"file\" id=\"csvFile\" accept=\".csv\">\n * const fileInput = document.getElementById('csvFile');\n * const json = await parseCsvFile(fileInput.files[0], { delimiter: ',' });\n */\nexport async function parseCsvFile(file, options = {}) {\n // Проверка что мы в браузере\n if (typeof window === 'undefined') {\n throw new ValidationError('parseCsvFile() работает только в браузере. Используйте readCsvAsJson() в Node.js');\n }\n \n // Валидация файла\n if (!(file instanceof File)) {\n throw new ValidationError('Input must be a File object');\n }\n \n // Проверка расширения файла\n if (!file.name.toLowerCase().endsWith('.csv')) {\n throw new ValidationError('File must have .csv extension');\n }\n \n // Проверка размера файла (предупреждение для больших файлов)\n const MAX_SIZE_WARNING = 50 * 1024 * 1024; // 50MB\n if (file.size > MAX_SIZE_WARNING && process.env.NODE_ENV !== 'production') {\n console.warn(\n `⚠️ Warning: Processing large file (${(file.size / 1024 / 1024).toFixed(2)}MB).\\n` +\n '💡 Consider using Web Workers for better performance.\\n' +\n '🔧 Tip: Use parseCSVWithWorker() for files > 10MB.'\n );\n }\n \n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n \n reader.onload = function (event) {\n try {\n const csvText = event.target.result;\n const json = csvToJson(csvText, options);\n resolve(json);\n } catch (error) {\n reject(error);\n }\n };\n \n reader.onerror = function () {\n reject(new ValidationError('Ошибка чтения файла'));\n };\n \n reader.onabort = function () {\n reject(new ValidationError('Чтение файла прервано'));\n };\n \n // Чтение как текст\n reader.readAsText(file, 'UTF-8');\n });\n}\n\n/**\n * Stream CSV file as async iterator without full buffering.\n *\n * @param {File} file - File selected from input\n * @param {Object} [options] - csvToJson options\n * @returns {AsyncGenerator<Object>} Async iterator of rows\n */\nexport function parseCsvFileStream(file, options = {}) {\n if (typeof window === 'undefined') {\n throw new ValidationError('parseCsvFileStream() is browser-only. Use readCsvAsJson() in Node.js');\n }\n\n if (!(file instanceof File)) {\n throw new ValidationError('Input must be a File object');\n }\n\n if (!file.name.toLowerCase().endsWith('.csv')) {\n throw new ValidationError('File must have .csv extension');\n }\n\n return csvToJsonIterator(file, options);\n}\n\n/**\n * Создает CSV файл из JSON данных (альтернатива downloadAsCsv)\n * Возвращает Blob вместо автоматического скачивания\n * \n * @param {Array<Object>} data - Массив объектов\n * @param {Object} [options] - Опции для jsonToCsv\n * @returns {Blob} CSV Blob\n */\nexport function createCsvBlob(data, options = {}) {\n const csv = jsonToCsv(data, options);\n return new Blob([csv], { \n type: 'text/csv;charset=utf-8;' \n });\n}\n\n/**\n * Парсит CSV строку из Blob\n * \n * @param {Blob} blob - CSV Blob\n * @param {Object} [options] - Опции для csvToJson\n * @returns {Promise<Array<Object>>} Promise с JSON данными\n */\nexport async function parseCsvBlob(blob, options = {}) {\n if (!(blob instanceof Blob)) {\n throw new ValidationError('Input must be a Blob object');\n }\n \n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n \n reader.onload = function (event) {\n try {\n const csvText = event.target.result;\n const json = csvToJson(csvText, options);\n resolve(json);\n } catch (error) {\n reject(error);\n }\n };\n \n reader.onerror = function () {\n reject(new ValidationError('Ошибка чтения Blob'));\n };\n \n reader.readAsText(blob, 'UTF-8');\n });\n}\n\n// Экспорт для Node.js совместимости\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = {\n downloadAsCsv,\n parseCsvFile,\n parseCsvFileStream,\n createCsvBlob,\n parseCsvBlob,\n jsonToCsvStream,\n jsonToNdjsonStream,\n csvToJsonStream\n };\n}\n\nexport { jsonToCsvStream, jsonToNdjsonStream, csvToJsonStream };\n","// Worker Pool для параллельной обработки CSV\r\n// Использует Comlink для простой коммуникации с Web Workers\r\n\r\nimport { ValidationError, ConfigurationError } from '../errors-browser.js';\r\n\r\n// Проверка поддержки Web Workers\r\nconst WORKERS_SUPPORTED = typeof Worker !== 'undefined';\r\n\r\nfunction isTransferableBuffer(value) {\n if (!(value instanceof ArrayBuffer)) {\n return false;\n }\n if (typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer) {\n return false;\n }\n return true;\n}\n\r\nfunction collectTransferables(args) {\r\n const transferables = [];\r\n\r\n const collectFromValue = (value) => {\r\n if (!value) {\r\n return;\r\n }\r\n if (isTransferableBuffer(value)) {\r\n transferables.push(value);\r\n return;\r\n }\r\n if (ArrayBuffer.isView(value) && isTransferableBuffer(value.buffer)) {\r\n transferables.push(value.buffer);\r\n return;\r\n }\r\n if (Array.isArray(value)) {\r\n value.forEach(collectFromValue);\r\n }\r\n };\r\n\r\n args.forEach(collectFromValue);\r\n return transferables.length ? transferables : null;\r\n}\r\n\r\n/**\r\n * Опции для Worker Pool\r\n * @typedef {Object} WorkerPoolOptions\r\n * @property {number} [workerCount=4] - Количество workers в pool\r\n * @property {number} [maxQueueSize=100] - Максимальный размер очереди задач\r\n * @property {boolean} [autoScale=true] - Автоматическое масштабирование pool\r\n * @property {number} [idleTimeout=60000] - Таймаут простоя worker (мс)\r\n */\r\n\r\n/**\r\n * Статистика Worker Pool\r\n * @typedef {Object} WorkerPoolStats\r\n * @property {number} totalWorkers - Всего workers\r\n * @property {number} activeWorkers - Активные workers\r\n * @property {number} idleWorkers - Простаивающие workers\r\n * @property {number} queueSize - Размер очереди\r\n * @property {number} tasksCompleted - Завершенные задачи\r\n * @property {number} tasksFailed - Неудачные задачи\r\n */\r\n\r\n/**\r\n * Прогресс обработки задачи\r\n * @typedef {Object} TaskProgress\r\n * @property {number} processed - Обработано элементов\r\n * @property {number} total - Всего элементов\r\n * @property {number} percentage - Процент выполнения\r\n * @property {number} speed - Скорость обработки (элементов/сек)\r\n */\r\n\r\n/**\r\n * Worker Pool для параллельной обработки CSV\r\n */\r\nexport class WorkerPool {\r\n /**\r\n * Создает новый Worker Pool\r\n * @param {string} workerScript - URL скрипта worker\r\n * @param {WorkerPoolOptions} [options] - Опции pool\r\n */\r\n constructor(workerScript, options = {}) {\r\n if (!WORKERS_SUPPORTED) {\r\n throw new ValidationError('Web Workers не поддерживаются в этом браузере');\r\n }\r\n \r\n this.workerScript = workerScript;\r\n this.options = {\r\n workerCount: 4,\r\n maxQueueSize: 100,\r\n autoScale: true,\r\n idleTimeout: 60000,\r\n ...options\r\n };\r\n \r\n this.workers = [];\r\n this.taskQueue = [];\r\n this.activeTasks = new Map();\r\n this.stats = {\r\n totalWorkers: 0,\r\n activeWorkers: 0,\r\n idleWorkers: 0,\r\n queueSize: 0,\r\n tasksCompleted: 0,\r\n tasksFailed: 0\r\n };\r\n \r\n this.initializeWorkers();\r\n }\r\n \r\n /**\r\n * Инициализация workers\r\n * @private\r\n */\r\n initializeWorkers() {\r\n const { workerCount } = this.options;\r\n \r\n for (let i = 0; i < workerCount; i++) {\r\n this.createWorker();\r\n }\r\n \r\n this.updateStats();\r\n }\r\n \r\n /**\r\n * Создает нового worker\r\n * @private\r\n */\r\n createWorker() {\r\n try {\r\n const worker = new Worker(this.workerScript, { type: 'module' });\r\n \r\n worker.id = `worker-${this.workers.length}`;\r\n worker.status = 'idle';\r\n worker.lastUsed = Date.now();\r\n worker.taskId = null;\r\n \r\n // Обработчики событий\r\n worker.onmessage = (event) => this.handleWorkerMessage(worker, event);\r\n worker.onerror = (error) => this.handleWorkerError(worker, error);\r\n worker.onmessageerror = (error) => this.handleWorkerMessageError(worker, error);\r\n \r\n this.workers.push(worker);\r\n this.stats.totalWorkers++;\r\n this.stats.idleWorkers++;\r\n \r\n return worker;\r\n } catch (error) {\r\n throw new ConfigurationError(`Не удалось создать worker: ${error.message}`);\r\n }\r\n }\r\n \r\n /**\r\n * Обработка сообщений от worker\r\n * @private\r\n */\r\n handleWorkerMessage(worker, event) {\r\n const { data } = event;\r\n \r\n if (data.type === 'PROGRESS') {\r\n this.handleProgress(worker, data);\r\n } else if (data.type === 'RESULT') {\r\n this.handleResult(worker, data);\r\n } else if (data.type === 'ERROR') {\r\n this.handleWorkerTaskError(worker, data);\r\n }\r\n }\r\n \r\n /**\r\n * Обработка прогресса задачи\r\n * @private\r\n */\r\n handleProgress(worker, progressData) {\r\n const taskId = worker.taskId;\r\n if (taskId && this.activeTasks.has(taskId)) {\r\n const task = this.activeTasks.get(taskId);\r\n if (task.onProgress) {\r\n task.onProgress({\r\n processed: progressData.processed,\r\n total: progressData.total,\r\n percentage: (progressData.processed / progressData.total) * 100,\r\n speed: progressData.speed || 0\r\n });\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Обработка результата задачи\r\n * @private\r\n */\r\n handleResult(worker, resultData) {\r\n const taskId = worker.taskId;\r\n if (taskId && this.activeTasks.has(taskId)) {\r\n const task = this.activeTasks.get(taskId);\r\n \r\n // Освобождение worker\r\n worker.status = 'idle';\r\n worker.lastUsed = Date.now();\r\n worker.taskId = null;\r\n this.stats.activeWorkers--;\r\n this.stats.idleWorkers++;\r\n \r\n // Завершение задачи\r\n task.resolve(resultData.data);\r\n this.activeTasks.delete(taskId);\r\n this.stats.tasksCompleted++;\r\n \r\n // Обработка следующей задачи в очереди\r\n this.processQueue();\r\n this.updateStats();\r\n }\r\n }\r\n \r\n /**\r\n * Обработка ошибки задачи\r\n * @private\r\n */\r\n handleWorkerTaskError(worker, errorData) {\r\n const taskId = worker.taskId;\r\n if (taskId && this.activeTasks.has(taskId)) {\r\n const task = this.activeTasks.get(taskId);\r\n \r\n // Освобождение worker\r\n worker.status = 'idle';\r\n worker.lastUsed = Date.now();\r\n worker.taskId = null;\r\n this.stats.activeWorkers--;\r\n this.stats.idleWorkers++;\r\n \r\n // Завершение с ошибкой\r\n const workerError = new Error(errorData.message || 'Ошибка в worker');\r\n if (errorData.code) {\r\n workerError.code = errorData.code;\r\n }\r\n if (errorData.details) {\r\n workerError.details = errorData.details;\r\n }\r\n task.reject(workerError);\r\n this.activeTasks.delete(taskId);\r\n this.stats.tasksFailed++;\r\n \r\n // Обработка следующей задачи\r\n this.processQueue();\r\n this.updateStats();\r\n }\r\n }\r\n \r\n /**\r\n * Обработка ошибок worker\r\n * @private\r\n */\r\n handleWorkerError(worker, error) {\r\n console.error(`Worker ${worker.id} error:`, error);\r\n \r\n // Перезапуск worker\r\n this.restartWorker(worker);\r\n }\r\n \r\n /**\r\n * Обработка ошибок сообщений\r\n * @private\r\n */\r\n handleWorkerMessageError(worker, error) {\r\n console.error(`Worker ${worker.id} message error:`, error);\r\n }\r\n \r\n /**\r\n * Перезапуск worker\r\n * @private\r\n */\r\n restartWorker(worker) {\r\n const index = this.workers.indexOf(worker);\r\n if (index !== -1) {\r\n // Завершение старого worker\r\n worker.terminate();\r\n \r\n // Удаление из статистики\r\n if (worker.status === 'active') {\r\n this.stats.activeWorkers--;\r\n } else {\r\n this.stats.idleWorkers--;\r\n }\r\n this.stats.totalWorkers--;\r\n \r\n // Создание нового worker\r\n const newWorker = this.createWorker();\r\n this.workers[index] = newWorker;\r\n \r\n // Перезапуск задачи если была активна\r\n if (worker.taskId && this.activeTasks.has(worker.taskId)) {\r\n const task = this.activeTasks.get(worker.taskId);\r\n this.executeTask(newWorker, task);\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Выполнение задачи на worker\r\n * @private\r\n */\r\n executeTask(worker, task) {\r\n worker.status = 'active';\r\n worker.lastUsed = Date.now();\r\n worker.taskId = task.id;\r\n \r\n this.stats.idleWorkers--;\r\n this.stats.activeWorkers++;\r\n \r\n // Отправка задачи в worker\r\n const payload = {\r\n type: 'EXECUTE',\r\n taskId: task.id,\r\n method: task.method,\r\n args: task.args,\r\n options: task.options\r\n };\r\n\r\n if (task.transferList && task.transferList.length) {\r\n worker.postMessage(payload, task.transferList);\r\n } else {\r\n worker.postMessage(payload);\r\n }\r\n }\r\n \r\n /**\r\n * Обработка очереди задач\r\n * @private\r\n */\r\n processQueue() {\n if (this.taskQueue.length === 0) {\n return;\n }\n \n while (this.taskQueue.length > 0) {\n const idleWorker = this.workers.find(w => w.status === 'idle');\n if (!idleWorker) {\n if (this.options.autoScale && this.workers.length < this.options.maxQueueSize) {\n this.createWorker();\n continue;\n }\n break;\n }\n \n const task = this.taskQueue.shift();\n this.stats.queueSize--;\n this.executeTask(idleWorker, task);\n }\n \n this.updateStats();\n }\n \r\n /**\r\n * Обновление статистики\r\n * @private\r\n */\r\n updateStats() {\r\n this.stats.queueSize = this.taskQueue.length;\r\n }\r\n \r\n /**\r\n * Выполнение задачи через pool\r\n * @param {string} method - Метод для вызова в worker\r\n * @param {Array} args - Аргументы метода\r\n * @param {Object} [options] - Опции задачи\r\n * @param {Function} [onProgress] - Callback прогресса\r\n * @returns {Promise<any>} Результат выполнения\r\n */\r\n async exec(method, args = [], options = {}, onProgress = null) {\r\n return new Promise((resolve, reject) => {\r\n // Проверка размера очереди\r\n if (this.taskQueue.length >= this.options.maxQueueSize) {\r\n reject(new Error('Очередь задач переполнена'));\r\n return;\r\n }\r\n \r\n // Создание задачи\r\n const taskId = `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n const { transfer, ...taskOptions } = options || {};\r\n const transferList = transfer || collectTransferables(args);\r\n const task = {\r\n id: taskId,\r\n method,\r\n args,\r\n options: taskOptions,\r\n transferList,\r\n onProgress,\r\n resolve,\r\n reject,\r\n createdAt: Date.now()\r\n };\r\n \r\n // Добавление в очередь\r\n this.taskQueue.push(task);\r\n this.stats.queueSize++;\r\n \r\n // Запуск обработки очереди\r\n this.processQueue();\r\n this.updateStats();\r\n });\r\n }\r\n \r\n /**\r\n * Получение статистики pool\r\n * @returns {WorkerPoolStats} Статистика\r\n */\r\n getStats() {\r\n return { ...this.stats };\r\n }\r\n \r\n /**\r\n * Очистка простаивающих workers\r\n */\r\n cleanupIdleWorkers() {\r\n const now = Date.now();\r\n const { idleTimeout } = this.options;\r\n \r\n for (let i = this.workers.length - 1; i >= 0; i--) {\r\n const worker = this.workers[i];\r\n if (worker.status === 'idle' && (now - worker.lastUsed) > idleTimeout) {\r\n // Сохранение минимального количества workers\r\n if (this.workers.length > 1) {\r\n worker.terminate();\r\n this.workers.splice(i, 1);\r\n this.stats.totalWorkers--;\r\n this.stats.idleWorkers--;\r\n }\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Завершение всех workers\r\n */\r\n terminate() {\r\n this.workers.forEach(worker => {\r\n worker.terminate();\r\n });\r\n \r\n this.workers = [];\r\n this.taskQueue = [];\r\n this.activeTasks.clear();\r\n \r\n // Сброс статистики\r\n this.stats = {\r\n totalWorkers: 0,\r\n activeWorkers: 0,\r\n idleWorkers: 0,\r\n queueSize: 0,\r\n tasksCompleted: 0,\r\n tasksFailed: 0\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Создает Worker Pool для обработки CSV\r\n * @param {WorkerPoolOptions} [options] - Опции pool\r\n * @returns {WorkerPool} Worker Pool\r\n */\r\nexport function createWorkerPool(options = {}) {\r\n // Используем встроенный worker скрипт\r\n const workerScript = new URL('./csv-parser.worker.js', import.meta.url).href;\r\n return new WorkerPool(workerScript, options);\r\n}\r\n\r\n/**\r\n * Парсит CSV с использованием Web Workers\r\n * @param {string|File} csvInput - CSV строка или File объект\r\n * @param {Object} [options] - Опции парсинга\r\n * @param {Function} [onProgress] - Callback прогресса\r\n * @returns {Promise<Array<Object>>} JSON данные\r\n */\r\nexport async function parseCSVWithWorker(csvInput, options = {}, onProgress = null) {\r\n // Создание pool если нужно\r\n if (!parseCSVWithWorker.pool) {\r\n parseCSVWithWorker.pool = createWorkerPool();\r\n }\r\n \r\n const pool = parseCSVWithWorker.pool;\r\n \r\n // Подготовка CSV строки\r\n // ?????????? CSV ??????\r\n let csvPayload = csvInput;\r\n let transfer = null;\r\n\r\n if (csvInput instanceof File) {\r\n const buffer = await readFileAsArrayBuffer(csvInput);\r\n csvPayload = new Uint8Array(buffer);\r\n transfer = [buffer];\r\n } else if (csvInput instanceof ArrayBuffer) {\r\n csvPayload = csvInput;\r\n transfer = [csvInput];\r\n } else if (ArrayBuffer.isView(csvInput)) {\r\n csvPayload = csvInput;\r\n if (csvInput.buffer instanceof ArrayBuffer) {\r\n transfer = [csvInput.buffer];\r\n }\r\n } else if (typeof csvInput !== 'string') {\r\n throw new ValidationError('Input must be a CSV string, File, or ArrayBuffer');\r\n }\r\n\r\n // ????????? ?????? ????? pool\r\n const execOptions = transfer ? { transfer } : {};\r\n return pool.exec('parseCSV', [csvPayload, options], execOptions, onProgress);\r\n}\r\n\r\n/**\r\n * Чтение файла как текст\r\n * @private\r\n */\r\nasync function readFileAsArrayBuffer(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => resolve(event.target.result);\n reader.onerror = (error) => reject(error);\n reader.readAsArrayBuffer(file);\n });\n}\n\n// Экспорт для Node.js совместимости\r\nif (typeof module !== 'undefined' && module.exports) {\r\n module.exports = {\r\n WorkerPool,\r\n createWorkerPool,\r\n parseCSVWithWorker\r\n };\r\n}\r\n","// Браузерный entry point для jtcsv\n// Экспортирует все функции с поддержкой браузера\n\nimport { jsonToCsv, preprocessData, deepUnwrap } from './json-to-csv-browser.js';\nimport { csvToJson, csvToJsonIterator, autoDetectDelimiter } from './csv-to-json-browser.js';\nimport {\n downloadAsCsv,\n parseCsvFile,\n parseCsvFileStream,\n jsonToCsvStream,\n jsonToNdjsonStream,\n csvToJsonStream\n} from './browser-functions.js';\nimport { createWorkerPool, parseCSVWithWorker } from './workers/worker-pool.js';\nimport {\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError,\n ERROR_CODES\n} from './errors-browser.js';\n\nasync function createWorkerPoolLazy(options = {}) {\n const mod = await import('./workers/worker-pool.js');\n return mod.createWorkerPool(options);\n}\n\nasync function parseCSVWithWorkerLazy(csvInput, options = {}, onProgress = null) {\n const mod = await import('./workers/worker-pool.js');\n return mod.parseCSVWithWorker(csvInput, options, onProgress);\n}\n\n// Основной экспорт\nconst jtcsv = {\n // JSON to CSV функции\n jsonToCsv,\n preprocessData,\n downloadAsCsv,\n deepUnwrap,\n \n // CSV to JSON функции\n csvToJson,\n csvToJsonIterator,\n parseCsvFile,\n parseCsvFileStream,\n jsonToCsvStream,\n jsonToNdjsonStream,\n csvToJsonStream,\n autoDetectDelimiter,\n \n // Web Workers функции\n createWorkerPool,\n parseCSVWithWorker,\n createWorkerPoolLazy,\n parseCSVWithWorkerLazy,\n \n // Error classes\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError,\n ERROR_CODES,\n \n // Удобные алиасы\n parse: csvToJson,\n unparse: jsonToCsv,\n \n // Версия\n version: '2.0.0-browser'\n};\n\n// Экспорт для разных сред\nif (typeof module !== 'undefined' && module.exports) {\n // Node.js CommonJS\n module.exports = jtcsv;\n} else if (typeof define === 'function' && define.amd) {\n // AMD\n define([], () => jtcsv);\n} else if (typeof window !== 'undefined') {\n // Браузер (глобальная переменная)\n window.jtcsv = jtcsv;\n}\n\nexport default jtcsv;\nexport {\n jsonToCsv,\n preprocessData,\n downloadAsCsv,\n deepUnwrap,\n csvToJson,\n csvToJsonIterator,\n parseCsvFile,\n parseCsvFileStream,\n jsonToCsvStream,\n jsonToNdjsonStream,\n csvToJsonStream,\n autoDetectDelimiter,\n createWorkerPool,\n parseCSVWithWorker,\n createWorkerPoolLazy,\n parseCSVWithWorkerLazy,\n ValidationError,\n SecurityError,\n FileSystemError,\n ParsingError,\n LimitError,\n ConfigurationError,\n ERROR_CODES\n};\n"],"names":["JTCSVError","Error","constructor","message","code","details","name","captureStackTrace","ValidationError","SecurityError","FileSystemError","originalError","ParsingError","lineNumber","LimitError","limit","actual","ConfigurationError","ERROR_CODES","JTCSV_ERROR","VALIDATION_ERROR","SECURITY_ERROR","FILE_SYSTEM_ERROR","PARSING_ERROR","LIMIT_ERROR","CONFIGURATION_ERROR","INVALID_INPUT","SECURITY_VIOLATION","FILE_NOT_FOUND","PARSE_FAILED","SIZE_LIMIT","INVALID_CONFIG","UNKNOWN_ERROR","safeExecute","fn","errorCode","errorDetails","error","enhancedError","errorMessage","String","includes","stack","safeExecuteAsync","module","exports","validateInput","data","options","Array","isArray","delimiter","length","renameMap","maxRecords","undefined","preventCsvInjection","rfc4180Compliant","jsonToCsv","opts","includeHeaders","template","process","env","NODE_ENV","console","warn","toLocaleString","allKeys","Set","forEach","item","Object","keys","key","add","originalKeys","from","headers","map","reverseRenameMap","index","finalHeaders","templateHeaders","extraHeaders","filter","h","escapeValue","value","stringValue","escapedValue","test","needsQuoting","replace","rows","push","join","row","header","originalKey","lineEnding","function","deepUnwrap","depth","maxDepth","visited","has","unwrappedItems","JSON","stringify","preprocessData","processed","prototype","hasOwnProperty","call","validateCsvOptions","autoDetect","candidates","maxRows","warnExtraFields","validateCsvInput","csv","parseCsvLine","line","fields","currentField","insideQuotes","escapeNext","i","char","isEndOfField","j","parseCsvValue","trim","parseNumbers","parseBooleans","result","startsWith","substring","num","parseFloat","isNaN","lowerValue","toLowerCase","isSimpleCsv","indexOf","parseSimpleCsv","hasHeaders","fieldStart","currentRow","rowHasData","rowCount","finalizeRow","trimmed","_","fieldCount","Math","min","field","slice","autoDetectDelimiter","lines","split","firstLine","counts","delim","escapedDelim","regex","RegExp","matches","match","maxCount","detectedDelimiter","count","entries","csvToJson","finalDelimiter","currentLine","startIndex","firstLineFields","isDev","csvToJsonIterator","input","stream","Blob","getReader","reader","decoder","TextDecoder","buffer","delimiterResolved","Boolean","processFields","processLine","cleanLine","endsWith","done","read","decode","start","DEFAULT_MAX_CHUNK_SIZE","isReadableStream","isAsyncIterable","Symbol","asyncIterator","isIterable","iterator","createReadableStreamFromIterator","ReadableStream","pull","controller","next","close","enqueue","cancel","return","detectInputFormat","inputFormat","parseNdjsonText","text","parse","parseNdjsonStream","pop","normalizeJsonInput","format","parsed","validateStreamOptions","escapeCsvValue","buildHeaderState","jsonToCsvChunkIterator","maxChunkSize","headerMode","headerState","recordCount","jsonToNdjsonChunkIterator","csvToJsonChunkIterator","outputFormat","asArray","first","payload","jsonToCsvStream","jsonToNdjsonStream","csvToJsonStream","downloadAsCsv","filename","window","blob","type","link","document","createElement","url","URL","createObjectURL","setAttribute","style","visibility","body","appendChild","click","setTimeout","removeChild","revokeObjectURL","parseCsvFile","file","File","MAX_SIZE_WARNING","size","toFixed","Promise","resolve","reject","FileReader","onload","event","csvText","target","json","onerror","onabort","readAsText","parseCsvFileStream","createCsvBlob","parseCsvBlob","WORKERS_SUPPORTED","Worker","isTransferableBuffer","ArrayBuffer","SharedArrayBuffer","collectTransferables","args","transferables","collectFromValue","isView","WorkerPool","workerScript","workerCount","maxQueueSize","autoScale","idleTimeout","workers","taskQueue","activeTasks","Map","stats","totalWorkers","activeWorkers","idleWorkers","queueSize","tasksCompleted","tasksFailed","initializeWorkers","createWorker","updateStats","worker","id","status","lastUsed","Date","now","taskId","onmessage","handleWorkerMessage","handleWorkerError","onmessageerror","handleWorkerMessageError","handleProgress","handleResult","handleWorkerTaskError","progressData","task","get","onProgress","total","percentage","speed","resultData","delete","processQueue","errorData","workerError","restartWorker","terminate","newWorker","executeTask","method","transferList","postMessage","idleWorker","find","w","shift","exec","random","toString","substr","transfer","taskOptions","createdAt","getStats","cleanupIdleWorkers","splice","clear","createWorkerPool","import","href","parseCSVWithWorker","csvInput","pool","csvPayload","readFileAsArrayBuffer","Uint8Array","execOptions","readAsArrayBuffer","createWorkerPoolLazy","mod","parseCSVWithWorkerLazy","jtcsv","unparse","version","define","amd"],"mappings":"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"}
|