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
JavaScript
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 };