UNPKG

@granito/ngx-hal-client

Version:

A HAL client to be used in Angular projects

57 lines 6.96 kB
import { catchError, map } from 'rxjs'; import { Resource } from './internal'; const next = 'next'; const prev = 'prev'; /** * This class represents an in-memory collection of resources. */ export class Collection extends Resource { /** * @param type the element resource type * @param obj the object used to assign the properties */ constructor(type, obj) { super(obj); this.type = type; this.start = obj.start > 0 ? Math.trunc(obj.start) : 0; for (const rel in this._embedded) { const values = this._embedded[rel]; if (Array.isArray(values)) { this.values = this.arrayOf(type, values); return; } } this.values = []; } /** * Follow `next` link if it exists and can be read. * * @returns the accessor for the link or `undefined` */ next() { const accessor = this.follow(next); return !!accessor && accessor.canRead ? accessor : undefined; } /** * Follow `prev` link if it exists and can be read. * * @returns the accessor for the link or `undefined` */ previous() { const accessor = this.follow(prev); return !!accessor && accessor.canRead ? accessor : undefined; } /** * Refresh the resource collection. In other words, read * the resource collection identified by `self` link. * * @returns an observable of the refreshed resource collection instance */ read() { return this.withSelf(self => this._client.get(self).pipe(map(obj => new Collection(this.type, { ...obj, _client: this._client })), catchError(this.handleError))); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWMsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQVksUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWhELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUVwQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7QUFFcEI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBK0IsU0FBUSxRQUFRO0lBWXhEOzs7T0FHRztJQUNILFlBQTZCLElBQWEsRUFBRSxHQUFRO1FBQ2hELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQURjLFNBQUksR0FBSixJQUFJLENBQVM7UUFHdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5DLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV6QyxPQUFPO1lBQ1gsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUk7UUFDQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLE9BQU8sQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVE7UUFDSixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLE9BQU8sQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTSxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNwRCxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pDLEdBQUcsR0FBRztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN6QixDQUFTLENBQUMsRUFDWCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUMvQixDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjY2Vzc29yLCBSZXNvdXJjZSB9IGZyb20gJy4vaW50ZXJuYWwnO1xuXG5jb25zdCBuZXh0ID0gJ25leHQnO1xuXG5jb25zdCBwcmV2ID0gJ3ByZXYnO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBpbi1tZW1vcnkgY29sbGVjdGlvbiBvZiByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uPFQgZXh0ZW5kcyBSZXNvdXJjZT4gZXh0ZW5kcyBSZXNvdXJjZSB7XG4gICAgLyoqXG4gICAgICogWmVyby1iYXNlZCBvZmZzZXQgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGB2YWx1ZXNgIGFycmF5IGluXG4gICAgICogdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEEgcGFnZSBvZiB2YWx1ZXMgb2YgdGhlIGNvbGxlY3Rpb24gc3RhcnRpbmcgd2l0aCBgc3RhcnRgIG9mZnNldC5cbiAgICAgKi9cbiAgICByZWFkb25seSB2YWx1ZXM6IFRbXTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB0eXBlIHRoZSBlbGVtZW50IHJlc291cmNlIHR5cGVcbiAgICAgKiBAcGFyYW0gb2JqIHRoZSBvYmplY3QgdXNlZCB0byBhc3NpZ24gdGhlIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHR5cGU6IFR5cGU8VD4sIG9iajogYW55KSB7XG4gICAgICAgIHN1cGVyKG9iaik7XG5cbiAgICAgICAgdGhpcy5zdGFydCA9IG9iai5zdGFydCA+IDAgPyBNYXRoLnRydW5jKG9iai5zdGFydCkgOiAwO1xuXG4gICAgICAgIGZvciAoY29uc3QgcmVsIGluIHRoaXMuX2VtYmVkZGVkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9lbWJlZGRlZFtyZWxdO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLmFycmF5T2YodHlwZSwgdmFsdWVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRm9sbG93IGBuZXh0YCBsaW5rIGlmIGl0IGV4aXN0cyBhbmQgY2FuIGJlIHJlYWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgYWNjZXNzb3IgZm9yIHRoZSBsaW5rIG9yIGB1bmRlZmluZWRgXG4gICAgICovXG4gICAgbmV4dCgpOiBBY2Nlc3NvciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gdGhpcy5mb2xsb3cobmV4dCk7XG5cbiAgICAgICAgcmV0dXJuICEhYWNjZXNzb3IgJiYgYWNjZXNzb3IuY2FuUmVhZCA/IGFjY2Vzc29yIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvbGxvdyBgcHJldmAgbGluayBpZiBpdCBleGlzdHMgYW5kIGNhbiBiZSByZWFkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgdGhlIGFjY2Vzc29yIGZvciB0aGUgbGluayBvciBgdW5kZWZpbmVkYFxuICAgICAqL1xuICAgIHByZXZpb3VzKCk6IEFjY2Vzc29yIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSB0aGlzLmZvbGxvdyhwcmV2KTtcblxuICAgICAgICByZXR1cm4gISFhY2Nlc3NvciAmJiBhY2Nlc3Nvci5jYW5SZWFkID8gYWNjZXNzb3IgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmcmVzaCB0aGUgcmVzb3VyY2UgY29sbGVjdGlvbi4gSW4gb3RoZXIgd29yZHMsIHJlYWRcbiAgICAgKiB0aGUgcmVzb3VyY2UgY29sbGVjdGlvbiBpZGVudGlmaWVkIGJ5IGBzZWxmYCBsaW5rLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYW4gb2JzZXJ2YWJsZSBvZiB0aGUgcmVmcmVzaGVkIHJlc291cmNlIGNvbGxlY3Rpb24gaW5zdGFuY2VcbiAgICAgKi9cbiAgICBvdmVycmlkZSByZWFkKCk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VsZihzZWxmID0+IHRoaXMuX2NsaWVudC5nZXQoc2VsZikucGlwZShcbiAgICAgICAgICAgIG1hcChvYmogPT4gbmV3IENvbGxlY3Rpb24odGhpcy50eXBlLCB7XG4gICAgICAgICAgICAgICAgLi4ub2JqLFxuICAgICAgICAgICAgICAgICBfY2xpZW50OiB0aGlzLl9jbGllbnRcbiAgICAgICAgICAgIH0pIGFzIHRoaXMpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxuICAgICAgICApKTtcbiAgICB9XG59XG4iXX0=