drizzle-cube
Version:
Drizzle ORM-first semantic layer with Cube.js compatibility. Type-safe analytics and dashboards with SQL injection protection.
107 lines (106 loc) • 3.89 kB
TypeScript
import { CubeQuery, Filter, SimpleFilter, GroupFilter } from '../types';
import { MetaField, MetaResponse } from './types';
/**
* Check if a filter is a simple filter
*/
export declare function isSimpleFilter(filter: Filter): filter is SimpleFilter;
/**
* Check if a filter is a group filter
*/
export declare function isGroupFilter(filter: Filter): filter is GroupFilter;
/**
* Check if a filter is an AND filter
*/
export declare function isAndFilter(filter: Filter): filter is GroupFilter;
/**
* Check if a filter is an OR filter
*/
export declare function isOrFilter(filter: Filter): filter is GroupFilter;
/**
* Flatten all simple filters from a hierarchical filter structure
*/
export declare function flattenFilters(filters: Filter[]): SimpleFilter[];
/**
* Count total filters in hierarchical structure
*/
export declare function countFilters(filters: Filter[]): number;
/**
* Create a new simple filter
*/
export declare function createSimpleFilter(member: string, operator?: string, values?: any[]): SimpleFilter;
/**
* Create a new AND filter group
*/
export declare function createAndFilter(filters?: Filter[]): GroupFilter;
/**
* Create a new OR filter group
*/
export declare function createOrFilter(filters?: Filter[]): GroupFilter;
/**
* Clean up filters - backward compatible (returns filters unchanged)
* @deprecated This function is no longer used as we now support filtering on any schema field
*/
export declare function cleanupFilters(filters: Filter[], _query?: CubeQuery): Filter[];
/**
* Transform filters from new GroupFilter format to legacy server format
* Server expects { and: [...] } and { or: [...] } instead of { type: 'and', filters: [...] }
*/
export declare function transformFiltersForServer(filters: Filter[]): any[];
/**
* Transform filters from server/API format to UI format
* Converts {and: [...]} and {or: [...]} to {type: 'and', filters: [...]} format
*/
export declare function transformFiltersFromServer(filters: any[]): Filter[];
/**
* Check if query has any content (measures, dimensions, or timeDimensions)
*/
export declare function hasQueryContent(query: CubeQuery): boolean;
/**
* Clean query object by removing empty arrays
*/
export declare function cleanQuery(query: CubeQuery): CubeQuery;
/**
* Clean a query and transform filters for server compatibility
* This version transforms GroupFilter to legacy and/or format
*/
export declare function cleanQueryForServer(query: CubeQuery): CubeQuery;
/**
* Transform a Cube.js query from external format to UI internal format
* This handles format differences between server/API queries and QueryBuilder state
*/
export declare function transformQueryForUI(query: any): CubeQuery;
/**
* Get cube name from field name (e.g., "Employees.count" -> "Employees")
*/
export declare function getCubeNameFromField(fieldName: string): string;
/**
* Get field type from schema
*/
export declare function getFieldType(fieldName: string, schema: MetaResponse): string;
/**
* Get field title from schema metadata, falling back to field name
*/
export declare function getFieldTitle(fieldName: string, schema: MetaResponse | null): string;
/**
* Get available operators for a field type
*/
export declare function getAvailableOperators(fieldType: string): Array<{
operator: string;
label: string;
}>;
/**
* Get ALL filterable fields from schema
*/
export declare function getAllFilterableFields(schema: MetaResponse): MetaField[];
/**
* Convert DateRangeType to Cube.js compatible date range format
*/
export declare function convertDateRangeTypeToValue(rangeType: string, number?: number): string;
/**
* Check if a date range type requires a number input
*/
export declare function requiresNumberInput(rangeType: string): boolean;
/**
* Format date for Cube.js (YYYY-MM-DD)
*/
export declare function formatDateForCube(date: Date): string;