UNPKG

@webex/webex-core

Version:

Plugin handling for Cisco Webex

198 lines (183 loc) • 4.66 kB
"use strict"; 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