Files
klz-cables.com/.pnpm-store/v10/files/b8/bb88b09e17a6ed3e8ffe2609d256a22178331ca4c900491844aa24073700ec5981bfd471e6bd90b5e0c76234e2cad3e40c81fea90f0a8457f4a21f4fc5f741
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

51 lines
2.4 KiB
Plaintext

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 ArrayFunctions = 'count';
type QueryFunctions = {
datetime: DateTimeFunctions;
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, '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, 'json' | 'csv'>, ArrayFunctions>>;
//#endregion
export { ArrayFunctions, DateTimeFunctions, FunctionFields, MappedFieldNames, MappedFunctionFields, PermuteFields, QueryFunctions, TypeFunctionFields };
//# sourceMappingURL=functions.d.ts.map