drizzle-cube
Version:
Drizzle ORM-first semantic layer with Cube.js compatibility. Type-safe analytics and dashboards with SQL injection protection.
111 lines (110 loc) • 4.6 kB
TypeScript
import { CubeQuery, Filter, SimpleFilter } from '../../types';
import { MetaField, MetaResponse } from '../QueryBuilder/types';
export { isSimpleFilter, isGroupFilter, isAndFilter, isOrFilter, flattenFilters, countFilters, createSimpleFilter, createAndFilter, createOrFilter, cleanupFilters, transformFiltersForServer, transformFiltersFromServer, hasQueryContent, cleanQuery, cleanQueryForServer, transformQueryForUI, getCubeNameFromField, getFieldType, getFieldTitle, getAvailableOperators, getAllFilterableFields, convertDateRangeTypeToValue, requiresNumberInput, formatDateForCube, } from '../../shared/utils';
/**
* Check if a field is selected in the current query
*/
export declare function isFieldSelected(fieldName: string, fieldType: 'measures' | 'dimensions' | 'timeDimensions', query: CubeQuery): boolean;
/**
* Get all time dimension fields from schema
*/
export declare function getTimeDimensionFields(schema: MetaResponse): MetaField[];
/**
* Get all non-time dimension fields from schema
*/
export declare function getRegularDimensionFields(schema: MetaResponse): MetaField[];
/**
* Get all measure fields from schema
*/
export declare function getMeasureFields(schema: MetaResponse): MetaField[];
/**
* Get count of selected fields across all types
*/
export declare function getSelectedFieldsCount(query: CubeQuery): number;
/**
* Group fields by cube name
*/
export declare function groupFieldsByCube(fields: MetaField[]): Record<string, MetaField[]>;
/**
* Create an empty query object
*/
export declare function createEmptyQuery(): CubeQuery;
/**
* Get all filterable fields from schema (measures, dimensions, and time dimensions)
* Returns ALL fields if no query provided, or only query fields if query provided
*/
export declare function getFilterableFields(schema: MetaResponse, query?: CubeQuery): MetaField[];
/**
* Get organized filter field options with query fields prioritized at top
*/
export declare function getOrganizedFilterFields(schema: MetaResponse, query?: CubeQuery): {
queryFields: MetaField[];
allFields: MetaField[];
};
/**
* Validate a filter
*/
export declare function validateFilter(filter: SimpleFilter, schema: MetaResponse): {
isValid: boolean;
errors: string[];
};
/**
* Clean up filters by removing any that reference fields not in the current query (legacy)
* Only used for backward compatibility - filters on non-query fields are now supported
*/
export declare function cleanupFiltersLegacy(filters: Filter[], query: CubeQuery): Filter[];
/**
* Get the time dimensions that have date ranges applied
*/
export declare function getTimeDimensionsWithDateRanges(query: CubeQuery): Record<string, string | string[]>;
/**
* Check if a query has any time dimensions
*/
export declare function hasTimeDimensions(query: CubeQuery): boolean;
/**
* Clean up order object by removing fields that are no longer in the query
*/
export declare function cleanupOrder(order: Record<string, 'asc' | 'desc'> | undefined, query: CubeQuery): Record<string, 'asc' | 'desc'> | undefined;
/**
* Get sort direction for a field from the order object
*/
export declare function getSortDirection(fieldName: string, order: Record<string, 'asc' | 'desc'> | undefined): 'asc' | 'desc' | null;
/**
* Get tooltip text for sort button based on current direction
*/
export declare function getSortTooltip(direction: 'asc' | 'desc' | null): string;
/**
* Get next sort direction in the cycle: null -> asc -> desc -> null
*/
export declare function getNextSortDirection(current: 'asc' | 'desc' | null): 'asc' | 'desc' | null;
/**
* Date preset configuration for compact filter bar
*/
export interface DatePreset {
id: string;
label: string;
value: string;
}
export declare const DATE_PRESETS: DatePreset[];
export declare const XTD_OPTIONS: DatePreset[];
/**
* Calculate actual date range from a preset string
* Returns start and end dates for display purposes
*/
export declare function calculateDateRange(preset: string): {
start: Date;
end: Date;
} | null;
/**
* Format a date range for display (e.g., "Jan 1, 2024 - Jan 31, 2024")
*/
export declare function formatDateRangeDisplay(start: Date, end: Date): string;
/**
* Detect preset ID from a date range value
* Returns the preset ID (e.g., '7d', 'mtd') or 'custom' if not a preset
*/
export declare function detectPresetFromDateRange(dateRange: string | string[] | undefined): string | null;
/**
* Format filter value for display in a compact chip
*/
export declare function formatFilterValueDisplay(values: any[], operator: string): string;