@uwdata/mosaic-spec 0.21.1 → 0.22.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.
Files changed (197) hide show
  1. package/dist/src/ast/ASTNode.js +37 -0
  2. package/dist/src/ast/ASTNode.js.map +1 -0
  3. package/dist/src/ast/ColumnParamRefNode.js +18 -0
  4. package/dist/src/ast/ColumnParamRefNode.js.map +1 -0
  5. package/dist/src/ast/DataNode.js +255 -0
  6. package/dist/src/ast/DataNode.js.map +1 -0
  7. package/dist/src/ast/ExpressionNode.js +52 -0
  8. package/dist/src/ast/ExpressionNode.js.map +1 -0
  9. package/dist/src/ast/HConcatNode.js +24 -0
  10. package/dist/src/ast/HConcatNode.js.map +1 -0
  11. package/dist/src/ast/HSpaceNode.js +21 -0
  12. package/dist/src/ast/HSpaceNode.js.map +1 -0
  13. package/dist/src/ast/InputNode.js +29 -0
  14. package/dist/src/ast/InputNode.js.map +1 -0
  15. package/dist/src/ast/LiteralNode.js +18 -0
  16. package/dist/src/ast/LiteralNode.js.map +1 -0
  17. package/dist/src/ast/OptionsNode.js +45 -0
  18. package/dist/src/ast/OptionsNode.js.map +1 -0
  19. package/dist/src/ast/ParamNode.js +50 -0
  20. package/dist/src/ast/ParamNode.js.map +1 -0
  21. package/dist/src/ast/ParamRefNode.js +19 -0
  22. package/dist/src/ast/ParamRefNode.js.map +1 -0
  23. package/dist/src/ast/PlotAttributeNode.js +43 -0
  24. package/dist/src/ast/PlotAttributeNode.js.map +1 -0
  25. package/dist/src/ast/PlotFromNode.js +38 -0
  26. package/dist/src/ast/PlotFromNode.js.map +1 -0
  27. package/dist/src/ast/PlotInteractorNode.js +29 -0
  28. package/dist/src/ast/PlotInteractorNode.js.map +1 -0
  29. package/dist/src/ast/PlotLegendNode.js +31 -0
  30. package/dist/src/ast/PlotLegendNode.js.map +1 -0
  31. package/dist/src/ast/PlotMarkNode.js +68 -0
  32. package/dist/src/ast/PlotMarkNode.js.map +1 -0
  33. package/dist/src/ast/PlotNode.js +55 -0
  34. package/dist/src/ast/PlotNode.js.map +1 -0
  35. package/dist/src/ast/SelectionNode.js +52 -0
  36. package/dist/src/ast/SelectionNode.js.map +1 -0
  37. package/dist/src/ast/SpecNode.js +43 -0
  38. package/dist/src/ast/SpecNode.js.map +1 -0
  39. package/dist/src/ast/TransformNode.js +129 -0
  40. package/dist/src/ast/TransformNode.js.map +1 -0
  41. package/dist/src/ast/VConcatNode.js +24 -0
  42. package/dist/src/ast/VConcatNode.js.map +1 -0
  43. package/dist/src/ast/VSpaceNode.js +21 -0
  44. package/dist/src/ast/VSpaceNode.js.map +1 -0
  45. package/dist/src/ast/WindowFrameNode.js +54 -0
  46. package/dist/src/ast/WindowFrameNode.js.map +1 -0
  47. package/dist/src/ast-to-dom.js +68 -0
  48. package/dist/src/ast-to-dom.js.map +1 -0
  49. package/dist/src/ast-to-esm.js +180 -0
  50. package/dist/src/ast-to-esm.js.map +1 -0
  51. package/dist/src/config/components.js +25 -0
  52. package/dist/src/config/components.js.map +1 -0
  53. package/dist/src/config/extensions.js +21 -0
  54. package/dist/src/config/extensions.js.map +1 -0
  55. package/dist/src/config/inputs.js +14 -0
  56. package/dist/src/config/inputs.js.map +1 -0
  57. package/dist/src/config/plots.js +48 -0
  58. package/dist/src/config/plots.js.map +1 -0
  59. package/dist/src/config/transforms.js +57 -0
  60. package/dist/src/config/transforms.js.map +1 -0
  61. package/dist/src/constants.js +44 -0
  62. package/dist/src/constants.js.map +1 -0
  63. package/dist/src/index.d.ts +5 -8
  64. package/dist/src/index.d.ts.map +1 -1
  65. package/dist/src/index.js +26 -0
  66. package/dist/src/index.js.map +1 -0
  67. package/dist/src/parse-spec.js +148 -0
  68. package/dist/src/parse-spec.js.map +1 -0
  69. package/dist/src/spec/CSSStyles.js +2 -0
  70. package/dist/src/spec/CSSStyles.js.map +1 -0
  71. package/dist/src/spec/Data.js +2 -0
  72. package/dist/src/spec/Data.js.map +1 -0
  73. package/dist/src/spec/Expression.js +2 -0
  74. package/dist/src/spec/Expression.js.map +1 -0
  75. package/dist/src/spec/HConcat.js +2 -0
  76. package/dist/src/spec/HConcat.js.map +1 -0
  77. package/dist/src/spec/HSpace.js +2 -0
  78. package/dist/src/spec/HSpace.js.map +1 -0
  79. package/dist/src/spec/Input.js +2 -0
  80. package/dist/src/spec/Input.js.map +1 -0
  81. package/dist/src/spec/Interval.js +2 -0
  82. package/dist/src/spec/Interval.js.map +1 -0
  83. package/dist/src/spec/Param.js +2 -0
  84. package/dist/src/spec/Param.js.map +1 -0
  85. package/dist/src/spec/Plot.js +2 -0
  86. package/dist/src/spec/Plot.js.map +1 -0
  87. package/dist/src/spec/PlotAttribute.js +2 -0
  88. package/dist/src/spec/PlotAttribute.js.map +1 -0
  89. package/dist/src/spec/PlotFrom.js +2 -0
  90. package/dist/src/spec/PlotFrom.js.map +1 -0
  91. package/dist/src/spec/PlotInteractor.js +2 -0
  92. package/dist/src/spec/PlotInteractor.js.map +1 -0
  93. package/dist/src/spec/PlotLegend.js +2 -0
  94. package/dist/src/spec/PlotLegend.js.map +1 -0
  95. package/dist/src/spec/PlotMark.js +2 -0
  96. package/dist/src/spec/PlotMark.js.map +1 -0
  97. package/dist/src/spec/PlotTypes.js +2 -0
  98. package/dist/src/spec/PlotTypes.js.map +1 -0
  99. package/dist/src/spec/Spec.js +2 -0
  100. package/dist/src/spec/Spec.js.map +1 -0
  101. package/dist/src/spec/Transform.js +2 -0
  102. package/dist/src/spec/Transform.js.map +1 -0
  103. package/dist/src/spec/VConcat.js +2 -0
  104. package/dist/src/spec/VConcat.js.map +1 -0
  105. package/dist/src/spec/VSpace.js +2 -0
  106. package/dist/src/spec/VSpace.js.map +1 -0
  107. package/dist/src/spec/index.d.ts +22 -0
  108. package/dist/src/spec/index.d.ts.map +1 -0
  109. package/dist/src/spec/index.js +2 -0
  110. package/dist/src/spec/index.js.map +1 -0
  111. package/dist/src/spec/interactors/BrushStyles.js +2 -0
  112. package/dist/src/spec/interactors/BrushStyles.js.map +1 -0
  113. package/dist/src/spec/interactors/Highlight.js +2 -0
  114. package/dist/src/spec/interactors/Highlight.js.map +1 -0
  115. package/dist/src/spec/interactors/Interval1D.js +2 -0
  116. package/dist/src/spec/interactors/Interval1D.js.map +1 -0
  117. package/dist/src/spec/interactors/Interval2D.js +2 -0
  118. package/dist/src/spec/interactors/Interval2D.js.map +1 -0
  119. package/dist/src/spec/interactors/Nearest.js +2 -0
  120. package/dist/src/spec/interactors/Nearest.js.map +1 -0
  121. package/dist/src/spec/interactors/PanZoom.js +2 -0
  122. package/dist/src/spec/interactors/PanZoom.js.map +1 -0
  123. package/dist/src/spec/interactors/Region.js +2 -0
  124. package/dist/src/spec/interactors/Region.js.map +1 -0
  125. package/dist/src/spec/interactors/Toggle.js +2 -0
  126. package/dist/src/spec/interactors/Toggle.js.map +1 -0
  127. package/dist/src/spec/interactors/index.d.ts +9 -0
  128. package/dist/src/spec/interactors/index.d.ts.map +1 -0
  129. package/dist/src/spec/interactors/index.js +2 -0
  130. package/dist/src/spec/interactors/index.js.map +1 -0
  131. package/dist/src/spec/marks/Area.js +2 -0
  132. package/dist/src/spec/marks/Area.js.map +1 -0
  133. package/dist/src/spec/marks/Arrow.js +2 -0
  134. package/dist/src/spec/marks/Arrow.js.map +1 -0
  135. package/dist/src/spec/marks/Axis.js +2 -0
  136. package/dist/src/spec/marks/Axis.js.map +1 -0
  137. package/dist/src/spec/marks/Bar.js +2 -0
  138. package/dist/src/spec/marks/Bar.js.map +1 -0
  139. package/dist/src/spec/marks/Cell.js +2 -0
  140. package/dist/src/spec/marks/Cell.js.map +1 -0
  141. package/dist/src/spec/marks/Contour.js +2 -0
  142. package/dist/src/spec/marks/Contour.js.map +1 -0
  143. package/dist/src/spec/marks/Delaunay.js +2 -0
  144. package/dist/src/spec/marks/Delaunay.js.map +1 -0
  145. package/dist/src/spec/marks/DenseLine.js +2 -0
  146. package/dist/src/spec/marks/DenseLine.js.map +1 -0
  147. package/dist/src/spec/marks/Density.js +2 -0
  148. package/dist/src/spec/marks/Density.js.map +1 -0
  149. package/dist/src/spec/marks/Dot.js +2 -0
  150. package/dist/src/spec/marks/Dot.js.map +1 -0
  151. package/dist/src/spec/marks/ErrorBar.js +2 -0
  152. package/dist/src/spec/marks/ErrorBar.js.map +1 -0
  153. package/dist/src/spec/marks/Frame.js +2 -0
  154. package/dist/src/spec/marks/Frame.js.map +1 -0
  155. package/dist/src/spec/marks/Geo.js +2 -0
  156. package/dist/src/spec/marks/Geo.js.map +1 -0
  157. package/dist/src/spec/marks/Hexbin.js +2 -0
  158. package/dist/src/spec/marks/Hexbin.js.map +1 -0
  159. package/dist/src/spec/marks/Hexgrid.js +2 -0
  160. package/dist/src/spec/marks/Hexgrid.js.map +1 -0
  161. package/dist/src/spec/marks/Image.js +2 -0
  162. package/dist/src/spec/marks/Image.js.map +1 -0
  163. package/dist/src/spec/marks/Line.js +2 -0
  164. package/dist/src/spec/marks/Line.js.map +1 -0
  165. package/dist/src/spec/marks/Link.js +2 -0
  166. package/dist/src/spec/marks/Link.js.map +1 -0
  167. package/dist/src/spec/marks/Marks.js +2 -0
  168. package/dist/src/spec/marks/Marks.js.map +1 -0
  169. package/dist/src/spec/marks/Raster.js +2 -0
  170. package/dist/src/spec/marks/Raster.js.map +1 -0
  171. package/dist/src/spec/marks/Rect.js +2 -0
  172. package/dist/src/spec/marks/Rect.js.map +1 -0
  173. package/dist/src/spec/marks/Regression.js +2 -0
  174. package/dist/src/spec/marks/Regression.js.map +1 -0
  175. package/dist/src/spec/marks/Rule.js +2 -0
  176. package/dist/src/spec/marks/Rule.js.map +1 -0
  177. package/dist/src/spec/marks/Text.js +2 -0
  178. package/dist/src/spec/marks/Text.js.map +1 -0
  179. package/dist/src/spec/marks/Tick.js +2 -0
  180. package/dist/src/spec/marks/Tick.js.map +1 -0
  181. package/dist/src/spec/marks/Vector.js +2 -0
  182. package/dist/src/spec/marks/Vector.js.map +1 -0
  183. package/dist/src/spec/marks/Waffle.js +2 -0
  184. package/dist/src/spec/marks/Waffle.js.map +1 -0
  185. package/dist/src/spec/marks/index.d.ts +28 -0
  186. package/dist/src/spec/marks/index.d.ts.map +1 -0
  187. package/dist/src/spec/marks/index.js +2 -0
  188. package/dist/src/spec/marks/index.js.map +1 -0
  189. package/dist/src/util.js +45 -0
  190. package/dist/src/util.js.map +1 -0
  191. package/package.json +7 -7
  192. package/src/constants.js +32 -32
  193. package/src/index.ts +39 -0
  194. package/src/spec/index.ts +25 -0
  195. package/src/spec/interactors/index.ts +8 -0
  196. package/src/spec/marks/index.ts +27 -0
  197. package/src/index.js +0 -40
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Abstract base class for Mosaic spec AST nodes.
3
+ */
4
+ export class ASTNode {
5
+ constructor(type, children = null) {
6
+ /** @type {string} */
7
+ this.type = type;
8
+ /** @type {ASTNode[] | null} */
9
+ this.children = children;
10
+ }
11
+ /**
12
+ * Instantiate this AST node to use in a live web application.
13
+ * @param {import('../ast-to-dom.js').InstantiateContext} ctx The instantiation context.
14
+ * @returns {*} The instantiated value of this node.
15
+ */
16
+ instantiate(ctx) {
17
+ // @ts-ignore
18
+ throw Error('instantiate not implemented');
19
+ }
20
+ /**
21
+ * Generate ESM code for this AST node.
22
+ * @param {import('../ast-to-esm.js').CodegenContext} ctx The code generator context.
23
+ * @returns {string|void} The generated ESM code for the node.
24
+ */
25
+ codegen(ctx) {
26
+ // @ts-ignore
27
+ return Error('codegen not implemented');
28
+ }
29
+ /**
30
+ * @returns {*} This AST node in JSON specification format.
31
+ */
32
+ toJSON() {
33
+ // @ts-ignore
34
+ return Error('toJSON not implemented');
35
+ }
36
+ }
37
+ //# sourceMappingURL=ASTNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ASTNode.js","sourceRoot":"","sources":["../../../src/ast/ASTNode.js"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,OAAO;IAClB,YAAY,IAAI,EAAE,QAAQ,GAAG,IAAI;QAC/B,qBAAqB;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,+BAA+B;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,GAAG;QACb,aAAa;QACb,MAAM,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,GAAG;QACT,aAAa;QACb,OAAO,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,aAAa;QACb,OAAO,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { ASTNode } from './ASTNode.js';
2
+ import { COLUMPARAMREF } from '../constants.js';
3
+ export class ColumnParamRefNode extends ASTNode {
4
+ constructor(param) {
5
+ super(COLUMPARAMREF);
6
+ this.param = param;
7
+ }
8
+ instantiate(ctx) {
9
+ return ctx.api.column(this.param.instantiate(ctx));
10
+ }
11
+ codegen(ctx) {
12
+ return `${ctx.ns()}column(${this.param.codegen(ctx)})`;
13
+ }
14
+ toJSON() {
15
+ return `$${this.param.toJSON}`;
16
+ }
17
+ }
18
+ //# sourceMappingURL=ColumnParamRefNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnParamRefNode.js","sourceRoot":"","sources":["../../../src/ast/ColumnParamRefNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,OAAO,kBAAmB,SAAQ,OAAO;IAC7C,YAAY,KAAK;QACf,KAAK,CAAC,aAAa,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAG;QACT,OAAO,GAAG,GAAG,CAAC,EAAE,EAAE,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IACzD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,255 @@
1
+ import { createTable } from '@uwdata/mosaic-sql';
2
+ import { DATA } from '../constants.js';
3
+ import { isArray, isString } from '../util.js';
4
+ import { ASTNode } from './ASTNode.js';
5
+ import { parseOptions } from './OptionsNode.js';
6
+ export const TABLE_DATA = 'table';
7
+ export const PARQUET_DATA = 'parquet';
8
+ export const CSV_DATA = 'csv';
9
+ export const JSON_DATA = 'json';
10
+ export const SPATIAL_DATA = 'spatial';
11
+ // @ts-ignore
12
+ const dataFormats = new Map([
13
+ [TABLE_DATA, parseTableData],
14
+ [PARQUET_DATA, parseParquetData],
15
+ [CSV_DATA, parseCSVData],
16
+ [JSON_DATA, parseJSONData],
17
+ [SPATIAL_DATA, parseSpatialData]
18
+ ]);
19
+ /**
20
+ * Parse a data definition spec.
21
+ * @param {string} name The name of the dataset
22
+ * @param {import('../spec/Data.js').DataDefinition} spec The data definition spec.
23
+ * @param {import('../parse-spec.js').ParseContext} ctx The parser context.
24
+ * @returns {DataNode} a parsed data definition AST node
25
+ */
26
+ export function parseData(name, spec, ctx) {
27
+ const def = resolveDataSpec(spec);
28
+ if (dataFormats.has(def.type)) {
29
+ const parse = dataFormats.get(def.type);
30
+ return parse(name, def, ctx);
31
+ }
32
+ else {
33
+ ctx.error(`Unrecognized data format type.`, spec);
34
+ }
35
+ }
36
+ function resolveDataSpec(spec) {
37
+ if (isArray(spec))
38
+ spec = { type: 'json', data: spec };
39
+ if (isString(spec))
40
+ spec = { type: 'table', query: spec };
41
+ return { ...spec, type: inferType(spec) };
42
+ }
43
+ function inferType(spec) {
44
+ return spec.type
45
+ || fileExtension(spec.file)
46
+ || 'table';
47
+ }
48
+ function fileExtension(file) {
49
+ const idx = file?.lastIndexOf('.');
50
+ return idx > 0 ? file.slice(idx + 1) : null;
51
+ }
52
+ function parseTableData(name, spec, ctx) {
53
+ // eslint-disable-next-line no-unused-vars
54
+ const { query, type, ...options } = spec;
55
+ return new TableDataNode(name, query, parseOptions(options, ctx));
56
+ }
57
+ function parseParquetData(name, spec, ctx) {
58
+ // eslint-disable-next-line no-unused-vars
59
+ const { file, type, ...options } = spec;
60
+ return new ParquetDataNode(name, file, parseOptions(options, ctx));
61
+ }
62
+ function parseCSVData(name, spec, ctx) {
63
+ // eslint-disable-next-line no-unused-vars
64
+ const { file, type, ...options } = spec;
65
+ return new CSVDataNode(name, file, parseOptions(options, ctx));
66
+ }
67
+ function parseJSONData(name, spec, ctx) {
68
+ // eslint-disable-next-line no-unused-vars
69
+ const { data, file, type, ...options } = spec;
70
+ const opt = parseOptions(options, ctx);
71
+ return data
72
+ ? new LiteralJSONDataNode(name, data, opt)
73
+ : new JSONDataNode(name, file, opt);
74
+ }
75
+ function parseSpatialData(name, spec, ctx) {
76
+ // eslint-disable-next-line no-unused-vars
77
+ const { file, type, ...options } = spec;
78
+ return new SpatialDataNode(name, file, parseOptions(options, ctx));
79
+ }
80
+ function resolveFileURL(file, baseURL) {
81
+ return baseURL ? new URL(file, baseURL).toString() : file;
82
+ }
83
+ function codegenOptions(options, ctx) {
84
+ const code = options?.codegen(ctx);
85
+ return code ? `, ${code}` : '';
86
+ }
87
+ export class DataNode extends ASTNode {
88
+ constructor(name, format) {
89
+ super(DATA);
90
+ this.name = name;
91
+ this.format = format;
92
+ }
93
+ }
94
+ export class QueryDataNode extends DataNode {
95
+ constructor(name, format) {
96
+ super(name, format);
97
+ }
98
+ /**
99
+ * Instantiate a table creation query.
100
+ * @param {import('../ast-to-dom.js').InstantiateContext} ctx The instantiation context.
101
+ * @returns {string|void} The instantiated query.
102
+ */
103
+ instantiateQuery(ctx) {
104
+ ctx.error('instantiateQuery not implemented');
105
+ }
106
+ /**
107
+ * Code generate a table creation query.
108
+ * @param {import('../ast-to-esm.js').CodegenContext} ctx The code generator context.
109
+ * @returns {string|void} The generated query code.
110
+ */
111
+ codegenQuery(ctx) {
112
+ ctx.error('codegenQuery not implemented');
113
+ }
114
+ /**
115
+ * Instantiate this AST node to use in a live web application.
116
+ * @param {import('../ast-to-dom.js').InstantiateContext} ctx The instantiation context.
117
+ * @returns {*} The instantiated value of this node.
118
+ */
119
+ instantiate(ctx) {
120
+ const query = this.instantiateQuery(ctx);
121
+ if (query)
122
+ return query;
123
+ }
124
+ /**
125
+ * Generate ESM code for this AST node.
126
+ * @param {import('../ast-to-esm.js').CodegenContext} ctx The code generator context.
127
+ * @returns {string|void} The generated ESM code for the node.
128
+ */
129
+ codegen(ctx) {
130
+ const query = this.codegenQuery(ctx);
131
+ if (query)
132
+ return query;
133
+ }
134
+ }
135
+ export class TableDataNode extends QueryDataNode {
136
+ constructor(name, query, options) {
137
+ super(name, TABLE_DATA);
138
+ this.query = query?.trim();
139
+ this.options = options;
140
+ }
141
+ /**
142
+ * Instantiate a table creation query.
143
+ * @param {import('../ast-to-dom.js').InstantiateContext} ctx The instantiation context.
144
+ * @returns {string|void} The instantiated query.
145
+ */
146
+ instantiateQuery(ctx) {
147
+ const { name, query, options } = this;
148
+ if (query) {
149
+ return ctx.api.createTable(name, query, options.instantiate(ctx));
150
+ }
151
+ }
152
+ /**
153
+ * Code generate a table creation query.
154
+ * @param {import('../ast-to-esm.js').CodegenContext} ctx The code generator context.
155
+ * @returns {string|void} The generated query code.
156
+ */
157
+ codegenQuery(ctx) {
158
+ const { name, query, options } = this;
159
+ if (query) {
160
+ return `\`${createTable(name, query, options.instantiate(ctx))}\``;
161
+ }
162
+ }
163
+ toJSON() {
164
+ const { format, query, options } = this;
165
+ return { type: format, query, ...options.toJSON() };
166
+ }
167
+ }
168
+ export class FileDataNode extends QueryDataNode {
169
+ constructor(name, format, method, file, options) {
170
+ super(name, format);
171
+ this.file = file;
172
+ this.method = method;
173
+ this.options = options;
174
+ }
175
+ /**
176
+ * Instantiate a table creation query.
177
+ * @param {import('../ast-to-dom.js').InstantiateContext} ctx The instantiation context.
178
+ * @returns {string|void} The instantiated query.
179
+ */
180
+ instantiateQuery(ctx) {
181
+ const { name, method, file, options } = this;
182
+ const url = resolveFileURL(file, ctx.baseURL);
183
+ const opt = options?.instantiate(ctx);
184
+ return ctx.api[method](name, url, opt);
185
+ }
186
+ /**
187
+ * Code generate a table creation query.
188
+ * @param {import('../ast-to-esm.js').CodegenContext} ctx The code generator context.
189
+ * @returns {string|void} The generated query code.
190
+ */
191
+ codegenQuery(ctx) {
192
+ const { name, method, file, options } = this;
193
+ const url = resolveFileURL(file, ctx.baseURL);
194
+ const opt = codegenOptions(options, ctx);
195
+ return `${ctx.ns()}${method}("${name}", "${url}"${opt})`;
196
+ }
197
+ toJSON() {
198
+ const { format, file, options } = this;
199
+ return { type: format, file, ...options.toJSON() };
200
+ }
201
+ }
202
+ export class SpatialDataNode extends FileDataNode {
203
+ constructor(name, file, options) {
204
+ super(name, SPATIAL_DATA, 'loadSpatial', file, options);
205
+ }
206
+ }
207
+ export class ParquetDataNode extends FileDataNode {
208
+ constructor(name, file, options) {
209
+ super(name, PARQUET_DATA, 'loadParquet', file, options);
210
+ }
211
+ }
212
+ export class CSVDataNode extends FileDataNode {
213
+ constructor(name, file, options) {
214
+ super(name, CSV_DATA, 'loadCSV', file, options);
215
+ }
216
+ }
217
+ export class JSONDataNode extends FileDataNode {
218
+ constructor(name, file, options) {
219
+ super(name, JSON_DATA, 'loadJSON', file, options);
220
+ }
221
+ }
222
+ export class LiteralJSONDataNode extends QueryDataNode {
223
+ constructor(name, data, options) {
224
+ super(name, JSON_DATA);
225
+ this.data = data;
226
+ this.options = options;
227
+ }
228
+ /**
229
+ * Instantiate a table creation query.
230
+ * @param {import('../ast-to-dom.js').InstantiateContext} ctx The instantiation context.
231
+ * @returns {string|void} The instantiated query.
232
+ */
233
+ instantiateQuery(ctx) {
234
+ const { name, data, options } = this;
235
+ return ctx.api.loadObjects(name, data, options.instantiate(ctx));
236
+ }
237
+ /**
238
+ * Code generate a table creation query.
239
+ * @param {import('../ast-to-esm.js').CodegenContext} ctx The code generator context.
240
+ * @returns {string|void} The generated query code.
241
+ */
242
+ codegenQuery(ctx) {
243
+ const { name, data, options } = this;
244
+ const opt = options ? ',' + options.codegen(ctx) : '';
245
+ const d = '[\n '
246
+ + data.map(d => JSON.stringify(d)).join(',\n ')
247
+ + '\n ]';
248
+ return `${ctx.ns()}loadObjects("${name}", ${d}${opt})`;
249
+ }
250
+ toJSON() {
251
+ const { format, data, options } = this;
252
+ return { type: format, data, ...options.toJSON() };
253
+ }
254
+ }
255
+ //# sourceMappingURL=DataNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataNode.js","sourceRoot":"","sources":["../../../src/ast/DataNode.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { EXPRESSION, SQL } from '../constants.js';
2
+ import { ASTNode } from './ASTNode.js';
3
+ import { ColumnParamRefNode } from './ColumnParamRefNode.js';
4
+ const tokenRegExp = /(\\'|\\"|"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\${1,2}\w+)/g;
5
+ export function parseExpression(spec, ctx) {
6
+ const expr = spec[SQL];
7
+ const tokens = expr.split(tokenRegExp);
8
+ const spans = [''];
9
+ const params = [];
10
+ for (let i = 0, k = 0; i < tokens.length; ++i) {
11
+ const tok = tokens[i];
12
+ if (tok.startsWith('$')) {
13
+ params[k] = tok.startsWith('$$')
14
+ ? new ColumnParamRefNode(ctx.paramRef(tok.slice(2)))
15
+ : ctx.maybeParam(tok);
16
+ spans[++k] = '';
17
+ }
18
+ else {
19
+ spans[k] += tok;
20
+ }
21
+ }
22
+ return new ExpressionNode(expr, spans, params);
23
+ }
24
+ export class ExpressionNode extends ASTNode {
25
+ constructor(value, spans, params) {
26
+ super(EXPRESSION);
27
+ this.value = value;
28
+ this.spans = spans;
29
+ this.params = params;
30
+ }
31
+ instantiate(ctx) {
32
+ const { spans, params } = this;
33
+ const tag = ctx.api[SQL];
34
+ const args = params.map(e => e.instantiate(ctx));
35
+ return tag(spans, ...args);
36
+ }
37
+ codegen(ctx) {
38
+ const { spans, params } = this;
39
+ // reconstitute expression string
40
+ let str = '';
41
+ const n = params.length;
42
+ for (let i = 0; i < n; ++i) {
43
+ str += spans[i] + '${' + params[i].codegen(ctx) + '}';
44
+ }
45
+ str += spans[n];
46
+ return `${ctx.ns()}${SQL}\`${str}\``;
47
+ }
48
+ toJSON() {
49
+ return { [SQL]: this.value };
50
+ }
51
+ }
52
+ //# sourceMappingURL=ExpressionNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionNode.js","sourceRoot":"","sources":["../../../src/ast/ExpressionNode.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { ASTNode } from './ASTNode.js';
2
+ import { HCONCAT } from '../constants.js';
3
+ export function parseHConcat(spec, ctx) {
4
+ const children = spec[HCONCAT].map(s => ctx.parseComponent(s));
5
+ return new HConcatNode(children);
6
+ }
7
+ export class HConcatNode extends ASTNode {
8
+ constructor(children) {
9
+ super(HCONCAT, children);
10
+ }
11
+ instantiate(ctx) {
12
+ return ctx.api[HCONCAT](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=HConcatNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HConcatNode.js","sourceRoot":"","sources":["../../../src/ast/HConcatNode.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;IAEtC,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 { HSPACE } from '../constants.js';
3
+ export function parseHSpace(spec) {
4
+ return new HSpaceNode(spec[HSPACE]);
5
+ }
6
+ export class HSpaceNode extends ASTNode {
7
+ constructor(value) {
8
+ super(HSPACE);
9
+ this.value = value;
10
+ }
11
+ instantiate(ctx) {
12
+ return ctx.api[HSPACE](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=HSpaceNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HSpaceNode.js","sourceRoot":"","sources":["../../../src/ast/HSpaceNode.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"}
@@ -0,0 +1,29 @@
1
+ import { ASTNode } from './ASTNode.js';
2
+ import { INPUT } from '../constants.js';
3
+ import { parseOptions } from './OptionsNode.js';
4
+ export function parseInput(spec, ctx) {
5
+ const { [INPUT]: name, ...options } = spec;
6
+ if (!ctx.inputs?.has(name)) {
7
+ ctx.error(`Unrecognized input type: ${name}`, spec);
8
+ }
9
+ return new InputNode(name, parseOptions(options, ctx));
10
+ }
11
+ export class InputNode extends ASTNode {
12
+ constructor(name, options) {
13
+ super(INPUT);
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 { type, name, options } = this;
26
+ return { [type]: name, ...options.toJSON() };
27
+ }
28
+ }
29
+ //# sourceMappingURL=InputNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputNode.js","sourceRoot":"","sources":["../../../src/ast/InputNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,UAAU,CAAC,IAAI,EAAE,GAAG;IAClC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;IAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,4BAA4B,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,OAAO,SAAU,SAAQ,OAAO;IACpC,YAAY,IAAI,EAAE,OAAO;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,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,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,18 @@
1
+ import { ASTNode } from './ASTNode.js';
2
+ import { LITERAL } from '../constants.js';
3
+ export class LiteralNode extends ASTNode {
4
+ constructor(value) {
5
+ super(LITERAL);
6
+ this.value = value;
7
+ }
8
+ instantiate() {
9
+ return this.value;
10
+ }
11
+ codegen(ctx) {
12
+ return ctx.stringify(this.value);
13
+ }
14
+ toJSON() {
15
+ return this.value;
16
+ }
17
+ }
18
+ //# sourceMappingURL=LiteralNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LiteralNode.js","sourceRoot":"","sources":["../../../src/ast/LiteralNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,YAAY,KAAK;QACf,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAG;QACT,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { ASTNode } from './ASTNode.js';
2
+ import { OPTIONS } from '../constants.js';
3
+ export function parseOptions(spec, ctx) {
4
+ const options = {};
5
+ for (const key in spec) {
6
+ options[key] = ctx.maybeSelection(spec[key]);
7
+ }
8
+ return new OptionsNode(options);
9
+ }
10
+ export class OptionsNode extends ASTNode {
11
+ constructor(options) {
12
+ super(OPTIONS);
13
+ this.options = options;
14
+ }
15
+ filter(predicate) {
16
+ const opt = Object.fromEntries(Object.entries(this.options)
17
+ .filter(([key, value]) => predicate(key, value)));
18
+ return new OptionsNode(opt);
19
+ }
20
+ instantiate(ctx) {
21
+ const { options } = this;
22
+ const opt = {};
23
+ for (const key in options) {
24
+ opt[key] = options[key].instantiate(ctx);
25
+ }
26
+ return opt;
27
+ }
28
+ codegen(ctx) {
29
+ const { options } = this;
30
+ const opt = [];
31
+ for (const key in options) {
32
+ opt.push(`${key}: ${options[key].codegen(ctx)}`);
33
+ }
34
+ return opt.length ? `{${ctx.maybeLineWrap(opt)}}` : '';
35
+ }
36
+ toJSON() {
37
+ const { options } = this;
38
+ const opt = {};
39
+ for (const key in options) {
40
+ opt[key] = options[key].toJSON();
41
+ }
42
+ return opt;
43
+ }
44
+ }
45
+ //# sourceMappingURL=OptionsNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionsNode.js","sourceRoot":"","sources":["../../../src/ast/OptionsNode.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,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,YAAY,OAAO;QACjB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,SAAS;QACd,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;aACzB,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CACnD,CAAC;QACF,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,WAAW,CAAC,GAAG;QACb,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,CAAC,GAAG;QACT,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ import { isArray, isObject, isoparse } from '../util.js';
2
+ import { ASTNode } from './ASTNode.js';
3
+ import { parseSelection } from './SelectionNode.js';
4
+ import { CROSSFILTER, INTERSECT, PARAM, SINGLE, UNION, VALUE } from '../constants.js';
5
+ const paramTypes = new Set([VALUE, SINGLE, CROSSFILTER, INTERSECT, UNION]);
6
+ export function parseParam(spec, ctx) {
7
+ const param = isObject(spec) ? spec : { value: spec };
8
+ const { select = VALUE, value, date } = param;
9
+ if (!paramTypes.has(select)) {
10
+ ctx.error(`Unrecognized param type: ${select}`, param);
11
+ }
12
+ if (select !== VALUE) {
13
+ return parseSelection(spec, ctx);
14
+ }
15
+ else if (isArray(value)) {
16
+ return new ParamNode(value.map(v => ctx.maybeParam(v)));
17
+ }
18
+ else {
19
+ return new ParamNode(value, date);
20
+ }
21
+ }
22
+ export class ParamNode extends ASTNode {
23
+ constructor(value, date) {
24
+ super(PARAM);
25
+ this.value = value;
26
+ this.date = date;
27
+ }
28
+ instantiate(ctx) {
29
+ const { date, value } = this;
30
+ const { Param } = ctx.api;
31
+ return isArray(value)
32
+ ? Param.array(value.map(v => v.instantiate(ctx)))
33
+ : Param.value(isoparse(date, value));
34
+ }
35
+ codegen(ctx) {
36
+ const { value, date } = this;
37
+ const prefix = `${ctx.ns()}Param.`;
38
+ return isArray(value)
39
+ ? `${prefix}array([${value.map(v => v.codegen(ctx)).join(', ')}])`
40
+ : date ? `${prefix}value(new Date(${JSON.stringify(date)}))`
41
+ : `${prefix}value(${JSON.stringify(value)})`;
42
+ }
43
+ toJSON() {
44
+ const { date, value } = this;
45
+ return isArray(value) ? value.map(v => v.toJSON())
46
+ : date ? { date }
47
+ : value;
48
+ }
49
+ }
50
+ //# sourceMappingURL=ParamNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParamNode.js","sourceRoot":"","sources":["../../../src/ast/ParamNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AAE3E,MAAM,UAAU,UAAU,CAAC,IAAI,EAAE,GAAG;IAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtD,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5B,GAAG,CAAC,KAAK,CAAC,4BAA4B,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,OAAO,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,SAAU,SAAQ,OAAO;IACpC,YAAY,KAAK,EAAE,IAAI;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;QAC1B,OAAO,OAAO,CAAC,KAAK,CAAC;YACnB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG;QACT,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC;QACnC,OAAO,OAAO,CAAC,KAAK,CAAC;YACnB,CAAC,CAAC,GAAG,MAAM,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAClE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI;gBAC5D,CAAC,CAAC,GAAG,MAAM,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;IACjD,CAAC;IAED,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAChD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;gBACjB,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { ASTNode } from './ASTNode.js';
2
+ import { PARAMREF } from '../constants.js';
3
+ import { toParamRef } from '../util.js';
4
+ export class ParamRefNode extends ASTNode {
5
+ constructor(name) {
6
+ super(PARAMREF);
7
+ this.name = name;
8
+ }
9
+ instantiate(ctx) {
10
+ return ctx.activeParams?.get(this.name);
11
+ }
12
+ codegen(ctx) {
13
+ return toParamRef(this.name);
14
+ }
15
+ toJSON() {
16
+ return toParamRef(this.name);
17
+ }
18
+ }
19
+ //# sourceMappingURL=ParamRefNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParamRefNode.js","sourceRoot":"","sources":["../../../src/ast/ParamRefNode.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,OAAO,YAAa,SAAQ,OAAO;IACvC,YAAY,IAAI;QACd,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,GAAG;QACb,OAAO,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG;QACT,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;CACF"}