@lightdash/common 0.1462.2 → 0.1464.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 (43) hide show
  1. package/dist/compiler/exploreCompiler.d.ts +5 -2
  2. package/dist/compiler/exploreCompiler.js +9 -1
  3. package/dist/compiler/exploreCompiler.mock.js +40 -1
  4. package/dist/compiler/translator.d.ts +3 -2
  5. package/dist/compiler/translator.js +26 -6
  6. package/dist/compiler/translator.mock.js +27 -0
  7. package/dist/compiler/translator.test.js +19 -20
  8. package/dist/dbt/schemas/lightdashMetadata.json +1 -1
  9. package/dist/dbt/validation.d.ts +2 -1
  10. package/dist/index.d.ts +12 -7
  11. package/dist/index.js +8 -3
  12. package/dist/schemas/json/lightdash-dbt-2.0.json +63 -0
  13. package/dist/schemas/json/lightdash-project-config-1.0.json +17 -0
  14. package/dist/types/any.d.ts +7 -0
  15. package/dist/types/any.js +2 -0
  16. package/dist/types/api/errors.d.ts +2 -1
  17. package/dist/types/dbt.d.ts +21 -11
  18. package/dist/types/dbt.js +14 -3
  19. package/dist/types/errors.d.ts +18 -17
  20. package/dist/types/explore.d.ts +4 -0
  21. package/dist/types/field.d.ts +11 -6
  22. package/dist/types/field.js +3 -1
  23. package/dist/types/field.test.js +1 -0
  24. package/dist/types/filter.d.ts +4 -3
  25. package/dist/types/filterGrammar.d.ts +3 -2
  26. package/dist/types/lightdashProjectConfig.d.ts +8 -0
  27. package/dist/types/lightdashProjectConfig.js +6 -0
  28. package/dist/types/metricQuery.d.ts +8 -7
  29. package/dist/types/scheduler.d.ts +3 -2
  30. package/dist/types/user.d.ts +3 -2
  31. package/dist/types/warehouse.d.ts +5 -4
  32. package/dist/utils/filters.d.ts +6 -5
  33. package/dist/utils/formatting.js +2 -1
  34. package/dist/utils/formatting.test.js +5 -1
  35. package/dist/utils/item.d.ts +3 -0
  36. package/dist/utils/loadLightdashProjectConfig.d.ts +2 -0
  37. package/dist/utils/loadLightdashProjectConfig.js +26 -0
  38. package/dist/utils/metricsExplorer.d.ts +3 -2
  39. package/dist/utils/virtualView.js +1 -0
  40. package/dist/visualizations/CartesianChartDataModel.d.ts +4 -3
  41. package/dist/visualizations/PieChartDataModel.d.ts +2 -1
  42. package/dist/visualizations/TableDataModel.d.ts +2 -1
  43. package/package.json +4 -1
@@ -1,11 +1,12 @@
1
+ import { type AnyType } from './any';
1
2
  import { FilterOperator, type MetricFilterRule } from './filter';
2
3
  export type ParsedFilter = {
3
4
  type: string;
4
- values: any[];
5
+ values: AnyType[];
5
6
  is?: boolean;
6
7
  date_interval?: string;
7
8
  };
8
9
  declare const filterGrammar: string;
9
10
  export declare const parseOperator: (operator: string, isTrue: boolean) => FilterOperator;
10
- export declare const parseFilters: (rawFilters: Record<string, any>[] | undefined) => MetricFilterRule[];
11
+ export declare const parseFilters: (rawFilters: Record<string, AnyType>[] | undefined) => MetricFilterRule[];
11
12
  export default filterGrammar;
@@ -0,0 +1,8 @@
1
+ type SpotlightConfig = {
2
+ default_visibility: 'show' | 'hide';
3
+ };
4
+ export type LightdashProjectConfig = {
5
+ spotlight: SpotlightConfig;
6
+ };
7
+ export declare const DEFAULT_SPOTLIGHT_CONFIG: Required<SpotlightConfig>;
8
+ export {};
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SPOTLIGHT_CONFIG = void 0;
4
+ exports.DEFAULT_SPOTLIGHT_CONFIG = {
5
+ default_visibility: 'show',
6
+ };
@@ -1,3 +1,4 @@
1
+ import { type AnyType } from './any';
1
2
  import { type CompactOrAlias, type CompiledCustomDimension, type CompiledDimension, type CompiledMetric, type CompiledTableCalculation, type CustomDimension, type CustomFormat, type FieldId, type Format, type Metric, type MetricType, type TableCalculation } from './field';
