echarts
Version:
Apache ECharts is a powerful, interactive charting and data visualization library for browser
88 lines (87 loc) • 4.23 kB
TypeScript
import { DimensionDefinitionLoose, SourceFormat, DimensionDefinition, DimensionIndex, OptionDataValue, DimensionLoose, ParsedValue, OptionSourceDataObjectRows, OptionSourceDataArrayRows } from '../../util/types.js';
import { Source } from '../Source.js';
export declare type PipedDataTransformOption = DataTransformOption[];
export declare type DataTransformType = string;
export declare type DataTransformConfig = unknown;
export interface DataTransformOption {
type: DataTransformType;
config?: DataTransformConfig;
print?: boolean;
}
export interface ExternalDataTransform<TO extends DataTransformOption = DataTransformOption> {
type: string;
__isBuiltIn?: boolean;
transform: (param: ExternalDataTransformParam<TO>) => ExternalDataTransformResultItem | ExternalDataTransformResultItem[];
}
interface ExternalDataTransformParam<TO extends DataTransformOption = DataTransformOption> {
upstream: ExternalSource;
upstreamList: ExternalSource[];
config: TO['config'];
}
export interface ExternalDataTransformResultItem {
/**
* If `data` is null/undefined, inherit upstream data.
*/
data: OptionSourceDataArrayRows | OptionSourceDataObjectRows;
/**
* A `transform` can optionally return a dimensions definition.
* The rule:
* If this `transform result` have different dimensions from the upstream, it should return
* a new dimension definition. For example, this transform inherit the upstream data totally
* but add a extra dimension.
* Otherwise, do not need to return that dimension definition. echarts will inherit dimension
* definition from the upstream.
*/
dimensions?: DimensionDefinitionLoose[];
}
export declare type DataTransformDataItem = ExternalDataTransformResultItem['data'][number];
export interface ExternalDimensionDefinition extends Partial<DimensionDefinition> {
index: DimensionIndex;
}
/**
* TODO: disable writable.
* This structure will be exposed to users.
*/
export declare class ExternalSource {
/**
* [Caveat]
* This instance is to be exposed to users.
* (1) DO NOT mount private members on this instance directly.
* If we have to use private members, we can make them in closure or use `makeInner`.
* (2) "source header count" is not provided to transform, because it's complicated to manage
* header and dimensions definition in each transform. Source headers are all normalized to
* dimensions definitions in transforms and their downstreams.
*/
sourceFormat: SourceFormat;
getRawData(): Source['data'];
getRawDataItem(dataIndex: number): DataTransformDataItem;
cloneRawData(): Source['data'];
/**
* @return If dimension not found, return null/undefined.
*/
getDimensionInfo(dim: DimensionLoose): ExternalDimensionDefinition;
/**
* dimensions defined if and only if either:
* (a) dataset.dimensions are declared.
* (b) dataset data include dimensions definitions in data (detected or via specified `sourceHeader`).
* If dimensions are defined, `dimensionInfoAll` is corresponding to
* the defined dimensions.
* Otherwise, `dimensionInfoAll` is determined by data columns.
* @return Always return an array (even empty array).
*/
cloneAllDimensionInfo(): ExternalDimensionDefinition[];
count(): number;
/**
* Only support by dimension index.
* No need to support by dimension name in transform function,
* because transform function is not case-specific, no need to use name literally.
*/
retrieveValue(dataIndex: number, dimIndex: DimensionIndex): OptionDataValue;
retrieveValueFromItem(dataItem: DataTransformDataItem, dimIndex: DimensionIndex): OptionDataValue;
convertValue(rawVal: unknown, dimInfo: ExternalDimensionDefinition): ParsedValue;
}
export declare function registerExternalTransform(externalTransform: ExternalDataTransform): void;
export declare function applyDataTransform(rawTransOption: DataTransformOption | PipedDataTransformOption, sourceList: Source[], infoForPrint: {
datasetIndex: number;
}): Source[];
export {};