UNPKG

angular4-hal

Version:

This Angular module offers a HAL/JSON http-client to easily interact with a Spring Data Rest API or any API that implements the Spring Data Rest resource model

255 lines (254 loc) 15.3 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; import { throwError as observableThrowError } from 'rxjs'; import { catchError, map } from 'rxjs/operators'; import { ResourceHelper } from './resource-helper'; import { Injectable } from '@angular/core'; import { HttpParams } from '@angular/common/http'; import { ExternalService } from './external.service'; import { CustomEncoder } from './CustomEncoder'; import * as url from 'url'; var ResourceService = /** @class */ (function () { function ResourceService(externalService) { this.externalService = externalService; } ResourceService_1 = ResourceService; ResourceService.getURL = function () { return ResourceHelper.getURL(); }; ResourceService.prototype.handleError = function (error) { return observableThrowError(error); }; ResourceService.prototype.getAll = function (type, resource, _embedded, options, subType) { var _this = this; var uri = this.getResourceUrl(resource); var params = ResourceHelper.optionParams(new HttpParams({ encoder: new CustomEncoder() }), options); var result = ResourceHelper.createEmptyResult(_embedded); this.setUrls(result); result.sortInfo = options ? options.sort : undefined; var observable = ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response', params: params }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceCollection(type, response, result, subType); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.get = function (type, resource, id, params, builder) { var _this = this; var self = this; var uri = this.getResourceUrl(resource).concat('/', id); var result = new type(); var httpParams = ResourceHelper.params(new HttpParams(), params); this.setUrlsResource(result); var observable = ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response', params: httpParams }); return observable.pipe(map(function (response) { if (builder) { var linkHref = url.parse(response.body._links.self.href).pathname; var regex = /([A-Za-z0-9]+)\/([A-Za-z0-9]+)\/([A-Za-z0-9]+)/g; var match = regex.exec(linkHref); if (match != null) { var embeddedClassName = match[2]; result = ResourceHelper.searchSubtypes(builder, embeddedClassName, result); } } return ResourceHelper.instantiateResourceFromResponse(result, response); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.getBySelfLink = function (type, resourceLink) { var _this = this; var result = new type(); this.setUrlsResource(result); var observable = ResourceHelper.getHttp().get(ResourceHelper.getProxy(resourceLink), { headers: ResourceHelper.headers, observe: 'response' }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceFromResponse(result, response); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.search = function (type, query, resource, _embedded, options, subType) { var _this = this; var uri = this.getResourceUrl(resource).concat('/search/', query); var params = ResourceHelper.optionParams(new HttpParams({ encoder: new CustomEncoder() }), options); var result = ResourceHelper.createEmptyResult(_embedded); this.setUrls(result); var observable = ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response', params: params }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceCollection(type, response, result, subType); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.searchSingle = function (type, query, resource, options) { var _this = this; var uri = this.getResourceUrl(resource).concat('/search/', query); var params = ResourceHelper.optionParams(new HttpParams({ encoder: new CustomEncoder() }), options); var result = new type(); this.setUrlsResource(result); var observable = ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response', params: params }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceFromResponse(result, response); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.customQuery = function (type, query, resource, _embedded, options, subType) { var _this = this; var uri = this.getResourceUrl(resource + query); var params = ResourceHelper.optionParams(new HttpParams({ encoder: new CustomEncoder() }), options); var result = ResourceHelper.createEmptyResult(_embedded); this.setUrls(result); var observable = ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response', params: params }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceCollection(type, response, result, subType); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.customQueryPost = function (type, query, resource, _embedded, options, body, subType) { var _this = this; var uri = this.getResourceUrl(resource + query); var params = ResourceHelper.optionParams(new HttpParams(), options); var result = ResourceHelper.createEmptyResult(_embedded); this.setUrls(result); var observable = ResourceHelper.getHttp().post(uri, body, { headers: ResourceHelper.headers, observe: 'response', params: params }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceCollection(type, response, result, subType); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.getByRelation = function (type, resourceLink) { var _this = this; var result = new type(); this.setUrlsResource(result); var observable = ResourceHelper.getHttp().get(resourceLink, { headers: ResourceHelper.headers, observe: 'response' }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceFromResponse(result, response); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.getByRelationArray = function (type, resourceLink, _embedded, builder) { var _this = this; var result = ResourceHelper.createEmptyResult(_embedded); this.setUrls(result); var observable = ResourceHelper.getHttp().get(resourceLink, { headers: ResourceHelper.headers, observe: 'response' }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceCollection(type, response, result, builder); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.getProjection = function (type, resource, id, projectionName) { var _this = this; var uri = this.getResourceUrl(resource).concat('/', id).concat('?projection=' + projectionName); var result = new type(); var observable = ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response' }); return observable.pipe(map(function (response) { return ResourceHelper.instantiateResourceFromResponse(result, response); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.getProjectionArray = function (type, resource, projectionName) { var _this = this; var uri = this.getResourceUrl(resource).concat('?projection=' + projectionName); var result = ResourceHelper.createEmptyResult('_embedded'); var observable = ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response' }); return observable .pipe(map(function (response) { return ResourceHelper.instantiateResourceCollection(type, response, result); }), catchError(function (error) { return _this.handleError(error); })).pipe(map(function (resourceArray) { return resourceArray.result; })); }; ResourceService.prototype.count = function (resource, query, options) { var _this = this; var uri = this.getResourceUrl(resource).concat('/search/' + (query === undefined ? 'countAll' : query)); var params = ResourceHelper.optionParams(new HttpParams(), options); return ResourceHelper.getHttp().get(uri, { headers: ResourceHelper.headers, observe: 'response', params: params }).pipe(map(function (response) { return Number(response.body); }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.create = function (selfResource, entity) { var _this = this; var uri = ResourceHelper.getURL() + selfResource; var payload = ResourceHelper.resolveRelations(entity); this.setUrlsResource(entity); var observable = ResourceHelper.getHttp().post(uri, payload, { headers: ResourceHelper.headers, observe: 'response' }); return observable.pipe(map(function (response) { if (response.status >= 200 && response.status <= 207) return ResourceHelper.instantiateResourceFromResponse(entity, response); else if (response.status == 500) { var body = response.body; return _this.handleError(body.error); } }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.update = function (entity) { var _this = this; var uri = ResourceHelper.getProxy(entity._links.self.href); var payload = ResourceHelper.resolveRelations(entity); this.setUrlsResource(entity); var observable = ResourceHelper.getHttp().put(uri, payload, { headers: ResourceHelper.headers, observe: 'response' }); return observable.pipe(map(function (response) { if (response.status >= 200 && response.status <= 207) return ResourceHelper.instantiateResourceFromResponse(entity, response); else if (response.status == 500) { var body = response.body; return _this.handleError(body.error); } }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.patch = function (entity) { var _this = this; var uri = ResourceHelper.getProxy(entity._links.self.href); var payload = ResourceHelper.resolveRelations(entity); this.setUrlsResource(entity); var observable = ResourceHelper.getHttp().patch(uri, payload, { headers: ResourceHelper.headers, observe: 'response' }); return observable.pipe(map(function (response) { if (response.status >= 200 && response.status <= 207) return ResourceHelper.instantiateResourceFromResponse(entity, response); else if (response.status == 500) { var body = response.body; return _this.handleError(body.error); } }), catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.delete = function (entity) { var _this = this; var uri = ResourceHelper.getProxy(entity._links.self.href); return ResourceHelper.getHttp().delete(uri, { headers: ResourceHelper.headers }) .pipe(catchError(function (error) { return _this.handleError(error); })); }; ResourceService.prototype.hasNext = function (resourceArray) { return resourceArray.next_uri != undefined; }; ResourceService.prototype.hasPrev = function (resourceArray) { return resourceArray.prev_uri != undefined; }; ResourceService.prototype.hasFirst = function (resourceArray) { return resourceArray.first_uri != undefined; }; ResourceService.prototype.hasLast = function (resourceArray) { return resourceArray.last_uri != undefined; }; ResourceService.prototype.next = function (resourceArray, type) { return resourceArray.next(type); }; ResourceService.prototype.prev = function (resourceArray, type) { return resourceArray.prev(type); }; ResourceService.prototype.first = function (resourceArray, type) { return resourceArray.first(type); }; ResourceService.prototype.last = function (resourceArray, type) { return resourceArray.last(type); }; ResourceService.prototype.page = function (resourceArray, type, id) { return resourceArray.page(type, id); }; ResourceService.prototype.sortElements = function (resourceArray, type) { var sort = []; for (var _i = 2; _i < arguments.length; _i++) { sort[_i - 2] = arguments[_i]; } return resourceArray.sortElements.apply(resourceArray, [type].concat(sort)); }; ResourceService.prototype.size = function (resourceArray, type, size) { return resourceArray.size(type, size); }; ResourceService.prototype.getResourceUrl = function (resource) { var url = ResourceService_1.getURL(); if (!url.endsWith('/')) { url = url.concat('/'); } if (resource) { return url.concat(resource); } url = url.replace('{?projection}', ''); return url; }; ResourceService.prototype.setUrls = function (result) { result.proxyUrl = this.externalService.getProxyUri(); result.rootUrl = this.externalService.getRootUri(); }; ResourceService.prototype.setUrlsResource = function (result) { result.proxyUrl = this.externalService.getProxyUri(); result.rootUrl = this.externalService.getRootUri(); }; var ResourceService_1; ResourceService = ResourceService_1 = __decorate([ Injectable(), __metadata("design:paramtypes", [ExternalService]) ], ResourceService); return ResourceService; }()); export { ResourceService };