diff --git a/packages/postcss-svgo/src/__tests__/index.js b/packages/postcss-svgo/src/__tests__/index.js index f5f80bfff..54f6a5008 100644 --- a/packages/postcss-svgo/src/__tests__/index.js +++ b/packages/postcss-svgo/src/__tests__/index.js @@ -1,4 +1,5 @@ import { readFileSync as file } from 'fs'; +import postcss from 'postcss'; import filters from 'pleeease-filters'; import { extendDefaultPlugins } from 'svgo'; import plugin from '../'; @@ -189,12 +190,13 @@ test( ) ); -test( - 'should skip svgs containing unclosed tags', - passthroughCSS( - 'h1{background:url(data:image/svg+xml;charset=utf-8,style type="text/css"> svg { fill: red; } )}' - ) -); +test('should warn on SVG containing unclosed tags', async () => { + const css = + 'h1{background:url(data:image/svg+xml;charset=utf-8,style type="text/css"> svg { fill: red; } )}'; + const result = await postcss(plugin()).process(css, { from: undefined }); + expect(result.messages.length).toBe(1); + expect(result.messages[0].type).toBe('warning'); +}); test( 'should pass through links to svg files', diff --git a/packages/postcss-svgo/src/index.js b/packages/postcss-svgo/src/index.js index c6ec8535e..24c9bf529 100644 --- a/packages/postcss-svgo/src/index.js +++ b/packages/postcss-svgo/src/index.js @@ -6,7 +6,7 @@ const PLUGIN = 'postcss-svgo'; const dataURI = /data:image\/svg\+xml(;((charset=)?utf-8|base64))?,/i; const dataURIBase64 = /data:image\/svg\+xml;base64,/i; -function minify(decl, opts) { +function minify(decl, opts, postcssResult) { const parsed = valueParser(decl.value); decl.value = parsed.walk((node) => { @@ -51,13 +51,12 @@ function minify(decl, opts) { try { result = optimize(svg, opts); if (result.error) { - if (result.error.startsWith('Error in parsing SVG')) { - return; - } - throw new Error(`${PLUGIN}: ${result.error}`); + decl.warn(postcssResult, `${result.error}`); + return; } } catch (error) { - throw new Error(`${PLUGIN}: ${error}`); + decl.warn(postcssResult, `${error}`); + return; } let data, optimizedValue; @@ -92,13 +91,13 @@ function pluginCreator(opts = {}) { return { postcssPlugin: PLUGIN, - OnceExit(css) { + OnceExit(css, { result }) { css.walkDecls((decl) => { if (!dataURI.test(decl.value)) { return; } - minify(decl, opts); + minify(decl, opts, result); }); }, };