docs: function validate( opts, options ) {
  	if ( !isObject( options ) ) {
  		return new TypeError( 'invalid input argument. Options argument must be an object. Value: `' + options + '`.' );
  	}
  	opts.packages = options.packages;
  	if ( !isStringArray( opts.packages ) ) {
  		return new TypeError( 'invalid option. Packages option must be a string array. Option: `' + opts.packages + '`.' );
  	}
  	if ( options.hasOwnProperty( 'period' ) ) {
  		opts.period = options.period;
  		if ( !isString( opts.period ) ) {
  			return new TypeError( 'invalid option. Period option must be a string. Option: `' + opts.period + '`.' );
  		}
  	}
  	if ( options.hasOwnProperty( 'hostname' ) ) {
  		opts.hostname = options.hostname;
  		if ( !isString( opts.hostname ) ) {
  			return new TypeError( 'invalid option. Hostname option must be a string. Option: `' + opts.hostname + '`.' );
  		}
  	}
  	if ( options.hasOwnProperty( 'port' ) ) {
  		opts.port = options.port;
  		if ( !isNonNegativeInteger( opts.port ) ) {
  			return new TypeError( 'invalid option. Port option must be a nonnegative integer. Option: `' + opts.port + '`.' );
  		}
  	}
  	if ( options.hasOwnProperty( 'protocol' ) ) {
  		opts.protocol = options.protocol;
  		if ( opts.protocol !== 'http' && opts.protocol !== 'https' ) {
  			return new TypeError( 'invalid option. The following protocols are supported: `"http", "https"`. Option: `' + opts.protocol + '`.' );
  		}
  	}
  	return null;
  }