UNPKG

@anglr/rest

Version:

Angular module representing rest services

157 lines 5.43 kB
import { HttpParams } from '@angular/common/http'; import { isPresent } from '@jscrpt/common'; import { NotType } from './classes/notType'; /** * Builds and returns array of middleware run functions * @param middlewares - Array of set middleware types * @param middlewaresOrder - Array of middleware types in order that should be executed */ export const buildMiddlewares = function buildMiddlewares(middlewares, middlewaresOrder) { const usedMiddlewares = []; middlewares .filter(middleware => !isNotType(middleware)) .forEach(middleware => { const type = getType(middleware); const index = middlewaresOrder.findIndex(itm => itm == type || type.id == itm); //middleware does not have defined order if (index < 0) { return; } usedMiddlewares[index] = type; }); //removes not middlewares middlewares .filter(middleware => isNotType(middleware)) .forEach(middleware => { const type = getType(middleware); const index = middlewaresOrder.findIndex(itm => itm == type || type.id == itm); if (index < 0) { return; } usedMiddlewares.splice(index, 1, undefined); }); const runMethods = []; usedMiddlewares.forEach(middleware => { if (middleware) { runMethods.push(new middleware().run); } }); return runMethods; }; /** * Creates NotType from Type, this type will be removed from middlewares * @param type - Type that will be set as NotType */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function not(type) { return new NotType(type); } /** * Gets underlying type for Type and NotType * @param type - Type that is going to be used for extraction */ export function getType(type) { if (type instanceof NotType) { return type.ɵtype; } return type; } /** * Tests whether is provided type NotType * @param type - Type to be tested for NotType */ export function isNotType(type) { return type instanceof NotType; } /** * Handles query param and fills params dictionary * @param data - Data for creating query param * @param params - Params where should be new value placed * @param args - Array of all arguments passed to handled function */ export async function handleQueryParam(data, params, args) { //apply parameter transform if (data.transformFn) { data.value = await data.transformFn(data.value, ...args); } // if the value is a instance of Object, we stringify it if (data.value instanceof Object) { data.value = JSON.stringify(data.value); } //only non null and non undefined values if (isPresent(data.value)) { params[data.key] = data.value; } } /** * Handles header param and fills headers dictionary * @param data - Data for creating header param * @param headers - Params where should be new value placed * @param args - Array of all arguments passed to handled function */ export async function handleHeaderParam(data, headers, args) { //apply parameter transform if (data.transformFn) { data.value = await data.transformFn(data.value, ...args); } //only non null and non undefined values if (isPresent(data.value)) { headers[data.key] = data.value; } } /** * Handles path param and return updated url * @param data - Data for creating path param * @param url - Current url to be updated * @param args - Array of all arguments passed to handled function */ export async function handlePathParam(data, url, args) { //apply parameter transform if (data.transformFn) { data.value = await data.transformFn(data.value, ...args); } return url.replace('{' + data.key + '}', data.value ?? ''); } /** * Handles query object param and fills serialized query string array * @param data - Data for creating query object param * @param queryStrings - Array of query serialized query strings * @param querySerializer - Serializer for query object * @param args - Array of all arguments passed to handled function */ export async function handleQueryObjectParam(data, queryStrings, querySerializer, args) { //apply parameter transform if (data.transformFn) { data.value = await data.transformFn(data.value, ...args); } const serializedObj = querySerializer.serializeObject(data.value); if (serializedObj) { queryStrings.push(serializedObj); } } /** * Merges serialized query objects data with existing http params * @param queryStrings - Serialized query objects data * @param requestParams - Existing http params to be merged with */ export function mergeQueryObjectParamsWithHttpParams(queryStrings, requestParams) { const queryString = queryStrings.join('&'); const params = new HttpParams({ fromString: queryString }); params.keys().forEach(key => { const newValues = params.getAll(key); if (newValues) { newValues.forEach((value, index) => { //first item, set if (!index) { requestParams = requestParams.set(key, value); } //rest append else { requestParams = requestParams.append(key, value); } }); } }); return requestParams; } //# sourceMappingURL=utils.js.map