function validate( opts, options ) {
	if ( !isPlainObject( options ) ) {
		return new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
	}
	if ( hasOwnProp( options, 'borderTop' ) ) {
		opts.borderTop = options.borderTop;
		if ( !isString( options.borderTop ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'borderTop', options.borderTop ) );
		}
	}
	if ( hasOwnProp( options, 'borderBottom' ) ) {
		opts.borderBottom = options.borderBottom;
		if ( !isString( options.borderBottom ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'borderBottom', options.borderBottom ) );
		}
	}
	if ( hasOwnProp( options, 'borderLeft' ) ) {
		opts.borderLeft = options.borderLeft;
		if ( !isString( options.borderLeft ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'borderLeft', options.borderLeft ) );
		}
	}
	if ( hasOwnProp( options, 'borderRight' ) ) {
		opts.borderRight = options.borderRight;
		if ( !isString( options.borderRight ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'borderRight', options.borderRight ) );
		}
	}
	if ( hasOwnProp( options, 'counter' ) ) {
		opts.counter = options.counter;
		if ( options.counter !== 'progress' && !isBoolean( options.counter ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be either a recognized string or boolean. Option: `%s`.', 'counter', options.counter ) );
		}
	}
	if ( hasOwnProp( options, 'width' ) ) {
		opts.width = options.width;
		if ( options.width !== null && !isPositiveInteger( options.width ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be either a positive integer or null. Option: `%s`.', 'width', options.width ) );
		}
	}
	if ( hasOwnProp( options, 'height' ) ) {
		opts.height = options.height;
		if ( options.height !== null && !isPositiveInteger( options.height ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be either a positive integer or null. Option: `%s`.', 'height', options.height ) );
		}
	}
	if ( hasOwnProp( options, 'workspace' ) ) {
		opts.workspace = options.workspace;
		if ( !isString( options.workspace ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'workspace', options.workspace ) );
		}
	}
	if ( hasOwnProp( options, 'load' ) ) {
		opts.load = options.load;
		if ( !isString( options.load ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a string. Option: `%s`.', 'load', options.load ) );
		}
	}
	if ( hasOwnProp( options, 'autoClear' ) ) {
		opts.autoClear = options.autoClear;
		if ( !isBoolean( options.autoClear ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a boolean. Option: `%s`.', 'autoClear', options.autoClear ) );
		}
	}
	if ( hasOwnProp( options, 'loop' ) ) {
		opts.loop = options.loop;
		if ( !isBoolean( options.loop ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a boolean. Option: `%s`.', 'loop', options.loop ) );
		}
	}
	return null;
}
Validates function options.

@private
@param {Object} opts - destination object
@param {Options} options - function options
@param {string} [options.borderTop] - top border character sequence
@param {string} [options.borderBottom] - bottom border character sequence
@param {string} [options.borderLeft] - left border character sequence
@param {string} [options.borderRight] - right border character sequence
@param {(boolean|string)} [options.counter] - slide counter
@param {(PositiveInteger|null)} [options.width] - presentation width
@param {(PositiveInteger|null)} [options.height] - presentation height
@param {string} [options.workspace] - REPL workspace name
@param {string} [options.load] - file path specifying a presentation file to load
@param {boolean} [options.autoClear] - boolean indicating whether to automatically clear the screen before writing a rendered slide to the REPL
@param {boolean} [options.loop] - boolean indicating whether to "loop" a presentation
@throws {Error} must provide valid options
@returns {(Error|null)} error or null

@example
var options = {
    'counter': true
};
var opts = {};
var err = validate( opts, options );
if ( err ) {
    throw err;
}