UNPKG

@directus/sdk

Version:

Directus JavaScript SDK

55 lines (53 loc) 2.95 kB
import { Merge } from "./utils.cjs"; import { ItemType, RelationalFields } from "./schema.cjs"; import { LiteralFields } from "./fields.cjs"; //#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, Funcs> = Fields extends string ? Funcs extends string ? [Fields, Funcs] : never : never; /** * Get all many relations on an item */ type RelationalFunctions<Schema, Item> = keyof { [Key in RelationalFields<Schema, Item> as Extract<Item[Key], ItemType<Schema>> extends any[] ? Key : never]: Key }; /** * Create a map of function fields and their resulting output names */ type TranslateFunctionFields<Fields, Funcs> = { [F in PermuteFields<Fields, Funcs> as `${F[1]}(${F[0]})`]: `${F[0]}_${F[1]}` }; /** * Combine the various function types */ type FunctionFields<Schema, Item> = { [Type in keyof QueryFunctions]: TypeFunctionFields<Item, Type> }[keyof QueryFunctions] | keyof TranslateFunctionFields<RelationalFunctions<Schema, Item>, ArrayFunctions>; /** * */ type TypeFunctionFields<Item, Type$1 extends keyof QueryFunctions> = keyof TranslateFunctionFields<LiteralFields<Item, Type$1>, QueryFunctions[Type$1]>; /** * Map all possible function fields on an item */ type MappedFunctionFields<Schema, Item> = Merge<TranslateFunctionFields<RelationalFunctions<Schema, Item>, ArrayFunctions>, TranslateFunctionFields<LiteralFields<Item, "datetime">, DateTimeFunctions> & TranslateFunctionFields<LiteralFields<Item, "date">, DateFunctions> & TranslateFunctionFields<LiteralFields<Item, "time">, TimeFunctions> & TranslateFunctionFields<LiteralFields<Item, "json" | "csv">, ArrayFunctions>>; /** * Create a map of function fields with its original field name */ type FunctionFieldNames<Fields, Funcs> = { [F in PermuteFields<Fields, Funcs> as `${F[1]}(${F[0]})`]: F[0] }; /** * Map all possible function fields to name on an item */ type MappedFieldNames<Schema, Item> = Merge<FunctionFieldNames<RelationalFunctions<Schema, Item>, ArrayFunctions>, FunctionFieldNames<LiteralFields<Item, "datetime">, DateTimeFunctions> & FunctionFieldNames<LiteralFields<Item, "date">, DateFunctions> & FunctionFieldNames<LiteralFields<Item, "time">, TimeFunctions> & FunctionFieldNames<LiteralFields<Item, "json" | "csv">, ArrayFunctions>>; //#endregion export { ArrayFunctions, DateFunctions, DateTimeFunctions, FunctionFields, MappedFieldNames, MappedFunctionFields, PermuteFields, QueryFunctions, TimeFunctions, TypeFunctionFields }; //# sourceMappingURL=functions.d.cts.map