docs: function NvmApi () {
  	var self = this;
  
  	Object.defineProperty(this, "initialized", {
  		"value": false,
  		"enumerable": false,
  		"writable": true
  	});
  
  	Object.defineProperty(this, "__data", {
  		"value": {},
  		"enumerable": false,
  		"writable": true
  	});
  
  	// Get data for NVM wrapper
  	Async.parallel([
  		function (cb) {
  			COMMANDS.current(function (err, version) {
  				if (err) {
  					return cb(err);
  				}
  
  				self.__data.current = version;
  				cb();
  			});
  		},
  
  		function (cb) {
  			COMMANDS.nvmVersion(function (err, version) {
  				if (err) {
  					return cb(err);
  				}
  
  				self.__data.version = version;
  				cb();
  			});
  		},
  
  		function (cb) {
  			COMMANDS.nodePath(function (err, path) {
  				if (err) {
  					return cb(err);
  				}
  
  				self.__data.which = path;
  				cb();
  			});
  		},
  
  		function (cb) {
  			COMMANDS.list(function (err, versions) {
  				if (err) {
  					return cb(err);
  				}
  
  				if (versions.hasOwnProperty("current")) {
  					delete versions.current;
  				}
  
  				self.__data.installed = versions;
  				cb();
  			});
  		}
  	], function (err) {
  		if (err) {
  			console.warn(
  				"Error Calling NVM. Make sure it's properly installed and sourced."
  			);
  
  			console.error(err.stack || err.message || err);
  			return;
  		}
  
  		self.initialized = true;
  
  		if (self.__data.hasOwnProperty("callbacks")) {
  			self.__data.callbacks.forEach(function (func) {
  				func.call(self, self);
  			});
  		}
  	});
  
  	return this;
  }