function getRunner(grunt) {
	var path = require('path');
	var tsd = require('tsd');

	function getAPI(options) {
		grunt.log.writeln('-> config: ' + options.config);
		var api = tsd.getAPI(options.config, grunt.option('verbose'));
		if (options.cacheDir) {
			grunt.log.writeln('cacheDir: ' + options.cacheDir);
			api.context.paths.cacheDir = path.resolve(options.cacheDir);
		}
		return api;
	}

	function reinstall(options) {
		var api = getAPI(options);

		return api.readConfig(options.config, true).then(function () {
			var opts = tsd.Options.fromJSON(options.opts);
			opts.overwriteFiles = true;
			opts.resolveDependencies = true;
			opts.saveToConfig = true;

			if (options.latest) {
				var query = new tsd.Query();
				api.context.config.getInstalled().forEach(function (inst) {
					var def = tsd.Def.getFrom(inst.path);
					query.addNamePattern(def.project + '/' + def.name);
				});
				query.versionMatcher = new tsd.VersionMatcher('latest');

				return api.select(query, opts).then(function (selection) {
					return api.install(selection, opts);
				});
			}
			return api.reinstall(opts);
		});
	}

	return {
		getAPI: getAPI,
		commands: {
			reinstall: reinstall
		}
	};
}
function getRunner(grunt) {
	var path = require('path');
	var tsd = require('tsd');

	function getAPI(options) {
		grunt.log.writeln('-> config: ' + options.config);
		var api = tsd.getAPI(options.config, grunt.option('verbose'));
		if (options.cacheDir) {
			grunt.log.writeln('cacheDir: ' + options.cacheDir);
			api.context.paths.cacheDir = path.resolve(options.cacheDir);
		}
		return api;
	}

	function reinstall(options) {
		var api = getAPI(options);

		return api.readConfig(options.config, true).then(function () {
			var opts = tsd.Options.fromJSON(options.opts);
			opts.overwriteFiles = true;
			opts.resolveDependencies = true;
			opts.saveToConfig = true;

			if (options.latest) {
				var query = new tsd.Query();
				api.context.config.getInstalled().forEach(function (inst) {
					var def = tsd.Def.getFrom(inst.path);
					query.addNamePattern(def.project + '/' + def.name);
				});
				query.versionMatcher = new tsd.VersionMatcher('latest');

				return api.select(query, opts).then(function (selection) {
					return api.install(selection, opts);
				});
			}
			return api.reinstall(opts);
		});
	}

	return {
		getAPI: getAPI,
		commands: {
			reinstall: reinstall
		}
	};
}
function getRunner ( grunt ) { var path = require ( 'path' ) ; var tsd = require ( 'tsd' ) ; function getAPI ( options ) { grunt . log . writeln ( '-> config: ' + options . config ) ; var api = tsd . getAPI ( options . config , grunt . option ( 'verbose' ) ) ; if ( options . cacheDir ) { grunt . log . writeln ( 'cacheDir: ' + options . cacheDir ) ; api . context . paths . cacheDir = path . resolve ( options . cacheDir ) ; } return api ; } function reinstall ( options ) { var api = getAPI ( options ) ; return api . readConfig ( options . config , true ) . then ( function ( ) { var opts = tsd . Options . fromJSON ( options . opts ) ; opts . overwriteFiles = true ; opts . resolveDependencies = true ; opts . saveToConfig = true ; if ( options . latest ) { var query = new tsd . Query ( ) ; api . context . config . getInstalled ( ) . forEach ( function ( inst ) { var def = tsd . Def . getFrom ( inst . path ) ; query . addNamePattern ( def . project + '/' + def . name ) ; } ) ; query . versionMatcher = new tsd . VersionMatcher ( 'latest' ) ; return api . select ( query , opts ) . then ( function ( selection ) { return api . install ( selection , opts ) ; } ) ; } return api . reinstall ( opts ) ; } ) ; } return { getAPI : getAPI , commands : { reinstall : reinstall } } ; }
/*jshint -W098
/ * jshint - W098