From 4308a0da19860b3a4ccec286a503af472fd0f4c2 Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 28 Sep 2021 16:09:41 -0700 Subject: [PATCH] Ensure atom and rss links have stable names (#6984) --- packages/core/integration-tests/test/html.js | 34 +++++++++++++++++++ .../test/integration/html-feed/atom.html | 8 +++++ .../test/integration/html-feed/feed.xml | 0 .../test/integration/html-feed/rss.html | 8 +++++ .../transformers/html/src/dependencies.js | 6 +++- 5 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 packages/core/integration-tests/test/integration/html-feed/atom.html create mode 100644 packages/core/integration-tests/test/integration/html-feed/feed.xml create mode 100644 packages/core/integration-tests/test/integration/html-feed/rss.html diff --git a/packages/core/integration-tests/test/html.js b/packages/core/integration-tests/test/html.js index e1fa04cd7f4..93a2504f830 100644 --- a/packages/core/integration-tests/test/html.js +++ b/packages/core/integration-tests/test/html.js @@ -170,6 +170,40 @@ describe('html', function() { assert(//.test(html)); }); + it('should support RSS feed links', async function() { + let b = await bundle( + path.join(__dirname, '/integration/html-feed/rss.html'), + ); + + assertBundles(b, [ + { + name: 'rss.html', + assets: ['rss.html'], + }, + { + name: 'feed.xml', + assets: ['feed.xml'], + }, + ]); + }); + + it('should support atom feed links', async function() { + let b = await bundle( + path.join(__dirname, '/integration/html-feed/atom.html'), + ); + + assertBundles(b, [ + { + name: 'atom.html', + assets: ['atom.html'], + }, + { + name: 'feed.xml', + assets: ['feed.xml'], + }, + ]); + }); + it('should support meta tags', async function() { let b = await bundle( path.join(__dirname, '/integration/html-meta/index.html'), diff --git a/packages/core/integration-tests/test/integration/html-feed/atom.html b/packages/core/integration-tests/test/integration/html-feed/atom.html new file mode 100644 index 00000000000..d4ef1601c55 --- /dev/null +++ b/packages/core/integration-tests/test/integration/html-feed/atom.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/core/integration-tests/test/integration/html-feed/feed.xml b/packages/core/integration-tests/test/integration/html-feed/feed.xml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/integration/html-feed/rss.html b/packages/core/integration-tests/test/integration/html-feed/rss.html new file mode 100644 index 00000000000..0c53e7ccf9c --- /dev/null +++ b/packages/core/integration-tests/test/integration/html-feed/rss.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/transformers/html/src/dependencies.js b/packages/transformers/html/src/dependencies.js index 0abba7f3c07..98e76f92313 100644 --- a/packages/transformers/html/src/dependencies.js +++ b/packages/transformers/html/src/dependencies.js @@ -65,6 +65,8 @@ const META = { ], }; +const FEED_TYPES = new Set(['application/rss+xml', 'application/atom+xml']); + // Options to be passed to `addDependency` for certain tags + attributes const OPTIONS = { a: { @@ -146,7 +148,9 @@ export default function collectDependencies( if ( tag === 'link' && - (attrs.rel === 'canonical' || attrs.rel === 'manifest') && + (attrs.rel === 'canonical' || + attrs.rel === 'manifest' || + (attrs.rel === 'alternate' && FEED_TYPES.has(attrs.type))) && attrs.href ) { let href = attrs.href;