@anglr/rest
Version:
Angular module representing rest services
53 lines • 2.69 kB
JavaScript
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