import { Merge } from "./utils.js"; import { ItemType, RelationalFields } from "./schema.js"; import { LiteralFields } from "./fields.js"; //#region src/types/functions.d.ts /** * Available query functions */ type DateTimeFunctions = "year" | "month" | "week" | "day" | "weekday" | "hour" | "minute" | "second"; type DateFunctions = "year" | "month" | "week" | "day" | "weekday"; type TimeFunctions = "hour" | "minute" | "second"; type ArrayFunctions = "count"; type QueryFunctions = { datetime: DateTimeFunctions; date: DateFunctions; time: TimeFunctions; json: ArrayFunctions; csv: ArrayFunctions; }; /** * Permute [function, field] combinations */ type PermuteFields = Fields extends string ? Funcs extends string ? [Fields, Funcs] : never : never; /** * Get all many relations on an item */ type RelationalFunctions = keyof { [Key in RelationalFields as Extract> extends any[] ? Key : never]: Key }; /** * Create a map of function fields and their resulting output names */ type TranslateFunctionFields = { [F in PermuteFields as `${F[1]}(${F[0]})`]: `${F[0]}_${F[1]}` }; /** * Combine the various function types */ type FunctionFields = { [Type in keyof QueryFunctions]: TypeFunctionFields }[keyof QueryFunctions] | keyof TranslateFunctionFields, ArrayFunctions>; /** * */ type TypeFunctionFields = keyof TranslateFunctionFields, QueryFunctions[Type$1]>; /** * Map all possible function fields on an item */ type MappedFunctionFields = Merge, ArrayFunctions>, TranslateFunctionFields, DateTimeFunctions> & TranslateFunctionFields, DateFunctions> & TranslateFunctionFields, TimeFunctions> & TranslateFunctionFields, ArrayFunctions>>; /** * Create a map of function fields with its original field name */ type FunctionFieldNames = { [F in PermuteFields as `${F[1]}(${F[0]})`]: F[0] }; /** * Map all possible function fields to name on an item */ type MappedFieldNames = Merge, ArrayFunctions>, FunctionFieldNames, DateTimeFunctions> & FunctionFieldNames, DateFunctions> & FunctionFieldNames, TimeFunctions> & FunctionFieldNames, ArrayFunctions>>; //#endregion export { ArrayFunctions, DateFunctions, DateTimeFunctions, FunctionFields, MappedFieldNames, MappedFunctionFields, PermuteFields, QueryFunctions, TimeFunctions, TypeFunctionFields }; //# sourceMappingURL=functions.d.ts.map