UNPKG

@anglr/rest

Version:

Angular module representing rest services

53 lines 2.69 kB
import { Observable } from 'rxjs'; import { ParamsDataIterator } from '../misc/classes/paramsData.iterator'; import { QueryStringSerializer } from '../misc/classes/queryStringSerializer'; import { handleQueryObjectParam, mergeQueryObjectParamsWithHttpParams } from '../misc/utils'; /** * Middleware that is used for adding query string from query object */ export class QueryObjectParameterMiddleware { //######################### public static properties ######################### /** * String identification of middleware */ static { this.id = 'QueryObjectParameterMiddleware'; } //######################### public methods - implementation of RestMiddleware ######################### /** * Runs code that is defined for this rest middleware, in this method you can modify request and response * @param this - Method is bound to RESTClient * @param id - Unique id that identifies request method * @param target - Prototype of class that are decorators applied to * @param methodName - Name of method that is being modified * @param descriptor - Descriptor of method that is being modified * @param args - Array of arguments passed to called method * @param request - Http request that you can modify * @param next - Used for calling next middleware with modified request */ run(_id, target, methodName, _descriptor, args, request, next) { return new Observable(observer => { (async () => { const $this = this; const parameters = target.parameters; $this.ɵQueryStringSerializer = $this.ɵQueryStringSerializer ?? this.injector.get(QueryStringSerializer); let pQueryObject; let pTransforms; if (parameters) { pQueryObject = parameters[methodName]?.queryObject; pTransforms = parameters[methodName]?.transforms; } if (pQueryObject) { const queryStrings = []; for (const data of new ParamsDataIterator(pQueryObject, pTransforms, args, this)) { await handleQueryObjectParam(data, queryStrings, $this.ɵQueryStringSerializer, args); } const requestParams = mergeQueryObjectParamsWithHttpParams(queryStrings, request.params); request = request.clone({ params: requestParams }); } return next(request).subscribe(observer); })(); }); } } //# sourceMappingURL=queryObjectParameter.middleware.js.map