@kkoehn/ngx-resource-handler-ngx-http
Version:
Resource handler for angular
87 lines • 11.4 kB
JavaScript
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http';
import { catchError, last, map } from 'rxjs/operators';
import { ResourceHandler, ResourceRequestMethod, ResourceResponseBodyType } from '@kkoehn/ngx-resource-core';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
export class ResourceHandlerHttpClient extends ResourceHandler {
constructor(http) {
super();
this.http = http;
}
handle(req) {
const request = this.prepareRequest(req);
return {
observable: this.http.request(request)
.pipe(last(), map((resp) => this.handleResponse(req, resp)), catchError((resp) => {
throw this.handleResponse(req, resp);
}))
};
}
prepareRequest(req) {
let method = 'GET';
switch (req.method) {
case ResourceRequestMethod.Get:
method = 'GET';
break;
case ResourceRequestMethod.Post:
method = 'POST';
break;
case ResourceRequestMethod.Put:
method = 'PUT';
break;
case ResourceRequestMethod.Delete:
method = 'DELETE';
break;
case ResourceRequestMethod.Head:
method = 'HEAD';
break;
case ResourceRequestMethod.Options:
method = 'OPTIONS';
break;
case ResourceRequestMethod.Patch:
method = 'PATCH';
}
const init = {
withCredentials: req.withCredentials
};
switch (req.responseBodyType) {
case ResourceResponseBodyType.Json:
init.responseType = 'json';
break;
case ResourceResponseBodyType.ArrayBuffer:
init.responseType = 'arraybuffer';
break;
case ResourceResponseBodyType.Blob:
init.responseType = 'blob';
break;
default:
init.responseType = 'text';
}
if (req.headers) {
init.headers = new HttpHeaders(req.headers);
}
if (req.query) {
init.params = new HttpParams({ fromObject: req.query });
}
return new HttpRequest(method, req.url || '', req.body, init);
}
handleResponse(req, response) {
const headers = {};
const keys = response.headers.keys();
keys.forEach((key) => {
headers[key] = response.headers.getAll(key);
});
return {
status: response.status,
body: response.body || response.error,
headers
};
}
}
ResourceHandlerHttpClient.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ResourceHandlerHttpClient, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
ResourceHandlerHttpClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ResourceHandlerHttpClient });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ResourceHandlerHttpClient, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VIYW5kbGVySHR0cENsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXNvdXJjZS9oYW5kbGVyLW5neC1odHRwL3NyYy9saWIvUmVzb3VyY2VIYW5kbGVySHR0cENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQXFCLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFJTCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN6QixNQUFNLDJCQUEyQixDQUFDOzs7QUFHbkMsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGVBQWU7SUFFNUQsWUFBb0IsSUFBZ0I7UUFDbEMsS0FBSyxFQUFFLENBQUM7UUFEVSxTQUFJLEdBQUosSUFBSSxDQUFZO0lBRXBDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBcUI7UUFFMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QyxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztpQkFDbkMsSUFBSSxDQUNILElBQUksRUFBRSxFQUNOLEdBQUcsQ0FBQyxDQUFDLElBQXVCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ2hFLFVBQVUsQ0FBQyxDQUFDLElBQXVCLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FDSDtTQUNKLENBQUM7SUFFSixDQUFDO0lBR1MsY0FBYyxDQUFDLEdBQXFCO1FBRTVDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUVuQixRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFFbEIsS0FBSyxxQkFBcUIsQ0FBQyxHQUFHO2dCQUM1QixNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNmLE1BQU07WUFFUixLQUFLLHFCQUFxQixDQUFDLElBQUk7Z0JBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ2hCLE1BQU07WUFFUixLQUFLLHFCQUFxQixDQUFDLEdBQUc7Z0JBQzVCLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ2YsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsTUFBTTtnQkFDL0IsTUFBTSxHQUFHLFFBQVEsQ0FBQztnQkFDbEIsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsSUFBSTtnQkFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDaEIsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsT0FBTztnQkFDaEMsTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFDbkIsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsS0FBSztnQkFDOUIsTUFBTSxHQUFHLE9BQU8sQ0FBQztTQUVwQjtRQUVELE1BQU0sSUFBSSxHQUFxQjtZQUM3QixlQUFlLEVBQUUsR0FBRyxDQUFDLGVBQWU7U0FDckMsQ0FBQztRQUVGLFFBQVEsR0FBRyxDQUFDLGdCQUFnQixFQUFFO1lBRTVCLEtBQUssd0JBQXdCLENBQUMsSUFBSTtnQkFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQzNCLE1BQU07WUFFUixLQUFLLHdCQUF3QixDQUFDLFdBQVc7Z0JBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDM0IsTUFBTTtZQUVSO2dCQUNFLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1NBRTlCO1FBRUQsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0M7UUFFRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVoRSxDQUFDO0lBRVMsY0FBYyxDQUFDLEdBQXFCLEVBQUUsUUFBK0M7UUFFN0YsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsSUFBSSxFQUFHLFFBQThCLENBQUMsSUFBSSxJQUFLLFFBQThCLENBQUMsS0FBSztZQUNuRixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7O3NIQTNHVSx5QkFBeUI7MEhBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbGFzdCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgSVJlc291cmNlSGFuZGxlclJlc3BvbnNlLFxuICBJUmVzb3VyY2VSZXF1ZXN0LFxuICBJUmVzb3VyY2VSZXNwb25zZSxcbiAgUmVzb3VyY2VIYW5kbGVyLFxuICBSZXNvdXJjZVJlcXVlc3RNZXRob2QsXG4gIFJlc291cmNlUmVzcG9uc2VCb2R5VHlwZVxufSBmcm9tICdAa2tvZWhuL25neC1yZXNvdXJjZS1jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFJlc291cmNlSGFuZGxlckh0dHBDbGllbnQgZXh0ZW5kcyBSZXNvdXJjZUhhbmRsZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBoYW5kbGUocmVxOiBJUmVzb3VyY2VSZXF1ZXN0KTogSVJlc291cmNlSGFuZGxlclJlc3BvbnNlIHtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnByZXBhcmVSZXF1ZXN0KHJlcSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgb2JzZXJ2YWJsZTogdGhpcy5odHRwLnJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbGFzdCgpLFxuICAgICAgICAgIG1hcCgocmVzcDogSHR0cFJlc3BvbnNlPGFueT4pID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVxLCByZXNwKSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigocmVzcDogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRocm93IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVxLCByZXNwKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgfTtcblxuICB9XG5cblxuICBwcm90ZWN0ZWQgcHJlcGFyZVJlcXVlc3QocmVxOiBJUmVzb3VyY2VSZXF1ZXN0KTogSHR0cFJlcXVlc3Q8YW55PiB7XG5cbiAgICBsZXQgbWV0aG9kID0gJ0dFVCc7XG5cbiAgICBzd2l0Y2ggKHJlcS5tZXRob2QpIHtcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuR2V0OlxuICAgICAgICBtZXRob2QgPSAnR0VUJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0TWV0aG9kLlBvc3Q6XG4gICAgICAgIG1ldGhvZCA9ICdQT1NUJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0TWV0aG9kLlB1dDpcbiAgICAgICAgbWV0aG9kID0gJ1BVVCc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVxdWVzdE1ldGhvZC5EZWxldGU6XG4gICAgICAgIG1ldGhvZCA9ICdERUxFVEUnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuSGVhZDpcbiAgICAgICAgbWV0aG9kID0gJ0hFQUQnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuT3B0aW9uczpcbiAgICAgICAgbWV0aG9kID0gJ09QVElPTlMnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuUGF0Y2g6XG4gICAgICAgIG1ldGhvZCA9ICdQQVRDSCc7XG5cbiAgICB9XG5cbiAgICBjb25zdCBpbml0OiBJSHR0cFJlcXVlc3RJbml0ID0ge1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiByZXEud2l0aENyZWRlbnRpYWxzXG4gICAgfTtcblxuICAgIHN3aXRjaCAocmVxLnJlc3BvbnNlQm9keVR5cGUpIHtcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlQm9keVR5cGUuSnNvbjpcbiAgICAgICAgaW5pdC5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2VCb2R5VHlwZS5BcnJheUJ1ZmZlcjpcbiAgICAgICAgaW5pdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlQm9keVR5cGUuQmxvYjpcbiAgICAgICAgaW5pdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbml0LnJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcblxuICAgIH1cblxuICAgIGlmIChyZXEuaGVhZGVycykge1xuICAgICAgaW5pdC5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHJlcS5oZWFkZXJzKTtcbiAgICB9XG5cbiAgICBpZiAocmVxLnF1ZXJ5KSB7XG4gICAgICBpbml0LnBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKHtmcm9tT2JqZWN0OiByZXEucXVlcnl9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEh0dHBSZXF1ZXN0KG1ldGhvZCwgcmVxLnVybCB8fCAnJywgcmVxLmJvZHksIGluaXQpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUmVzcG9uc2UocmVxOiBJUmVzb3VyY2VSZXF1ZXN0LCByZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4gfCBIdHRwRXJyb3JSZXNwb25zZSk6IElSZXNvdXJjZVJlc3BvbnNlIHtcblxuICAgIGNvbnN0IGhlYWRlcnM6IGFueSA9IHt9O1xuICAgIGNvbnN0IGtleXMgPSByZXNwb25zZS5oZWFkZXJzLmtleXMoKTtcbiAgICBrZXlzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzLmdldEFsbChrZXkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgYm9keTogKHJlc3BvbnNlIGFzIEh0dHBSZXNwb25zZTxhbnk+KS5ib2R5IHx8IChyZXNwb25zZSBhcyBIdHRwRXJyb3JSZXNwb25zZSkuZXJyb3IsXG4gICAgICBoZWFkZXJzXG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydCB0eXBlIFRIdHRwUmVxdWVzdEluaXRSZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInIHwgJ2Jsb2InIHwgJ2pzb24nIHwgJ3RleHQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElIdHRwUmVxdWVzdEluaXQge1xuICBoZWFkZXJzPzogSHR0cEhlYWRlcnM7XG4gIHBhcmFtcz86IEh0dHBQYXJhbXM7XG4gIHJlc3BvbnNlVHlwZT86IFRIdHRwUmVxdWVzdEluaXRSZXNwb25zZVR5cGU7XG4gIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG59XG4iXX0=