ZoeDuan commited on
Commit
4bb817b
1 Parent(s): 4290f65

Upload 1382 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. echarts-5.5.0-rc.2/.DS_Store +0 -0
  2. echarts-5.5.0-rc.2/.Rhistory +0 -0
  3. echarts-5.5.0-rc.2/.asf.yaml +67 -0
  4. echarts-5.5.0-rc.2/.editorconfig +38 -0
  5. echarts-5.5.0-rc.2/.eslintignore +16 -0
  6. echarts-5.5.0-rc.2/.eslintrc-common.yaml +229 -0
  7. echarts-5.5.0-rc.2/.gitattributes +3 -0
  8. echarts-5.5.0-rc.2/.github/ISSUE_TEMPLATE/bug_report.yml +103 -0
  9. echarts-5.5.0-rc.2/.github/ISSUE_TEMPLATE/config.yml +6 -0
  10. echarts-5.5.0-rc.2/.github/ISSUE_TEMPLATE/feature_request.yml +39 -0
  11. echarts-5.5.0-rc.2/.github/pull_request_template.md +72 -0
  12. echarts-5.5.0-rc.2/.github/workflows/.scripts/update-notice-year.js +93 -0
  13. echarts-5.5.0-rc.2/.github/workflows/ci.yml +129 -0
  14. echarts-5.5.0-rc.2/.github/workflows/nightly-next.yml +43 -0
  15. echarts-5.5.0-rc.2/.github/workflows/nightly.yml +41 -0
  16. echarts-5.5.0-rc.2/.github/workflows/pr-preview.yml +76 -0
  17. echarts-5.5.0-rc.2/.github/workflows/source-release.yml +137 -0
  18. echarts-5.5.0-rc.2/.github/workflows/stale.yml +31 -0
  19. echarts-5.5.0-rc.2/.github/workflows/teardown-pr-preview.yml +30 -0
  20. echarts-5.5.0-rc.2/.github/workflows/update-notice-year.yml +24 -0
  21. echarts-5.5.0-rc.2/.gitignore +212 -0
  22. echarts-5.5.0-rc.2/.headerignore +56 -0
  23. echarts-5.5.0-rc.2/.husky/pre-commit +5 -0
  24. echarts-5.5.0-rc.2/.jshintrc-dist +70 -0
  25. echarts-5.5.0-rc.2/.lgtm.yml +30 -0
  26. echarts-5.5.0-rc.2/.npmignore +17 -0
  27. echarts-5.5.0-rc.2/.vscode/settings.json +3 -0
  28. echarts-5.5.0-rc.2/CONTRIBUTING.md +69 -0
  29. echarts-5.5.0-rc.2/KEYS +419 -0
  30. echarts-5.5.0-rc.2/LICENSE +222 -0
  31. echarts-5.5.0-rc.2/NOTICE +5 -0
  32. echarts-5.5.0-rc.2/README.md +98 -0
  33. echarts-5.5.0-rc.2/asset/contributing-inspect.png +0 -0
  34. echarts-5.5.0-rc.2/asset/logo.png +0 -0
  35. echarts-5.5.0-rc.2/build/addHeader.js +183 -0
  36. echarts-5.5.0-rc.2/build/build-i18n.js +114 -0
  37. echarts-5.5.0-rc.2/build/build.js +235 -0
  38. echarts-5.5.0-rc.2/build/config.js +193 -0
  39. echarts-5.5.0-rc.2/build/dev-fast.js +67 -0
  40. echarts-5.5.0-rc.2/build/nightly/post.js +30 -0
  41. echarts-5.5.0-rc.2/build/nightly/prepare.js +72 -0
  42. echarts-5.5.0-rc.2/build/package.json +3 -0
  43. echarts-5.5.0-rc.2/build/pre-publish.js +461 -0
  44. echarts-5.5.0-rc.2/build/preamble.js +231 -0
  45. echarts-5.5.0-rc.2/build/source-release/prepareReleaseMaterials.js +164 -0
  46. echarts-5.5.0-rc.2/build/source-release/template/announce-release.tpl +26 -0
  47. echarts-5.5.0-rc.2/build/source-release/template/vote-release.tpl +44 -0
  48. echarts-5.5.0-rc.2/build/source-release/template/vote-result.tpl +23 -0
  49. echarts-5.5.0-rc.2/build/template/charts.d.ts +20 -0
  50. echarts-5.5.0-rc.2/build/template/charts.js +27 -0
echarts-5.5.0-rc.2/.DS_Store ADDED
Binary file (8.2 kB). View file
 
