@webex/webex-core
Version:
Plugin handling for Cisco Webex
165 lines (155 loc) • 5.82 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 = 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