(hitsArray: unknown[])
| 353 | |
| 354 | // Discovers columns from ES hits: _id, _score, then sorted _source field keys. |
| 355 | const discoverESColumns = (hitsArray: unknown[]) => { |
| 356 | const metaFields = ["_id", "_score"]; |
| 357 | const sourceKeySet = new Set<string>(); |
| 358 | for (const hit of hitsArray) { |
| 359 | const source = (hit as Record<string, unknown>)?._source; |
| 360 | if (source && typeof source === "object") { |
| 361 | for (const key of Object.keys(source)) { |
| 362 | sourceKeySet.add(key); |
| 363 | } |
| 364 | } |
| 365 | } |
| 366 | const allColumns = [ |
| 367 | ...metaFields, |
| 368 | ...[...sourceKeySet].sort((a, b) => a.localeCompare(b)), |
| 369 | ]; |
| 370 | const columnIndexMap = new Map<string, number>(); |
| 371 | for (let i = 0; i < allColumns.length; i++) { |
| 372 | columnIndexMap.set(allColumns[i], i); |
| 373 | } |
| 374 | return { metaFields, allColumns, columnIndexMap }; |
| 375 | }; |
| 376 | |
| 377 | // Builds a single QueryRow from an ES hit document. |
| 378 | const buildESHitRow = ( |
no test coverage detected