UNPKG

@webex/webex-core

Version:

Plugin handling for Cisco Webex

165 lines (155 loc) • 5.82 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 = makeWebexStore; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/applyDecoratedDescriptor")); var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map")); var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map")); var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise")); var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor")); var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign")); var _ampersandEvents = _interopRequireDefault(require("ampersand-events")); var _common = require("@webex/common"); /*! * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file. */ var bindings = new _weakMap.default(); /** * Makes a WebexStore for the specified type bound to the specified webex instance * @param {string} type * @param {ProxyWebex} webex * @private * @returns {WebexStore} */ function makeWebexStore(type, webex) { var _dec, _class; /** * Lazy Key-Value Store Interface */ var WebexStore = (_dec = (0, _common.oneFlight)({ keyFactory: function keyFactory(namespace) { return namespace; } }), (_class = /*#__PURE__*/function () { /** * @param {Object} attrs * @param {Object} options * @returns {Store} */ function WebexStore() { (0, _classCallCheck2.default)(this, WebexStore); webex.logger.debug("webex-store: constructing ".concat(type, "Storage")); bindings.set(this, new _map.default()); } /** * Provides easy access to the storage adapter identified in config. * @returns {Object} */ (0, _createClass2.default)(WebexStore, [{ key: "adapter", get: function get() { return webex.config.storage["".concat(type, "Adapter")]; } /** * @returns {WeakMap} */ }, { key: "bindings", get: function get() { return bindings.get(this); } /** * Clears the store * @returns {Promise} */ }, { key: "clear", value: function clear() { var promises = []; this.bindings.forEach(function (binding) { promises.push(binding.clear()); }); return _promise.default.all(promises); } /** * Deletes the specified key from the store * @param {string} namespace * @param {string} key * @returns {[type]} */ }, { key: "del", value: function del(namespace, key) { webex.logger.debug("webex-store: removing ".concat(namespace, ":").concat(key)); return this._getBinding(namespace).then(function (binding) { return binding.del(key); }); } /** * Retrieves the value specified by key from the store. Rejects with * NotFoundError if no value can be found * @param {string} namespace * @param {string} key * @returns {Promise} */ }, { key: "get", value: function get(namespace, key) { webex.logger.debug("webex-store: retrieving ".concat(namespace, ":").concat(key)); return this._getBinding(namespace).then(function (binding) { return binding.get(key); }); } /** * Writes a value to the store. Deletes the specified key from the store * if passed `undefined` * @param {string} namespace * @param {string} key * @param {any} value * @returns {Promise} Resolves with value (to simplify write-through caching) */ }, { key: "put", value: function put(namespace, key, value) { if (typeof value === 'undefined') { return this.del(namespace, key); } webex.logger.debug("webex-store: setting ".concat(namespace, ":").concat(key)); return this._getBinding(namespace).then(function (binding) { return binding.put(key, value.serialize ? value.serialize() : value); }).then(function () { return value; }); } }, { key: "_getBinding", value: function _getBinding(namespace) { var _this = this; return new _promise.default(function (resolve) { webex.logger.debug("storage: getting binding for `".concat(namespace, "`")); var binding = _this.bindings.get(namespace); if (binding) { webex.logger.debug("storage: found binding for `".concat(namespace, "`")); return resolve(binding); } return resolve(_this.adapter.bind(namespace, { logger: webex.logger }).then(function (_binding) { webex.logger.debug("storage: made binding for `".concat(namespace, "`")); _this.bindings.set(namespace, _binding); return _binding; })); }); } }]); return WebexStore; }(), ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "_getBinding", [_dec], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "_getBinding"), _class.prototype)), _class)); (0, _assign.default)(WebexStore.prototype, _ampersandEvents.default); return new WebexStore(); } //# sourceMappingURL=make-webex-store.js.map