You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by wa...@apache.org on 2022/08/18 09:50:25 UTC
[echarts] 01/01: feat(type): export helpful types and APIs for extension developers.
This is an automated email from the ASF dual-hosted git repository.
wangzx pushed a commit to branch feat-extension-type
in repository https://gitbox.apache.org/repos/asf/echarts.git
commit 5c6290646f62bcae15779b1755a925203512ff05
Author: plainheart <yh...@all-my-life.cn>
AuthorDate: Thu Aug 18 15:05:34 2022 +0800
feat(type): export helpful types and APIs for extension developers.
---
.gitignore | 2 ++
build/pre-publish.js | 10 +++---
build/template/extensionHelper.d.ts | 20 ++++++++++++
build/template/extensionHelper.js | 20 ++++++++++++
src/export/api.ts | 58 ++--------------------------------
src/export/core.ts | 2 +-
src/export/{api.ts => extensionAPI.ts} | 36 ++-------------------
src/export/extensionHelper.ts | 22 +++++++++++++
src/extension.ts | 2 +-
test/types/importPartial.ts | 18 +++++++++--
10 files changed, 91 insertions(+), 99 deletions(-)
diff --git a/.gitignore b/.gitignore
index ba7541926..a974b3ad8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -205,4 +205,6 @@ todo
/renderers.d.ts
/features.js
/features.d.ts
+/extensionHelper.js
+/extensionHelper.d.ts
*.tgz
diff --git a/build/pre-publish.js b/build/pre-publish.js
index 75d7c771a..18eff2693 100644
--- a/build/pre-publish.js
+++ b/build/pre-publish.js
@@ -169,9 +169,9 @@ module.exports = async function () {
process.stdout.write(chalk.green.dim(` done \n`));
}
- process.stdout.write(chalk.green.dim(`Generating entries ...`));
+ process.stdout.write(chalk.green.dim(`Generating entries ...\n`));
generateEntries();
- process.stdout.write(chalk.green.dim(`Bundling DTS ...`));
+ process.stdout.write(chalk.green.dim(`Bundling DTS ...\n`));
await bundleDTS();
console.log(chalk.green.dim('All done.'));
@@ -372,7 +372,7 @@ async function bundleDTS() {
// Bundle chunks.
const parts = [
- 'core', 'charts', 'components', 'renderers', 'option', 'features'
+ 'core', 'charts', 'components', 'renderers', 'option', 'features', 'extensionHelper'
];
const inputs = {};
parts.forEach(partName => {
@@ -383,7 +383,7 @@ async function bundleDTS() {
input: inputs,
...commonConfig
});
- let idx = 1;
+
await bundle.write({
dir: outDir,
minifyInternalExports: false,
@@ -414,7 +414,7 @@ function readTSConfig() {
function generateEntries() {
- ['charts', 'components', 'renderers', 'core', 'features'].forEach(entryName => {
+ ['charts', 'components', 'renderers', 'core', 'features', 'extensionHelper'].forEach(entryName => {
if (entryName !== 'option') {
const jsCode = fs.readFileSync(nodePath.join(__dirname, `template/${entryName}.js`), 'utf-8');
fs.writeFileSync(nodePath.join(__dirname, `../${entryName}.js`), jsCode, 'utf-8');
diff --git a/build/template/extensionHelper.d.ts b/build/template/extensionHelper.d.ts
new file mode 100644
index 000000000..a40a51cea
--- /dev/null
+++ b/build/template/extensionHelper.d.ts
@@ -0,0 +1,20 @@
+/*
+* 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.
+*/
+
+export * from './types/dist/extensionHelper';
\ No newline at end of file
diff --git a/build/template/extensionHelper.js b/build/template/extensionHelper.js
new file mode 100644
index 000000000..f2b9fc387
--- /dev/null
+++ b/build/template/extensionHelper.js
@@ -0,0 +1,20 @@
+/*
+* 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.
+*/
+
+export * from './lib/export/extensionHelper';
\ No newline at end of file
diff --git a/src/export/api.ts b/src/export/api.ts
index 4b777a237..6693384db 100644
--- a/src/export/api.ts
+++ b/src/export/api.ts
@@ -17,15 +17,6 @@
* under the License.
*/
-// These APIs are for more advanced usages
-// For example extend charts and components, creating graphic elements, formatting.
-import ComponentModel, { ComponentModelConstructor } from '../model/Component';
-import ComponentView, { ComponentViewConstructor } from '../view/Component';
-import SeriesModel, { SeriesModelConstructor } from '../model/Series';
-import ChartView, { ChartViewConstructor } from '../view/Chart';
-
-import SeriesData from '../data/SeriesData';
-
// Provide utilities API in echarts. It will be in echarts namespace.
// Like echarts.util, echarts.graphic
export * as zrender from 'zrender/src/zrender';
@@ -55,50 +46,5 @@ export * as util from './api/util';
export {default as env} from 'zrender/src/core/env';
-//////////////// Export for Exension Usage ////////////////
-// export {SeriesData};
-export {SeriesData as List}; // TODO: Compatitable with exists echarts-gl code
-export {default as Model} from '../model/Model';
-export {default as Axis} from '../coord/Axis';
-
-export {
- ComponentModel,
- ComponentView,
- SeriesModel,
- ChartView
-};
-
-// Only for GL
-export {brushSingle as innerDrawElementOnCanvas} from 'zrender/src/canvas/graphic';
-
-
-//////////////// Deprecated Extension Methods ////////////////
-
-// Should use `ComponentModel.extend` or `class XXXX extend ComponentModel` to create class.
-// Then use `registerComponentModel` in `install` parameter when `use` this extension. For example:
-// class Bar3DModel extends ComponentModel {}
-// export function install(registers) { regsiters.registerComponentModel(Bar3DModel); }
-// echarts.use(install);
-export function extendComponentModel(proto: object): ComponentModel {
- const Model = (ComponentModel as ComponentModelConstructor).extend(proto) as any;
- ComponentModel.registerClass(Model);
- return Model;
-}
-
-export function extendComponentView(proto: object): ChartView {
- const View = (ComponentView as ComponentViewConstructor).extend(proto) as any;
- ComponentView.registerClass(View);
- return View;
-}
-
-export function extendSeriesModel(proto: object): SeriesModel {
- const Model = (SeriesModel as SeriesModelConstructor).extend(proto) as any;
- SeriesModel.registerClass(Model);
- return Model;
-}
-
-export function extendChartView(proto: object): ChartView {
- const View = (ChartView as ChartViewConstructor).extend(proto) as any;
- ChartView.registerClass(View);
- return View;
-}
+//////////////// Extension APIs /////////////////////
+export * from './extensionAPI';
diff --git a/src/export/core.ts b/src/export/core.ts
index d17b784b0..655bbf1b8 100644
--- a/src/export/core.ts
+++ b/src/export/core.ts
@@ -114,4 +114,4 @@ export type ComposeOption<OptionUnion extends ComponentOption> =
ComposeUnitOption<OptionUnion> & {
baseOption?: ComposeUnitOption<OptionUnion>
options?: ComposeUnitOption<OptionUnion>[]
- };
\ No newline at end of file
+ };
diff --git a/src/export/api.ts b/src/export/extensionAPI.ts
similarity index 70%
copy from src/export/api.ts
copy to src/export/extensionAPI.ts
index 4b777a237..7b602d3b3 100644
--- a/src/export/api.ts
+++ b/src/export/extensionAPI.ts
@@ -26,38 +26,7 @@ import ChartView, { ChartViewConstructor } from '../view/Chart';
import SeriesData from '../data/SeriesData';
-// Provide utilities API in echarts. It will be in echarts namespace.
-// Like echarts.util, echarts.graphic
-export * as zrender from 'zrender/src/zrender';
-
-export * as matrix from 'zrender/src/core/matrix';
-export * as vector from 'zrender/src/core/vector';
-export * as zrUtil from 'zrender/src/core/util';
-export * as color from 'zrender/src/tool/color';
-export {throttle} from '../util/throttle';
-export * as helper from './api/helper';
-
-export {use} from '../extension';
-
-export {setPlatformAPI} from 'zrender/src/core/platform';
-
-//////////////// Helper Methods /////////////////////
-export {default as parseGeoJSON} from '../coord/geo/parseGeoJson';
-export {default as parseGeoJson} from '../coord/geo/parseGeoJson';
-
-export * as number from './api/number';
-export * as time from './api/time';
-export * as graphic from './api/graphic';
-
-export * as format from './api/format';
-
-export * as util from './api/util';
-
-export {default as env} from 'zrender/src/core/env';
-
-//////////////// Export for Exension Usage ////////////////
-// export {SeriesData};
-export {SeriesData as List}; // TODO: Compatitable with exists echarts-gl code
+export {SeriesData as List}; // TODO: Compatible with exists echarts-gl code
export {default as Model} from '../model/Model';
export {default as Axis} from '../coord/Axis';
@@ -71,7 +40,6 @@ export {
// Only for GL
export {brushSingle as innerDrawElementOnCanvas} from 'zrender/src/canvas/graphic';
-
//////////////// Deprecated Extension Methods ////////////////
// Should use `ComponentModel.extend` or `class XXXX extend ComponentModel` to create class.
@@ -101,4 +69,4 @@ export function extendChartView(proto: object): ChartView {
const View = (ChartView as ChartViewConstructor).extend(proto) as any;
ChartView.registerClass(View);
return View;
-}
+}
\ No newline at end of file
diff --git a/src/export/extensionHelper.ts b/src/export/extensionHelper.ts
new file mode 100644
index 000000000..ea1748472
--- /dev/null
+++ b/src/export/extensionHelper.ts
@@ -0,0 +1,22 @@
+/*
+* 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.
+*/
+
+// export helpful types and APIs for extension developers
+export * from '../extension';
+export * from './extensionAPI';
\ No newline at end of file
diff --git a/src/extension.ts b/src/extension.ts
index a04ef54e9..f90dc6084 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -119,5 +119,5 @@ export function use(
// A simpler use type for exporting to reduce exported inner modules.
export type EChartsExtensionInstallerSimple = (registers: any) => void;
-type SimpleEChartsExtensionType = EChartsExtensionInstallerSimple | { install: EChartsExtensionInstallerSimple };
+export type SimpleEChartsExtensionType = EChartsExtensionInstallerSimple | { install: EChartsExtensionInstallerSimple };
export declare function useSimple(ext: SimpleEChartsExtensionType | (SimpleEChartsExtensionType)[]): void;
diff --git a/test/types/importPartial.ts b/test/types/importPartial.ts
index c4eb8c7dd..92e1bcec4 100644
--- a/test/types/importPartial.ts
+++ b/test/types/importPartial.ts
@@ -34,8 +34,22 @@ import {
import {
CanvasRenderer
} from '../../renderers';
+import { EChartsExtension, EChartsExtensionInstaller } from '../../extensionHelper';
-use([BarChart, LineChart, GridComponent, DataZoomComponent, CanvasRenderer]);
+const customExtension: EChartsExtension = {
+ install(registers) {}
+}
+const customExtensionInstaller: EChartsExtensionInstaller = (registers) => {}
+
+use([
+ BarChart,
+ LineChart,
+ GridComponent,
+ DataZoomComponent,
+ CanvasRenderer,
+ customExtension,
+ customExtensionInstaller
+]);
type Option = ComposeOption<
GridComponentOption | DataZoomComponentOption
@@ -61,4 +75,4 @@ const dom = document.createElement('div');
dom.className = 'chart';
const chart = init(dom);
-chart.setOption(option);
\ No newline at end of file
+chart.setOption(option);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org