function cmudict( options ) {
	var opts;
	var err;
	var key;
	var out;
	var val;
	var i;

	if ( arguments.length > 0 ) {
		opts = {};
		err = validate( opts, options );
		if ( err ) {
			throw err;
		}
		if ( opts.data ) {
			if ( !hasOwnProp( dataCMU, opts.data ) ) {
				throw new RangeError( format( 'invalid option. `%s` option must be one of the following: "%s". Option: `%s`.', 'data', keys.join( '", "' ), opts.data ) );
			}
			out = readJSON( dataCMU[ opts.data ], fopts );
			if ( out instanceof Error ) {
				throw out;
			}
			return out;
		}
	}
	out = {};
	for ( i = 0; i < keys.length; i++ ) {
		key = keys[ i ];
		val = readJSON( dataCMU[ key ] );
		if ( val instanceof Error ) {
			throw val;
		}
		out[ key ] = val;
	}
	return out;
}
Returns datasets from the Carnegie Mellon Pronouncing Dictionary (CMUdict).

## Notes

-   This function synchronously reads data from disk for each invocation. Such behavior is intentional and so is the avoidance of `require`. We assume that invocations are infrequent, and we want to avoid the `require` cache. This means that we allow data to be garbage collected and a user is responsible for explicitly caching data.

@param {Options} [options] - options object
@param {string} [options.data] - dataset name
@throws {Error} unable to read data
@throws {TypeError} must provide an object
@throws {TypeError} must provide valid options
@throws {RangeError} must provide a recognized dataset name
@returns {(Object|StringArray)} dataset(s)

@example
var data = cmudict();
// returns <Object>

@example
var data = cmudict({
    'data': 'symbols'
});
// returns <Array>