2
3
  import { type Filters, type MetricFilterRule } from './filter';
3
4
  import { type DateGranularity } from './timeFrames';
@@ -19,8 +20,8 @@ export interface AdditionalMetric {
19
20
  percentile?: number;
20
21
  formatOptions?: CustomFormat;
21
22
  }
22
- export declare const isAdditionalMetric: (value: any) => value is AdditionalMetric;
23
- export declare const hasFormatOptions: (value: any) => value is {
23
+ export declare const isAdditionalMetric: (value: AnyType) => value is AdditionalMetric;
24
+ export declare const hasFormatOptions: (value: AnyType) => value is {
24
25
  formatOptions: CustomFormat;
25
26
  };
26
27
  export declare const getCustomMetricDimensionId: (metric: AdditionalMetric) => string;
@@ -55,10 +56,10 @@ export type SortField = {
55
56
  export declare const getAdditionalMetricLabel: (item: AdditionalMetric) => string;
56
57
  type FilterGroupResponse = {
57
58
  id: string;
58
- or: any[];
59
+ or: AnyType[];
59
60
  } | {
60
61
  id: string;
61
- and: any[];
62
+ and: AnyType[];
62
63
  };
63
64
  export type FiltersResponse = {
64
65
  dimensions?: FilterGroupResponse;
@@ -91,9 +92,9 @@ export type MetricQueryRequest = {
91
92
  dimensions: FieldId[];
92
93
  metrics: FieldId[];
93
94
  filters: {
94
- dimensions?: any;
95
- metrics?: any;
96
- tableCalculations?: any;
95
+ dimensions?: AnyType;
96
+ metrics?: AnyType;
97
+ tableCalculations?: AnyType;
97
98
  };
98
99
  sorts: SortField[];
99
100
  limit: number;
@@ -1,3 +1,4 @@
1
+ import { type AnyType } from './any';
1
2
  import { type Explore, type ExploreError } from './explore';
2
3
  import { type DashboardFilterRule } from './filter';
3
4
  import { type MetricQuery } from './metricQuery';
@@ -43,7 +44,7 @@ export type SchedulerLog = {
43
44
  status: SchedulerJobStatus;
44
45
  target?: string;
45
46
  targetType?: 'email' | 'slack' | 'gsheets';
46
- details?: Record<string, any>;
47
+ details?: Record<string, AnyType>;
47
48
  };
48
49
  export type CreateSchedulerLog = Omit<SchedulerLog, 'createdAt'>;
49
50
  export declare enum ThresholdOperator {
@@ -283,7 +284,7 @@ export type ApiJobStatusResponse = {
283
284
  status: 'ok';
284
285
  results: {
285
286
  status: SchedulerJobStatus;
286
- details: Record<string, any> | null;
287
+ details: Record<string, AnyType> | null;
287
288
  };
288
289
  };
289
290
  export type SchedulerCronUpdate = {
@@ -1,5 +1,6 @@
1
1
  import { type AbilityBuilder } from '@casl/ability';
2
2
  import { type MemberAbility } from '../authorization/types';
3
+ import { type AnyType } from './any';
3
4
  import { type OpenIdIdentityIssuerType } from './openIdIdentity';
4
5
  import { type OrganizationMemberRole } from './organizationMemberProfile';
5
6
  export interface LightdashUser {
@@ -39,7 +40,7 @@ export interface UpdatedByUser {
39
40
  firstName: string;
40
41
  lastName: string;
41
42
  }
42
- export declare const isSessionUser: (user: any) => user is SessionUser;
43
+ export declare const isSessionUser: (user: AnyType) => user is SessionUser;
43
44
  export interface OpenIdUser {
44
45
  openId: {
45
46
  subject: string;
@@ -51,7 +52,7 @@ export interface OpenIdUser {
51
52
  groups?: string[] | undefined;
52
53
  };
53
54
  }
54
- export declare const isOpenIdUser: (user: any) => user is OpenIdUser;
55
+ export declare const isOpenIdUser: (user: AnyType) => user is OpenIdUser;
55
56
  export type UserAllowedOrganization = {
56
57
  organizationUuid: string;
57
58
  name: string;
@@ -1,4 +1,5 @@
1
1
  import { type WeekDay } from '../utils/timeFrames';
2
+ import { type AnyType } from './any';
2
3
  import { type SupportedDbtAdapter } from './dbt';
3
4
  import { type DimensionType, type Metric } from './field';
4
5
  import { type CreateWarehouseCredentials } from './projects';
@@ -31,7 +32,7 @@ export type WarehouseResults = {
31
32
  fields: Record<string, {
32
33
  type: DimensionType;
33
34
  }>;
34
- rows: Record<string, any>[];
35
+ rows: Record<string, AnyType>[];
35
36
  };
36
37
  export interface WarehouseClient {
37
38
  credentials: CreateWarehouseCredentials;
@@ -41,7 +42,7 @@ export interface WarehouseClient {
41
42
  table: string;
42
43
  }[]) => Promise<WarehouseCatalog>;
43
44
  streamQuery(query: string, streamCallback: (data: WarehouseResults) => void, options: {
44
- values?: any[];
45
+ values?: AnyType[];
45
46
  tags: Record<string, string>;
46
47
  timezone?: string;
47
48
  }): Promise<void>;
@@ -53,7 +54,7 @@ export interface WarehouseClient {
53
54
  * @param values
54
55
  * @deprecated Use streamQuery() instead to avoid loading all results into memory
55
56
  */
56
- runQuery(sql: string, tags: Record<string, string>, timezone?: string, values?: any[]): Promise<WarehouseResults>;
57
+ runQuery(sql: string, tags: Record<string, string>, timezone?: string, values?: AnyType[]): Promise<WarehouseResults>;
57
58
  test(): Promise<void>;
58
59
  getStartOfWeek(): WeekDay | null | undefined;
59
60
  getAdapterType(): SupportedDbtAdapter;
@@ -63,7 +64,7 @@ export interface WarehouseClient {
63
64
  concatString(...args: string[]): string;
64
65
  getAllTables(schema?: string, tags?: Record<string, string>): Promise<WarehouseTables>;
65
66
  getFields(tableName: string, schema?: string, database?: string, tags?: Record<string, string>): Promise<WarehouseCatalog>;
66
- parseWarehouseCatalog(rows: Record<string, any>[], mapFieldType: (type: string) => DimensionType): WarehouseCatalog;
67
+ parseWarehouseCatalog(rows: Record<string, AnyType>[], mapFieldType: (type: string) => DimensionType): WarehouseCatalog;
67
68
  parseError(error: Error): Error;
68
69
  }
69
70
  export type ApiWarehouseCatalog = {
@@ -1,3 +1,4 @@
1
+ import { type AnyType } from '../types/any';
1
2
  import { type DashboardTile } from '../types/dashboard';
2
3
  import { type Table } from '../types/explore';
3
4
  import { type CompiledField, type CustomSqlDimension, type Dimension, type Field, type FilterableDimension, type FilterableField, type FilterableItem, type ItemsMap, type TableCalculation } from '../types/field';
@@ -12,13 +13,13 @@ export declare const getItemsFromFilterGroup: (filterGroup: FilterGroup | undefi
12
13
  export declare const getFilterGroupItemsPropertyName: (filterGroup: FilterGroup | undefined) => 'and' | 'or';
13
14
  export declare const getFilterTypeFromItem: (item: FilterableField) => FilterType;
14
15
  export declare const timeframeToUnitOfTime: (timeframe: TimeFrames) => UnitOfTime | undefined;
15
- export declare const getFilterRuleWithDefaultValue: <T extends FilterRule<FilterOperator, import("../types/filter").FieldTarget, any, any>>(field: FilterableField, filterRule: T, values?: any[] | null) => T;
16
- export declare const createFilterRuleFromField: (field: FilterableField, value?: any) => FilterRule;
16
+ export declare const getFilterRuleWithDefaultValue: <T extends FilterRule<FilterOperator, import("../types/filter").FieldTarget, any, any>>(field: FilterableField, filterRule: T, values?: AnyType[] | null) => T;
17
+ export declare const createFilterRuleFromField: (field: FilterableField, value?: AnyType) => FilterRule;
17
18
  export declare const matchFieldExact: (a: Field) => (b: Field) => boolean;
18
19
  export declare const matchFieldByTypeAndName: (a: Field) => (b: Field) => boolean;
19
20
  export declare const matchFieldByType: (a: Field) => (b: Field) => boolean;
20
21
  export declare const isTileFilterable: (tile: DashboardTile) => boolean;
21
- export declare const applyDefaultTileTargets: (filterRule: DashboardFilterRule<FilterOperator, DashboardFieldTarget, any, any>, field: FilterableDimension, availableTileFilters: Record<string, FilterableDimension[] | undefined>) => DashboardFilterRule<FilterOperator, DashboardFieldTarget, any, any>;
22
+ export declare const applyDefaultTileTargets: (filterRule: DashboardFilterRule<FilterOperator, DashboardFieldTarget, AnyType, AnyType>, field: FilterableDimension, availableTileFilters: Record<string, FilterableDimension[] | undefined>) => DashboardFilterRule<FilterOperator, DashboardFieldTarget, any, any>;
22
23
  export declare const createDashboardFilterRuleFromField: ({ field, availableTileFilters, isTemporary, value, }: {
23
24
  field: Exclude<FilterableItem, TableCalculation | CustomSqlDimension> | CompiledField;
24
25
  availableTileFilters: Record<string, FilterableDimension[] | undefined>;
@@ -28,7 +29,7 @@ export declare const createDashboardFilterRuleFromField: ({ field, availableTile
28
29
  type AddFilterRuleArgs = {
29
30
  filters: Filters;
30
31
  field: FilterableField;
31
- value?: any;
32
+ value?: AnyType;
32
33
  };
33
34
  export declare const addFilterRule: ({ filters, field, value, }: AddFilterRuleArgs) => Filters;
34
35
  /**
@@ -37,7 +38,7 @@ export declare const addFilterRule: ({ filters, field, value, }: AddFilterRuleAr
37
38
  * @param value - The value to check
38
39
  * @returns True if the value is an invalid date, false otherwise
39
40
  */
40
- export declare const isDimensionValueInvalidDate: (item: FilterableField, value: any) => boolean;
41
+ export declare const isDimensionValueInvalidDate: (item: FilterableField, value: AnyType) => boolean;
41
42
  /**
42
43
  * Takes a filter group and build a filters object from it based on the field type
43
44
  * @param filterGroup - The filter group to extract filters from
@@ -16,6 +16,7 @@ exports.currencies = [
16
16
  'EUR',
17
17
  'GBP',
18
18
  'JPY',
19
+ 'DKK',
19
20
  'CHF',
20
21
  'CAD',
21
22
  'AUD',
@@ -25,7 +26,6 @@ exports.currencies = [
25
26
  'CLP',
26
27
  'COP',
27
28
  'CZK',
28
- 'DKK',
29
29
  'HKD',
30
30
  'HUF',
31
31
  'INR',
@@ -188,6 +188,7 @@ function getCustomFormatFromLegacy({ format, compact, round, }) {
188
188
  case field_1.Format.GBP:
189
189
  case field_1.Format.USD:
190
190
  case field_1.Format.JPY:
191
+ case field_1.Format.DKK:
191
192
  return {
192
193
  type: field_1.CustomFormatType.CURRENCY,
193
194
  currency: format.toUpperCase(),
@@ -67,6 +67,10 @@ describe('Formatting', () => {
67
67
  type: field_1.CustomFormatType.CURRENCY,
68
68
  currency: field_1.Format.JPY,
69
69
  })).toEqual('¥5');
70
+ expect((0, formatting_1.applyCustomFormat)(5, {
71
+ type: field_1.CustomFormatType.CURRENCY,
72
+ currency: field_1.Format.DKK,
73
+ })).toEqual('DKK 5.00');
70
74
  });
71
75
  test('if Format is percent it should return the right format', () => {
72
76
  const percentFormat = {
@@ -653,6 +657,7 @@ describe('Formatting', () => {
653
657
  '€1.00',
654
658
  '£1.00',
655
659
  '¥1',
660
+ 'DKK 1.00',
656
661
  'CHF 1.00',
657
662
  'CA$1.00',
658
663
  'A$1.00',
@@ -662,7 +667,6 @@ describe('Formatting', () => {
662
667
  'CLP 1',
663
668
  'COP 1.00',
664
669
  'CZK 1.00',
665
- 'DKK 1.00',
666
670
  'HK$1.00',
667
671
  'HUF 1.00',
668
672
  '₹1.00',
@@ -51,5 +51,8 @@ export declare const replaceDimensionInExplore: (explore: Explore, dimension: Co
51
51
  ymlPath?: string | undefined;
52
52
  sqlPath?: string | undefined;
53
53
  type?: import("../types/explore").ExploreType | undefined;
54
+ spotlight?: {
55
+ visibility: "show" | "hide";
56
+ } | undefined;
54
57
  };
55
58
  export declare const canApplyFormattingToCustomMetric: (item: Dimension, customMetricType: MetricType) => boolean;
@@ -0,0 +1,2 @@
1
+ import { type LightdashProjectConfig } from '../types/lightdashProjectConfig';
2
+ export declare const loadLightdashProjectConfig: (yamlFileContents: string) => Promise<LightdashProjectConfig>;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadLightdashProjectConfig = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ajv_1 = tslib_1.__importDefault(require("ajv"));
6
+ const better_ajv_errors_1 = tslib_1.__importDefault(require("better-ajv-errors"));
7
+ const yaml = tslib_1.__importStar(require("js-yaml"));
8
+ const lightdash_project_config_1_0_json_1 = tslib_1.__importDefault(require("../schemas/json/lightdash-project-config-1.0.json"));
9
+ const errors_1 = require("../types/errors");
10
+ const lightdashProjectConfig_1 = require("../types/lightdashProjectConfig");
11
+ const loadLightdashProjectConfig = async (yamlFileContents) => {
12
+ if (yamlFileContents.trim() === '') {
13
+ return {
14
+ spotlight: lightdashProjectConfig_1.DEFAULT_SPOTLIGHT_CONFIG,
15
+ };
16
+ }
17
+ const configFile = yaml.load(yamlFileContents);
18
+ const ajv = new ajv_1.default({ coerceTypes: true });
19
+ const validate = ajv.compile(lightdash_project_config_1_0_json_1.default);
20
+ if (!validate(configFile)) {
21
+ const errors = (0, better_ajv_errors_1.default)(lightdash_project_config_1_0_json_1.default, configFile, validate.errors || [], { indent: 2 });
22
+ throw new errors_1.ParseError(`Invalid lightdash.config.yml with errors:\n${errors}`);
23
+ }
24
+ return configFile;
25
+ };
26
+ exports.loadLightdashProjectConfig = loadLightdashProjectConfig;
@@ -1,3 +1,4 @@
1
+ import { type AnyType } from '../types/any';
1
2
  import type { MetricWithAssociatedTimeDimension } from '../types/catalog';
2
3
  import { ConditionalOperator } from '../types/conditionalRule';
3
4
  import { type CompiledTable } from '../types/explore';
@@ -21,11 +22,11 @@ export declare const getMetricsExplorerSegmentFilters: (segmentDimension: string
21
22
  export declare const getMetricExplorerDateRangeFilters: (timeDimensionConfig: TimeDimensionConfig, dateRange: MetricExplorerDateRange) => DateFilter[];
22
23
  export declare const parseMetricValue: (value: unknown) => number | null;
23
24
  export declare const MAX_SEGMENT_DIMENSION_UNIQUE_VALUES = 10;
24
- export declare const getMetricExplorerDataPoints: (dimension: Dimension, metric: MetricWithAssociatedTimeDimension, metricRows: Record<string, any>[], segmentDimensionId: string | null) => {
25
+ export declare const getMetricExplorerDataPoints: (dimension: Dimension, metric: MetricWithAssociatedTimeDimension, metricRows: Record<string, AnyType>[], segmentDimensionId: string | null) => {
25
26
  dataPoints: Array<MetricExploreDataPoint>;
26
27
  isSegmentDimensionFiltered: boolean;
27
28
  };
28
- export declare const getMetricExplorerDataPointsWithCompare: (dimension: Dimension, compareDimension: Dimension, metric: MetricWithAssociatedTimeDimension, metricRows: Record<string, any>[], compareMetricRows: Record<string, any>[], query: MetricExplorerQuery, timeFrame: TimeFrames) => {
29
+ export declare const getMetricExplorerDataPointsWithCompare: (dimension: Dimension, compareDimension: Dimension, metric: MetricWithAssociatedTimeDimension, metricRows: Record<string, AnyType>[], compareMetricRows: Record<string, AnyType>[], query: MetricExplorerQuery, timeFrame: TimeFrames) => {
29
30
  dataPoints: Array<MetricExploreDataPoint>;
30
31
  };
31
32
  /**
@@ -42,6 +42,7 @@ const createVirtualView = (virtualViewName, sql, columns, warehouseClient, label
42
42
  joinedTables: [],
43
43
  tables: { [virtualViewName]: compiledTable },
44
44
  targetDatabase: warehouseClient.getAdapterType(),
45
+ meta: {},
45
46
  });
46
47
  const virtualView = {
47
48
  ...explore,
@@ -1,9 +1,10 @@
1
+ import { type AnyType } from '../types/any';
1
2
  import { Format } from '../types/field';
2
3
  import { type Organization } from '../types/organization';
3
4
  import { type RawResultRow } from '../types/results';
4
5
  import { ChartKind, type CartesianSeriesType } from '../types/savedCharts';
5
6
  import { type SemanticLayerQuery } from '../types/semanticLayer';
6
- import { type AxisSide, VizIndexType, type PivotChartData, type PivotChartLayout, type VizCartesianChartConfig, type VizCartesianChartOptions } from './types';
7
+ import { VizIndexType, type AxisSide, type PivotChartData, type PivotChartLayout, type VizCartesianChartConfig, type VizCartesianChartOptions } from './types';
7
8
  import { type IResultsRunner } from './types/IResultsRunner';
8
9
  type CartesianChartKind = Extract<ChartKind, ChartKind.LINE | ChartKind.VERTICAL_BAR>;
9
10
  export declare class CartesianChartDataModel {
@@ -17,7 +18,7 @@ export declare class CartesianChartDataModel {
17
18
  type?: CartesianChartKind;
18
19
  });
19
20
  static getTooltipFormatter(format: Format | undefined): ((value: number) => string) | undefined;
20
- static getValueFormatter(format: Format | undefined): ((params: any) => string) | undefined;
21
+ static getValueFormatter(format: Format | undefined): ((params: AnyType) => string) | undefined;
21
22
  mergeConfig(chartKind: CartesianChartKind, existingConfig: VizCartesianChartConfig | undefined): VizCartesianChartConfig;
22
23
  getChartOptions(): VizCartesianChartOptions;
23
24
  getDefaultLayout(): PivotChartLayout | undefined;
@@ -43,7 +44,7 @@ export declare class CartesianChartDataModel {
43
44
  rows: RawResultRow[];
44
45
  } | undefined;
45
46
  getDataDownloadUrl(): string | undefined;
46
- getSpec(display?: CartesianChartDisplay, colors?: Organization['chartColors']): Record<string, any>;
47
+ getSpec(display?: CartesianChartDisplay, colors?: Organization['chartColors']): Record<string, AnyType>;
47
48
  }
48
49
  export declare enum ValueLabelPositionOptions {
49
50
  HIDDEN = "hidden",
@@ -1,3 +1,4 @@
1
+ import { type AnyType } from '../types/any';
1
2
  import { type RawResultRow } from '../types/results';
2
3
  import { type ChartKind } from '../types/savedCharts';
3
4
  import { type SemanticLayerQuery } from '../types/semanticLayer';
@@ -36,5 +37,5 @@ export declare class PieChartDataModel {
36
37
  rows: RawResultRow[];
37
38
  } | undefined;
38
39
  getDataDownloadUrl(): string | undefined;
39
- getSpec(display?: VizPieChartDisplay): Record<string, any>;
40
+ getSpec(display?: VizPieChartDisplay): Record<string, AnyType>;
40
41
  }
@@ -1,3 +1,4 @@
1
+ import { type AnyType } from '../types/any';
1
2
  import { type RawResultRow } from '../types/results';
2
3
  import { type ChartKind } from '../types/savedCharts';
3
4
  import { type SemanticLayerQuery } from '../types/semanticLayer';
@@ -29,7 +30,7 @@ export declare class TableDataModel {
29
30
  rows: RawResultRow[];
30
31
  } | undefined;
31
32
  getSpec(_display?: VizTableDisplay): {
32
- spec: Record<string, any>;
33
+ spec: Record<string, AnyType>;
33
34
  tableData: {
34
35
  columns: string[];
35
36
  rows: RawResultRow[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lightdash/common",
3
- "version": "0.1462.2",
3
+ "version": "0.1464.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -8,6 +8,7 @@
8
8
  ],
9
9
  "license": "MIT",
10
10
  "devDependencies": {
11
+ "@types/js-yaml": "^4.0.9",
11
12
  "@types/pegjs": "^0.10.3",
12
13
  "@types/sanitize-html": "^2.11.0",
13
14
  "@types/uuid": "^10.0.0",
@@ -18,9 +19,11 @@
18
19
  "@types/lodash": "^4.14.202",
19
20
  "ajv": "^8.3.0",
20
21
  "ajv-formats": "^2.1.0",
22
+ "better-ajv-errors": "^1.2.0",
21
23
  "cronstrue": "^2.23.0",
22
24
  "dayjs": "^1.11.9",
23
25
  "dependency-graph": "^0.11.0",
26
+ "js-yaml": "^4.1.0",
24
27
  "liquidjs": "^10.0.0",
25
28
  "lodash": "^4.17.21",
26
29
  "moment": "^2.29.4",