/* * 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. */ import { registerPreprocessor, registerProcessor, registerPostInit, registerPostUpdate, registerAction, registerCoordinateSystem, registerLayout, registerVisual, registerTransform, registerLoading, registerMap, registerUpdateLifecycle, PRIORITY } from './core/echarts'; import ComponentView from './view/Component'; import ChartView from './view/Chart'; import ComponentModel from './model/Component'; import SeriesModel from './model/Series'; import { isFunction, indexOf, isArray, each } from 'zrender/src/core/util'; import { Constructor } from './util/clazz'; import { SubTypeDefaulter } from './util/component'; import { registerImpl } from './core/impl'; import { registerPainter } from 'zrender/src/zrender'; const extensions: (EChartsExtensionInstaller | EChartsExtension)[] = []; const extensionRegisters = { registerPreprocessor, registerProcessor, registerPostInit, registerPostUpdate, registerUpdateLifecycle, registerAction, registerCoordinateSystem, registerLayout, registerVisual, registerTransform, registerLoading, registerMap, registerImpl, PRIORITY, ComponentModel, ComponentView, SeriesModel, ChartView, // TODO Use ComponentModel and SeriesModel instead of Constructor registerComponentModel(ComponentModelClass: Constructor) { ComponentModel.registerClass(ComponentModelClass); }, registerComponentView(ComponentViewClass: typeof ComponentView) { ComponentView.registerClass(ComponentViewClass); }, registerSeriesModel(SeriesModelClass: Constructor) { SeriesModel.registerClass(SeriesModelClass); }, registerChartView(ChartViewClass: typeof ChartView) { ChartView.registerClass(ChartViewClass); }, registerSubTypeDefaulter(componentType: string, defaulter: SubTypeDefaulter) { ComponentModel.registerSubTypeDefaulter(componentType, defaulter); }, registerPainter(painterType: string, PainterCtor: Parameters[1]) { registerPainter(painterType, PainterCtor); } }; export type EChartsExtensionInstallRegisters = typeof extensionRegisters; export type EChartsExtensionInstaller = (ec: EChartsExtensionInstallRegisters) => void; export interface EChartsExtension { install: EChartsExtensionInstaller } export function use( ext: EChartsExtensionInstaller | EChartsExtension | (EChartsExtensionInstaller | EChartsExtension)[] ) { if (isArray(ext)) { // use([ChartLine, ChartBar]); each(ext, (singleExt) => { use(singleExt); }); return; } if (indexOf(extensions, ext) >= 0) { return; } extensions.push(ext); if (isFunction(ext)) { ext = { install: ext }; } ext.install(extensionRegisters); } // A simpler use type for exporting to reduce exported inner modules. export type EChartsExtensionInstallerSimple = (registers: any) => void; type SimpleEChartsExtensionType = EChartsExtensionInstallerSimple | { install: EChartsExtensionInstallerSimple }; export declare function useSimple(ext: SimpleEChartsExtensionType | (SimpleEChartsExtensionType)[]): void;