@malloydata/render 0.0.73 → 0.0.74-dev230815162117

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.
@@ -1,4 +1,4 @@
1
- import { Explore, TagParse } from '@malloydata/malloy';
1
+ import { Explore, Tag } from '@malloydata/malloy';
2
2
  import { StyleDefaults } from '../data_styles';
3
3
  import { ChildRenderers, RenderTree } from '../renderer';
4
4
  import { RendererOptions } from '../renderer_types';
@@ -6,5 +6,5 @@ export declare abstract class ContainerRenderer extends RenderTree {
6
6
  childRenderers: ChildRenderers;
7
7
  protected abstract childrenStyleDefaults: StyleDefaults;
8
8
  get defaultStylesForChildren(): StyleDefaults;
9
- static make<Type extends ContainerRenderer>(c: new (document: Document, options: RendererOptions, tags?: TagParse) => Type, document: Document, exploreField: Explore, options: RendererOptions, tags?: TagParse): Type;
9
+ static make<Type extends ContainerRenderer>(c: new (document: Document, options: RendererOptions, tags: Tag) => Type, document: Document, exploreField: Explore, options: RendererOptions, tagged: Tag): Type;
10
10
  }
@@ -35,8 +35,8 @@ class ContainerRenderer extends renderer_1.RenderTree {
35
35
  // We can't use a normal constructor here because we need
36
36
  // we need to be fully constructed before we construct
37
37
  // our children.
38
- static make(c, document, exploreField, options, tags) {
39
- const n = new c(document, options, tags);
38
+ static make(c, document, exploreField, options, tagged) {
39
+ const n = new c(document, options, tagged);
40
40
  return n;
41
41
  }
42
42
  }
@@ -1,4 +1,4 @@
1
- import { DataArray, Explore, Field, Result, TagParse } from '@malloydata/malloy';
1
+ import { DataArray, Explore, Field, Result, Tag } from '@malloydata/malloy';
2
2
  import { StyleDefaults } from '../data_styles';
3
3
  import { Renderer } from '../renderer';
4
4
  import { RendererOptions } from '../renderer_types';
@@ -12,4 +12,4 @@ export declare class JSONView {
12
12
  constructor(document: Document);
13
13
  render(table: DataArray): Promise<HTMLElement>;
14
14
  }
15
- export declare function makeRenderer(field: Explore | Field, document: Document, options: RendererOptions, styleDefaults: StyleDefaults, queryTimezone: string | undefined, tags?: TagParse): Renderer;
15
+ export declare function makeRenderer(field: Explore | Field, document: Document, options: RendererOptions, styleDefaults: StyleDefaults, queryTimezone: string | undefined, tagged: Tag): Renderer;
@@ -39,7 +39,7 @@ class HTMLView {
39
39
  const table = result.data;
40
40
  const renderer = makeRenderer(table.field, this.document, options, {
41
41
  size: 'large',
42
- }, table.field.structDef.queryTimezone, result.tagParse());
42
+ }, table.field.structDef.queryTimezone, result.tagParse().tag);
43
43
  try {
44
44
  // TODO Implement row streaming capability for some renderers: some renderers should be usable
45
45
  // as a builder with `begin(field: StructDef)`, `row(field: StructDef, row: QueryDataRow)`,
@@ -142,37 +142,37 @@ function isContainer(field) {
142
142
  throw new Error(`${field.name} does not contain fields and cannot be rendered this way`);
143
143
  }
144
144
  }
145
- function makeRenderer(field, document, options, styleDefaults, queryTimezone, tags) {
145
+ function makeRenderer(field, document, options, styleDefaults, queryTimezone, tagged) {
146
146
  const renderDef = getRendererOptions(field, options.dataStyles);
147
147
  options.dataStyles[field.name] = renderDef;
148
- const renderer = new main_renderer_factory_1.MainRendererFactory().create(renderDef, tags, document, styleDefaults, options, field, queryTimezone);
148
+ const renderer = new main_renderer_factory_1.MainRendererFactory().create(renderDef, tagged, document, styleDefaults, options, field, queryTimezone);
149
149
  if (renderer) {
150
150
  return renderer;
151
151
  }
152
- if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'dashboard' || (0, utils_1.tagIsPresent)(tags, 'dashboard')) {
153
- return makeContainerRenderer(dashboard_1.HTMLDashboardRenderer, document, isContainer(field), options, tags);
152
+ if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'dashboard' || tagged.has('dashboard')) {
153
+ return makeContainerRenderer(dashboard_1.HTMLDashboardRenderer, document, isContainer(field), options, tagged);
154
154
  }
155
- else if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'list' || (0, utils_1.tagIsPresent)(tags, 'list')) {
156
- return makeContainerRenderer(list_1.HTMLListRenderer, document, isContainer(field), options, tags);
155
+ else if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'list' || tagged.has('list')) {
156
+ return makeContainerRenderer(list_1.HTMLListRenderer, document, isContainer(field), options, tagged);
157
157
  }
