@decaf-ts/for-couchdb
Version:
decaf-ts couchdb wrappers
65 lines (64 loc) • 2.98 kB
text/typescript
import { OrderDirection } from "@decaf-ts/core";
import { Constructor } from "@decaf-ts/decoration";
import { MangoQuery, MangoSelector, SortOrder } from "../types.d.mts";
export type MangoIndexCandidate = {
name: string;
ddoc: string;
fields: string[];
direction?: OrderDirection;
source: "table" | "defaultQuery" | "index";
};
export type MangoIndexResolution = {
candidate: MangoIndexCandidate;
use_index: string | [string, string];
};
export type MangoPlannerLog = {
debug?: (message: string) => void;
warn?: (message: string) => void;
};
export type RequiredMangoIndexShape = {
tableName: string;
modelName: string;
equalityFields: string[];
rangeFields: string[];
sortFields: string[];
sortDirection?: OrderDirection;
requiredFields: string[];
};
export type ReversedIndexDeclaration = {
attribute: string;
compositions: string[];
directions: OrderDirection[];
name: string;
ddoc: string;
fields: Array<string | Record<string, OrderDirection>>;
decorator: string;
};
export declare function normalizeSortField(entry: SortOrder): {
field: string;
direction?: OrderDirection;
} | undefined;
export declare function getSortFields(query: MangoQuery): string[];
export declare function getSortDirection(query: MangoQuery): OrderDirection | undefined;
export declare function getEqualitySelectorFields(selector?: MangoSelector): Set<string>;
export declare function getRangeSelectorFields(selector?: MangoSelector): Set<string>;
export declare function buildGeneratedIndexCandidates(clazz: Constructor): MangoIndexCandidate[];
export declare function findGeneratedIndexCandidateByName(clazz: Constructor, expectedName: string): MangoIndexCandidate | undefined;
export declare function resolveGeneratedIndexForQuery(clazz: Constructor, query: MangoQuery, options?: {
preserveDefaultQuery?: boolean;
requireSortCoverage?: boolean;
}): MangoIndexResolution | undefined;
export declare function getRequiredMangoIndexShape(clazz: Constructor, query: MangoQuery): RequiredMangoIndexShape;
export declare function reverseRequiredShapeToIndexDeclaration(clazz: Constructor, query: MangoQuery): ReversedIndexDeclaration;
export declare function attachGeneratedUseIndex(clazz: Constructor | undefined, query: MangoQuery, log?: MangoPlannerLog, options?: {
preserveDefaultQuery?: boolean;
requireSortCoverage?: boolean;
requireIndex?: boolean;
forceNamedIndexes?: boolean;
}): void;
export declare function requireGeneratedUseIndex(clazz: Constructor, query: MangoQuery, log?: MangoPlannerLog, options?: {
requireSortCoverage?: boolean;
}): void;
export declare function warnScanProneMangoOperators(selector: unknown, log?: MangoPlannerLog, path?: string): void;
export declare function ensureDeterministicSort(query: MangoQuery, tieBreaker: string, direction?: OrderDirection): void;
export declare function enableMangoExecutionStats(query: MangoQuery): void;