@ngx-resource/handler-ngx-http
Version:
Resource handler for angular
126 lines (120 loc) • 4.89 kB
JavaScript
import * as i0 from '@angular/core';
import { Injectable, NgModule } from '@angular/core';
import * as i1 from '@angular/common/http';
import { HttpHeaders, HttpParams, HttpRequest, HttpClient } from '@angular/common/http';
import { last, map, catchError } from 'rxjs/operators';
import { ResourceHandler, ResourceRequestMethod, ResourceResponseBodyType, ResourceModule as ResourceModule$1 } from '@ngx-resource/core';
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();
if (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 }]; } });
class ResourceModule extends ResourceModule$1 {
/**
* For root
*/
static forRoot(config = {}) {
return ResourceModule$1.forRoot({
handler: config.handler || { provide: ResourceHandler, useClass: ResourceHandlerHttpClient, deps: [HttpClient] }
});
}
/**
* For child
*/
static forChild(config = {}) {
return ResourceModule$1.forChild({
handler: config.handler || { provide: ResourceHandler, useClass: ResourceHandlerHttpClient, deps: [HttpClient] }
});
}
}
ResourceModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ResourceModule, deps: null, target: i0.ɵɵFactoryTarget.NgModule });
ResourceModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.5", ngImport: i0, type: ResourceModule });
ResourceModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ResourceModule });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.5", ngImport: i0, type: ResourceModule, decorators: [{
type: NgModule
}] });
/*
* Public API Surface of handler-ngx-http
*/
/**
* Generated bundle index. Do not edit.
*/
export { ResourceHandlerHttpClient, ResourceModule };
//# sourceMappingURL=ngx-resource-handler-ngx-http.mjs.map