d8225ee44fdc845ee4334d7c4b5e31498350fcca7cc04c40bba488bac1784b39f98488bd321465286fb1120d6550d4b93add362b5d396f543eb0aadfdd2cda 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { DimensionDefinitionLoose, SourceFormat, DimensionDefinition, DimensionIndex, OptionDataValue, DimensionLoose, ParsedValue, OptionSourceDataObjectRows, OptionSourceDataArrayRows } from '../../util/types.js';
  2. import { Source } from '../Source.js';
  3. export declare type PipedDataTransformOption = DataTransformOption[];
  4. export declare type DataTransformType = string;
  5. export declare type DataTransformConfig = unknown;
  6. export interface DataTransformOption {
  7. type: DataTransformType;
  8. config?: DataTransformConfig;
  9. print?: boolean;
  10. }
  11. export interface ExternalDataTransform<TO extends DataTransformOption = DataTransformOption> {
  12. type: string;
  13. __isBuiltIn?: boolean;
  14. transform: (param: ExternalDataTransformParam<TO>) => ExternalDataTransformResultItem | ExternalDataTransformResultItem[];
  15. }
  16. interface ExternalDataTransformParam<TO extends DataTransformOption = DataTransformOption> {
  17. upstream: ExternalSource;
  18. upstreamList: ExternalSource[];
  19. config: TO['config'];
  20. }
  21. export interface ExternalDataTransformResultItem {
  22. /**
  23. * If `data` is null/undefined, inherit upstream data.
  24. */
  25. data: OptionSourceDataArrayRows | OptionSourceDataObjectRows;
  26. /**
  27. * A `transform` can optionally return a dimensions definition.
  28. * The rule:
  29. * If this `transform result` have different dimensions from the upstream, it should return
  30. * a new dimension definition. For example, this transform inherit the upstream data totally
  31. * but add a extra dimension.
  32. * Otherwise, do not need to return that dimension definition. echarts will inherit dimension
  33. * definition from the upstream.
  34. */
  35. dimensions?: DimensionDefinitionLoose[];
  36. }
  37. export declare type DataTransformDataItem = ExternalDataTransformResultItem['data'][number];
  38. export interface ExternalDimensionDefinition extends Partial<DimensionDefinition> {
  39. index: DimensionIndex;
  40. }
  41. /**
  42. * TODO: disable writable.
  43. * This structure will be exposed to users.
  44. */
  45. export declare class ExternalSource {
  46. /**
  47. * [Caveat]
  48. * This instance is to be exposed to users.
  49. * (1) DO NOT mount private members on this instance directly.
  50. * If we have to use private members, we can make them in closure or use `makeInner`.
  51. * (2) "soruce header count" is not provided to transform, because it's complicated to manage
  52. * header and dimensions definition in each transfrom. Source header are all normalized to
  53. * dimensions definitions in transforms and their downstreams.
  54. */
  55. sourceFormat: SourceFormat;
  56. getRawData(): Source['data'];
  57. getRawDataItem(dataIndex: number): DataTransformDataItem;
  58. cloneRawData(): Source['data'];
  59. /**
  60. * @return If dimension not found, return null/undefined.
  61. */
  62. getDimensionInfo(dim: DimensionLoose): ExternalDimensionDefinition;
  63. /**
  64. * dimensions defined if and only if either:
  65. * (a) dataset.dimensions are declared.
  66. * (b) dataset data include dimensions definitions in data (detected or via specified `sourceHeader`).
  67. * If dimensions are defined, `dimensionInfoAll` is corresponding to
  68. * the defined dimensions.
  69. * Otherwise, `dimensionInfoAll` is determined by data columns.
  70. * @return Always return an array (even empty array).
  71. */
  72. cloneAllDimensionInfo(): ExternalDimensionDefinition[];
  73. count(): number;
  74. /**
  75. * Only support by dimension index.
  76. * No need to support by dimension name in transform function,
  77. * becuase transform function is not case-specific, no need to use name literally.
  78. */
  79. retrieveValue(dataIndex: number, dimIndex: DimensionIndex): OptionDataValue;
  80. retrieveValueFromItem(dataItem: DataTransformDataItem, dimIndex: DimensionIndex): OptionDataValue;
  81. convertValue(rawVal: unknown, dimInfo: ExternalDimensionDefinition): ParsedValue;
  82. }
  83. export declare function registerExternalTransform(externalTransform: ExternalDataTransform): void;
  84. export declare function applyDataTransform(rawTransOption: DataTransformOption | PipedDataTransformOption, sourceList: Source[], infoForPrint: {
  85. datasetIndex: number;
  86. }): Source[];
  87. export {};