@ngx-resource/handler-ngx-http
Version:
Resource handler for angular
87 lines • 11.3 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 '@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: "15.1.5", ngImport: i0, type: ResourceHandlerHttpClient, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
ResourceHandlerHttpClient.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ResourceHandlerHttpClient });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ResourceHandlerHttpClient, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzb3VyY2VIYW5kbGVySHR0cENsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXNvdXJjZS9oYW5kbGVyLW5neC1odHRwL3NyYy9saWIvUmVzb3VyY2VIYW5kbGVySHR0cENsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQXFCLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFnQixNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFJTCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN6QixNQUFNLG9CQUFvQixDQUFDOzs7QUFHNUIsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGVBQWU7SUFFNUQsWUFBb0IsSUFBZ0I7UUFDbEMsS0FBSyxFQUFFLENBQUM7UUFEVSxTQUFJLEdBQUosSUFBSSxDQUFZO0lBRXBDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBcUI7UUFFMUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QyxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztpQkFDbkMsSUFBSSxDQUNILElBQUksRUFBRSxFQUNOLEdBQUcsQ0FBQyxDQUFDLElBQXVCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ2hFLFVBQVUsQ0FBQyxDQUFDLElBQXVCLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FDSDtTQUNKLENBQUM7SUFFSixDQUFDO0lBR1MsY0FBYyxDQUFDLEdBQXFCO1FBRTVDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztRQUVuQixRQUFRLEdBQUcsQ0FBQyxNQUFNLEVBQUU7WUFFbEIsS0FBSyxxQkFBcUIsQ0FBQyxHQUFHO2dCQUM1QixNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNmLE1BQU07WUFFUixLQUFLLHFCQUFxQixDQUFDLElBQUk7Z0JBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ2hCLE1BQU07WUFFUixLQUFLLHFCQUFxQixDQUFDLEdBQUc7Z0JBQzVCLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ2YsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsTUFBTTtnQkFDL0IsTUFBTSxHQUFHLFFBQVEsQ0FBQztnQkFDbEIsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsSUFBSTtnQkFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDaEIsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsT0FBTztnQkFDaEMsTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFDbkIsTUFBTTtZQUVSLEtBQUsscUJBQXFCLENBQUMsS0FBSztnQkFDOUIsTUFBTSxHQUFHLE9BQU8sQ0FBQztTQUVwQjtRQUVELE1BQU0sSUFBSSxHQUFxQjtZQUM3QixlQUFlLEVBQUUsR0FBRyxDQUFDLGVBQWU7U0FDckMsQ0FBQztRQUVGLFFBQVEsR0FBRyxDQUFDLGdCQUFnQixFQUFFO1lBRTVCLEtBQUssd0JBQXdCLENBQUMsSUFBSTtnQkFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7Z0JBQzNCLE1BQU07WUFFUixLQUFLLHdCQUF3QixDQUFDLFdBQVc7Z0JBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDO2dCQUNsQyxNQUFNO1lBRVIsS0FBSyx3QkFBd0IsQ0FBQyxJQUFJO2dCQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztnQkFDM0IsTUFBTTtZQUVSO2dCQUNFLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1NBRTlCO1FBRUQsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDN0M7UUFFRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVoRSxDQUFDO0lBRVMsY0FBYyxDQUFDLEdBQXFCLEVBQUUsUUFBK0M7UUFFN0YsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsSUFBSSxFQUFHLFFBQThCLENBQUMsSUFBSSxJQUFLLFFBQThCLENBQUMsS0FBSztZQUNuRixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7O3NIQTNHVSx5QkFBeUI7MEhBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbGFzdCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgSVJlc291cmNlSGFuZGxlclJlc3BvbnNlLFxuICBJUmVzb3VyY2VSZXF1ZXN0LFxuICBJUmVzb3VyY2VSZXNwb25zZSxcbiAgUmVzb3VyY2VIYW5kbGVyLFxuICBSZXNvdXJjZVJlcXVlc3RNZXRob2QsXG4gIFJlc291cmNlUmVzcG9uc2VCb2R5VHlwZVxufSBmcm9tICdAbmd4LXJlc291cmNlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VIYW5kbGVySHR0cENsaWVudCBleHRlbmRzIFJlc291cmNlSGFuZGxlciB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGhhbmRsZShyZXE6IElSZXNvdXJjZVJlcXVlc3QpOiBJUmVzb3VyY2VIYW5kbGVyUmVzcG9uc2Uge1xuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucHJlcGFyZVJlcXVlc3QocmVxKTtcblxuICAgIHJldHVybiB7XG4gICAgICBvYnNlcnZhYmxlOiB0aGlzLmh0dHAucmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBsYXN0KCksXG4gICAgICAgICAgbWFwKChyZXNwOiBIdHRwUmVzcG9uc2U8YW55PikgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXEsIHJlc3ApKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChyZXNwOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy5oYW5kbGVSZXNwb25zZShyZXEsIHJlc3ApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICB9O1xuXG4gIH1cblxuXG4gIHByb3RlY3RlZCBwcmVwYXJlUmVxdWVzdChyZXE6IElSZXNvdXJjZVJlcXVlc3QpOiBIdHRwUmVxdWVzdDxhbnk+IHtcblxuICAgIGxldCBtZXRob2QgPSAnR0VUJztcblxuICAgIHN3aXRjaCAocmVxLm1ldGhvZCkge1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVxdWVzdE1ldGhvZC5HZXQ6XG4gICAgICAgIG1ldGhvZCA9ICdHRVQnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuUG9zdDpcbiAgICAgICAgbWV0aG9kID0gJ1BPU1QnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuUHV0OlxuICAgICAgICBtZXRob2QgPSAnUFVUJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0TWV0aG9kLkRlbGV0ZTpcbiAgICAgICAgbWV0aG9kID0gJ0RFTEVURSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVxdWVzdE1ldGhvZC5IZWFkOlxuICAgICAgICBtZXRob2QgPSAnSEVBRCc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVxdWVzdE1ldGhvZC5PcHRpb25zOlxuICAgICAgICBtZXRob2QgPSAnT1BUSU9OUyc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVxdWVzdE1ldGhvZC5QYXRjaDpcbiAgICAgICAgbWV0aG9kID0gJ1BBVENIJztcblxuICAgIH1cblxuICAgIGNvbnN0IGluaXQ6IElIdHRwUmVxdWVzdEluaXQgPSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHJlcS53aXRoQ3JlZGVudGlhbHNcbiAgICB9O1xuXG4gICAgc3dpdGNoIChyZXEucmVzcG9uc2VCb2R5VHlwZSkge1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2VCb2R5VHlwZS5Kc29uOlxuICAgICAgICBpbml0LnJlc3BvbnNlVHlwZSA9ICdqc29uJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZUJvZHlUeXBlLkFycmF5QnVmZmVyOlxuICAgICAgICBpbml0LnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2VCb2R5VHlwZS5CbG9iOlxuICAgICAgICBpbml0LnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluaXQucmVzcG9uc2VUeXBlID0gJ3RleHQnO1xuXG4gICAgfVxuXG4gICAgaWYgKHJlcS5oZWFkZXJzKSB7XG4gICAgICBpbml0LmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMocmVxLmhlYWRlcnMpO1xuICAgIH1cblxuICAgIGlmIChyZXEucXVlcnkpIHtcbiAgICAgIGluaXQucGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoe2Zyb21PYmplY3Q6IHJlcS5xdWVyeX0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSHR0cFJlcXVlc3QobWV0aG9kLCByZXEudXJsIHx8ICcnLCByZXEuYm9keSwgaW5pdCk7XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVSZXNwb25zZShyZXE6IElSZXNvdXJjZVJlcXVlc3QsIHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PiB8IEh0dHBFcnJvclJlc3BvbnNlKTogSVJlc291cmNlUmVzcG9uc2Uge1xuXG4gICAgY29uc3QgaGVhZGVyczogYW55ID0ge307XG4gICAgY29uc3Qga2V5cyA9IHJlc3BvbnNlLmhlYWRlcnMua2V5cygpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0QWxsKGtleSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBib2R5OiAocmVzcG9uc2UgYXMgSHR0cFJlc3BvbnNlPGFueT4pLmJvZHkgfHwgKHJlc3BvbnNlIGFzIEh0dHBFcnJvclJlc3BvbnNlKS5lcnJvcixcbiAgICAgIGhlYWRlcnNcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0IHR5cGUgVEh0dHBSZXF1ZXN0SW5pdFJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcicgfCAnYmxvYicgfCAnanNvbicgfCAndGV4dCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUh0dHBSZXF1ZXN0SW5pdCB7XG4gIGhlYWRlcnM/OiBIdHRwSGVhZGVycztcbiAgcGFyYW1zPzogSHR0cFBhcmFtcztcbiAgcmVzcG9uc2VUeXBlPzogVEh0dHBSZXF1ZXN0SW5pdFJlc3BvbnNlVHlwZTtcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cbiJdfQ==