echarts-5.5.0-rc.2/.Rhistory ADDED
File without changes
echarts-5.5.0-rc.2/.asf.yaml ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Licensed to the Apache Software Foundation (ASF) under one
2
+ # or more contributor license agreements. See the NOTICE file
3
+ # distributed with this work for additional information
4
+ # regarding copyright ownership. The ASF licenses this file
5
+ # to you under the Apache License, Version 2.0 (the
6
+ # "License"); you may not use this file except in compliance
7
+ # with the License. You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ github:
19
+ description: Apache ECharts is a powerful, interactive charting and data visualization library for browser
20
+ homepage: https://echarts.apache.org
21
+ labels:
22
+ - echarts
23
+ - data-visualization
24
+ - charts
25
+ - charting-library
26
+ - visualization
27
+ - apache
28
+ - data-viz
29
+ - canvas
30
+ - svg
31
+ protected_branches:
32
+ master:
33
+ required_status_checks:
34
+ # strict means "Require branches to be up to date before merging".
35
+ strict: false
36
+ # contexts are the names of checks that must pass
37
+ # contexts:
38
+ # - gh-infra/jenkins
39
+ required_pull_request_reviews:
40
+ dismiss_stale_reviews: true
41
+ require_code_owner_reviews: false
42
+ required_approving_review_count: 1
43
+ required_linear_history: false
44
+ required_signatures: false
45
+ release:
46
+ required_status_checks:
47
+ strict: false
48
+ required_pull_request_reviews:
49
+ dismiss_stale_reviews: true
50
+ require_code_owner_reviews: false
51
+ required_approving_review_count: 1
52
+ required_linear_history: false
53
+ required_signatures: false
54
+ next:
55
+ required_status_checks:
56
+ strict: false
57
+ required_pull_request_reviews:
58
+ dismiss_stale_reviews: true
59
+ require_code_owner_reviews: false
60
+ required_approving_review_count: 1
61
+ required_linear_history: false
62
+ required_signatures: false
63
+
64
+ notifications:
65
+ commits: commits@echarts.apache.org
66
+ pullrequests: commits@echarts.apache.org
67
+ issues: commits@echarts.apache.org
echarts-5.5.0-rc.2/.editorconfig ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ root = true
2
+
3
+ [*]
4
+ end_of_line = lf
5
+ charset = utf-8
6
+ trim_trailing_whitespace = true
7
+ insert_final_newline = true
8
+
9
+ [**.js]
10
+ indent_style = space
11
+ indent_size = 4
12
+
13
+ [**.css]
14
+ indent_style = space
15
+ indent_size = 4
16
+
17
+ [**.less]
18
+ indent_style = space
19
+ indent_size = 4
20
+
21
+ [**.styl]
22
+ indent_style = space
23
+ indent_size = 4
24
+
25
+ [**.html]
26
+ indent_style = space
27
+ indent_size = 4
28
+
29
+ [**.tpl]
30
+ indent_style = space
31
+ indent_size = 4
32
+
33
+ [**.json]
34
+ indent_style = space
35
+ indent_size = 4
36
+
37
+ [*.md]
38
+ trim_trailing_whitespace = false
echarts-5.5.0-rc.2/.eslintignore ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /dist
2
+ /node_modules
3
+ /build
4
+ /i18n
5
+ /extension-esm
6
+ /extension
7
+ /lib
8
+ /esm
9
+ /index.js
10
+ /index.blank.js
11
+ /index.common.js
12
+ /index.simple.js
13
+ /echarts.all.js
14
+ /echarts.blank.js
15
+ /echarts.common.js
16
+ /echarts.simple.js
echarts-5.5.0-rc.2/.eslintrc-common.yaml ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+ # Note:
20
+ # If eslint does not work in VSCode, please check:
21
+ # (1) Whether "@typescript-eslint/eslint-plugin" and "@typescript-eslint/parser"
22
+ # are npm installed locally. Should better in the same version.
23
+ # (2) Whether "VSCode ESlint extension" is installed.
24
+ # (3) If the project folder is not the root folder of your working space, please
25
+ # config the "VSCode ESlint extension" in "settings":
26
+ # ```json
27
+ # "eslint.workingDirectories": [{"mode": "auto"}]
28
+ # ```
29
+ # Note that it should be "workingDirectories" rather than "WorkingDirectories".
30
+
31
+ root: true
32
+ rules:
33
+ # Check the rules in: node_modules/@typescript-eslint/eslint-plugin/README.md
34
+ no-console:
35
+ - 2
36
+ -
37
+ allow:
38
+ - "warn"
39
+ - "error"
40
+ prefer-const: 1
41
+ no-constant-condition: 0
42
+ comma-dangle: 0
43
+ no-debugger: 2
44
+ no-dupe-keys: 2
45
+ no-empty-character-class: 2
46
+ no-ex-assign: 2
47
+ no-extra-boolean-cast: 0
48
+ no-func-assign: 2
49
+ no-inner-declarations: 2
50
+ no-invalid-regexp: 2
51
+ no-negated-in-lhs: 2
52
+ no-obj-calls: 2
53
+ no-sparse-arrays: 2
54
+ no-unreachable: 2
55
+ use-isnan: 2
56
+ valid-typeof: 2
57
+ block-scoped-var: 2
58
+ curly:
59
+ - 2
60
+ - "all"
61
+ eqeqeq:
62
+ - 2
63
+ - "allow-null"
64
+ guard-for-in: 2
65
+ no-else-return: 0
66
+ no-labels:
67
+ - 2
68
+ -
69
+ allowLoop: true
70
+ no-eval: 2
71
+ no-extend-native: 2
72
+ no-extra-bind: 0
73
+ no-implied-eval: 2
74
+ no-iterator: 2
75
+ no-irregular-whitespace: 2
76
+ no-lone-blocks: 2
77
+ no-loop-func: 2
78
+ no-multi-str: 2
79
+ no-native-reassign: 2
80
+ no-new-wrappers: 2
81
+ no-octal: 2
82
+ no-octal-escape: 2
83
+ no-proto: 2
84
+ no-self-compare: 2
85
+ no-unneeded-ternary: 2
86
+ no-with: 2
87
+ radix: 2
88
+ wrap-iife:
89
+ - 2
90
+ - "any"
91
+ no-delete-var: 2
92
+ no-dupe-args: 2
93
+ no-duplicate-case: 2
94
+ no-label-var: 2
95
+ no-shadow-restricted-names: 2
96
+ no-undef: 2
97
+ no-undef-init: 2
98
+ "no-use-before-define": "off"
99
+ "@typescript-eslint/no-use-before-define": 0
100
+ brace-style:
101
+ - 2
102
+ - "stroustrup"
103
+ - {}
104
+ comma-spacing:
105
+ - 2
106
+ -
107
+ before: false
108
+ after: true
109
+ comma-style:
110
+ - 2
111
+ - "last"
112
+ new-parens: 2
113
+ no-array-constructor: 2
114
+ no-multi-spaces:
115
+ - 1
116
+ -
117
+ ignoreEOLComments: true
118
+ exceptions:
119
+ Property: true
120
+ no-new-object: 2
121
+ no-trailing-spaces: 2
122
+ no-extra-parens:
123
+ - 2
124
+ - "functions"
125
+ no-mixed-spaces-and-tabs: 2
126
+ one-var:
127
+ - 2
128
+ - "never"
129
+ operator-linebreak:
130
+ - 2
131
+ - "before"
132
+ -
133
+ overrides:
134
+ "=": "after"
135
+ "quotes": "off"
136
+ "@typescript-eslint/quotes":
137
+ - 2
138
+ - "single"
139
+ "semi": "off"
140
+ "@typescript-eslint/semi":
141
+ - 2
142
+ - "always"
143
+ semi-spacing: 2
144
+ keyword-spacing: 2
145
+ key-spacing:
146
+ - 2
147
+ -
148
+ beforeColon: false
149
+ afterColon: true
150
+ "space-before-function-paren": "off"
151
+ "@typescript-eslint/space-before-function-paren":
152
+ - 2
153
+ -
154
+ anonymous: "always"
155
+ named: "never"
156
+ space-before-blocks:
157
+ - 2
158
+ - "always"
159
+ computed-property-spacing:
160
+ - 2
161
+ - "never"
162
+ space-in-parens:
163
+ - 2
164
+ - "never"
165
+ space-unary-ops: 2
166
+ spaced-comment: "error"
167
+
168
+ max-nested-callbacks:
169
+ - 1
170
+ - 5
171
+ max-depth:
172
+ - 1
173
+ - 6
174
+ max-len:
175
+ - 2
176
+ - 120
177
+ - 4
178
+ -
179
+ ignoreUrls: true
180
+ ignoreComments: true
181
+ max-params:
182
+ - 1
183
+ - 15
184
+
185
+ space-infix-ops: 2
186
+ dot-notation:
187
+ - 2
188
+ -
189
+ allowKeywords: true
190
+ allowPattern: "^catch$"
191
+
192
+ arrow-spacing: 2
193
+ constructor-super: 2
194
+ no-confusing-arrow:
195
+ - 2
196
+ -
197
+ allowParens: true
198
+ no-class-assign: 2
199
+ no-const-assign: 2
200
+ # no-dupe-class-members: 2
201
+ no-this-before-super: 0
202
+ no-var: 2
203
+ no-duplicate-imports: 2
204
+ prefer-rest-params: 0
205
+ unicode-bom: 2
206
+ max-statements-per-line: 2
207
+
208
+ no-useless-constructor: 0
209
+
210
+ "func-call-spacing": "off"
211
+ "@typescript-eslint/func-call-spacing": "error"
212
+
213
+ "no-unused-vars": "off"
214
+ "@typescript-eslint/no-unused-vars":
215
+ - 1
216
+ -
217
+ vars: "local"
218
+ args: "none"
219
+ # Avoid dangerous usage of globals.
220
+ "no-restricted-globals":
221
+ - 2
222
+ - "event"
223
+ - "name"
224
+ - "length"
225
+ - "orientation"
226
+ - "top"
227
+ - "parent"
228
+ - "location"
229
+ - "closed"
echarts-5.5.0-rc.2/.gitattributes ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # for pull request size bot
2
+ # excludes all files from test directory
3
+ test/** linguist-generated=true
echarts-5.5.0-rc.2/.github/ISSUE_TEMPLATE/bug_report.yml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Bug Report
2
+ description: Report a bug to Apache ECharts
3
+ title: "[Bug] "
4
+ labels: [bug]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ The issue list is reserved exclusively for bug reports and feature requests.
10
+
11
+ For usage questions, please use the following resources:
12
+
13
+ - Read the [docs](https://echarts.apache.org/option.html)
14
+ - Find in [examples](https://echarts.apache.org/examples/)
15
+ - Look for / ask questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/echarts)
16
+
17
+ For non-technical support or general questions, you can email [dev@echarts.apache.org](mailto:dev@echarts.apache.org). And don't forget to subscribe to our [mailing list](https://echarts.apache.org/maillist.html) to get updated with the project.
18
+
19
+ Also try to search for your issue - it may have already been answered or even fixed in the development branch. However, if you find that an old, closed issue still persists in the latest version, you should open a new issue using the form below instead of commenting on the old issue.
20
+
21
+ # - type: checkboxes
22
+ # attributes:
23
+ # label: Is there an existing issue for this?
24
+ # description: Please search to see if an issue already exists for the bug you encountered.
25
+ # options:
26
+ # - label: I have searched the existing issues
27
+ # required: true
28
+
29
+ - type: input
30
+ attributes:
31
+ label: Version
32
+ description: |
33
+ Check if the issue is reproducible with the latest stable version of Apache ECharts.
34
+ placeholder: |
35
+ e.g. 5.2.2
36
+
37
+ validations:
38
+ required: true
39
+
40
+ - type: input
41
+ attributes:
42
+ label: Link to Minimal Reproduction
43
+ description: |
44
+ If the reproduction does not need a build setup, please provide a link to [Official Editor](https://echarts.apache.org/examples/editor.html), [JSFiddle](https://jsfiddle.net/plainheart/e46ozpqj/7/), [JSBin](https://jsbin.com/) or [CodePen](https://codepen.io/Ovilia/pen/dyYWXWM). If it requires a build setup, you can use [CodeSandbox](https://codesandbox.io/s/echarts-basic-example-template-mpfz1s) or provide a GitHub repo.
45
+ The reproduction should be **minimal** - i.e. it should contain only the bare minimum amount of code needed to show the bug.
46
+ Please do not just fill in a random link. The issue will be closed if no valid reproduction is provided. [Why?](https://antfu.me/posts/why-reproductions-are-required)
47
+
48
+ validations:
49
+ required: true
50
+
51
+ - type: textarea
52
+ attributes:
53
+ label: Steps to Reproduce
54
+ description: |
55
+ What do we need to do after opening your repo in order to make the bug happen? Clear and concise reproduction instructions are important for us to be able to triage your issue in a timely manner. Note that you can use [Markdown](https://guides.github.com/features/mastering-markdown/) to format lists and code.
56
+
57
+ placeholder: |
58
+ 1. How do you create the chart.
59
+ 2. What's the chart option
60
+ 3. User interactions before the error happens.
61
+
62
+ validations:
63
+ required: true
64
+
65
+ - type: textarea
66
+ attributes:
67
+ label: Current Behavior
68
+ description: A concise description of what you're experiencing.
69
+ validations:
70
+ required: true
71
+
72
+ - type: textarea
73
+ attributes:
74
+ label: Expected Behavior
75
+ description: A concise description of what you expected to happen.
76
+ validations:
77
+ required: true
78
+
79
+ - type: textarea
80
+ attributes:
81
+ label: Environment
82
+ description: |
83
+ e.g.
84
+ - **OS**: macOS Monterey
85
+ - **Browser**: Chrome 96.0.4664.55
86
+ - **Framework** Vue@3
87
+ value: |
88
+ - OS:
89
+ - Browser:
90
+ - Framework:
91
+ render: markdown
92
+
93
+ validations:
94
+ required: false
95
+
96
+ - type: textarea
97
+ attributes:
98
+ label: Any additional comments?
99
+ description: |
100
+ e.g. some background/context of how you ran into this bug.
101
+
102
+ validations:
103
+ required: false
echarts-5.5.0-rc.2/.github/ISSUE_TEMPLATE/config.yml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ blank_issues_enabled: false
2
+
3
+ # contact_links:
4
+ # - name: Apache ECharts Doc
5
+ # url: https://echarts.apache.org/option.html
6
+ # about: Please search question here before opening a new issue
echarts-5.5.0-rc.2/.github/ISSUE_TEMPLATE/feature_request.yml ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Feature Request
2
+ description: Request a new feature from Apache ECharts
3
+ title: "[Feature] "
4
+ labels: [new-feature]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ The issue list is reserved exclusively for bug reports and feature requests.
10
+
11
+ For usage questions, please use the following resources:
12
+
13
+ - Read the [docs](https://echarts.apache.org/option.html)
14
+ - Find in [examples](https://echarts.apache.org/examples/)
15
+ - Look for / ask questions on [Stack Overflow](https://stackoverflow.com/questions/tagged/echarts)
16
+
17
+ For non-technical support or general questions, you can email [dev@echarts.apache.org](mailto:dev@echarts.apache.org). And don't forget to subscribe to our [mailing list](https://echarts.apache.org/maillist.html) to get updated with the project.
18
+
19
+ Also try to search for your issue - it may have already been answered or even fixed in the development branch. However, if you find that an old, closed issue still persists in the latest version, you should open a new issue using the form below instead of commenting on the old issue.
20
+
21
+ - type: textarea
22
+ attributes:
23
+ label: What problem does this feature solve?
24
+ description: |
25
+ Explain your use case, context, and rationale behind this feature request. More importantly, what is the end user experience you are trying to build that led to the need for this feature?
26
+
27
+ An important design goal of ECharts is keeping the API surface small and straightforward. In general, we only consider adding new features that solve a problem that cannot be easily dealt with using existing APIs (i.e. not just an alternative way of doing things that can already be done). The problem should also be common enough to justify the addition.
28
+
29
+ validations:
30
+ required: true
31
+
32
+ - type: textarea
33
+ attributes:
34
+ label: What does the proposed API look like?
35
+ description: Describe how you propose to solve the problem and provide code samples of how the API would work once implemented. Note that you can use [Markdown](https://docs.github.com/en/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) to format your code blocks.
36
+
37
+
38
+ validations:
39
+ required: true
echarts-5.5.0-rc.2/.github/pull_request_template.md ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!-- Please fill in the following information to help us review your PR more efficiently. -->
2
+
3
+ ## Brief Information
4
+
5
+ This pull request is in the type of:
6
+
7
+ - [ ] bug fixing
8
+ - [ ] new feature
9
+ - [ ] others
10
+
11
+
12
+
13
+ ### What does this PR do?
14
+
15
+ <!-- USE ONE SENTENCE TO DESCRIBE WHAT THIS PR DOES. -->
16
+
17
+
18
+
19
+ ### Fixed issues
20
+
21
+ <!--
22
+ - #xxxx: ...
23
+ -->
24
+
25
+
26
+ ## Details
27
+
28
+ ### Before: What was the problem?
29
+
30
+ <!-- DESCRIBE THE BUG OR REQUIREMENT HERE. -->
31
+
32
+ <!-- ADD SCREENSHOT HERE IF APPLICABLE. -->
33
+
34
+
35
+
36
+ ### After: How does it behave after the fixing?
37
+
38
+ <!-- THE RESULT AFTER FIXING AND A SIMPLE EXPLANATION ABOUT HOW IT IS FIXED. -->
39
+
40
+ <!-- ADD SCREENSHOT HERE IF APPLICABLE. -->
41
+
42
+
43
+
44
+ ## Document Info
45
+
46
+ One of the following should be checked.
47
+
48
+ - [ ] This PR doesn't relate to document changes
49
+ - [ ] The document should be updated later
50
+ - [ ] The document changes have been made in apache/echarts-doc#xxx
51
+
52
+
53
+
54
+ ## Misc
55
+
56
+ ### ZRender Changes
57
+
58
+ - [ ] This PR depends on ZRender changes (ecomfe/zrender#xxx).
59
+
60
+ ### Related test cases or examples to use the new APIs
61
+
62
+ N.A.
63
+
64
+
65
+
66
+ ## Others
67
+
68
+ ### Merging options
69
+
70
+ - [ ] Please squash the commits into a single one when merging.
71
+
72
+ ### Other information
echarts-5.5.0-rc.2/.github/workflows/.scripts/update-notice-year.js ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * @typedef {import('@octokit/rest').Octokit} Octokit
3
+ * @typedef {import('@actions/github')['context']} Context
4
+ */
5
+
6
+ module.exports = async function updateNoticeYear(
7
+ /** @type {{ octokit: Octokit, context: Context }} */
8
+ { octokit, context }
9
+ ) {
10
+ const now = new Date()
11
+ // Change to UTC+8
12
+ now.setHours(now.getHours() + 8)
13
+ const newYear = now.getFullYear()
14
+ console.log('Prepare to update notice year to', newYear)
15
+
16
+ const noticeContent = `Apache ECharts
17
+ Copyright 2017-${newYear} The Apache Software Foundation
18
+
19
+ This product includes software developed at
20
+ The Apache Software Foundation (https://www.apache.org/).`
21
+
22
+ const repoCtx = context.repo
23
+
24
+ const repoInfo = (await octokit.rest.repos.get(repoCtx)).data
25
+ const defaultBranchName = repoInfo.default_branch
26
+ const remoteNoticeFile = (await octokit.rest.repos.getContent({
27
+ ...repoCtx,
28
+ path: 'NOTICE',
29
+ ref: defaultBranchName
30
+ })).data
31
+ const remoteNoticeContent = base64ToUtf8(remoteNoticeFile.content)
32
+ if (remoteNoticeContent === noticeContent) {
33
+ console.log('NOTICE year is already updated.')
34
+ return
35
+ }
36
+
37
+ console.log('Ready to update the NOTICE file:\n' + noticeContent)
38
+
39
+ const defaultBranch = (await octokit.rest.repos.getBranch({
40
+ ...repoCtx,
41
+ branch: defaultBranchName
42
+ })).data
43
+
44
+ const newBranchName = `bot/update-notice-year/${newYear}`
45
+ await octokit.rest.git.createRef({
46
+ ...repoCtx,
47
+ ref: `refs/heads/${newBranchName}`,
48
+ sha: defaultBranch.commit.sha
49
+ })
50
+ console.log('Created a new branch:', newBranchName)
51
+
52
+ await octokit.rest.repos.createOrUpdateFileContents({
53
+ ...repoCtx,
54
+ path: 'NOTICE',
55
+ message: `chore: update NOTICE year to ${newYear}`,
56
+ content: utf8ToBase64(noticeContent),
57
+ sha: remoteNoticeFile.sha,
58
+ branch: newBranchName
59
+ })
60
+
61
+ console.log('Updated the NOTICE file on the new branch')
62
+
63
+ const pr = (await octokit.rest.pulls.create({
64
+ ...repoCtx,
65
+ head: newBranchName,
66
+ base: defaultBranchName,
67
+ maintainer_can_modify: true,
68
+ title: `chore: update NOTICE year to ${newYear}`,
69
+ body: `## Brief Information
70
+
71
+ This pull request is in the type of:
72
+
73
+ - [ ] bug fixing
74
+ - [ ] new feature
75
+ - [x] others
76
+
77
+ ### What does this PR do?
78
+
79
+ Update notice year to ${newYear}. 💖
80
+
81
+ Happy new year! 祝大家新年快乐!🎇`
82
+ })).data
83
+
84
+ console.log(`Opened PR #${pr.number} for updating the NOTICE file`)
85
+ }
86
+
87
+ function utf8ToBase64(data) {
88
+ return Buffer.from(data, 'utf-8').toString('base64')
89
+ }
90
+
91
+ function base64ToUtf8(data) {
92
+ return Buffer.from(data, 'base64').toString('utf-8')
93
+ }
echarts-5.5.0-rc.2/.github/workflows/ci.yml ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Node CI
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, reopened, synchronize]
6
+
7
+ concurrency:
8
+ # Note that the `teardown-pr-preview` workflow needs the same group name
9
+ # to cancel the running `ci` workflows
10
+ group: ${{ github.workflow }}-${{ github.event.number }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ lint:
15
+ runs-on: ubuntu-latest
16
+
17
+ strategy:
18
+ matrix:
19
+ node-version: [18.x]
20
+
21
+ steps:
22
+ - name: Fetch commit count
23
+ env:
24
+ PR_COMMIT_COUNT: ${{ github.event.pull_request.commits }}
25
+ run: |
26
+ echo "FETCH_DEPTH=$(($PR_COMMIT_COUNT + 1))" >> $GITHUB_ENV
27
+
28
+ - uses: actions/checkout@v4
29
+ with:
30
+ fetch-depth: ${{ env.FETCH_DEPTH }}
31
+
32
+ - name: Use Node.js ${{ matrix.node-version }}
33
+ uses: actions/setup-node@v4
34
+ with:
35
+ node-version: ${{ matrix.node-version }}
36
+
37
+ - name: Cache node modules
38
+ id: cache-dep
39
+ uses: actions/cache@v3
40
+ env:
41
+ cache-name: cache-node-modules
42
+ with:
43
+ path: node_modules
44
+ key: ${{ runner.os }}-lint-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
45
+
46
+ - name: Install dependencies
47
+ if: steps.cache-dep.outputs.cache-hit != 'true'
48
+ run: npm ci
49
+
50
+ - name: Collect changed files
51
+ run: |
52
+ mkdir ~/tmp/
53
+ git diff ${{ github.event.pull_request.base.sha }} ${{ github.sha }} --diff-filter=ACM --name-only --relative '*src/**/*.ts' > ~/tmp/changed_files
54
+ echo -e "Changed files: \n$(cat ~/tmp/changed_files)"
55
+
56
+ - name: Lint
57
+ run: npx eslint $(cat ~/tmp/changed_files)
58
+
59
+ - name: Check types
60
+ run: npm run checktype
61
+
62
+ build:
63
+ runs-on: ubuntu-latest
64
+
65
+ strategy:
66
+ matrix:
67
+ node-version: [18.x]
68
+
69
+ steps:
70
+ - uses: actions/checkout@v4
71
+
72
+ - name: Use Node.js ${{ matrix.node-version }}
73
+ uses: actions/setup-node@v4
74
+ with:
75
+ node-version: ${{ matrix.node-version }}
76
+
77
+ - name: Cache node modules
78
+ id: cache-dep
79
+ uses: actions/cache@v3
80
+ env:
81
+ cache-name: cache-node-modules
82
+ with:
83
+ path: node_modules
84
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
85
+
86
+ - name: Install dependencies
87
+ if: steps.cache-dep.outputs.cache-hit != 'true'
88
+ run: npm ci
89
+
90
+ - name: Unit Test
91
+ run: npm run test
92
+
93
+ - name: Build release
94
+ run: npm run release
95
+
96
+ - name: Test generated DTS
97
+ run: npm run test:dts
98
+
99
+ - name: Pack npm tarball
100
+ if: ${{ github.repository_owner == 'apache' }}
101
+ id: pack-tarball
102
+ run: |
103
+ export PR_PREVIEW_DIR='echarts-pr-preview'
104
+ mkdir -p $PR_PREVIEW_DIR
105
+ npm pack -pack-destination $PR_PREVIEW_DIR
106
+ echo "PR_PREVIEW_DIR=$PR_PREVIEW_DIR" >> $GITHUB_ENV
107
+
108
+ - name: Save PR metadata and dist files
109
+ if: ${{ steps.pack-tarball.outcome == 'success' }}
110
+ id: save-pr-data
111
+ env:
112
+ PR_NUMBER: ${{ github.event.number }}
113
+ PR_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
114
+ PR_PREVIEW_DIR: ${{ env.PR_PREVIEW_DIR }}
115
+ run: |
116
+ cd $PR_PREVIEW_DIR
117
+ echo $PR_NUMBER > ./pr_number
118
+ echo $PR_COMMIT_SHA > ./pr_commit_sha
119
+ find . -type f -regex ".*\.tgz" -exec tar xvzf {} \;
120
+ rm -f *.tgz
121
+ echo -e "Dist files: \n$(ls -l)"
122
+
123
+ - uses: actions/upload-artifact@v3
124
+ if: ${{ steps.save-pr-data.outcome == 'success' }}
125
+ with:
126
+ name: pr_preview
127
+ path: ${{ env.PR_PREVIEW_DIR }}
128
+ retention-days: 1
129
+ if-no-files-found: error
echarts-5.5.0-rc.2/.github/workflows/nightly-next.yml ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Publish Nightly Next
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '10 9 * * *' # After zrender nightly published
6
+ # committers can manually trigger with workflow_dispatch
7
+ workflow_dispatch: {}
8
+ repository_dispatch:
9
+ types: publish-nightly-next
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ if: ${{ github.repository_owner == 'apache' }}
15
+
16
+ strategy:
17
+ matrix:
18
+ node-version: [18.x]
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ with:
23
+ ref: next
24
+
25
+ - name: Use Node.js ${{ matrix.node-version }}
26
+ uses: actions/setup-node@v4
27
+ with:
28
+ registry-url: https://registry.npmjs.org/
29
+ node-version: ${{ matrix.node-version }}
30
+
31
+ - name: Setup and publish nightly
32
+ run: |
33
+ node build/nightly/prepare.js --next
34
+ npm i zrender@npm:zrender-nightly@next
35
+ npm ci
36
+ npm ls zrender
37
+ node build/nightly/post.js
38
+ npm run release
39
+ npm run test
40
+ npm run test:dts
41
+ npm publish --tag next
42
+ env:
43
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
echarts-5.5.0-rc.2/.github/workflows/nightly.yml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Publish Nightly
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '0 9 * * *' # After zrender nightly published
6
+ # committers can manually trigger with workflow_dispatch
7
+ workflow_dispatch: {}
8
+ repository_dispatch:
9
+ types: publish-nightly
10
+
11
+ jobs:
12
+ build:
13
+ runs-on: ubuntu-latest
14
+ if: ${{ github.repository_owner == 'apache' }}
15
+
16
+ strategy:
17
+ matrix:
18
+ node-version: [18.x]
19
+
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Use Node.js ${{ matrix.node-version }}
24
+ uses: actions/setup-node@v4
25
+ with:
26
+ registry-url: https://registry.npmjs.org/
27
+ node-version: ${{ matrix.node-version }}
28
+
29
+ - name: Setup and publish nightly
30
+ run: |
31
+ node build/nightly/prepare.js
32
+ npm i zrender@npm:zrender-nightly
33
+ npm ci
34
+ npm ls zrender
35
+ node build/nightly/post.js
36
+ npm run release
37
+ npm run test
38
+ npm run test:dts
39
+ npm publish
40
+ env:
41
+ NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
echarts-5.5.0-rc.2/.github/workflows/pr-preview.yml ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Deploy PR Preview
2
+
3
+ on:
4
+ workflow_run:
5
+ workflows: ['Node CI']
6
+ types: [completed]
7
+
8
+ jobs:
9
+ on-success:
10
+ if: ${{ github.repository_owner == 'apache' }}
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - name: Determine if workflow build job is successful
15
+ id: check-build-success
16
+ uses: actions/github-script@v6
17
+ with:
18
+ result-encoding: string
19
+ script: |
20
+ const jobsRes = await github.rest.actions.listJobsForWorkflowRun({
21
+ owner: context.repo.owner,
22
+ repo: context.repo.repo,
23
+ run_id: context.payload.workflow_run.id
24
+ });
25
+ return jobsRes.data.jobs.some((job) => job.name.includes('build') && job.conclusion === 'success');
26
+
27
+ outputs:
28
+ SHOULD_DEPOLY: ${{ steps.check-build-success.outputs.result }}
29
+
30
+ deploy:
31
+ needs: [on-success]
32
+ if: ${{ needs.on-success.outputs.SHOULD_DEPOLY == 'true' }}
33
+ runs-on: ubuntu-latest
34
+
35
+ steps:
36
+ - name: Install action dependencies
37
+ run: |
38
+ mkdir .actions
39
+ cd .actions
40
+ git clone --depth=1 https://github.com/dawidd6/action-download-artifact.git
41
+ git clone --depth=1 https://github.com/actions-cool/maintain-one-comment.git
42
+
43
+ - name: Fetch PR dist files
44
+ uses: ./.actions/action-download-artifact
45
+ with:
46
+ workflow: ${{ github.event.workflow.id }}
47
+ run_id: ${{ github.event.workflow_run.id }}
48
+ name: pr_preview
49
+ if_no_artifact_found: fail
50
+
51
+ - name: Output PR metadata
52
+ id: pr-metadata
53
+ run: |
54
+ echo "NUMBER=$(cat pr_number)" >> $GITHUB_OUTPUT
55
+ echo "COMMIT_SHA=$(cat pr_commit_sha)" >> $GITHUB_OUTPUT
56
+ echo "COMMIT_SHA_SHORT=$(cat pr_commit_sha | cut -c 1-7)" >> $GITHUB_OUTPUT
57
+
58
+ - name: Deploy dist files
59
+ env:
60
+ PR_NUMBER: ${{ steps.pr-metadata.outputs.NUMBER }}
61
+ SURGE_TOKEN: ${{ secrets.SURGE_TOKEN }}
62
+ run: |
63
+ export SURGE_DOMAIN=https://echarts-pr-$PR_NUMBER.surge.sh
64
+ npx surge --project ./package --domain $SURGE_DOMAIN --token $SURGE_TOKEN
65
+
66
+ - name: Create comment for PR preview
67
+ uses: ./.actions/maintain-one-comment
68
+ env:
69
+ PR_NUMBER: ${{ steps.pr-metadata.outputs.NUMBER }}
70
+ COMMIT_SHA_SHORT: ${{ steps.pr-metadata.outputs.COMMIT_SHA_SHORT }}
71
+ with:
72
+ body: |
73
+ <!-- ECHARTS_PR_PREVIEW -->
74
+ The changes brought by this PR can be previewed at: https://echarts.apache.org/examples/editor?version=PR-${{ env.PR_NUMBER }}@${{ env.COMMIT_SHA_SHORT }}
75
+ body-include: '<!-- ECHARTS_PR_PREVIEW -->'
76
+ number: ${{ env.PR_NUMBER }}
echarts-5.5.0-rc.2/.github/workflows/source-release.yml ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Source Release
2
+
3
+ on:
4
+ release:
5
+ types: [prereleased]
6
+
7
+ jobs:
8
+ materials:
9
+ runs-on: ubuntu-latest
10
+ if: ${{ github.repository_owner == 'apache' }}
11
+
12
+ strategy:
13
+ matrix:
14
+ node-version: [18.x]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Use Node.js ${{ matrix.node-version }}
20
+ uses: actions/setup-node@v4
21
+ with:
22
+ node-version: ${{ matrix.node-version }}
23
+
24
+ - name: Prepare env
25
+ run: |
26
+ echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
27
+
28
+ - name: Cache node modules
29
+ uses: actions/cache@v3
30
+ env:
31
+ cache-name: cache-node-modules
32
+ with:
33
+ # npm cache files are stored in `~/.npm` on Linux/macOS
34
+ path: ~/.npm
35
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
36
+
37
+ - name: Prepare release materials
38
+ run: |
39
+ npm i
40
+ node build/source-release/prepareReleaseMaterials.js \
41
+ --rcversion ${{env.RELEASE_VERSION}} \
42
+ --commit ${{github.sha}} \
43
+ --repo ${{github.repository}} \
44
+ --out tmp/materials
45
+
46
+ - name: Archive materials
47
+ uses: actions/upload-artifact@v3
48
+ with:
49
+ name: apache-echarts-${{env.RELEASE_VERSION}}-release-materials
50
+ path: |
51
+ tmp/materials/*
52
+
53
+ source:
54
+ runs-on: ubuntu-latest
55
+ needs: materials
56
+
57
+ strategy:
58
+ matrix:
59
+ node-version: [18.x]
60
+
61
+ steps:
62
+ - uses: actions/checkout@v4
63
+
64
+ - name: Use Node.js ${{ matrix.node-version }}
65
+ uses: actions/setup-node@v4
66
+ with:
67
+ node-version: ${{ matrix.node-version }}
68
+
69
+ - name: Prepare env
70
+ run: |
71
+ echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
72
+
73
+ # Get RELEASE_NOTE.txt and pack it into zip.
74
+ - name: Download materials
75
+ uses: actions/download-artifact@v3
76
+ with:
77
+ name: apache-echarts-${{env.RELEASE_VERSION}}-release-materials
78
+
79
+ # TODO Check release version is RC
80
+
81
+ # Archive before run others to avoid packing unknown files.
82
+ - name: Archive source release
83
+ uses: actions/upload-artifact@v3
84
+ with:
85
+ name: apache-echarts-${{env.RELEASE_VERSION}}-src
86
+ path: |
87
+ index.d.ts
88
+ src/
89
+ extension-src/
90
+ ssr/client/src/
91
+ licenses/
92
+ theme/
93
+ build/
94
+ !build/source-release
95
+ package.json
96
+ package-lock.json
97
+ LICENSE
98
+ NOTICE
99
+ README.md
100
+ tsconfig.json
101
+ test/ut
102
+ test/types
103
+ test/check-build.html
104
+ RELEASE_NOTE.txt
105
+
106
+
107
+ validate-source:
108
+ runs-on: ubuntu-latest
109
+ needs: source
110
+
111
+ strategy:
112
+ matrix:
113
+ node-version: [18.x]
114
+
115
+ steps:
116
+ - name: Use Node.js ${{ matrix.node-version }}
117
+ uses: actions/setup-node@v4
118
+ with:
119
+ node-version: ${{ matrix.node-version }}
120
+
121
+ - name: Prepare env
122
+ run: |
123
+ echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
124
+
125
+ - name: Download source release
126
+ uses: actions/download-artifact@v3
127
+ with:
128
+ name: apache-echarts-${{env.RELEASE_VERSION}}-src
129
+ path: tmp/echarts
130
+
131
+ - name: Build source release
132
+ run: |
133
+ npm ci
134
+ npm run release
135
+ npm run test
136
+ npm run test:dts
137
+ working-directory: tmp/echarts
echarts-5.5.0-rc.2/.github/workflows/stale.yml ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Closing Stale Issues
2
+
3
+ permissions:
4
+ issues: write
5
+ pull-requests: write
6
+
7
+ on:
8
+ schedule:
9
+ - cron: '0 21 * * *'
10
+
11
+ jobs:
12
+ stale:
13
+ runs-on: ubuntu-latest
14
+ if: ${{ github.repository_owner == 'apache' }}
15
+ steps:
16
+ - name: Close Stale Issues
17
+ uses: actions/stale@v6
18
+ with:
19
+ days-before-stale: 730
20
+ days-before-close: 7
21
+ stale-issue-label: stale
22
+ stale-pr-label: stale
23
+ stale-issue-message: 'This issue has been automatically marked as stale because it did not have recent activity. It will be closed in 7 days if no further activity occurs. If you wish not to mark it as stale, please leave a comment in this issue.'
24
+ close-issue-message: 'This issue has been automatically closed because it did not have recent activity. If this remains to be a problem with the latest version of Apache ECharts, please open a new issue and link this to it. Thanks!'
25
+ close-issue-reason: 'not_planned'
26
+ stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. If you wish not to mark it as stale, please leave a comment in this PR. We are sorry for this but 2 years is a long time and the code base has been changed a lot. Thanks for your contribution anyway.'
27
+ close-pr-message: 'This PR has been automatically closed because it has not had recent activity. Sorry for that and we are looking forward to your next contribution.'
28
+ exempt-issue-labels: 'FAQ,priority: high'
29
+ exempt-all-milestones: true
30
+ operations-per-run: 500
31
+ ascending: true
echarts-5.5.0-rc.2/.github/workflows/teardown-pr-preview.yml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Teardown PR Preview
2
+
3
+ on:
4
+ pull_request_target:
5
+ types: [closed]
6
+
7
+ jobs:
8
+ teardown-pr-preview:
9
+ if: ${{ github.repository_owner == 'apache' && github.event.action == 'closed' && github.event.pull_request.merged != true }}
10
+ concurrency:
11
+ # to cancel running `ci` workflows in current PR
12
+ group: 'Node CI-${{ github.event.number }}'
13
+ cancel-in-progress: true
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: Install action dependencies
17
+ run: git clone --depth=1 https://github.com/actions-cool/maintain-one-comment.git
18
+
19
+ - name: Delete PR preview comment
20
+ uses: ./maintain-one-comment
21
+ with:
22
+ body-include: '<!-- ECHARTS_PR_PREVIEW -->'
23
+ delete: true
24
+ number: ${{ github.event.number }}
25
+
26
+ - name: Teardown closed PR preview
27
+ continue-on-error: true
28
+ run: |
29
+ export SURGE_DOMAIN='https://echarts-pr-${{ github.event.number }}.surge.sh'
30
+ npx surge teardown $SURGE_DOMAIN --token ${{ secrets.SURGE_TOKEN }}
echarts-5.5.0-rc.2/.github/workflows/update-notice-year.yml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: Update NOTICE year
2
+
3
+ on:
4
+ schedule:
5
+ # 1/1 00:00 UTC+8
6
+ - cron: '0 16 31 12 *'
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ update-notice-year:
11
+ if: ${{ github.repository_owner == 'apache' }}
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ with:
17
+ sparse-checkout: |
18
+ .github/workflows/.scripts
19
+
20
+ - uses: actions/github-script@v7
21
+ with:
22
+ script: |
23
+ const updateNoticeYear = require('.github/workflows/.scripts/update-notice-year.js')
24
+ await updateNoticeYear({ octokit: github, context })
echarts-5.5.0-rc.2/.gitignore ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #################
2
+ ## Eclipse
3
+ #################
4
+
5
+ *.pydevproject
6
+ .project
7
+ .metadata
8
+ bin/
9
+ tmp/
10
+ *.tmp
11
+ *.bak
12
+ *.swp
13
+ *~.nib
14
+ .svn
15
+ local.properties
16
+ .classpath
17
+ .class
18
+ .settings/
19
+ .loadpath
20
+
21
+ # External tool builders
22
+ .externalToolBuilders/
23
+
24
+ # Locally stored "Eclipse launch configurations"
25
+ *.launch
26
+
27
+ # CDT-specific
28
+ .cproject
29
+
30
+ # PDT-specific
31
+ .buildpath
32
+
33
+
34
+ #################
35
+ ## Visual Studio
36
+ #################
37
+
38
+ ## Ignore Visual Studio temporary files, build results, and
39
+ ## files generated by popular Visual Studio add-ons.
40
+
41
+ # User-specific files
42
+ *.suo
43
+ *.user
44
+ *.sln.docstates
45
+
46
+ # Build results
47
+ [Dd]ebug/
48
+ [Rr]elease/
49
+ *_i.c
50
+ *_p.c
51
+ *.ilk
52
+ *.meta
53
+ *.obj
54
+ *.pch
55
+ *.pdb
56
+ *.pgc
57
+ *.pgd
58
+ *.rsp
59
+ *.sbr
60
+ *.tlb
61
+ *.tli
62
+ *.tlh
63
+ *.tmp
64
+ *.vspscc
65
+ .builds
66
+ *.dotCover
67
+
68
+ ## TODO: If you have NuGet Package Restore enabled, uncomment this
69
+ #packages/
70
+
71
+ # Visual C++ cache files
72
+ ipch/
73
+ *.aps
74
+ *.ncb
75
+ *.opensdf
76
+ *.sdf
77
+
78
+ # Visual Studio profiler
79
+ *.psess
80
+ *.vsp
81
+
82
+ # ReSharper is a .NET coding add-in
83
+ _ReSharper*
84
+
85
+ # Installshield output folder
86
+ [Ee]xpress
87
+
88
+ # DocProject is a documentation generator add-in
89
+ DocProject/buildhelp/
90
+ DocProject/Help/*.HxT
91
+ DocProject/Help/*.HxC
92
+ DocProject/Help/*.hhc
93
+ DocProject/Help/*.hhk
94
+ DocProject/Help/*.hhp
95
+ DocProject/Help/Html2
96
+ DocProject/Help/html
97
+
98
+ # Click-Once directory
99
+ publish
100
+
101
+ # Others
102
+ [Bb]in
103
+ [Oo]bj
104
+ sql
105
+ TestResults
106
+ *.Cache
107
+ ClientBin
108
+ stylecop.*
109
+ ~$*
110
+ *.dbmdl
111
+ Generated_Code #added for RIA/Silverlight projects
112
+
113
+ # Backup & report files from converting an old project file to a newer
114
+ # Visual Studio version. Backup files are not needed, because we have git ;-)
115
+ _UpgradeReport_Files/
116
+ Backup*/
117
+ UpgradeLog*.XML
118
+
119
+
120
+
121
+ ############
122
+ ## Windows
123
+ ############
124
+
125
+ # Windows image file caches
126
+ Thumbs.db
127
+
128
+ # Folder config file
129
+ Desktop.ini
130
+
131
+
132
+ #############
133
+ ## Python
134
+ #############
135
+
136
+ *.py[co]
137
+
138
+ # Packages
139
+ *.egg
140
+ *.egg-info
141
+ # dist
142
+ eggs
143
+ parts
144
+ bin
145
+ var
146
+ sdist
147
+ develop-eggs
148
+ .installed.cfg
149
+
150
+ # Installer logs
151
+ pip-log.txt
152
+
153
+ # Unit test / coverage reports
154
+ coverage
155
+ .coverage
156
+ .tox
157
+
158
+ #Translations
159
+ *.mo
160
+
161
+ #Mr Developer
162
+ .mr.developer.cfg
163
+
164
+ # Mac crap
165
+ .DS_Store
166
+ .idea
167
+ .ideaout
168
+ rat.iml
169
+
170
+ node_modules
171
+
172
+ test/data/map/tool
173
+ test/data/map/raw
174
+ theme/thumb
175
+ pre-publish-tmp
176
+ todo
177
+ *.log
178
+ *.sublime-workspace
179
+ *.sublime-project
180
+
181
+ # Result of node.js perf
182
+ *.asm
183
+
184
+ # Distribution files
185
+ /esm
186
+ /echarts.all.js
187
+ /echarts.simple.js
188
+ /echarts.common.js
189
+ /echarts.blank.js
190
+ /lib
191
+ /types
192
+ /index.js
193
+ /index.simple.js
194
+ /index.common.js
195
+ /index.blank.js
196
+ /extension-esm
197
+ /extension
198
+ /ssr/client/lib
199
+ /ssr/client/types
200
+ /ssr/client/index.js
201
+ /ssr/client/index.d.ts
202
+ /core.js
203
+ /core.d.ts
204
+ /charts.js
205
+ /charts.d.ts
206
+ /components.js
207
+ /components.d.ts
208
+ /renderers.js
209
+ /renderers.d.ts
210
+ /features.js
211
+ /features.d.ts
212
+ *.tgz
echarts-5.5.0-rc.2/.headerignore ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Only support regexp, testing against each relative file path
2
+ # based on the echart base directory. And the pattern should
3
+ # match the relative path completely.
4
+
5
+ node_modules
6
+ .*\.git
7
+ .*\.github
8
+ .*\.editorconfig
9
+ .*\.gitignore
10
+ .*\.jshintrc
11
+ .*\.jshintrc-dist
12
+ .*\.npmignore
13
+ .*\.ratignore
14
+ .*\.headerignore
15
+ .*\.DS_Store
16
+ .*\.idea
17
+ .*rat\.iml
18
+ __MAC_OS
19
+ .*README.md
20
+ .*MANIFEST\.txt
21
+ DISCLAIMER
22
+ NOTICE
23
+ KEYS
24
+ LICENSE
25
+ LICENSE-.+
26
+ licenses
27
+ map/js
28
+ map/json
29
+ benchmark/dep/*
30
+ test/ut/lib
31
+ test/data$
32
+ test/lib/esl\.js
33
+ test/lib/perlin\.js
34
+ test/lib/countup\.js
35
+ .*jquery\.min\.js
36
+ .*rollup\.browser\.js
37
+ .*configure
38
+ .+\.json
39
+ .+\.map
40
+ .+\.gexf
41
+ .+\.jar
42
+ .+\.bin
43
+ .+\.csv
44
+ .+\.png
45
+ .+\.PNG
46
+ .+\.jpg
47
+ .+\.JPG
48
+ .+\.jpeg
49
+ .+\.JPEG
50
+ .+\.gif
51
+ .+\.GIF
52
+ .+\.class
53
+ types
54
+ lib
55
+ esm
56
+ dist
echarts-5.5.0-rc.2/.husky/pre-commit ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ #!/usr/bin/env sh
2
+ . "$(dirname -- "$0")/_/husky.sh"
3
+
4
+ npm run lint
5
+ npm run checktype
echarts-5.5.0-rc.2/.jshintrc-dist ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bitwise": false,
3
+ "camelcase": false,
4
+ "curly": true,
5
+ "eqeqeq": false,
6
+ "forin": false,
7
+ "immed": true,
8
+ "latedef": false,
9
+ "newcap": true,
10
+ "noarg": false,
11
+ "noempty": true,
12
+ "nonew": true,
13
+ "plusplus": false,
14
+ "quotmark": "single",
15
+ "regexp": false,
16
+ "undef": true,
17
+ "unused": "vars",
18
+ "strict": false,
19
+ "trailing": false,
20
+ "maxparams": 20,
21
+ "maxdepth": 6,
22
+ "maxlen": 200,
23
+
24
+ "asi": false,
25
+ "boss": false,
26
+ "debug": false,
27
+ "eqnull": true,
28
+ "esversion": 3,
29
+ "module": false,
30
+ "evil": true,
31
+ "expr": true,
32
+ "funcscope": false,
33
+ "globalstrict": false,
34
+ "iterator": false,
35
+ "lastsemic": false,
36
+ "laxbreak": true,
37
+ "laxcomma": false,
38
+ "loopfunc": false,
39
+ "multistr": false,
40
+ "onecase": false,
41
+ "proto": false,
42
+ "regexdash": false,
43
+ "scripturl": false,
44
+ "smarttabs": false,
45
+ "shadow": true,
46
+ "sub": true,
47
+ "supernew": false,
48
+ "validthis": true,
49
+
50
+ "browser": true,
51
+ "couch": false,
52
+ "devel": true,
53
+ "dojo": false,
54
+ "jquery": true,
55
+ "mootools": false,
56
+ "node": false,
57
+ "nonstandard": false,
58
+ "prototypejs": false,
59
+ "rhino": false,
60
+ "wsh": false,
61
+
62
+ "nomen": false,
63
+ "onevar": false,
64
+ "passfail": false,
65
+ "white": false,
66
+
67
+ "predef": [
68
+ "global"
69
+ ]
70
+ }
echarts-5.5.0-rc.2/.lgtm.yml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+
19
+ path_classifiers:
20
+ test:
21
+ - test
22
+ library:
23
+ - benchmark/dep
24
+ generated:
25
+ - dist
26
+ extraction:
27
+ javascript:
28
+ index:
29
+ exclude:
30
+ - dist
echarts-5.5.0-rc.2/.npmignore ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /test
2
+ /map/tool
3
+ /map/raw
4
+ /theme/tool
5
+ /theme/thumb
6
+ /todo
7
+ /npm-debug.log
8
+ /benchmark
9
+ /src
10
+ /ssr/client/src
11
+ .DS_Store
12
+ Thumbs.db
13
+ Desktop.ini
14
+ /asset/contributing-inspect.png
15
+ CONTRIBUTING.md
16
+ # Hidden files
17
+ .*
echarts-5.5.0-rc.2/.vscode/settings.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "typescript.tsdk": "./node_modules/typescript/lib"
3
+ }
echarts-5.5.0-rc.2/CONTRIBUTING.md ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Contributing
2
+
3
+ 👍🎉 First off, thanks for taking the time to contribute! 🎉👍
4
+
5
+ Please check out the [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) first.
6
+
7
+ ## What can you do for the ECharts community?
8
+
9
+ Contributions can be made in varied ways:
10
+
11
+ - Help others with the issues
12
+ - Help solve problems with the issues
13
+ - Remind the authors to provide a demo if they are reporting a bug
14
+ - Try to reproduce the problem as described in the issues
15
+ - Make pull requests to fix bugs or implement new features
16
+ - Improve or translate the documents
17
+ - Discuss in the [mailing list](https://echarts.apache.org/en/maillist.html)
18
+ - ...
19
+
20
+ ## Issues
21
+
22
+ We have already prepared issue templates for bug reports and feature requests. If you want to fire an issue, just enter the [New issue](https://github.com/apache/echarts/issues/new/choose) page and select either of them to get started.
23
+
24
+ Additionally, before doing so, please search for similar questions in our [issues list](https://github.com/apache/echarts/issues?utf8=%E2%9C%93&q=is%3Aissue). If you are able to reproduce an issue found in a closed issue, please create a new issue and reference the closed one.
25
+
26
+ Please read the [documentation](http://echarts.apache.org/option.html) carefully before asking any questions.
27
+
28
+ Any questions in the form of *how can I use echarts to* or *how to use echarts x feature to* belong in [Stack Overflow](http://stackoverflow.com). Issues with questions like that in the issue tracker will be closed.
29
+
30
+ ## Release Milestone Discussion
31
+
32
+ We will start the discussion about the bugs to fix and the features of each release in the [mailing list](https://echarts.apache.org/en/maillist.html). You may subscribe to our [mailing list](https://echarts.apache.org/en/maillist.html) to give your valuable advice in milestone discussions.
33
+
34
+ Regarding the release plan, we will release a minor version at the end of every month. Here is some detail.
35
+
36
+ 1. Assume our current stable release is 4.3.0. We will start the discussion of the milestone of the release two versions ahead, which is 4.5.0 at the beginning of each month. At this time, we should also kick off the development of the next release, which is 4.4.0.
37
+ 2. Finish 4.4.0 development on about the 22nd of this month and start the testing. And the 4.5.0 milestone discussion is frozen and published on the [GitHub](https://github.com/apache/echarts/milestone/14)
38
+ 3. Vote in the mailing list for the 4.4.0 release at the end of this month.
39
+
40
+ ## Pull Requests
41
+
42
+ Wiki: [How to make a pull request](https://github.com/apache/echarts/wiki/How-to-make-a-pull-request)
43
+
44
+ ## How to Debug ECharts
45
+
46
+ Wiki: [How to setup the dev environment](https://github.com/apache/echarts/wiki/How-to-setup-the-dev-environment)
47
+
48
+ ## Some hints about using code from other authors
49
+
50
+ + About using some algorithms/formulas or inspired by others' work:
51
+ + We can be inspired by other people’s work. There is no problem with copying ideas and no problems associated with that as long as the code is entirely yours and you aren’t violating the license of the inspirational work. You can just follow "normal" source code rules.
52
+ + But when you copy the code, even parts of files, it must remain under the copyright of the original authors.
53
+ + What's the right thing to do for the public good here? I'll go with:
54
+ + Be transparent when implementing an existing idea/algorithm.
55
+ + Reference where that idea/algorithm came from.
56
+ + Use standard language when doing so (we need to define standard language).
57
+ + "inspired by", "learned from" and "references to" are vague concepts in copyright.
58
+ + If any copyrightable expression is copied from the existing idea/algorithm, compare its licensing to our licensing policies and include licensing accordingly.
59
+ + Check the original discussion about it at: https://lists.apache.org/list.html?legal-discuss@apache.org:lte=36M:echarts
60
+ + About adding the license/header of 3rd-party work:
61
+ + https://www.apache.org/legal/src-headers.html#3party
62
+ + Licenses that are compatible with the Apache license:
63
+ + BSD and MIT are compatible with the Apache license, but CC_BY_SA is not (https://apache.org/legal/resolved.html#cc-sa).
64
+ + Stack Overflow:
65
+ + before intending to copy code from Stack Overflow, we must check the following:
66
+ + https://apache.org/legal/resolved.html#stackoverflow
67
+ + https://issues.apache.org/jira/browse/LEGAL-471
68
+ + Wikipedia (and most Wikimedia Foundation projects):
69
+ + Wikipedia, and most Wikimedia Foundation projects, are licensed under CC 4.0 BY_SA (and sometimes GFDL) and are incompatible with the Apache license. Therefore, we should not copy code from Wikipedia or Wikimedia Foundation projects.
echarts-5.5.0-rc.2/KEYS ADDED
@@ -0,0 +1,419 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ This file contains the PGP keys of various developers.
2
+ Please don't use them for email unless you have to. Their main
3
+ purpose is code signing.
4
+
5
+ Examples of importing this file in your keystore:
6
+ gpg --import KEYS.txt
7
+ (need pgp and other examples here)
8
+
9
+ Examples of adding your key to this file:
10
+ pgp -kxa <your name> and append it to this file.
11
+ (pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
12
+ (gpg --list-sigs <your name>
13
+ && gpg --armor --export <your name>) >> this file.
14
+
15
+ ---------------------------------------
16
+ pub rsa4096 2018-04-23 [SC]
17
+ 9B06D9B4FA37C4DD52725742747985D7E3CEB635
18
+ uid [ultimate] Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
19
+ sig 3 747985D7E3CEB635 2018-04-23 Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
20
+ sub rsa4096 2018-04-23 [E]
21
+ sig 747985D7E3CEB635 2018-04-23 Su Shuang (CODE SIGNING KEY) <sushuang@apache.org>
22
+
23
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
24
+
25
+ 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
72
+ oQH7TsthVKvdZyjtZQg=
73
+ =Uv8d
74
+ -----END PGP PUBLIC KEY BLOCK-----
75
+
76
+ pub rsa4096 2019-01-24 [SC]
77
+ 1683FBD23F6DD36C0E52223507D78F777D2C0C27
78
+ uid [ultimate] Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
79
+ sig 3 07D78F777D2C0C27 2019-01-24 Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
80
+ sub rsa4096 2019-01-24 [E]
81
+ sig 07D78F777D2C0C27 2019-01-24 Ovilia (CODE SIGNING KEY) <oviliazhang@gmail.com>
82
+
83
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
84
+
85
+ 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
132
+ B4WM8AJSCwl8WlZrRA==
133
+ =wft0
134
+ -----END PGP PUBLIC KEY BLOCK-----
135
+
136
+ pub rsa4096 2020-08-06 [SC]
137
+ 94BD178077672157652826758E44A82497382298
138
+ uid [ 绝对 ] Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
139
+ sig 3 8E44A82497382298 2020-08-06 Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
140
+ sub rsa4096 2020-08-06 [E]
141
+ sig 8E44A82497382298 2020-08-06 Shen Yi (CODE SIGNING KEY\) <shenyi@apache.org>
142
+
143
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
144
+
145
+ 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
192
+ krvOtK7UUytDTcY=
193
+ =+SBy
194
+ -----END PGP PUBLIC KEY BLOCK-----
195
+ pub rsa4096 2022-03-02 [SC]
196
+ 8ACA4FC874B6B0836DFE70BB52514D7E7CFC32B6
197
+ uid [ 绝对 ] Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
198
+ sig 3 52514D7E7CFC32B6 2022-03-02 Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
199
+ sub rsa4096 2022-03-02 [E]
200
+ sig 52514D7E7CFC32B6 2022-03-02 Zhang Wenli (CODE SIGNING KEY) <ovilia@apache.org>
201
+
202
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
203
+
204
+ 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
251
+ RWnk0btbWIvaznWpIWo=
252
+ =QBYg
253
+ -----END PGP PUBLIC KEY BLOCK-----
254
+ pub rsa4096 2022-03-28 [SC]
255
+ EFA5629C5F1FF8D33E016202F16C82C561221579
256
+ uid [ultimate] Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
257
+ sig 3 F16C82C561221579 2022-03-28 Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
258
+ sub rsa4096 2022-03-28 [E]
259
+ sig F16C82C561221579 2022-03-28 Zhongxiang Wang (CODE SIGNING KEY) <wangzx@apache.org>
260
+
261
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
262
+
263
+ mQINBGJBdpIBEACtI4twpy36+vUMwpBQCgbpKzY+KtD95bcoMuy8IepzyQSq+Z2b
264
+ mPfjUIA4e9hSvuPCXMkDTZo3Vj2MskzxsFmS+1Or/y0pfsmx0pgzDQ5voD0ayQo3
265
+ EzDT2LbOOkCkPIpBVnQvh3LFk5/VIJCDqjHPyM6r5moWfmq9x7lfDwqhQrJryK9s
266
+ /7EGvgZT2AR7e5TMVgP021t2HH9xfyp/zF+oZVUPSXnmy9j6yiNyu3DjgHwLY+4O
267
+ RGUqhe+I8wq1l2nul0QW2BvLjouEXftf/Rx+X3k/TRVoWtH8RiJzkWZNjd8vyyDd
268
+ cOYo8MxLEJtGDhnrhpsGYM2cYwvGET2mpy1FeX/U/CWfTKUALNxZ4e7GacRi8UeM
269
+ YVp0ov22vskqYKxy0gTVHAoL/mfIcXuCxUw/s0sL01O/rP5lHwy6ghK4KZCTu/4d
270
+ YTfQo8R9NFaBWY9odN3kxJ9ehLPczogtYPU9ThIzbUJ5NudYjh+2NAXEbx9lbfRC
271
+ mR1DyihskYZ4j4FFOWqrke4flDW+lx7VgFb/Um9oQX1Bl7jKRgmlJIN+dNpJpi8w
272
+ 9a2DR/gFwxulLvsQPm/Mcki6Xb/Igscq7AZBgUKAtzLMdJuYglp1EUyYhGL6ylIf
273
+ YivzUfNnd6Dvl52H/jLxnZemHy5wO7ZtmehSs3XcPLvM6azb+zCr6xne6QARAQAB
274
+ tDZaaG9uZ3hpYW5nIFdhbmcgKENPREUgU0lHTklORyBLRVkpIDx3YW5nenhAYXBh
275
+ Y2hlLm9yZz6JAk4EEwEIADgWIQTvpWKcXx/40z4BYgLxbILFYSIVeQUCYkF2kgIb
276
+ AwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDxbILFYSIVecLfD/9L/C5XBA5I
277
+ Ub6jS6ozqkupIKdIdLbcXsXNL7cLCrs67zCldHl0t5iaVZF1/rfbwEyjWRD0W6Yx
278
+ k4XPe2iOaOh4R0BBySptBKyK3tyMBOeGZxhtn5w5hZp9ikEbyq/TDK9XK8S+45Zs
279
+ AlfzQ/B0fmihSaMyGNOS2m3kxOMwEOZVegZtiNM+ZSd10/K8Zf5mfdA7EjHLHiow
280
+ WvFMV26gAnd4T7ZRGv7/ZmI0eWAxwdnDdlxE3JgpLfaLjbKWYVOPFxSyF749yFFL
281
+ oRNcTK1Advlwf3jloWhFQU+9i/bsp+VZ7bG3ptfQvq7Nnm+TkVHpHB4FaMnezrJL
282
+ 5rKATGZapA9c5MLye0OGGfZAzfvbFsE4J7e1J6mgatjPbMoPjsYBHW5N89ZaBfbQ
283
+ napQuGx2HrBSIzmIaoQqUwdsMaC9cfNx8IdSsbK31maXyY4cooQnGbt4hrALEcti
284
+ DVZCty6NsTLruNk+kCIKLTgMdXYbvJTydNF8bGWppDaEUayRCyCUHf/UBhVhdLU6
285
+ /jyNF141xlNUV5yXDlMGANrZ+26Bu8vufEpkiABihjh/DGQZpdqY9zEDR5sQmae+
286
+ ij0CBG7SLtEFLY5bHsCxm5orSIil0eTAsNFkjn9JYvoil7WJNuV2TdWbSa+Fs+gM
287
+ UmLLR5oUA3EM1T1BV4TICUevcoSZxdKkIrkCDQRiQXaSARAA6Ci/4XEq5CApLoIJ
288
+ MO+HsmP1orppgqGY1hFM1saQ/1JkgOFjfXlGWNLSkymNpqapDIblHdeC8mXdZJSm
289
+ Qeto8i+wEJI+iKl8iYm/KSt/OpfnxfqmMcFhYRczTDFUdp4/cidxCf1TTjyub1PL
290
+ 9Pu6TJ4pqJC4TJ1QYOGVZEsMk+Csg6n33sArmpD4YoZfCQy1unvweSr920A4Y5sJ
291
+ jNn6ntGUhguAeHe165yHv2fIWJb/ur+9Kl/SYdD17I+oGW9EZzyNU/lwXs4/siqD
292
+ nmTzdWQ+/NsfFAIJzVsEwp9687opNOXKlSpaLO8ACGx/nOMUnjfmG9tu4h3bkQtN
293
+ SAALDKRn12V3nB7nqbOdSy2QgyFETn5gO64ZuWD/TSk/3P8Bp8AwHdNDKer3GqH7
294
+ omA7VgKxbRhoeJMKWuihBRJ3y01u614QPgmheSzggGg+NVmwWbq5f8+nH20NVNjX
295
+ dTRACCR/0IjRv2ZitNc48X+lNqMMXQdk9K+EpcQhy4fHAnwqc4iij+moKBBp513n
296
+ mv7h+QWLVYjqOuA1yPLAUFxoYLBEQ1DoHTHCbJ3o6gHk8eiPgoIvtJIZNAc150aj
297
+ scwXmk6KxyZwB4cFtFpzRYMfefDRS2O6t9+lkz83dBT9VKWISoRhh3JXaeoIRkk6
298
+ /RvzPYzwGf3R5ouvwfaAXI4YOqEAEQEAAYkCNgQYAQgAIBYhBO+lYpxfH/jTPgFi
299
+ AvFsgsVhIhV5BQJiQXaSAhsMAAoJEPFsgsVhIhV5AUgQAJN537gtlvtWkj6jPFQR
300
+ hNuoCapc7XicBjtqSUlSg/vbWzPeayhSeX288shNJVmJTD5Wq2UfDuki6W6EEdBu
301
+ pZnPX8xqhBjvOCgei3vZZPqEMKqCxAnbV9CVFJzJZh+u5SLnbOlYVuNh6fp1uaSi
302
+ AcRDgyLaUYBYj14ge42aukQuzCWvdnMcn1fZdN84xnm/dXHTxrmphBJlTfVk2U0+
303
+ bvieQNtqp7V7f18peMEoCBTqNjmDxebaTiyqcqAAWXV0bnH9TVIsjCDdT8HfsHAH
304
+ 8Pfn/Tw9WqhIRcvWA1Ld1wrMRHv7oOVzMsvvaBsxR4X4yhXBx2Nn2r/g0Rp5K+2R
305
+ o9QLwPCa0P874LVMmdxdoBSC8GMigoj7R1lBIjyaM5v5ylTu8RVmDSul7xIjb6ek
306
+ tWKjZ/ASFSnA+m5VMBF0Z9bA3v31KvsS4ZQtnXEcAIVrNFkBO9JZrwBPat0WVWx7
307
+ /VQeh7PEtvsQhlKRlWY6xVdLq+DD3p/mHqpIH+YWaqhOa6sde8teN8UpSyp6F13a
308
+ SVM1KUz1U6gH3WEu8aqOmJTVrHq5h3kBUrfiLpc3juBCjrAlY2iY3Fzi5VuBzbnT
309
+ oEg8NMD8Wao5YN22JG30anrmYadZaghIwBz6rEuHmbf5MwcKoK349LptfHV4fhuq
310
+ 5B5E6LlMNPTCWmPzYtTm5qZK
311
+ =bbcU
312
+ -----END PGP PUBLIC KEY BLOCK-----
313
+ pub ed25519 2022-12-01 [SC] [expires: 2024-11-30]
314
+ 016736F5612A13D1FD04AA45CC593BC1F4F4EB7A
315
+ uid [ultimate] susiwen <susiwen8@gmail.com>
316
+ sig 3 CC593BC1F4F4EB7A 2022-12-01 susiwen <susiwen8@gmail.com>
317
+ sub cv25519 2022-12-01 [E] [expires: 2024-11-30]
318
+ sig CC593BC1F4F4EB7A 2022-12-01 susiwen <susiwen8@gmail.com>
319
+
320
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
321
+
322
+ mDMEY4jDBhYJKwYBBAHaRw8BAQdAlpaQNA7ARfkPVj6EoYARkkGPdLgOmulCwScl
323
+ xGk3+8m0HHN1c2l3ZW4gPHN1c2l3ZW44QGdtYWlsLmNvbT6ImQQTFgoAQRYhBAFn
324
+ NvVhKhPR/QSqRcxZO8H09Ot6BQJjiMMGAhsDBQkDwmcABQsJCAcCAiICBhUKCQgL
325
+ AgQWAgMBAh4HAheAAAoJEMxZO8H09Ot6gcoBANBsCrZOwZtWCCQB2A6cy0or7q4c
326
+ GdyMJbP7zT5tdAAuAQDI7dy5/KE5tklZmEHJZevQLWezs6yKi+31QxcNFh6FA7g4
327
+ BGOIwwYSCisGAQQBl1UBBQEBB0A4z0jb/PpPRt/zILSBzl8XidMvvQAksexms4P4
328
+ D74EcQMBCAeIfgQYFgoAJhYhBAFnNvVhKhPR/QSqRcxZO8H09Ot6BQJjiMMGAhsM
329
+ BQkDwmcAAAoJEMxZO8H09Ot6hEABALEBaZSNzmx17PbubyiyvtaEISuzsv23RYwh
330
+ 4NRHP4BkAP475WSjwMns2hSairvPXULqAcqQnjytov7CU1hbMLvgDpgzBGOMr5EW
331
+ CSsGAQQB2kcPAQEHQF85ZZTr9NstXxkToCrkVYwNuahidgRyv6S3zo2xTc6ZtC9z
332
+ dXNpd2VuIChDT0RFIFNJR05JTkcgS0VZKSA8c3VzaXdlbjhAZ21haWwuY29tPoiT
333
+ BBMWCgA7FiEEhBIjSy5LUgkGNSGQJZ0/SMJTSzwFAmOMr5ECGwMFCwkIBwICIgIG
334
+ FQoJCAsCBBYCAwECHgcCF4AACgkQJZ0/SMJTSzyNaAD+P35MI4r5nUDDg97QKYNY
335
+ m99MtUxTmcK/KGsrxYEZEDEA/jECGFvy/5WAhIRUTl4ExVsY3eBL/K2DaoTseW4a
336
+ eVEPuDgEY4yvkRIKKwYBBAGXVQEFAQEHQKNPmeMoqbHBVs5xn0c+Tz/bPW0rDDbw
337
+ Gt1pqdBMdmUvAwEIB4h4BBgWCgAgFiEEhBIjSy5LUgkGNSGQJZ0/SMJTSzwFAmOM
338
+ r5ECGwwACgkQJZ0/SMJTSzxTzQD+MTFHjt7z78fdTqbbRA6isxPV84cAFQsX4cRx
339
+ PRobcbkBAIwAkq+ddEycxZTdzaELpE08h/BLcScqbOl/ME1PTZ0H
340
+ =3Tm4
341
+ -----END PGP PUBLIC KEY BLOCK-----
342
+ pub ed25519 2023-03-15 [SC] [有效至:2025-03-14]
343
+ 9C8B166777DB15AD1CC0FFBF715559B9217D4E5A
344
+ uid [ 绝对 ] zakwu <123537200@qq.com>
345
+ sig 3 715559B9217D4E5A 2023-03-15 zakwu <123537200@qq.com>
346
+ sub cv25519 2023-03-15 [E] [有效至:2025-03-14]
347
+ sig 715559B9217D4E5A 2023-03-15 zakwu <123537200@qq.com>
348
+
349
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
350
+
351
+ mDMEZBE+JRYJKwYBBAHaRw8BAQdA4US4FlrxvH2Ckj5NzIkeL5nd4NyDBrlpyERo
352
+ KvlXn/C0GHpha3d1IDwxMjM1MzcyMDBAcXEuY29tPoiZBBMWCgBBFiEEnIsWZ3fb
353
+ Fa0cwP+/cVVZuSF9TloFAmQRPiUCGwMFCQPCZwAFCwkIBwICIgIGFQoJCAsCBBYC
354
+ AwECHgcCF4AACgkQcVVZuSF9TloeGAD/RjarHn34jh1NtJGi6Z8wv/XWESxyNH6g
355
+ orBPlQ+yluEBAIinhY8j/XczJQUcj9cqpMB4m8R+/jEadbaBe9pQ3uAHuDgEZBE+
356
+ JRIKKwYBBAGXVQEFAQEHQPa8rnpAhbsWw0VsCbYo1J+VeZXT/piqPpdducN3Wyh2
357
+ AwEIB4h+BBgWCgAmFiEEnIsWZ3fbFa0cwP+/cVVZuSF9TloFAmQRPiUCGwwFCQPC
358
+ ZwAACgkQcVVZuSF9Tlrc4QD/ZDd7OjcT9ShdARjcGoQ0jt6rEqL6n10V6caG+77a
359
+ 89wA/R+29UlbOXNAxcQHxph8WXUZhACDhKyNETgRsgHysZQJ
360
+ =/6bg
361
+ -----END PGP PUBLIC KEY BLOCK-----
362
+ pub rsa4096 2024-01-31 [SC]
363
+ 88AF48720040B150083A7D10932517D290673A7B
364
+ uid [ 绝对 ] Zhang Wenli <ovilia@apache.org>
365
+ sig 3 932517D290673A7B 2024-01-31 [自签名]
366
+ sub rsa4096 2024-01-31 [E]
367
+ sig 932517D290673A7B 2024-01-31 [自签名]
368
+
369
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
370
+
371
+ mQINBGW5/b0BEADXtrbzMa25cgPBGA0Zta/gdAO2eW8KThwEr9rbxRMZnlh7PUN5
372
+ zxfUn0fbGpQ+GHY5PaMcK350L82Pvz1uTMJDR5frxW/BlTvf83c3YwtjkV+YPk3j
373
+ BN0XTe61EDB3ePc9OpXapoSCncobSeyiKVlpSwM+l9omzAWJZ1cKpGHOaVNLV+0c
374
+ xz3u4cSKG9t/dGFcsExmI9amVYYMv/Hudrj97aAv1lKBWscxo/x9mxNlbGfaIjhR
375
+ 3S5BiwKyhSM0CC6pOEGp6HLm3F7dZO/3xF9dCVJEtHtlOchf8umMQMbPH6SSF1lA
376
+ MEDmejlE1MIeL+wVyQ3BbvdANwQ0SYBx1o3e3TUuXOIUz2rZahf4YCNmuB62UHXY
377
+ IbZ83vC3uRpypIzVsGLe4lSHPsG+fGisJHp8JNeDxAnLv8Sdn89XCp7rgX8KLg8K
378
+ Qk4KW0VmwjvxCbQIMssQzP6R5Pq6vOZHCm3Ghsuxx66uSxEG6tBunjjdPMr6oAaa
379
+ DwnJE7BmhC76A0fWQg39Y9nZLm9Zawc7pATz6JM0i5QT/0CLQooqlLAvplNocH4p
380
+ lVFnBugoXh6zXSKhl3MdU5w3EHfOXLNpqbfC9cHoGfJ1miUNkDFJ5ceCgukAlXuV
381
+ 5h2pisvOhyK0IkAJJGSuh3Y4z5uFKNlptxz7XTq/VQZV92zAooJX8G1GZwARAQAB
382
+ tB9aaGFuZyBXZW5saSA8b3ZpbGlhQGFwYWNoZS5vcmc+iQJRBBMBCAA7FiEEiK9I
383
+ cgBAsVAIOn0QkyUX0pBnOnsFAmW5/b0CGwMFCwkIBwICIgIGFQoJCAsCBBYCAwEC
384
+ HgcCF4AACgkQkyUX0pBnOnt1ZQ/9HimWDMPJycmOeeiyR3/8rHIJuYz6bmYapyIV
385
+ G7j6gwsliFofaAR2sQ+Kn9by6D2VxMJ892YRvV0HEpvz6zEKOywbVPmWpyHXT8aQ
386
+ rZQvcrL4CcV8lVsFNiQG4kopEIQriq2NmLDvpO+PMnYgrY3tbpEqE3i+A6hbFH7w
387
+ Q3yCpy3MLesDs3pjRJ14EzKm8ecthABcKZxgBHPPjPoxLFtADRNkxX2MgOXygB0R
388
+ 5DQKgiUauZv2Le1x+ER8ewspmOoQayIJxjAwDOmttMtFtgk4LO/vNJWyGwdlFmM0
389
+ zfH45Uyw4tj9eau+Noixt6KqHDi9IoiMXRPfBYVaUEfUVTqumOZaNDLd9aLJGZ7p
390
+ /+UjwhAOskN01t5aQrKNNeBCO42PVMjBviwSEwaNP3S05HYeQleu77c4pKA6XzHl
391
+ fRk7WkIWlPIPKhcHKc0EhfivZW6JE3h1pZKiumZjiAAJSOIWcwzWn44EmbbClOAM
392
+ u15CKTvFxzFj7pSwK5jKOX9NcqDc/umfQMCgZnhuUZibCPvvVpBYYcE1cvIYxtMr
393
+ tAKD5d4NMLeB7iT1cmXvCcBj0vyUpYt3B3xzfH0HYL7gZWQA7S2zb9M/lbq9R4MI
394
+ MbTzT7R1rOojY3soz70r0v6+XTExEuV9U6QkO5B43bTkjekIhbVNQS0TvEWfDP5u
395
+ 4uUqJuK5Ag0EZbn9vQEQAPglK8p/LjDyi61xxoKniEriqqljQwFk1dHMfJDuIsZw
396
+ T3B21QlY6sfSXk5cKu3sFRb6fSn21isYnSzkJRrhMSVEFoFd8+Fu7ZaLfZDuO6n4
397
+ F6i5Ely0j8G7zkU7+pQPKE9fpdvHvdrJ3SFRqZFALuwgxkMm9JnnvhCAQizKItZ8
398
+ lj6mMJjV/Xe29jBlRXrwY/XTUvJOwrWqicAbeHkY3aDsEGpyB9CKTJWeFRJ9QHVw
399
+ 8azhK23lmvoDisiK2fsByp0xqLsolVNV+/k7cgrXZ1Gs1eiBI5bi9ai7tHuaknOb
400
+ BE8EJh9CSBRFnMMhrAb9diaZOQ4ir4kjo0LCs0jOiH6BxlafQpQZW+rDgpYVutaJ
401
+ QOX3daPju3YQIDKTRGHO37ojFPYzxf0i8zkGBAJuRHcaIKynI0KVExwu91JkFRLR
402
+ uhcPIFF8NH8cajaHSxJlQyQPSBGubm7AsKjUUYWXBrH5rtiz7ReYFty+cz3fa8Rm
403
+ aodqqB6ns37rwUD+lZFd3m+Wew9/TDOLP2TFyJctjNIYFGMf9/NYB9+X9fAAZtbl
404
+ QdRiS31V+gyW8LIkS2qypJlyQLNicydvKYl7wnas9lEaHDSQjgdg/+spmRkZuOVg
405
+ +WwiVlEwkCH9SbYi1NXzHzOtAwdrZm2VKx/X+woMRuS1V6DHGTQVi+aScuE+SzF/
406
+ ABEBAAGJAjYEGAEIACAWIQSIr0hyAECxUAg6fRCTJRfSkGc6ewUCZbn9vQIbDAAK
407
+ CRCTJRfSkGc6e8DYEADEy60L3nfr0odeh04Q2Yev2xPV9TxM+7nfx+ECKUQoJSf3
408
+ m5k09AfIT17eHy/+oIFLSp97XIgt1eL9pCAsn2G6XvbAztUzgcQJZRb+fHcqRNZ7
409
+ fiM0puAkYcq/aKMMNwuL7T6AYDak+bsS0vh1/7woZBEpIS1Ulmu5hH/9ypLhRZ/7
410
+ EwOftAqiPz71ahTfUkrL5V4Ddt2nI4/zfFLpnUaiRokljcdLUCqtearvNUdGQbZ9
411
+ J8AHX0FYYhqcHSKnJDqkfOkhrZiTuo3gMP4nx2429ZC9s5igPZ10Aqd1IY3MrmiT
412
+ 0Bv4BmbaiYaUss4IU8rNavrj+mueCFg81YaekxgMOsRRVFxCKPKba0lr55iaPygh
413
+ 61FtYQxTasEM/4Sm/rF3rmZpktdCv0bRkVOvZ/8+VpHDdhjg6pmzQVNwp9K2xBg0
414
+ TI6kmvnT5NfjOm6xOlg0dYbDr+PiLITlSigZ3BF2qJcmJGpJejuX0PRzWPiAWkoI
415
+ NW6bo6qDdThmCNuS/FUk/1qyXWebuqTVvxbROomoopak37U5IwZZQ6HMtpHZGz+d
416
+ NcCJmTlyNY+xezQj414blwdPgUq4IASLZrCjD9yuO0tUhsNjgHX+R9x7O2Q86ZeN
417
+ WOQhgLPyfZrMnGjpjo/2v62Cp7yFZSNo+xtvErtMeaDL/ufAIFbaVkyxwvkW6g==
418
+ =YTwy
419
+ -----END PGP PUBLIC KEY BLOCK-----
echarts-5.5.0-rc.2/LICENSE ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Apache License
3
+ Version 2.0, January 2004
4
+ http://www.apache.org/licenses/
5
+
6
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
+
8
+ 1. Definitions.
9
+
10
+ "License" shall mean the terms and conditions for use, reproduction,
11
+ and distribution as defined by Sections 1 through 9 of this document.
12
+
13
+ "Licensor" shall mean the copyright owner or entity authorized by
14
+ the copyright owner that is granting the License.
15
+
16
+ "Legal Entity" shall mean the union of the acting entity and all
17
+ other entities that control, are controlled by, or are under common
18
+ control with that entity. For the purposes of this definition,
19
+ "control" means (i) the power, direct or indirect, to cause the
20
+ direction or management of such entity, whether by contract or
21
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
+ outstanding shares, or (iii) beneficial ownership of such entity.
23
+
24
+ "You" (or "Your") shall mean an individual or Legal Entity
25
+ exercising permissions granted by this License.
26
+
27
+ "Source" form shall mean the preferred form for making modifications,
28
+ including but not limited to software source code, documentation
29
+ source, and configuration files.
30
+
31
+ "Object" form shall mean any form resulting from mechanical
32
+ transformation or translation of a Source form, including but
33
+ not limited to compiled object code, generated documentation,
34
+ and conversions to other media types.
35
+
36
+ "Work" shall mean the work of authorship, whether in Source or
37
+ Object form, made available under the License, as indicated by a
38
+ copyright notice that is included in or attached to the work
39
+ (an example is provided in the Appendix below).
40
+
41
+ "Derivative Works" shall mean any work, whether in Source or Object
42
+ form, that is based on (or derived from) the Work and for which the
43
+ editorial revisions, annotations, elaborations, or other modifications
44
+ represent, as a whole, an original work of authorship. For the purposes
45
+ of this License, Derivative Works shall not include works that remain
46
+ separable from, or merely link (or bind by name) to the interfaces of,
47
+ the Work and Derivative Works thereof.
48
+
49
+ "Contribution" shall mean any work of authorship, including
50
+ the original version of the Work and any modifications or additions
51
+ to that Work or Derivative Works thereof, that is intentionally
52
+ submitted to Licensor for inclusion in the Work by the copyright owner
53
+ or by an individual or Legal Entity authorized to submit on behalf of
54
+ the copyright owner. For the purposes of this definition, "submitted"
55
+ means any form of electronic, verbal, or written communication sent
56
+ to the Licensor or its representatives, including but not limited to
57
+ communication on electronic mailing lists, source code control systems,
58
+ and issue tracking systems that are managed by, or on behalf of, the
59
+ Licensor for the purpose of discussing and improving the Work, but
60
+ excluding communication that is conspicuously marked or otherwise
61
+ designated in writing by the copyright owner as "Not a Contribution."
62
+
63
+ "Contributor" shall mean Licensor and any individual or Legal Entity
64
+ on behalf of whom a Contribution has been received by Licensor and
65
+ subsequently incorporated within the Work.
66
+
67
+ 2. Grant of Copyright License. Subject to the terms and conditions of
68
+ this License, each Contributor hereby grants to You a perpetual,
69
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
+ copyright license to reproduce, prepare Derivative Works of,
71
+ publicly display, publicly perform, sublicense, and distribute the
72
+ Work and such Derivative Works in Source or Object form.
73
+
74
+ 3. Grant of Patent License. Subject to the terms and conditions of
75
+ this License, each Contributor hereby grants to You a perpetual,
76
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
+ (except as stated in this section) patent license to make, have made,
78
+ use, offer to sell, sell, import, and otherwise transfer the Work,
79
+ where such license applies only to those patent claims licensable
80
+ by such Contributor that are necessarily infringed by their
81
+ Contribution(s) alone or by combination of their Contribution(s)
82
+ with the Work to which such Contribution(s) was submitted. If You
83
+ institute patent litigation against any entity (including a
84
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
85
+ or a Contribution incorporated within the Work constitutes direct
86
+ or contributory patent infringement, then any patent licenses
87
+ granted to You under this License for that Work shall terminate
88
+ as of the date such litigation is filed.
89
+
90
+ 4. Redistribution. You may reproduce and distribute copies of the
91
+ Work or Derivative Works thereof in any medium, with or without
92
+ modifications, and in Source or Object form, provided that You
93
+ meet the following conditions:
94
+
95
+ (a) You must give any other recipients of the Work or
96
+ Derivative Works a copy of this License; and
97
+
98
+ (b) You must cause any modified files to carry prominent notices
99
+ stating that You changed the files; and
100
+
101
+ (c) You must retain, in the Source form of any Derivative Works
102
+ that You distribute, all copyright, patent, trademark, and
103
+ attribution notices from the Source form of the Work,
104
+ excluding those notices that do not pertain to any part of
105
+ the Derivative Works; and
106
+
107
+ (d) If the Work includes a "NOTICE" text file as part of its
108
+ distribution, then any Derivative Works that You distribute must
109
+ include a readable copy of the attribution notices contained
110
+ within such NOTICE file, excluding those notices that do not
111
+ pertain to any part of the Derivative Works, in at least one
112
+ of the following places: within a NOTICE text file distributed
113
+ as part of the Derivative Works; within the Source form or
114
+ documentation, if provided along with the Derivative Works; or,
115
+ within a display generated by the Derivative Works, if and
116
+ wherever such third-party notices normally appear. The contents
117
+ of the NOTICE file are for informational purposes only and
118
+ do not modify the License. You may add Your own attribution
119
+ notices within Derivative Works that You distribute, alongside
120
+ or as an addendum to the NOTICE text from the Work, provided
121
+ that such additional attribution notices cannot be construed
122
+ as modifying the License.
123
+
124
+ You may add Your own copyright statement to Your modifications and
125
+ may provide additional or different license terms and conditions
126
+ for use, reproduction, or distribution of Your modifications, or
127
+ for any such Derivative Works as a whole, provided Your use,
128
+ reproduction, and distribution of the Work otherwise complies with
129
+ the conditions stated in this License.
130
+
131
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
132
+ any Contribution intentionally submitted for inclusion in the Work
133
+ by You to the Licensor shall be under the terms and conditions of
134
+ this License, without any additional terms or conditions.
135
+ Notwithstanding the above, nothing herein shall supersede or modify
136
+ the terms of any separate license agreement you may have executed
137
+ with Licensor regarding such Contributions.
138
+
139
+ 6. Trademarks. This License does not grant permission to use the trade
140
+ names, trademarks, service marks, or product names of the Licensor,
141
+ except as required for reasonable and customary use in describing the
142
+ origin of the Work and reproducing the content of the NOTICE file.
143
+
144
+ 7. Disclaimer of Warranty. Unless required by applicable law or
145
+ agreed to in writing, Licensor provides the Work (and each
146
+ Contributor provides its Contributions) on an "AS IS" BASIS,
147
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
+ implied, including, without limitation, any warranties or conditions
149
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
+ PARTICULAR PURPOSE. You are solely responsible for determining the
151
+ appropriateness of using or redistributing the Work and assume any
152
+ risks associated with Your exercise of permissions under this License.
153
+
154
+ 8. Limitation of Liability. In no event and under no legal theory,
155
+ whether in tort (including negligence), contract, or otherwise,
156
+ unless required by applicable law (such as deliberate and grossly
157
+ negligent acts) or agreed to in writing, shall any Contributor be
158
+ liable to You for damages, including any direct, indirect, special,
159
+ incidental, or consequential damages of any character arising as a
160
+ result of this License or out of the use or inability to use the
161
+ Work (including but not limited to damages for loss of goodwill,
162
+ work stoppage, computer failure or malfunction, or any and all
163
+ other commercial damages or losses), even if such Contributor
164
+ has been advised of the possibility of such damages.
165
+
166
+ 9. Accepting Warranty or Additional Liability. While redistributing
167
+ the Work or Derivative Works thereof, You may choose to offer,
168
+ and charge a fee for, acceptance of support, warranty, indemnity,
169
+ or other liability obligations and/or rights consistent with this
170
+ License. However, in accepting such obligations, You may act only
171
+ on Your own behalf and on Your sole responsibility, not on behalf
172
+ of any other Contributor, and only if You agree to indemnify,
173
+ defend, and hold each Contributor harmless for any liability
174
+ incurred by, or claims asserted against, such Contributor by reason
175
+ of your accepting any such warranty or additional liability.
176
+
177
+ END OF TERMS AND CONDITIONS
178
+
179
+ APPENDIX: How to apply the Apache License to your work.
180
+
181
+ To apply the Apache License to your work, attach the following
182
+ boilerplate notice, with the fields enclosed by brackets "[]"
183
+ replaced with your own identifying information. (Don't include
184
+ the brackets!) The text should be enclosed in the appropriate
185
+ comment syntax for the file format. We also recommend that a
186
+ file or class name and description of purpose be included on the
187
+ same "printed page" as the copyright notice for easier
188
+ identification within third-party archives.
189
+
190
+ Copyright [yyyy] [name of copyright owner]
191
+
192
+ Licensed under the Apache License, Version 2.0 (the "License");
193
+ you may not use this file except in compliance with the License.
194
+ You may obtain a copy of the License at
195
+
196
+ http://www.apache.org/licenses/LICENSE-2.0
197
+
198
+ Unless required by applicable law or agreed to in writing, software
199
+ distributed under the License is distributed on an "AS IS" BASIS,
200
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
+ See the License for the specific language governing permissions and
202
+ limitations under the License.
203
+
204
+
205
+
206
+
207
+
208
+ ========================================================================
209
+ Apache ECharts Subcomponents:
210
+
211
+ The Apache ECharts project contains subcomponents with separate copyright
212
+ notices and license terms. Your use of the source code for these
213
+ subcomponents is also subject to the terms and conditions of the following
214
+ licenses.
215
+
216
+ BSD 3-Clause (d3.js):
217
+ The following files embed [d3.js](https://github.com/d3/d3) BSD 3-Clause:
218
+ `/src/chart/treemap/treemapLayout.ts`,
219
+ `/src/chart/tree/layoutHelper.ts`,
220
+ `/src/chart/graph/forceHelper.ts`,
221
+ `/src/util/number.ts`
222
+ See `/licenses/LICENSE-d3` for details of the license.
echarts-5.5.0-rc.2/NOTICE ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ Apache ECharts
2
+ Copyright 2017-2024 The Apache Software Foundation
3
+
4
+ This product includes software developed at
5
+ The Apache Software Foundation (https://www.apache.org/).
echarts-5.5.0-rc.2/README.md ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Apache ECharts
2
+
3
+ <a href="https://echarts.apache.org/">
4
+ <img style="vertical-align: top;" src="./asset/logo.png?raw=true" alt="logo" height="50px">
5
+ </a>
6
+
7
+ Apache ECharts is a free, powerful charting and visualization library offering easy ways to add intuitive, interactive, and highly customizable charts to your commercial products. It is written in pure JavaScript and based on <a href="https://github.com/ecomfe/zrender">zrender</a>, which is a whole new lightweight canvas library.
8
+
9
+ **[中文官网](https://echarts.apache.org/zh/index.html)** | **[ENGLISH HOMEPAGE](https://echarts.apache.org/en/index.html)**
10
+
11
+ [![License](https://img.shields.io/npm/l/echarts?color=5470c6)](https://github.com/apache/echarts/blob/master/LICENSE) [![Latest npm release](https://img.shields.io/npm/v/echarts?color=91cc75)](https://www.npmjs.com/package/echarts) [![NPM downloads](https://img.shields.io/npm/dm/echarts.svg?label=npm%20downloads&style=flat&color=fac858)](https://www.npmjs.com/package/echarts) [![Contributors](https://img.shields.io/github/contributors/apache/echarts?color=3ba272)](https://github.com/apache/echarts/graphs/contributors)
12
+
13
+ [![Build Status](https://github.com/apache/echarts/actions/workflows/ci.yml/badge.svg)](https://github.com/apache/echarts/actions/workflows/ci.yml)
14
+
15
+ ## Get Apache ECharts
16
+
17
+ You may choose one of the following methods:
18
+
19
+ + Download from the [official website](https://echarts.apache.org/download.html)
20
+ + `npm install echarts --save`
21
+ + CDN: [jsDelivr CDN](https://www.jsdelivr.com/package/npm/echarts?path=dist)
22
+
23
+ ## Docs
24
+
25
+ + [Get Started](https://echarts.apache.org/handbook)
26
+ + [API](https://echarts.apache.org/api.html)
27
+ + [Option Manual](https://echarts.apache.org/option.html)
28
+ + [Examples](https://echarts.apache.org/examples)
29
+
30
+ ## Get Help
31
+
32
+ + [GitHub Issues](https://github.com/apache/echarts/issues) for bug report and feature requests
33
+ + Email [dev@echarts.apache.org](mailto:dev@echarts.apache.org) for general questions
34
+ + Subscribe to the [mailing list](https://echarts.apache.org/maillist.html) to get updated with the project
35
+
36
+ ## Build
37
+
38
+ Build echarts source code:
39
+
40
+ Execute the instructions in the root directory of the echarts:
41
+ ([Node.js](https://nodejs.org) is required)
42
+
43
+ ```shell
44
+ # Install the dependencies from NPM:
45
+ npm install
46
+
47
+ # Rebuild source code immediately in watch mode when changing the source code.
48
+ # It opens the `./test` directory, and you may open `-cases.html` to get the list
49
+ # of all test cases.
50
+ # If you wish to create a test case, run `npm run mktest:help` to learn more.
51
+ npm run dev
52
+
53
+ # Check the correctness of TypeScript code.
54
+ npm run checktype
55
+
56
+ # If intending to build and get all types of the "production" files:
57
+ npm run release
58
+ ```
59
+
60
+ Then the "production" files are generated in the `dist` directory.
61
+
62
+ ## Contribution
63
+
64
+ Please refer to the [contributing](https://github.com/apache/echarts/blob/master/CONTRIBUTING.md) document if you wish to debug locally or make pull requests.
65
+
66
+ ## Resources
67
+
68
+ ### Awesome ECharts
69
+
70
+ [https://github.com/ecomfe/awesome-echarts](https://github.com/ecomfe/awesome-echarts)
71
+
72
+ ### Extensions
73
+
74
+ + [ECharts GL](https://github.com/ecomfe/echarts-gl) An extension pack of ECharts, which provides 3D plots, globe visualization, and WebGL acceleration.
75
+
76
+ + [Liquidfill 水球图](https://github.com/ecomfe/echarts-liquidfill)
77
+
78
+ + [Wordcloud 字符云](https://github.com/ecomfe/echarts-wordcloud)
79
+
80
+ + [Extension for Baidu Map 百度地图扩展](https://github.com/apache/echarts/tree/master/extension-src/bmap) An extension provides a wrapper of Baidu Map Service SDK.
81
+
82
+ + [vue-echarts](https://github.com/ecomfe/vue-echarts) ECharts component for Vue.js
83
+
84
+ + [echarts-stat](https://github.com/ecomfe/echarts-stat) Statistics tool for ECharts
85
+
86
+ ## License
87
+
88
+ ECharts is available under the Apache License V2.
89
+
90
+ ## Code of Conduct
91
+
92
+ Please refer to [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html).
93
+
94
+ ## Paper
95
+
96
+ Deqing Li, Honghui Mei, Yi Shen, Shuang Su, Wenli Zhang, Junting Wang, Ming Zu, Wei Chen.
97
+ [ECharts: A Declarative Framework for Rapid Construction of Web-based Visualization](https://www.sciencedirect.com/science/article/pii/S2468502X18300068).
98
+ Visual Informatics, 2018.
echarts-5.5.0-rc.2/asset/contributing-inspect.png ADDED
echarts-5.5.0-rc.2/asset/logo.png ADDED
echarts-5.5.0-rc.2/build/addHeader.js ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+
21
+ const fs = require('fs');
22
+ const preamble = require('./preamble');
23
+ const pathTool = require('path');
24
+ const chalk = require('chalk');
25
+
26
+ // In the `.headerignore`, each line is a pattern in RegExp.
27
+ // all relative path (based on the echarts base directory) is tested.
28
+ // The pattern should match the relative path completely.
29
+ const excludesPath = pathTool.join(__dirname, '../.headerignore');
30
+ const ecBasePath = pathTool.join(__dirname, '../');
31
+
32
+ const isVerbose = process.argv[2] === '--verbose';
33
+
34
+ // const lists = [
35
+ // '../src/**/*.js',
36
+ // '../build/*.js',
37
+ // '../benchmark/src/*.js',
38
+ // '../benchmark/src/gulpfile.js',
39
+ // '../extension-src/**/*.js',
40
+ // '../extension/**/*.js',
41
+ // '../map/js/**/*.js',
42
+ // '../test/build/**/*.js',
43
+ // '../test/node/**/*.js',
44
+ // '../test/ut/core/*.js',
45
+ // '../test/ut/spe/*.js',
46
+ // '../test/ut/ut.js',
47
+ // '../test/*.js',
48
+ // '../theme/*.js',
49
+ // '../theme/tool/**/*.js',
50
+ // '../echarts.all.js',
51
+ // '../echarts.blank.js',
52
+ // '../echarts.common.js',
53
+ // '../echarts.simple.js',
54
+ // '../index.js',
55
+ // '../index.common.js',
56
+ // '../index.simple.js'
57
+ // ];
58
+
59
+ function run() {
60
+ const updatedFiles = [];
61
+ const passFiles = [];
62
+ const pendingFiles = [];
63
+
64
+ eachFile(function (absolutePath, fileExt) {
65
+ const fileStr = fs.readFileSync(absolutePath, 'utf-8');
66
+
67
+ const existLicense = preamble.extractLicense(fileStr, fileExt);
68
+
69
+ if (existLicense) {
70
+ passFiles.push(absolutePath);
71
+ return;
72
+ }
73
+
74
+ // Conside binary files, only add for files with known ext.
75
+ if (!preamble.hasPreamble(fileExt)) {
76
+ pendingFiles.push(absolutePath);
77
+ return;
78
+ }
79
+
80
+ fs.writeFileSync(absolutePath, preamble.addPreamble(fileStr, fileExt), 'utf-8');
81
+ updatedFiles.push(absolutePath);
82
+ });
83
+
84
+ console.log('\n');
85
+ console.log('----------------------------');
86
+ console.log(' Files that exists license: ');
87
+ console.log('----------------------------');
88
+ if (passFiles.length) {
89
+ if (isVerbose) {
90
+ passFiles.forEach(function (path) {
91
+ console.log(chalk.green(path));
92
+ });
93
+ }
94
+ else {
95
+ console.log(chalk.green(passFiles.length + ' files. (use argument "--verbose" see details)'));
96
+ }
97
+ }
98
+ else {
99
+ console.log('Nothing.');
100
+ }
101
+
102
+ console.log('\n');
103
+ console.log('--------------------');
104
+ console.log(' License added for: ');
105
+ console.log('--------------------');
106
+ if (updatedFiles.length) {
107
+ updatedFiles.forEach(function (path) {
108
+ console.log(chalk.green(path));
109
+ });
110
+ }
111
+ else {
112
+ console.log('Nothing.');
113
+ }
114
+
115
+ console.log('\n');
116
+ console.log('----------------');
117
+ console.log(' Pending files: ');
118
+ console.log('----------------');
119
+ if (pendingFiles.length) {
120
+ pendingFiles.forEach(function (path) {
121
+ console.log(chalk.red(path));
122
+ });
123
+ }
124
+ else {
125
+ console.log('Nothing.');
126
+ }
127
+
128
+ console.log('\nDone.');
129
+ }
130
+
131
+ function eachFile(visit) {
132
+
133
+ const excludePatterns = [];
134
+ const extReg = /\.([a-zA-Z0-9_-]+)$/;
135
+
136
+ prepareExcludePatterns();
137
+ travel('./');
138
+
139
+ function travel(relativePath) {
140
+ if (isExclude(relativePath)) {
141
+ return;
142
+ }
143
+
144
+ const absolutePath = pathTool.join(ecBasePath, relativePath);
145
+ const stat = fs.statSync(absolutePath);
146
+
147
+ if (stat.isFile()) {
148
+ visit(absolutePath, getExt(absolutePath));
149
+ }
150
+ else if (stat.isDirectory()) {
151
+ fs.readdirSync(relativePath).forEach(function (file) {
152
+ travel(pathTool.join(relativePath, file));
153
+ });
154
+ }
155
+ }
156
+
157
+ function prepareExcludePatterns() {
158
+ const content = fs.readFileSync(excludesPath, {encoding: 'utf-8'});
159
+ content.replace(/\r/g, '\n').split('\n').forEach(function (line) {
160
+ line = line.trim();
161
+ if (line && line.charAt(0) !== '#') {
162
+ excludePatterns.push(new RegExp(line));
163
+ }
164
+ });
165
+ }
166
+
167
+ function isExclude(relativePath) {
168
+ for (let i = 0; i < excludePatterns.length; i++) {
169
+ if (excludePatterns[i].test(relativePath)) {
170
+ return true;
171
+ }
172
+ }
173
+ }
174
+
175
+ function getExt(path) {
176
+ if (path) {
177
+ const mathResult = path.match(extReg);
178
+ return mathResult && mathResult[1];
179
+ }
180
+ }
181
+ }
182
+
183
+ run();
echarts-5.5.0-rc.2/build/build-i18n.js ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /*
3
+ * Licensed to the Apache Software Foundation (ASF) under one
4
+ * or more contributor license agreements. See the NOTICE file
5
+ * distributed with this work for additional information
6
+ * regarding copyright ownership. The ASF licenses this file
7
+ * to you under the Apache License, Version 2.0 (the
8
+ * "License"); you may not use this file except in compliance
9
+ * with the License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing,
14
+ * software distributed under the License is distributed on an
15
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ * KIND, either express or implied. See the License for the
17
+ * specific language governing permissions and limitations
18
+ * under the License.
19
+ */
20
+
21
+ const fs = require('fs');
22
+ const preamble = require('./preamble');
23
+ const ts = require('typescript');
24
+ const path = require('path');
25
+ const fsExtra = require('fs-extra');
26
+
27
+ const umdWrapperHead = `
28
+ ${preamble.js}
29
+ /**
30
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
31
+ */
32
+ (function(root, factory) {
33
+ if (typeof define === 'function' && define.amd) {
34
+ // AMD. Register as an anonymous module.
35
+ define(['exports'], factory);
36
+ } else if (
37
+ typeof exports === 'object' &&
38
+ typeof exports.nodeName !== 'string'
39
+ ) {
40
+ // CommonJS
41
+ factory(exports);
42
+ } else {
43
+ // Browser globals
44
+ factory({});
45
+ }
46
+ })(this, function(exports) {
47
+ `;
48
+
49
+ const umdWrapperHeadWithEcharts = `
50
+ ${preamble.js}
51
+ /**
52
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
53
+ */
54
+ (function(root, factory) {
55
+ if (typeof define === 'function' && define.amd) {
56
+ // AMD. Register as an anonymous module.
57
+ define(['exports', 'echarts'], factory);
58
+ } else if (
59
+ typeof exports === 'object' &&
60
+ typeof exports.nodeName !== 'string'
61
+ ) {
62
+ // CommonJS
63
+ factory(exports, require('echarts/lib/echarts'));
64
+ } else {
65
+ // Browser globals
66
+ factory({}, root.echarts);
67
+ }
68
+ })(this, function(exports, echarts) {
69
+ `;
70
+
71
+ const umdWrapperTail = `
72
+ });`;
73
+
74
+ async function buildI18nWrap() {
75
+ const targetDir = path.join(__dirname, '../i18n');
76
+ const sourceDir = path.join(__dirname, '../src/i18n');
77
+ const files = fs.readdirSync(sourceDir);
78
+ files.forEach(t => {
79
+ if(!t.startsWith('lang')) {
80
+ return;
81
+ }
82
+ const fileName = t.replace(/\.ts$/, '');
83
+ const type = fileName.replace(/^lang/, '');
84
+ const echartsRegister = `
85
+ echarts.registerLocale('${type}', localeObj);
86
+ `;
87
+ const pureExports = `
88
+ for (var key in localeObj) {
89
+ if (localeObj.hasOwnProperty(key)) {
90
+ exports[key] = localeObj[key];
91
+ }
92
+ }
93
+ `;
94
+ const code = fs.readFileSync(path.join(sourceDir, t), 'utf-8');
95
+ // const outputText = ts.transpileModule(code, {
96
+ // module: ts.ModuleKind.CommonJS,
97
+ // }).outputText;
98
+ // Simple regexp replace is enough
99
+ const outputCode = code.replace(/export\s+?default/, 'var localeObj =')
100
+ .replace(/\/\*([\w\W]*?)\*\//, '');
101
+
102
+ fsExtra.ensureDirSync(targetDir);
103
+
104
+ fs.writeFileSync(path.join(targetDir, fileName + '.js'), umdWrapperHeadWithEcharts + outputCode + echartsRegister + umdWrapperTail, 'utf-8');
105
+ fs.writeFileSync(path.join(targetDir, fileName + '-obj.js'), umdWrapperHead + outputCode + pureExports + umdWrapperTail, 'utf-8');
106
+ })
107
+ console.log('i18n build completed');
108
+ }
109
+
110
+ buildI18nWrap();
111
+
112
+ module.exports = {
113
+ buildI18n: buildI18nWrap
114
+ };
echarts-5.5.0-rc.2/build/build.js ADDED
@@ -0,0 +1,235 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env node
2
+
3
+ /*
4
+ * Licensed to the Apache Software Foundation (ASF) under one
5
+ * or more contributor license agreements. See the NOTICE file
6
+ * distributed with this work for additional information
7
+ * regarding copyright ownership. The ASF licenses this file
8
+ * to you under the Apache License, Version 2.0 (the
9
+ * "License"); you may not use this file except in compliance
10
+ * with the License. You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing,
15
+ * software distributed under the License is distributed on an
16
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17
+ * KIND, either express or implied. See the License for the
18
+ * specific language governing permissions and limitations
19
+ * under the License.
20
+ */
21
+
22
+ const fs = require('fs');
23
+ const config = require('./config.js');
24
+ const commander = require('commander');
25
+ const chalk = require('chalk');
26
+ const rollup = require('rollup');
27
+ const prePublish = require('./pre-publish');
28
+ const transformDEV = require('./transform-dev');
29
+
30
+ async function run() {
31
+
32
+ /**
33
+ * Tips for `commander`:
34
+ * (1) If arg xxx not specified, `commander.xxx` is undefined.
35
+ * Otherwise:
36
+ * If '-x, --xxx', `commander.xxx` can only be true/false, even if '--xxx yyy' input.
37
+ * If '-x, --xxx <some>', the 'some' string is required, or otherwise error will be thrown.
38
+ * If '-x, --xxx [some]', the 'some' string is optional, that is, `commander.xxx` can be boolean or string.
39
+ * (2) `node ./build/build.js --help` will print helper info and exit.
40
+ */
41
+
42
+ let descIndent = ' ';
43
+ let egIndent = ' ';
44
+
45
+ commander
46
+ .usage('[options]')
47
+ .description([
48
+ 'Build echarts and generate result files in directory `echarts/dist`.',
49
+ '',
50
+ ' For example:',
51
+ '',
52
+ egIndent + 'node build/build.js --prepublish'
53
+ + '\n' + descIndent + '# Only prepublish.',
54
+ egIndent + 'node build/build.js --type ""'
55
+ + '\n' + descIndent + '# Only generate `dist/echarts.js`.',
56
+ egIndent + 'node build/build.js --type common --min'
57
+ + '\n' + descIndent + '# Only generate `dist/echarts.common.min.js`.',
58
+ egIndent + 'node build/build.js --type simple --min'
59
+ + '\n' + descIndent + '# Only generate `dist/echarts-en.simple.min.js`.',
60
+ ].join('\n'))
61
+ .option(
62
+ '--prepublish',
63
+ 'Build all for release'
64
+ )
65
+ .option(
66
+ '--min',
67
+ 'Whether to compress the output file, and remove error-log-print code.'
68
+ )
69
+ .option(
70
+ '--type <type name>', [
71
+ 'Can be "simple" or "common" or "all" (default). Or can be simple,common,all to build multiple. For example,',
72
+ descIndent + '`--type ""` or `--type "common"`.'
73
+ ].join('\n'))
74
+ .option(
75
+ '--format <format>',
76
+ 'The format of output bundle. Can be "umd", "amd", "iife", "cjs", "esm".'
77
+ )
78
+ .parse(process.argv);
79
+
80
+ let isPrePublish = !!commander.prepublish;
81
+ let buildType = commander.type || 'all';
82
+
83
+ let opt = {
84
+ min: commander.min,
85
+ format: commander.format || 'umd'
86
+ };
87
+
88
+ validateIO(opt.input, opt.output);
89
+
90
+ if (isPrePublish) {
91
+ await prePublish();
92
+ }
93
+ else if (buildType === 'extension') {
94
+ const cfgs = [
95
+ config.createBMap(opt),
96
+ config.createDataTool(opt)
97
+ ];
98
+ await build(cfgs);
99
+ }
100
+ else if (buildType === 'ssr') {
101
+ const cfgs = [
102
+ config.createSSRClient(opt)
103
+ ];
104
+ await build(cfgs);
105
+ }
106
+ else if (buildType === 'myTransform') {
107
+ const cfgs = [
108
+ config.createMyTransform(opt)
109
+ ];
110
+ await build(cfgs);
111
+ }
112
+ else {
113
+ const types = buildType.split(',').map(a => a.trim());
114
+
115
+
116
+ // Since 5.5.0, echarts/package.json added `{"type": "module"}`, and added
117
+ // echarts/dist/package.json with `{"type": "commonjs"}`, both of which makes
118
+ // echarts/dist/echarts.esm.js can not be recognized as esm any more (at least
119
+ // in webpack5 and nodejs) any more. So we provides echarts/dist/echarts.esm.mjs.
120
+ // But for backward compat, we still provide provides echarts/dist/echarts.esm.js.
121
+ const isBuildingDistESM = (opt.format || '').toLowerCase() === 'esm';
122
+ if (isBuildingDistESM) {
123
+ await makeConfigAndBuild(opt, '.js');
124
+ await makeConfigAndBuild(opt, '.mjs');
125
+ }
126
+ else {
127
+ await makeConfigAndBuild(opt);
128
+ }
129
+
130
+ async function makeConfigAndBuild(opt, fileExtension) {
131
+ const cfgs = types.map(type =>
132
+ config.createECharts({
133
+ ...opt,
134
+ type,
135
+ fileExtension
136
+ })
137
+ );
138
+ await build(cfgs);
139
+ }
140
+ }
141
+ }
142
+
143
+ function checkBundleCode(cfg) {
144
+ // Make sure process.env.NODE_ENV is eliminated.
145
+ for (let output of cfg.output) {
146
+ let code = fs.readFileSync(output.file, {encoding: 'utf-8'});
147
+ if (!code) {
148
+ throw new Error(`${output.file} is empty`);
149
+ }
150
+ transformDEV.recheckDEV(code);
151
+ console.log(chalk.green.dim('Check code: correct.'));
152
+ }
153
+ }
154
+
155
+ function validateIO(input, output) {
156
+ if ((input != null && output == null)
157
+ || (input == null && output != null)
158
+ ) {
159
+ throw new Error('`input` and `output` must be both set.');
160
+ }
161
+ }
162
+
163
+ /**
164
+ * @param {Array.<Object>} configs A list of rollup configs:
165
+ * See: <https://rollupjs.org/#big-list-of-options>
166
+ * For example:
167
+ * [
168
+ * {
169
+ * ...inputOptions,
170
+ * output: [outputOptions],
171
+ * },
172
+ * ...
173
+ * ]
174
+ */
175
+ async function build(configs) {
176
+ console.log(chalk.yellow(`
177
+ NOTICE: If you are using 'npm run build'. Run 'npm run prepare' before build !!!
178
+ `));
179
+
180
+ console.log(chalk.yellow(`
181
+ NOTICE: If you are using syslink on zrender. Run 'npm run prepare' in zrender first !!
182
+ `));
183
+
184
+ for (let singleConfig of configs) {
185
+ console.log(
186
+ chalk.cyan.dim('\Bundling '),
187
+ chalk.cyan(singleConfig.input)
188
+ );
189
+
190
+ console.time('rollup build');
191
+ const bundle = await rollup.rollup(singleConfig);
192
+
193
+ for (let output of singleConfig.output) {
194
+ console.log(
195
+ chalk.green.dim('Created '),
196
+ chalk.green(output.file),
197
+ chalk.green.dim(' successfully.')
198
+ );
199
+
200
+ await bundle.write(output);
201
+
202
+ };
203
+ console.timeEnd('rollup build');
204
+
205
+ checkBundleCode(singleConfig);
206
+ }
207
+ }
208
+
209
+ async function main() {
210
+ try {
211
+ await run();
212
+ }
213
+ catch (err) {
214
+ console.log(chalk.red('BUILD ERROR!'));
215
+ // rollup parse error.
216
+ if (err) {
217
+ if (err.loc) {
218
+ console.warn(chalk.red(`${err.loc.file} (${err.loc.line}:${err.loc.column})`));
219
+ console.warn(chalk.red(err.message));
220
+ }
221
+ if (err.frame) {
222
+ console.warn(chalk.red(err.frame));
223
+ }
224
+ console.log(chalk.red(err ? err.stack : err));
225
+
226
+ err.id != null && console.warn(chalk.red(`id: ${err.id}`));
227
+ err.hook != null && console.warn(chalk.red(`hook: ${err.hook}`));
228
+ err.code != null && console.warn(chalk.red(`code: ${err.code}`));
229
+ err.plugin != null && console.warn(chalk.red(`plugin: ${err.plugin}`));
230
+ }
231
+ // console.log(err);
232
+ }
233
+ }
234
+
235
+ main();
echarts-5.5.0-rc.2/build/config.js ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ const nodeResolvePlugin = require('@rollup/plugin-node-resolve').default;
21
+ const nodePath = require('path');
22
+ const ecDir = nodePath.resolve(__dirname, '..');
23
+ const {terser} = require('rollup-plugin-terser');
24
+ const replace = require('@rollup/plugin-replace');
25
+ const MagicString = require('magic-string');
26
+ const preamble = require('./preamble');
27
+
28
+ function createAddLicensePlugin(sourcemap) {
29
+ return {
30
+ renderChunk(code, chunk) {
31
+ const s = new MagicString(code);
32
+ s.prepend(preamble.js);
33
+ return {
34
+ code: s.toString(),
35
+ map: sourcemap ? s.generateMap({ hires: true }).toString() : null
36
+ };
37
+ }
38
+ }
39
+ }
40
+
41
+ function createOutputs(basename, { min, fileExtension }, commonOutputOpts) {
42
+ commonOutputOpts = {
43
+ format: 'umd',
44
+ ...commonOutputOpts
45
+ }
46
+ function createReplacePlugin(replacement) {
47
+ const plugin = replace({
48
+ 'process.env.NODE_ENV': JSON.stringify(replacement)
49
+ });
50
+ // Remove transform hook. It will have warning when using in output
51
+ delete plugin.transform;
52
+ return plugin;
53
+ }
54
+ const output = [{
55
+ ...commonOutputOpts,
56
+ // Disable sourcemap in
57
+ sourcemap: true,
58
+ plugins: [
59
+ createReplacePlugin('development'),
60
+ createAddLicensePlugin(true)
61
+ ],
62
+ file: basename + (fileExtension || '.js')
63
+ }];
64
+
65
+ if (min) {
66
+ output.push({
67
+ ...commonOutputOpts,
68
+ // Disable sourcemap in min file.
69
+ sourcemap: false,
70
+ // TODO preamble
71
+ plugins: [
72
+ createReplacePlugin('production'),
73
+ terser(),
74
+ createAddLicensePlugin(false)
75
+ ],
76
+ file: basename + '.min' + (fileExtension || '.js')
77
+ })
78
+ }
79
+ return output;
80
+ }
81
+
82
+ /**
83
+ * @param {Object} [opt]
84
+ * @param {string} [opt.type=''] 'all' or 'simple' or 'common', default is 'all'
85
+ * @param {boolean} [opt.sourcemap] If set, `opt.input` is required too, and `opt.type` is ignored.
86
+ * @param {string} [opt.format='umd'] If set, `opt.input` is required too, and `opt.type` is ignored.
87
+ * @param {string} [opt.min=false] If build minified output
88
+ * @param {boolean} [opt.addBundleVersion=false] Only for debug in watch, prompt that the two build is different.
89
+ * @param {string} [opt.fileExtension=undefined] output file extension, default is '.js'. Should start with '.'.
90
+ */
91
+ exports.createECharts = function (opt = {}) {
92
+ const srcType = opt.type !== 'all' ? '.' + opt.type : '';
93
+ const postfixType = srcType;
94
+ const format = opt.format || 'umd';
95
+ const postfixFormat = (format !== 'umd') ? '.' + format.toLowerCase() : '';
96
+
97
+ const input = nodePath.resolve(ecDir, `index${srcType}.js`);
98
+
99
+ return {
100
+ plugins: [nodeResolvePlugin()],
101
+ treeshake: {
102
+ moduleSideEffects: false
103
+ },
104
+
105
+ input: input,
106
+
107
+ output: createOutputs(
108
+ nodePath.resolve(ecDir, `dist/echarts${postfixFormat}${postfixType}`),
109
+ opt,
110
+ {
111
+ name: 'echarts',
112
+ // Ignore default exports, which is only for compatible code like:
113
+ // import echarts from 'echarts/lib/echarts';
114
+ exports: 'named',
115
+ format: format
116
+ }
117
+ )
118
+ };
119
+ };
120
+
121
+ exports.createBMap = function (opt) {
122
+ const input = nodePath.resolve(ecDir, `extension/bmap/bmap.js`);
123
+
124
+ return {
125
+ plugins: [nodeResolvePlugin()],
126
+ input: input,
127
+ external: ['echarts'],
128
+ output: createOutputs(
129
+ nodePath.resolve(ecDir, `dist/extension/bmap`),
130
+ opt,
131
+ {
132
+ name: 'bmap',
133
+ globals: {
134
+ // For UMD `global.echarts`
135
+ echarts: 'echarts'
136
+ }
137
+ }
138
+ )
139
+ };
140
+ };
141
+
142
+ exports.createDataTool = function (opt) {
143
+ let input = nodePath.resolve(ecDir, `extension/dataTool/index.js`);
144
+
145
+ return {
146
+ plugins: [nodeResolvePlugin()],
147
+ input: input,
148
+ external: ['echarts'],
149
+ output: createOutputs(
150
+ nodePath.resolve(ecDir, `dist/extension/dataTool`),
151
+ opt,
152
+ {
153
+ name: 'dataTool',
154
+ globals: {
155
+ // For UMD `global.echarts`
156
+ echarts: 'echarts'
157
+ }
158
+ }
159
+ )
160
+ };
161
+ };
162
+
163
+ exports.createMyTransform = function (opt) {
164
+ let input = nodePath.resolve(ecDir, `test/lib/myTransform/src/index.ts`);
165
+
166
+ return {
167
+ plugins: [nodeResolvePlugin()],
168
+ input: input,
169
+ output: createOutputs(
170
+ nodePath.resolve(ecDir, `test/lib/myTransform/dist/myTransform`),
171
+ opt,
172
+ {
173
+ name: 'myTransform'
174
+ }
175
+ )
176
+ };
177
+ };
178
+
179
+ exports.createSSRClient = function (opt) {
180
+ const input = nodePath.resolve(ecDir, `ssr/client/lib/index.js`);
181
+
182
+ return {
183
+ plugins: [nodeResolvePlugin()],
184
+ input: input,
185
+ output: createOutputs(
186
+ nodePath.resolve(ecDir, `ssr/client/dist/index`),
187
+ opt,
188
+ {
189
+ name: 'echarts-ssr-client'
190
+ }
191
+ )
192
+ };
193
+ };
echarts-5.5.0-rc.2/build/dev-fast.js ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ /*
3
+ * Licensed to the Apache Software Foundation (ASF) under one
4
+ * or more contributor license agreements. See the NOTICE file
5
+ * distributed with this work for additional information
6
+ * regarding copyright ownership. The ASF licenses this file
7
+ * to you under the Apache License, Version 2.0 (the
8
+ * "License"); you may not use this file except in compliance
9
+ * with the License. You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing,
14
+ * software distributed under the License is distributed on an
15
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
+ * KIND, either express or implied. See the License for the
17
+ * specific language governing permissions and limitations
18
+ * under the License.
19
+ */
20
+
21
+ const path = require('path');
22
+ const {build} = require('esbuild');
23
+ const commander = require('commander');
24
+ const outFilePath = path.resolve(__dirname, '../dist/echarts.js');
25
+
26
+ const umdWrapperHead = `(function (root, factory) {
27
+ if (typeof define === 'function' && define.amd) {
28
+ // AMD. Register as an anonymous module.
29
+ define(['exports'], factory);
30
+ } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
31
+ // CommonJS
32
+ factory(exports);
33
+ } else {
34
+ // Browser globals
35
+ factory((root.echarts = {}));
36
+ }
37
+ }(typeof self !== 'undefined' ? self : this, function (exports, b) {
38
+ `;
39
+
40
+ const umdWrapperTail = `
41
+ }));`;
42
+
43
+ build({
44
+ entryPoints: [path.resolve(__dirname, '../src/echarts.all.ts')],
45
+ outfile: outFilePath,
46
+ format: 'cjs',
47
+ sourcemap: true,
48
+ bundle: true,
49
+ banner: umdWrapperHead,
50
+ footer: umdWrapperTail,
51
+ define: {
52
+ 'process.env.NODE_ENV': '"development"',
53
+ '__DEV__': 'true'
54
+ },
55
+ watch: {
56
+ async onRebuild(error) {
57
+ if (error) {
58
+ console.error('watch build failed:', error)
59
+ }
60
+ else {
61
+ console.log('Bundled with esbuild')
62
+ }
63
+ },
64
+ },
65
+ }).then(async () => {
66
+ console.log('Bundled with esbuild')
67
+ }).catch(e => console.error(e.toString()))
echarts-5.5.0-rc.2/build/nightly/post.js ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ const fs = require('fs');
21
+
22
+ const root = __dirname + '/../../';
23
+ const echartsPkg = JSON.parse(fs.readFileSync(root + 'package.json'), 'utf-8');
24
+ const zrenderPkg = JSON.parse(fs.readFileSync(root + 'node_modules/zrender/package.json', 'utf-8'));
25
+
26
+ const echartsCorePath = root + 'src/core/echarts.ts';
27
+ const echartsCoreFile = fs.readFileSync(echartsCorePath, 'utf-8')
28
+ .replace(/export const version = '\S+'/, `export const version = '${echartsPkg.version}'`)
29
+ .replace(/(export const dependencies = {\s+zrender: ')\S+('\s+})/, `$1${zrenderPkg.version}$2`);
30
+ fs.writeFileSync(echartsCorePath, echartsCoreFile, 'utf-8');
echarts-5.5.0-rc.2/build/nightly/prepare.js ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+
21
+ const fs = require('fs');
22
+ const packageJsonPath = __dirname + '/../../package.json';
23
+ const nightlyPackageName = 'echarts-nightly';
24
+
25
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
26
+
27
+ function updateVersion(version) {
28
+ const isNext = process.argv.includes('--next');
29
+ const parts = /(\d+)\.(\d+)\.(\d+)($|\-)/.exec(version);
30
+ if (!parts) {
31
+ throw new Error(`Invalid version number ${version}`);
32
+ }
33
+ // Add date to version.
34
+ const major = +parts[1];
35
+ let minor = +parts[2];
36
+ let patch = +parts[3];
37
+ const isStable = !parts[4];
38
+ if (isStable) {
39
+ // It's previous stable version. Dev version should be higher.
40
+ if (isNext) {
41
+ // Increase minor version for next branch.
42
+ minor++;
43
+ patch = 0;
44
+ }
45
+ else {
46
+ // Increase main version for master branch.
47
+ patch++;
48
+ }
49
+ }
50
+
51
+ const date = new Date().toISOString().replace(/:|T|\.|-/g, '').slice(0, 8);
52
+ return `${major}.${minor}.${patch}-dev.${date}`;
53
+ }
54
+
55
+ packageJson.name = nightlyPackageName;
56
+ packageJson.version = updateVersion(packageJson.version);
57
+
58
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');
59
+
60
+ const readmePath = __dirname + '/../../README.md';
61
+ const readmeAttention = `<h3>
62
+ <p><em>⚠️ ATTENTION PLEASE</em></p>
63
+ <p><em>This is nightly build of Apache ECharts. Please DON't use it in your production environment.</em></p>
64
+ </h3>`;
65
+ const readmeContent = fs.readFileSync(readmePath, 'utf-8');
66
+ if (!readmeContent.includes(readmeAttention)) {
67
+ fs.writeFileSync(readmePath, `
68
+ ${readmeAttention}
69
+
70
+ ${readmeContent}
71
+ `, 'utf-8');
72
+ }
echarts-5.5.0-rc.2/build/package.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ {
2
+ "type": "commonjs"
3
+ }
echarts-5.5.0-rc.2/build/pre-publish.js ADDED
@@ -0,0 +1,461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ /**
21
+ * [Create CommonJS files]:
22
+ * Compatible with previous folder structure: `echarts/lib` exists in `node_modules`
23
+ * (1) Build all files to CommonJS to `echarts/lib`.
24
+ * (2) Remove __DEV__.
25
+ * (3) Mount `echarts/src/export.js` to `echarts/lib/echarts.js`.
26
+ *
27
+ * [Create ESModule files]:
28
+ * Build all files to CommonJS to `echarts/esm`.
29
+ */
30
+
31
+ const nodePath = require('path');
32
+ const assert = require('assert');
33
+ const fs = require('fs');
34
+ const fsExtra = require('fs-extra');
35
+ const chalk = require('chalk');
36
+ const ts = require('typescript');
37
+ const globby = require('globby');
38
+ const transformDEVUtil = require('./transform-dev');
39
+ const preamble = require('./preamble');
40
+ const dts = require('@lang/rollup-plugin-dts').default;
41
+ const rollup = require('rollup');
42
+ const { transformImport } = require('zrender/build/transformImport.js');
43
+
44
+ const ecDir = nodePath.resolve(__dirname, '..');
45
+ const tmpDir = nodePath.resolve(ecDir, 'pre-publish-tmp');
46
+
47
+ const tsConfig = readTSConfig();
48
+
49
+ const autoGeneratedFileAlert = `
50
+ /**
51
+ * AUTO-GENERATED FILE. DO NOT MODIFY.
52
+ */
53
+
54
+ `;
55
+
56
+ const mainSrcGlobby = {
57
+ patterns: [
58
+ 'src/**/*.ts'
59
+ ],
60
+ cwd: ecDir
61
+ };
62
+ const extensionSrcGlobby = {
63
+ patterns: [
64
+ 'extension-src/**/*.ts'
65
+ ],
66
+ cwd: ecDir
67
+ };
68
+ const extensionSrcDir = nodePath.resolve(ecDir, 'extension-src');
69
+ const extensionESMDir = nodePath.resolve(ecDir, 'extension');
70
+ const ssrClientGlobby = {
71
+ patterns: [
72
+ 'ssr/client/src/**/*.ts'
73
+ ],
74
+ cwd: ecDir
75
+ };
76
+ const ssrClientSrcDir = nodePath.resolve(ecDir, 'ssr/client/src');
77
+ const ssrClientESMDir = nodePath.resolve(ecDir, 'ssr/client/lib');
78
+ const ssrClientTypeDir = nodePath.resolve(ecDir, 'ssr/client/types');
79
+
80
+ const typesDir = nodePath.resolve(ecDir, 'types');
81
+ const esmDir = 'lib';
82
+
83
+
84
+ const compileWorkList = [
85
+ {
86
+ logLabel: 'main ts -> js-esm',
87
+ compilerOptionsOverride: {
88
+ module: 'ES2015',
89
+ rootDir: ecDir,
90
+ outDir: tmpDir,
91
+ // Generate types when building esm
92
+ declaration: true,
93
+ declarationDir: typesDir
94
+ },
95
+ srcGlobby: mainSrcGlobby,
96
+ transformOptions: {
97
+ filesGlobby: {patterns: ['**/*.js'], cwd: tmpDir},
98
+ preamble: preamble.js,
99
+ transformDEV: true
100
+ },
101
+ before: async function () {
102
+ fsExtra.removeSync(tmpDir);
103
+ fsExtra.removeSync(nodePath.resolve(ecDir, 'types'));
104
+ fsExtra.removeSync(nodePath.resolve(ecDir, esmDir));
105
+ fsExtra.removeSync(nodePath.resolve(ecDir, 'index.js'));
106
+ fsExtra.removeSync(nodePath.resolve(ecDir, 'index.blank.js'));
107
+ fsExtra.removeSync(nodePath.resolve(ecDir, 'index.common.js'));
108
+ fsExtra.removeSync(nodePath.resolve(ecDir, 'index.simple.js'));
109
+ },
110
+ after: async function () {
111
+ fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.all.js'), nodePath.resolve(ecDir, 'index.js'));
112
+ fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.blank.js'), nodePath.resolve(ecDir, 'index.blank.js'));
113
+ fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.common.js'), nodePath.resolve(ecDir, 'index.common.js'));
114
+ fs.renameSync(nodePath.resolve(tmpDir, 'src/echarts.simple.js'), nodePath.resolve(ecDir, 'index.simple.js'));
115
+ fs.renameSync(nodePath.resolve(tmpDir, 'src'), nodePath.resolve(ecDir, esmDir));
116
+
117
+ transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.js'), esmDir);
118
+ transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.blank.js'), esmDir);
119
+ transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.common.js'), esmDir);
120
+ transformRootFolderInEntry(nodePath.resolve(ecDir, 'index.simple.js'), esmDir);
121
+
122
+ await transformLibFiles(nodePath.resolve(ecDir, esmDir), esmDir);
123
+ await transformLibFiles(nodePath.resolve(ecDir, 'types'), esmDir);
124
+ fsExtra.removeSync(tmpDir);
125
+ }
126
+ },
127
+ {
128
+ logLabel: 'extension ts -> js-esm',
129
+ compilerOptionsOverride: {
130
+ module: 'ES2015',
131
+ declaration: false,
132
+ rootDir: extensionSrcDir,
133
+ outDir: extensionESMDir
134
+ },
135
+ srcGlobby: extensionSrcGlobby,
136
+ transformOptions: {
137
+ filesGlobby: {patterns: ['**/*.js'], cwd: extensionESMDir},
138
+ preamble: preamble.js,
139
+ transformDEV: true
140
+ },
141
+ before: async function () {
142
+ fsExtra.removeSync(extensionESMDir);
143
+ },
144
+ after: async function () {
145
+ await transformLibFiles(extensionESMDir, 'lib');
146
+ }
147
+ },
148
+ {
149
+ logLabel: 'ssr client ts -> js-esm',
150
+ compilerOptionsOverride: {
151
+ module: 'ES2015',
152
+ declaration: true,
153
+ rootDir: ssrClientSrcDir,
154
+ outDir: ssrClientESMDir,
155
+ declarationDir: ssrClientTypeDir
156
+ },
157
+ srcGlobby: ssrClientGlobby,
158
+ transformOptions: {
159
+ filesGlobby: {patterns: ['**/*.js'], cwd: ssrClientESMDir},
160
+ transformDEV: true
161
+ },
162
+ before: async function () {
163
+ fsExtra.removeSync(ssrClientESMDir);
164
+ },
165
+ after: async function () {
166
+ await transformLibFiles(ssrClientESMDir, 'lib');
167
+ }
168
+ }
169
+ ];
170
+
171
+
172
+
173
+ /**
174
+ * @public
175
+ */
176
+ module.exports = async function () {
177
+
178
+ for (let {
179
+ logLabel, compilerOptionsOverride, srcGlobby,
180
+ transformOptions, before, after
181
+ } of compileWorkList) {
182
+
183
+ process.stdout.write(chalk.green.dim(`[${logLabel}]: compiling ...`));
184
+
185
+ before && await before();
186
+
187
+ let srcPathList = await readFilePaths(srcGlobby);
188
+
189
+ await tsCompile(compilerOptionsOverride, srcPathList);
190
+
191
+ process.stdout.write(chalk.green.dim(` done \n`));
192
+
193
+ process.stdout.write(chalk.green.dim(`[${logLabel}]: transforming ...`));
194
+
195
+ await transformCode(transformOptions);
196
+
197
+ after && await after();
198
+
199
+ process.stdout.write(chalk.green.dim(` done \n`));
200
+ }
201
+
202
+ process.stdout.write(chalk.green.dim(`Generating entries ...`));
203
+ generateEntries();
204
+ process.stdout.write(chalk.green.dim(`Bundling DTS ...`));
205
+ await bundleDTS();
206
+
207
+ console.log(chalk.green.dim('All done.'));
208
+ };
209
+
210
+ async function runTsCompile(localTs, compilerOptions, srcPathList) {
211
+ // Must do it, because the value in tsconfig.json might be different from the inner representation.
212
+ // For example: moduleResolution: "NODE" => moduleResolution: 2
213
+ const {options, errors} = localTs.convertCompilerOptionsFromJson(compilerOptions, ecDir);
214
+
215
+ if (errors.length) {
216
+ let errMsg = 'tsconfig parse failed: '
217
+ + errors.map(error => error.messageText).join('. ')
218
+ + '\n compilerOptions: \n' + JSON.stringify(compilerOptions, null, 4);
219
+ assert(false, errMsg);
220
+ }
221
+
222
+ // See: https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API
223
+
224
+ let program = localTs.createProgram(srcPathList, options);
225
+ let emitResult = program.emit();
226
+
227
+ let allDiagnostics = localTs
228
+ .getPreEmitDiagnostics(program)
229
+ .concat(emitResult.diagnostics);
230
+
231
+ allDiagnostics.forEach(diagnostic => {
232
+ if (diagnostic.file) {
233
+ let {line, character} = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
234
+ let message = localTs.flattenDiagnosticMessageText(diagnostic.messageText, '\n');
235
+ console.log(chalk.red(`${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`));
236
+ }
237
+ else {
238
+ console.log(chalk.red(localTs.flattenDiagnosticMessageText(diagnostic.messageText, '\n')));
239
+ }
240
+ });
241
+ if (allDiagnostics.length > 0) {
242
+ throw new Error('TypeScript Compile Failed')
243
+ }
244
+ }
245
+ module.exports.runTsCompile = runTsCompile;
246
+
247
+ async function tsCompile(compilerOptionsOverride, srcPathList) {
248
+ assert(
249
+ compilerOptionsOverride
250
+ && compilerOptionsOverride.module
251
+ && compilerOptionsOverride.rootDir
252
+ && compilerOptionsOverride.outDir
253
+ );
254
+
255
+ let compilerOptions = {
256
+ ...tsConfig.compilerOptions,
257
+ ...compilerOptionsOverride,
258
+ sourceMap: false
259
+ };
260
+
261
+ runTsCompile(ts, compilerOptions, srcPathList);
262
+ }
263
+
264
+ /**
265
+ * Transform import/require path in the entry file to `esm` or `lib`.
266
+ */
267
+ function transformRootFolderInEntry(entryFile, replacement) {
268
+ let code = fs.readFileSync(entryFile, 'utf-8');
269
+ // Simple regex replacement
270
+ // TODO More robust way?
271
+ assert(
272
+ !/(import\s+|from\s+|require\(\s*)["']\.\/echarts\./.test(code)
273
+ && !/(import\s+|from\s+|require\(\s*)["']echarts\./.test(code),
274
+ 'Import echarts.xxx.ts is not supported.'
275
+ );
276
+ code = code.replace(/((import\s+|from\s+|require\(\s*)["'])\.\//g, `$1./${replacement}/`);
277
+ fs.writeFileSync(
278
+ entryFile,
279
+ // Also transform zrender.
280
+ singleTransformImport(code, replacement),
281
+ 'utf-8'
282
+ );
283
+ }
284
+
285
+ /**
286
+ * Transform `zrender/src` to `zrender/lib` in all files
287
+ */
288
+ async function transformLibFiles(rooltFolder, replacement) {
289
+ const files = await readFilePaths({
290
+ patterns: ['**/*.js', '**/*.d.ts'],
291
+ cwd: rooltFolder
292
+ });
293
+ // Simple regex replacement
294
+ // TODO More robust way?
295
+ for (let fileName of files) {
296
+ let code = fs.readFileSync(fileName, 'utf-8');
297
+ code = singleTransformImport(code, replacement);
298
+ // For lower ts version, not use import type
299
+ // TODO Use https://github.com/sandersn/downlevel-dts ?
300
+ // if (fileName.endsWith('.d.ts')) {
301
+ // code = singleTransformImportType(code);
302
+ // }
303
+ fs.writeFileSync(fileName, code, 'utf-8');
304
+ }
305
+ }
306
+
307
+ /**
308
+ * 1. Transform zrender/src to zrender/lib
309
+ * 2. Add .js extensions
310
+ */
311
+ function singleTransformImport(code, replacement) {
312
+ return transformImport(
313
+ code.replace(/([\"\'])zrender\/src\//g, `$1zrender/${replacement}/`),
314
+ (moduleName) => {
315
+ // Ignore 'tslib' and 'echarts' in the extensions.
316
+ if (moduleName === 'tslib' || moduleName === 'echarts') {
317
+ return moduleName;
318
+ }
319
+ else if (moduleName === 'zrender/lib/export') {
320
+ throw new Error('Should not import the whole zrender library.');
321
+ }
322
+ else if (moduleName.endsWith('.ts')) {
323
+ // Replace ts with js
324
+ return moduleName.replace(/\.ts$/, '.js');
325
+ }
326
+ else if (moduleName.endsWith('.js')) {
327
+ return moduleName;
328
+ }
329
+ else {
330
+ return moduleName + '.js'
331
+ }
332
+ }
333
+ );
334
+ }
335
+
336
+ // function singleTransformImportType(code) {
337
+ // return code.replace(/import\s+type\s+/g, 'import ');
338
+ // }
339
+
340
+ /**
341
+ * @param {Object} transformOptions
342
+ * @param {Object} transformOptions.filesGlobby {patterns: string[], cwd: string}
343
+ * @param {string} [transformOptions.preamble] See './preamble.js'
344
+ * @param {boolean} [transformOptions.transformDEV]
345
+ */
346
+ async function transformCode({filesGlobby, preamble, transformDEV}) {
347
+
348
+ let filePaths = await readFilePaths(filesGlobby);
349
+
350
+ filePaths.map(filePath => {
351
+ let code = fs.readFileSync(filePath, 'utf8');
352
+
353
+ if (transformDEV) {
354
+ let result = transformDEVUtil.transform(code, false);
355
+ code = result.code;
356
+ }
357
+
358
+ code = autoGeneratedFileAlert + code;
359
+
360
+ if (preamble) {
361
+ code = preamble + code;
362
+ }
363
+
364
+ fs.writeFileSync(filePath, code, 'utf8');
365
+ });
366
+ }
367
+
368
+ async function readFilePaths({patterns, cwd}) {
369
+ assert(patterns && cwd);
370
+ return (
371
+ await globby(patterns, {cwd})
372
+ ).map(
373
+ srcPath => nodePath.resolve(cwd, srcPath)
374
+ );
375
+ }
376
+
377
+ // Bundle can be used in echarts-examples.
378
+ async function bundleDTS() {
379
+
380
+ const outDir = nodePath.resolve(__dirname, '../types/dist');
381
+ const commonConfig = {
382
+ onwarn(warning, rollupWarn) {
383
+ // Not warn circular dependency
384
+ if (warning.code !== 'CIRCULAR_DEPENDENCY') {
385
+ rollupWarn(warning);
386
+ }
387
+ },
388
+ plugins: [
389
+ dts({
390
+ respectExternal: true
391
+ })
392
+ // {
393
+ // generateBundle(options, bundle) {
394
+ // for (let chunk of Object.values(bundle)) {
395
+ // chunk.code = `
396
+ // type Omit<T, K> = Pick<T, Exclude<keyof T, K>>;
397
+ // ${chunk.code}`
398
+ // }
399
+ // }
400
+ // }
401
+ ]
402
+ };
403
+
404
+ // Bundle chunks.
405
+ const parts = [
406
+ 'core', 'charts', 'components', 'renderers', 'option', 'features'
407
+ ];
408
+ const inputs = {};
409
+ parts.forEach(partName => {
410
+ inputs[partName] = nodePath.resolve(__dirname, `../types/src/export/${partName}.d.ts`)
411
+ });
412
+
413
+ const bundle = await rollup.rollup({
414
+ input: inputs,
415
+ ...commonConfig
416
+ });
417
+ let idx = 1;
418
+ await bundle.write({
419
+ dir: outDir,
420
+ minifyInternalExports: false,
421
+ manualChunks: (id) => {
422
+ // Only create one chunk.
423
+ return 'shared';
424
+ },
425
+ chunkFileNames: 'shared.d.ts'
426
+ });
427
+
428
+ // Bundle all in one
429
+ const bundleAllInOne = await rollup.rollup({
430
+ input: nodePath.resolve(__dirname, `../types/src/export/all.d.ts`),
431
+ ...commonConfig
432
+ });
433
+ await bundleAllInOne.write({
434
+ file: nodePath.resolve(outDir, 'echarts.d.ts')
435
+ });
436
+ }
437
+
438
+ function readTSConfig() {
439
+ // tsconfig.json may have comment string, which is invalid if
440
+ // using `require('tsconfig.json'). So we use a loose parser.
441
+ let filePath = nodePath.resolve(ecDir, 'tsconfig.json');
442
+ const tsConfigText = fs.readFileSync(filePath, {encoding: 'utf8'});
443
+ return (new Function(`return ( ${tsConfigText} )`))();
444
+ }
445
+
446
+
447
+ function generateEntries() {
448
+ ['charts', 'components', 'renderers', 'core', 'features', 'ssr/client/index'].forEach(entryPath => {
449
+ if (entryPath !== 'option') {
450
+ const jsCode = fs.readFileSync(nodePath.join(__dirname, `template/${entryPath}.js`), 'utf-8');
451
+ fs.writeFileSync(nodePath.join(__dirname, `../${entryPath}.js`), jsCode, 'utf-8');
452
+ }
453
+
454
+ // Make the d.ts in the same dir as .js, so that the can be found by tsc.
455
+ // package.json "types" in "exports" does not always seam to work.
456
+ const dtsCode = fs.readFileSync(nodePath.join(__dirname, `/template/${entryPath}.d.ts`), 'utf-8');
457
+ fs.writeFileSync(nodePath.join(__dirname, `../${entryPath}.d.ts`), dtsCode, 'utf-8');
458
+ });
459
+ }
460
+
461
+ module.exports.readTSConfig = readTSConfig;
echarts-5.5.0-rc.2/build/preamble.js ADDED
@@ -0,0 +1,231 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ const cStyleComment = `
21
+ /*
22
+ * Licensed to the Apache Software Foundation (ASF) under one
23
+ * or more contributor license agreements. See the NOTICE file
24
+ * distributed with this work for additional information
25
+ * regarding copyright ownership. The ASF licenses this file
26
+ * to you under the Apache License, Version 2.0 (the
27
+ * "License"); you may not use this file except in compliance
28
+ * with the License. You may obtain a copy of the License at
29
+ *
30
+ * http://www.apache.org/licenses/LICENSE-2.0
31
+ *
32
+ * Unless required by applicable law or agreed to in writing,
33
+ * software distributed under the License is distributed on an
34
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
35
+ * KIND, either express or implied. See the License for the
36
+ * specific language governing permissions and limitations
37
+ * under the License.
38
+ */
39
+
40
+ `;
41
+
42
+ const hashComment = `
43
+ # Licensed to the Apache Software Foundation (ASF) under one
44
+ # or more contributor license agreements. See the NOTICE file
45
+ # distributed with this work for additional information
46
+ # regarding copyright ownership. The ASF licenses this file
47
+ # to you under the Apache License, Version 2.0 (the
48
+ # "License"); you may not use this file except in compliance
49
+ # with the License. You may obtain a copy of the License at
50
+ #
51
+ # http://www.apache.org/licenses/LICENSE-2.0
52
+ #
53
+ # Unless required by applicable law or agreed to in writing,
54
+ # software distributed under the License is distributed on an
55
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
56
+ # KIND, either express or implied. See the License for the
57
+ # specific language governing permissions and limitations
58
+ # under the License.
59
+
60
+ `;
61
+
62
+ const mlComment = `
63
+ <!--
64
+ Licensed to the Apache Software Foundation (ASF) under one
65
+ or more contributor license agreements. See the NOTICE file
66
+ distributed with this work for additional information
67
+ regarding copyright ownership. The ASF licenses this file
68
+ to you under the Apache License, Version 2.0 (the
69
+ "License"); you may not use this file except in compliance
70
+ with the License. You may obtain a copy of the License at
71
+
72
+ http://www.apache.org/licenses/LICENSE-2.0
73
+
74
+ Unless required by applicable law or agreed to in writing,
75
+ software distributed under the License is distributed on an
76
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
77
+ KIND, either express or implied. See the License for the
78
+ specific language governing permissions and limitations
79
+ under the License.
80
+ -->
81
+
82
+ `;
83
+
84
+ function hasPreamble(fileExt) {
85
+ return fileExt && preambleMap[fileExt];
86
+ }
87
+
88
+ function addPreamble(fileStr, fileExt) {
89
+ if (fileStr && fileExt) {
90
+ const addFn = addFns[fileExt];
91
+ const headStr = preambleMap[fileExt];
92
+ return addFn && headStr && addFn(headStr, fileStr);
93
+ }
94
+ }
95
+
96
+ const addFns = {
97
+
98
+ ts: function (headStr, fileStr) {
99
+ return headStr + fileStr;
100
+ },
101
+
102
+ js: function (headStr, fileStr) {
103
+ return headStr + fileStr;
104
+ },
105
+
106
+ css: function (headStr, fileStr) {
107
+ return headStr + fileStr;
108
+ },
109
+
110
+ java: function (headStr, fileStr) {
111
+ return headStr + fileStr;
112
+ },
113
+
114
+ yml: addShellLikeHeader,
115
+
116
+ yaml: addShellLikeHeader,
117
+
118
+ sh: addShellLikeHeader,
119
+
120
+ html: function (headStr, fileStr) {
121
+ // Git diff enables manual check.
122
+ let resultStr = fileStr.replace(/^\s*<!DOCTYPE\s[^<>]+>/i, '$&' + headStr);
123
+ // If no doctype
124
+ if (resultStr.length === fileStr.length) {
125
+ resultStr = headStr + fileStr;
126
+ }
127
+ return resultStr;
128
+ },
129
+
130
+ xml: xmlAddFn,
131
+
132
+ xsl: xmlAddFn
133
+ };
134
+
135
+ function addShellLikeHeader(headStr, fileStr) {
136
+ // Git diff enables manual check.
137
+ if (/^#\!/.test(fileStr)) {
138
+ const lines = fileStr.split('\n');
139
+ lines.splice(1, 0, headStr);
140
+ return lines.join('\n');
141
+ }
142
+ else {
143
+ return headStr + fileStr;
144
+ }
145
+ }
146
+
147
+ function xmlAddFn(headStr, fileStr) {
148
+ // Git diff enables manual check.
149
+ let resultStr = fileStr.replace(/^\s*<\?xml\s[^<>]+\?>/i, '$&' + headStr);
150
+ // If no <?xml version='1.0' ?>
151
+ if (resultStr.length === fileStr.length) {
152
+ resultStr = headStr + fileStr;
153
+ }
154
+ return resultStr;
155
+ }
156
+
157
+ const preambleMap = {
158
+ ts: cStyleComment,
159
+ js: cStyleComment,
160
+ css: cStyleComment,
161
+ java: cStyleComment,
162
+ yml: hashComment,
163
+ yaml: hashComment,
164
+ sh: hashComment,
165
+ html: mlComment,
166
+ xml: mlComment,
167
+ xsl: mlComment
168
+ };
169
+
170
+ const licenseReg = [
171
+ {name: 'Apache', reg: /apache (license|commons)/i},
172
+ {name: 'BSD', reg: /BSD/},
173
+ {name: 'LGPL', reg: /LGPL/},
174
+ {name: 'GPL', reg: /GPL/},
175
+ {name: 'Mozilla', reg: /mozilla public/i},
176
+ {name: 'MIT', reg: /mit license/i},
177
+ {name: 'BSD-d3', reg: /Copyright\s+\(c\)\s+2010-2015,\s+Michael\s+Bostock/i}
178
+ ];
179
+
180
+ function extractLicense(fileStr, fileExt) {
181
+ let commentText = extractComment(fileStr.trim(), fileExt);
182
+ if (!commentText) {
183
+ return;
184
+ }
185
+ for (let i = 0; i < licenseReg.length; i++) {
186
+ if (licenseReg[i].reg.test(commentText)) {
187
+ return licenseReg[i].name;
188
+ }
189
+ }
190
+ }
191
+
192
+ const cStyleCommentReg = /\/\*[\S\s]*?\*\//;
193
+ const hashCommentReg = /^\s*#.*$/gm;
194
+ const mlCommentReg = /<\!\-\-[\S\s]*?\-\->/;
195
+ const commentReg = {
196
+ ts: cStyleCommentReg,
197
+ js: cStyleCommentReg,
198
+ css: cStyleCommentReg,
199
+ java: cStyleCommentReg,
200
+ yml: hashCommentReg,
201
+ yaml: hashCommentReg,
202
+ sh: hashCommentReg,
203
+ html: mlCommentReg,
204
+ xml: mlCommentReg,
205
+ xsl: mlCommentReg
206
+ };
207
+
208
+ function extractComment(str, fileExt) {
209
+ const reg = commentReg[fileExt];
210
+
211
+ if (!fileExt || !reg || !str) {
212
+ return;
213
+ }
214
+
215
+ reg.lastIndex = 0;
216
+
217
+ if (fileExt === 'sh' || fileExt === 'yml' || fileExt === 'yaml') {
218
+ let result = str.match(reg);
219
+ return result && result.join('\n');
220
+ }
221
+ else {
222
+ let result = reg.exec(str);
223
+ return result && result[0];
224
+ }
225
+ }
226
+
227
+ module.exports = Object.assign({
228
+ extractLicense,
229
+ hasPreamble,
230
+ addPreamble
231
+ }, preambleMap);
echarts-5.5.0-rc.2/build/source-release/prepareReleaseMaterials.js ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+
21
+ // Prepare release materials like mail, release note
22
+
23
+ const commander = require('commander');
24
+ const fse = require('fs-extra');
25
+ const pathTool = require('path');
26
+ const https = require('https');
27
+
28
+ commander
29
+ .usage('[options]')
30
+ .description([
31
+ 'Generate source release'
32
+ ].join('\n'))
33
+ .option(
34
+ '--rcversion <version>',
35
+ 'Release version'
36
+ )
37
+ .option(
38
+ '--commit <commit>',
39
+ 'Hash of commit'
40
+ )
41
+ .option(
42
+ '--repo <repo>',
43
+ 'Repo'
44
+ )
45
+ .option(
46
+ '--out <out>',
47
+ 'Out directory. Default to be tmp/release-mail'
48
+ )
49
+ .parse(process.argv);
50
+
51
+ const outDir = pathTool.resolve(process.cwd(), commander.out || 'tmp/release-materials');
52
+ const releaseCommit = commander.commit;
53
+ if (!releaseCommit) {
54
+ throw new Error('Release commit is required');
55
+ }
56
+ const repo = commander.repo || 'apache/echarts';
57
+
58
+ let rcVersion = commander.rcversion + '';
59
+ if (rcVersion.startsWith('v')) { // tag may have v prefix, v5.1.0
60
+ rcVersion = rcVersion.substr(1);
61
+ }
62
+ if (rcVersion.indexOf('-rc.') < 0) {
63
+ throw new Error('Only rc version is accepeted.');
64
+ }
65
+
66
+ const parts = /(\d+)\.(\d+)\.(\d+)\-rc\.(\d+)/.exec(rcVersion);
67
+ if (!parts) {
68
+ throw new Error(`Invalid version number ${rcVersion}`);
69
+ }
70
+
71
+ const major = +parts[1];
72
+ const minor = +parts[2];
73
+ const patch = +parts[3];
74
+ const rc = +parts[4];
75
+
76
+ const stableVersion = `${major}.${minor}.${patch}`;
77
+ const releaseFullName = `Apache ECharts ${stableVersion} (release candidate ${rc})`;
78
+
79
+ console.log('[Release Repo] ' + repo);
80
+ console.log('[Release Verion] ' + rcVersion);
81
+ console.log('[Release Commit] ' + releaseCommit);
82
+ console.log('[Release Name] ' + releaseFullName);
83
+
84
+ const voteTpl = fse.readFileSync(pathTool.join(__dirname, './template/vote-release.tpl'), 'utf-8');
85
+ const voteResultTpl = fse.readFileSync(pathTool.join(__dirname, './template/vote-result.tpl'), 'utf-8');
86
+ const announceTpl = fse.readFileSync(pathTool.join(__dirname, './template/announce-release.tpl'), 'utf-8');
87
+ const voteUntil = new Date(+new Date() + (72 + 12) * 3600 * 1000); // 3.5 day.
88
+
89
+ fse.ensureDirSync(outDir);
90
+ fse.writeFileSync(
91
+ pathTool.resolve(outDir, 'vote.txt'),
92
+ voteTpl.replace(/{{ECHARTS_RELEASE_VERSION}}/g, rcVersion)
93
+ .replace(/{{ECHARTS_RELEASE_VERSION_FULL_NAME}}/g, releaseFullName)
94
+ .replace(/{{ECHARTS_RELEASE_COMMIT}}/g, releaseCommit)
95
+ .replace(/{{VOTE_UNTIL}}/g, voteUntil.toISOString()),
96
+ 'utf-8'
97
+ );
98
+
99
+ fse.ensureDirSync(outDir);
100
+ fse.writeFileSync(
101
+ pathTool.resolve(outDir, 'vote-result.txt'),
102
+ voteResultTpl.replace(/{{ECHARTS_RELEASE_VERSION}}/g, rcVersion)
103
+ .replace(/{{ECHARTS_RELEASE_VERSION_FULL_NAME}}/g, releaseFullName),
104
+ 'utf-8'
105
+ );
106
+
107
+ fse.writeFileSync(
108
+ pathTool.resolve(outDir, 'announce.txt'),
109
+ announceTpl.replace(/{{ECHARTS_RELEASE_VERSION}}/g, stableVersion)
110
+ .replace(/{{ECHARTS_RELEASE_COMMIT}}/g, releaseCommit),
111
+ 'utf-8'
112
+ );
113
+
114
+
115
+ // Fetch RELEASE_NOTE
116
+ https.get({
117
+ hostname: 'api.github.com',
118
+ path: `/repos/${repo}/releases`,
119
+ headers: {
120
+ 'User-Agent': 'NodeJS'
121
+ }
122
+ }, function (res) {
123
+ console.log(`https://api.github.com/repos/${repo}/releases`);
124
+ if (res.statusCode !== 200) {
125
+ console.error(`Failed to fetch releases ${res.statusCode}`);
126
+ res.resume();
127
+ return;
128
+ }
129
+
130
+ res.setEncoding('utf8');
131
+ let rawData = '';
132
+ res.on('data', (chunk) => {
133
+ rawData += chunk;
134
+ });
135
+ res.on('end', () => {
136
+ let releaseNote = '';
137
+
138
+ const releases = JSON.parse(rawData);
139
+ const found = releases.find(release => release.name === rcVersion);
140
+ if (!found) {
141
+ throw 'Can\'t found release';
142
+ }
143
+ else {
144
+ releaseNote = found.body.trim();
145
+ if (!releaseNote) {
146
+ throw 'Release description is empty';
147
+ }
148
+ }
149
+
150
+ const firstLine = releaseNote.split('\n')[0];
151
+ if (firstLine.indexOf(stableVersion) < 0) {
152
+ // Add version if release note is not start with version.
153
+ }
154
+ releaseNote = `## ${stableVersion}\n\n${releaseNote}`;
155
+
156
+ fse.writeFileSync(
157
+ pathTool.resolve(outDir, 'RELEASE_NOTE.txt'),
158
+ releaseNote,
159
+ 'utf-8'
160
+ );
161
+ });
162
+ }).on('error', (e) => {
163
+ throw e;
164
+ });
echarts-5.5.0-rc.2/build/source-release/template/announce-release.tpl ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ --- Mail to: ---
2
+ dev@echarts.apache.org
3
+ ------------------------------------------------------------------------------
4
+
5
+ --- Subject: ---
6
+ [ANNOUNCE] Release Apache ECharts {{ECHARTS_RELEASE_VERSION}}
7
+ ------------------------------------------------------------------------------
8
+
9
+
10
+ Hi all,
11
+
12
+ The Apache ECharts team is proud to announce Apache ECharts {{ECHARTS_RELEASE_VERSION}}.
13
+
14
+ Apache ECharts is a powerful, interactive charting and data visualization library for browser.
15
+
16
+ Download Links: https://echarts.apache.org/download.html
17
+
18
+ Release Notes: https://echarts.apache.org/changelog.html
19
+
20
+ Website: https://echarts.apache.org/
21
+
22
+
23
+ ECharts Resources:
24
+ - Issue: https://github.com/apache/echarts/issues
25
+ - Build Guide: https://github.com/apache/echarts/blob/{{ECHARTS_RELEASE_VERSION}}/README.md
26
+ - Mailing list: dev@echarts.apache.org
echarts-5.5.0-rc.2/build/source-release/template/vote-release.tpl ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ --- Mail To: ---
2
+ dev@echarts.apache.org
3
+ -----------------------------------------------------------
4
+
5
+ --- Subject: ---
6
+ [VOTE] Release {{ECHARTS_RELEASE_VERSION_FULL_NAME}}
7
+ -----------------------------------------------------------
8
+
9
+ Dear community,
10
+
11
+ We are pleased to be calling this vote for the release of {{ECHARTS_RELEASE_VERSION_FULL_NAME}}.
12
+
13
+ The release candidate to be voted over is available at:
14
+ https://dist.apache.org/repos/dist/dev/echarts/{{ECHARTS_RELEASE_VERSION}}/
15
+
16
+ The release candidate is signed with a GPG key available at:
17
+ https://dist.apache.org/repos/dist/dev/echarts/KEYS
18
+
19
+ The Git commit for this release is:
20
+ https://gitbox.apache.org/repos/asf?p=echarts.git;a=commit;h={{ECHARTS_RELEASE_COMMIT}}
21
+
22
+ The Release Note is available in:
23
+ https://dist.apache.org/repos/dist/dev/echarts/{{ECHARTS_RELEASE_VERSION}}/RELEASE_NOTE.txt
24
+
25
+ Build Guide:
26
+ https://github.com/apache/echarts/blob/{{ECHARTS_RELEASE_VERSION}}/README.md#build
27
+
28
+ NPM Install:
29
+ npm i echarts@{{ECHARTS_RELEASE_VERSION}}
30
+ https://www.npmjs.com/package/echarts/v/{{ECHARTS_RELEASE_VERSION}}
31
+
32
+ Please vote on releasing this package as:
33
+ {{ECHARTS_RELEASE_VERSION_FULL_NAME}}
34
+ by "{{VOTE_UNTIL}}".
35
+
36
+ [ ] +1 Release this package
37
+ [ ] 0 I don't feel strongly about it, but don't object
38
+ [ ] -1 Do not release this package because...
39
+
40
+ Anyone can participate in testing and voting, not just committers, please
41
+ feel free to try out the release candidate and provide your votes.
42
+
43
+ A checklist for reference:
44
+ https://cwiki.apache.org/confluence/display/ECHARTS/Apache+ECharts+Release+Checklist
echarts-5.5.0-rc.2/build/source-release/template/vote-result.tpl ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ --- Mail To: ---
2
+ dev@echarts.apache.org
3
+ -----------------------------------------------------------
4
+
5
+ --- Subject: ---
6
+ [RESULT] [VOTE] Release {{ECHARTS_RELEASE_VERSION_FULL_NAME}}
7
+ -----------------------------------------------------------
8
+
9
+ Thanks to all who voted or provided comments!
10
+
11
+ We received ______NUMBER_OF_+1_VOTES______ +1 votes from the PMC members, and the release has PASSED:
12
+
13
+ +1 ______NAME______ (binding)
14
+
15
+ Other votes from the community:
16
+
17
+ +1 ______NAME______
18
+
19
+ Vote thread:
20
+ https://lists.apache.org/thread/xxx
21
+
22
+ I'm going to release the source release of Apache ECharts {{ECHARTS_RELEASE_VERSION}}.
23
+ Thank you all for making this happen!
echarts-5.5.0-rc.2/build/template/charts.d.ts ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ export * from './types/dist/charts';
echarts-5.5.0-rc.2/build/template/charts.js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+
21
+ // In somehow. If we export like
22
+ // export * as LineChart './chart/line/install'
23
+ // The exported code will be transformed to
24
+ // import * as LineChart_1 './chart/line/install'; export {LineChart_1 as LineChart};
25
+ // Treeshaking in webpack will not work even if we configured sideEffects to false in package.json
26
+
27
+ export * from './lib/export/charts.js';