node-es-transformer 1.1.0 → 1.2.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"node-es-transformer.esm.js","sources":["../src/_constants.js","../src/_create-mapping.js","../src/_csv-parser-options.js","../src/_file-reader.js","../src/_index-queue.js","../src/_index-reader.js","../src/_infer-mappings.js","../src/_stream-reader.js","../src/main.js"],"sourcesContent":["// In earlier versions this was used to set the number of docs to index in a\n// single bulk request. Since we switched to use the helpers.bulk() method from\n// the ES client, this now translates to the `flushBytes` option of the helper.\n// However, for kind of a backwards compability with the old values, this uses\n// KBytes instead of Bytes. It will be multiplied by 1024 in the index queue.\nexport const DEFAULT_BUFFER_SIZE = 5120;\n\n// The default number of docs to fetch in a single search request when reindexing.\nexport const DEFAULT_SEARCH_SIZE = 1000;\n","export default function createMappingFactory({\n sourceClient,\n sourceIndexName,\n targetClient,\n targetIndexName,\n mappings,\n inferredIngestPipeline,\n mappingsOverride,\n indexMappingTotalFieldsLimit,\n verbose,\n deleteIndex,\n pipeline,\n}) {\n return async () => {\n let targetMappings = mappingsOverride ? undefined : mappings;\n let defaultPipeline = pipeline;\n\n if (sourceClient && sourceIndexName && typeof targetMappings === 'undefined') {\n try {\n const mapping = await sourceClient.indices.getMapping({\n index: sourceIndexName,\n });\n if (mapping[sourceIndexName]) {\n targetMappings = mapping[sourceIndexName].mappings;\n } else {\n const allMappings = Object.values(mapping);\n if (allMappings.length > 0) {\n targetMappings = Object.values(mapping)[0].mappings;\n }\n }\n } catch (err) {\n console.log('Error reading source mapping', err);\n return;\n }\n }\n\n if (typeof targetMappings === 'object' && targetMappings !== null) {\n if (mappingsOverride) {\n targetMappings = {\n ...targetMappings,\n properties: {\n ...targetMappings.properties,\n ...mappings,\n },\n };\n }\n\n try {\n const indexExists = await targetClient.indices.exists({ index: targetIndexName });\n\n if (indexExists === true && deleteIndex === true) {\n await targetClient.indices.delete({ index: targetIndexName });\n }\n\n if (indexExists === false || deleteIndex === true) {\n if (\n typeof defaultPipeline === 'undefined' &&\n typeof inferredIngestPipeline === 'object' &&\n inferredIngestPipeline !== null &&\n typeof targetClient?.ingest?.putPipeline === 'function'\n ) {\n const inferredPipelineName = `${targetIndexName}-inferred-pipeline`;\n\n try {\n await targetClient.ingest.putPipeline({\n id: inferredPipelineName,\n ...inferredIngestPipeline,\n });\n defaultPipeline = inferredPipelineName;\n if (verbose) console.log(`Created inferred ingest pipeline ${inferredPipelineName}`);\n } catch (err) {\n console.log('Error creating inferred ingest pipeline', err);\n }\n }\n\n const settings = {\n ...(defaultPipeline !== undefined\n ? {\n 'index.default_pipeline': defaultPipeline,\n }\n : {}),\n ...(indexMappingTotalFieldsLimit !== undefined\n ? {\n 'index.mapping.total_fields.limit': indexMappingTotalFieldsLimit,\n 'index.number_of_shards': 1,\n 'index.number_of_replicas': 0,\n }\n : {}),\n };\n\n const resp = await targetClient.indices.create({\n index: targetIndexName,\n mappings: targetMappings,\n ...(Object.keys(settings).length > 0 ? { settings } : {}),\n });\n if (verbose) console.log('Created target mapping', resp);\n }\n } catch (err) {\n console.log('Error creating target mapping', err);\n }\n }\n };\n}\n","export default function getCsvParserOptions(csvOptions = {}, skipHeader = false) {\n const options = {\n bom: true,\n columns: true,\n trim: true,\n skip_empty_lines: true,\n ...csvOptions,\n };\n\n const consumesHeader = options.columns === true || typeof options.columns === 'function';\n\n if (skipHeader && !consumesHeader && typeof options.from_line === 'undefined') {\n options.from_line = 2;\n }\n\n return options;\n}\n","import fs from 'fs';\nimport { parse } from 'csv-parse';\nimport es from 'event-stream';\nimport { globSync } from 'glob';\nimport split from 'split2';\n\nimport getCsvParserOptions from './_csv-parser-options';\n\nexport default function fileReaderFactory(\n indexer,\n fileName,\n transform,\n splitRegex,\n verbose,\n skipHeader = false,\n sourceFormat = 'ndjson',\n csvOptions = {},\n) {\n function addParsedDoc(parsed, file, streamRef) {\n const context = { fileName: file };\n const doc = typeof transform === 'function' ? transform(parsed, context) : parsed;\n\n // if doc is null/undefined we'll skip indexing it\n if (doc === null || typeof doc === 'undefined') {\n streamRef.resume();\n return;\n }\n\n // the transform callback may return an array of docs so we can emit\n // multiple docs from a single line\n if (Array.isArray(doc)) {\n doc.forEach(d => {\n if (d === null || typeof d === 'undefined') return;\n indexer.add(d);\n });\n return;\n }\n\n indexer.add(doc);\n }\n\n function createNdjsonReader(file) {\n let skippedHeader = false;\n\n const s = fs\n .createReadStream(file)\n .pipe(split(splitRegex))\n .pipe(\n es\n .mapSync(line => {\n try {\n // skip empty lines\n if (line === '') {\n return;\n }\n\n if (skipHeader && !skippedHeader) {\n skippedHeader = true;\n return;\n }\n\n const parsed = JSON.parse(line);\n addParsedDoc(parsed, file, s);\n } catch (e) {\n console.log('error', e);\n }\n })\n .on('error', err => {\n console.log('Error while reading file.', err);\n }),\n );\n\n return s;\n }\n\n function createCsvReader(file) {\n const parserOptions = getCsvParserOptions(csvOptions, skipHeader);\n\n const s = fs\n .createReadStream(file)\n .pipe(parse(parserOptions))\n .pipe(\n es\n .mapSync(record => {\n try {\n addParsedDoc(record, file, s);\n } catch (e) {\n console.log('error', e);\n }\n })\n .on('error', err => {\n console.log('Error while reading CSV file.', err);\n }),\n );\n\n return s;\n }\n\n function startIndex(files) {\n let finished = false;\n\n if (files.length === 0) {\n indexer.finish();\n return;\n }\n\n const file = files.shift();\n\n const s = sourceFormat === 'csv' ? createCsvReader(file) : createNdjsonReader(file);\n\n s.on('end', () => {\n if (verbose) console.log('Read entire file: ', file);\n if (files.length > 0) {\n startIndex(files);\n return;\n }\n\n indexer.finish();\n finished = true;\n });\n\n indexer.queueEmitter.on('pause', () => {\n if (finished) return;\n s.pause();\n });\n\n indexer.queueEmitter.on('resume', () => {\n if (finished) return;\n s.resume();\n });\n }\n\n return () => {\n try {\n const files = globSync(fileName);\n startIndex(files);\n } catch (error) {\n console.log('Error matching files:', error);\n }\n };\n}\n","import { PassThrough } from 'stream';\n\nimport { DEFAULT_BUFFER_SIZE } from './_constants';\n\nconst EventEmitter = require('events');\n\nconst parallelCalls = 5;\n\n// a simple helper queue to bulk index documents\nexport default function indexQueueFactory({\n targetClient: client,\n targetIndexName,\n bufferSize = DEFAULT_BUFFER_SIZE,\n}) {\n const queueEmitter = new EventEmitter();\n let docsPerSecond = 0;\n\n const flushBytes = bufferSize * 1024; // Convert KB to Bytes\n const highWaterMark = flushBytes * parallelCalls;\n\n // Create a PassThrough stream (readable + writable) for proper backpressure\n const stream = new PassThrough({\n highWaterMark, // Buffer size for backpressure management\n });\n\n async function* ndjsonStreamIterator(readableStream) {\n let buffer = ''; // To hold the incomplete data\n\n try {\n // Iterate over the stream using async iteration\n for await (const chunk of readableStream) {\n buffer += chunk.toString(); // Accumulate the chunk data in the buffer\n\n // Split the buffer into lines (NDJSON items)\n const lines = buffer.split('\\n');\n\n // The last line might be incomplete, so hold it back in the buffer\n buffer = lines.pop();\n\n // Yield each complete JSON object\n for (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n\n try {\n yield JSON.parse(line); // Parse and yield the JSON object\n } catch (err) {\n // Handle JSON parse errors if necessary\n console.error('Failed to parse JSON:', err);\n }\n }\n }\n\n // Handle any remaining data in the buffer after the stream ends\n if (buffer.trim()) {\n try {\n yield JSON.parse(buffer);\n } catch (err) {\n console.error('Failed to parse final JSON:', err);\n }\n }\n } finally {\n // Ensure the stream is properly cleaned up if the iterator is terminated early\n if (!readableStream.destroyed) {\n readableStream.destroy();\n }\n }\n }\n\n let finished = false;\n let drainListener = null;\n\n // Async IIFE to start bulk indexing\n (async () => {\n const interval = setInterval(() => {\n queueEmitter.emit('docsPerSecond', docsPerSecond);\n docsPerSecond = 0;\n }, 1000);\n\n try {\n await client.helpers.bulk({\n concurrency: parallelCalls,\n flushBytes,\n flushInterval: 1000,\n refreshOnCompletion: true,\n datasource: ndjsonStreamIterator(stream),\n onDocument(doc) {\n docsPerSecond++;\n return {\n index: { _index: targetIndexName },\n };\n },\n });\n } catch (error) {\n console.error('Error during bulk indexing:', error);\n throw error;\n } finally {\n // Clean up interval\n clearInterval(interval);\n\n // Remove drain listener if it exists\n if (drainListener) {\n stream.removeListener('drain', drainListener);\n drainListener = null;\n }\n\n // Remove all listeners from stream\n stream.removeAllListeners();\n\n // Properly destroy the stream to prevent open handles\n if (!stream.destroyed) {\n stream.destroy();\n }\n\n // Emit finish and clean up queue emitter listeners\n queueEmitter.emit('finish');\n queueEmitter.removeAllListeners();\n }\n })();\n\n return {\n add: doc => {\n if (finished) {\n throw new Error('Unexpected doc added after indexer should finish.');\n }\n\n const canContinue = stream.write(`${JSON.stringify(doc)}\\n`);\n if (!canContinue) {\n queueEmitter.emit('pause');\n\n // Store the listener so we can clean it up later\n drainListener = () => {\n queueEmitter.emit('resume');\n };\n stream.once('drain', drainListener);\n }\n },\n finish: () => {\n finished = true;\n stream.end();\n },\n queueEmitter,\n };\n}\n","import cliProgress from 'cli-progress';\n\nimport { DEFAULT_SEARCH_SIZE } from './_constants';\n\n// create a new progress bar instance and use shades_classic theme\nconst progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\nexport default function indexReaderFactory(\n indexer,\n sourceIndexName,\n transform,\n client,\n query,\n searchSize = DEFAULT_SEARCH_SIZE,\n populatedFields = false,\n) {\n return async function indexReader() {\n let docsNum = 0;\n let scrollId;\n let finished = false;\n let readActive = false;\n let backPressurePause = false;\n\n async function fetchPopulatedFields() {\n try {\n // Get all populated fields from the index\n const response = await client.fieldCaps(\n {\n index: sourceIndexName,\n fields: '*',\n include_empty_fields: false,\n filters: '-metadata',\n },\n { maxRetries: 0 },\n );\n\n return Object.keys(response.fields);\n } catch (e) {\n console.log('error', e);\n }\n }\n\n function search(fields) {\n return client.search({\n index: sourceIndexName,\n scroll: '600s',\n size: searchSize,\n query,\n ...(fields ? { _source: fields } : {}),\n });\n }\n\n function scroll(id) {\n return client.scroll({\n scroll_id: id,\n scroll: '600s',\n });\n }\n\n let fieldsWithData;\n\n // identify populated fields\n if (populatedFields) {\n fieldsWithData = await fetchPopulatedFields();\n }\n\n await fetchNextResponse();\n\n function processHit(hit) {\n docsNum += 1;\n try {\n const doc = typeof transform === 'function' ? transform(hit._source) : hit._source; // eslint-disable-line no-underscore-dangle\n\n // if doc is undefined we'll skip indexing it\n if (typeof doc === 'undefined') {\n return;\n }\n\n // the transform callback may return an array of docs so we can emit\n // multiple docs from a single line\n if (Array.isArray(doc)) {\n doc.forEach(d => indexer.add(d));\n return;\n }\n\n indexer.add(doc);\n } catch (e) {\n console.log('error', e);\n }\n }\n\n async function fetchNextResponse() {\n readActive = true;\n\n const sc = scrollId ? await scroll(scrollId) : await search(fieldsWithData);\n\n if (!scrollId) {\n progressBar.start(sc.hits.total.value, 0);\n }\n\n scrollId = sc._scroll_id;\n readActive = false;\n\n processResponse(sc);\n }\n\n async function processResponse(response) {\n // collect the docs from this response\n response.hits.hits.forEach(processHit);\n\n progressBar.update(docsNum);\n\n // check to see if we have collected all of the docs\n if (response.hits.total.value === docsNum) {\n indexer.finish();\n return;\n }\n\n if (!backPressurePause) {\n await fetchNextResponse();\n }\n }\n\n indexer.queueEmitter.on('pause', async () => {\n backPressurePause = true;\n });\n\n indexer.queueEmitter.on('resume', async () => {\n backPressurePause = false;\n\n if (readActive || finished) {\n return;\n }\n\n await fetchNextResponse();\n });\n\n indexer.queueEmitter.on('finish', () => {\n finished = true;\n progressBar.stop();\n });\n };\n}\n","import fs from 'fs';\nimport { globSync } from 'glob';\n\nconst DEFAULT_INFER_MAPPINGS_SAMPLE_BYTES = 100000;\nconst DEFAULT_INFER_MAPPINGS_LINES_TO_SAMPLE = 1000;\n\nfunction readSample(filePath, sampleBytes) {\n const fd = fs.openSync(filePath, 'r');\n\n try {\n const buffer = Buffer.alloc(sampleBytes);\n const bytesRead = fs.readSync(fd, buffer, 0, sampleBytes, 0);\n return buffer.subarray(0, bytesRead).toString('utf8');\n } finally {\n fs.closeSync(fd);\n }\n}\n\nfunction emptyInferenceResult(mappings) {\n return {\n mappings,\n ingestPipeline: undefined,\n };\n}\n\nexport default async function inferMappingsFromSource({\n targetClient,\n fileName,\n sourceFormat,\n csvOptions,\n skipHeader,\n mappings,\n inferMappings,\n inferMappingsOptions,\n verbose,\n}) {\n if (!inferMappings || typeof mappings !== 'undefined' || typeof fileName === 'undefined') {\n return emptyInferenceResult(mappings);\n }\n\n if (\n typeof targetClient?.textStructure?.findStructure !== 'function' ||\n sourceFormat === 'xml' ||\n sourceFormat === 'semi_structured_text'\n ) {\n return emptyInferenceResult(mappings);\n }\n\n const files = globSync(fileName);\n\n if (files.length === 0) {\n if (verbose) console.log(`No files matched for mapping inference: ${fileName}`);\n return emptyInferenceResult(mappings);\n }\n\n const { sampleBytes = DEFAULT_INFER_MAPPINGS_SAMPLE_BYTES, ...requestParams } =\n inferMappingsOptions || {};\n\n const sampleText = readSample(files[0], sampleBytes);\n\n if (!sampleText || sampleText.trim() === '') {\n if (verbose) console.log('Skipping mapping inference because the sample text is empty.');\n return emptyInferenceResult(mappings);\n }\n\n const params = {\n body: sampleText,\n lines_to_sample: DEFAULT_INFER_MAPPINGS_LINES_TO_SAMPLE,\n ...requestParams,\n };\n\n if (typeof params.format === 'undefined') {\n params.format = sourceFormat === 'csv' ? 'delimited' : 'ndjson';\n }\n\n if (sourceFormat === 'csv') {\n if (typeof params.delimiter === 'undefined' && typeof csvOptions?.delimiter === 'string') {\n params.delimiter = csvOptions.delimiter;\n }\n\n if (typeof params.quote === 'undefined' && typeof csvOptions?.quote === 'string') {\n params.quote = csvOptions.quote;\n }\n\n if (typeof params.has_header_row === 'undefined' && typeof csvOptions?.columns === 'boolean') {\n params.has_header_row = csvOptions.columns;\n }\n\n if (typeof params.has_header_row === 'undefined' && skipHeader) {\n params.has_header_row = true;\n }\n }\n\n try {\n const response = await targetClient.textStructure.findStructure(params);\n\n if (response?.mappings && verbose) {\n console.log(`Inferred mappings via _text_structure/find_structure from ${files[0]}`);\n }\n\n if (response?.ingest_pipeline && verbose) {\n console.log('Inferred ingest pipeline via _text_structure/find_structure');\n }\n\n return {\n mappings: response?.mappings || mappings,\n ingestPipeline: response?.ingest_pipeline,\n };\n } catch (error) {\n if (verbose) {\n console.log('Could not infer mappings via _text_structure/find_structure:', error.message);\n }\n\n return emptyInferenceResult(mappings);\n }\n}\n","import { parse } from 'csv-parse';\nimport es from 'event-stream';\nimport split from 'split2';\n\nimport getCsvParserOptions from './_csv-parser-options';\n\nexport default function streamReaderFactory(\n indexer,\n stream,\n transform,\n splitRegex,\n verbose,\n skipHeader = false,\n sourceFormat = 'ndjson',\n csvOptions = {},\n) {\n function addParsedDoc(parsed, streamRef) {\n const doc = typeof transform === 'function' ? transform(parsed) : parsed;\n\n // if doc is null/undefined we'll skip indexing it\n if (doc === null || typeof doc === 'undefined') {\n streamRef.resume();\n return;\n }\n\n // the transform callback may return an array of docs so we can emit\n // multiple docs from a single line\n if (Array.isArray(doc)) {\n doc.forEach(d => {\n if (d === null || typeof d === 'undefined') return;\n indexer.add(d);\n });\n return;\n }\n\n indexer.add(doc);\n }\n\n function startIndex() {\n let finished = false;\n\n const s =\n sourceFormat === 'csv'\n ? stream.pipe(parse(getCsvParserOptions(csvOptions, skipHeader))).pipe(\n es\n .mapSync(record => {\n try {\n addParsedDoc(record, s);\n } catch (e) {\n console.log('error', e);\n }\n })\n .on('error', err => {\n console.log('Error while reading CSV stream.', err);\n }),\n )\n : (() => {\n let skippedHeader = false;\n\n return stream.pipe(split(splitRegex)).pipe(\n es\n .mapSync(line => {\n try {\n // skip empty lines\n if (line === '') {\n return;\n }\n\n if (skipHeader && !skippedHeader) {\n skippedHeader = true;\n return;\n }\n\n const parsed = JSON.parse(line);\n addParsedDoc(parsed, s);\n } catch (e) {\n console.log('error', e);\n }\n })\n .on('error', err => {\n console.log('Error while reading stream.', err);\n }),\n );\n })();\n\n s.on('end', () => {\n if (verbose) console.log('Read entire stream.');\n indexer.finish();\n finished = true;\n });\n\n indexer.queueEmitter.on('pause', () => {\n if (finished) return;\n s.pause();\n });\n\n indexer.queueEmitter.on('resume', () => {\n if (finished) return;\n s.resume();\n });\n }\n\n return () => {\n startIndex();\n };\n}\n","import elasticsearch9 from 'es9';\nimport elasticsearch8 from 'es8';\n\nimport { DEFAULT_BUFFER_SIZE, DEFAULT_SEARCH_SIZE } from './_constants';\nimport createMappingFactory from './_create-mapping';\nimport fileReaderFactory from './_file-reader';\nimport indexQueueFactory from './_index-queue';\nimport indexReaderFactory from './_index-reader';\nimport inferMappingsFromSource from './_infer-mappings';\nimport streamReaderFactory from './_stream-reader';\n\n/**\n * Detect Elasticsearch version by querying the cluster\n */\nasync function detectElasticsearchVersion(config) {\n try {\n // Try with v9 client first (most common for new setups)\n const testClient = new elasticsearch9.Client(config);\n const info = await testClient.info();\n const version = info.version?.number;\n await testClient.close();\n\n if (version) {\n const majorVersion = parseInt(version.split('.')[0], 10);\n return majorVersion;\n }\n } catch (e) {\n // If v9 client fails, try v8 client\n try {\n const testClient = new elasticsearch8.Client(config);\n const info = await testClient.info();\n const version = info.version?.number;\n await testClient.close();\n\n if (version) {\n const majorVersion = parseInt(version.split('.')[0], 10);\n return majorVersion;\n }\n } catch (e2) {\n // Could not detect version\n }\n }\n\n // Default to v9 if detection fails\n return 9;\n}\n\n/**\n * Create or validate an Elasticsearch client\n * @param {Object|Client} clientOrConfig - Either a client instance or config object\n * @param {Object} defaultConfig - Default configuration to use if creating a new client\n * @param {number} [forceVersion] - Force a specific ES client version (8 or 9)\n */\nasync function getOrCreateClient(clientOrConfig, defaultConfig, forceVersion) {\n // If already a client instance, return it\n if (clientOrConfig && typeof clientOrConfig.info === 'function') {\n return clientOrConfig;\n }\n\n const config = clientOrConfig || defaultConfig;\n\n // If version is forced, use the specified client\n if (forceVersion === 8) {\n return new elasticsearch8.Client(config);\n } else if (forceVersion === 9) {\n return new elasticsearch9.Client(config);\n }\n\n // Auto-detect version\n const majorVersion = await detectElasticsearchVersion(config);\n\n if (majorVersion >= 9) {\n return new elasticsearch9.Client(config);\n } else {\n return new elasticsearch8.Client(config);\n }\n}\n\nexport default async function transformer({\n deleteIndex = false,\n sourceClient: sourceClientInput,\n targetClient: targetClientInput,\n sourceClientConfig,\n targetClientConfig,\n sourceClientVersion,\n targetClientVersion,\n bufferSize = DEFAULT_BUFFER_SIZE,\n searchSize = DEFAULT_SEARCH_SIZE,\n stream,\n fileName,\n sourceFormat = 'ndjson',\n csvOptions = {},\n splitRegex = /\\n/,\n sourceIndexName,\n targetIndexName,\n mappings,\n mappingsOverride = false,\n inferMappings = false,\n inferMappingsOptions = {},\n indexMappingTotalFieldsLimit,\n pipeline,\n populatedFields = false,\n query,\n skipHeader = false,\n transform,\n verbose = true,\n}) {\n if (typeof targetIndexName === 'undefined') {\n throw Error('targetIndexName must be specified.');\n }\n\n const defaultClientConfig = {\n node: process.env.ELASTICSEARCH_URL || 'http://localhost:9200',\n };\n\n // Support both old (config) and new (client instance) patterns\n const sourceClient = await getOrCreateClient(\n sourceClientInput || sourceClientConfig,\n defaultClientConfig,\n sourceClientVersion,\n );\n\n const targetClient = await getOrCreateClient(\n targetClientInput || targetClientConfig || sourceClientInput || sourceClientConfig,\n defaultClientConfig,\n targetClientVersion,\n );\n\n const inferenceResult = await inferMappingsFromSource({\n targetClient,\n fileName,\n sourceFormat,\n csvOptions,\n skipHeader,\n mappings,\n inferMappings,\n inferMappingsOptions,\n verbose,\n });\n\n const createMapping = createMappingFactory({\n sourceClient,\n sourceIndexName,\n targetClient,\n targetIndexName,\n mappings: inferenceResult.mappings,\n inferredIngestPipeline: inferenceResult.ingestPipeline,\n mappingsOverride,\n indexMappingTotalFieldsLimit,\n verbose,\n deleteIndex,\n pipeline,\n });\n const indexer = indexQueueFactory({\n targetClient,\n targetIndexName,\n bufferSize,\n verbose,\n });\n\n function validateSourceFormat() {\n if (sourceFormat !== 'ndjson' && sourceFormat !== 'csv') {\n throw Error(`Unsupported sourceFormat: ${sourceFormat}. Use \"ndjson\" or \"csv\".`);\n }\n }\n\n function getReader() {\n if (typeof fileName !== 'undefined' && typeof sourceIndexName !== 'undefined') {\n throw Error('Only either one of fileName or sourceIndexName can be specified.');\n }\n\n if (\n (typeof fileName !== 'undefined' && typeof sourceIndexName !== 'undefined') ||\n (typeof fileName !== 'undefined' && typeof stream !== 'undefined') ||\n (typeof sourceIndexName !== 'undefined' && typeof stream !== 'undefined')\n ) {\n throw Error('Only one of fileName, sourceIndexName, or stream can be specified.');\n }\n\n if (typeof fileName !== 'undefined') {\n validateSourceFormat();\n return fileReaderFactory(\n indexer,\n fileName,\n transform,\n splitRegex,\n verbose,\n skipHeader,\n sourceFormat,\n csvOptions,\n );\n }\n\n if (typeof sourceIndexName !== 'undefined') {\n return indexReaderFactory(\n indexer,\n sourceIndexName,\n transform,\n sourceClient,\n query,\n searchSize,\n populatedFields,\n );\n }\n\n if (typeof stream !== 'undefined') {\n validateSourceFormat();\n return streamReaderFactory(\n indexer,\n stream,\n transform,\n splitRegex,\n verbose,\n skipHeader,\n sourceFormat,\n csvOptions,\n );\n }\n\n return null;\n }\n\n const reader = getReader();\n\n try {\n const indexExists = await targetClient.indices.exists({ index: targetIndexName });\n\n if (indexExists === false) {\n await createMapping();\n reader();\n } else if (deleteIndex === true) {\n await targetClient.indices.delete({ index: targetIndexName });\n await createMapping();\n reader();\n } else {\n reader();\n }\n } catch (error) {\n console.error('Error checking index existence:', error);\n } finally {\n // targetClient.close();\n }\n\n return { events: indexer.queueEmitter };\n}\n"],"names":["DEFAULT_BUFFER_SIZE","DEFAULT_SEARCH_SIZE","createMappingFactory","sourceClient","sourceIndexName","targetClient","targetIndexName","mappings","inferredIngestPipeline","mappingsOverride","indexMappingTotalFieldsLimit","verbose","deleteIndex","pipeline","targetMappings","undefined","defaultPipeline","mapping","indices","getMapping","index","allMappings","Object","values","length","err","console","log","properties","indexExists","exists","delete","ingest","putPipeline","inferredPipelineName","id","settings","resp","create","keys","getCsvParserOptions","csvOptions","skipHeader","options","bom","columns","trim","skip_empty_lines","consumesHeader","from_line","fileReaderFactory","indexer","fileName","transform","splitRegex","sourceFormat","addParsedDoc","parsed","file","streamRef","context","doc","resume","Array","isArray","forEach","d","add","createNdjsonReader","skippedHeader","s","fs","createReadStream","pipe","split","es","mapSync","line","JSON","parse","e","on","createCsvReader","parserOptions","record","startIndex","files","finished","finish","shift","queueEmitter","pause","globSync","error","EventEmitter","require","parallelCalls","indexQueueFactory","client","bufferSize","docsPerSecond","flushBytes","highWaterMark","stream","PassThrough","ndjsonStreamIterator","readableStream","buffer","chunk","toString","lines","pop","destroyed","destroy","drainListener","interval","setInterval","emit","helpers","bulk","concurrency","flushInterval","refreshOnCompletion","datasource","onDocument","_index","clearInterval","removeListener","removeAllListeners","Error","canContinue","write","stringify","once","end","progressBar","cliProgress","SingleBar","Presets","shades_classic","indexReaderFactory","query","searchSize","populatedFields","indexReader","docsNum","scrollId","readActive","backPressurePause","fetchPopulatedFields","response","fieldCaps","fields","include_empty_fields","filters","maxRetries","search","scroll","size","_source","scroll_id","fieldsWithData","fetchNextResponse","processHit","hit","sc","start","hits","total","value","_scroll_id","processResponse","update","stop","DEFAULT_INFER_MAPPINGS_SAMPLE_BYTES","DEFAULT_INFER_MAPPINGS_LINES_TO_SAMPLE","readSample","filePath","sampleBytes","fd","openSync","Buffer","alloc","bytesRead","readSync","subarray","closeSync","emptyInferenceResult","ingestPipeline","inferMappingsFromSource","inferMappings","inferMappingsOptions","textStructure","findStructure","requestParams","sampleText","params","body","lines_to_sample","format","delimiter","quote","has_header_row","ingest_pipeline","message","streamReaderFactory","detectElasticsearchVersion","config","testClient","elasticsearch9","Client","info","version","number","close","majorVersion","parseInt","elasticsearch8","e2","getOrCreateClient","clientOrConfig","defaultConfig","forceVersion","transformer","sourceClientInput","targetClientInput","sourceClientConfig","targetClientConfig","sourceClientVersion","targetClientVersion","defaultClientConfig","node","process","env","ELASTICSEARCH_URL","inferenceResult","createMapping","validateSourceFormat","getReader","reader","events"],"mappings":"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"}
1
+ {"version":3,"file":"node-es-transformer.esm.js","sources":["../src/_constants.js","../src/_create-mapping.js","../src/_csv-parser-options.js","../src/_file-reader.js","../src/_index-queue.js","../src/_index-reader.js","../src/_infer-mappings.js","../src/_logger.js","../src/_stream-reader.js","../src/main.js"],"sourcesContent":["// In earlier versions this was used to set the number of docs to index in a\n// single bulk request. Since we switched to use the helpers.bulk() method from\n// the ES client, this now translates to the `flushBytes` option of the helper.\n// However, for kind of a backwards compability with the old values, this uses\n// KBytes instead of Bytes. It will be multiplied by 1024 in the index queue.\nexport const DEFAULT_BUFFER_SIZE = 5120;\n\n// The default number of docs to fetch in a single search request when reindexing.\nexport const DEFAULT_SEARCH_SIZE = 1000;\n","export default function createMappingFactory({\n sourceClient,\n sourceIndexName,\n targetClient,\n targetIndexName,\n mappings,\n inferredIngestPipeline,\n mappingsOverride,\n indexMappingTotalFieldsLimit,\n deleteIndex,\n pipeline,\n logger,\n}) {\n return async () => {\n let targetMappings = mappingsOverride ? undefined : mappings;\n let defaultPipeline = pipeline;\n\n if (sourceClient && sourceIndexName && typeof targetMappings === 'undefined') {\n try {\n const mapping = await sourceClient.indices.getMapping({\n index: sourceIndexName,\n });\n if (mapping[sourceIndexName]) {\n targetMappings = mapping[sourceIndexName].mappings;\n } else {\n const allMappings = Object.values(mapping);\n if (allMappings.length > 0) {\n targetMappings = Object.values(mapping)[0].mappings;\n }\n }\n } catch (err) {\n logger.error({ err, sourceIndexName }, 'Error reading source mapping');\n return;\n }\n }\n\n if (typeof targetMappings === 'object' && targetMappings !== null) {\n if (mappingsOverride) {\n targetMappings = {\n ...targetMappings,\n properties: {\n ...targetMappings.properties,\n ...mappings,\n },\n };\n }\n\n try {\n const indexExists = await targetClient.indices.exists({ index: targetIndexName });\n\n if (indexExists === true && deleteIndex === true) {\n await targetClient.indices.delete({ index: targetIndexName });\n }\n\n if (indexExists === false || deleteIndex === true) {\n if (\n typeof defaultPipeline === 'undefined' &&\n typeof inferredIngestPipeline === 'object' &&\n inferredIngestPipeline !== null &&\n typeof targetClient?.ingest?.putPipeline === 'function'\n ) {\n const inferredPipelineName = `${targetIndexName}-inferred-pipeline`;\n\n try {\n await targetClient.ingest.putPipeline({\n id: inferredPipelineName,\n ...inferredIngestPipeline,\n });\n defaultPipeline = inferredPipelineName;\n logger.info({ inferredPipelineName }, 'Created inferred ingest pipeline');\n } catch (err) {\n logger.error(\n { err, inferredPipelineName },\n 'Error creating inferred ingest pipeline',\n );\n }\n }\n\n const settings = {\n ...(defaultPipeline !== undefined\n ? {\n 'index.default_pipeline': defaultPipeline,\n }\n : {}),\n ...(indexMappingTotalFieldsLimit !== undefined\n ? {\n 'index.mapping.total_fields.limit': indexMappingTotalFieldsLimit,\n 'index.number_of_shards': 1,\n 'index.number_of_replicas': 0,\n }\n : {}),\n };\n\n const response = await targetClient.indices.create({\n index: targetIndexName,\n mappings: targetMappings,\n ...(Object.keys(settings).length > 0 ? { settings } : {}),\n });\n logger.info({ targetIndexName, response }, 'Created target mapping');\n }\n } catch (err) {\n logger.error({ err, targetIndexName }, 'Error creating target mapping');\n }\n }\n };\n}\n","export default function getCsvParserOptions(csvOptions = {}, skipHeader = false) {\n const options = {\n bom: true,\n columns: true,\n trim: true,\n skip_empty_lines: true,\n ...csvOptions,\n };\n\n const consumesHeader = options.columns === true || typeof options.columns === 'function';\n\n if (skipHeader && !consumesHeader && typeof options.from_line === 'undefined') {\n options.from_line = 2;\n }\n\n return options;\n}\n","import parquet from '@dsnp/parquetjs';\nimport * as arrow from 'apache-arrow';\nimport fs from 'fs';\nimport { parse } from 'csv-parse';\nimport es from 'event-stream';\nimport { globSync } from 'glob';\nimport split from 'split2';\n\nimport getCsvParserOptions from './_csv-parser-options';\n\nfunction createPauseWaiter(queueEmitter) {\n let paused = false;\n let waiters = [];\n\n const onPause = () => {\n paused = true;\n };\n\n const onResume = () => {\n paused = false;\n waiters.forEach(resolve => resolve());\n waiters = [];\n };\n\n queueEmitter.on('pause', onPause);\n queueEmitter.on('resume', onResume);\n\n return {\n async waitIfPaused() {\n if (!paused) return;\n\n await new Promise(resolve => {\n waiters.push(resolve);\n });\n },\n cleanup() {\n queueEmitter.removeListener('pause', onPause);\n queueEmitter.removeListener('resume', onResume);\n waiters.forEach(resolve => resolve());\n waiters = [];\n },\n };\n}\n\nexport default function fileReaderFactory(\n indexer,\n fileName,\n transform,\n splitRegex,\n skipHeader = false,\n sourceFormat = 'ndjson',\n csvOptions = {},\n logger,\n) {\n function addParsedDoc(parsed, file) {\n const context = { fileName: file };\n const doc = typeof transform === 'function' ? transform(parsed, context) : parsed;\n\n // if doc is null/undefined we'll skip indexing it\n if (doc === null || typeof doc === 'undefined') {\n return;\n }\n\n // the transform callback may return an array of docs so we can emit\n // multiple docs from a single line\n if (Array.isArray(doc)) {\n doc.forEach(d => {\n if (d === null || typeof d === 'undefined') return;\n indexer.add(d);\n });\n return;\n }\n\n indexer.add(doc);\n }\n\n async function processParquetFile(file) {\n const { waitIfPaused, cleanup } = createPauseWaiter(indexer.queueEmitter);\n const reader = await parquet.ParquetReader.openFile(file);\n\n try {\n const cursor = reader.getCursor();\n\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const row = await cursor.next();\n\n if (row === null || typeof row === 'undefined') {\n break;\n }\n\n addParsedDoc(row, file);\n // eslint-disable-next-line no-await-in-loop\n await waitIfPaused();\n }\n\n logger.info({ file }, 'Read entire file');\n } finally {\n cleanup();\n await reader.close();\n }\n }\n\n async function processArrowFile(file) {\n const { waitIfPaused, cleanup } = createPauseWaiter(indexer.queueEmitter);\n\n try {\n const reader = await arrow.RecordBatchReader.from(fs.createReadStream(file));\n\n for await (const recordBatch of reader) {\n const { fields } = recordBatch.schema;\n\n for (let rowIndex = 0; rowIndex < recordBatch.numRows; rowIndex++) {\n const row = {};\n\n fields.forEach(field => {\n const vector = recordBatch.getChild(field.name);\n row[field.name] = vector ? vector.get(rowIndex) : undefined;\n });\n\n addParsedDoc(row, file);\n // eslint-disable-next-line no-await-in-loop\n await waitIfPaused();\n }\n }\n\n logger.info({ file }, 'Read entire file');\n } finally {\n cleanup();\n }\n }\n\n function processStreamFile(file, buildStream, errorMessage) {\n return new Promise((resolve, reject) => {\n let finished = false;\n const s = buildStream();\n\n const onPause = () => {\n if (finished) return;\n s.pause();\n };\n\n const onResume = () => {\n if (finished) return;\n s.resume();\n };\n\n function cleanup() {\n indexer.queueEmitter.removeListener('pause', onPause);\n indexer.queueEmitter.removeListener('resume', onResume);\n }\n\n indexer.queueEmitter.on('pause', onPause);\n indexer.queueEmitter.on('resume', onResume);\n\n s.on('end', () => {\n finished = true;\n cleanup();\n logger.info({ file }, 'Read entire file');\n resolve();\n });\n\n s.on('error', err => {\n finished = true;\n cleanup();\n logger.error({ err, file }, errorMessage);\n reject(err);\n });\n });\n }\n\n function processNdjsonFile(file) {\n let skippedHeader = false;\n\n return processStreamFile(\n file,\n () =>\n fs\n .createReadStream(file)\n .pipe(split(splitRegex))\n .pipe(\n es\n .mapSync(line => {\n try {\n // skip empty lines\n if (line === '') {\n return;\n }\n\n if (skipHeader && !skippedHeader) {\n skippedHeader = true;\n return;\n }\n\n const parsed = JSON.parse(line);\n addParsedDoc(parsed, file);\n } catch (err) {\n logger.error({ err, file }, 'Failed to process NDJSON line');\n }\n })\n .on('error', err => {\n logger.error({ err, file }, 'Error while reading file');\n }),\n ),\n 'Error while reading file',\n );\n }\n\n function processCsvFile(file) {\n const parserOptions = getCsvParserOptions(csvOptions, skipHeader);\n\n return processStreamFile(\n file,\n () =>\n fs\n .createReadStream(file)\n .pipe(parse(parserOptions))\n .pipe(\n es\n .mapSync(record => {\n try {\n addParsedDoc(record, file);\n } catch (err) {\n logger.error({ err, file }, 'Failed to process CSV record');\n }\n })\n .on('error', err => {\n logger.error({ err, file }, 'Error while reading CSV file');\n }),\n ),\n 'Error while reading CSV file',\n );\n }\n\n async function processFile(file) {\n if (sourceFormat === 'csv') {\n await processCsvFile(file);\n return;\n }\n\n if (sourceFormat === 'ndjson') {\n await processNdjsonFile(file);\n return;\n }\n\n if (sourceFormat === 'parquet') {\n await processParquetFile(file);\n return;\n }\n\n if (sourceFormat === 'arrow') {\n await processArrowFile(file);\n return;\n }\n\n throw Error(`Unsupported sourceFormat: ${sourceFormat}`);\n }\n\n async function startIndex(files) {\n if (files.length === 0) {\n indexer.finish();\n return;\n }\n\n try {\n for (const file of files) {\n // eslint-disable-next-line no-await-in-loop\n await processFile(file);\n }\n } catch (err) {\n logger.error({ err, files }, 'Error while processing files');\n } finally {\n indexer.finish();\n }\n }\n\n return () => {\n try {\n const files = globSync(fileName);\n startIndex(files);\n } catch (err) {\n logger.error({ err, fileName }, 'Error matching files');\n indexer.finish();\n }\n };\n}\n","import { PassThrough } from 'stream';\n\nimport { DEFAULT_BUFFER_SIZE } from './_constants';\n\nconst EventEmitter = require('events');\n\nconst parallelCalls = 5;\n\n// a simple helper queue to bulk index documents\nexport default function indexQueueFactory({\n targetClient: client,\n targetIndexName,\n bufferSize = DEFAULT_BUFFER_SIZE,\n logger,\n}) {\n const queueEmitter = new EventEmitter();\n let docsPerSecond = 0;\n\n const flushBytes = bufferSize * 1024; // Convert KB to Bytes\n const highWaterMark = flushBytes * parallelCalls;\n\n // Create a PassThrough stream (readable + writable) for proper backpressure\n const stream = new PassThrough({\n highWaterMark, // Buffer size for backpressure management\n });\n\n async function* ndjsonStreamIterator(readableStream) {\n let buffer = ''; // To hold the incomplete data\n\n try {\n // Iterate over the stream using async iteration\n for await (const chunk of readableStream) {\n buffer += chunk.toString(); // Accumulate the chunk data in the buffer\n\n // Split the buffer into lines (NDJSON items)\n const lines = buffer.split('\\n');\n\n // The last line might be incomplete, so hold it back in the buffer\n buffer = lines.pop();\n\n // Yield each complete JSON object\n for (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n\n try {\n yield JSON.parse(line); // Parse and yield the JSON object\n } catch (err) {\n logger.error({ err }, 'Failed to parse JSON from NDJSON stream');\n }\n }\n }\n\n // Handle any remaining data in the buffer after the stream ends\n if (buffer.trim()) {\n try {\n yield JSON.parse(buffer);\n } catch (err) {\n logger.error({ err }, 'Failed to parse final JSON from NDJSON stream');\n }\n }\n } finally {\n // Ensure the stream is properly cleaned up if the iterator is terminated early\n if (!readableStream.destroyed) {\n readableStream.destroy();\n }\n }\n }\n\n let finished = false;\n let drainListener = null;\n\n // Async IIFE to start bulk indexing\n (async () => {\n const interval = setInterval(() => {\n queueEmitter.emit('docsPerSecond', docsPerSecond);\n docsPerSecond = 0;\n }, 1000);\n\n try {\n await client.helpers.bulk({\n concurrency: parallelCalls,\n flushBytes,\n flushInterval: 1000,\n refreshOnCompletion: true,\n datasource: ndjsonStreamIterator(stream),\n onDocument() {\n docsPerSecond++;\n return {\n index: { _index: targetIndexName },\n };\n },\n });\n } catch (err) {\n logger.error({ err, targetIndexName }, 'Error during bulk indexing');\n queueEmitter.emit('error', err);\n throw err;\n } finally {\n // Clean up interval\n clearInterval(interval);\n\n // Remove drain listener if it exists\n if (drainListener) {\n stream.removeListener('drain', drainListener);\n drainListener = null;\n }\n\n // Remove all listeners from stream\n stream.removeAllListeners();\n\n // Properly destroy the stream to prevent open handles\n if (!stream.destroyed) {\n stream.destroy();\n }\n\n // Emit finish and clean up queue emitter listeners\n queueEmitter.emit('finish');\n queueEmitter.removeAllListeners();\n }\n })();\n\n return {\n add: doc => {\n if (finished) {\n throw new Error('Unexpected doc added after indexer should finish.');\n }\n\n const canContinue = stream.write(`${JSON.stringify(doc)}\\n`);\n if (!canContinue) {\n queueEmitter.emit('pause');\n\n // Store the listener so we can clean it up later\n drainListener = () => {\n queueEmitter.emit('resume');\n };\n stream.once('drain', drainListener);\n }\n },\n finish: () => {\n finished = true;\n stream.end();\n },\n queueEmitter,\n };\n}\n","import cliProgress from 'cli-progress';\n\nimport { DEFAULT_SEARCH_SIZE } from './_constants';\n\n// create a new progress bar instance and use shades_classic theme\nconst progressBar = new cliProgress.SingleBar({}, cliProgress.Presets.shades_classic);\n\nexport default function indexReaderFactory(\n indexer,\n sourceIndexName,\n transform,\n client,\n query,\n searchSize = DEFAULT_SEARCH_SIZE,\n populatedFields = false,\n logger,\n) {\n return async function indexReader() {\n let docsNum = 0;\n let scrollId;\n let finished = false;\n let readActive = false;\n let backPressurePause = false;\n\n async function fetchPopulatedFields() {\n try {\n // Get all populated fields from the index\n const response = await client.fieldCaps(\n {\n index: sourceIndexName,\n fields: '*',\n include_empty_fields: false,\n filters: '-metadata',\n },\n { maxRetries: 0 },\n );\n\n return Object.keys(response.fields);\n } catch (err) {\n logger.error({ err, sourceIndexName }, 'Failed to fetch populated fields');\n }\n }\n\n function search(fields) {\n return client.search({\n index: sourceIndexName,\n scroll: '600s',\n size: searchSize,\n query,\n ...(fields ? { _source: fields } : {}),\n });\n }\n\n function scroll(id) {\n return client.scroll({\n scroll_id: id,\n scroll: '600s',\n });\n }\n\n let fieldsWithData;\n\n // identify populated fields\n if (populatedFields) {\n fieldsWithData = await fetchPopulatedFields();\n }\n\n await fetchNextResponse();\n\n function processHit(hit) {\n docsNum += 1;\n try {\n const doc = typeof transform === 'function' ? transform(hit._source) : hit._source; // eslint-disable-line no-underscore-dangle\n\n // if doc is undefined we'll skip indexing it\n if (typeof doc === 'undefined') {\n return;\n }\n\n // the transform callback may return an array of docs so we can emit\n // multiple docs from a single line\n if (Array.isArray(doc)) {\n doc.forEach(d => indexer.add(d));\n return;\n }\n\n indexer.add(doc);\n } catch (err) {\n logger.error({ err }, 'Failed to process source index document');\n }\n }\n\n async function fetchNextResponse() {\n readActive = true;\n\n const sc = scrollId ? await scroll(scrollId) : await search(fieldsWithData);\n\n if (!scrollId) {\n progressBar.start(sc.hits.total.value, 0);\n }\n\n scrollId = sc._scroll_id;\n readActive = false;\n\n processResponse(sc);\n }\n\n async function processResponse(response) {\n // collect the docs from this response\n response.hits.hits.forEach(processHit);\n\n progressBar.update(docsNum);\n\n // check to see if we have collected all of the docs\n if (response.hits.total.value === docsNum) {\n indexer.finish();\n return;\n }\n\n if (!backPressurePause) {\n await fetchNextResponse();\n }\n }\n\n indexer.queueEmitter.on('pause', async () => {\n backPressurePause = true;\n });\n\n indexer.queueEmitter.on('resume', async () => {\n backPressurePause = false;\n\n if (readActive || finished) {\n return;\n }\n\n await fetchNextResponse();\n });\n\n indexer.queueEmitter.on('finish', () => {\n finished = true;\n progressBar.stop();\n });\n };\n}\n","import fs from 'fs';\nimport { globSync } from 'glob';\n\nconst DEFAULT_INFER_MAPPINGS_SAMPLE_BYTES = 100000;\nconst DEFAULT_INFER_MAPPINGS_LINES_TO_SAMPLE = 1000;\n\nfunction readSample(filePath, sampleBytes) {\n const fd = fs.openSync(filePath, 'r');\n\n try {\n const buffer = Buffer.alloc(sampleBytes);\n const bytesRead = fs.readSync(fd, buffer, 0, sampleBytes, 0);\n return buffer.subarray(0, bytesRead).toString('utf8');\n } finally {\n fs.closeSync(fd);\n }\n}\n\nfunction emptyInferenceResult(mappings) {\n return {\n mappings,\n ingestPipeline: undefined,\n };\n}\n\nexport default async function inferMappingsFromSource({\n targetClient,\n fileName,\n sourceFormat,\n csvOptions,\n skipHeader,\n mappings,\n inferMappings,\n inferMappingsOptions,\n logger,\n}) {\n if (!inferMappings || typeof mappings !== 'undefined' || typeof fileName === 'undefined') {\n return emptyInferenceResult(mappings);\n }\n\n if (sourceFormat !== 'ndjson' && sourceFormat !== 'csv') {\n logger.info(\n {\n sourceFormat,\n },\n 'Skipping mapping inference. Inference is only supported for ndjson and csv.',\n );\n\n return emptyInferenceResult(mappings);\n }\n\n if (\n typeof targetClient?.textStructure?.findStructure !== 'function' ||\n sourceFormat === 'xml' ||\n sourceFormat === 'semi_structured_text'\n ) {\n return emptyInferenceResult(mappings);\n }\n\n const files = globSync(fileName);\n\n if (files.length === 0) {\n logger.info({ fileName }, 'No files matched for mapping inference');\n return emptyInferenceResult(mappings);\n }\n\n const { sampleBytes = DEFAULT_INFER_MAPPINGS_SAMPLE_BYTES, ...requestParams } =\n inferMappingsOptions || {};\n\n const sampleText = readSample(files[0], sampleBytes);\n\n if (!sampleText || sampleText.trim() === '') {\n logger.info('Skipping mapping inference because the sample text is empty');\n return emptyInferenceResult(mappings);\n }\n\n const params = {\n body: sampleText,\n lines_to_sample: DEFAULT_INFER_MAPPINGS_LINES_TO_SAMPLE,\n ...requestParams,\n };\n\n if (typeof params.format === 'undefined') {\n params.format = sourceFormat === 'csv' ? 'delimited' : 'ndjson';\n }\n\n if (sourceFormat === 'csv') {\n if (typeof params.delimiter === 'undefined' && typeof csvOptions?.delimiter === 'string') {\n params.delimiter = csvOptions.delimiter;\n }\n\n if (typeof params.quote === 'undefined' && typeof csvOptions?.quote === 'string') {\n params.quote = csvOptions.quote;\n }\n\n if (typeof params.has_header_row === 'undefined' && typeof csvOptions?.columns === 'boolean') {\n params.has_header_row = csvOptions.columns;\n }\n\n if (typeof params.has_header_row === 'undefined' && skipHeader) {\n params.has_header_row = true;\n }\n }\n\n try {\n const response = await targetClient.textStructure.findStructure(params);\n\n if (response?.mappings) {\n logger.info({ file: files[0] }, 'Inferred mappings via _text_structure/find_structure');\n }\n\n if (response?.ingest_pipeline) {\n logger.info('Inferred ingest pipeline via _text_structure/find_structure');\n }\n\n return {\n mappings: response?.mappings || mappings,\n ingestPipeline: response?.ingest_pipeline,\n };\n } catch (err) {\n logger.warn({ err }, 'Could not infer mappings via _text_structure/find_structure');\n\n return emptyInferenceResult(mappings);\n }\n}\n","import pino from 'pino';\n\nconst DEFAULT_LOG_LEVEL = 'info';\n\nfunction resolveLogLevel(verbose = true) {\n if (typeof process.env.LOG_LEVEL === 'string' && process.env.LOG_LEVEL.trim() !== '') {\n return process.env.LOG_LEVEL;\n }\n\n return verbose ? DEFAULT_LOG_LEVEL : 'error';\n}\n\nexport default function createLogger({ logger, verbose = true } = {}) {\n if (logger && typeof logger === 'object') {\n return logger;\n }\n\n return pino({\n name: 'node-es-transformer',\n level: resolveLogLevel(verbose),\n timestamp: pino.stdTimeFunctions.isoTime,\n serializers: {\n err: pino.stdSerializers.err,\n error: pino.stdSerializers.err,\n },\n });\n}\n\nexport function createChildLogger(logger, bindings) {\n if (!logger || typeof logger.child !== 'function') {\n return logger;\n }\n\n return logger.child(bindings);\n}\n","import parquet from '@dsnp/parquetjs';\nimport * as arrow from 'apache-arrow';\nimport { parse } from 'csv-parse';\nimport es from 'event-stream';\nimport split from 'split2';\n\nimport getCsvParserOptions from './_csv-parser-options';\n\nfunction createPauseWaiter(queueEmitter) {\n let paused = false;\n let waiters = [];\n\n const onPause = () => {\n paused = true;\n };\n\n const onResume = () => {\n paused = false;\n waiters.forEach(resolve => resolve());\n waiters = [];\n };\n\n queueEmitter.on('pause', onPause);\n queueEmitter.on('resume', onResume);\n\n return {\n async waitIfPaused() {\n if (!paused) return;\n\n await new Promise(resolve => {\n waiters.push(resolve);\n });\n },\n cleanup() {\n queueEmitter.removeListener('pause', onPause);\n queueEmitter.removeListener('resume', onResume);\n waiters.forEach(resolve => resolve());\n waiters = [];\n },\n };\n}\n\nasync function readStreamToBuffer(stream) {\n const chunks = [];\n\n for await (const chunk of stream) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n\n return Buffer.concat(chunks);\n}\n\nexport default function streamReaderFactory(\n indexer,\n stream,\n transform,\n splitRegex,\n skipHeader = false,\n sourceFormat = 'ndjson',\n csvOptions = {},\n logger,\n) {\n function addParsedDoc(parsed) {\n const doc = typeof transform === 'function' ? transform(parsed) : parsed;\n\n // if doc is null/undefined we'll skip indexing it\n if (doc === null || typeof doc === 'undefined') {\n return;\n }\n\n // the transform callback may return an array of docs so we can emit\n // multiple docs from a single line\n if (Array.isArray(doc)) {\n doc.forEach(d => {\n if (d === null || typeof d === 'undefined') return;\n indexer.add(d);\n });\n return;\n }\n\n indexer.add(doc);\n }\n\n async function processParquetStream() {\n const { waitIfPaused, cleanup } = createPauseWaiter(indexer.queueEmitter);\n\n const parquetBuffer = await readStreamToBuffer(stream);\n const reader = await parquet.ParquetReader.openBuffer(parquetBuffer);\n\n try {\n const cursor = reader.getCursor();\n\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const row = await cursor.next();\n\n if (row === null || typeof row === 'undefined') {\n break;\n }\n\n addParsedDoc(row);\n // eslint-disable-next-line no-await-in-loop\n await waitIfPaused();\n }\n\n logger.info('Read entire stream');\n } finally {\n cleanup();\n await reader.close();\n }\n }\n\n async function processArrowStream() {\n const { waitIfPaused, cleanup } = createPauseWaiter(indexer.queueEmitter);\n\n try {\n const reader = await arrow.RecordBatchReader.from(stream);\n\n for await (const recordBatch of reader) {\n const { fields } = recordBatch.schema;\n\n for (let rowIndex = 0; rowIndex < recordBatch.numRows; rowIndex++) {\n const row = {};\n\n fields.forEach(field => {\n const vector = recordBatch.getChild(field.name);\n row[field.name] = vector ? vector.get(rowIndex) : undefined;\n });\n\n addParsedDoc(row);\n // eslint-disable-next-line no-await-in-loop\n await waitIfPaused();\n }\n }\n\n logger.info('Read entire stream');\n } finally {\n cleanup();\n }\n }\n\n function processPipeline(buildPipeline, errorMessage) {\n return new Promise((resolve, reject) => {\n let finished = false;\n const s = buildPipeline();\n\n const onPause = () => {\n if (finished) return;\n s.pause();\n };\n\n const onResume = () => {\n if (finished) return;\n s.resume();\n };\n\n function cleanup() {\n indexer.queueEmitter.removeListener('pause', onPause);\n indexer.queueEmitter.removeListener('resume', onResume);\n }\n\n indexer.queueEmitter.on('pause', onPause);\n indexer.queueEmitter.on('resume', onResume);\n\n s.on('end', () => {\n finished = true;\n cleanup();\n logger.info('Read entire stream');\n resolve();\n });\n\n s.on('error', err => {\n finished = true;\n cleanup();\n logger.error({ err }, errorMessage);\n reject(err);\n });\n });\n }\n\n function processCsvStream() {\n return processPipeline(\n () =>\n stream.pipe(parse(getCsvParserOptions(csvOptions, skipHeader))).pipe(\n es\n .mapSync(record => {\n try {\n addParsedDoc(record);\n } catch (err) {\n logger.error({ err }, 'Failed to process CSV stream record');\n }\n })\n .on('error', err => {\n logger.error({ err }, 'Error while reading CSV stream');\n }),\n ),\n 'Error while reading CSV stream',\n );\n }\n\n function processNdjsonStream() {\n let skippedHeader = false;\n\n return processPipeline(\n () =>\n stream.pipe(split(splitRegex)).pipe(\n es\n .mapSync(line => {\n try {\n // skip empty lines\n if (line === '') {\n return;\n }\n\n if (skipHeader && !skippedHeader) {\n skippedHeader = true;\n return;\n }\n\n const parsed = JSON.parse(line);\n addParsedDoc(parsed);\n } catch (err) {\n logger.error({ err }, 'Failed to process NDJSON stream line');\n }\n })\n .on('error', err => {\n logger.error({ err }, 'Error while reading stream');\n }),\n ),\n 'Error while reading stream',\n );\n }\n\n async function startIndex() {\n try {\n if (sourceFormat === 'csv') {\n await processCsvStream();\n } else if (sourceFormat === 'ndjson') {\n await processNdjsonStream();\n } else if (sourceFormat === 'parquet') {\n await processParquetStream();\n } else if (sourceFormat === 'arrow') {\n await processArrowStream();\n } else {\n throw Error(`Unsupported sourceFormat: ${sourceFormat}`);\n }\n } catch (err) {\n logger.error({ err }, 'Error while reading stream');\n } finally {\n indexer.finish();\n }\n }\n\n return () => {\n startIndex();\n };\n}\n","import elasticsearch9 from 'es9';\nimport elasticsearch8 from 'es8';\n\nimport { DEFAULT_BUFFER_SIZE, DEFAULT_SEARCH_SIZE } from './_constants';\nimport createMappingFactory from './_create-mapping';\nimport fileReaderFactory from './_file-reader';\nimport indexQueueFactory from './_index-queue';\nimport indexReaderFactory from './_index-reader';\nimport inferMappingsFromSource from './_infer-mappings';\nimport createLogger, { createChildLogger } from './_logger';\nimport streamReaderFactory from './_stream-reader';\n\n/**\n * Detect Elasticsearch version by querying the cluster\n */\nasync function detectElasticsearchVersion(config) {\n try {\n // Try with v9 client first (most common for new setups)\n const testClient = new elasticsearch9.Client(config);\n const info = await testClient.info();\n const version = info.version?.number;\n await testClient.close();\n\n if (version) {\n const majorVersion = parseInt(version.split('.')[0], 10);\n return majorVersion;\n }\n } catch (e) {\n // If v9 client fails, try v8 client\n try {\n const testClient = new elasticsearch8.Client(config);\n const info = await testClient.info();\n const version = info.version?.number;\n await testClient.close();\n\n if (version) {\n const majorVersion = parseInt(version.split('.')[0], 10);\n return majorVersion;\n }\n } catch (e2) {\n // Could not detect version\n }\n }\n\n // Default to v9 if detection fails\n return 9;\n}\n\n/**\n * Create or validate an Elasticsearch client\n * @param {Object|Client} clientOrConfig - Either a client instance or config object\n * @param {Object} defaultConfig - Default configuration to use if creating a new client\n * @param {number} [forceVersion] - Force a specific ES client version (8 or 9)\n */\nasync function getOrCreateClient(clientOrConfig, defaultConfig, forceVersion) {\n // If already a client instance, return it\n if (clientOrConfig && typeof clientOrConfig.info === 'function') {\n return clientOrConfig;\n }\n\n const config = clientOrConfig || defaultConfig;\n\n // If version is forced, use the specified client\n if (forceVersion === 8) {\n return new elasticsearch8.Client(config);\n } else if (forceVersion === 9) {\n return new elasticsearch9.Client(config);\n }\n\n // Auto-detect version\n const majorVersion = await detectElasticsearchVersion(config);\n\n if (majorVersion >= 9) {\n return new elasticsearch9.Client(config);\n } else {\n return new elasticsearch8.Client(config);\n }\n}\n\nexport default async function transformer({\n deleteIndex = false,\n sourceClient: sourceClientInput,\n targetClient: targetClientInput,\n sourceClientConfig,\n targetClientConfig,\n sourceClientVersion,\n targetClientVersion,\n bufferSize = DEFAULT_BUFFER_SIZE,\n searchSize = DEFAULT_SEARCH_SIZE,\n stream,\n fileName,\n sourceFormat = 'ndjson',\n csvOptions = {},\n splitRegex = /\\n/,\n sourceIndexName,\n targetIndexName,\n mappings,\n mappingsOverride = false,\n inferMappings = false,\n inferMappingsOptions = {},\n indexMappingTotalFieldsLimit,\n pipeline,\n populatedFields = false,\n query,\n skipHeader = false,\n transform,\n verbose = true,\n logger: loggerInput,\n}) {\n if (typeof targetIndexName === 'undefined') {\n throw Error('targetIndexName must be specified.');\n }\n\n const logger = createLogger({ logger: loggerInput, verbose });\n\n const defaultClientConfig = {\n node: process.env.ELASTICSEARCH_URL || 'http://localhost:9200',\n };\n\n // Support both old (config) and new (client instance) patterns\n const sourceClient = await getOrCreateClient(\n sourceClientInput || sourceClientConfig,\n defaultClientConfig,\n sourceClientVersion,\n );\n\n const targetClient = await getOrCreateClient(\n targetClientInput || targetClientConfig || sourceClientInput || sourceClientConfig,\n defaultClientConfig,\n targetClientVersion,\n );\n\n const inferenceResult = await inferMappingsFromSource({\n targetClient,\n fileName,\n sourceFormat,\n csvOptions,\n skipHeader,\n mappings,\n inferMappings,\n inferMappingsOptions,\n logger: createChildLogger(logger, { component: 'mapping-inference' }),\n });\n\n const createMapping = createMappingFactory({\n sourceClient,\n sourceIndexName,\n targetClient,\n targetIndexName,\n mappings: inferenceResult.mappings,\n inferredIngestPipeline: inferenceResult.ingestPipeline,\n mappingsOverride,\n indexMappingTotalFieldsLimit,\n deleteIndex,\n pipeline,\n logger: createChildLogger(logger, { component: 'create-mapping' }),\n });\n const indexer = indexQueueFactory({\n targetClient,\n targetIndexName,\n bufferSize,\n logger: createChildLogger(logger, { component: 'index-queue' }),\n });\n\n function validateSourceFormat() {\n if (\n sourceFormat !== 'ndjson' &&\n sourceFormat !== 'csv' &&\n sourceFormat !== 'parquet' &&\n sourceFormat !== 'arrow'\n ) {\n throw Error(\n `Unsupported sourceFormat: ${sourceFormat}. Use \"ndjson\", \"csv\", \"parquet\", or \"arrow\".`,\n );\n }\n }\n\n function getReader() {\n if (typeof fileName !== 'undefined' && typeof sourceIndexName !== 'undefined') {\n throw Error('Only either one of fileName or sourceIndexName can be specified.');\n }\n\n if (\n (typeof fileName !== 'undefined' && typeof sourceIndexName !== 'undefined') ||\n (typeof fileName !== 'undefined' && typeof stream !== 'undefined') ||\n (typeof sourceIndexName !== 'undefined' && typeof stream !== 'undefined')\n ) {\n throw Error('Only one of fileName, sourceIndexName, or stream can be specified.');\n }\n\n if (typeof fileName !== 'undefined') {\n validateSourceFormat();\n return fileReaderFactory(\n indexer,\n fileName,\n transform,\n splitRegex,\n skipHeader,\n sourceFormat,\n csvOptions,\n createChildLogger(logger, { component: 'file-reader' }),\n );\n }\n\n if (typeof sourceIndexName !== 'undefined') {\n return indexReaderFactory(\n indexer,\n sourceIndexName,\n transform,\n sourceClient,\n query,\n searchSize,\n populatedFields,\n createChildLogger(logger, { component: 'index-reader' }),\n );\n }\n\n if (typeof stream !== 'undefined') {\n validateSourceFormat();\n return streamReaderFactory(\n indexer,\n stream,\n transform,\n splitRegex,\n skipHeader,\n sourceFormat,\n csvOptions,\n createChildLogger(logger, { component: 'stream-reader' }),\n );\n }\n\n return null;\n }\n\n const reader = getReader();\n\n if (typeof reader !== 'function') {\n throw Error('One of fileName, sourceIndexName, or stream must be specified.');\n }\n\n try {\n const indexExists = await targetClient.indices.exists({ index: targetIndexName });\n\n if (indexExists === false) {\n await createMapping();\n reader();\n } else if (deleteIndex === true) {\n await targetClient.indices.delete({ index: targetIndexName });\n await createMapping();\n reader();\n } else {\n reader();\n }\n } catch (err) {\n logger.error({ err, targetIndexName }, 'Error checking index existence');\n } finally {\n // targetClient.close();\n }\n\n return { events: indexer.queueEmitter };\n}\n"],"names":["DEFAULT_BUFFER_SIZE","DEFAULT_SEARCH_SIZE","createMappingFactory","sourceClient","sourceIndexName","targetClient","targetIndexName","mappings","inferredIngestPipeline","mappingsOverride","indexMappingTotalFieldsLimit","deleteIndex","pipeline","logger","targetMappings","undefined","defaultPipeline","mapping","indices","getMapping","index","allMappings","Object","values","length","err","error","properties","indexExists","exists","delete","ingest","putPipeline","inferredPipelineName","id","info","settings","response","create","keys","getCsvParserOptions","csvOptions","skipHeader","options","bom","columns","trim","skip_empty_lines","consumesHeader","from_line","createPauseWaiter","queueEmitter","paused","waiters","onPause","onResume","forEach","resolve","on","waitIfPaused","Promise","push","cleanup","removeListener","fileReaderFactory","indexer","fileName","transform","splitRegex","sourceFormat","addParsedDoc","parsed","file","context","doc","Array","isArray","d","add","processParquetFile","reader","parquet","ParquetReader","openFile","cursor","getCursor","row","next","close","processArrowFile","arrow","RecordBatchReader","from","fs","createReadStream","recordBatch","fields","schema","rowIndex","numRows","field","vector","getChild","name","get","processStreamFile","buildStream","errorMessage","reject","finished","s","pause","resume","processNdjsonFile","skippedHeader","pipe","split","es","mapSync","line","JSON","parse","processCsvFile","parserOptions","record","processFile","Error","startIndex","files","finish","globSync","EventEmitter","require","parallelCalls","indexQueueFactory","client","bufferSize","docsPerSecond","flushBytes","highWaterMark","stream","PassThrough","ndjsonStreamIterator","readableStream","buffer","chunk","toString","lines","pop","destroyed","destroy","drainListener","interval","setInterval","emit","helpers","bulk","concurrency","flushInterval","refreshOnCompletion","datasource","onDocument","_index","clearInterval","removeAllListeners","canContinue","write","stringify","once","end","progressBar","cliProgress","SingleBar","Presets","shades_classic","indexReaderFactory","query","searchSize","populatedFields","indexReader","docsNum","scrollId","readActive","backPressurePause","fetchPopulatedFields","fieldCaps","include_empty_fields","filters","maxRetries","search","scroll","size","_source","scroll_id","fieldsWithData","fetchNextResponse","processHit","hit","sc","start","hits","total","value","_scroll_id","processResponse","update","stop","DEFAULT_INFER_MAPPINGS_SAMPLE_BYTES","DEFAULT_INFER_MAPPINGS_LINES_TO_SAMPLE","readSample","filePath","sampleBytes","fd","openSync","Buffer","alloc","bytesRead","readSync","subarray","closeSync","emptyInferenceResult","ingestPipeline","inferMappingsFromSource","inferMappings","inferMappingsOptions","textStructure","findStructure","requestParams","sampleText","params","body","lines_to_sample","format","delimiter","quote","has_header_row","ingest_pipeline","warn","DEFAULT_LOG_LEVEL","resolveLogLevel","verbose","process","env","LOG_LEVEL","createLogger","pino","level","timestamp","stdTimeFunctions","isoTime","serializers","stdSerializers","createChildLogger","bindings","child","readStreamToBuffer","chunks","isBuffer","concat","streamReaderFactory","processParquetStream","parquetBuffer","openBuffer","processArrowStream","processPipeline","buildPipeline","processCsvStream","processNdjsonStream","detectElasticsearchVersion","config","testClient","elasticsearch9","Client","version","number","majorVersion","parseInt","e","elasticsearch8","e2","getOrCreateClient","clientOrConfig","defaultConfig","forceVersion","transformer","sourceClientInput","targetClientInput","sourceClientConfig","targetClientConfig","sourceClientVersion","targetClientVersion","loggerInput","defaultClientConfig","node","ELASTICSEARCH_URL","inferenceResult","component","createMapping","validateSourceFormat","getReader","events"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -65,6 +65,19 @@ export type TransformFunction = (
65
65
  context?: TransformContext
66
66
  ) => any | any[] | null | undefined;
67
67
 
68
+ /**
69
+ * Optional logger interface (Pino-compatible)
70
+ */
71
+ export interface TransformerLogger {
72
+ trace?: (obj: unknown, msg?: string, ...args: any[]) => void;
73
+ debug?: (obj: unknown, msg?: string, ...args: any[]) => void;
74
+ info?: (obj: unknown, msg?: string, ...args: any[]) => void;
75
+ warn?: (obj: unknown, msg?: string, ...args: any[]) => void;
76
+ error?: (obj: unknown, msg?: string, ...args: any[]) => void;
77
+ fatal?: (obj: unknown, msg?: string, ...args: any[]) => void;
78
+ child?: (bindings: Record<string, unknown>) => TransformerLogger;
79
+ }
80
+
68
81
  /**
69
82
  * Configuration options for node-es-transformer
70
83
  */
@@ -145,7 +158,7 @@ export interface TransformerOptions {
145
158
  * Source format for file/stream ingestion
146
159
  * @default 'ndjson'
147
160
  */
148
- sourceFormat?: 'ndjson' | 'csv';
161
+ sourceFormat?: 'ndjson' | 'csv' | 'parquet' | 'arrow';
149
162
 
150
163
  /**
151
164
  * CSV parser options when sourceFormat is 'csv'
@@ -179,6 +192,7 @@ export interface TransformerOptions {
179
192
 
180
193
  /**
181
194
  * Infer mappings for file sources via _text_structure/find_structure
195
+ * Supported for sourceFormat 'ndjson' and 'csv' only
182
196
  * Ignored when mappings is explicitly provided
183
197
  * If inference returns an ingest pipeline and pipeline is not explicitly set,
184
198
  * the inferred pipeline is created and applied as default index pipeline.
@@ -217,6 +231,7 @@ export interface TransformerOptions {
217
231
  * Skip header line for file/stream ingestion
218
232
  * - NDJSON: skips the first non-empty line
219
233
  * - CSV: skips the first data line only when csvOptions.columns does not consume headers
234
+ * - Parquet/Arrow: ignored
220
235
  * @default false
221
236
  */
222
237
  skipHeader?: boolean;
@@ -227,10 +242,17 @@ export interface TransformerOptions {
227
242
  transform?: TransformFunction;
228
243
 
229
244
  /**
230
- * Enable verbose logging and progress bars
245
+ * Enable verbose logging and progress bars when using the default logger.
246
+ * If LOG_LEVEL is set, that level takes precedence.
231
247
  * @default true
232
248
  */
233
249
  verbose?: boolean;
250
+
251
+ /**
252
+ * Optional custom logger (Pino-compatible). If not provided, an internal
253
+ * Pino logger is created.
254
+ */
255
+ logger?: TransformerLogger;
234
256
  }
235
257
 
236
258
  /**
package/package.json CHANGED
@@ -10,6 +10,8 @@
10
10
  "bulk-indexing",
11
11
  "csv",
12
12
  "json",
13
+ "parquet",
14
+ "arrow",
13
15
  "streaming",
14
16
  "etl",
15
17
  "elasticsearch-8",
@@ -30,7 +32,7 @@
30
32
  "license": "Apache-2.0",
31
33
  "author": "Walter M. Rafelsberger <walter@rafelsberger.at>",
32
34
  "contributors": [],
33
- "version": "1.1.0",
35
+ "version": "1.2.0",
34
36
  "engines": {
35
37
  "node": ">=22.0.0"
36
38
  },
@@ -38,12 +40,15 @@
38
40
  "module": "dist/node-es-transformer.esm.js",
39
41
  "types": "index.d.ts",
40
42
  "dependencies": {
43
+ "@dsnp/parquetjs": "^1.8.7",
44
+ "apache-arrow": "^21.1.0",
41
45
  "cli-progress": "^3.12.0",
42
- "csv-parse": "^5.6.0",
46
+ "csv-parse": "^6.1.0",
43
47
  "es8": "npm:@elastic/elasticsearch@^8.17.0",
44
48
  "es9": "npm:@elastic/elasticsearch@^9.2.0",
45
- "event-stream": "^3.3.4",
49
+ "event-stream": "^4.0.1",
46
50
  "glob": "^13.0.3",
51
+ "pino": "^10.1.0",
47
52
  "split2": "^4.2.0"
48
53
  },
49
54
  "devDependencies": {
@@ -55,13 +60,13 @@
55
60
  "@testcontainers/elasticsearch": "^11.11.0",
56
61
  "async-retry": "^1.3.3",
57
62
  "eslint": "^8.57.0",
58
- "eslint-config-prettier": "^9.0.0",
63
+ "eslint-config-prettier": "^10.1.8",
59
64
  "eslint-plugin-import": "2.32.0",
60
- "eslint-plugin-jest": "^28.10.0",
61
- "eslint-plugin-prettier": "^4.2.5",
65
+ "eslint-plugin-jest": "^29.12.1",
66
+ "eslint-plugin-prettier": "^5.2.1",
62
67
  "git-cz": "^4.9.0",
63
68
  "jest": "^30.2.0",
64
- "prettier": "^2.2.1",
69
+ "prettier": "^3.8.1",
65
70
  "rollup": "4.57.1",
66
71
  "testcontainers": "^11.11.0",
67
72
  "typescript": "^5.7.2"