158
158
  else if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'list_detail' ||
159
- (0, utils_1.tagIsPresent)(tags, 'list_detail')) {
160
- return makeContainerRenderer(list_detail_1.HTMLListDetailRenderer, document, isContainer(field), options, tags);
159
+ tagged.has('list_detail')) {
160
+ return makeContainerRenderer(list_detail_1.HTMLListDetailRenderer, document, isContainer(field), options, tagged);
161
161
  }
162
162
  else if ((renderDef === null || renderDef === void 0 ? void 0 : renderDef.renderer) === 'table' ||
163
- (0, utils_1.tagIsPresent)(tags, 'table') ||
163
+ tagged.has('table') ||
164
164
  !field.hasParentExplore() ||
165
165
  field.isExploreField()) {
166
- return makeContainerRenderer(table_1.HTMLTableRenderer, document, isContainer(field), options, tags);
166
+ return makeContainerRenderer(table_1.HTMLTableRenderer, document, isContainer(field), options, tagged);
167
167
  }
168
168
  throw new Error(`Could not find a proper renderer for field ${field.name}`);
169
169
  }
170
170
  exports.makeRenderer = makeRenderer;
171
- function makeContainerRenderer(cType, document, explore, options, tags) {
172
- const c = container_1.ContainerRenderer.make(cType, document, explore, options, tags);
171
+ function makeContainerRenderer(cType, document, explore, options, tagged) {
172
+ const c = container_1.ContainerRenderer.make(cType, document, explore, options, tagged);
173
173
  const result = {};
174
174
  explore.intrinsicFields.forEach((field) => {
175
- result[field.name] = makeRenderer(field, document, options, c.defaultStylesForChildren, explore.queryTimezone, field.tagParse());
175
+ result[field.name] = makeRenderer(field, document, options, c.defaultStylesForChildren, explore.queryTimezone, field.tagParse().tag);
176
176
  });
177
177
  c.childRenderers = result;
178
178
  return c;
@@ -23,7 +23,6 @@
23
23
  */
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.HTMLTableRenderer = void 0;
26
- const malloy_1 = require("@malloydata/malloy");
27
26
  const drill_1 = require("../drill");
28
27
  const container_1 = require("./container");
29
28
  const number_1 = require("./number");
@@ -62,14 +61,14 @@ class HTMLTableRenderer extends container_1.ContainerRenderer {
62
61
  };
63
62
  }
64
63
  async render(table) {
65
- var _a, _b, _c, _d, _e, _f;
64
+ var _a;
66
65
  if (table.isNull()) {
67
66
  return this.document.createElement('span');
68
67
  }
69
68
  if (!table.isArray() && !table.isRecord()) {
70
69
  throw new Error('Invalid type for Table Renderer');
71
70
  }
72
- const shouldTranspose = (0, utils_1.tagIsPresent)(this.tags, 'transpose');
71
+ const shouldTranspose = this.tagged.has('transpose');
73
72
  if (shouldTranspose && table.field.intrinsicFields.length > 20) {
74
73
  throw new Error('Transpose limit of 20 columns exceeded.');
75
74
  }
@@ -85,13 +84,9 @@ class HTMLTableRenderer extends container_1.ContainerRenderer {
85
84
  }
86
85
  const childRenderer = this.childRenderers[field.name];
87
86
  const shouldPivot = childRenderer instanceof HTMLTableRenderer &&
88
- (0, utils_1.tagIsPresent)(childRenderer.tags, 'pivot');
87
+ childRenderer.tagged.has('pivot');
89
88
  if (shouldPivot) {
90
- const dimensionsTag = (_d = (_c = (_b = (_a = childRenderer.tags) === null || _a === void 0 ? void 0 : _a.tag) === null || _b === void 0 ? void 0 : _b.properties) === null || _c === void 0 ? void 0 : _c['pivot'].properties) === null || _d === void 0 ? void 0 : _d['dimensions'];
91
- const userDefinedDimensions = dimensionsTag
92
- ? (_e = new malloy_1.Tag(dimensionsTag)
93
- .array()) === null || _e === void 0 ? void 0 : _e.map(dimension => dimension.text()).filter(dimension => dimension !== undefined).map(dimension => dimension)
94
- : undefined;
89
+ const userDefinedDimensions = childRenderer.tagged.textArray('pivot', 'dimensions');
95
90
  let dimensions = undefined;
96
91
  let nonDimensions = [];
97
92
  const pivotedFields = new Map();
@@ -235,7 +230,7 @@ class HTMLTableRenderer extends container_1.ContainerRenderer {
235
230
  }
236
231
  const pfKey = field.pivotedField.key;
237
232
  if (pivotedCells.has(pfKey) &&
238
- ((_f = pivotedCells.get(pfKey)) === null || _f === void 0 ? void 0 : _f.has(field.field.name))) {
233
+ ((_a = pivotedCells.get(pfKey)) === null || _a === void 0 ? void 0 : _a.has(field.field.name))) {
239
234
  cells[rowIndex][columnIndex] = pivotedCells
240
235
  .get(pfKey)
241
236
  .get(field.field.name);
@@ -1,4 +1,4 @@
1
- import { DateTimeframe, Field, TagParse, Tags, TimestampTimeframe } from '@malloydata/malloy';
1
+ import { DateTimeframe, Field, TimestampTimeframe } from '@malloydata/malloy';
2
2
  import { RenderDef } from '../data_styles';
3
3
  import { RendererOptions } from '../renderer_types';
4
4
  export declare function getColorScale(type: 'temporal' | 'ordinal' | 'quantitative' | 'nominal' | undefined, isRectMark: boolean, hasOverlappingText?: boolean): {
@@ -11,6 +11,3 @@ export declare function createErrorElement(document: Document, error: string | E
11
11
  export declare function createNullElement(document: Document): HTMLElement;
12
12
  export declare function createDrillIcon(document: Document): HTMLElement;
13
13
  export declare function formatTitle(options: RendererOptions, field: Field, renderDef?: RenderDef | undefined, timezone?: string): string;
14
- export declare function tagIsPresent(tags: TagParse | undefined, tagToCheck: string): boolean;
15
- export declare function parameterTagValue(tags: Tags | undefined, tagToGetValue: string): string | undefined;
16
- export declare function parseCommaSeparatedParameterTagValue(tags: Tags | undefined, tagToGetValue: string): string[] | undefined;
@@ -25,7 +25,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
25
25
  return (mod && mod.__esModule) ? mod : { "default": mod };
26
26
  };
27
27
  Object.defineProperty(exports, "__esModule", { value: true });
28
- exports.parseCommaSeparatedParameterTagValue = exports.parameterTagValue = exports.tagIsPresent = exports.formatTitle = exports.createDrillIcon = exports.createNullElement = exports.createErrorElement = exports.yieldTask = exports.normalizeToTimezone = exports.timeToString = exports.getColorScale = void 0;
28
+ exports.formatTitle = exports.createDrillIcon = exports.createNullElement = exports.createErrorElement = exports.yieldTask = exports.normalizeToTimezone = exports.timeToString = exports.getColorScale = void 0;
29
29
  const malloy_1 = require("@malloydata/malloy");
30
30
  const startCase_1 = __importDefault(require("lodash/startCase"));
31
31
  const luxon_1 = require("luxon");
@@ -227,23 +227,4 @@ function formatTitle(options, field, renderDef, timezone) {
227
227
  return title;
228
228
  }
229
229
  exports.formatTitle = formatTitle;
230
- function tagIsPresent(tags, tagToCheck) {
231
- var _a, _b;
232
- const tagProperty = (_b = (_a = tags === null || tags === void 0 ? void 0 : tags.tag) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b[tagToCheck];
233
- return tagProperty !== undefined;
234
- }
235
- exports.tagIsPresent = tagIsPresent;
236
- function parameterTagValue(tags, tagToGetValue) {
237
- const tagProperty = tags === null || tags === void 0 ? void 0 : tags.getMalloyTags().properties[tagToGetValue];
238
- if (typeof tagProperty === 'string') {
239
- return tagProperty;
240
- }
241
- return undefined;
242
- }
243
- exports.parameterTagValue = parameterTagValue;
244
- function parseCommaSeparatedParameterTagValue(tags, tagToGetValue) {
245
- var _a;
246
- return (_a = parameterTagValue(tags, tagToGetValue)) === null || _a === void 0 ? void 0 : _a.split(',');
247
- }
248
- exports.parseCommaSeparatedParameterTagValue = parseCommaSeparatedParameterTagValue;
249
230
  //# sourceMappingURL=utils.js.map
@@ -1,4 +1,4 @@
1
- import { Field, Explore, TagParse } from '@malloydata/malloy';
1
+ import { Field, Explore, Tag } from '@malloydata/malloy';
2
2
  import { DataRenderOptions, RenderDef, StyleDefaults } from './data_styles';
3
3
  import { Renderer } from './renderer';
4
4
  import { RendererFactory } from './renderer_factory';
@@ -29,7 +29,7 @@ import { DataVolumeRendererFactory } from './html/data_volume';
29
29
  import { DurationRendererFactory } from './html/duration';
30
30
  export declare class MainRendererFactory {
31
31
  static renderFactories: (JSONRendererFactory | TextRendererFactory | NumberRendererFactory | ShapeMapRendererFactory | PointMapRendererFactory | ImageRendererFactory | SegmentMapRendererFactory | VegaRendererFactory | LineChartRendererFactory | SparkLineRendererFactory | BarChartRendererFactory | BarSparkLineRendererFactory | AreaSparkLineRendererFactory | ColumnSparkLineRendererFactory | ScatterChartRendererFactory | DateRendererFactory | CurrencyRendererFactory | PercentRendererFactory | BytesRendererFactory | BooleanRendererFactory | LinkRendererFactory | UnsupportedRendererFactory | DataVolumeRendererFactory | DurationRendererFactory)[];
32
- create(renderDef: RenderDef | undefined, tags: TagParse | undefined, document: Document, styleDefaults: StyleDefaults, rendererOptions: RendererOptions, field: Field | Explore, timezone?: string | undefined): Renderer | undefined;
32
+ create(renderDef: RenderDef | undefined, tagged: Tag, document: Document, styleDefaults: StyleDefaults, rendererOptions: RendererOptions, field: Field | Explore, timezone?: string | undefined): Renderer | undefined;
33
33
  matchesRenderDef(renderDef: RenderDef | undefined, factory: RendererFactory<DataRenderOptions>): boolean | "" | undefined;
34
- matchesTag(tagParse: TagParse | undefined, factory: RendererFactory<DataRenderOptions>): boolean | "" | undefined;
34
+ matchesTag(tagged: Tag, factory: RendererFactory<DataRenderOptions>): boolean | "" | undefined;
35
35
  }
@@ -26,10 +26,10 @@ const text_1 = require("./html/text");
26
26
  const data_volume_1 = require("./html/data_volume");
27
27
  const duration_1 = require("./html/duration");
28
28
  class MainRendererFactory {
29
- create(renderDef, tags, document, styleDefaults, rendererOptions, field, timezone) {
29
+ create(renderDef, tagged, document, styleDefaults, rendererOptions, field, timezone) {
30
30
  let factory;
31
31
  for (const f of MainRendererFactory.renderFactories) {
32
- if (((this.matchesRenderDef(renderDef, f) || this.matchesTag(tags, f)) &&
32
+ if (((this.matchesRenderDef(renderDef, f) || this.matchesTag(tagged, f)) &&
33
33
  f.isValidMatch(field)) ||
34
34
  f.activates(field)) {
35
35
  factory = f;
@@ -37,19 +37,15 @@ class MainRendererFactory {
37
37
  break;
38
38
  }
39
39
  }
40
- return factory === null || factory === void 0 ? void 0 : factory.create(document, styleDefaults, rendererOptions, field, renderDef || factory.parseTagParameters(tags) || {}, timezone);
40
+ return factory === null || factory === void 0 ? void 0 : factory.create(document, styleDefaults, rendererOptions, field, renderDef || factory.parseTagParameters(tagged) || {}, timezone);
41
41
  }
42
42
  matchesRenderDef(renderDef, factory) {
43
43
  return (renderDef &&
44
44
  factory.rendererName &&
45
45
  renderDef.renderer === factory.rendererName);
46
46
  }
47
- matchesTag(tagParse, factory) {
48
- var _a;
49
- const properties = (_a = tagParse === null || tagParse === void 0 ? void 0 : tagParse.tag) === null || _a === void 0 ? void 0 : _a.properties;
50
- return (properties &&
51
- factory.rendererName &&
52
- properties[factory.rendererName] !== undefined);
47
+ matchesTag(tagged, factory) {
48
+ return factory.rendererName && tagged.has(factory.rendererName);
53
49
  }
54
50
  }
55
51
  exports.MainRendererFactory = MainRendererFactory;
@@ -1,4 +1,4 @@
1
- import { DataColumn, TagParse } from '@malloydata/malloy';
1
+ import { DataColumn, Tag } from '@malloydata/malloy';
2
2
  import { RendererOptions } from './renderer_types';
3
3
  export declare type ChildRenderers = {
4
4
  [fieldName: string]: Renderer;
@@ -9,8 +9,8 @@ export interface Renderer {
9
9
  export declare abstract class RenderTree implements Renderer {
10
10
  protected readonly document: Document;
11
11
  protected readonly options: RendererOptions;
12
- protected readonly tags?: TagParse | undefined;
13
- constructor(document: Document, options: RendererOptions, tags?: TagParse | undefined);
12
+ protected readonly tagged: Tag;
13
+ constructor(document: Document, options: RendererOptions, tagged: Tag);
14
14
  protected abstract get childRenderers(): ChildRenderers;
15
15
  abstract render(value: DataColumn): Promise<HTMLElement>;
16
16
  }
package/dist/renderer.js CHANGED
@@ -24,10 +24,10 @@
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.RenderTree = void 0;
26
26
  class RenderTree {
27
- constructor(document, options, tags) {
27
+ constructor(document, options, tagged) {
28
28
  this.document = document;
29
29
  this.options = options;
30
- this.tags = tags;
30
+ this.tagged = tagged;
31
31
  }
32
32
  }
33
33
  exports.RenderTree = RenderTree;
@@ -1,4 +1,4 @@
1
- import { Explore, Field, Tag, TagParse } from '@malloydata/malloy';
1
+ import { Explore, Field, Tag } from '@malloydata/malloy';
2
2
  import { Renderer } from './renderer';
3
3
  import { DataRenderOptions, RenderDef, StyleDefaults } from './data_styles';
4
4
  import { RendererOptions } from './renderer_types';
@@ -9,7 +9,7 @@ export declare abstract class RendererFactory<T extends DataRenderOptions> {
9
9
  activates(_field: Field | Explore): boolean;
10
10
  isValidMatch(_field: Field | Explore): boolean;
11
11
  matches(renderDef: RenderDef): boolean;
12
- parseTagParameters(tagParse: TagParse | undefined): T;
12
+ parseTagParameters(tags: Tag): T;
13
13
  abstract get rendererName(): string | undefined;
14
14
  abstract create(document: Document, styleDefaults: StyleDefaults, rendererOptions: RendererOptions, field: Field | Explore, renderOptions: T, timezone?: string): Renderer;
15
15
  }
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RendererFactory = void 0;
4
- const malloy_1 = require("@malloydata/malloy");
5
4
  class RendererFactory {
6
5
  constructor() {
7
6
  this.tagOptionExtractors = {};
@@ -21,13 +20,12 @@ class RendererFactory {
21
20
  matches(renderDef) {
22
21
  return renderDef.renderer === this.rendererName;
23
22
  }
24
- parseTagParameters(tagParse) {
25
- var _a;
23
+ parseTagParameters(tags) {
26
24
  const options = {};
27
- for (const tag in this.tagOptionExtractors) {
28
- const tagValue = (_a = tagParse === null || tagParse === void 0 ? void 0 : tagParse.tag.properties) === null || _a === void 0 ? void 0 : _a[tag];
25
+ for (const tagName in this.tagOptionExtractors) {
26
+ const tagValue = tags.tag(tagName);
29
27
  if (tagValue) {
30
- this.tagOptionExtractors[tag](options, tagValue ? new malloy_1.Tag(tagValue) : undefined);
28
+ this.tagOptionExtractors[tagName](options, tagValue);
31
29
  }
32
30
  }
33
31
  return options;
@@ -1,2 +1,2 @@
1
1
  import { Field } from '@malloydata/malloy';
2
- export declare function isFieldHidden(field: Field): string | boolean;
2
+ export declare function isFieldHidden(field: Field): boolean;
@@ -24,7 +24,7 @@
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.isFieldHidden = void 0;
26
26
  function isFieldHidden(field) {
27
- return field.getTags().getMalloyTags().properties['hidden'];
27
+ return field.tagParse().tag.has('hidden');
28
28
  }
29
29
  exports.isFieldHidden = isFieldHidden;
30
30
  //# sourceMappingURL=tags_utils.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malloydata/render",
3
- "version": "0.0.73",
3
+ "version": "0.0.74-dev230815162117",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "prepublishOnly": "npm run build"
19
19
  },
20
20
  "dependencies": {
21
- "@malloydata/malloy": "^0.0.73",
21
+ "@malloydata/malloy": "^0.0.74-dev230815162117",
22
22
  "@types/luxon": "^2.4.0",
23
23
  "lodash": "^4.17.20",
24
24
  "luxon": "^2.4.0",