| 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
  
 | 
  
 | 
/** 
 | 
 * AUTO-GENERATED FILE. DO NOT MODIFY. 
 | 
 */ 
 | 
  
 | 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
var _a, _b, _c; 
 | 
// TODO 
 | 
// ??? refactor? check the outer usage of data provider. 
 | 
// merge with defaultDimValueGetter? 
 | 
import { isTypedArray, extend, assert, each, isObject, bind } from 'zrender/lib/core/util.js'; 
 | 
import { getDataItemValue } from '../../util/model.js'; 
 | 
import { createSourceFromSeriesDataOption, isSourceInstance } from '../Source.js'; 
 | 
import { SOURCE_FORMAT_ORIGINAL, SOURCE_FORMAT_OBJECT_ROWS, SOURCE_FORMAT_KEYED_COLUMNS, SOURCE_FORMAT_TYPED_ARRAY, SOURCE_FORMAT_ARRAY_ROWS, SERIES_LAYOUT_BY_COLUMN, SERIES_LAYOUT_BY_ROW } from '../../util/types.js'; 
 | 
var providerMethods; 
 | 
var mountMethods; 
 | 
/** 
 | 
 * If normal array used, mutable chunk size is supported. 
 | 
 * If typed array used, chunk size must be fixed. 
 | 
 */ 
 | 
