postcss-svgo
Advanced tools
Comparing version
@@ -27,22 +27,18 @@ 'use strict'; | ||
var PLUGIN = 'postcss-svgo'; | ||
var dataURI = /data:image\/svg\+xml(;((charset=)?utf-8|base64))?,/i; | ||
var dataURIBase64 = /data:image\/svg\+xml;base64,/i; | ||
const PLUGIN = 'postcss-svgo'; | ||
const dataURI = /data:image\/svg\+xml(;((charset=)?utf-8|base64))?,/i; | ||
const dataURIBase64 = /data:image\/svg\+xml;base64,/i; | ||
function minifyPromise(svgo, decl, opts) { | ||
var promises = []; | ||
const promises = []; | ||
decl.value = (0, _postcssValueParser2.default)(decl.value).walk(function (node) { | ||
if (node.type !== 'function' || node.value !== 'url' || !node.nodes.length) { | ||
decl.value = (0, _postcssValueParser2.default)(decl.value).walk(node => { | ||
if (node.type !== 'function' || node.value.toLowerCase() !== 'url' || !node.nodes.length) { | ||
return; | ||
} | ||
var _node$nodes$ = node.nodes[0], | ||
value = _node$nodes$.value, | ||
quote = _node$nodes$.quote; | ||
let { value, quote } = node.nodes[0]; | ||
let isBase64, isUriEncoded; | ||
let svg = value.replace(dataURI, ''); | ||
var isBase64 = void 0, | ||
isUriEncoded = void 0; | ||
var svg = value.replace(dataURI, ''); | ||
if (dataURIBase64.test(value)) { | ||
@@ -52,3 +48,3 @@ svg = Buffer.from(svg, 'base64').toString('utf8'); | ||
} else { | ||
var decodedUri = void 0; | ||
let decodedUri; | ||
@@ -75,33 +71,27 @@ try { | ||
promises.push(new Promise(function (resolve, reject) { | ||
return svgo.optimize(svg, function (result) { | ||
if (result.error) { | ||
return reject(`${PLUGIN}: ${result.error}`); | ||
} | ||
promises.push(svgo.optimize(svg).then(result => { | ||
let data, optimizedValue; | ||
var data = void 0, | ||
optimizedValue = void 0; | ||
if (isBase64) { | ||
data = Buffer.from(result.data).toString('base64'); | ||
optimizedValue = 'data:image/svg+xml;base64,' + data; | ||
} else { | ||
data = isUriEncoded ? (0, _url.encode)(result.data) : result.data; | ||
// Should always encode # otherwise we yield a broken SVG | ||
// in Firefox (works in Chrome however). See this issue: | ||
// https://github.com/cssnano/cssnano/issues/245 | ||
data = data.replace(/#/g, '%23'); | ||
optimizedValue = 'data:image/svg+xml;charset=utf-8,' + data; | ||
quote = isUriEncoded ? '"' : '\''; | ||
} | ||
if (isBase64) { | ||
data = Buffer.from(result.data).toString('base64'); | ||
optimizedValue = 'data:image/svg+xml;base64,' + data; | ||
} else { | ||
data = isUriEncoded ? (0, _url.encode)(result.data) : result.data; | ||
// Should always encode # otherwise we yield a broken SVG | ||
// in Firefox (works in Chrome however). See this issue: | ||
// https://github.com/ben-eb/cssnano/issues/245 | ||
data = data.replace(/#/g, '%23'); | ||
optimizedValue = 'data:image/svg+xml;charset=utf-8,' + data; | ||
quote = isUriEncoded ? '"' : '\''; | ||
} | ||
node.nodes[0] = Object.assign({}, node.nodes[0], { | ||
value: optimizedValue, | ||
quote: quote, | ||
type: 'string', | ||
before: '', | ||
after: '' | ||
}); | ||
return resolve(); | ||
node.nodes[0] = Object.assign({}, node.nodes[0], { | ||
value: optimizedValue, | ||
quote: quote, | ||
type: 'string', | ||
before: '', | ||
after: '' | ||
}); | ||
}).catch(error => { | ||
throw new Error(`${PLUGIN}: ${error}`); | ||
})); | ||
@@ -112,15 +102,11 @@ | ||
return Promise.all(promises).then(function () { | ||
return decl.value = decl.value.toString(); | ||
}); | ||
return Promise.all(promises).then(() => decl.value = decl.value.toString()); | ||
} | ||
exports.default = _postcss2.default.plugin(PLUGIN, function () { | ||
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
var svgo = new _svgo2.default(opts); | ||
return function (css) { | ||
return new Promise(function (resolve, reject) { | ||
var promises = []; | ||
css.walkDecls(function (decl) { | ||
exports.default = _postcss2.default.plugin(PLUGIN, (opts = {}) => { | ||
const svgo = new _svgo2.default(opts); | ||
return css => { | ||
return new Promise((resolve, reject) => { | ||
const promises = []; | ||
css.walkDecls(decl => { | ||
if (dataURI.test(decl.value)) { | ||
@@ -127,0 +113,0 @@ promises.push(minifyPromise(svgo, decl, opts)); |
@@ -11,2 +11,2 @@ 'use strict'; | ||
var decode = exports.decode = decodeURIComponent; | ||
const decode = exports.decode = decodeURIComponent; |
{ | ||
"name": "postcss-svgo", | ||
"version": "4.0.0-rc.2", | ||
"version": "4.0.0", | ||
"description": "Optimise inline SVG with PostCSS.", | ||
@@ -25,6 +25,6 @@ "main": "dist/index.js", | ||
"babel-cli": "^6.0.0", | ||
"cross-env": "^3.0.0", | ||
"pleeease-filters": "^3.0.0" | ||
"cross-env": "^5.0.0", | ||
"pleeease-filters": "^4.0.0" | ||
}, | ||
"homepage": "https://github.com/ben-eb/cssnano", | ||
"homepage": "https://github.com/cssnano/cssnano", | ||
"author": { | ||
@@ -35,15 +35,15 @@ "name": "Ben Briggs", | ||
}, | ||
"repository": "ben-eb/cssnano", | ||
"repository": "cssnano/cssnano", | ||
"dependencies": { | ||
"is-svg": "^2.0.0", | ||
"is-svg": "^3.0.0", | ||
"postcss": "^6.0.0", | ||
"postcss-value-parser": "^3.0.0", | ||
"svgo": "^0.7.0" | ||
"svgo": "^1.0.0" | ||
}, | ||
"bugs": { | ||
"url": "https://github.com/ben-eb/cssnano/issues" | ||
"url": "https://github.com/cssnano/cssnano/issues" | ||
}, | ||
"engines": { | ||
"node": ">=4" | ||
"node": ">=6.9.0" | ||
} | ||
} |
@@ -118,3 +118,3 @@ # [postcss][postcss]-svgo | ||
See [CONTRIBUTORS.md](https://github.com/ben-eb/cssnano/blob/master/CONTRIBUTORS.md). | ||
See [CONTRIBUTORS.md](https://github.com/cssnano/cssnano/blob/master/CONTRIBUTORS.md). | ||
@@ -121,0 +121,0 @@ |
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
0
-100%10781
-4.43%98
-10.09%1
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed
Updated
Updated