code: function gulpSVGSprite(config) {
  
  	// Extend plugin error
  	function extendError(pError, error) {
  		if (error && (typeof error === 'object')) {
  			['name', 'errno'].forEach(function(property) {
  				if (property in error) {
  					this[property]	= error[property];
  				}
  			}, pError);
  		}
  
  		return pError;
  	}
  
  	// Instanciate spriter instance
  	var spriter						= new SVGSpriter(config);
  	var shapes						= 0;
  
  	// Intercept error log and convert to plugin errors
  	spriter.config.log.error		= function(message, error) {
  		this.emit('error', extendError(new PluginError(PLUGIN_NAME, message), error));
  	};
  
  	return through2.obj(function (file, enc, cb) {
  		var error					= null;
  		try {
  			spriter.add(file);
  			++shapes;
  		} catch(e) {
  			error					= (!e.plugin || (e.plugin !== PLUGIN_NAME)) ? extendError(new PluginError(PLUGIN_NAME, e.message), e) : e;
  		}
  		return cb(error);
  
  	}, function(cb) {
  		var stream 					= this;
  		spriter.compile(function(error, result /*, data*/){
  			if (error) {
  				stream.emit('error', new PluginError(PLUGIN_NAME, error));
  			} else if (shapes > 0) {
  				for (var mode in result) {
  					for (var resource in result[mode]) {
  						stream.push(result[mode][resource]);
  					}
  				}
  			}
  			cb();
  		});
  	});
  }
docs: Plugin level function
  
  @param {Object} config			SVGSpriter main configuration