dc-management-sdk-js
Version:
Amplience Dynamic Content Management SDK
140 lines • 9.44 kB
JavaScript
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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