function Container(opts) {
  utils.classCallCheck(this, Container);
  Component$1.call(this);
  opts || (opts = {});
  Object.defineProperties(this, {
    /**
     * The adapters registered with this Container, which are also shared by all
     * Mappers in this Container.
     *
     * @name Container#_adapters
     * @see Container#registerAdapter
     * @since 3.0.0
     * @type {Object}
     */
    _adapters: {
      value: {}
    },

    /**
     * The the mappers in this container
     *
     * @name Container#_mappers
     * @see Mapper
     * @since 3.0.0
     * @type {Object}
     */
    _mappers: {
      value: {}
    },

    /**
     * Constructor function to use in {@link Container#defineMapper} to create new
     * {@link Mapper} instances. {@link Container#mapperClass} should extend
     * {@link Mapper}. By default {@link Mapper} is used to instantiate Mappers.
     *
     * @example <caption>Container#mapperClass</caption>
     * // import { Container, Mapper } from 'js-data';
     * const JSData = require('js-data');
     * const { Container, Mapper } = JSData;
     * console.log('Using JSData v' + JSData.version.full);
     *
     * class MyMapperClass extends Mapper {
     *   foo () { return 'bar' }
     * }
     * const store = new Container({
     *   mapperClass: MyMapperClass
     * });
     * store.defineMapper('user');
     * console.log(store.getMapper('user').foo());
     *
     * @name Container#mapperClass
     * @see Mapper
     * @since 3.0.0
     * @type {Constructor}
     */
    mapperClass: {
      value: undefined,
      writable: true
    }
  }); // Apply options provided by the user

  utils.fillIn(this, opts);
  /**
   * Defaults options to pass to {@link Container#mapperClass} when creating a
   * new {@link Mapper}.
   *
   * @example <caption>Container#mapperDefaults</caption>
   * // import { Container } from 'js-data';
   * const JSData = require('js-data');
   * const { Container } = JSData;
   * console.log('Using JSData v' + JSData.version.full);
   *
   * const store = new Container({
   *   mapperDefaults: {
   *     idAttribute: '_id'
   *   }
   * });
   * store.defineMapper('user');
   * console.log(store.getMapper('user').idAttribute);
   *
   * @default {}
   * @name Container#mapperDefaults
   * @since 3.0.0
   * @type {Object}
   */

  this.mapperDefaults = this.mapperDefaults || {}; // Use the Mapper class if the user didn't provide a mapperClass

  this.mapperClass || (this.mapperClass = Mapper$1);
}
The `Container` class is a place to define and store {@link Mapper} instances.

`Container` makes it easy to manage your Mappers. Without a container, you
need to manage Mappers yourself, including resolving circular dependencies
among relations. All Mappers in a container share the same adapters, so you
don't have to register adapters for every single Mapper.

@example <caption>Container#constructor</caption>
// import { Container } from 'js-data';
const JSData = require('js-data');
const {Container} = JSData;
console.log('Using JSData v' + JSData.version.full);

const store = new Container();

@class Container
@extends Component
@param {object} [opts] Configuration options.
@param {boolean} [opts.debug=false] See {@link Component#debug}.
@param {Constructor} [opts.mapperClass] See {@link Container#mapperClass}.
@param {object} [opts.mapperDefaults] See {@link Container#mapperDefaults}.
@since 3.0.0