function DataMap(instance, priv, GridSettings) {
    var _this = this;

    (0, _classCallCheck2.default)(this, DataMap);

    /**
     * Instance of {@link Handsontable}
     *
     * @private
     * @type {Handsontable}
     */
    this.instance = instance;
    /**
     * Private settings object.
     *
     * @private
     * @type {Object}
     */

    this.priv = priv;
    /**
     * Instance of {@link GridSettings}
     *
     * @private
     * @type {GridSettings}
     */

    this.GridSettings = GridSettings;
    /**
     * Reference to the original dataset.
     *
     * @type {*}
     */

    this.dataSource = this.instance.getSettings().data;
    /**
     * Cached rows number.
     *
     * @type {Number}
     */

    this.cachedLength = null;
    /**
     * Flag determines if the cache should be used.
     *
     * @type {Boolean}
     */

    this.skipCache = false;
    /**
     * Cached sourceData rows number.
     *
     * @type {Number}
     */

    this.latestSourceRowsCount = 0;
    /**
     * Generated schema based on the first row from the source data.
     *
     * @type {Object}
     */

    this.duckSchema = this.dataSource && this.dataSource[0] ? (0, _object.duckSchema)(this.dataSource[0]) : {};
    /**
     * Cached array of properties to columns.
     *
     * @type {Array}
     */

    this.colToPropCache = void 0;
    /**
     * Cached map of properties to columns.
     *
     * @type {Map}
     */

    this.propToColCache = void 0;
    this.createMap();
    /**
     * Instance of {@link Interval}
     *
     * @type {Interval}
     */

    this.interval = _interval.default.create(function () {
      return _this.clearLengthCache();
    }, '15fps');
    this.instance.addHook('skipLengthCache', function (delay) {
      return _this.onSkipLengthCache(delay);
    });
    this.onSkipLengthCache(500);
  }
@param {Object} instance Instance of Handsontable
@param {*} priv
@param {GridSettings} GridSettings Grid settings