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,)}'
- )
-);
+test('should warn on SVG containing unclosed tags', async () => {
+ const css =
+ 'h1{background:url(data:image/svg+xml;charset=utf-8,)}';
+ 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);
});
},
};