UNPKG

hal-object

Version:

object for the Hal mediatype

93 lines 2.61 kB
"use strict"; 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