@@ -1480,61 +1480,14 @@ License: MIT
1480
1480
if ( ! input )
1481
1481
return returnable ( ) ;
1482
1482
1483
- // Rename headers if there are duplicates
1484
- var firstLine ;
1485
- if ( config . header && ! baseIndex )
1486
- {
1487
- firstLine = input . split ( newline ) [ 0 ] ;
1488
- var headers = firstLine . split ( delim ) ;
1489
- var separator = '_' ;
1490
- var headerMap = new Set ( ) ;
1491
- var headerCount = { } ;
1492
- var duplicateHeaders = false ;
1493
-
1494
- // Using old-style 'for' loop to avoid prototype pollution that would be picked up with 'var j in headers'
1495
- for ( var j = 0 ; j < headers . length ; j ++ ) {
1496
- var header = headers [ j ] ;
1497
- if ( isFunction ( config . transformHeader ) )
1498
- header = config . transformHeader ( header , j ) ;
1499
- var headerName = header ;
1500
-
1501
- var count = headerCount [ header ] || 0 ;
1502
- if ( count > 0 ) {
1503
- duplicateHeaders = true ;
1504
- headerName = header + separator + count ;
1505
- // Initialise the variable if it hasn't been.
1506
- if ( renamedHeaders === null ) {
1507
- renamedHeaders = { } ;
1508
- }
1509
- }
1510
- headerCount [ header ] = count + 1 ;
1511
- // In case it already exists, we add more separators
1512
- while ( headerMap . has ( headerName ) ) {
1513
- headerName = headerName + separator + count ;
1514
- }
1515
- headerMap . add ( headerName ) ;
1516
- if ( count > 0 ) {
1517
- renamedHeaders [ headerName ] = header ;
1518
- }
1519
- }
1520
- if ( duplicateHeaders ) {
1521
- var editedInput = input . split ( newline ) ;
1522
- editedInput [ 0 ] = Array . from ( headerMap ) . join ( delim ) ;
1523
- input = editedInput . join ( newline ) ;
1524
- }
1525
- }
1526
1483
if ( fastMode || ( fastMode !== false && input . indexOf ( quoteChar ) === - 1 ) )
1527
1484
{
1528
1485
var rows = input . split ( newline ) ;
1529
1486
for ( var i = 0 ; i < rows . length ; i ++ )
1530
1487
{
1531
1488
row = rows [ i ] ;
1532
- // use firstline as row length may be changed due to duplicated headers
1533
- if ( i === 0 && firstLine !== undefined ) {
1534
- cursor += firstLine . length ;
1535
- } else {
1536
- cursor += row . length ;
1537
- }
1489
+ cursor += row . length ;
1490
+
1538
1491
if ( i !== rows . length - 1 )
1539
1492
cursor += newline . length ;
1540
1493
else if ( ignoreLastRow )
@@ -1729,7 +1682,6 @@ License: MIT
1729
1682
break ;
1730
1683
}
1731
1684
1732
-
1733
1685
return finish ( ) ;
1734
1686
1735
1687
@@ -1789,6 +1741,47 @@ License: MIT
1789
1741
/** Returns an object with the results, errors, and meta. */
1790
1742
function returnable ( stopped )
1791
1743
{
1744
+ if ( config . header && ! baseIndex && data . length )
1745
+ {
1746
+ const result = data [ 0 ] ;
1747
+ const headerCount = { } ; // To track the count of each base header
1748
+ const usedHeaders = new Set ( result ) ; // To track used headers and avoid duplicates
1749
+ let duplicateHeaders = false ;
1750
+
1751
+ for ( let i = 0 ; i < result . length ; i ++ ) {
1752
+ let header = result [ i ] ;
1753
+ if ( isFunction ( config . transformHeader ) )
1754
+ header = config . transformHeader ( header , i ) ;
1755
+
1756
+ if ( ! headerCount [ header ] ) {
1757
+ headerCount [ header ] = 1 ;
1758
+ result [ i ] = header ;
1759
+ } else {
1760
+ let newHeader ;
1761
+ let suffixCount = headerCount [ header ] ;
1762
+
1763
+ // Find a unique new header
1764
+ do {
1765
+ newHeader = `${ header } _${ suffixCount } ` ;
1766
+ suffixCount ++ ;
1767
+ } while ( usedHeaders . has ( newHeader ) ) ;
1768
+
1769
+ usedHeaders . add ( newHeader ) ; // Mark this new Header as used
1770
+ result [ i ] = newHeader ;
1771
+ headerCount [ header ] ++ ;
1772
+ duplicateHeaders = true ;
1773
+ if ( renamedHeaders === null ) {
1774
+ renamedHeaders = { } ;
1775
+ }
1776
+ renamedHeaders [ newHeader ] = header ;
1777
+ }
1778
+
1779
+ usedHeaders . add ( header ) ; // Ensure the original header is marked as used
1780
+ }
1781
+ if ( duplicateHeaders ) {
1782
+ console . warn ( 'Duplicate headers found and renamed.' ) ;
1783
+ }
1784
+ }
1792
1785
return {
1793
1786
data : data ,
1794
1787
errors : errors ,
0 commit comments