2020-04-28 16:46:47 +02:00
/*istanbul ignore start*/
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . structuredPatch = structuredPatch ;
2021-07-27 22:26:09 +00:00
exports . formatPatch = formatPatch ;
2020-04-28 16:46:47 +02:00
exports . createTwoFilesPatch = createTwoFilesPatch ;
exports . createPatch = createPatch ;
/*istanbul ignore end*/
var
/*istanbul ignore start*/
_line = require ( "../diff/line" )
/*istanbul ignore end*/
;
2021-07-27 22:26:09 +00:00
/*istanbul ignore start*/ function _toConsumableArray ( arr ) { return _arrayWithoutHoles ( arr ) || _iterableToArray ( arr ) || _unsupportedIterableToArray ( arr ) || _nonIterableSpread ( ) ; }
2020-04-28 16:46:47 +02:00
2021-07-27 22:26:09 +00:00
function _nonIterableSpread ( ) { throw new TypeError ( "Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; }
2020-04-28 16:46:47 +02:00
2021-07-27 22:26:09 +00:00
function _unsupportedIterableToArray ( o , minLen ) { if ( ! o ) return ; if ( typeof o === "string" ) return _arrayLikeToArray ( o , minLen ) ; var n = Object . prototype . toString . call ( o ) . slice ( 8 , - 1 ) ; if ( n === "Object" && o . constructor ) n = o . constructor . name ; if ( n === "Map" || n === "Set" ) return Array . from ( o ) ; if ( n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/ . test ( n ) ) return _arrayLikeToArray ( o , minLen ) ; }
2020-04-28 16:46:47 +02:00
2021-07-27 22:26:09 +00:00
function _iterableToArray ( iter ) { if ( typeof Symbol !== "undefined" && Symbol . iterator in Object ( iter ) ) return Array . from ( iter ) ; }
function _arrayWithoutHoles ( arr ) { if ( Array . isArray ( arr ) ) return _arrayLikeToArray ( arr ) ; }
function _arrayLikeToArray ( arr , len ) { if ( len == null || len > arr . length ) len = arr . length ; for ( var i = 0 , arr2 = new Array ( len ) ; i < len ; i ++ ) { arr2 [ i ] = arr [ i ] ; } return arr2 ; }
2020-04-28 16:46:47 +02:00
/*istanbul ignore end*/
function structuredPatch ( oldFileName , newFileName , oldStr , newStr , oldHeader , newHeader , options ) {
if ( ! options ) {
options = { } ;
}
if ( typeof options . context === 'undefined' ) {
options . context = 4 ;
}
var diff =
/*istanbul ignore start*/
( 0 ,
/*istanbul ignore end*/
/*istanbul ignore start*/
_line
/*istanbul ignore end*/
.
/*istanbul ignore start*/
diffLines )
/*istanbul ignore end*/
( oldStr , newStr , options ) ;
2023-07-13 09:09:17 +00:00
if ( ! diff ) {
return ;
}
2020-04-28 16:46:47 +02:00
diff . push ( {
value : '' ,
lines : [ ]
} ) ; // Append an empty value to make cleanup easier
function contextLines ( lines ) {
return lines . map ( function ( entry ) {
return ' ' + entry ;
} ) ;
}
var hunks = [ ] ;
var oldRangeStart = 0 ,
newRangeStart = 0 ,
curRange = [ ] ,
oldLine = 1 ,
newLine = 1 ;
/*istanbul ignore start*/
var _loop = function _loop (
/*istanbul ignore end*/
i ) {
var current = diff [ i ] ,
lines = current . lines || current . value . replace ( /\n$/ , '' ) . split ( '\n' ) ;
current . lines = lines ;
if ( current . added || current . removed ) {
/*istanbul ignore start*/
var _curRange ;
/*istanbul ignore end*/
// If we have previous context, start with that
if ( ! oldRangeStart ) {
var prev = diff [ i - 1 ] ;
oldRangeStart = oldLine ;
newRangeStart = newLine ;
if ( prev ) {
curRange = options . context > 0 ? contextLines ( prev . lines . slice ( - options . context ) ) : [ ] ;
oldRangeStart -= curRange . length ;
newRangeStart -= curRange . length ;
}
} // Output our changes
/*istanbul ignore start*/
2021-07-27 22:26:09 +00:00
2020-04-28 16:46:47 +02:00
/*istanbul ignore end*/
2021-07-27 22:26:09 +00:00
2020-04-28 16:46:47 +02:00
/*istanbul ignore start*/
2021-07-27 22:26:09 +00:00
( _curRange =
2020-04-28 16:46:47 +02:00
/*istanbul ignore end*/
2021-07-27 22:26:09 +00:00
curRange ) . push . apply (
2020-04-28 16:46:47 +02:00
/*istanbul ignore start*/
_curRange
/*istanbul ignore end*/
,
/*istanbul ignore start*/
_toConsumableArray (
/*istanbul ignore end*/
lines . map ( function ( entry ) {
return ( current . added ? '+' : '-' ) + entry ;
} ) ) ) ; // Track the updated file position
if ( current . added ) {
newLine += lines . length ;
} else {
oldLine += lines . length ;
}
} else {
// Identical context lines. Track line changes
if ( oldRangeStart ) {
// Close out any changes that have been output (or join overlapping)
if ( lines . length <= options . context * 2 && i < diff . length - 2 ) {
/*istanbul ignore start*/
var _curRange2 ;
/*istanbul ignore end*/
// Overlapping
/*istanbul ignore start*/
2021-07-27 22:26:09 +00:00
2020-04-28 16:46:47 +02:00
/*istanbul ignore end*/
2021-07-27 22:26:09 +00:00
2020-04-28 16:46:47 +02:00
/*istanbul ignore start*/
2021-07-27 22:26:09 +00:00
( _curRange2 =
2020-04-28 16:46:47 +02:00
/*istanbul ignore end*/
2021-07-27 22:26:09 +00:00
curRange ) . push . apply (
2020-04-28 16:46:47 +02:00
/*istanbul ignore start*/
_curRange2
/*istanbul ignore end*/
,
/*istanbul ignore start*/
_toConsumableArray (
/*istanbul ignore end*/
contextLines ( lines ) ) ) ;
} else {
/*istanbul ignore start*/
var _curRange3 ;
/*istanbul ignore end*/
// end the range and output
var contextSize = Math . min ( lines . length , options . context ) ;
/*istanbul ignore start*/
2021-07-27 22:26:09 +00:00
2020-04-28 16:46:47 +02:00
/*istanbul ignore end*/
2021-07-27 22:26:09 +00:00
2020-04-28 16:46:47 +02:00
/*istanbul ignore start*/
2021-07-27 22:26:09 +00:00
( _curRange3 =
2020-04-28 16:46:47 +02:00
/*istanbul ignore end*/
2021-07-27 22:26:09 +00:00
curRange ) . push . apply (
2020-04-28 16:46:47 +02:00
/*istanbul ignore start*/
_curRange3
/*istanbul ignore end*/
,
/*istanbul ignore start*/
_toConsumableArray (
/*istanbul ignore end*/
contextLines ( lines . slice ( 0 , contextSize ) ) ) ) ;
var hunk = {
oldStart : oldRangeStart ,
oldLines : oldLine - oldRangeStart + contextSize ,
newStart : newRangeStart ,
newLines : newLine - newRangeStart + contextSize ,
lines : curRange
} ;
if ( i >= diff . length - 2 && lines . length <= options . context ) {
// EOF is inside this hunk
var oldEOFNewline = /\n$/ . test ( oldStr ) ;
var newEOFNewline = /\n$/ . test ( newStr ) ;
var noNlBeforeAdds = lines . length == 0 && curRange . length > hunk . oldLines ;
2021-07-27 22:26:09 +00:00
if ( ! oldEOFNewline && noNlBeforeAdds && oldStr . length > 0 ) {
2020-04-28 16:46:47 +02:00
// special case: old has no eol and no trailing context; no-nl can end up before adds
2021-07-27 22:26:09 +00:00
// however, if the old file is empty, do not output the no-nl line
2020-04-28 16:46:47 +02:00
curRange . splice ( hunk . oldLines , 0 , '\\ No newline at end of file' ) ;
}
if ( ! oldEOFNewline && ! noNlBeforeAdds || ! newEOFNewline ) {
curRange . push ( '\\ No newline at end of file' ) ;
}
}
hunks . push ( hunk ) ;
oldRangeStart = 0 ;
newRangeStart = 0 ;
curRange = [ ] ;
}
}
oldLine += lines . length ;
newLine += lines . length ;
}
} ;
for ( var i = 0 ; i < diff . length ; i ++ ) {
/*istanbul ignore start*/
_loop (
/*istanbul ignore end*/
i ) ;
}
return {
oldFileName : oldFileName ,
newFileName : newFileName ,
oldHeader : oldHeader ,
newHeader : newHeader ,
hunks : hunks
} ;
}
2021-07-27 22:26:09 +00:00
function formatPatch ( diff ) {
2024-05-20 12:17:29 -07:00
if ( Array . isArray ( diff ) ) {
return diff . map ( formatPatch ) . join ( '\n' ) ;
}
2020-04-28 16:46:47 +02:00
var ret = [ ] ;
2021-07-27 22:26:09 +00:00
if ( diff . oldFileName == diff . newFileName ) {
ret . push ( 'Index: ' + diff . oldFileName ) ;
2020-04-28 16:46:47 +02:00
}
ret . push ( '===================================================================' ) ;
ret . push ( '--- ' + diff . oldFileName + ( typeof diff . oldHeader === 'undefined' ? '' : '\t' + diff . oldHeader ) ) ;
ret . push ( '+++ ' + diff . newFileName + ( typeof diff . newHeader === 'undefined' ? '' : '\t' + diff . newHeader ) ) ;
for ( var i = 0 ; i < diff . hunks . length ; i ++ ) {
2021-07-27 22:26:09 +00:00
var hunk = diff . hunks [ i ] ; // Unified Diff Format quirk: If the chunk size is 0,
// the first number is one lower than one would expect.
// https://www.artima.com/weblogs/viewpost.jsp?thread=164293
if ( hunk . oldLines === 0 ) {
hunk . oldStart -= 1 ;
}
if ( hunk . newLines === 0 ) {
hunk . newStart -= 1 ;
}
2020-04-28 16:46:47 +02:00
ret . push ( '@@ -' + hunk . oldStart + ',' + hunk . oldLines + ' +' + hunk . newStart + ',' + hunk . newLines + ' @@' ) ;
ret . push . apply ( ret , hunk . lines ) ;
}
return ret . join ( '\n' ) + '\n' ;
}
2021-07-27 22:26:09 +00:00
function createTwoFilesPatch ( oldFileName , newFileName , oldStr , newStr , oldHeader , newHeader , options ) {
return formatPatch ( structuredPatch ( oldFileName , newFileName , oldStr , newStr , oldHeader , newHeader , options ) ) ;
}
2020-04-28 16:46:47 +02:00
function createPatch ( fileName , oldStr , newStr , oldHeader , newHeader , options ) {
return createTwoFilesPatch ( fileName , fileName , oldStr , newStr , oldHeader , newHeader , options ) ;
}
2024-05-20 12:17:29 -07:00
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXRjaC9jcmVhdGUuanMiXSwibmFtZXMiOlsic3RydWN0dXJlZFBhdGNoIiwib2xkRmlsZU5hbWUiLCJuZXdGaWxlTmFtZSIsIm9sZFN0ciIsIm5ld1N0ciIsIm9sZEhlYWRlciIsIm5ld0hlYWRlciIsIm9wdGlvbnMiLCJjb250ZXh0IiwiZGlmZiIsImRpZmZMaW5lcyIsInB1c2giLCJ2YWx1ZSIsImxpbmVzIiwiY29udGV4dExpbmVzIiwibWFwIiwiZW50cnkiLCJodW5rcyIsIm9sZFJhbmdlU3RhcnQiLCJuZXdSYW5nZVN0YXJ0IiwiY3VyUmFuZ2UiLCJvbGRMaW5lIiwibmV3TGluZSIsImkiLCJjdXJyZW50IiwicmVwbGFjZSIsInNwbGl0IiwiYWRkZWQiLCJyZW1vdmVkIiwicHJldiIsInNsaWNlIiwibGVuZ3RoIiwiY29udGV4dFNpemUiLCJNYXRoIiwibWluIiwiaHVuayIsIm9sZFN0YXJ0Iiwib2xkTGluZXMiLCJuZXdTdGFydCIsIm5ld0xpbmVzIiwib2xkRU9GTmV3bGluZSIsInRlc3QiLCJuZXdFT0ZOZXdsaW5lIiwibm9ObEJlZm9yZUFkZHMiLCJzcGxpY2UiLCJmb3JtYXRQYXRjaCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJyZXQiLCJhcHBseSIsImNyZWF0ZVR3b0ZpbGVzUGF0Y2giLCJjcmVhdGVQYXRjaCIsImZpbGVOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUFFTyxTQUFTQSxlQUFULENBQXlCQyxXQUF6QixFQUFzQ0MsV0FBdEMsRUFBbURDLE1BQW5ELEVBQTJEQyxNQUEzRCxFQUFtRUMsU0FBbkUsRUFBOEVDLFNBQTlFLEVBQXlGQyxPQUF6RixFQUFrRztBQUN2RyxNQUFJLENBQUNBLE9BQUwsRUFBYztBQUNaQSxJQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEOztBQUNELE1BQUksT0FBT0EsT0FBTyxDQUFDQyxPQUFmLEtB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