/** * @license * @preserve * * Copyright 2023 KeeeX SAS * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is furnished to do * so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * */ import { type Awaitable, type TypePredicate } from "@keeex/utils/types/types.js"; /** Function to filter any type to another type */ export type Filter = (data: SourceType) => Awaitable | DestinationType; /** List of filters to apply to an object to convert all values */ export type Filters = Partial<{ [key in keyof OutputType]: Filter; }>; /** All the filters to apply to an Api call */ export interface ApiFilters { /** Filters to apply to the result to get an all-client valued output */ fromApi?: Filters; /** To ensure that the output match the type definition */ fromApiPredicate?: TypePredicate; /** Filters to apply to the input to get an all-Api valued input */ toApi?: Filters; /** To ensure that the API input match the type definition */ toApiPredicate?: TypePredicate; } /** Apply the provided filters to an object */ export declare const applyFilters: (obj: Record, filters?: Filters, predicate?: TypePredicate) => Promise; /** Apply the provided filters to an object, or filter */ export declare const applyFiltersOrBinary: (obj: Record | ReplyDataType, binaryReply?: boolean, filters?: Filters, predicate?: TypePredicate) => Promise;