aboutsummaryrefslogtreecommitdiff
path: root/node_modules/postcss-svgo/dist/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/postcss-svgo/dist/index.js')
-rw-r--r--node_modules/postcss-svgo/dist/index.js108
1 files changed, 108 insertions, 0 deletions
diff --git a/node_modules/postcss-svgo/dist/index.js b/node_modules/postcss-svgo/dist/index.js
new file mode 100644
index 00000000..466a6356
--- /dev/null
+++ b/node_modules/postcss-svgo/dist/index.js
@@ -0,0 +1,108 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+var _postcss = require('postcss');
+
+var _postcss2 = _interopRequireDefault(_postcss);
+
+var _postcssValueParser = require('postcss-value-parser');
+
+var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
+
+var _svgo = require('svgo');
+
+var _svgo2 = _interopRequireDefault(_svgo);
+
+var _isSvg = require('is-svg');
+
+var _isSvg2 = _interopRequireDefault(_isSvg);
+
+var _url = require('./lib/url');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var PLUGIN = 'postcss-svgo';
+var dataURI = /data:image\/svg\+xml(;(charset=)?utf-8)?,/;
+
+function minifyPromise(svgo, decl, opts) {
+ var promises = [];
+
+ decl.value = (0, _postcssValueParser2.default)(decl.value).walk(function (node) {
+ if (node.type !== 'function' || node.value !== 'url' || !node.nodes.length) {
+ return;
+ }
+ var value = node.nodes[0].value;
+
+ var decodedUri = void 0,
+ isUriEncoded = void 0;
+
+ try {
+ decodedUri = (0, _url.decode)(value);
+ isUriEncoded = decodedUri !== value;
+ } catch (e) {
+ // Swallow exception if we cannot decode the value
+ isUriEncoded = false;
+ }
+
+ if (isUriEncoded) {
+ value = decodedUri;
+ }
+ if (opts.encode !== undefined) {
+ isUriEncoded = opts.encode;
+ }
+
+ var svg = value.replace(dataURI, '');
+
+ if (!(0, _isSvg2.default)(svg)) {
+ return;
+ }
+
+ promises.push(new Promise(function (resolve, reject) {
+ return svgo.optimize(svg, function (result) {
+ if (result.error) {
+ return reject(PLUGIN + ': ' + result.error);
+ }
+ var 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');
+ node.nodes[0] = _extends({}, node.nodes[0], {
+ value: 'data:image/svg+xml;charset=utf-8,' + data,
+ quote: isUriEncoded ? '"' : '\'',
+ type: 'string',
+ before: '',
+ after: ''
+ });
+ return resolve();
+ });
+ }));
+
+ return false;
+ });
+
+ return Promise.all(promises).then(function () {
+ return 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) {
+ if (dataURI.test(decl.value)) {
+ promises.push(minifyPromise(svgo, decl, opts));
+ }
+ });
+ return Promise.all(promises).then(resolve, reject);
+ });
+ };
+});
+module.exports = exports['default']; \ No newline at end of file