index.js
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();
		});
	});
}
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();
		});
	});
}
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 ( ) ; } ) ; } ) ; }
Plugin level function

@param {Object} config			SVGSpriter main configuration
Plugin level function