postcss-svgo
Advanced tools
Comparing version 2.0.2 to 2.0.3
@@ -0,1 +1,6 @@ | ||
# 2.0.3 | ||
* Uses postcss-value-parser instead of async-replace to reduce cssnano's | ||
download size (thanks to @TrySound). | ||
# 2.0.2 | ||
@@ -2,0 +7,0 @@ |
@@ -5,6 +5,10 @@ 'use strict'; | ||
var _asyncReplace = require('async-replace'); | ||
var _postcss = require('postcss'); | ||
var _asyncReplace2 = _interopRequireDefault(_asyncReplace); | ||
var _postcss2 = _interopRequireDefault(_postcss); | ||
var _postcssValueParser = require('postcss-value-parser'); | ||
var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser); | ||
var _svgo = require('svgo'); | ||
@@ -14,6 +18,2 @@ | ||
var _postcss = require('postcss'); | ||
var _postcss2 = _interopRequireDefault(_postcss); | ||
var _isSvg = require('is-svg'); | ||
@@ -28,32 +28,56 @@ | ||
function minifyPromise(svgo, decl) { | ||
return new Promise(function (resolve, reject) { | ||
var isUriEncoded = undefined; | ||
try { | ||
isUriEncoded = decode(decl.value) !== decl.value; | ||
} catch (err) { | ||
isUriEncoded = false; | ||
var promises = []; | ||
decl.value = (0, _postcssValueParser2['default'])(decl.value).walk(function (node) { | ||
if (node.type === 'function' && node.value === 'url' && node.nodes.length) { | ||
var _ret = (function () { | ||
_postcssValueParser2['default'].trim(node.nodes); | ||
var quote = node.nodes[0].quote; | ||
if (typeof quote === 'undefined') { | ||
quote = ''; | ||
} else if (quote === '"') { | ||
quote = "'"; | ||
} | ||
var lastType = node.nodes[0].type; | ||
node.nodes[0].type = 'word'; | ||
var value = _postcssValueParser2['default'].stringify(node.nodes); | ||
var isUriEncoded = undefined; | ||
try { | ||
var encodedUri = decode(value); | ||
isUriEncoded = encodedUri !== value; | ||
if (isUriEncoded) { | ||
value = encodedUri; | ||
} | ||
} catch (err) { | ||
isUriEncoded = false; | ||
} | ||
if (!dataURI.test(value) || !(0, _isSvg2['default'])(value)) { | ||
node.nodes[0].type = lastType; | ||
return { | ||
v: undefined | ||
}; | ||
} | ||
promises.push(new Promise(function (resolve, reject) { | ||
svgo.optimize(value.replace(dataURI, ''), function (result) { | ||
if (result.error) { | ||
return reject('Error parsing SVG: ' + result.error); | ||
} | ||
var data = isUriEncoded ? encode(result.data) : result.data; | ||
node.nodes = [{ | ||
type: 'string', | ||
quote: quote, | ||
value: 'data:image/svg+xml;charset=utf-8,' + data | ||
}]; | ||
resolve(); | ||
}); | ||
})); | ||
})(); | ||
if (typeof _ret === 'object') return _ret.v; | ||
} | ||
var minify = function minify(_, quote, svg, offset, str, cb) { | ||
if (!dataURI.test(svg) || !(0, _isSvg2['default'])(svg)) { | ||
return cb(null, str); | ||
} | ||
if (typeof quote === 'undefined') { | ||
quote = ''; | ||
} else if (quote === '"') { | ||
quote = "'"; | ||
} | ||
svgo.optimize(svg.replace(dataURI, ''), function (result) { | ||
if (result.error) { | ||
return reject('Error parsing SVG: ' + result.error); | ||
} | ||
var data = isUriEncoded ? encode(result.data) : result.data; | ||
var o = 'url(' + quote + 'data:image/svg+xml;charset=utf-8,' + data + quote + ')'; | ||
return cb(null, o); | ||
}); | ||
}; | ||
(0, _asyncReplace2['default'])(isUriEncoded ? decode(decl.value) : decl.value, /url\(("|')?(.*)\1\)/g, minify, function (err, result) { | ||
decl.value = result; | ||
resolve(); | ||
}); | ||
}); | ||
return Promise.all(promises).then(function () { | ||
decl.value = decl.value.toString(); | ||
}); | ||
} | ||
@@ -60,0 +84,0 @@ |
{ | ||
"name": "postcss-svgo", | ||
"version": "2.0.2", | ||
"version": "2.0.3", | ||
"description": "Optimise inline SVG with PostCSS.", | ||
@@ -28,3 +28,3 @@ "main": "dist/index.js", | ||
"babel-tape-runner": "^1.2.0", | ||
"pleeease-filters": "^1.0.1", | ||
"pleeease-filters": "^2.0.0", | ||
"tap-spec": "^4.1.0", | ||
@@ -41,7 +41,7 @@ "tape": "^4.2.0" | ||
"dependencies": { | ||
"async-replace": "^1.0.0", | ||
"is-svg": "^1.1.1", | ||
"postcss": "^5.0.2", | ||
"postcss-value-parser": "^2.0.5", | ||
"svgo": "^0.5.6" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
8920
79
+ Addedpostcss-value-parser@^2.0.5
+ Addedpostcss-value-parser@2.0.5(transitive)
- Removedasync-replace@^1.0.0
- Removedasync@1.5.2(transitive)
- Removedasync-replace@1.0.1(transitive)