You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							86 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
	
	
							86 lines
						
					
					
						
							2.5 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
/** | 
						|
 * SVGO is a Nodejs-based tool for optimizing SVG vector graphics files. | 
						|
 * | 
						|
 * @see https://github.com/svg/svgo | 
						|
 * | 
						|
 * @author Kir Belevich <kir@soulshine.in> (https://github.com/deepsweet) | 
						|
 * @copyright © 2012 Kir Belevich | 
						|
 * @license MIT https://raw.githubusercontent.com/svg/svgo/master/LICENSE | 
						|
 */ | 
						|
 | 
						|
var CONFIG = require('./svgo/config.js'), | 
						|
    SVG2JS = require('./svgo/svg2js.js'), | 
						|
    PLUGINS = require('./svgo/plugins.js'), | 
						|
    JSAPI = require('./svgo/jsAPI.js'), | 
						|
    encodeSVGDatauri = require('./svgo/tools.js').encodeSVGDatauri, | 
						|
    JS2SVG = require('./svgo/js2svg.js'); | 
						|
 | 
						|
var SVGO = function(config) { | 
						|
    this.config = CONFIG(config); | 
						|
}; | 
						|
 | 
						|
SVGO.prototype.optimize = function(svgstr, info) { | 
						|
    return new Promise((resolve, reject) => { | 
						|
        if (this.config.error) { | 
						|
            reject(this.config.error); | 
						|
            return; | 
						|
        } | 
						|
 | 
						|
        var config = this.config, | 
						|
            maxPassCount = config.multipass ? 10 : 1, | 
						|
            counter = 0, | 
						|
            prevResultSize = Number.POSITIVE_INFINITY, | 
						|
            optimizeOnceCallback = (svgjs) => { | 
						|
                if (svgjs.error) { | 
						|
                    reject(svgjs.error); | 
						|
                    return; | 
						|
                } | 
						|
 | 
						|
                if (++counter < maxPassCount && svgjs.data.length < prevResultSize) { | 
						|
                    prevResultSize = svgjs.data.length; | 
						|
                    this._optimizeOnce(svgjs.data, info, optimizeOnceCallback); | 
						|
                } else { | 
						|
                    if (config.datauri) { | 
						|
                        svgjs.data = encodeSVGDatauri(svgjs.data, config.datauri); | 
						|
                    } | 
						|
                    if (info && info.path) { | 
						|
                        svgjs.path = info.path; | 
						|
                    } | 
						|
                    resolve(svgjs); | 
						|
                } | 
						|
            }; | 
						|
 | 
						|
        this._optimizeOnce(svgstr, info, optimizeOnceCallback); | 
						|
    }); | 
						|
}; | 
						|
 | 
						|
SVGO.prototype._optimizeOnce = function(svgstr, info, callback) { | 
						|
    var config = this.config; | 
						|
 | 
						|
    SVG2JS(svgstr, function(svgjs) { | 
						|
        if (svgjs.error) { | 
						|
            callback(svgjs); | 
						|
            return; | 
						|
        } | 
						|
 | 
						|
        svgjs = PLUGINS(svgjs, info, config.plugins); | 
						|
 | 
						|
        callback(JS2SVG(svgjs, config.js2svg)); | 
						|
    }); | 
						|
}; | 
						|
 | 
						|
/** | 
						|
 * The factory that creates a content item with the helper methods. | 
						|
 * | 
						|
 * @param {Object} data which passed to jsAPI constructor | 
						|
 * @returns {JSAPI} content item | 
						|
 */ | 
						|
SVGO.prototype.createContentItem = function(data) { | 
						|
    return new JSAPI(data); | 
						|
}; | 
						|
 | 
						|
module.exports = SVGO; | 
						|
// Offer ES module interop compatibility. | 
						|
module.exports.default = SVGO;
 | 
						|
 |