From 987aa4c7529d99f481661383c8db285718ec50e0 Mon Sep 17 00:00:00 2001 From: evilebottnawi Date: Mon, 3 Dec 2018 13:54:48 +0300 Subject: [PATCH] refactor: migrate on message api for postcss-import-parser --- lib/loader.js | 4 ++-- lib/plugins/postcss-icss-parser.js | 6 +++++- lib/plugins/postcss-import-parser.js | 25 +++++++++++++++---------- lib/plugins/postcss-url-parser.js | 6 +----- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/lib/loader.js b/lib/loader.js index 3937f0ec..292f4f7d 100644 --- a/lib/loader.js +++ b/lib/loader.js @@ -91,11 +91,11 @@ module.exports = function loader(content, map) { ]; if (resolveImport) { - plugins.push(importParser(parserOptions)); + plugins.push(importParser()); } if (resolveUrl) { - plugins.push(urlParser(parserOptions)); + plugins.push(urlParser()); } plugins.push(icssParser(parserOptions)); diff --git a/lib/plugins/postcss-icss-parser.js b/lib/plugins/postcss-icss-parser.js index 8774528b..fed8a5d8 100644 --- a/lib/plugins/postcss-icss-parser.js +++ b/lib/plugins/postcss-icss-parser.js @@ -9,7 +9,10 @@ module.exports = postcss.plugin( pluginName, (options) => function process(css, result) { - const importItems = options.importItems || []; + const importItems = (result.messages || []) + .filter((message) => message.type === 'import') + .map((message) => message.item); + const imports = {}; const icss = icssUtils.extractICSS(css); const exports = icss.icssExports; @@ -21,6 +24,7 @@ module.exports = postcss.plugin( imports[`$${prop}`] = importItems.length; importItems.push({ url, + media: '', export: icss.icssImports[key][prop], }); }); diff --git a/lib/plugins/postcss-import-parser.js b/lib/plugins/postcss-import-parser.js index 3dc6ef3a..ea537f86 100644 --- a/lib/plugins/postcss-import-parser.js +++ b/lib/plugins/postcss-import-parser.js @@ -46,10 +46,8 @@ function parseImport(params) { module.exports = postcss.plugin( pluginName, - (options) => + () => function process(css, result) { - const importItems = []; - css.walkAtRules(/^import$/i, (atRule) => { // Convert only top-level @import if (atRule.parent.type !== 'root') { @@ -84,16 +82,23 @@ module.exports = postcss.plugin( url = loaderUtils.urlToRequest(url); } - const includes = importItems.find( - (el) => el.url === url && el.media === media + const alreadyIncluded = result.messages.find( + (message) => + message.pluginName === pluginName && + message.type === 'import' && + message.item.url === url && + message.item.media === media ); - if (!includes) { - importItems.push({ url, media, isUrlRequest }); + if (alreadyIncluded) { + return; } - }); - // eslint-disable-next-line no-param-reassign - options.importItems = importItems; + result.messages.push({ + pluginName, + type: 'import', + item: { url, media }, + }); + }); } ); diff --git a/lib/plugins/postcss-url-parser.js b/lib/plugins/postcss-url-parser.js index b5c5de02..d7824b94 100644 --- a/lib/plugins/postcss-url-parser.js +++ b/lib/plugins/postcss-url-parser.js @@ -97,9 +97,8 @@ function uniq(array) { module.exports = postcss.plugin( pluginName, - (options) => + () => function process(css, result) { - const urlItems = []; const traversed = walkDeclsWithUrl(css, result, (value) => isUrlRequest(value) ); @@ -128,8 +127,5 @@ module.exports = postcss.plugin( // eslint-disable-next-line no-param-reassign item.decl.value = item.parsed.toString(); }); - - // eslint-disable-next-line no-param-reassign - options.urlItems = urlItems; } );