diff --git a/src/Chunk.js b/src/Chunk.js index 842c37f..dfe0152 100644 --- a/src/Chunk.js +++ b/src/Chunk.js @@ -56,6 +56,8 @@ Chunk.prototype = { edit ( content, storeName ) { this.content = content; + this.intro = ''; + this.outro = ''; this.storeName = storeName; this.edited = true; diff --git a/src/MagicString.js b/src/MagicString.js index 950f605..f1756a0 100644 --- a/src/MagicString.js +++ b/src/MagicString.js @@ -308,17 +308,13 @@ MagicString.prototype = { first.edit( content, storeName ); if ( first !== last ) { - first.outro = ''; - let chunk = first.next; while ( chunk !== last ) { chunk.edit( '', false ); - chunk.intro = chunk.outro = ''; chunk = chunk.next; } chunk.edit( '', false ); - chunk.intro = ''; } } diff --git a/test/index.js b/test/index.js index a3b8857..5305692 100644 --- a/test/index.js +++ b/test/index.js @@ -698,7 +698,7 @@ describe( 'MagicString', function () { var s = new MagicString( 'abcdefghijkl' ); s.remove( 0, 6 ); - s.insertRight( 6, 'DEF' ); + s.insertLeft( 6, 'DEF' ); s.overwrite( 6, 9, 'GHI' ); assert.equal( s.toString(), 'DEFGHIjkl' ); }); @@ -742,6 +742,17 @@ describe( 'MagicString', function () { TypeError ); }); + + it ( 'replaces interior inserts', function() { + var s = new MagicString( 'abcdefghijkl' ); + + s.insertLeft( 1, '&' ); + s.insertRight( 1, '^' ); + s.insertLeft( 3, '!' ); + s.insertRight( 3, '?' ); + s.overwrite( 1, 3, '...' ); + assert.equal( s.toString(), 'a&...?defghijkl' ); + }) }); describe( 'prepend', function () { @@ -831,6 +842,17 @@ describe( 'MagicString', function () { assert.equal( s.toString(), '(ab);' ); }); + it( 'should remove interior inserts', function () { + var s = new MagicString( 'abc;' ); + + s.insertLeft( 1, '[' ); + s.insertRight( 1, '(' ); + s.insertLeft( 2, ')' ); + s.insertRight( 2, ']' ); + s.remove( 1, 2 ); + assert.equal( s.toString(), 'a[]c;' ); + }); + it( 'should provide a useful error when illegal removals are attempted', function () { var s = new MagicString( 'abcdefghijkl' );