@webex/webex-core
Version:
Plugin handling for Cisco Webex
198 lines (183 loc) • 4.66 kB
JavaScript
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
_Object$defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
var _isArray = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/array/is-array"));
var _iterator = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/symbol/iterator"));
/* eslint-disable no-constructor-return */
/*!
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
*/
var itemsMap = new _weakMap.default();
var linksMap = new _weakMap.default();
var webexsMap = new _weakMap.default();
/**
* @class Page
*/
var Page = exports.default = /*#__PURE__*/function (_Symbol$iterator) {
/**
* @constructs {Page}
* @param {HttpResponse} res
* @param {ProxyWebex} webex
* @returns {Page}
*/
function Page(res, webex) {
(0, _classCallCheck2.default)(this, Page);
itemsMap.set(this, res.body.items);
linksMap.set(this, Page.parseLinkHeaders(res.headers.link));
webexsMap.set(this, webex);
return this;
}
/**
* Separate a single link header string into an actionable object
* @param {string} linkHeaders
* @private
* @returns {Object}
*/
(0, _createClass2.default)(Page, [{
key: "items",
get:
/**
* @type {Array}
*/
function get() {
return itemsMap.get(this);
}
/**
* @type {number}
*/
}, {
key: "length",
get: function get() {
return this.items.length;
}
/**
* @private
* @type {Object}
*/
}, {
key: "links",
get: function get() {
return linksMap.get(this);
}
/**
* @private
* @type {ProxyWebex}
*/
}, {
key: "webex",
get: function get() {
return webexsMap.get(this);
}
}, {
key: "next",
value:
/**
* Get next page
* @returns {Function}
*/
function next() {
return this.getLink('next');
}
/**
* Indicates if there's another page
* @returns {Boolean}
*/
}, {
key: "hasNext",
value: function hasNext() {
return this.hasLink('next');
}
/**
* Get previous page
* @returns {Page}
*/
}, {
key: "previous",
value: function previous() {
return this.getLink('previous');
}
/**
* Indicates if there is a previous Page
* @returns {Boolean}
*/
}, {
key: "hasPrevious",
value: function hasPrevious() {
return this.hasLink('previous');
}
/**
* Retrieves the `Page` at url specified by `link`
* @param {string} link Specifies which link header to return
* @private
* @returns {Promise<Page>}
*/
}, {
key: "getLink",
value: function getLink(link) {
var _this = this;
return this.webex.request({
uri: this.links[link]
}).then(function (res) {
return new Page(res, _this.webex);
});
}
/**
* Indicates if the specified link is in the link header
* @param {string} link
* @private
* @returns {Boolean}
*/
}, {
key: "hasLink",
value: function hasLink(link) {
return Boolean(this.links[link]);
}
/**
* Iterator
* @returns {Object}
*/
}, {
key: _Symbol$iterator,
value: function value() {
var _this2 = this;
var i = -1;
return {
next: function next() {
i += 1;
if (i < _this2.length) {
return {
value: _this2.items[i]
};
}
return {
done: true
};
}
};
}
}], [{
key: "parseLinkHeaders",
value: function parseLinkHeaders(linkHeaders) {
if (!linkHeaders) {
return {};
}
linkHeaders = (0, _isArray.default)(linkHeaders) ? linkHeaders : [linkHeaders];
return linkHeaders.reduce(function (links, linkHeader) {
linkHeader = linkHeader.split(';');
var link = linkHeader[0].replace('<', '').replace('>', '');
var rel = linkHeader[1].split('=')[1].replace(/"/g, '');
links[rel] = link;
return links;
}, {});
}
}]);
return Page;
}(_iterator.default);
//# sourceMappingURL=page.js.map
;