function Component(opts) {
  Settable.call(this);
  opts || (opts = {});
  /**
   * Whether to enable debug-level logs for this component. Anything that
   * extends `Component` inherits this option and the corresponding logging
   * functionality.
   *
   * @example <caption>Component#debug</caption>
   * const JSData = require('js-data');
   * const { Component } = JSData;
   * console.log('Using JSData v' + JSData.version.full);
   *
   * const component = new Component();
   * component.log('debug', 'some message'); // nothing gets logged
   * // Display debug logs:
   * component.debug = true;
   * component.log('debug', 'other message'); // this DOES get logged
   *
   * @default false
   * @name Component#debug
   * @since 3.0.0
   * @type {boolean}
   */

  this.debug = Object.hasOwnProperty.call(opts, 'debug') ? !!opts.debug : false;
  /**
   * Event listeners attached to this Component. __Do not modify.__ Use
   * {@link Component#on} and {@link Component#off} instead.
   *
   * @name Component#_listeners
   * @private
   * @instance
   * @since 3.0.0
   * @type {Object}
   */

  Object.defineProperty(this, '_listeners', {
    value: {},
    writable: true
  });
}
The base class from which all JSData components inherit some basic
functionality.

Typically you won't instantiate this class directly, but you may find it
useful as an abstract class for your own components.

See {@link Component.extend} for an example of using {@link Component} as a
base class.

```javascript
import {Component} from 'js-data'
```

@class Component
@param {object} [opts] Configuration options.
@param {boolean} [opts.debug=false] See {@link Component#debug}.
@returns {Component} A new {@link Component} instance.
@since 3.0.0