@visactor/vseed 0.0.1 → 0.0.2
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/builder/builder/build.d.ts +3 -0
- package/dist/builder/builder/buildAdvanced.d.ts +3 -0
- package/dist/builder/builder/buildSpec.d.ts +4 -0
- package/dist/builder/builder/builder.d.ts +216 -0
- package/dist/builder/builder/index.d.ts +1 -0
- package/dist/builder/index.d.ts +2 -0
- package/dist/builder/register/index.d.ts +1 -0
- package/dist/builder/register/register.d.ts +3 -0
- package/dist/dataReshape/constant.d.ts +5 -0
- package/dist/dataReshape/dataReshapeFor1D1M.d.ts +13 -0
- package/dist/dataReshape/dataReshapeFor2D1M.d.ts +13 -0
- package/dist/dataReshape/foldMeasures.d.ts +31 -0
- package/dist/dataReshape/index.d.ts +4 -0
- package/dist/dataReshape/unfoldDimensions.d.ts +19 -0
- package/dist/index.cjs +616 -4
- package/dist/index.d.ts +5 -1
- package/dist/index.js +533 -2
- package/dist/pipeline/advanced/index.d.ts +1 -0
- package/dist/pipeline/advanced/pipeline/bar.d.ts +2 -0
- package/dist/pipeline/advanced/pipeline/column.d.ts +2 -0
- package/dist/pipeline/advanced/pipeline/index.d.ts +2 -0
- package/dist/pipeline/advanced/pipes/encoding/encodingCartesian.d.ts +2 -0
- package/dist/pipeline/advanced/pipes/encoding/index.d.ts +1 -0
- package/dist/pipeline/advanced/pipes/index.d.ts +2 -0
- package/dist/pipeline/advanced/pipes/reshape/index.d.ts +2 -0
- package/dist/pipeline/advanced/pipes/reshape/reshapeTo1D1M.d.ts +8 -0
- package/dist/pipeline/advanced/pipes/reshape/reshapeTo2D1M.d.ts +8 -0
- package/dist/pipeline/index.d.ts +3 -0
- package/dist/pipeline/spec/index.d.ts +1 -0
- package/dist/pipeline/spec/pipeline/bar.d.ts +2 -0
- package/dist/pipeline/spec/pipeline/column.d.ts +2 -0
- package/dist/pipeline/spec/pipeline/index.d.ts +2 -0
- package/dist/pipeline/spec/pipes/axes/index.d.ts +4 -0
- package/dist/pipeline/spec/pipes/axes/xBand copy.d.ts +0 -0
- package/dist/pipeline/spec/pipes/axes/xBand.d.ts +2 -0
- package/dist/pipeline/spec/pipes/axes/xLinear copy.d.ts +0 -0
- package/dist/pipeline/spec/pipes/axes/xLinear.d.ts +2 -0
- package/dist/pipeline/spec/pipes/axes/yBand.d.ts +2 -0
- package/dist/pipeline/spec/pipes/axes/yLinear copy.d.ts +0 -0
- package/dist/pipeline/spec/pipes/axes/yLinear.d.ts +2 -0
- package/dist/pipeline/spec/pipes/dataset/dataset.d.ts +2 -0
- package/dist/pipeline/spec/pipes/dataset/index.d.ts +1 -0
- package/dist/pipeline/spec/pipes/index.d.ts +3 -0
- package/dist/pipeline/spec/pipes/init/bar.d.ts +2 -0
- package/dist/pipeline/spec/pipes/init/column.d.ts +2 -0
- package/dist/pipeline/spec/pipes/init/index.d.ts +2 -0
- package/dist/pipeline/utils/index.d.ts +1 -0
- package/dist/pipeline/utils/pipeline.d.ts +9 -0
- package/dist/types/builder/builder.d.ts +10 -0
- package/dist/types/builder/index.d.ts +1 -0
- package/dist/types/chartType/area/area.d.ts +46 -0
- package/dist/types/chartType/area/index.d.ts +1 -0
- package/dist/types/chartType/areaPercent/areaPercent.d.ts +45 -0
- package/dist/types/chartType/areaPercent/index.d.ts +1 -0
- package/dist/types/chartType/bar/bar.d.ts +45 -0
- package/dist/types/chartType/bar/index.d.ts +1 -0
- package/dist/types/chartType/barParallel/barParallel.d.ts +45 -0
- package/dist/types/chartType/barParallel/index.d.ts +1 -0
- package/dist/types/chartType/barPercent/barPercent.d.ts +45 -0
- package/dist/types/chartType/barPercent/index.d.ts +1 -0
- package/dist/types/chartType/column/column.d.ts +45 -0
- package/dist/types/chartType/column/index.d.ts +1 -0
- package/dist/types/chartType/columnParallel/columnParallel.d.ts +45 -0
- package/dist/types/chartType/columnParallel/index.d.ts +1 -0
- package/dist/types/chartType/columnPercent/columnPercent.d.ts +45 -0
- package/dist/types/chartType/columnPercent/index.d.ts +1 -0
- package/dist/types/chartType/donut/donut.d.ts +45 -0
- package/dist/types/chartType/donut/index.d.ts +1 -0
- package/dist/types/chartType/dualAxis/dualAxis.d.ts +47 -0
- package/dist/types/chartType/dualAxis/index.d.ts +1 -0
- package/dist/types/chartType/index.d.ts +16 -0
- package/dist/types/chartType/line/index.d.ts +1 -0
- package/dist/types/chartType/line/line.d.ts +45 -0
- package/dist/types/chartType/pie/index.d.ts +1 -0
- package/dist/types/chartType/pie/pie.d.ts +45 -0
- package/dist/types/chartType/pivotTable/index.d.ts +1 -0
- package/dist/types/chartType/pivotTable/pivotTable.d.ts +45 -0
- package/dist/types/chartType/rose/index.d.ts +1 -0
- package/dist/types/chartType/rose/rose.d.ts +45 -0
- package/dist/types/chartType/table/index.d.ts +1 -0
- package/dist/types/chartType/table/table.d.ts +45 -0
- package/dist/types/chartType/vseedDSL.d.ts +16 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/pipeline/advancedVSeed/advancedVSeed.d.ts +7 -0
- package/dist/types/pipeline/advancedVSeed/index.d.ts +1 -0
- package/dist/types/pipeline/index.d.ts +3 -0
- package/dist/types/pipeline/pipeline.d.ts +2 -0
- package/dist/types/pipeline/spec/index.d.ts +1 -0
- package/dist/types/pipeline/spec/spec.d.ts +9 -0
- package/dist/types/properties/advancedVSeed.d.ts +105 -0
- package/dist/types/properties/chartType/index.d.ts +2 -0
- package/dist/types/properties/chartType/zChartType.d.ts +36 -0
- package/dist/types/properties/dataset/dataset.d.ts +15 -0
- package/dist/types/properties/dataset/index.d.ts +2 -0
- package/dist/types/properties/datasetReshapeInfo/datasetReshapeInfo.d.ts +34 -0
- package/dist/types/properties/datasetReshapeInfo/index.d.ts +2 -0
- package/dist/types/properties/dimensions/dimensions.d.ts +23 -0
- package/dist/types/properties/dimensions/index.d.ts +2 -0
- package/dist/types/properties/encoding/encoding.d.ts +19 -0
- package/dist/types/properties/encoding/index.d.ts +2 -0
- package/dist/types/properties/index.d.ts +8 -0
- package/dist/types/properties/measures/index.d.ts +2 -0
- package/dist/types/properties/measures/measures.d.ts +109 -0
- package/dist/types/properties/vseed.d.ts +94 -0
- package/package.json +13 -2
package/dist/index.js
CHANGED
@@ -1,2 +1,533 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import { z } from "zod";
|
2
|
+
const FoldMeasureName = '__MeaName__';
|
3
|
+
const FoldMeasureValue = '__MeaValue__';
|
4
|
+
const FoldMeasureId = '__MeaId__';
|
5
|
+
const FoldDimensionGroup = '__DimGroup__';
|
6
|
+
const Separator = '-';
|
7
|
+
const unfoldDimensions = (dataset, dimensions, measures, unfoldStartIndex = 0, foldGroupName = FoldDimensionGroup, dimensionsSeparator = Separator)=>{
|
8
|
+
if (unfoldStartIndex < 0 || unfoldStartIndex >= dimensions.length) throw new Error('unfoldStartIndex is out of range');
|
9
|
+
const dimensionsToBeUnfolded = dimensions.slice(unfoldStartIndex);
|
10
|
+
const unfoldInfo = {
|
11
|
+
groupName: foldGroupName,
|
12
|
+
colorItems: []
|
13
|
+
};
|
14
|
+
if (0 === dimensions.length || 0 === measures.length) return {
|
15
|
+
dataset,
|
16
|
+
unfoldInfo: {
|
17
|
+
groupName: foldGroupName,
|
18
|
+
colorItems: []
|
19
|
+
}
|
20
|
+
};
|
21
|
+
const colorItems = [];
|
22
|
+
for(let i = 0; i < dataset.length; i++){
|
23
|
+
const datum = dataset[i];
|
24
|
+
const colorItem = generateDimGroupName(dimensionsToBeUnfolded, datum, dimensionsSeparator);
|
25
|
+
datum[foldGroupName] = colorItem;
|
26
|
+
colorItems.push(colorItem);
|
27
|
+
}
|
28
|
+
unfoldInfo.colorItems = colorItems;
|
29
|
+
return {
|
30
|
+
dataset,
|
31
|
+
unfoldInfo
|
32
|
+
};
|
33
|
+
};
|
34
|
+
const generateDimGroupName = (dimensionsToBeGrouped, datum, dimensionsSeparator)=>dimensionsToBeGrouped.map((dim)=>String(datum[dim.id])).join(dimensionsSeparator);
|
35
|
+
const foldMeasures = (dataset, measures, measureId = FoldMeasureId, measureName = FoldMeasureName, measureValue = FoldMeasureValue)=>{
|
36
|
+
const foldInfo = {
|
37
|
+
measureId,
|
38
|
+
measureName,
|
39
|
+
measureValue,
|
40
|
+
foldMap: {}
|
41
|
+
};
|
42
|
+
const result = new Array(dataset.length * measures.length);
|
43
|
+
let index = 0;
|
44
|
+
for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
|
45
|
+
const datum = {
|
46
|
+
...dataset[i]
|
47
|
+
};
|
48
|
+
const measure = measures[j];
|
49
|
+
const { id, alias } = measure;
|
50
|
+
datum[measureId] = id;
|
51
|
+
datum[measureName] = alias;
|
52
|
+
datum[measureValue] = dataset[i][id];
|
53
|
+
foldInfo.foldMap[id] = alias;
|
54
|
+
result[index++] = datum;
|
55
|
+
}
|
56
|
+
return {
|
57
|
+
dataset: result,
|
58
|
+
foldInfo
|
59
|
+
};
|
60
|
+
};
|
61
|
+
const emptyReshapeResult = {
|
62
|
+
dataset: [],
|
63
|
+
foldInfo: {
|
64
|
+
foldMap: {},
|
65
|
+
measureId: '',
|
66
|
+
measureName: '',
|
67
|
+
measureValue: ''
|
68
|
+
},
|
69
|
+
unfoldInfo: {
|
70
|
+
colorItems: [],
|
71
|
+
groupName: ''
|
72
|
+
}
|
73
|
+
};
|
74
|
+
const dataReshapeFor2D1M = (dataset, dimensions, measures)=>{
|
75
|
+
if (0 === dimensions.length && 0 === measures.length) return emptyReshapeResult;
|
76
|
+
const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, FoldMeasureId, FoldMeasureName, FoldMeasureValue);
|
77
|
+
if (0 === dimensions.length) {
|
78
|
+
const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
|
79
|
+
{
|
80
|
+
id: FoldMeasureId,
|
81
|
+
alias: "\u6307\u6807Id",
|
82
|
+
location: 'dimension'
|
83
|
+
},
|
84
|
+
{
|
85
|
+
id: FoldMeasureName,
|
86
|
+
alias: "\u6307\u6807\u540D\u79F0",
|
87
|
+
location: 'dimension'
|
88
|
+
}
|
89
|
+
], [
|
90
|
+
{
|
91
|
+
id: FoldMeasureValue,
|
92
|
+
alias: "\u6307\u6807\u503C"
|
93
|
+
}
|
94
|
+
], 1, FoldDimensionGroup);
|
95
|
+
return {
|
96
|
+
dataset: finalDataset,
|
97
|
+
foldInfo,
|
98
|
+
unfoldInfo
|
99
|
+
};
|
100
|
+
}
|
101
|
+
{
|
102
|
+
const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
|
103
|
+
...dimensions,
|
104
|
+
{
|
105
|
+
id: FoldMeasureName,
|
106
|
+
alias: "\u6307\u6807\u540D\u79F0",
|
107
|
+
location: 'dimension'
|
108
|
+
}
|
109
|
+
], [
|
110
|
+
{
|
111
|
+
id: FoldMeasureValue,
|
112
|
+
alias: "\u6307\u6807\u503C"
|
113
|
+
}
|
114
|
+
], 1, FoldDimensionGroup);
|
115
|
+
return {
|
116
|
+
dataset: finalDataset,
|
117
|
+
foldInfo,
|
118
|
+
unfoldInfo
|
119
|
+
};
|
120
|
+
}
|
121
|
+
};
|
122
|
+
const dataReshapeFor1D1M_emptyReshapeResult = {
|
123
|
+
dataset: [],
|
124
|
+
foldInfo: {
|
125
|
+
foldMap: {},
|
126
|
+
measureId: '',
|
127
|
+
measureName: '',
|
128
|
+
measureValue: ''
|
129
|
+
},
|
130
|
+
unfoldInfo: {
|
131
|
+
groupName: '',
|
132
|
+
colorItems: []
|
133
|
+
}
|
134
|
+
};
|
135
|
+
const dataReshapeFor1D1M_dataReshapeFor1D1M = (dataset, dimensions, measures)=>{
|
136
|
+
if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D1M_emptyReshapeResult;
|
137
|
+
const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, FoldMeasureId, FoldMeasureName, FoldMeasureValue);
|
138
|
+
if (0 === dimensions.length) {
|
139
|
+
const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
|
140
|
+
{
|
141
|
+
id: FoldMeasureName,
|
142
|
+
alias: "\u6307\u6807\u540D\u79F0",
|
143
|
+
location: 'dimension'
|
144
|
+
}
|
145
|
+
], [
|
146
|
+
{
|
147
|
+
id: FoldMeasureValue,
|
148
|
+
alias: "\u6307\u6807\u503C"
|
149
|
+
}
|
150
|
+
], 0, FoldDimensionGroup);
|
151
|
+
return {
|
152
|
+
dataset: finalDataset,
|
153
|
+
foldInfo,
|
154
|
+
unfoldInfo
|
155
|
+
};
|
156
|
+
}
|
157
|
+
{
|
158
|
+
const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
|
159
|
+
...dimensions,
|
160
|
+
{
|
161
|
+
id: FoldMeasureName,
|
162
|
+
alias: "\u6307\u6807\u540D\u79F0",
|
163
|
+
location: 'dimension'
|
164
|
+
}
|
165
|
+
], [
|
166
|
+
{
|
167
|
+
id: FoldMeasureValue,
|
168
|
+
alias: "\u6307\u6807\u503C"
|
169
|
+
}
|
170
|
+
], 0, FoldDimensionGroup);
|
171
|
+
return {
|
172
|
+
dataset: finalDataset,
|
173
|
+
foldInfo,
|
174
|
+
unfoldInfo
|
175
|
+
};
|
176
|
+
}
|
177
|
+
};
|
178
|
+
const reshapeTo2D1M = (advancedVSeed, context)=>{
|
179
|
+
const result = {
|
180
|
+
...advancedVSeed
|
181
|
+
};
|
182
|
+
const { vseed } = context;
|
183
|
+
const { dimensions, measures, dataset } = vseed;
|
184
|
+
if (!measures || !dimensions || !dataset) return result;
|
185
|
+
if (0 === measures.length) throw new Error('measures can not be empty');
|
186
|
+
const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, dimensions, measures);
|
187
|
+
return {
|
188
|
+
...result,
|
189
|
+
dataset: newDatasets,
|
190
|
+
datasetReshapeInfo: {
|
191
|
+
foldInfo,
|
192
|
+
unfoldInfo
|
193
|
+
},
|
194
|
+
dimensions,
|
195
|
+
measures
|
196
|
+
};
|
197
|
+
};
|
198
|
+
const encodingCartesian = (advancedVSeed)=>{
|
199
|
+
const result = {
|
200
|
+
...advancedVSeed
|
201
|
+
};
|
202
|
+
const { datasetReshapeInfo, dimensions } = advancedVSeed;
|
203
|
+
if (!datasetReshapeInfo || !dimensions) return result;
|
204
|
+
const { foldInfo, unfoldInfo } = datasetReshapeInfo;
|
205
|
+
const isSingleDimension = 0 === dimensions.length;
|
206
|
+
const x = [
|
207
|
+
isSingleDimension ? foldInfo.measureName : dimensions[0].id
|
208
|
+
];
|
209
|
+
const y = [
|
210
|
+
foldInfo.measureValue
|
211
|
+
];
|
212
|
+
const group = [
|
213
|
+
isSingleDimension ? foldInfo.measureName : unfoldInfo.groupName
|
214
|
+
];
|
215
|
+
const color = [
|
216
|
+
foldInfo.measureName
|
217
|
+
];
|
218
|
+
const encoding = [
|
219
|
+
{
|
220
|
+
x,
|
221
|
+
y,
|
222
|
+
group,
|
223
|
+
color
|
224
|
+
}
|
225
|
+
];
|
226
|
+
return {
|
227
|
+
...result,
|
228
|
+
encoding
|
229
|
+
};
|
230
|
+
};
|
231
|
+
const barAdvancedPipeline = [
|
232
|
+
reshapeTo2D1M,
|
233
|
+
encodingCartesian
|
234
|
+
];
|
235
|
+
const columnAdvancedPipeline = [
|
236
|
+
reshapeTo2D1M,
|
237
|
+
encodingCartesian
|
238
|
+
];
|
239
|
+
const dataset_dataset = (spec, context)=>{
|
240
|
+
const { advancedVSeed } = context;
|
241
|
+
return {
|
242
|
+
...spec,
|
243
|
+
data: {
|
244
|
+
values: advancedVSeed.dataset
|
245
|
+
}
|
246
|
+
};
|
247
|
+
};
|
248
|
+
const initColumn = (spec, context)=>{
|
249
|
+
const result = {
|
250
|
+
...spec
|
251
|
+
};
|
252
|
+
const { advancedVSeed } = context;
|
253
|
+
const { encoding } = advancedVSeed;
|
254
|
+
result.type = 'bar';
|
255
|
+
result.direction = 'vertical';
|
256
|
+
result.xField = encoding[0].x?.[0];
|
257
|
+
result.yField = encoding[0].y?.[0];
|
258
|
+
result.seriesField = encoding[0].group?.[0];
|
259
|
+
result.data = {
|
260
|
+
values: advancedVSeed.dataset
|
261
|
+
};
|
262
|
+
return result;
|
263
|
+
};
|
264
|
+
const initBar = (spec, context)=>{
|
265
|
+
const result = {
|
266
|
+
...spec
|
267
|
+
};
|
268
|
+
const { advancedVSeed } = context;
|
269
|
+
const { encoding } = advancedVSeed;
|
270
|
+
result.type = 'bar';
|
271
|
+
result.direction = 'horizontal';
|
272
|
+
result.yField = encoding[0].x?.[0];
|
273
|
+
result.xField = encoding[0].y?.[0];
|
274
|
+
result.seriesField = encoding[0].group?.[0];
|
275
|
+
return result;
|
276
|
+
};
|
277
|
+
const xBand = (spec)=>{
|
278
|
+
const result = {
|
279
|
+
...spec
|
280
|
+
};
|
281
|
+
if (!result.axes) result.axes = [];
|
282
|
+
result.axes = [
|
283
|
+
...result.axes,
|
284
|
+
{
|
285
|
+
visible: true,
|
286
|
+
type: 'band',
|
287
|
+
orient: 'bottom'
|
288
|
+
}
|
289
|
+
];
|
290
|
+
return result;
|
291
|
+
};
|
292
|
+
const xLinear = (spec)=>{
|
293
|
+
const result = {
|
294
|
+
...spec
|
295
|
+
};
|
296
|
+
if (!result.axes) result.axes = [];
|
297
|
+
result.axes = [
|
298
|
+
...result.axes,
|
299
|
+
{
|
300
|
+
visible: true,
|
301
|
+
type: 'linear',
|
302
|
+
orient: 'bottom'
|
303
|
+
}
|
304
|
+
];
|
305
|
+
return result;
|
306
|
+
};
|
307
|
+
const yBand = (spec)=>{
|
308
|
+
const result = {
|
309
|
+
...spec
|
310
|
+
};
|
311
|
+
if (!result.axes) result.axes = [];
|
312
|
+
result.axes = [
|
313
|
+
...result.axes,
|
314
|
+
{
|
315
|
+
visible: true,
|
316
|
+
type: 'band',
|
317
|
+
orient: 'left'
|
318
|
+
}
|
319
|
+
];
|
320
|
+
return result;
|
321
|
+
};
|
322
|
+
const yLinear = (spec)=>{
|
323
|
+
const result = {
|
324
|
+
...spec
|
325
|
+
};
|
326
|
+
if (!result.axes) result.axes = [];
|
327
|
+
result.axes = [
|
328
|
+
...result.axes,
|
329
|
+
{
|
330
|
+
visible: true,
|
331
|
+
type: 'linear',
|
332
|
+
orient: 'left'
|
333
|
+
}
|
334
|
+
];
|
335
|
+
return result;
|
336
|
+
};
|
337
|
+
const columnSpecPipeline = [
|
338
|
+
initColumn,
|
339
|
+
dataset_dataset,
|
340
|
+
xBand,
|
341
|
+
yLinear
|
342
|
+
];
|
343
|
+
const barSpecPipeline = [
|
344
|
+
initBar,
|
345
|
+
dataset_dataset,
|
346
|
+
xLinear,
|
347
|
+
yBand
|
348
|
+
];
|
349
|
+
const execPipeline = (pipeline, context, initialValue = {})=>{
|
350
|
+
const result = pipeline.reduce((prev, cur)=>cur(prev, context), initialValue);
|
351
|
+
return result;
|
352
|
+
};
|
353
|
+
const buildAdvanced = (builder)=>{
|
354
|
+
const { chartType } = builder.vseed;
|
355
|
+
if (!chartType) throw new Error('chartType is nil in buildAdvanced');
|
356
|
+
const pipeline = builder.getAdvancedPipeline(chartType);
|
357
|
+
if (!pipeline) throw new Error(`no advanced pipeline for chartType ${chartType}`);
|
358
|
+
const context = {
|
359
|
+
vseed: builder.vseed
|
360
|
+
};
|
361
|
+
try {
|
362
|
+
return execPipeline(pipeline, context);
|
363
|
+
} catch (e) {
|
364
|
+
console.error(e);
|
365
|
+
throw new Error("buildAdvanced error, see error info in console");
|
366
|
+
}
|
367
|
+
};
|
368
|
+
const buildSpec = (builder, advancedVSeed)=>{
|
369
|
+
const { chartType } = builder.vseed;
|
370
|
+
if (!chartType) throw new Error('chartType is nil in buildSpec');
|
371
|
+
const pipeline = builder.getSpecPipeline(chartType);
|
372
|
+
if (!pipeline) throw new Error(`no spec pipeline for chartType ${chartType}`);
|
373
|
+
const context = {
|
374
|
+
vseed: builder.vseed,
|
375
|
+
advancedVSeed
|
376
|
+
};
|
377
|
+
try {
|
378
|
+
return execPipeline(pipeline, context);
|
379
|
+
} catch (e) {
|
380
|
+
console.error(e);
|
381
|
+
throw new Error("buildSpec error, see error info in console");
|
382
|
+
}
|
383
|
+
};
|
384
|
+
const build = (builder)=>{
|
385
|
+
const advancedVSeed = builder.buildAdvanced();
|
386
|
+
console.log('debug advancedVSeed', advancedVSeed);
|
387
|
+
if (!advancedVSeed) throw new Error('advancedVSeed is null');
|
388
|
+
const spec = builder.buildSpec(advancedVSeed);
|
389
|
+
console.log('debug spec', spec);
|
390
|
+
return spec;
|
391
|
+
};
|
392
|
+
class Builder {
|
393
|
+
_vseed;
|
394
|
+
_advancedVSeed;
|
395
|
+
static _advancedPipelineMap = {};
|
396
|
+
static _specPipelineMap = {};
|
397
|
+
static from = (vseed)=>new Builder(vseed);
|
398
|
+
constructor(vseed){
|
399
|
+
this._vseed = vseed;
|
400
|
+
this._advancedVSeed = null;
|
401
|
+
}
|
402
|
+
build = ()=>build(this);
|
403
|
+
buildSpec = (advanced)=>buildSpec(this, advanced);
|
404
|
+
buildAdvanced = ()=>buildAdvanced(this);
|
405
|
+
getAdvancedPipeline = (chartType)=>Builder._advancedPipelineMap[chartType];
|
406
|
+
getSpecPipeline = (chartType)=>Builder._specPipelineMap[chartType];
|
407
|
+
get vseed() {
|
408
|
+
return this._vseed;
|
409
|
+
}
|
410
|
+
set vseed(value) {
|
411
|
+
this._vseed = value;
|
412
|
+
}
|
413
|
+
get advancedVSeed() {
|
414
|
+
return this._advancedVSeed;
|
415
|
+
}
|
416
|
+
set advancedVSeed(value) {
|
417
|
+
this._advancedVSeed = value;
|
418
|
+
}
|
419
|
+
}
|
420
|
+
const registerAll = ()=>{
|
421
|
+
registerColumn();
|
422
|
+
registerBar();
|
423
|
+
};
|
424
|
+
const registerColumn = ()=>{
|
425
|
+
Builder._advancedPipelineMap.column = columnAdvancedPipeline;
|
426
|
+
Builder._specPipelineMap.column = columnSpecPipeline;
|
427
|
+
};
|
428
|
+
const registerBar = ()=>{
|
429
|
+
Builder._advancedPipelineMap.bar = barAdvancedPipeline;
|
430
|
+
Builder._specPipelineMap.bar = barSpecPipeline;
|
431
|
+
};
|
432
|
+
const zChartType = z["enum"]([
|
433
|
+
'table',
|
434
|
+
'pivotTable',
|
435
|
+
'line',
|
436
|
+
'column',
|
437
|
+
'columnPercent',
|
438
|
+
'columnParallel',
|
439
|
+
'bar',
|
440
|
+
'barPercent',
|
441
|
+
'barParallel',
|
442
|
+
'area',
|
443
|
+
'areaPercent',
|
444
|
+
'rose',
|
445
|
+
'pie',
|
446
|
+
'donut',
|
447
|
+
'dualAxis'
|
448
|
+
]);
|
449
|
+
const zDatum = z.record(z.string().or(z.number()), z.any());
|
450
|
+
const zDataset = z.array(zDatum);
|
451
|
+
const zDimension = z.object({
|
452
|
+
id: z.string(),
|
453
|
+
alias: z.string().optional(),
|
454
|
+
visible: z.boolean().default(true).optional(),
|
455
|
+
location: z["enum"]([
|
456
|
+
'dimension',
|
457
|
+
'rowDimension',
|
458
|
+
'columnDimension'
|
459
|
+
])
|
460
|
+
});
|
461
|
+
const zDimensions = z.array(zDimension).optional();
|
462
|
+
const zMeasure = z.object({
|
463
|
+
id: z.string(),
|
464
|
+
alias: z.string().optional(),
|
465
|
+
visible: z.boolean().default(true).optional(),
|
466
|
+
autoFormat: z.boolean().default(true).optional(),
|
467
|
+
format: z.object({
|
468
|
+
type: z["enum"]([
|
469
|
+
'number',
|
470
|
+
'percent',
|
471
|
+
'permille'
|
472
|
+
]).optional().default('number'),
|
473
|
+
ratio: z.number().optional().default(1),
|
474
|
+
symbol: z.string().optional().default(''),
|
475
|
+
thousandSeparator: z.boolean().optional().default(false),
|
476
|
+
decimalPlaces: z.number().optional().default(2),
|
477
|
+
round: z["enum"]([
|
478
|
+
'round',
|
479
|
+
'floor',
|
480
|
+
'ceil'
|
481
|
+
]).optional().default('round'),
|
482
|
+
prefix: z.string().optional().default(''),
|
483
|
+
suffix: z.string().optional().default('')
|
484
|
+
}).optional()
|
485
|
+
});
|
486
|
+
const zMeasureGroup = z.object({
|
487
|
+
id: z.string(),
|
488
|
+
alias: z.string().optional(),
|
489
|
+
visible: z.boolean().default(true).optional(),
|
490
|
+
get children () {
|
491
|
+
return z.array(zMeasureGroup.or(zMeasure)).optional();
|
492
|
+
}
|
493
|
+
});
|
494
|
+
const zMeasures = z.array(zMeasureGroup.or(zMeasure)).optional();
|
495
|
+
const zVSeed = z.object({
|
496
|
+
chartType: zChartType,
|
497
|
+
dataset: zDataset,
|
498
|
+
dimensions: zDimensions,
|
499
|
+
measures: zMeasures
|
500
|
+
});
|
501
|
+
const VSeedJSONSchema = z.toJSONSchema(zVSeed);
|
502
|
+
const zEncoding = z.array(z.object({
|
503
|
+
x: z.array(z.string()).optional(),
|
504
|
+
y: z.array(z.string()).optional(),
|
505
|
+
color: z.array(z.string()).optional(),
|
506
|
+
group: z.array(z.string()).optional(),
|
507
|
+
angle: z.array(z.string()).optional(),
|
508
|
+
radius: z.array(z.string()).optional(),
|
509
|
+
tooltip: z.array(z.string()).optional()
|
510
|
+
}));
|
511
|
+
const zFoldInfo = z.object({
|
512
|
+
foldMap: z.record(z.string(), z.string().or(z.undefined())),
|
513
|
+
measureId: z.string(),
|
514
|
+
measureName: z.string(),
|
515
|
+
measureValue: z.string()
|
516
|
+
});
|
517
|
+
const zUnfoldInfo = z.object({
|
518
|
+
colorItems: z.array(z.string()),
|
519
|
+
groupName: z.string()
|
520
|
+
});
|
521
|
+
const zDatasetReshapeInfo = z.object({
|
522
|
+
foldInfo: zFoldInfo,
|
523
|
+
unfoldInfo: zUnfoldInfo
|
524
|
+
});
|
525
|
+
const zAdvancedVSeed = z.object({
|
526
|
+
chartType: zChartType,
|
527
|
+
dataset: zDataset,
|
528
|
+
datasetReshapeInfo: zDatasetReshapeInfo,
|
529
|
+
dimensions: zDimensions,
|
530
|
+
measures: zMeasures,
|
531
|
+
encoding: zEncoding
|
532
|
+
});
|
533
|
+
export { Builder, VSeedJSONSchema, barAdvancedPipeline, barSpecPipeline, columnAdvancedPipeline, columnSpecPipeline, dataReshapeFor1D1M_dataReshapeFor1D1M as dataReshapeFor1D1M, dataReshapeFor2D1M, execPipeline, foldMeasures, registerAll, registerBar, registerColumn, unfoldDimensions, zAdvancedVSeed, zChartType, zDataset, zDatasetReshapeInfo, zDatum, zDimension, zDimensions, zEncoding, zFoldInfo, zMeasure, zMeasureGroup, zMeasures, zUnfoldInfo, zVSeed };
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './pipeline';
|
@@ -0,0 +1 @@
|
|
1
|
+
export { encodingCartesian } from './encodingCartesian';
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './pipeline';
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
export { dataset } from './dataset';
|
@@ -0,0 +1 @@
|
|
1
|
+
export { execPipeline } from './pipeline';
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import type { ExecPipelineType } from '../../types';
|
2
|
+
/**
|
3
|
+
* 执行pipeline, 每个pipe负责构建结果的一部分, 构建完成后得到完整的目标结果
|
4
|
+
* @param pipeline pipeline数组, 每个pipe负责构建结果的一部分
|
5
|
+
* @param initialValue 初始值
|
6
|
+
* @param context 上下文
|
7
|
+
* @returns 执行后的结果
|
8
|
+
*/
|
9
|
+
export declare const execPipeline: ExecPipelineType;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import type { ISpec } from '@visactor/vchart';
|
2
|
+
import type { AdvancedVSeed, VSeed } from '../properties';
|
3
|
+
export interface VSeedBuilder {
|
4
|
+
build: () => ISpec;
|
5
|
+
buildAdvanced: () => AdvancedVSeed | null;
|
6
|
+
buildSpec: (advancedVSeed: AdvancedVSeed) => ISpec;
|
7
|
+
get vseed(): VSeed;
|
8
|
+
get advancedVSeed(): VSeed | null;
|
9
|
+
set advancedVSeed(value: VSeed | null);
|
10
|
+
}
|