@visactor/vseed 0.4.5 → 0.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/builder/builder/builder.d.ts +36 -127
- package/dist/esm/builder/builder/builder.js +10 -2
- package/dist/esm/builder/builder/builder.js.map +1 -1
- package/dist/umd/index.js +10 -2
- package/dist/umd/index.js.map +1 -1
- package/package.json +8 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AdvancedPipe, AdvancedPipeline, AdvancedVSeed, ChartType, CustomThemeConfig, Locale, Spec, SpecPipe, SpecPipeline, VSeed, VSeedBuilder } from '../../types';
|
|
2
|
-
export declare class Builder implements VSeedBuilder {
|
|
2
|
+
export declare class Builder<S extends Spec = Spec> implements VSeedBuilder {
|
|
3
3
|
private _vseed;
|
|
4
4
|
private _advancedVSeed;
|
|
5
5
|
private _spec;
|
|
@@ -7,212 +7,121 @@ export declare class Builder implements VSeedBuilder {
|
|
|
7
7
|
private _locale;
|
|
8
8
|
private _isPrepared;
|
|
9
9
|
/**
|
|
10
|
-
* @description 初始化 Builder
|
|
11
|
-
* @param vseed VSeed 数据对象,包含图表类型、数据和映射配置。
|
|
10
|
+
* @description 初始化 Builder 实例
|
|
12
11
|
*/
|
|
13
12
|
constructor(vseed: VSeed);
|
|
14
13
|
/**
|
|
15
|
-
* @description 获取当前 Builder
|
|
16
|
-
* @returns 语言环境代码 (如 'zh-CN', 'en-US')。
|
|
14
|
+
* @description 获取当前 Builder 使用的语言环境
|
|
17
15
|
*/
|
|
18
16
|
get locale(): Locale;
|
|
19
17
|
/**
|
|
20
|
-
* @description
|
|
21
|
-
*
|
|
22
|
-
* 在 build() 之前调用,用于执行 dynamicFilter 中的 code。包含以下步骤:
|
|
23
|
-
* 1. 检查是否存在需要执行的 dynamicFilter (有 code 字段)
|
|
24
|
-
* 2. 如果存在,给 dataset 添加内部索引 __row_index
|
|
25
|
-
* 3. 生成 AdvancedVSeed 中间配置
|
|
26
|
-
* 4. 执行所有 dynamicFilter 的 code,将结果写入 filter.result
|
|
27
|
-
* 5. 缓存 AdvancedVSeed,供后续 build() 使用
|
|
28
|
-
*
|
|
29
|
-
* **注意:**
|
|
30
|
-
* - 此方法具有幂等性,多次调用不会重复执行
|
|
31
|
-
* - 如果没有 dynamicFilter code,调用此方法无副作用
|
|
32
|
-
* - 如果 dynamicFilter 只有静态 result 而没有 code,无需调用此方法
|
|
33
|
-
*
|
|
34
|
-
* @returns Promise<void>
|
|
35
|
-
* @example
|
|
36
|
-
* // 有 dynamicFilter code 的场景
|
|
37
|
-
* const builder = VBI.from(data, 'table')
|
|
38
|
-
* .dynamicFilter({ code: 'return data.filter(d => d.sales > 1000)' })
|
|
39
|
-
*
|
|
40
|
-
* await builder.prepare() // 异步执行 code
|
|
41
|
-
* const spec = builder.build() // 同步构建 spec
|
|
42
|
-
*
|
|
43
|
-
* // 没有 dynamicFilter 的场景
|
|
44
|
-
* const builder = VBI.from(data, 'table')
|
|
45
|
-
* const spec = builder.build() // 直接构建,无需 prepare
|
|
18
|
+
* @description 异步执行动态过滤器代码。在 build() 前调用,用于执行 dynamicFilter 中的 code。幂等方法,多次调用不会重复执行
|
|
46
19
|
*/
|
|
47
20
|
prepare: () => Promise<void>;
|
|
48
21
|
/**
|
|
49
|
-
* @description 生成最终的图表配置 (Spec)
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
*
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
* @
|
|
58
|
-
* @example
|
|
59
|
-
* // 场景 1: 无 dynamicFilter,直接构建
|
|
60
|
-
* const spec = builder.build();
|
|
61
|
-
*
|
|
62
|
-
* // 场景 2: 有 dynamicFilter code,先 prepare 再 build
|
|
63
|
-
* await builder.prepare();
|
|
64
|
-
* const spec = builder.build();
|
|
65
|
-
*/
|
|
66
|
-
build: <T extends Spec>() => T;
|
|
67
|
-
/**
|
|
68
|
-
* @description 将中间层配置 (AdvancedVSeed) 转换为最终 Spec。
|
|
69
|
-
* 仅当你需要深度定制中间层配置时使用。通常流程是:buildAdvanced() -> 修改配置 -> buildSpec()。
|
|
70
|
-
* @param advanced 修改后的 AdvancedVSeed 对象。
|
|
71
|
-
* @returns VChart 或 VTable 的标准 Spec 对象。
|
|
72
|
-
*/
|
|
73
|
-
buildSpec: (advanced: AdvancedVSeed) => Spec;
|
|
74
|
-
/**
|
|
75
|
-
* @description 生成中间层配置 (AdvancedVSeed)。
|
|
76
|
-
* 中间层配置也就是常说的 "图表模版",它比原始 VSeed 更详细,暴露了更多图表细节(如坐标轴、图例的具体配置)。
|
|
77
|
-
* 如果默认的 build() 结果不满足需求,可以先获取这个中间配置进行修改,再调用 buildSpec 生成最终结果。
|
|
78
|
-
* @returns AdvancedVSeed 对象 (模版配置)。
|
|
22
|
+
* @description 生成最终的图表配置 (Spec)。这是最常用的核心方法。如果配置中包含 dynamicFilter code,需要先调用 prepare()
|
|
23
|
+
*/
|
|
24
|
+
build: <T = S>() => T;
|
|
25
|
+
/**
|
|
26
|
+
* @description 将中间层配置 (AdvancedVSeed) 转换为最终 Spec。仅当你需要深度定制中间层配置时使用
|
|
27
|
+
*/
|
|
28
|
+
buildSpec: <T = S>(advanced: AdvancedVSeed) => T;
|
|
29
|
+
/**
|
|
30
|
+
* @description 生成中间层配置 (AdvancedVSeed),即图表模版。比原始 VSeed 更详细,暴露了更多图表细节
|
|
79
31
|
*/
|
|
80
32
|
buildAdvanced: () => AdvancedVSeed | null;
|
|
81
33
|
/**
|
|
82
|
-
* @description
|
|
83
|
-
* 常用于生成图表的图例或颜色筛选器 UI。
|
|
84
|
-
* @returns 颜色字段列表 (包含 id 和别名)。
|
|
34
|
+
* @description 获取数据中涉及颜色的字段信息。常用于生成图表的图例或颜色筛选器 UI
|
|
85
35
|
*/
|
|
86
36
|
getColorItems: () => {
|
|
87
37
|
id: string;
|
|
88
38
|
alias: string;
|
|
89
39
|
}[];
|
|
90
40
|
/**
|
|
91
|
-
* @description 获取颜色字段的详细映射表。
|
|
92
|
-
* @returns Key 为颜色 ID,Value 为详细信息的对象。
|
|
41
|
+
* @description 获取颜色字段的详细映射表。Key 为颜色 ID,Value 为详细信息
|
|
93
42
|
*/
|
|
94
43
|
getColorIdMap: () => Record<string, {
|
|
95
44
|
id: string;
|
|
96
45
|
alias: string;
|
|
97
46
|
}>;
|
|
98
47
|
/**
|
|
99
|
-
* @description 获取当前的 VSeed
|
|
48
|
+
* @description 获取当前的 VSeed 输入数据
|
|
100
49
|
*/
|
|
101
50
|
get vseed(): VSeed;
|
|
102
51
|
/**
|
|
103
|
-
* @description 更新 VSeed
|
|
104
|
-
* 更新后,后续调用 build() 将基于新数据生成。
|
|
105
|
-
* **注意:** 更新 vseed 后会清除 prepare() 的缓存状态。
|
|
106
|
-
* @param value 新的 VSeed 对象。
|
|
52
|
+
* @description 更新 VSeed 输入数据。更新后会清除 prepare() 的缓存状态
|
|
107
53
|
*/
|
|
108
54
|
set vseed(value: VSeed);
|
|
109
55
|
/**
|
|
110
56
|
* @description 获取 prepare() 状态
|
|
111
|
-
* @internal
|
|
112
57
|
*/
|
|
113
58
|
get isPrepared(): boolean;
|
|
114
59
|
/**
|
|
115
60
|
* @description 设置 prepare() 状态
|
|
116
|
-
* @internal
|
|
117
61
|
*/
|
|
118
62
|
set isPrepared(value: boolean);
|
|
119
63
|
/**
|
|
120
|
-
* @description 获取当前的 AdvancedVSeed
|
|
121
|
-
* @returns AdvancedVSeed 对象。
|
|
64
|
+
* @description 获取当前的 AdvancedVSeed 中间配置对象
|
|
122
65
|
*/
|
|
123
66
|
get advancedVSeed(): AdvancedVSeed | null;
|
|
124
67
|
/**
|
|
125
|
-
* @description 设置 AdvancedVSeed
|
|
126
|
-
* 通常用于缓存或复用已有的中间配置。
|
|
127
|
-
* @param value 新的 AdvancedVSeed 对象。
|
|
68
|
+
* @description 设置 AdvancedVSeed 中间配置对象。通常用于缓存或复用已有的中间配置
|
|
128
69
|
*/
|
|
129
70
|
set advancedVSeed(value: AdvancedVSeed | null);
|
|
130
71
|
/**
|
|
131
|
-
* @description 获取当前生成的最终 Spec
|
|
132
|
-
* @returns Spec 对象。
|
|
72
|
+
* @description 获取当前生成的最终 Spec 对象
|
|
133
73
|
*/
|
|
134
74
|
get spec(): Spec | null;
|
|
135
75
|
/**
|
|
136
|
-
* @description 设置 Spec
|
|
137
|
-
* 通常用于缓存。
|
|
138
|
-
* @param value 新的 Spec 对象。
|
|
76
|
+
* @description 设置 Spec 对象。通常用于缓存
|
|
139
77
|
*/
|
|
140
78
|
set spec(value: Spec | null);
|
|
141
79
|
/**
|
|
142
|
-
* @description
|
|
143
|
-
* @returns 包含各阶段耗时的对象 (单位: ms)。
|
|
80
|
+
* @description 获取构建过程中的性能统计信息。包含各阶段耗时 (单位: ms)
|
|
144
81
|
*/
|
|
145
82
|
get performance(): Record<string, string | number>;
|
|
146
83
|
/**
|
|
147
|
-
* @description
|
|
148
|
-
* @param value 新的性能统计对象。
|
|
84
|
+
* @description 设置性能统计信息
|
|
149
85
|
*/
|
|
150
86
|
set performance(value: Record<string, string | number>);
|
|
151
87
|
/**
|
|
152
|
-
* @description [内部方法]
|
|
153
|
-
* 用于查看或调试该图表类型是如何从 VSeed 转换为 AdvancedVSeed 的。
|
|
154
|
-
* @param chartType 图表类型 (如 'bar', 'line')。
|
|
155
|
-
* @returns AdvancedPipeline 数组。
|
|
88
|
+
* @description [内部方法] 获取指定图表类型的模版构建管线,用于调试 VSeed 到 AdvancedVSeed 的转换过程
|
|
156
89
|
*/
|
|
157
|
-
static getAdvancedPipeline: (chartType: ChartType) =>
|
|
90
|
+
static getAdvancedPipeline: (chartType: ChartType) => import("../../types").Pipe<AdvancedVSeed, import("src/types").AdvancedPipelineContext>[];
|
|
158
91
|
/**
|
|
159
|
-
* @description [内部方法] 获取指定图表类型的 Spec
|
|
160
|
-
* 用于查看或调试该图表类型是如何从 AdvancedVSeed 转换为 Spec 的。
|
|
161
|
-
* @param chartType 图表类型。
|
|
162
|
-
* @returns SpecPipeline 数组。
|
|
92
|
+
* @description [内部方法] 获取指定图表类型的 Spec 构建管线,用于调试 AdvancedVSeed 到 Spec 的转换过程
|
|
163
93
|
*/
|
|
164
|
-
static getSpecPipeline: (chartType: ChartType) =>
|
|
94
|
+
static getSpecPipeline: (chartType: ChartType) => SpecPipe[];
|
|
165
95
|
/**
|
|
166
|
-
* @description
|
|
167
|
-
* @param themeKey 主题名称 (例如 'light', 'dark')。如果不传,默认为 'light'。
|
|
168
|
-
* @returns 主题配置对象。
|
|
96
|
+
* @description 获取指定主题的配置。不传 themeKey 默认返回 'light' 主题
|
|
169
97
|
*/
|
|
170
98
|
static getTheme: (themeKey?: string) => CustomThemeConfig;
|
|
171
99
|
/**
|
|
172
|
-
* @description
|
|
173
|
-
* @returns 主题配置映射表。
|
|
100
|
+
* @description 获取所有已注册的主题配置
|
|
174
101
|
*/
|
|
175
102
|
static getThemeMap: () => Record<string, CustomThemeConfig>;
|
|
176
103
|
/**
|
|
177
|
-
* @description 静态工厂方法,用于便捷地创建 Builder
|
|
178
|
-
* @param vseed VSeed 数据对象。
|
|
179
|
-
* @returns 新的 Builder 实例。
|
|
180
|
-
* @example
|
|
181
|
-
* const builder = Builder.from(vseedJson);
|
|
104
|
+
* @description 静态工厂方法,用于便捷地创建 Builder 实例
|
|
182
105
|
*/
|
|
183
|
-
static from: (vseed: VSeed) => Builder
|
|
106
|
+
static from: <T extends Spec = Spec>(vseed: VSeed) => Builder<T>;
|
|
184
107
|
/**
|
|
185
|
-
* @description [扩展方法]
|
|
186
|
-
* 如果你要让 Builder 支持一种全新的图表,需要在这里注册它的模版构建逻辑。
|
|
187
|
-
* @param chartType 新图表类型的名称。
|
|
188
|
-
* @param pipeline 处理管道数组。
|
|
108
|
+
* @description [扩展方法] 注册新图表类型的模版构建管线
|
|
189
109
|
*/
|
|
190
110
|
static registerAdvancedPipeline: (chartType: ChartType, pipeline: AdvancedPipeline) => void;
|
|
191
111
|
/**
|
|
192
|
-
* @description [扩展方法]
|
|
193
|
-
* 如果你要让 Builder 支持一种全新的图表,需要在这里注册它的 Spec 构建逻辑。
|
|
194
|
-
* @param chartType 图表类型。
|
|
195
|
-
* @param pipeline 处理管道数组。
|
|
112
|
+
* @description [扩展方法] 注册新图表类型的 Spec 构建管线
|
|
196
113
|
*/
|
|
197
114
|
static registerSpecPipeline: (chartType: ChartType, pipeline: SpecPipeline) => void;
|
|
198
115
|
/**
|
|
199
|
-
* @description [扩展方法]
|
|
200
|
-
* 可以在现有图表的构建流程中插入自定义逻辑(Pipe),从而影响生成的 AdvancedVSeed。
|
|
201
|
-
* @param chartType 目标图表类型。
|
|
202
|
-
* @param pipe 自定义处理函数。
|
|
116
|
+
* @description [扩展方法] 修改现有图表的模版构建逻辑,插入自定义 Pipe 影响生成的 AdvancedVSeed
|
|
203
117
|
*/
|
|
204
118
|
static updateAdvanced: (chartType: ChartType, pipe: AdvancedPipe) => void;
|
|
205
119
|
/**
|
|
206
|
-
* @description [扩展方法]
|
|
207
|
-
* 可以在现有图表的构建流程中插入自定义逻辑(Pipe),从而影响生成的最终 Spec。
|
|
208
|
-
* @param chartType 目标图表类型。
|
|
209
|
-
* @param pipe 自定义处理函数。
|
|
120
|
+
* @description [扩展方法] 修改现有图表的 Spec 构建逻辑,插入自定义 Pipe 影响生成的最终 Spec
|
|
210
121
|
*/
|
|
211
122
|
static updateSpec: (chartType: ChartType, pipe: SpecPipe) => void;
|
|
212
123
|
/**
|
|
213
|
-
* @description [扩展方法]
|
|
214
|
-
* @param key 主题名称。
|
|
215
|
-
* @param theme 主题配置对象。
|
|
124
|
+
* @description [扩展方法] 注册自定义主题
|
|
216
125
|
*/
|
|
217
126
|
static registerTheme: (key: string, theme: CustomThemeConfig) => void;
|
|
218
127
|
private static _advancedPipelineMap;
|
|
@@ -57,13 +57,21 @@ class Builder {
|
|
|
57
57
|
}
|
|
58
58
|
static getAdvancedPipeline = (chartType)=>{
|
|
59
59
|
const customPipe = Builder._customAdvancedPipe[chartType];
|
|
60
|
-
const
|
|
60
|
+
const originalPipeline = Builder._advancedPipelineMap[chartType];
|
|
61
|
+
if (!originalPipeline) return originalPipeline;
|
|
62
|
+
const pipeline = [
|
|
63
|
+
...originalPipeline
|
|
64
|
+
];
|
|
61
65
|
if (customPipe) pipeline.push(customPipe);
|
|
62
66
|
return pipeline;
|
|
63
67
|
};
|
|
64
68
|
static getSpecPipeline = (chartType)=>{
|
|
65
69
|
const customPipe = Builder._customSpecPipe[chartType];
|
|
66
|
-
const
|
|
70
|
+
const originalPipeline = Builder._specPipelineMap[chartType];
|
|
71
|
+
if (!originalPipeline) return originalPipeline;
|
|
72
|
+
const pipeline = [
|
|
73
|
+
...originalPipeline
|
|
74
|
+
];
|
|
67
75
|
if (customPipe) pipeline.push(customPipe);
|
|
68
76
|
return pipeline;
|
|
69
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder/builder/builder.js","sources":["webpack://@visactor/vseed/./src/builder/builder/builder.ts"],"sourcesContent":["import type {\n AdvancedPipe,\n AdvancedPipeline,\n AdvancedVSeed,\n ChartType,\n CustomThemeConfig,\n Locale,\n Spec,\n SpecPipe,\n SpecPipeline,\n VSeed,\n VSeedBuilder,\n} from 'src/types'\nimport { buildAdvanced } from './buildAdvanced'\nimport { buildSpec } from './buildSpec'\nimport { build } from './build'\nimport { prepare } from './prepare'\nimport { intl } from 'src/i18n'\nimport { getColorIdMap, getColorItems } from './advanced'\n\nexport class Builder implements VSeedBuilder {\n private _vseed: VSeed\n private _advancedVSeed: AdvancedVSeed | null = null\n private _spec: Spec | null = null\n private _performance: Record<string, string | number> = {}\n\n private _locale: Locale\n\n // prepare() 相关状态\n private _isPrepared: boolean = false\n\n /**\n * @description 初始化 Builder 实例。\n * @param vseed VSeed 数据对象,包含图表类型、数据和映射配置。\n */\n constructor(vseed: VSeed) {\n this._vseed = vseed\n this._locale = vseed.locale || intl.getLocale()\n }\n\n /**\n * @description 获取当前 Builder 使用的语言环境。\n * @returns 语言环境代码 (如 'zh-CN', 'en-US')。\n */\n get locale() {\n return this._locale\n }\n\n /**\n * @description 准备阶段 - 异步执行动态过滤器代码。\n *\n * 在 build() 之前调用,用于执行 dynamicFilter 中的 code。包含以下步骤:\n * 1. 检查是否存在需要执行的 dynamicFilter (有 code 字段)\n * 2. 如果存在,给 dataset 添加内部索引 __row_index\n * 3. 生成 AdvancedVSeed 中间配置\n * 4. 执行所有 dynamicFilter 的 code,将结果写入 filter.result\n * 5. 缓存 AdvancedVSeed,供后续 build() 使用\n *\n * **注意:**\n * - 此方法具有幂等性,多次调用不会重复执行\n * - 如果没有 dynamicFilter code,调用此方法无副作用\n * - 如果 dynamicFilter 只有静态 result 而没有 code,无需调用此方法\n *\n * @returns Promise<void>\n * @example\n * // 有 dynamicFilter code 的场景\n * const builder = VBI.from(data, 'table')\n * .dynamicFilter({ code: 'return data.filter(d => d.sales > 1000)' })\n *\n * await builder.prepare() // 异步执行 code\n * const spec = builder.build() // 同步构建 spec\n *\n * // 没有 dynamicFilter 的场景\n * const builder = VBI.from(data, 'table')\n * const spec = builder.build() // 直接构建,无需 prepare\n */\n prepare = async (): Promise<void> => prepare(this)\n\n /**\n * @description 生成最终的图表配置 (Spec)。\n *\n * 这是最常用的核心方法。拿到 Spec 后,直接传给 VChart 或 VTable 即可渲染图表。\n *\n * **注意:**\n * - 如果配置中包含 dynamicFilter code,需要先调用 prepare() 异步执行\n * - 如果已调用过 prepare(),build() 会复用缓存的结果,提升性能\n *\n * @returns VChart 或 VTable 的标准 Spec 对象。\n * @example\n * // 场景 1: 无 dynamicFilter,直接构建\n * const spec = builder.build();\n *\n * // 场景 2: 有 dynamicFilter code,先 prepare 再 build\n * await builder.prepare();\n * const spec = builder.build();\n */\n build = <T extends Spec>(): T => build(this) as T\n\n /**\n * @description 将中间层配置 (AdvancedVSeed) 转换为最终 Spec。\n * 仅当你需要深度定制中间层配置时使用。通常流程是:buildAdvanced() -> 修改配置 -> buildSpec()。\n * @param advanced 修改后的 AdvancedVSeed 对象。\n * @returns VChart 或 VTable 的标准 Spec 对象。\n */\n buildSpec = (advanced: AdvancedVSeed): Spec => buildSpec(this, advanced)\n\n /**\n * @description 生成中间层配置 (AdvancedVSeed)。\n * 中间层配置也就是常说的 \"图表模版\",它比原始 VSeed 更详细,暴露了更多图表细节(如坐标轴、图例的具体配置)。\n * 如果默认的 build() 结果不满足需求,可以先获取这个中间配置进行修改,再调用 buildSpec 生成最终结果。\n * @returns AdvancedVSeed 对象 (模版配置)。\n */\n buildAdvanced = (): AdvancedVSeed | null => buildAdvanced(this)\n\n /**\n * @description 获取数据中涉及颜色的字段信息。\n * 常用于生成图表的图例或颜色筛选器 UI。\n * @returns 颜色字段列表 (包含 id 和别名)。\n */\n getColorItems = () => getColorItems(this)\n\n /**\n * @description 获取颜色字段的详细映射表。\n * @returns Key 为颜色 ID,Value 为详细信息的对象。\n */\n getColorIdMap = () => getColorIdMap(this)\n\n /**\n * @description 获取当前的 VSeed 输入数据。\n */\n get vseed() {\n return this._vseed\n }\n\n /**\n * @description 更新 VSeed 输入数据。\n * 更新后,后续调用 build() 将基于新数据生成。\n * **注意:** 更新 vseed 后会清除 prepare() 的缓存状态。\n * @param value 新的 VSeed 对象。\n */\n set vseed(value) {\n this._vseed = value\n // 清除 prepare 缓存\n this._isPrepared = false\n }\n\n /**\n * @description 获取 prepare() 状态\n * @internal\n */\n get isPrepared() {\n return this._isPrepared\n }\n\n /**\n * @description 设置 prepare() 状态\n * @internal\n */\n set isPrepared(value: boolean) {\n this._isPrepared = value\n }\n\n /**\n * @description 获取当前的 AdvancedVSeed 中间配置对象。\n * @returns AdvancedVSeed 对象。\n */\n get advancedVSeed() {\n return this._advancedVSeed\n }\n\n /**\n * @description 设置 AdvancedVSeed 中间配置对象。\n * 通常用于缓存或复用已有的中间配置。\n * @param value 新的 AdvancedVSeed 对象。\n */\n set advancedVSeed(value) {\n this._advancedVSeed = value\n }\n\n /**\n * @description 获取当前生成的最终 Spec 对象。\n * @returns Spec 对象。\n */\n get spec() {\n return this._spec\n }\n\n /**\n * @description 设置 Spec 对象。\n * 通常用于缓存。\n * @param value 新的 Spec 对象。\n */\n set spec(value) {\n this._spec = value\n }\n\n /**\n * @description 获取构建过程中的性能统计信息。\n * @returns 包含各阶段耗时的对象 (单位: ms)。\n */\n get performance() {\n return this._performance\n }\n\n /**\n * @description 设置性能统计信息。\n * @param value 新的性能统计对象。\n */\n set performance(value) {\n this._performance = value\n }\n\n /**\n * @description [内部方法] 获取指定图表类型的模版构建管线。\n * 用于查看或调试该图表类型是如何从 VSeed 转换为 AdvancedVSeed 的。\n * @param chartType 图表类型 (如 'bar', 'line')。\n * @returns AdvancedPipeline 数组。\n */\n static getAdvancedPipeline = (chartType: ChartType) => {\n const customPipe = Builder._customAdvancedPipe[chartType] as AdvancedPipe\n const pipeline = Builder._advancedPipelineMap[chartType] as AdvancedPipeline\n if (customPipe) {\n pipeline.push(customPipe)\n }\n return pipeline\n }\n\n /**\n * @description [内部方法] 获取指定图表类型的 Spec 构建管线。\n * 用于查看或调试该图表类型是如何从 AdvancedVSeed 转换为 Spec 的。\n * @param chartType 图表类型。\n * @returns SpecPipeline 数组。\n */\n static getSpecPipeline = (chartType: ChartType) => {\n const customPipe = Builder._customSpecPipe[chartType] as SpecPipe\n const pipeline = Builder._specPipelineMap[chartType] as SpecPipeline\n if (customPipe) {\n pipeline.push(customPipe)\n }\n return pipeline\n }\n\n /**\n * @description 获取指定主题的配置。\n * @param themeKey 主题名称 (例如 'light', 'dark')。如果不传,默认为 'light'。\n * @returns 主题配置对象。\n */\n static getTheme = (themeKey?: string): CustomThemeConfig => Builder._themeMap[themeKey || 'light']\n\n /**\n * @description 获取所有已注册的主题配置。\n * @returns 主题配置映射表。\n */\n static getThemeMap = (): Record<string, CustomThemeConfig> => Builder._themeMap\n\n /**\n * @description 静态工厂方法,用于便捷地创建 Builder 实例。\n * @param vseed VSeed 数据对象。\n * @returns 新的 Builder 实例。\n * @example\n * const builder = Builder.from(vseedJson);\n */\n static from = (vseed: VSeed) => new Builder(vseed)\n\n /**\n * @description [扩展方法] 注册一个新的图表类型(模版构建阶段)。\n * 如果你要让 Builder 支持一种全新的图表,需要在这里注册它的模版构建逻辑。\n * @param chartType 新图表类型的名称。\n * @param pipeline 处理管道数组。\n */\n static registerAdvancedPipeline = (chartType: ChartType, pipeline: AdvancedPipeline) => {\n Builder._advancedPipelineMap[chartType] = pipeline\n }\n\n /**\n * @description [扩展方法] 注册一个新的图表类型(Spec 构建阶段)。\n * 如果你要让 Builder 支持一种全新的图表,需要在这里注册它的 Spec 构建逻辑。\n * @param chartType 图表类型。\n * @param pipeline 处理管道数组。\n */\n static registerSpecPipeline = (chartType: ChartType, pipeline: SpecPipeline) => {\n Builder._specPipelineMap[chartType] = pipeline\n }\n\n /**\n * @description [扩展方法] 修改现有的图表模版构建逻辑。\n * 可以在现有图表的构建流程中插入自定义逻辑(Pipe),从而影响生成的 AdvancedVSeed。\n * @param chartType 目标图表类型。\n * @param pipe 自定义处理函数。\n */\n static updateAdvanced = (chartType: ChartType, pipe: AdvancedPipe) => {\n Builder._customAdvancedPipe[chartType] = pipe\n }\n\n /**\n * @description [扩展方法] 修改现有的图表 Spec 构建逻辑。\n * 可以在现有图表的构建流程中插入自定义逻辑(Pipe),从而影响生成的最终 Spec。\n * @param chartType 目标图表类型。\n * @param pipe 自定义处理函数。\n */\n static updateSpec = (chartType: ChartType, pipe: SpecPipe) => {\n Builder._customSpecPipe[chartType] = pipe\n }\n\n /**\n * @description [扩展方法] 注册自定义主题。\n * @param key 主题名称。\n * @param theme 主题配置对象。\n */\n static registerTheme = (key: string, theme: CustomThemeConfig) => {\n Builder._themeMap[key] = theme\n }\n\n private static _advancedPipelineMap: Partial<Record<ChartType, AdvancedPipeline>> = {}\n private static _specPipelineMap: Partial<Record<ChartType, SpecPipeline>> = {}\n private static _customAdvancedPipe: Partial<Record<ChartType, AdvancedPipe>> = {}\n private static _customSpecPipe: Partial<Record<ChartType, SpecPipe>> = {}\n private static _themeMap: Record<string, CustomThemeConfig> = {}\n}\n"],"names":["Builder","vseed","intl","prepare","build","advanced","buildSpec","buildAdvanced","getColorItems","getColorIdMap","value","chartType","customPipe","pipeline","themeKey","pipe","key","theme"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builder/builder/builder.js","sources":["webpack://@visactor/vseed/./src/builder/builder/builder.ts"],"sourcesContent":["import type {\n AdvancedPipe,\n AdvancedPipeline,\n AdvancedVSeed,\n ChartType,\n CustomThemeConfig,\n Locale,\n Spec,\n SpecPipe,\n SpecPipeline,\n VSeed,\n VSeedBuilder,\n} from 'src/types'\nimport { buildAdvanced } from './buildAdvanced'\nimport { buildSpec } from './buildSpec'\nimport { build } from './build'\nimport { prepare } from './prepare'\nimport { intl } from 'src/i18n'\nimport { getColorIdMap, getColorItems } from './advanced'\n\nexport class Builder<S extends Spec = Spec> implements VSeedBuilder {\n private _vseed: VSeed\n private _advancedVSeed: AdvancedVSeed | null = null\n private _spec: Spec | null = null\n private _performance: Record<string, string | number> = {}\n\n private _locale: Locale\n\n private _isPrepared: boolean = false\n\n /**\n * @description 初始化 Builder 实例\n */\n constructor(vseed: VSeed) {\n this._vseed = vseed\n this._locale = vseed.locale || intl.getLocale()\n }\n\n /**\n * @description 获取当前 Builder 使用的语言环境\n */\n get locale() {\n return this._locale\n }\n\n /**\n * @description 异步执行动态过滤器代码。在 build() 前调用,用于执行 dynamicFilter 中的 code。幂等方法,多次调用不会重复执行\n */\n prepare = async (): Promise<void> => prepare(this)\n\n /**\n * @description 生成最终的图表配置 (Spec)。这是最常用的核心方法。如果配置中包含 dynamicFilter code,需要先调用 prepare()\n */\n build = <T = S>(): T => build(this) as T\n\n /**\n * @description 将中间层配置 (AdvancedVSeed) 转换为最终 Spec。仅当你需要深度定制中间层配置时使用\n */\n buildSpec = <T = S>(advanced: AdvancedVSeed): T => buildSpec(this, advanced) as T\n\n /**\n * @description 生成中间层配置 (AdvancedVSeed),即图表模版。比原始 VSeed 更详细,暴露了更多图表细节\n */\n buildAdvanced = (): AdvancedVSeed | null => buildAdvanced(this)\n\n /**\n * @description 获取数据中涉及颜色的字段信息。常用于生成图表的图例或颜色筛选器 UI\n */\n getColorItems = () => getColorItems(this)\n\n /**\n * @description 获取颜色字段的详细映射表。Key 为颜色 ID,Value 为详细信息\n */\n getColorIdMap = () => getColorIdMap(this)\n\n /**\n * @description 获取当前的 VSeed 输入数据\n */\n get vseed() {\n return this._vseed\n }\n\n /**\n * @description 更新 VSeed 输入数据。更新后会清除 prepare() 的缓存状态\n */\n set vseed(value) {\n this._vseed = value\n this._isPrepared = false\n }\n\n /**\n * @description 获取 prepare() 状态\n */\n get isPrepared() {\n return this._isPrepared\n }\n\n /**\n * @description 设置 prepare() 状态\n */\n set isPrepared(value: boolean) {\n this._isPrepared = value\n }\n\n /**\n * @description 获取当前的 AdvancedVSeed 中间配置对象\n */\n get advancedVSeed() {\n return this._advancedVSeed\n }\n\n /**\n * @description 设置 AdvancedVSeed 中间配置对象。通常用于缓存或复用已有的中间配置\n */\n set advancedVSeed(value) {\n this._advancedVSeed = value\n }\n\n /**\n * @description 获取当前生成的最终 Spec 对象\n */\n get spec() {\n return this._spec\n }\n\n /**\n * @description 设置 Spec 对象。通常用于缓存\n */\n set spec(value) {\n this._spec = value\n }\n\n /**\n * @description 获取构建过程中的性能统计信息。包含各阶段耗时 (单位: ms)\n */\n get performance() {\n return this._performance\n }\n\n /**\n * @description 设置性能统计信息\n */\n set performance(value) {\n this._performance = value\n }\n\n /**\n * @description [内部方法] 获取指定图表类型的模版构建管线,用于调试 VSeed 到 AdvancedVSeed 的转换过程\n */\n static getAdvancedPipeline = (chartType: ChartType) => {\n const customPipe = Builder._customAdvancedPipe[chartType] as AdvancedPipe\n const originalPipeline = Builder._advancedPipelineMap[chartType] as AdvancedPipeline\n if (!originalPipeline) return originalPipeline\n\n const pipeline = [...originalPipeline]\n if (customPipe) {\n pipeline.push(customPipe)\n }\n return pipeline\n }\n\n /**\n * @description [内部方法] 获取指定图表类型的 Spec 构建管线,用于调试 AdvancedVSeed 到 Spec 的转换过程\n */\n static getSpecPipeline = (chartType: ChartType) => {\n const customPipe = Builder._customSpecPipe[chartType] as SpecPipe\n const originalPipeline = Builder._specPipelineMap[chartType] as SpecPipeline\n if (!originalPipeline) return originalPipeline\n\n const pipeline = [...originalPipeline]\n if (customPipe) {\n pipeline.push(customPipe)\n }\n return pipeline\n }\n\n /**\n * @description 获取指定主题的配置。不传 themeKey 默认返回 'light' 主题\n */\n static getTheme = (themeKey?: string): CustomThemeConfig => Builder._themeMap[themeKey || 'light']\n\n /**\n * @description 获取所有已注册的主题配置\n */\n static getThemeMap = (): Record<string, CustomThemeConfig> => Builder._themeMap\n\n /**\n * @description 静态工厂方法,用于便捷地创建 Builder 实例\n */\n static from = <T extends Spec = Spec>(vseed: VSeed) => new Builder<T>(vseed)\n\n /**\n * @description [扩展方法] 注册新图表类型的模版构建管线\n */\n static registerAdvancedPipeline = (chartType: ChartType, pipeline: AdvancedPipeline) => {\n Builder._advancedPipelineMap[chartType] = pipeline\n }\n\n /**\n * @description [扩展方法] 注册新图表类型的 Spec 构建管线\n */\n static registerSpecPipeline = (chartType: ChartType, pipeline: SpecPipeline) => {\n Builder._specPipelineMap[chartType] = pipeline\n }\n\n /**\n * @description [扩展方法] 修改现有图表的模版构建逻辑,插入自定义 Pipe 影响生成的 AdvancedVSeed\n */\n static updateAdvanced = (chartType: ChartType, pipe: AdvancedPipe) => {\n Builder._customAdvancedPipe[chartType] = pipe\n }\n\n /**\n * @description [扩展方法] 修改现有图表的 Spec 构建逻辑,插入自定义 Pipe 影响生成的最终 Spec\n */\n static updateSpec = (chartType: ChartType, pipe: SpecPipe) => {\n Builder._customSpecPipe[chartType] = pipe\n }\n\n /**\n * @description [扩展方法] 注册自定义主题\n */\n static registerTheme = (key: string, theme: CustomThemeConfig) => {\n Builder._themeMap[key] = theme\n }\n\n private static _advancedPipelineMap: Partial<Record<ChartType, AdvancedPipeline>> = {}\n private static _specPipelineMap: Partial<Record<ChartType, SpecPipeline>> = {}\n private static _customAdvancedPipe: Partial<Record<ChartType, AdvancedPipe>> = {}\n private static _customSpecPipe: Partial<Record<ChartType, SpecPipe>> = {}\n private static _themeMap: Record<string, CustomThemeConfig> = {}\n}\n"],"names":["Builder","vseed","intl","prepare","build","advanced","buildSpec","buildAdvanced","getColorItems","getColorIdMap","value","chartType","customPipe","originalPipeline","pipeline","themeKey","pipe","key","theme"],"mappings":"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"}
|
package/dist/umd/index.js
CHANGED
|
@@ -2390,13 +2390,21 @@ self.R = R;
|
|
|
2390
2390
|
}
|
|
2391
2391
|
static getAdvancedPipeline = (chartType)=>{
|
|
2392
2392
|
const customPipe = Builder._customAdvancedPipe[chartType];
|
|
2393
|
-
const
|
|
2393
|
+
const originalPipeline = Builder._advancedPipelineMap[chartType];
|
|
2394
|
+
if (!originalPipeline) return originalPipeline;
|
|
2395
|
+
const pipeline = [
|
|
2396
|
+
...originalPipeline
|
|
2397
|
+
];
|
|
2394
2398
|
if (customPipe) pipeline.push(customPipe);
|
|
2395
2399
|
return pipeline;
|
|
2396
2400
|
};
|
|
2397
2401
|
static getSpecPipeline = (chartType)=>{
|
|
2398
2402
|
const customPipe = Builder._customSpecPipe[chartType];
|
|
2399
|
-
const
|
|
2403
|
+
const originalPipeline = Builder._specPipelineMap[chartType];
|
|
2404
|
+
if (!originalPipeline) return originalPipeline;
|
|
2405
|
+
const pipeline = [
|
|
2406
|
+
...originalPipeline
|
|
2407
|
+
];
|
|
2400
2408
|
if (customPipe) pipeline.push(customPipe);
|
|
2401
2409
|
return pipeline;
|
|
2402
2410
|
};
|