From f0a3c6b321bd6976a19c0008910dca97d28a2e99 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Thu, 3 Mar 2022 02:59:04 +0800 Subject: [PATCH 1/2] feat: new `hasChanged` method --- README.md | 4 ++++ index.d.ts | 5 +++++ src/MagicString.js | 4 ++++ test/MagicString.js | 20 ++++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/README.md b/README.md index d228709..f2b0781 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,10 @@ The returned sourcemap has two (non-enumerable) methods attached for convenience code += '\n//# sourceMappingURL=' + map.toUrl(); ``` +### s.hasChanged() + +Indicates if the string has been changed. + ### s.indent( prefix[, options] ) Prefixes each line of the string with `prefix`. If `prefix` is not supplied, the indentation will be guessed from the original content, falling back to a single tab character. Returns `this`. diff --git a/index.d.ts b/index.d.ts index c1cb589..883ad73 100644 --- a/index.d.ts +++ b/index.d.ts @@ -213,6 +213,11 @@ export default class MagicString { isEmpty(): boolean; length(): number; + /** + * Indicates if the string has been changed. + */ + hasChanged(): boolean; + original: string; /** * Returns the generated string. diff --git a/src/MagicString.js b/src/MagicString.js index 22ede0f..696e0f2 100644 --- a/src/MagicString.js +++ b/src/MagicString.js @@ -717,4 +717,8 @@ export default class MagicString { this.trimStartAborted(charType); return this; } + + hasChanged() { + return this.original !== this.toString(); + } } diff --git a/test/MagicString.js b/test/MagicString.js index 3d290a5..ebe030e 100644 --- a/test/MagicString.js +++ b/test/MagicString.js @@ -1262,4 +1262,24 @@ describe('MagicString', () => { assert.equal(s.lastLine(), '//lastline'); }); }); + + describe('hasChanged', () => { + it('should works', () => { + const s = new MagicString(' abcde fghijkl '); + + assert.ok(!s.hasChanged()); + + assert.ok(s.clone().prepend(' ').hasChanged()); + assert.ok(s.clone().overwrite(1, 2, 'b').hasChanged()); + assert.ok(s.clone().remove(1, 6).hasChanged()); + + s.trim(); + + assert.ok(s.hasChanged()); + + const clone = s.clone(); + + assert.ok(clone.hasChanged()); + }); + }); }); From 37edbcb429ed2d002cbc132034ee223421e991fd Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Thu, 3 Mar 2022 15:55:20 +0800 Subject: [PATCH 2/2] chore: lint --- src/MagicString.js | 2 +- test/MagicString.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/MagicString.js b/src/MagicString.js index 89ff4ba..b67bf18 100644 --- a/src/MagicString.js +++ b/src/MagicString.js @@ -715,7 +715,7 @@ export default class MagicString { hasChanged() { return this.original !== this.toString(); - } + } replace(searchValue, replacement) { function getReplacement(match) { diff --git a/test/MagicString.js b/test/MagicString.js index 40edd4f..25472ff 100644 --- a/test/MagicString.js +++ b/test/MagicString.js @@ -1295,8 +1295,8 @@ describe('MagicString', () => { const clone = s.clone(); assert.ok(clone.hasChanged()); - }); - }); + }); + }); describe('replace', () => { it('works with string replace', () => {