From c25c7b7871c709f5aa805335c509567e3cd98e4a Mon Sep 17 00:00:00 2001 From: Richard Walker Date: Wed, 29 Nov 2017 11:28:32 +0100 Subject: [PATCH] feat: backwards compatible change of content key Changes .content to .source in feed definition. Does so in a backwards compatible way so .content is still supported. --- README.md | 2 +- lib/reader.js | 7 ++++-- test/__snapshots__/reader.test.js.snap | 2 +- test/reader.test.js | 16 ++++++++++++-- test/test-assets/a.json | 15 ++++++------- test/test-assets/b.json | 17 +++++++-------- test/test-assets/c.json | 30 ++++++++++++-------------- test/test-assets/d.json | 15 ++++++------- test/test-assets/legacy.json | 9 ++++++++ 9 files changed, 66 insertions(+), 47 deletions(-) create mode 100644 test/test-assets/legacy.json diff --git a/README.md b/README.md index 246cf22..c618ae5 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ The following is an example of a feed file: version: '1.0.1', file: 'my-module-1/main.css', // bundled css content with any @import statements inlined - content: '/* ... */' + source: '/* ... */' } ] ``` diff --git a/lib/reader.js b/lib/reader.js index c469c31..c9cebc6 100644 --- a/lib/reader.js +++ b/lib/reader.js @@ -22,6 +22,9 @@ module.exports = async function reader(feeds = []) { feedMap.delete(feed.id); feedMap.set(feed.id, feed); }); - const dedupedFeeds = Array.from(feedMap.values()); - return dedupedFeeds.map(feed => feed.content.trim()).join('\n\n'); + + // backwards compatible refactor to `.source` from `.content` + return Array.from(feedMap.values()) + .map(feed => (feed.source || feed.content).trim()) + .join('\n\n'); }; diff --git a/test/__snapshots__/reader.test.js.snap b/test/__snapshots__/reader.test.js.snap index eb179d1..bb545a8 100644 --- a/test/__snapshots__/reader.test.js.snap +++ b/test/__snapshots__/reader.test.js.snap @@ -8,4 +8,4 @@ exports[`reader([]): throws on empty array 1`] = `"Expected at least 1 feed to b exports[`reader([1,2,3]): throws on array containing non feed items 1`] = `"Expected every feed to be an array. Instead got \\"1, 2, 3\\""`; -exports[`reader(123): throws on non stream or array input 1`] = `"Expected at least 1 feed to be given. Instead got \\"undefined\\""`; +exports[`reader(123): throws on non array input 1`] = `"Expected at least 1 feed to be given. Instead got \\"undefined\\""`; diff --git a/test/reader.test.js b/test/reader.test.js index ca083db..3c5692c 100644 --- a/test/reader.test.js +++ b/test/reader.test.js @@ -16,7 +16,19 @@ test('reader(feeds) single feed', async () => { expect(result).toContain('my-module-1/main.css'); }); -test('reader([stream1, stream2]) mulitple feedStreams merged', async () => { +test('reader(feeds) support for legacy .content field is maintained', async () => { + expect.assertions(1); + const sink = new SinkFs({ + path: path.join(__dirname, './test-assets'), + }); + const feed = JSON.parse(await sink.get('legacy.json')); + + const result = await reader([feed]); + + expect(result).toContain('my-module-1/main.css'); +}); + +test('reader([feed1, feed2]) mulitple feeds merged', async () => { expect.assertions(4); const sink = new SinkFs({ path: path.join(__dirname, './test-assets'), @@ -54,7 +66,7 @@ test('reader(): throws on no input', async () => { } }); -test('reader(123): throws on non stream or array input', async () => { +test('reader(123): throws on non array input', async () => { expect.assertions(1); try { await reader(123); diff --git a/test/test-assets/a.json b/test/test-assets/a.json index 74c222c..4ca6738 100644 --- a/test/test-assets/a.json +++ b/test/test-assets/a.json @@ -1,10 +1,9 @@ [ - { - "id": - "4f32a8e1c6cf6e5885241f3ea5fee583560b2dfde38b21ec3f9781c91d58f42e", - "name": "my-module-1", - "version": "1.0.1", - "file": "my-module-1/main.css", - "content": "/* my-module-1/main.css */\n" - } + { + "id": "4f32a8e1c6cf6e5885241f3ea5fee583560b2dfde38b21ec3f9781c91d58f42e", + "name": "my-module-1", + "version": "1.0.1", + "file": "my-module-1/main.css", + "source": "/* my-module-1/main.css */\n" + } ] diff --git a/test/test-assets/b.json b/test/test-assets/b.json index 6fa9e02..936a12f 100644 --- a/test/test-assets/b.json +++ b/test/test-assets/b.json @@ -1,11 +1,10 @@ [ - { - "id": - "0791418bc4d8ce9e0315f5a23b729fd1fc77df0130b0336b3380d1b4f47c3855", - "name": "my-module-3", - "version": "1.0.1", - "file": "my-module-3/css/main.css", - "content": - "/* my-module-3/main.css */\n\n/* my-module-3/dep.css */\n\n/* dep/main.css */\n" - } + { + "id": "0791418bc4d8ce9e0315f5a23b729fd1fc77df0130b0336b3380d1b4f47c3855", + "name": "my-module-3", + "version": "1.0.1", + "file": "my-module-3/css/main.css", + "source": + "/* my-module-3/main.css */\n\n/* my-module-3/dep.css */\n\n/* dep/main.css */\n" + } ] diff --git a/test/test-assets/c.json b/test/test-assets/c.json index 2a62519..cc9e5b6 100644 --- a/test/test-assets/c.json +++ b/test/test-assets/c.json @@ -1,18 +1,16 @@ [ - { - "id": - "4f32a8e1c6cf6e5885241f3ea5fee583560b2dfde38b21ec3f9781c91d58f42e", - "name": "my-module-1", - "version": "1.0.1", - "file": "my-module-1/main.css", - "content": "/* my-module-1/main.css */\n" - }, - { - "id": - "1820708872350aef30523aef4e3516172280ff75be7f0e419b104de43eef0a69", - "name": "my-module-2", - "version": "1.0.1", - "file": "my-module-2/css/main.css", - "content": "/* my-module-2/main.css */\n" - } + { + "id": "4f32a8e1c6cf6e5885241f3ea5fee583560b2dfde38b21ec3f9781c91d58f42e", + "name": "my-module-1", + "version": "1.0.1", + "file": "my-module-1/main.css", + "source": "/* my-module-1/main.css */\n" + }, + { + "id": "1820708872350aef30523aef4e3516172280ff75be7f0e419b104de43eef0a69", + "name": "my-module-2", + "version": "1.0.1", + "file": "my-module-2/css/main.css", + "source": "/* my-module-2/main.css */\n" + } ] diff --git a/test/test-assets/d.json b/test/test-assets/d.json index 74c222c..4ca6738 100644 --- a/test/test-assets/d.json +++ b/test/test-assets/d.json @@ -1,10 +1,9 @@ [ - { - "id": - "4f32a8e1c6cf6e5885241f3ea5fee583560b2dfde38b21ec3f9781c91d58f42e", - "name": "my-module-1", - "version": "1.0.1", - "file": "my-module-1/main.css", - "content": "/* my-module-1/main.css */\n" - } + { + "id": "4f32a8e1c6cf6e5885241f3ea5fee583560b2dfde38b21ec3f9781c91d58f42e", + "name": "my-module-1", + "version": "1.0.1", + "file": "my-module-1/main.css", + "source": "/* my-module-1/main.css */\n" + } ] diff --git a/test/test-assets/legacy.json b/test/test-assets/legacy.json new file mode 100644 index 0000000..5270e96 --- /dev/null +++ b/test/test-assets/legacy.json @@ -0,0 +1,9 @@ +[ + { + "id": "4f32a8e1c6cf6e5885241f3ea5fee583560b2dfde38b21ec3f9781c91d58f42e", + "name": "my-module-1", + "version": "1.0.1", + "file": "my-module-1/main.css", + "content": "/* my-module-1/main.css */\n" + } +]