| 302 | 302 | const stream = fs.createReadStream(filePath, { encoding: 'utf8' }); |
| 303 | 303 | const rl = readline.createInterface({ input: stream }); |
| 304 | 304 | return new Promise((resolve, reject) => { |
| 305 | + let resolved = false; |
| 305 | 306 | rl.on('line', line => { |
| 307 | + resolved = true; |
| 306 | 308 | rl.close(); |
| 307 | 309 | stream.close(); |
| 308 | 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 | |