| 302 | const stream = fs.createReadStream(filePath, { encoding: 'utf8' }); | 302 | const stream = fs.createReadStream(filePath, { encoding: 'utf8' }); |
| 303 | const rl = readline.createInterface({ input: stream }); | 303 | const rl = readline.createInterface({ input: stream }); |
| 304 | return new Promise((resolve, reject) => { | 304 | return new Promise((resolve, reject) => { |
| | 305 | let resolved = false; |
| 305 | rl.on('line', line => { | 306 | rl.on('line', line => { |
| | 307 | resolved = true; |
| 306 | rl.close(); | 308 | rl.close(); |
| 307 | stream.close(); | 309 | stream.close(); |
| 308 | resolve(line); | 310 | resolve(line); |
| 309 | }); | 311 | }); |
| 310 | rl.on('error', reject); | 312 | |
| | 313 | rl.on('error', error => { |
| | 314 | resolved = true; |
| | 315 | reject(error); |
| | 316 | }); |
| | 317 | |
| | 318 | // Handle empty files |
| | 319 | stream.on('end', () => { |
| | 320 | if (!resolved) { |
| | 321 | resolved = true; |
| | 322 | resolve(''); |
| | 323 | } |
| | 324 | }); |
| 311 | }); | 325 | }); |
| 312 | } | 326 | } |
| 313 | | 327 | |