var DefaultDataProvider = /** @class */function () { 
 | 
  function DefaultDataProvider(sourceParam, dimSize) { 
 | 
    // let source: Source; 
 | 
    var source = !isSourceInstance(sourceParam) ? createSourceFromSeriesDataOption(sourceParam) : sourceParam; 
 | 
    // declare source is Source; 
 | 
    this._source = source; 
 | 
    var data = this._data = source.data; 
 | 
    // Typed array. TODO IE10+? 
 | 
    if (source.sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) { 
 | 
      if (process.env.NODE_ENV !== 'production') { 
 | 
        if (dimSize == null) { 
 | 
          throw new Error('Typed array data must specify dimension size'); 
 | 
        } 
 | 
      } 
 | 
      this._offset = 0; 
 | 
      this._dimSize = dimSize; 
 | 
      this._data = data; 
 | 
    } 
 | 
    mountMethods(this, data, source); 
 | 
  } 
 | 
  DefaultDataProvider.prototype.getSource = function () { 
 | 
    return this._source; 
 | 
  }; 
 | 
  DefaultDataProvider.prototype.count = function () { 
 | 
    return 0; 
 | 
  }; 
 | 
  DefaultDataProvider.prototype.getItem = function (idx, out) { 
 | 
    return; 
 | 
  }; 
 | 
  DefaultDataProvider.prototype.appendData = function (newData) {}; 
 | 
  DefaultDataProvider.prototype.clean = function () {}; 
 | 
  DefaultDataProvider.protoInitialize = function () { 
 | 
    // PENDING: To avoid potential incompat (e.g., prototype 
 | 
    // is visited somewhere), still init them on prototype. 
 | 
    var proto = DefaultDataProvider.prototype; 
 | 
    proto.pure = false; 
 | 
    proto.persistent = true; 
 | 
  }(); 
 | 
  DefaultDataProvider.internalField = function () { 
 | 
    var _a; 
 | 
    mountMethods = function (provider, data, source) { 
 | 
      var sourceFormat = source.sourceFormat; 
 | 
      var seriesLayoutBy = source.seriesLayoutBy; 
 | 
      var startIndex = source.startIndex; 
 | 
      var dimsDef = source.dimensionsDefine; 
 | 
      var methods = providerMethods[getMethodMapKey(sourceFormat, seriesLayoutBy)]; 
 | 
      if (process.env.NODE_ENV !== 'production') { 
 | 
        assert(methods, 'Invalide sourceFormat: ' + sourceFormat); 
 | 
      } 
 | 
      extend(provider, methods); 
 | 
      if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) { 
 | 
        provider.getItem = getItemForTypedArray; 
 | 
        provider.count = countForTypedArray; 
 | 
        provider.fillStorage = fillStorageForTypedArray; 
 | 
      } else { 
 | 
        var rawItemGetter = getRawSourceItemGetter(sourceFormat, seriesLayoutBy); 
 | 
        provider.getItem = bind(rawItemGetter, null, data, startIndex, dimsDef); 
 | 
        var rawCounter = getRawSourceDataCounter(sourceFormat, seriesLayoutBy); 
 | 
        provider.count = bind(rawCounter, null, data, startIndex, dimsDef); 
 | 
      } 
 | 
    }; 
 | 
    var getItemForTypedArray = function (idx, out) { 
 | 
      idx = idx - this._offset; 
 | 
      out = out || []; 
 | 
      var data = this._data; 
 | 
      var dimSize = this._dimSize; 
 | 
      var offset = dimSize * idx; 
 | 
      for (var i = 0; i < dimSize; i++) { 
 | 
        out[i] = data[offset + i]; 
 | 
      } 
 | 
      return out; 
 | 
    }; 
 | 
    var fillStorageForTypedArray = function (start, end, storage, extent) { 
 | 
      var data = this._data; 
 | 
      var dimSize = this._dimSize; 
 | 
      for (var dim = 0; dim < dimSize; dim++) { 
 | 
        var dimExtent = extent[dim]; 
 | 
        var min = dimExtent[0] == null ? Infinity : dimExtent[0]; 
 | 
        var max = dimExtent[1] == null ? -Infinity : dimExtent[1]; 
 | 
        var count = end - start; 
 | 
        var arr = storage[dim]; 
 | 
        for (var i = 0; i < count; i++) { 
 | 
          // appendData with TypedArray will always do replace in provider. 
 | 
          var val = data[i * dimSize + dim]; 
 | 
          arr[start + i] = val; 
 | 
          val < min && (min = val); 
 | 
          val > max && (max = val); 
 | 
        } 
 | 
        dimExtent[0] = min; 
 | 
        dimExtent[1] = max; 
 | 
      } 
 | 
    }; 
 | 
    var countForTypedArray = function () { 
 | 
      return this._data ? this._data.length / this._dimSize : 0; 
 | 
    }; 
 | 
    providerMethods = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = { 
 | 
      pure: true, 
 | 
      appendData: appendDataSimply 
 | 
    }, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = { 
 | 
      pure: true, 
 | 
      appendData: function () { 
 | 
        throw new Error('Do not support appendData when set seriesLayoutBy: "row".'); 
 | 
      } 
 | 
    }, _a[SOURCE_FORMAT_OBJECT_ROWS] = { 
 | 
      pure: true, 
 | 
      appendData: appendDataSimply 
 | 
    }, _a[SOURCE_FORMAT_KEYED_COLUMNS] = { 
 | 
      pure: true, 
 | 
      appendData: function (newData) { 
 | 
        var data = this._data; 
 | 
        each(newData, function (newCol, key) { 
 | 
          var oldCol = data[key] || (data[key] = []); 
 | 
          for (var i = 0; i < (newCol || []).length; i++) { 
 | 
            oldCol.push(newCol[i]); 
 | 
          } 
 | 
        }); 
 | 
      } 
 | 
    }, _a[SOURCE_FORMAT_ORIGINAL] = { 
 | 
      appendData: appendDataSimply 
 | 
    }, _a[SOURCE_FORMAT_TYPED_ARRAY] = { 
 | 
      persistent: false, 
 | 
      pure: true, 
 | 
      appendData: function (newData) { 
 | 
        if (process.env.NODE_ENV !== 'production') { 
 | 
          assert(isTypedArray(newData), 'Added data must be TypedArray if data in initialization is TypedArray'); 
 | 
        } 
 | 
        this._data = newData; 
 | 
      }, 
 | 
      // Clean self if data is already used. 
 | 
      clean: function () { 
 | 
        // PENDING 
 | 
        this._offset += this.count(); 
 | 
        this._data = null; 
 | 
      } 
 | 
    }, _a); 
 | 
    function appendDataSimply(newData) { 
 | 
      for (var i = 0; i < newData.length; i++) { 
 | 
        this._data.push(newData[i]); 
 | 
      } 
 | 
    } 
 | 
  }(); 
 | 
  return DefaultDataProvider; 
 | 
}(); 
 | 
