hal-object
Version:
object for the Hal mediatype
93 lines • 2.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Halo = void 0;
class Halo {
constructor(json) {
this._links = this.registerLinks(json);
this._embedded = this.registerEmbedded(json);
this.data = this.registerProperties(json);
}
registerEmbedded(json) {
const embedded = {};
if (!json._embedded) {
return embedded;
}
for (const rel of Object.keys(json._embedded)) {
const related = json._embedded[rel];
if (Array.isArray(related)) {
embedded[rel] = new Array();
for (let i = 0; i < related.length; i++) {
embedded[rel][i] = new Halo(related[i]);
}
}
else {
embedded[rel] = new Array(new Halo(related));
}
}
return embedded;
}
registerProperties(json) {
const data = {};
for (const entry of Object.entries(json)) {
const prop = entry[0];
if (!prop.startsWith("_")) {
data[prop] = entry[1];
}
}
return data;
}
registerLinks(json) {
const links = {};
if (!json._links) {
return links;
}
for (const rel of Object.keys(json._links)) {
const related = json._links[rel];
links[rel] = !Array.isArray(related)
? new Array(related)
: related;
}
return links;
}
getData() {
return this.data;
}
getEmbeddedOfRelation(rel) {
return this._embedded[rel];
}
getEmbedded() {
return this._embedded;
}
getLinkRelations() {
const relations = new Array();
for (const rel of Object.keys(this._links)) {
relations.push(rel);
}
return relations;
}
getEmbeddedRelations() {
const relations = new Array();
if (!this._embedded) {
return relations;
}
for (const rel of Object.keys(this._embedded)) {
relations.push(rel);
}
return relations;
}
getLinks() {
return this._links;
}
getLinksOfRelation(rel) {
return this._links[rel];
}
getSelfLink() {
const self = this.getLinksOfRelation(Halo.SELF_RELATION);
return self ? self[0] : undefined;
}
}
exports.Halo = Halo;
Halo.EMBEDDED_PROPERTY_NAME = "_embedded";
Halo.LINKS_PROPERTY_NAME = "_links";
Halo.SELF_RELATION = "self";
//# sourceMappingURL=halo.js.map