UNPKG

hal-4-angular

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

187 lines (186 loc) 7.85 kB
import { HttpHeaders } from '@angular/common/http'; import { ResourceArray } from './resource-array'; import { isNullOrUndefined, isPrimitive } from 'util'; import * as url from 'url'; var ResourceHelper = /** @class */ (function () { function ResourceHelper() { } Object.defineProperty(ResourceHelper, "headers", { get: function () { if (isNullOrUndefined(this._headers)) this._headers = new HttpHeaders(); return this._headers; }, set: function (headers) { this._headers = headers; }, enumerable: true, configurable: true }); ResourceHelper.optionParams = function (params, options) { if (options) { params = this.params(params, options.params); if (options.size) { params = params.append('size', options.size.toString()); } if (options.sort) { for (var _i = 0, _a = options.sort; _i < _a.length; _i++) { var s = _a[_i]; var sortString = ''; sortString = s.path ? sortString.concat(s.path) : sortString; sortString = s.order ? sortString.concat(',').concat(s.order) : sortString; params = params.append('sort', sortString); } } } return params; }; ResourceHelper.params = function (httpParams, params) { if (params) { for (var _i = 0, params_1 = params; _i < params_1.length; _i++) { var param = params_1[_i]; httpParams = httpParams.append(param.key, param.value.toString()); } } return httpParams; }; ResourceHelper.resolveRelations = function (resource) { var _this = this; var result = {}; var _loop_1 = function (key) { if (!isNullOrUndefined(resource[key])) { if (ResourceHelper.className(resource[key]) .find(function (className) { return className == 'Resource'; })) { if (resource[key]['_links']) result[key] = resource[key]['_links']['self']['href']; } else if (Array.isArray(resource[key])) { var array = resource[key]; if (array) { result[key] = new Array(); array.forEach(function (element) { if (isPrimitive(element)) { result[key].push(element); } else { result[key].push(_this.resolveRelations(element)); } }); } } else { result[key] = resource[key]; } } }; for (var key in resource) { _loop_1(key); } return result; }; ResourceHelper.createEmptyResult = function (_embedded) { var resourceArray = new ResourceArray(); resourceArray._embedded = _embedded; return resourceArray; }; ResourceHelper.getClassName = function (obj) { var funcNameRegex = /function (.+?)\(/; var results = (funcNameRegex).exec(obj.constructor.toString()); return (results && results.length > 1) ? results[1] : ''; }; ResourceHelper.className = function (objProto) { var classNames = []; var obj = Object.getPrototypeOf(objProto); var className; while ((className = ResourceHelper.getClassName(obj)) !== 'Object') { classNames.push(className); obj = Object.getPrototypeOf(obj); } return classNames; }; ResourceHelper.instantiateResourceCollection = function (type, payload, result, builder) { for (var _i = 0, _a = Object.keys(payload[result._embedded]); _i < _a.length; _i++) { var embeddedClassName = _a[_i]; var embedded = payload[result._embedded]; var items = embedded[embeddedClassName]; for (var _b = 0, items_1 = items; _b < items_1.length; _b++) { var item = items_1[_b]; var instance = new type(); instance = this.searchSubtypes(builder, embeddedClassName, instance); this.instantiateResource(instance, item); result.push(instance); } } result.totalElements = payload.page ? payload.page.totalElements : result.length; result.totalPages = payload.page ? payload.page.totalPages : 1; result.pageNumber = payload.page ? payload.page.number : 1; result.pageSize = payload.page ? payload.page.size : 20; result.self_uri = payload._links && payload._links.self ? payload._links.self.href : undefined; result.next_uri = payload._links && payload._links.next ? payload._links.next.href : undefined; result.prev_uri = payload._links && payload._links.prev ? payload._links.prev.href : undefined; result.first_uri = payload._links && payload._links.first ? payload._links.first.href : undefined; result.last_uri = payload._links && payload._links.last ? payload._links.last.href : undefined; return result; }; ResourceHelper.searchSubtypes = function (builder, embeddedClassName, instance) { if (builder && builder.subtypes) { var keys = builder.subtypes.keys(); Array.from(keys).forEach(function (subtypeKey) { if (embeddedClassName.toLowerCase().startsWith(subtypeKey.toLowerCase())) { var subtype = builder.subtypes.get(subtypeKey); instance = new subtype(); } }); } return instance; }; ResourceHelper.instantiateResource = function (entity, payload) { for (var p in payload) { //TODO array init /* if(entity[p].constructor === Array && isNullOrUndefined(payload[p])) entity[p] = []; else*/ entity[p] = payload[p]; } return entity; }; ResourceHelper.setProxyUri = function (proxy_uri) { ResourceHelper.proxy_uri = proxy_uri; }; ResourceHelper.setRootUri = function (root_uri) { ResourceHelper.root_uri = root_uri; }; ResourceHelper.getURL = function () { return ResourceHelper.proxy_uri && ResourceHelper.proxy_uri != '' ? ResourceHelper.addSlash(ResourceHelper.proxy_uri) : ResourceHelper.addSlash(ResourceHelper.root_uri); }; ResourceHelper.addSlash = function (uri) { var uriParsed = url.parse(uri); if (isNullOrUndefined(uriParsed.search) && uri && uri[uri.length - 1] != '/') return uri + '/'; return uri; }; ResourceHelper.getProxy = function (url) { if (!ResourceHelper.proxy_uri || ResourceHelper.proxy_uri == '') return url; return ResourceHelper.addSlash(ResourceHelper.removeUrlTemplateVars(url) .replace(ResourceHelper.root_uri, ResourceHelper.proxy_uri)); }; ResourceHelper.removeUrlTemplateVars = function (url) { return url.replace(ResourceHelper.URL_TEMPLATE_VAR_REGEXP, ResourceHelper.EMPTY_STRING); }; ResourceHelper.setHttp = function (http) { this.http = http; }; ResourceHelper.getHttp = function () { return this.http; }; ResourceHelper.getRootUri = function () { return this.root_uri; }; ResourceHelper.URL_TEMPLATE_VAR_REGEXP = /{[^}]*}/g; ResourceHelper.EMPTY_STRING = ''; return ResourceHelper; }()); export { ResourceHelper };