export { DefaultDataProvider }; 
 | 
var getItemSimply = function (rawData, startIndex, dimsDef, idx) { 
 | 
  return rawData[idx]; 
 | 
}; 
 | 
var rawSourceItemGetterMap = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = function (rawData, startIndex, dimsDef, idx) { 
 | 
  return rawData[idx + startIndex]; 
 | 
}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = function (rawData, startIndex, dimsDef, idx, out) { 
 | 
  idx += startIndex; 
 | 
  var item = out || []; 
 | 
  var data = rawData; 
 | 
  for (var i = 0; i < data.length; i++) { 
 | 
    var row = data[i]; 
 | 
    item[i] = row ? row[idx] : null; 
 | 
  } 
 | 
  return item; 
 | 
}, _a[SOURCE_FORMAT_OBJECT_ROWS] = getItemSimply, _a[SOURCE_FORMAT_KEYED_COLUMNS] = function (rawData, startIndex, dimsDef, idx, out) { 
 | 
  var item = out || []; 
 | 
  for (var i = 0; i < dimsDef.length; i++) { 
 | 
    var dimName = dimsDef[i].name; 
 | 
    if (process.env.NODE_ENV !== 'production') { 
 | 
      if (dimName == null) { 
 | 
        throw new Error(); 
 | 
      } 
 | 
    } 
 | 
    var col = rawData[dimName]; 
 | 
    item[i] = col ? col[idx] : null; 
 | 
  } 
 | 
  return item; 
 | 
}, _a[SOURCE_FORMAT_ORIGINAL] = getItemSimply, _a); 
 | 
export function getRawSourceItemGetter(sourceFormat, seriesLayoutBy) { 
 | 
  var method = rawSourceItemGetterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)]; 
 | 
  if (process.env.NODE_ENV !== 'production') { 
 | 
    assert(method, 'Do not support get item on "' + sourceFormat + '", "' + seriesLayoutBy + '".'); 
 | 
  } 
 | 
  return method; 
 | 
} 
 | 
var countSimply = function (rawData, startIndex, dimsDef) { 
 | 
  return rawData.length; 
 | 
}; 
 | 
var rawSourceDataCounterMap = (_b = {}, _b[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = function (rawData, startIndex, dimsDef) { 
 | 
  return Math.max(0, rawData.length - startIndex); 
 | 
}, _b[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = function (rawData, startIndex, dimsDef) { 
 | 
  var row = rawData[0]; 
 | 
  return row ? Math.max(0, row.length - startIndex) : 0; 
 | 
}, _b[SOURCE_FORMAT_OBJECT_ROWS] = countSimply, _b[SOURCE_FORMAT_KEYED_COLUMNS] = function (rawData, startIndex, dimsDef) { 
 | 
  var dimName = dimsDef[0].name; 
 | 
  if (process.env.NODE_ENV !== 'production') { 
 | 
    if (dimName == null) { 
 | 
      throw new Error(); 
 | 
    } 
 | 
  } 
 | 
  var col = rawData[dimName]; 
 | 
  return col ? col.length : 0; 
 | 
}, _b[SOURCE_FORMAT_ORIGINAL] = countSimply, _b); 
 | 
export function getRawSourceDataCounter(sourceFormat, seriesLayoutBy) { 
 | 
  var method = rawSourceDataCounterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)]; 
 | 
  if (process.env.NODE_ENV !== 'production') { 
 | 
    assert(method, 'Do not support count on "' + sourceFormat + '", "' + seriesLayoutBy + '".'); 
 | 
  } 
 | 
  return method; 
 | 
} 
 | 
var getRawValueSimply = function (dataItem, dimIndex, property) { 
 | 
  return dataItem[dimIndex]; 
 | 
}; 
 | 
