docs: function Source(fields) {
  
      /**
       * @type {boolean}
       */
      this.fromDataset = fields.fromDataset;
  
      /**
       * Not null/undefined.
       * @type {Array|Object}
       */
      this.data = fields.data || (
          fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []
      );
  
      /**
       * See also "detectSourceFormat".
       * Not null/undefined.
       * @type {string}
       */
      this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;
  
      /**
       * 'row' or 'column'
       * Not null/undefined.
       * @type {string} seriesLayoutBy
       */
      this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;
  
      /**
       * dimensions definition in option.
       * can be null/undefined.
       * @type {Array.<Object|string>}
       */
      this.dimensionsDefine = fields.dimensionsDefine;
  
      /**
       * encode definition in option.
       * can be null/undefined.
       * @type {Objet|HashMap}
       */
      this.encodeDefine = fields.encodeDefine && createHashMap(fields.encodeDefine);
  
      /**
       * Not null/undefined, uint.
       * @type {number}
       */
      this.startIndex = fields.startIndex || 0;
  
      /**
       * Can be null/undefined (when unknown), uint.
       * @type {number}
       */
      this.dimensionsDetectCount = fields.dimensionsDetectCount;
  }