node-es-transformer 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -344,6 +344,8 @@ Choose **one** of these sources:
|
|
|
344
344
|
- **`sourceFormat`** (`'ndjson' | 'csv' | 'parquet' | 'arrow'`): Format for file/stream sources. Default: `'ndjson'`.
|
|
345
345
|
- `arrow` expects Arrow IPC file/stream payloads.
|
|
346
346
|
- `parquet` stream sources are currently buffered in memory before row iteration (file sources remain streaming by row cursor).
|
|
347
|
+
- `parquet` supports ZSTD-compressed files when running on Node.js 22+ (uses the built-in zlib zstd implementation).
|
|
348
|
+
- `parquet` INT64 values are normalized for JSON: safe-range values become numbers, larger values become strings.
|
|
347
349
|
- **`csvOptions`** (object): CSV parser options (delimiter, quote, columns, etc.) used when `sourceFormat: 'csv'`.
|
|
348
350
|
|
|
349
351
|
#### Client Configuration
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
var elasticsearch9 = require('es9');
|
|
4
4
|
var elasticsearch8 = require('es8');
|
|
5
5
|
var parquet = require('@dsnp/parquetjs');
|
|
6
|
+
var zlib = require('zlib');
|
|
7
|
+
var compression_js = require('@dsnp/parquetjs/dist/lib/compression.js');
|
|
6
8
|
var arrow = require('apache-arrow');
|
|
7
9
|
var fs = require('fs');
|
|
8
10
|
var csvParse = require('csv-parse');
|
|
@@ -149,6 +151,32 @@ function createMappingFactory({
|
|
|
149
151
|
};
|
|
150
152
|
}
|
|
151
153
|
|
|
154
|
+
function registerZstdCompression() {
|
|
155
|
+
if (compression_js.PARQUET_COMPRESSION_METHODS.ZSTD) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (typeof zlib.zstdCompressSync !== 'function' || typeof zlib.zstdDecompressSync !== 'function') {
|
|
159
|
+
compression_js.PARQUET_COMPRESSION_METHODS.ZSTD = {
|
|
160
|
+
deflate() {
|
|
161
|
+
throw new Error('ZSTD compression requires Node.js with zstd support.');
|
|
162
|
+
},
|
|
163
|
+
inflate() {
|
|
164
|
+
throw new Error('ZSTD compression requires Node.js with zstd support.');
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
compression_js.PARQUET_COMPRESSION_METHODS.ZSTD = {
|
|
170
|
+
deflate(value) {
|
|
171
|
+
return zlib.zstdCompressSync(value);
|
|
172
|
+
},
|
|
173
|
+
inflate(value) {
|
|
174
|
+
return zlib.zstdDecompressSync(value);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
registerZstdCompression();
|
|
179
|
+
|
|
152
180
|
function getCsvParserOptions(csvOptions = {}, skipHeader = false) {
|
|
153
181
|
const options = {
|
|
154
182
|
bom: true,
|
|
@@ -406,6 +434,22 @@ function fileReaderFactory(indexer, fileName, transform, splitRegex, skipHeader
|
|
|
406
434
|
|
|
407
435
|
const EventEmitter = require('events');
|
|
408
436
|
const parallelCalls = 5;
|
|
437
|
+
const MAX_SAFE_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);
|
|
438
|
+
const MIN_SAFE_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);
|
|
439
|
+
function coerceBigInt(value) {
|
|
440
|
+
if (value >= MIN_SAFE_BIGINT && value <= MAX_SAFE_BIGINT) {
|
|
441
|
+
return Number(value);
|
|
442
|
+
}
|
|
443
|
+
return value.toString();
|
|
444
|
+
}
|
|
445
|
+
function safeStringify(doc) {
|
|
446
|
+
return JSON.stringify(doc, (_key, value) => {
|
|
447
|
+
if (typeof value === 'bigint') {
|
|
448
|
+
return coerceBigInt(value);
|
|
449
|
+
}
|
|
450
|
+
return value;
|
|
451
|
+
});
|
|
452
|
+
}
|
|
409
453
|
|
|
410
454
|
// a simple helper queue to bulk index documents
|
|
411
455
|
function indexQueueFactory({
|
|
@@ -529,7 +573,7 @@ function indexQueueFactory({
|
|
|
529
573
|
if (finished) {
|
|
530
574
|
throw new Error('Unexpected doc added after indexer should finish.');
|
|
531
575
|
}
|
|
532
|
-
const canContinue = stream$1.write(`${
|
|
576
|
+
const canContinue = stream$1.write(`${safeStringify(doc)}\n`);
|
|
533
577
|
if (!canContinue) {
|
|
534
578
|
queueEmitter.emit('pause');
|
|
535
579
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-es-transformer.cjs.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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"}
|
|
1
|
+
{"version":3,"file":"node-es-transformer.cjs.js","sources":["../src/_constants.js","../src/_create-mapping.js","../src/_parquet.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","import parquet from '@dsnp/parquetjs';\nimport zlib from 'zlib';\nimport { PARQUET_COMPRESSION_METHODS } from '@dsnp/parquetjs/dist/lib/compression.js';\n\nfunction registerZstdCompression() {\n if (PARQUET_COMPRESSION_METHODS.ZSTD) {\n return;\n }\n\n if (\n typeof zlib.zstdCompressSync !== 'function' ||\n typeof zlib.zstdDecompressSync !== 'function'\n ) {\n PARQUET_COMPRESSION_METHODS.ZSTD = {\n deflate() {\n throw new Error('ZSTD compression requires Node.js with zstd support.');\n },\n inflate() {\n throw new Error('ZSTD compression requires Node.js with zstd support.');\n },\n };\n return;\n }\n\n PARQUET_COMPRESSION_METHODS.ZSTD = {\n deflate(value) {\n return zlib.zstdCompressSync(value);\n },\n inflate(value) {\n return zlib.zstdDecompressSync(value);\n },\n };\n}\n\nregisterZstdCompression();\n\nexport default parquet;\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 './_parquet';\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;\nconst MAX_SAFE_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_SAFE_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nfunction coerceBigInt(value) {\n if (value >= MIN_SAFE_BIGINT && value <= MAX_SAFE_BIGINT) {\n return Number(value);\n }\n\n return value.toString();\n}\n\nfunction safeStringify(doc) {\n return JSON.stringify(doc, (_key, value) => {\n if (typeof value === 'bigint') {\n return coerceBigInt(value);\n }\n\n return value;\n });\n}\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(`${safeStringify(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 './_parquet';\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","registerZstdCompression","PARQUET_COMPRESSION_METHODS","ZSTD","zlib","zstdCompressSync","zstdDecompressSync","deflate","Error","inflate","value","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","startIndex","files","finish","globSync","EventEmitter","require","parallelCalls","MAX_SAFE_BIGINT","BigInt","Number","MAX_SAFE_INTEGER","MIN_SAFE_BIGINT","MIN_SAFE_INTEGER","coerceBigInt","toString","safeStringify","stringify","_key","indexQueueFactory","client","bufferSize","docsPerSecond","flushBytes","highWaterMark","stream","PassThrough","ndjsonStreamIterator","readableStream","buffer","chunk","lines","pop","destroyed","destroy","drainListener","interval","setInterval","emit","helpers","bulk","concurrency","flushInterval","refreshOnCompletion","datasource","onDocument","_index","clearInterval","removeAllListeners","canContinue","write","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","_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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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import elasticsearch9 from 'es9';
|
|
2
2
|
import elasticsearch8 from 'es8';
|
|
3
3
|
import parquet from '@dsnp/parquetjs';
|
|
4
|
+
import zlib from 'zlib';
|
|
5
|
+
import { PARQUET_COMPRESSION_METHODS } from '@dsnp/parquetjs/dist/lib/compression.js';
|
|
4
6
|
import * as arrow from 'apache-arrow';
|
|
5
7
|
import fs from 'fs';
|
|
6
8
|
import { parse } from 'csv-parse';
|
|
@@ -128,6 +130,32 @@ function createMappingFactory({
|
|
|
128
130
|
};
|
|
129
131
|
}
|
|
130
132
|
|
|
133
|
+
function registerZstdCompression() {
|
|
134
|
+
if (PARQUET_COMPRESSION_METHODS.ZSTD) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (typeof zlib.zstdCompressSync !== 'function' || typeof zlib.zstdDecompressSync !== 'function') {
|
|
138
|
+
PARQUET_COMPRESSION_METHODS.ZSTD = {
|
|
139
|
+
deflate() {
|
|
140
|
+
throw new Error('ZSTD compression requires Node.js with zstd support.');
|
|
141
|
+
},
|
|
142
|
+
inflate() {
|
|
143
|
+
throw new Error('ZSTD compression requires Node.js with zstd support.');
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
PARQUET_COMPRESSION_METHODS.ZSTD = {
|
|
149
|
+
deflate(value) {
|
|
150
|
+
return zlib.zstdCompressSync(value);
|
|
151
|
+
},
|
|
152
|
+
inflate(value) {
|
|
153
|
+
return zlib.zstdDecompressSync(value);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
registerZstdCompression();
|
|
158
|
+
|
|
131
159
|
function getCsvParserOptions(csvOptions = {}, skipHeader = false) {
|
|
132
160
|
const options = {
|
|
133
161
|
bom: true,
|
|
@@ -385,6 +413,22 @@ function fileReaderFactory(indexer, fileName, transform, splitRegex, skipHeader
|
|
|
385
413
|
|
|
386
414
|
const EventEmitter = require('events');
|
|
387
415
|
const parallelCalls = 5;
|
|
416
|
+
const MAX_SAFE_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);
|
|
417
|
+
const MIN_SAFE_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);
|
|
418
|
+
function coerceBigInt(value) {
|
|
419
|
+
if (value >= MIN_SAFE_BIGINT && value <= MAX_SAFE_BIGINT) {
|
|
420
|
+
return Number(value);
|
|
421
|
+
}
|
|
422
|
+
return value.toString();
|
|
423
|
+
}
|
|
424
|
+
function safeStringify(doc) {
|
|
425
|
+
return JSON.stringify(doc, (_key, value) => {
|
|
426
|
+
if (typeof value === 'bigint') {
|
|
427
|
+
return coerceBigInt(value);
|
|
428
|
+
}
|
|
429
|
+
return value;
|
|
430
|
+
});
|
|
431
|
+
}
|
|
388
432
|
|
|
389
433
|
// a simple helper queue to bulk index documents
|
|
390
434
|
function indexQueueFactory({
|
|
@@ -508,7 +552,7 @@ function indexQueueFactory({
|
|
|
508
552
|
if (finished) {
|
|
509
553
|
throw new Error('Unexpected doc added after indexer should finish.');
|
|
510
554
|
}
|
|
511
|
-
const canContinue = stream.write(`${
|
|
555
|
+
const canContinue = stream.write(`${safeStringify(doc)}\n`);
|
|
512
556
|
if (!canContinue) {
|
|
513
557
|
queueEmitter.emit('pause');
|
|
514
558
|
|
|
@@ -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/_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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"}
|
|
1
|
+
{"version":3,"file":"node-es-transformer.esm.js","sources":["../src/_constants.js","../src/_create-mapping.js","../src/_parquet.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","import parquet from '@dsnp/parquetjs';\nimport zlib from 'zlib';\nimport { PARQUET_COMPRESSION_METHODS } from '@dsnp/parquetjs/dist/lib/compression.js';\n\nfunction registerZstdCompression() {\n if (PARQUET_COMPRESSION_METHODS.ZSTD) {\n return;\n }\n\n if (\n typeof zlib.zstdCompressSync !== 'function' ||\n typeof zlib.zstdDecompressSync !== 'function'\n ) {\n PARQUET_COMPRESSION_METHODS.ZSTD = {\n deflate() {\n throw new Error('ZSTD compression requires Node.js with zstd support.');\n },\n inflate() {\n throw new Error('ZSTD compression requires Node.js with zstd support.');\n },\n };\n return;\n }\n\n PARQUET_COMPRESSION_METHODS.ZSTD = {\n deflate(value) {\n return zlib.zstdCompressSync(value);\n },\n inflate(value) {\n return zlib.zstdDecompressSync(value);\n },\n };\n}\n\nregisterZstdCompression();\n\nexport default parquet;\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 './_parquet';\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;\nconst MAX_SAFE_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_SAFE_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nfunction coerceBigInt(value) {\n if (value >= MIN_SAFE_BIGINT && value <= MAX_SAFE_BIGINT) {\n return Number(value);\n }\n\n return value.toString();\n}\n\nfunction safeStringify(doc) {\n return JSON.stringify(doc, (_key, value) => {\n if (typeof value === 'bigint') {\n return coerceBigInt(value);\n }\n\n return value;\n });\n}\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(`${safeStringify(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 './_parquet';\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","registerZstdCompression","PARQUET_COMPRESSION_METHODS","ZSTD","zlib","zstdCompressSync","zstdDecompressSync","deflate","Error","inflate","value","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","startIndex","files","finish","globSync","EventEmitter","require","parallelCalls","MAX_SAFE_BIGINT","BigInt","Number","MAX_SAFE_INTEGER","MIN_SAFE_BIGINT","MIN_SAFE_INTEGER","coerceBigInt","toString","safeStringify","stringify","_key","indexQueueFactory","client","bufferSize","docsPerSecond","flushBytes","highWaterMark","stream","PassThrough","ndjsonStreamIterator","readableStream","buffer","chunk","lines","pop","destroyed","destroy","drainListener","interval","setInterval","emit","helpers","bulk","concurrency","flushInterval","refreshOnCompletion","datasource","onDocument","_index","clearInterval","removeAllListeners","canContinue","write","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","_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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"}
|