var rawSourceValueGetterMap = (_c = {}, _c[SOURCE_FORMAT_ARRAY_ROWS] = getRawValueSimply, _c[SOURCE_FORMAT_OBJECT_ROWS] = function (dataItem, dimIndex, property) { 
 | 
  return dataItem[property]; 
 | 
}, _c[SOURCE_FORMAT_KEYED_COLUMNS] = getRawValueSimply, _c[SOURCE_FORMAT_ORIGINAL] = function (dataItem, dimIndex, property) { 
 | 
  // FIXME: In some case (markpoint in geo (geo-map.html)), 
 | 
  // dataItem is {coord: [...]} 
 | 
  var value = getDataItemValue(dataItem); 
 | 
  return !(value instanceof Array) ? value : value[dimIndex]; 
 | 
}, _c[SOURCE_FORMAT_TYPED_ARRAY] = getRawValueSimply, _c); 
 | 
export function getRawSourceValueGetter(sourceFormat) { 
 | 
  var method = rawSourceValueGetterMap[sourceFormat]; 
 | 
  if (process.env.NODE_ENV !== 'production') { 
 | 
    assert(method, 'Do not support get value on "' + sourceFormat + '".'); 
 | 
  } 
 | 
  return method; 
 | 
} 
 | 
function getMethodMapKey(sourceFormat, seriesLayoutBy) { 
 | 
  return sourceFormat === SOURCE_FORMAT_ARRAY_ROWS ? sourceFormat + '_' + seriesLayoutBy : sourceFormat; 
 | 
} 
 | 
// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem, 
 | 
// Consider persistent. 
 | 
// Caution: why use raw value to display on label or tooltip? 
 | 
// A reason is to avoid format. For example time value we do not know 
 | 
// how to format is expected. More over, if stack is used, calculated 
 | 
// value may be 0.91000000001, which have brings trouble to display. 
 | 
// TODO: consider how to treat null/undefined/NaN when display? 
 | 
export function retrieveRawValue(data, dataIndex, 
 | 
// If dimIndex is null/undefined, return OptionDataItem. 
 | 
// Otherwise, return OptionDataValue. 
 | 
dim) { 
 | 
  if (!data) { 
 | 
    return; 
 | 
  } 
 | 
  // Consider data may be not persistent. 
 | 
  var dataItem = data.getRawDataItem(dataIndex); 
 | 
  if (dataItem == null) { 
 | 
    return; 
 | 
  } 
 | 
  var store = data.getStore(); 
 | 
  var sourceFormat = store.getSource().sourceFormat; 
 | 
  if (dim != null) { 
 | 
    var dimIndex = data.getDimensionIndex(dim); 
 | 
    var property = store.getDimensionProperty(dimIndex); 
 | 
    return getRawSourceValueGetter(sourceFormat)(dataItem, dimIndex, property); 
 | 
  } else { 
 | 
    var result = dataItem; 
 | 
    if (sourceFormat === SOURCE_FORMAT_ORIGINAL) { 
 | 
      result = getDataItemValue(dataItem); 
 | 
    } 
 | 
    return result; 
 | 
  } 
 | 
} 
 | 
/** 
 | 
 * Compatible with some cases (in pie, map) like: 
 | 
 * data: [{name: 'xx', value: 5, selected: true}, ...] 
 | 
 * where only sourceFormat is 'original' and 'objectRows' supported. 
 | 
 * 
 | 
 * // TODO 
 | 
 * Supported detail options in data item when using 'arrayRows'. 
 | 
 * 
 | 
 * @param data 
 | 
 * @param dataIndex 
 | 
 * @param attr like 'selected' 
 | 
 */ 
 | 
export function retrieveRawAttr(data, dataIndex, attr) { 
 | 
  if (!data) { 
 | 
    return; 
 | 
  } 
 | 
  var sourceFormat = data.getStore().getSource().sourceFormat; 
 | 
  if (sourceFormat !== SOURCE_FORMAT_ORIGINAL && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS) { 
 | 
    return; 
 | 
  } 
 | 
  var dataItem = data.getRawDataItem(dataIndex); 
 | 
  if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject(dataItem)) { 
 | 
    dataItem = null; 
 | 
  } 
 | 
  if (dataItem) { 
 | 
    return dataItem[attr]; 
 | 
  } 
 | 
} 
 |