UNPKG

dc-management-sdk-js

Version:
140 lines 9.44 kB
import { HttpMethod } from '../../http/HttpRequest'; /** * Base class for all Resources */ export class HalResource { /** * Creates a new instance of the resource. * If data is provided it will be parsed as if it had * come from the remote api. * @param data */ constructor(data) { if (data) { this.parse(data); } } /** * Parses the data returned by the API into the model class * @hidden */ parse(data) { Object.assign(this, data); } /** * Returns a copy of this resource's attributes excluding links and client references */ toJSON() { const result = Object.assign({}, this); delete result.client; delete result._links; delete result.related; return result; } /** * Returns a copy of this resource's attributes excluding links and client references * @deprecated */ toJson() { return this.toJSON(); } /** * Set automatically by the HalClient when the resource is created. * If this is not set the resource will be unable to resolve related * resources and actions. * * @hidden */ setClient(client) { this.client = client; } /** * Converts an _embedded collection into an Array of * Resource instances. * @hidden */ parseEmbedded(name, resourceConstructor) { if (this._embedded[name]) { return this._embedded[name].map((x) => this.client.parse(x, resourceConstructor)); } else { return []; } } /** * GET a linked resource * @hidden */ fetchLinkedResource(name, params, resourceConstructor) { return this.withHalLink(name).then(([link, client]) => client.fetchLinkedResource(link, params, resourceConstructor)); } /** * POST / CREATE a new resource * @hidden */ createLinkedResource(name, params, resource, resourceConstructor) { return this.withHalLink(name).then(([link, client]) => client.createLinkedResource(link, params, resource, resourceConstructor)); } /** * POST to an action endpoint and get a resource response * @hidden */ performActionThatReturnsResource(name, params, data, resourceConstructor, method = HttpMethod.POST) { return this.withHalLink(name).then(([link, client]) => client.performActionThatReturnsResource(link, params, data, resourceConstructor, method)); } /** * POST to an action endpoint with no resource response returned. */ performActionWithoutResourceResponse(name, params, data, method = HttpMethod.POST) { return this.withHalLink(name).then(([link, client]) => client.performActionWithoutResourceResponse(link, params, data, method)); } /** * DELETE the current resource * @hidden */ deleteResource() { return this.deleteLinkedResource('delete', {}); } /** * DELETE a linked resource * @hidden */ deleteLinkedResource(name, params) { return this.withHalLink(name).then(([link, client]) => client.deleteLinkedResource(link, params)); } /** * PATCH the current resource * @hidden */ updateResource(resource, resourceConstructor, params) { return this.updateLinkedResource('update', { ...params }, resource, resourceConstructor); } /** * PATCH a linked resource * @hidden */ updateLinkedResource(name, params, resource, resourceConstructor) { return this.withHalLink(name).then(([link, client]) => client.updateLinkedResource(link, params, resource, resourceConstructor)); } withHalLink(name) { if (!this.client) { return Promise.reject(new Error('HalResource has no client')); } const link = this._links[name]; if (!link) { return Promise.reject(`The ${name} action is not available, ensure you have permission to perform this action.`); } if (name === 'list-slots' && link.templated) { // Work around an API bug where pagination params are not included for list-slots. const toReplace = '{?includedSlots}'; const toReplaceWith = '{?includedSlots,page,size,sort}'; if (link.href.endsWith(toReplace)) { link.href = link.href.substr(0, link.href.length - toReplace.length) + toReplaceWith; } } return Promise.resolve([link, this.client]); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGFsUmVzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2hhbC9tb2RlbHMvSGFsUmVzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV3BEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFjdEI7Ozs7O09BS0c7SUFDSCxZQUFZLElBQVU7UUFDcEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsSUFBUztRQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1gsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNyQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDdEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksU0FBUyxDQUFDLE1BQWlCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sYUFBYSxDQUNyQixJQUFZLEVBQ1osbUJBQThDO1FBRTlDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxD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