drizzle-cube 0.2.24 → 0.2.26
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/adapters/compiler-C6JQHGrF.cjs +22 -0
- package/dist/adapters/{compiler-DkzdLcxq.js → compiler-Ddwn99Ja.js} +1419 -1287
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.d.ts +6 -1
- package/dist/adapters/express/index.js +22 -20
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.d.ts +6 -1
- package/dist/adapters/fastify/index.js +18 -16
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.d.ts +6 -1
- package/dist/adapters/hono/index.js +87 -85
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.d.ts +6 -1
- package/dist/adapters/nextjs/index.js +64 -63
- package/dist/adapters/utils.d.ts +18 -0
- package/dist/client/charts.js +2 -2
- package/dist/client/chunks/{charts-DboFPJFN.js → charts-BsXrHSCm.js} +32 -32
- package/dist/client/chunks/{charts-DboFPJFN.js.map → charts-BsXrHSCm.js.map} +1 -1
- package/dist/client/chunks/{charts--hFH-bsu.js → charts-BvLb1eub.js} +710 -703
- package/dist/client/chunks/charts-BvLb1eub.js.map +1 -0
- package/dist/client/chunks/components-BGWiuXqQ.js +15831 -0
- package/dist/client/chunks/components-BGWiuXqQ.js.map +1 -0
- package/dist/client/chunks/core-CX7kEAYO.js +6 -0
- package/dist/client/chunks/core-CX7kEAYO.js.map +1 -0
- package/dist/client/chunks/{index-yc7cf-yE.js → index-9x0R-Fme.js} +2 -2
- package/dist/client/chunks/{index-yc7cf-yE.js.map → index-9x0R-Fme.js.map} +1 -1
- package/dist/client/components/AnalysisBuilder/AnalysisQueryPanel.d.ts +3 -2
- package/dist/client/components/AnalysisBuilder/types.d.ts +63 -15
- package/dist/client/components/DashboardFilters/CompactFilterBar.d.ts +13 -0
- package/dist/client/components/DashboardFilters/CustomDateDropdown.d.ts +10 -0
- package/dist/client/components/DashboardFilters/DatePresetChips.d.ts +8 -0
- package/dist/client/components/DashboardFilters/FilterChip.d.ts +12 -0
- package/dist/client/components/DashboardFilters/FilterValuePopover.d.ts +11 -0
- package/dist/client/components/DashboardFilters/XTDDropdown.d.ts +10 -0
- package/dist/client/components/DashboardPortletCard.d.ts +12 -0
- package/dist/client/components/DebugModal.d.ts +7 -1
- package/dist/client/components/shared/utils.d.ts +34 -0
- package/dist/client/components.js +2 -2
- package/dist/client/hooks/useMultiCubeQuery.d.ts +36 -0
- package/dist/client/hooks.js +2 -2
- package/dist/client/icons.js +1 -1
- package/dist/client/index.d.ts +7 -1
- package/dist/client/index.js +70 -52
- package/dist/client/providers.js +1 -1
- package/dist/client/styles.css +1 -1
- package/dist/client/types.d.ts +32 -0
- package/dist/client/utils/multiQueryUtils.d.ts +86 -0
- package/dist/client/utils/multiQueryValidation.d.ts +69 -0
- package/dist/client/utils/shareUtils.d.ts +3 -3
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.cjs +17 -17
- package/dist/server/index.d.ts +326 -1
- package/dist/server/index.js +2429 -2148
- package/package.json +1 -1
- package/dist/adapters/compiler-BFqMax9M.cjs +0 -22
- package/dist/client/chunks/charts--hFH-bsu.js.map +0 -1
- package/dist/client/chunks/components-D7wTB56l.js +0 -14131
- package/dist/client/chunks/components-D7wTB56l.js.map +0 -1
- package/dist/client/chunks/core-PxWXpBbW.js +0 -6
- package/dist/client/chunks/core-PxWXpBbW.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { CubeResultSet, CubeQuery, QueryMergeStrategy } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Metadata fields injected into multi-query data
|
|
4
|
+
*/
|
|
5
|
+
export interface MultiQueryMetadata {
|
|
6
|
+
__queryIndex: number;
|
|
7
|
+
__queryLabel: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check if data contains multi-query metadata
|
|
11
|
+
*/
|
|
12
|
+
export declare function isMultiQueryData(data: unknown[]): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Get unique query labels from multi-query data
|
|
15
|
+
*/
|
|
16
|
+
export declare function getQueryLabels(data: unknown[]): string[];
|
|
17
|
+
/**
|
|
18
|
+
* Get query indices from multi-query data
|
|
19
|
+
*/
|
|
20
|
+
export declare function getQueryIndices(data: unknown[]): number[];
|
|
21
|
+
/**
|
|
22
|
+
* Merge results using 'concat' strategy
|
|
23
|
+
* Appends all rows with __queryIndex and __queryLabel metadata
|
|
24
|
+
*
|
|
25
|
+
* @param resultSets - Array of CubeResultSet from each query
|
|
26
|
+
* @param queries - Original CubeQuery objects
|
|
27
|
+
* @param labels - Optional user-defined labels per query
|
|
28
|
+
* @returns Merged data array with query metadata
|
|
29
|
+
*/
|
|
30
|
+
export declare function mergeResultsConcat(resultSets: CubeResultSet[], _queries: CubeQuery[], labels?: string[]): unknown[];
|
|
31
|
+
/**
|
|
32
|
+
* Merge results using 'merge' strategy
|
|
33
|
+
* Aligns data by common dimensions (composite key), combining measures from all queries
|
|
34
|
+
*
|
|
35
|
+
* Example:
|
|
36
|
+
* Query 1: [{ date: '2024-01', revenue: 100 }]
|
|
37
|
+
* Query 2: [{ date: '2024-01', cost: 50 }]
|
|
38
|
+
* Result: [{ date: '2024-01', revenue: 100, cost: 50 }]
|
|
39
|
+
*
|
|
40
|
+
* If multiple queries have the same measure, the first query's value is used.
|
|
41
|
+
*
|
|
42
|
+
* @param resultSets - Array of CubeResultSet from each query
|
|
43
|
+
* @param queries - Original CubeQuery objects
|
|
44
|
+
* @param mergeKeys - Dimension fields to align data on (composite key)
|
|
45
|
+
* @param _labels - Optional user-defined labels per query (unused, kept for API compatibility)
|
|
46
|
+
* @returns Merged data array with combined measures
|
|
47
|
+
*/
|
|
48
|
+
export declare function mergeResultsByKey(resultSets: CubeResultSet[], queries: CubeQuery[], mergeKeys: string[], _labels?: string[]): unknown[];
|
|
49
|
+
/**
|
|
50
|
+
* Main entry point for merging query results
|
|
51
|
+
* Delegates to appropriate strategy implementation
|
|
52
|
+
*
|
|
53
|
+
* @param resultSets - Array of CubeResultSet from each query
|
|
54
|
+
* @param queries - Original CubeQuery objects
|
|
55
|
+
* @param strategy - Merge strategy ('concat' or 'merge')
|
|
56
|
+
* @param mergeKeys - Dimension fields to align on (required for 'merge' strategy)
|
|
57
|
+
* @param labels - Optional user-defined labels per query
|
|
58
|
+
* @returns Merged data array
|
|
59
|
+
*/
|
|
60
|
+
export declare function mergeQueryResults(resultSets: CubeResultSet[], queries: CubeQuery[], strategy: QueryMergeStrategy, mergeKeys?: string[], labels?: string[]): unknown[];
|
|
61
|
+
/**
|
|
62
|
+
* Get combined fields from all queries
|
|
63
|
+
* Used for chart configuration to show all available measures/dimensions
|
|
64
|
+
*
|
|
65
|
+
* @param queries - Array of CubeQuery objects
|
|
66
|
+
* @param _labels - Optional user-defined labels per query (unused, kept for API compatibility)
|
|
67
|
+
* @returns Object containing combined measures, dimensions, and time dimensions
|
|
68
|
+
*/
|
|
69
|
+
export declare function getCombinedFields(queries: CubeQuery[], _labels?: string[]): {
|
|
70
|
+
measures: string[];
|
|
71
|
+
dimensions: string[];
|
|
72
|
+
timeDimensions: string[];
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Generate a default label for a query based on its measures
|
|
76
|
+
* Used when user doesn't provide custom labels
|
|
77
|
+
*/
|
|
78
|
+
export declare function generateQueryLabel(query: CubeQuery, index: number): string;
|
|
79
|
+
/**
|
|
80
|
+
* Validate merge key exists in all queries
|
|
81
|
+
* Returns validation result with details
|
|
82
|
+
*/
|
|
83
|
+
export declare function validateMergeKey(queries: CubeQuery[], mergeKey: string): {
|
|
84
|
+
isValid: boolean;
|
|
85
|
+
missingInQueries: number[];
|
|
86
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CubeQuery } from '../types';
|
|
2
|
+
type TimeDimension = NonNullable<CubeQuery['timeDimensions']>[number];
|
|
3
|
+
/**
|
|
4
|
+
* Validation error for multi-query configuration
|
|
5
|
+
*/
|
|
6
|
+
export interface MultiQueryValidationError {
|
|
7
|
+
type: 'missing_time_dimension' | 'granularity_mismatch' | 'missing_merge_key';
|
|
8
|
+
queryIndex: number;
|
|
9
|
+
message: string;
|
|
10
|
+
details?: {
|
|
11
|
+
field?: string;
|
|
12
|
+
expectedGranularity?: string;
|
|
13
|
+
actualGranularity?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Validation warning for multi-query configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface MultiQueryValidationWarning {
|
|
20
|
+
type: 'measure_collision' | 'asymmetric_date_range';
|
|
21
|
+
queryIndices: number[];
|
|
22
|
+
message: string;
|
|
23
|
+
affectedMeasures?: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Result of multi-query validation
|
|
27
|
+
*/
|
|
28
|
+
export interface MultiQueryValidationResult {
|
|
29
|
+
isValid: boolean;
|
|
30
|
+
errors: MultiQueryValidationError[];
|
|
31
|
+
warnings: MultiQueryValidationWarning[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extract time dimension info from a query
|
|
35
|
+
*/
|
|
36
|
+
export declare function extractTimeDimensions(query: CubeQuery): TimeDimension[];
|
|
37
|
+
/**
|
|
38
|
+
* Validate that all queries have matching time dimension granularities
|
|
39
|
+
* Only relevant for 'merge' strategy where data needs to align
|
|
40
|
+
*/
|
|
41
|
+
export declare function validateTimeDimensionAlignment(queries: CubeQuery[]): MultiQueryValidationError[];
|
|
42
|
+
/**
|
|
43
|
+
* Validate that merge keys exist in all queries
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateMergeKeys(queries: CubeQuery[], mergeKeys: string[]): MultiQueryValidationError[];
|
|
46
|
+
/**
|
|
47
|
+
* Detect when the same measure appears in multiple queries
|
|
48
|
+
* This is a warning since the first value wins in merge mode
|
|
49
|
+
*/
|
|
50
|
+
export declare function detectMeasureCollisions(queries: CubeQuery[]): MultiQueryValidationWarning[];
|
|
51
|
+
/**
|
|
52
|
+
* Check if queries have different date ranges
|
|
53
|
+
*/
|
|
54
|
+
export declare function detectAsymmetricDateRanges(queries: CubeQuery[]): MultiQueryValidationWarning[];
|
|
55
|
+
/**
|
|
56
|
+
* Validate a multi-query configuration
|
|
57
|
+
* For 'merge' strategy: strict validation (errors block execution)
|
|
58
|
+
* For 'concat' strategy: only warnings
|
|
59
|
+
*/
|
|
60
|
+
export declare function validateMultiQueryConfig(queries: CubeQuery[], mergeStrategy: 'concat' | 'merge', mergeKeys?: string[]): MultiQueryValidationResult;
|
|
61
|
+
/**
|
|
62
|
+
* Check if a multi-query configuration is valid for execution
|
|
63
|
+
*/
|
|
64
|
+
export declare function isMultiQueryValid(queries: CubeQuery[]): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Get human-readable validation summary
|
|
67
|
+
*/
|
|
68
|
+
export declare function getValidationSummary(result: MultiQueryValidationResult): string;
|
|
69
|
+
export {};
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { CubeQuery, ChartType, ChartAxisConfig, ChartDisplayConfig } from '../types';
|
|
1
|
+
import { CubeQuery, ChartType, ChartAxisConfig, ChartDisplayConfig, MultiQueryConfig } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* State that can be shared via URL
|
|
4
|
-
* Query is required, chart config is optional (may be dropped if too large)
|
|
4
|
+
* Query is required (can be single CubeQuery or MultiQueryConfig), chart config is optional (may be dropped if too large)
|
|
5
5
|
*/
|
|
6
6
|
export interface ShareableState {
|
|
7
|
-
query: CubeQuery;
|
|
7
|
+
query: CubeQuery | MultiQueryConfig;
|
|
8
8
|
chartType?: ChartType;
|
|
9
9
|
chartConfig?: ChartAxisConfig;
|
|
10
10
|
displayConfig?: ChartDisplayConfig;
|