code: function options(opts) {
    /* jshint maxcomplexity:8 */
    if (opts) {
      _updateWishesWithOptions(opts)
      _previousId = isNaN(opts.previousId) ? _previousId : opts.previousId
      _enteredMagicWords = opts.enteredMagicWords || _enteredMagicWords
      _context = opts.context || _context
      _previousContext = opts.previousContext || _previousContext
      _enabled = opts.enabled || _enabled
      _returnOnDisabled = opts.returnOnDisabled || _returnOnDisabled
    }
    return {
      wishes: _wishes,
      previousId: _previousId,
      enteredMagicWords: _enteredMagicWords,
      context: _context,
      previousContext: _previousContext,
      enabled: _enabled,
      returnOnDisabled: _returnOnDisabled,
    }
  }
docs: @typedef {object} GenieOptions
  @property {Array.<wish>} wishes - All wishes registered with genie
  @property {number} previousId - The number used to generate an
  id for a newly registered wish
  @property {object} enteredMagicWords - An exploded object of letters
  to wishes and letters.
  @property {Array.<string>} context - an array of all of genie's current contexts
  @property {Array.<string>} previousContext - genie's most recent context
  @property {boolean} enabled - whether genie is enabled
  @property {boolean} returnOnDisabled - whether genie will return an
  empty object when it is disabled.
  @public
   
  An api into genie's options
  The opts argument can have the properties of GenieOptions
  as well as the following property:
  - noWishMerge: boolean - Using this will simply assign the
  given wishes to genie's _wishes variable. If falsy, then
  genie.mergeWishes is called with the wishes.
  
  @param {object} [opts] - if not given, simply returns the options
  @returns {GenieOptions}
  @public