@uwdata/mosaic-spec 0.21.1 → 0.23.0
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/src/ast/ASTNode.js +37 -0
- package/dist/src/ast/ASTNode.js.map +1 -0
- package/dist/src/ast/ColumnParamRefNode.js +18 -0
- package/dist/src/ast/ColumnParamRefNode.js.map +1 -0
- package/dist/src/ast/DataNode.js +255 -0
- package/dist/src/ast/DataNode.js.map +1 -0
- package/dist/src/ast/ExpressionNode.js +52 -0
- package/dist/src/ast/ExpressionNode.js.map +1 -0
- package/dist/src/ast/HConcatNode.js +24 -0
- package/dist/src/ast/HConcatNode.js.map +1 -0
- package/dist/src/ast/HSpaceNode.js +21 -0
- package/dist/src/ast/HSpaceNode.js.map +1 -0
- package/dist/src/ast/InputNode.js +29 -0
- package/dist/src/ast/InputNode.js.map +1 -0
- package/dist/src/ast/LiteralNode.js +18 -0
- package/dist/src/ast/LiteralNode.js.map +1 -0
- package/dist/src/ast/OptionsNode.js +45 -0
- package/dist/src/ast/OptionsNode.js.map +1 -0
- package/dist/src/ast/ParamNode.js +50 -0
- package/dist/src/ast/ParamNode.js.map +1 -0
- package/dist/src/ast/ParamRefNode.js +19 -0
- package/dist/src/ast/ParamRefNode.js.map +1 -0
- package/dist/src/ast/PlotAttributeNode.js +43 -0
- package/dist/src/ast/PlotAttributeNode.js.map +1 -0
- package/dist/src/ast/PlotFromNode.js +38 -0
- package/dist/src/ast/PlotFromNode.js.map +1 -0
- package/dist/src/ast/PlotInteractorNode.js +29 -0
- package/dist/src/ast/PlotInteractorNode.js.map +1 -0
- package/dist/src/ast/PlotLegendNode.js +31 -0
- package/dist/src/ast/PlotLegendNode.js.map +1 -0
- package/dist/src/ast/PlotMarkNode.js +68 -0
- package/dist/src/ast/PlotMarkNode.js.map +1 -0
- package/dist/src/ast/PlotNode.js +55 -0
- package/dist/src/ast/PlotNode.js.map +1 -0
- package/dist/src/ast/SelectionNode.js +52 -0
- package/dist/src/ast/SelectionNode.js.map +1 -0
- package/dist/src/ast/SpecNode.js +43 -0
- package/dist/src/ast/SpecNode.js.map +1 -0
- package/dist/src/ast/TransformNode.js +129 -0
- package/dist/src/ast/TransformNode.js.map +1 -0
- package/dist/src/ast/VConcatNode.js +24 -0
- package/dist/src/ast/VConcatNode.js.map +1 -0
- package/dist/src/ast/VSpaceNode.js +21 -0
- package/dist/src/ast/VSpaceNode.js.map +1 -0
- package/dist/src/ast/WindowFrameNode.js +54 -0
- package/dist/src/ast/WindowFrameNode.js.map +1 -0
- package/dist/src/ast-to-dom.js +68 -0
- package/dist/src/ast-to-dom.js.map +1 -0
- package/dist/src/ast-to-esm.js +180 -0
- package/dist/src/ast-to-esm.js.map +1 -0
- package/dist/src/config/components.js +25 -0
- package/dist/src/config/components.js.map +1 -0
- package/dist/src/config/extensions.js +21 -0
- package/dist/src/config/extensions.js.map +1 -0
- package/dist/src/config/inputs.js +14 -0
- package/dist/src/config/inputs.js.map +1 -0
- package/dist/src/config/plots.js +48 -0
- package/dist/src/config/plots.js.map +1 -0
- package/dist/src/config/transforms.js +57 -0
- package/dist/src/config/transforms.js.map +1 -0
- package/dist/src/constants.js +44 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.d.ts +5 -8
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +26 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/parse-spec.js +148 -0
- package/dist/src/parse-spec.js.map +1 -0
- package/dist/src/spec/CSSStyles.js +2 -0
- package/dist/src/spec/CSSStyles.js.map +1 -0
- package/dist/src/spec/Data.js +2 -0
- package/dist/src/spec/Data.js.map +1 -0
- package/dist/src/spec/Expression.js +2 -0
- package/dist/src/spec/Expression.js.map +1 -0
- package/dist/src/spec/HConcat.js +2 -0
- package/dist/src/spec/HConcat.js.map +1 -0
- package/dist/src/spec/HSpace.js +2 -0
- package/dist/src/spec/HSpace.js.map +1 -0
- package/dist/src/spec/Input.js +2 -0
- package/dist/src/spec/Input.js.map +1 -0
- package/dist/src/spec/Interval.js +2 -0
- package/dist/src/spec/Interval.js.map +1 -0
- package/dist/src/spec/Param.js +2 -0
- package/dist/src/spec/Param.js.map +1 -0
- package/dist/src/spec/Plot.js +2 -0
- package/dist/src/spec/Plot.js.map +1 -0
- package/dist/src/spec/PlotAttribute.js +2 -0
- package/dist/src/spec/PlotAttribute.js.map +1 -0
- package/dist/src/spec/PlotFrom.js +2 -0
- package/dist/src/spec/PlotFrom.js.map +1 -0
- package/dist/src/spec/PlotInteractor.js +2 -0
- package/dist/src/spec/PlotInteractor.js.map +1 -0
- package/dist/src/spec/PlotLegend.js +2 -0
- package/dist/src/spec/PlotLegend.js.map +1 -0
- package/dist/src/spec/PlotMark.js +2 -0
- package/dist/src/spec/PlotMark.js.map +1 -0
- package/dist/src/spec/PlotTypes.js +2 -0
- package/dist/src/spec/PlotTypes.js.map +1 -0
- package/dist/src/spec/Spec.js +2 -0
- package/dist/src/spec/Spec.js.map +1 -0
- package/dist/src/spec/Transform.js +2 -0
- package/dist/src/spec/Transform.js.map +1 -0
- package/dist/src/spec/VConcat.js +2 -0
- package/dist/src/spec/VConcat.js.map +1 -0
- package/dist/src/spec/VSpace.js +2 -0
- package/dist/src/spec/VSpace.js.map +1 -0
- package/dist/src/spec/index.d.ts +22 -0
- package/dist/src/spec/index.d.ts.map +1 -0
- package/dist/src/spec/index.js +2 -0
- package/dist/src/spec/index.js.map +1 -0
- package/dist/src/spec/interactors/BrushStyles.js +2 -0
- package/dist/src/spec/interactors/BrushStyles.js.map +1 -0
- package/dist/src/spec/interactors/Highlight.js +2 -0
- package/dist/src/spec/interactors/Highlight.js.map +1 -0
- package/dist/src/spec/interactors/Interval1D.js +2 -0
- package/dist/src/spec/interactors/Interval1D.js.map +1 -0
- package/dist/src/spec/interactors/Interval2D.js +2 -0
- package/dist/src/spec/interactors/Interval2D.js.map +1 -0
- package/dist/src/spec/interactors/Nearest.js +2 -0
- package/dist/src/spec/interactors/Nearest.js.map +1 -0
- package/dist/src/spec/interactors/PanZoom.js +2 -0
- package/dist/src/spec/interactors/PanZoom.js.map +1 -0
- package/dist/src/spec/interactors/Region.js +2 -0
- package/dist/src/spec/interactors/Region.js.map +1 -0
- package/dist/src/spec/interactors/Toggle.js +2 -0
- package/dist/src/spec/interactors/Toggle.js.map +1 -0
- package/dist/src/spec/interactors/index.d.ts +9 -0
- package/dist/src/spec/interactors/index.d.ts.map +1 -0
- package/dist/src/spec/interactors/index.js +2 -0
- package/dist/src/spec/interactors/index.js.map +1 -0
- package/dist/src/spec/marks/Area.js +2 -0
- package/dist/src/spec/marks/Area.js.map +1 -0
- package/dist/src/spec/marks/Arrow.js +2 -0
- package/dist/src/spec/marks/Arrow.js.map +1 -0
- package/dist/src/spec/marks/Axis.js +2 -0
- package/dist/src/spec/marks/Axis.js.map +1 -0
- package/dist/src/spec/marks/Bar.js +2 -0
- package/dist/src/spec/marks/Bar.js.map +1 -0
- package/dist/src/spec/marks/Cell.js +2 -0
- package/dist/src/spec/marks/Cell.js.map +1 -0
- package/dist/src/spec/marks/Contour.js +2 -0
- package/dist/src/spec/marks/Contour.js.map +1 -0
- package/dist/src/spec/marks/Delaunay.js +2 -0
- package/dist/src/spec/marks/Delaunay.js.map +1 -0
- package/dist/src/spec/marks/DenseLine.js +2 -0
- package/dist/src/spec/marks/DenseLine.js.map +1 -0
- package/dist/src/spec/marks/Density.js +2 -0
- package/dist/src/spec/marks/Density.js.map +1 -0
- package/dist/src/spec/marks/Dot.js +2 -0
- package/dist/src/spec/marks/Dot.js.map +1 -0
- package/dist/src/spec/marks/ErrorBar.js +2 -0
- package/dist/src/spec/marks/ErrorBar.js.map +1 -0
- package/dist/src/spec/marks/Frame.js +2 -0
- package/dist/src/spec/marks/Frame.js.map +1 -0
- package/dist/src/spec/marks/Geo.js +2 -0
- package/dist/src/spec/marks/Geo.js.map +1 -0
- package/dist/src/spec/marks/Hexbin.js +2 -0
- package/dist/src/spec/marks/Hexbin.js.map +1 -0
- package/dist/src/spec/marks/Hexgrid.js +2 -0
- package/dist/src/spec/marks/Hexgrid.js.map +1 -0
- package/dist/src/spec/marks/Image.js +2 -0
- package/dist/src/spec/marks/Image.js.map +1 -0
- package/dist/src/spec/marks/Line.js +2 -0
- package/dist/src/spec/marks/Line.js.map +1 -0
- package/dist/src/spec/marks/Link.js +2 -0
- package/dist/src/spec/marks/Link.js.map +1 -0
- package/dist/src/spec/marks/Marks.js +2 -0
- package/dist/src/spec/marks/Marks.js.map +1 -0
- package/dist/src/spec/marks/Raster.js +2 -0
- package/dist/src/spec/marks/Raster.js.map +1 -0
- package/dist/src/spec/marks/Rect.js +2 -0
- package/dist/src/spec/marks/Rect.js.map +1 -0
- package/dist/src/spec/marks/Regression.js +2 -0
- package/dist/src/spec/marks/Regression.js.map +1 -0
- package/dist/src/spec/marks/Rule.js +2 -0
- package/dist/src/spec/marks/Rule.js.map +1 -0
- package/dist/src/spec/marks/Text.js +2 -0
- package/dist/src/spec/marks/Text.js.map +1 -0
- package/dist/src/spec/marks/Tick.js +2 -0
- package/dist/src/spec/marks/Tick.js.map +1 -0
- package/dist/src/spec/marks/Vector.js +2 -0
- package/dist/src/spec/marks/Vector.js.map +1 -0
- package/dist/src/spec/marks/Waffle.js +2 -0
- package/dist/src/spec/marks/Waffle.js.map +1 -0
- package/dist/src/spec/marks/index.d.ts +28 -0
- package/dist/src/spec/marks/index.d.ts.map +1 -0
- package/dist/src/spec/marks/index.js +2 -0
- package/dist/src/spec/marks/index.js.map +1 -0
- package/dist/src/util.js +45 -0
- package/dist/src/util.js.map +1 -0
- package/package.json +12 -12
- package/src/constants.js +32 -32
- package/src/index.ts +39 -0
- package/src/spec/index.ts +25 -0
- package/src/spec/interactors/index.ts +8 -0
- package/src/spec/marks/index.ts +27 -0
- package/src/index.js +0 -40
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ASTNode } from './ASTNode.js';
|
|
2
|
+
import { ATTRIBUTE, FIXED, LITERAL } from '../constants.js';
|
|
3
|
+
export function parseAttribute(key, value, ctx) {
|
|
4
|
+
if (!ctx.plot?.attributes?.has(key)) {
|
|
5
|
+
ctx.error(`Unrecognized attribute: ${key}`);
|
|
6
|
+
}
|
|
7
|
+
return new PlotAttributeNode(key, value === FIXED ? new PlotFixedNode : ctx.maybeParam(value));
|
|
8
|
+
}
|
|
9
|
+
export class PlotAttributeNode extends ASTNode {
|
|
10
|
+
constructor(name, value) {
|
|
11
|
+
super(ATTRIBUTE);
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.value = value;
|
|
14
|
+
}
|
|
15
|
+
instantiate(ctx) {
|
|
16
|
+
const { name, value } = this;
|
|
17
|
+
return ctx.api[name](value.instantiate(ctx));
|
|
18
|
+
}
|
|
19
|
+
codegen(ctx) {
|
|
20
|
+
const { name, value } = this;
|
|
21
|
+
return `${ctx.tab()}${ctx.ns()}${name}(${value.codegen(ctx)})`;
|
|
22
|
+
}
|
|
23
|
+
toJSON() {
|
|
24
|
+
const { name, value } = this;
|
|
25
|
+
return { [name]: value.toJSON() };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export class PlotFixedNode extends ASTNode {
|
|
29
|
+
constructor() {
|
|
30
|
+
super(LITERAL);
|
|
31
|
+
this.value = FIXED;
|
|
32
|
+
}
|
|
33
|
+
instantiate(ctx) {
|
|
34
|
+
return ctx.api[FIXED];
|
|
35
|
+
}
|
|
36
|
+
codegen(ctx) {
|
|
37
|
+
return `${ctx.ns()}${FIXED}`;
|
|
38
|
+
}
|
|
39
|
+
toJSON() {
|
|
40
|
+
return this.value;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=PlotAttributeNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlotAttributeNode.js","sourceRoot":"","sources":["../../../src/ast/PlotAttributeNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,UAAU,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG;IAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,iBAAiB,CAC1B,GAAG,EACH,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAC5D,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,iBAAkB,SAAQ,OAAO;IAC5C,YAAY,IAAI,EAAE,KAAK;QACrB,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,GAAG;QACT,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IACjE,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,OAAO;IACxC;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,GAAG;QACT,OAAO,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { isArray } from '../util.js';
|
|
2
|
+
import { ASTNode } from './ASTNode.js';
|
|
3
|
+
import { FROM } from '../constants.js';
|
|
4
|
+
import { LiteralNode } from './LiteralNode.js';
|
|
5
|
+
import { parseOptions } from './OptionsNode.js';
|
|
6
|
+
export function parseMarkData(spec, ctx) {
|
|
7
|
+
if (!spec) {
|
|
8
|
+
// no data, likely a decoration mark
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
if (isArray(spec)) {
|
|
12
|
+
// data provided directly, treat as JSON literal
|
|
13
|
+
return new LiteralNode(spec);
|
|
14
|
+
}
|
|
15
|
+
const { from: table, ...options } = spec;
|
|
16
|
+
return new PlotFromNode(ctx.maybeParam(table), parseOptions(options, ctx));
|
|
17
|
+
}
|
|
18
|
+
export class PlotFromNode extends ASTNode {
|
|
19
|
+
constructor(table, options) {
|
|
20
|
+
super(FROM);
|
|
21
|
+
this.table = table;
|
|
22
|
+
this.options = options;
|
|
23
|
+
}
|
|
24
|
+
instantiate(ctx) {
|
|
25
|
+
const { table, options } = this;
|
|
26
|
+
return ctx.api[FROM](table.instantiate(ctx), options.instantiate(ctx));
|
|
27
|
+
}
|
|
28
|
+
codegen(ctx) {
|
|
29
|
+
const table = this.table.codegen(ctx);
|
|
30
|
+
const opt = this.options.codegen(ctx);
|
|
31
|
+
return `${ctx.ns()}${this.type}(${table}${opt ? ', ' + opt : ''})`;
|
|
32
|
+
}
|
|
33
|
+
toJSON() {
|
|
34
|
+
const { type, table, options } = this;
|
|
35
|
+
return { [type]: table.toJSON(), ...options.toJSON() };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=PlotFromNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlotFromNode.js","sourceRoot":"","sources":["../../../src/ast/PlotFromNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,aAAa,CAAC,IAAI,EAAE,GAAG;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,oCAAoC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,gDAAgD;QAChD,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IACzC,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,OAAO;IACvC,YAAY,KAAK,EAAE,OAAO;QACxB,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAChC,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,GAAG;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IACrE,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACtC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ASTNode } from './ASTNode.js';
|
|
2
|
+
import { INTERACTOR, SELECT } from '../constants.js';
|
|
3
|
+
import { parseOptions } from './OptionsNode.js';
|
|
4
|
+
export function parseInteractor(spec, ctx) {
|
|
5
|
+
const { [SELECT]: name, ...options } = spec;
|
|
6
|
+
if (!ctx.plot?.interactors?.has(name)) {
|
|
7
|
+
ctx.error(`Unrecognized interactor type: ${name}`, spec);
|
|
8
|
+
}
|
|
9
|
+
return new PlotInteractorNode(name, parseOptions(options, ctx));
|
|
10
|
+
}
|
|
11
|
+
export class PlotInteractorNode extends ASTNode {
|
|
12
|
+
constructor(name, options) {
|
|
13
|
+
super(INTERACTOR);
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.options = options;
|
|
16
|
+
}
|
|
17
|
+
instantiate(ctx) {
|
|
18
|
+
return ctx.api[this.name](this.options.instantiate(ctx));
|
|
19
|
+
}
|
|
20
|
+
codegen(ctx) {
|
|
21
|
+
const opt = this.options.codegen(ctx);
|
|
22
|
+
return `${ctx.tab()}${ctx.ns()}${this.name}(${opt})`;
|
|
23
|
+
}
|
|
24
|
+
toJSON() {
|
|
25
|
+
const { name, options } = this;
|
|
26
|
+
return { [SELECT]: name, ...options.toJSON() };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=PlotInteractorNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlotInteractorNode.js","sourceRoot":"","sources":["../../../src/ast/PlotInteractorNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,eAAe,CAAC,IAAI,EAAE,GAAG;IACvC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,KAAK,CAAC,iCAAiC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,kBAAkB,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,OAAO,kBAAmB,SAAQ,OAAO;IAC7C,YAAY,IAAI,EAAE,OAAO;QACvB,KAAK,CAAC,UAAU,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;IACvD,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ASTNode } from './ASTNode.js';
|
|
2
|
+
import { LEGEND } from '../constants.js';
|
|
3
|
+
import { parseOptions } from './OptionsNode.js';
|
|
4
|
+
export function parseLegend(spec, ctx) {
|
|
5
|
+
const { [LEGEND]: name, ...options } = spec;
|
|
6
|
+
const key = `${name}Legend`;
|
|
7
|
+
if (!ctx.plot?.legends?.has(key)) {
|
|
8
|
+
ctx.error(`Unrecognized legend type: ${name}`, spec);
|
|
9
|
+
}
|
|
10
|
+
return new PlotLegendNode(key, name, parseOptions(options, ctx));
|
|
11
|
+
}
|
|
12
|
+
export class PlotLegendNode extends ASTNode {
|
|
13
|
+
constructor(key, name, options) {
|
|
14
|
+
super(LEGEND);
|
|
15
|
+
this.key = key;
|
|
16
|
+
this.name = name;
|
|
17
|
+
this.options = options;
|
|
18
|
+
}
|
|
19
|
+
instantiate(ctx) {
|
|
20
|
+
return ctx.api[this.key](this.options.instantiate(ctx));
|
|
21
|
+
}
|
|
22
|
+
codegen(ctx) {
|
|
23
|
+
const opt = this.options.codegen(ctx);
|
|
24
|
+
return `${ctx.tab()}${ctx.ns()}${this.key}(${opt})`;
|
|
25
|
+
}
|
|
26
|
+
toJSON() {
|
|
27
|
+
const { type, name, options } = this;
|
|
28
|
+
return { [type]: name, ...options.toJSON() };
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=PlotLegendNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlotLegendNode.js","sourceRoot":"","sources":["../../../src/ast/PlotLegendNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,WAAW,CAAC,IAAI,EAAE,GAAG;IACnC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,CAAC;IAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,KAAK,CAAC,6BAA6B,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,OAAO;IACzC,YAAY,GAAG,EAAE,IAAI,EAAE,OAAO;QAC5B,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,GAAG;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;IACtD,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACrC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { MARK, SQL } from '../constants.js';
|
|
2
|
+
import { isObject } from '../util.js';
|
|
3
|
+
import { ASTNode } from './ASTNode.js';
|
|
4
|
+
import { parseExpression } from './ExpressionNode.js';
|
|
5
|
+
import { OptionsNode } from './OptionsNode.js';
|
|
6
|
+
import { parseMarkData } from './PlotFromNode.js';
|
|
7
|
+
import { parseTransform } from './TransformNode.js';
|
|
8
|
+
function maybeTransform(value, ctx) {
|
|
9
|
+
if (isObject(value)) {
|
|
10
|
+
return value[SQL]
|
|
11
|
+
? parseExpression(value, ctx)
|
|
12
|
+
: parseTransform(value, ctx);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function parseMark(spec, ctx) {
|
|
16
|
+
const { mark, data, ...options } = spec;
|
|
17
|
+
if (!ctx.plot?.marks?.has(mark)) {
|
|
18
|
+
ctx.error(`Unrecognized mark type: ${mark}`, spec);
|
|
19
|
+
}
|
|
20
|
+
const input = parseMarkData(data, ctx);
|
|
21
|
+
const opt = {};
|
|
22
|
+
for (const key in options) {
|
|
23
|
+
const value = options[key];
|
|
24
|
+
opt[key] = maybeTransform(value, ctx) || ctx.maybeParam(value);
|
|
25
|
+
}
|
|
26
|
+
return new PlotMarkNode(mark, input, new OptionsNode(opt));
|
|
27
|
+
}
|
|
28
|
+
export class PlotMarkNode extends ASTNode {
|
|
29
|
+
constructor(name, data, options) {
|
|
30
|
+
super(MARK);
|
|
31
|
+
this.name = name;
|
|
32
|
+
this.data = data;
|
|
33
|
+
this.options = options;
|
|
34
|
+
}
|
|
35
|
+
instantiate(ctx) {
|
|
36
|
+
const { name, data, options } = this;
|
|
37
|
+
const opt = options.instantiate(ctx);
|
|
38
|
+
return data
|
|
39
|
+
? ctx.api[name](data.instantiate(ctx), opt)
|
|
40
|
+
: ctx.api[name](opt);
|
|
41
|
+
}
|
|
42
|
+
codegen(ctx) {
|
|
43
|
+
const { name, data, options } = this;
|
|
44
|
+
const d = data ? data.codegen(ctx) : '';
|
|
45
|
+
const o = options.codegen(ctx);
|
|
46
|
+
let arg;
|
|
47
|
+
if (d && o) {
|
|
48
|
+
ctx.indent();
|
|
49
|
+
const opt = options.codegen(ctx);
|
|
50
|
+
arg = `\n${ctx.tab()}${d},\n${ctx.tab()}${opt}\n`;
|
|
51
|
+
ctx.undent();
|
|
52
|
+
arg += ctx.tab();
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
arg = `${d}${o}`;
|
|
56
|
+
}
|
|
57
|
+
return `${ctx.tab()}${ctx.ns()}${name}(${arg})`;
|
|
58
|
+
}
|
|
59
|
+
toJSON() {
|
|
60
|
+
const { type, name, data, options } = this;
|
|
61
|
+
return {
|
|
62
|
+
[type]: name,
|
|
63
|
+
...(data ? { data: data.toJSON() } : {}),
|
|
64
|
+
...options.toJSON()
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=PlotMarkNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlotMarkNode.js","sourceRoot":"","sources":["../../../src/ast/PlotMarkNode.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { isString } from '../util.js';
|
|
2
|
+
import { ASTNode } from './ASTNode.js';
|
|
3
|
+
import { PLOT } from '../constants.js';
|
|
4
|
+
import { parseAttribute } from './PlotAttributeNode.js';
|
|
5
|
+
import { parseInteractor } from './PlotInteractorNode.js';
|
|
6
|
+
import { parseLegend } from './PlotLegendNode.js';
|
|
7
|
+
import { parseMark } from './PlotMarkNode.js';
|
|
8
|
+
export function parseTopLevelMark(spec, ctx) {
|
|
9
|
+
return parsePlot({ plot: [spec] }, ctx);
|
|
10
|
+
}
|
|
11
|
+
export function parsePlot(spec, ctx) {
|
|
12
|
+
const { [PLOT]: entries, ...attrs } = spec;
|
|
13
|
+
const attributes = Object.entries(attrs)
|
|
14
|
+
.map(([key, value]) => parseAttribute(key, value, ctx));
|
|
15
|
+
const children = entries.map(spec => {
|
|
16
|
+
return isString(spec.mark) ? parseMark(spec, ctx)
|
|
17
|
+
: isString(spec.legend) ? parseLegend(spec, ctx)
|
|
18
|
+
: isString(spec.select) ? parseInteractor(spec, ctx)
|
|
19
|
+
: ctx.error(`Invalid plot entry.`, spec);
|
|
20
|
+
});
|
|
21
|
+
return new PlotNode(children, attributes);
|
|
22
|
+
}
|
|
23
|
+
export class PlotNode extends ASTNode {
|
|
24
|
+
constructor(children, attributes) {
|
|
25
|
+
super(PLOT, children);
|
|
26
|
+
this.attributes = attributes;
|
|
27
|
+
}
|
|
28
|
+
instantiate(ctx) {
|
|
29
|
+
const attrs = [
|
|
30
|
+
...(ctx.plotDefaults || []),
|
|
31
|
+
...(this.attributes || [])
|
|
32
|
+
];
|
|
33
|
+
return ctx.api[PLOT](this.children.map(c => c.instantiate(ctx)), attrs.map(a => a.instantiate(ctx)));
|
|
34
|
+
}
|
|
35
|
+
codegen(ctx) {
|
|
36
|
+
const { type, children, attributes } = this;
|
|
37
|
+
ctx.indent();
|
|
38
|
+
const entries = [
|
|
39
|
+
...children.map(c => c.codegen(ctx)),
|
|
40
|
+
...(ctx.plotDefaults?.length ? [`${ctx.tab()}...defaultAttributes`] : []),
|
|
41
|
+
...attributes.map(a => a.codegen(ctx))
|
|
42
|
+
].join(',\n');
|
|
43
|
+
ctx.undent();
|
|
44
|
+
return `${ctx.tab()}${ctx.ns()}${type}(\n${entries}\n${ctx.tab()})`;
|
|
45
|
+
}
|
|
46
|
+
toJSON() {
|
|
47
|
+
const { type, children, attributes } = this;
|
|
48
|
+
const plot = { [type]: children.map(c => c.toJSON()) };
|
|
49
|
+
for (const a of attributes) {
|
|
50
|
+
Object.assign(plot, a.toJSON());
|
|
51
|
+
}
|
|
52
|
+
return plot;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=PlotNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlotNode.js","sourceRoot":"","sources":["../../../src/ast/PlotNode.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ASTNode } from './ASTNode.js';
|
|
2
|
+
import { OptionsNode, parseOptions } from './OptionsNode.js';
|
|
3
|
+
import { INCLUDE, INTERSECT, SELECTION } from '../constants.js';
|
|
4
|
+
import { paramRef, toArray } from '../util.js';
|
|
5
|
+
export function parseSelection(spec, ctx) {
|
|
6
|
+
const { select, include, ...options } = spec;
|
|
7
|
+
const opt = parseOptions(options, ctx);
|
|
8
|
+
if (include) {
|
|
9
|
+
opt.options.include = new IncludeNode(toArray(include).map(ref => ctx.selectionRef(paramRef(ref))));
|
|
10
|
+
}
|
|
11
|
+
return new SelectionNode(select, opt);
|
|
12
|
+
}
|
|
13
|
+
export class SelectionNode extends ASTNode {
|
|
14
|
+
/**
|
|
15
|
+
* Create a Selection AST node.
|
|
16
|
+
* @param {string} select The selection type.
|
|
17
|
+
* @param {OptionsNode} options Selection options.
|
|
18
|
+
*/
|
|
19
|
+
constructor(select = INTERSECT, options = new OptionsNode({})) {
|
|
20
|
+
super(SELECTION);
|
|
21
|
+
this.select = select;
|
|
22
|
+
this.options = options;
|
|
23
|
+
}
|
|
24
|
+
instantiate(ctx) {
|
|
25
|
+
const { select, options } = this;
|
|
26
|
+
return ctx.api.Selection[select](options.instantiate(ctx));
|
|
27
|
+
}
|
|
28
|
+
codegen(ctx) {
|
|
29
|
+
const { select, options } = this;
|
|
30
|
+
return `${ctx.ns()}Selection.${select}(${options.codegen(ctx)})`;
|
|
31
|
+
}
|
|
32
|
+
toJSON() {
|
|
33
|
+
const { select, options } = this;
|
|
34
|
+
return { select, ...options.toJSON() };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export class IncludeNode extends ASTNode {
|
|
38
|
+
constructor(refs) {
|
|
39
|
+
super(INCLUDE);
|
|
40
|
+
this.refs = refs;
|
|
41
|
+
}
|
|
42
|
+
instantiate(ctx) {
|
|
43
|
+
return this.refs.map(ref => ref.instantiate(ctx));
|
|
44
|
+
}
|
|
45
|
+
codegen(ctx) {
|
|
46
|
+
return `[${this.refs.map(ref => ref.codegen(ctx)).join(', ')}]`;
|
|
47
|
+
}
|
|
48
|
+
toJSON() {
|
|
49
|
+
return this.refs.map(ref => ref.toJSON());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=SelectionNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionNode.js","sourceRoot":"","sources":["../../../src/ast/SelectionNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,UAAU,cAAc,CAAC,IAAI,EAAE,GAAG;IACtC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,OAAO,EAAE,CAAC;QACZ,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,WAAW,CACnC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAC7D,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,OAAO;IACxC;;;;OAIG;IACH,YAAY,MAAM,GAAG,SAAS,EAAE,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,SAAS,CAAC,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACjC,OAAO,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,CAAC,GAAG;QACT,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACjC,OAAO,GAAG,GAAG,CAAC,EAAE,EAAE,aAAa,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IACnE,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACjC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,YAAY,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAC,GAAG;QACT,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAClE,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SPEC } from '../constants.js';
|
|
2
|
+
import { ASTNode } from './ASTNode.js';
|
|
3
|
+
export class SpecNode extends ASTNode {
|
|
4
|
+
constructor(root, meta, config, data, params, plotDefaults) {
|
|
5
|
+
super(SPEC, [root]);
|
|
6
|
+
this.root = root;
|
|
7
|
+
this.meta = meta;
|
|
8
|
+
this.config = config;
|
|
9
|
+
this.data = data;
|
|
10
|
+
this.params = params;
|
|
11
|
+
this.plotDefaults = plotDefaults;
|
|
12
|
+
}
|
|
13
|
+
toJSON() {
|
|
14
|
+
const { root, meta, config, plotDefaults } = this;
|
|
15
|
+
const dataDefs = new Map(Object.entries(this.data));
|
|
16
|
+
const paramDefs = new Map(Object.entries(this.params));
|
|
17
|
+
const spec = {};
|
|
18
|
+
if (meta)
|
|
19
|
+
spec.meta = { ...meta };
|
|
20
|
+
if (config)
|
|
21
|
+
spec.config = { ...config };
|
|
22
|
+
if (dataDefs?.size) {
|
|
23
|
+
const data = spec.data = {};
|
|
24
|
+
for (const [name, node] of dataDefs) {
|
|
25
|
+
data[name] = node.toJSON();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (paramDefs?.size) {
|
|
29
|
+
const params = spec.params = {};
|
|
30
|
+
for (const [name, node] of paramDefs) {
|
|
31
|
+
params[name] = node.toJSON();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (plotDefaults?.length) {
|
|
35
|
+
const defaults = spec.plotDefaults = {};
|
|
36
|
+
for (const node of plotDefaults) {
|
|
37
|
+
Object.assign(defaults, node.toJSON());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return Object.assign(spec, root.toJSON());
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=SpecNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecNode.js","sourceRoot":"","sources":["../../../src/ast/SpecNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,OAAO,QAAS,SAAQ,OAAO;IACnC,YAAY,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY;QACxD,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,EAAE,CAAC;QAEhB,IAAI,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;QAClC,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAExC,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,YAAY,EAAE,MAAM,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACxC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;gBAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ASTNode } from './ASTNode.js';
|
|
2
|
+
import { TRANSFORM } from '../constants.js';
|
|
3
|
+
import { parseOptions } from './OptionsNode.js';
|
|
4
|
+
import { parseWindowFrame } from './WindowFrameNode.js';
|
|
5
|
+
function toArray(value, ctx) {
|
|
6
|
+
return value == null
|
|
7
|
+
? []
|
|
8
|
+
: [value].flat().map(v => ctx.maybeParam(v));
|
|
9
|
+
}
|
|
10
|
+
export function parseTransform(spec, ctx) {
|
|
11
|
+
let name;
|
|
12
|
+
for (const key in spec) {
|
|
13
|
+
if (ctx.transforms.has(key)) {
|
|
14
|
+
name = key;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (!name) {
|
|
18
|
+
return; // return undefined to signal no transform!
|
|
19
|
+
}
|
|
20
|
+
if (name === 'bin') {
|
|
21
|
+
const { bin, ...options } = spec;
|
|
22
|
+
const [arg] = toArray(bin, ctx);
|
|
23
|
+
return new BinTransformNode(name, arg, parseOptions(options, ctx));
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const args = name === 'count' && !spec[name] ? [] : toArray(spec[name], ctx);
|
|
27
|
+
const options = {
|
|
28
|
+
distinct: spec.distinct,
|
|
29
|
+
orderby: toArray(spec.orderby, ctx),
|
|
30
|
+
partitionby: toArray(spec.partitionby, ctx),
|
|
31
|
+
frame: parseWindowFrame(spec, ctx)
|
|
32
|
+
};
|
|
33
|
+
return new TransformNode(name, args, options);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export class TransformNode extends ASTNode {
|
|
37
|
+
constructor(name, args, options) {
|
|
38
|
+
super(TRANSFORM);
|
|
39
|
+
this.name = name;
|
|
40
|
+
this.args = args;
|
|
41
|
+
this.options = options;
|
|
42
|
+
}
|
|
43
|
+
instantiate(ctx) {
|
|
44
|
+
const { name, args, options } = this;
|
|
45
|
+
const { distinct, orderby, partitionby, frame } = options;
|
|
46
|
+
let expr = ctx.api[name](...args.map(a => a.instantiate(ctx)));
|
|
47
|
+
if (distinct) {
|
|
48
|
+
expr = expr.distinct();
|
|
49
|
+
}
|
|
50
|
+
if (orderby.length) {
|
|
51
|
+
expr = expr.orderby(orderby.map(v => v.instantiate(ctx)));
|
|
52
|
+
}
|
|
53
|
+
if (partitionby.length) {
|
|
54
|
+
expr = expr.partitionby(partitionby.map(v => v.instantiate(ctx)));
|
|
55
|
+
}
|
|
56
|
+
if (frame) {
|
|
57
|
+
expr = expr.frame(frame.instantiate(ctx));
|
|
58
|
+
}
|
|
59
|
+
return expr;
|
|
60
|
+
}
|
|
61
|
+
codegen(ctx) {
|
|
62
|
+
const { name, args, options } = this;
|
|
63
|
+
const { distinct, orderby, partitionby, frame } = options;
|
|
64
|
+
let str = `${ctx.ns()}${name}(`
|
|
65
|
+
+ args.map(v => v.codegen(ctx)).join(', ')
|
|
66
|
+
+ ')';
|
|
67
|
+
if (distinct) {
|
|
68
|
+
str += '.distinct()';
|
|
69
|
+
}
|
|
70
|
+
if (orderby.length) {
|
|
71
|
+
const p = orderby.map(v => v.codegen(ctx));
|
|
72
|
+
str += `.orderby(${p.join(', ')})`;
|
|
73
|
+
}
|
|
74
|
+
if (partitionby.length) {
|
|
75
|
+
const p = partitionby.map(v => v.codegen(ctx));
|
|
76
|
+
str += `.partitionby(${p.join(', ')})`;
|
|
77
|
+
}
|
|
78
|
+
if (frame) {
|
|
79
|
+
str += `.frame(${frame.codegen(ctx)})`;
|
|
80
|
+
}
|
|
81
|
+
return str;
|
|
82
|
+
}
|
|
83
|
+
toJSON() {
|
|
84
|
+
const { name, args, options } = this;
|
|
85
|
+
const { distinct, orderby, partitionby, frame } = options;
|
|
86
|
+
const json = { [name]: simplify(args.map(v => v.toJSON())) };
|
|
87
|
+
if (distinct) {
|
|
88
|
+
json.distinct = true;
|
|
89
|
+
}
|
|
90
|
+
if (orderby.length) {
|
|
91
|
+
json.orderby = simplify(orderby.map(v => v.toJSON()));
|
|
92
|
+
}
|
|
93
|
+
if (partitionby.length) {
|
|
94
|
+
json.partitionby = simplify(partitionby.map(v => v.toJSON()));
|
|
95
|
+
}
|
|
96
|
+
if (frame) {
|
|
97
|
+
Object.assign(json, frame.toJSON());
|
|
98
|
+
}
|
|
99
|
+
return json;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export class BinTransformNode extends ASTNode {
|
|
103
|
+
constructor(name, arg, options) {
|
|
104
|
+
super(TRANSFORM);
|
|
105
|
+
this.name = name;
|
|
106
|
+
this.arg = arg;
|
|
107
|
+
this.options = options;
|
|
108
|
+
}
|
|
109
|
+
instantiate(ctx) {
|
|
110
|
+
const { name, arg, options } = this;
|
|
111
|
+
return ctx.api[name](arg.instantiate(ctx), options.instantiate(ctx));
|
|
112
|
+
}
|
|
113
|
+
codegen(ctx) {
|
|
114
|
+
const { name, arg, options } = this;
|
|
115
|
+
const opt = options.codegen(ctx);
|
|
116
|
+
return `${ctx.ns()}${name}(`
|
|
117
|
+
+ arg.codegen(ctx)
|
|
118
|
+
+ (opt ? `, ${opt}` : '')
|
|
119
|
+
+ ')';
|
|
120
|
+
}
|
|
121
|
+
toJSON() {
|
|
122
|
+
const { name, arg, options } = this;
|
|
123
|
+
return { [name]: arg.toJSON(), ...options.toJSON() };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function simplify(array) {
|
|
127
|
+
return array.length === 0 ? '' : array.length === 1 ? array[0] : array;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=TransformNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformNode.js","sourceRoot":"","sources":["../../../src/ast/TransformNode.js"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ASTNode } from './ASTNode.js';
|
|
2
|
+
import { VCONCAT } from '../constants.js';
|
|
3
|
+
export function parseVConcat(spec, ctx) {
|
|
4
|
+
const children = spec[VCONCAT].map(s => ctx.parseComponent(s));
|
|
5
|
+
return new VConcatNode(children);
|
|
6
|
+
}
|
|
7
|
+
export class VConcatNode extends ASTNode {
|
|
8
|
+
constructor(children) {
|
|
9
|
+
super(VCONCAT, children);
|
|
10
|
+
}
|
|
11
|
+
instantiate(ctx) {
|
|
12
|
+
return ctx.api[VCONCAT](this.children.map(c => c.instantiate(ctx)));
|
|
13
|
+
}
|
|
14
|
+
codegen(ctx) {
|
|
15
|
+
ctx.indent();
|
|
16
|
+
const items = this.children.map(c => c.codegen(ctx));
|
|
17
|
+
ctx.undent();
|
|
18
|
+
return `${ctx.tab()}${ctx.ns()}${this.type}(\n${items.join(',\n')}\n${ctx.tab()})`;
|
|
19
|
+
}
|
|
20
|
+
toJSON() {
|
|
21
|
+
return { [this.type]: this.children.map(c => c.toJSON()) };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=VConcatNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VConcatNode.js","sourceRoot":"","sources":["../../../src/ast/VConcatNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,UAAU,YAAY,CAAC,IAAI,EAAE,GAAG;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,YAAY,QAAQ;QAClB,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,CAAC,GAAG;QACT,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,GAAG,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IACrF,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IAC7D,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ASTNode } from './ASTNode.js';
|
|
2
|
+
import { VSPACE } from '../constants.js';
|
|
3
|
+
export function parseVSpace(spec) {
|
|
4
|
+
return new VSpaceNode(spec[VSPACE]);
|
|
5
|
+
}
|
|
6
|
+
export class VSpaceNode extends ASTNode {
|
|
7
|
+
constructor(value) {
|
|
8
|
+
super(VSPACE);
|
|
9
|
+
this.value = value;
|
|
10
|
+
}
|
|
11
|
+
instantiate(ctx) {
|
|
12
|
+
return ctx.api[VSPACE](this.value);
|
|
13
|
+
}
|
|
14
|
+
codegen(ctx) {
|
|
15
|
+
return `${ctx.tab()}${ctx.ns()}${this.type}(${ctx.stringify(this.value)})`;
|
|
16
|
+
}
|
|
17
|
+
toJSON() {
|
|
18
|
+
return { [this.type]: this.value };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=VSpaceNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VSpaceNode.js","sourceRoot":"","sources":["../../../src/ast/VSpaceNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,UAAU,WAAW,CAAC,IAAI;IAC9B,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,OAAO,UAAW,SAAQ,OAAO;IACrC,YAAY,KAAK;QACf,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,GAAG;QACT,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7E,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;CACF"}
|