import { SORTING_DECORATOR_CUSTOM_FIELDS_METADATA_KEY, SORTING_DECORATOR_INDEX_METADATA_KEY, SORTING_DECORATOR_OPTIONS_METADATA_KEY } from "./constants"; import { GraphqlSortingFieldMetadata } from "./decorators/field.decorator"; import { ISortingDecoratorParams } from "./decorators/resolver.decorator"; export type ISortingMetadata = { _name_: string; } export type SortArgs = { [K in keyof T]: 'ASC' | 'DESC'; }; export const convertSortingParameters = (parameters?: (ISortingMetadata)[], customFields?: Map, options?: ISortingDecoratorParams) => { // For tests purposes. The library always provides an array. If object is provided that means that something overrides decorator value, like mocks. if (!Array.isArray(parameters)) return parameters; return parameters && parameters.reduce((accumulatedParams, x) => { const convertedParams = Object.entries(x).reduce((acc, [k, v]) => { if (customFields.has(k)) { const field = customFields.get(k); acc[field.sqlExp] = v; } else { if (options?.sqlAlias) { acc[`${options?.sqlAlias}.${k}`] = v } else { acc[k] = v } } return acc; }, {}); return { ...accumulatedParams, ...convertedParams }; }, {}) || {}; }