function factory( filepath, repos, clbk ) {
	var opts;
	if ( !isString( filepath ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', filepath ) );
	}
	if ( !isStringArray( repos ) ) {
		throw new TypeError( format( 'invalid argument. Second argument must be an array of strings. Value: `%s`.', repos ) );
	}
	if ( !isFunction( clbk ) ) {
		throw new TypeError( format( 'invalid argument. Callback argument must be a function. Value: `%s`.', clbk ) );
	}
	opts = copy( defaults );
	return fetchFile;

	/**
	* Fetches a file from one or more repositories.
	*
	* @private
	* @returns {void}
	*/
	function fetchFile() {
		resolve( filepath, repos, opts, done );
		/**
		* Callback invoked after query completion.
		*
		* @private
		* @param {(Error|null)} error - error object
		* @param {Object} results - query results
		* @returns {void}
		*/
		function done( error, results ) {
			if ( error ) {
				return clbk( error );
			}
			clbk( null, results );
		}
	}
}
Returns a function to fetch a file from one or more repositories.

@param {string} filepath - relative filepath of the file to fetch
@param {StringArray} repos - array of repo slugs indicating the repositories from which to fetch a file
@param {Function} clbk - callback to invoke upon query completion
@throws {TypeError} first argument must be a string
@throws {TypeError} second argument must be an array of strings
@throws {TypeError} callback argument must be a function
@returns {Function} function for fetching a file from one or more repositories