@webex/storage-adapter-local-forage 3.10.0-next.2 → 3.10.0-next.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +23 -8
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -47,7 +47,7 @@ var StorageAdapterLocalForage = exports.default = /*#__PURE__*/function () {
|
|
|
47
47
|
keyFactory: function keyFactory(key) {
|
|
48
48
|
return key;
|
|
49
49
|
}
|
|
50
|
-
}),
|
|
50
|
+
}), _class = /*#__PURE__*/function () {
|
|
51
51
|
/**
|
|
52
52
|
* @constructs {Bound}
|
|
53
53
|
* @param {string} namespace
|
|
@@ -64,7 +64,7 @@ var StorageAdapterLocalForage = exports.default = /*#__PURE__*/function () {
|
|
|
64
64
|
* @param {string} key
|
|
65
65
|
* @returns {Promise}
|
|
66
66
|
*/
|
|
67
|
-
(0, _createClass2.default)(_class, [{
|
|
67
|
+
return (0, _createClass2.default)(_class, [{
|
|
68
68
|
key: "clear",
|
|
69
69
|
value: function clear() {
|
|
70
70
|
loggers.get(this).debug('storage-adapter-local-forage: clearing localforage');
|
|
@@ -72,14 +72,31 @@ var StorageAdapterLocalForage = exports.default = /*#__PURE__*/function () {
|
|
|
72
72
|
}
|
|
73
73
|
}, {
|
|
74
74
|
key: "del",
|
|
75
|
-
value: function
|
|
75
|
+
value: function
|
|
76
|
+
/**
|
|
77
|
+
* Removes the specified key
|
|
78
|
+
* @param {string} key
|
|
79
|
+
* @returns {Promise}
|
|
80
|
+
*/
|
|
81
|
+
// suppress doc warning because decorators confuse eslint
|
|
82
|
+
// eslint-disable-next-line require-jsdoc
|
|
83
|
+
del(key) {
|
|
76
84
|
var key_ = "".concat(namespaces.get(this), "/").concat(key);
|
|
77
85
|
loggers.get(this).debug("storage-adapter-local-forage: deleting `".concat(key_, "`"));
|
|
78
86
|
return _localforage.default.removeItem(key_);
|
|
79
87
|
}
|
|
80
88
|
}, {
|
|
81
89
|
key: "get",
|
|
82
|
-
value: function
|
|
90
|
+
value: function
|
|
91
|
+
/**
|
|
92
|
+
* Retrieves the data at the specified key
|
|
93
|
+
* @param {string} key
|
|
94
|
+
* @see https://localforage.github.io/localForage/#data-api-getitem
|
|
95
|
+
* @returns {Promise<mixed>}
|
|
96
|
+
*/
|
|
97
|
+
// suppress doc warning because decorators confuse eslint
|
|
98
|
+
// eslint-disable-next-line require-jsdoc
|
|
99
|
+
get(key) {
|
|
83
100
|
var key_ = "".concat(namespaces.get(this), "/").concat(key);
|
|
84
101
|
loggers.get(this).debug("storage-adapter-local-forage: reading `".concat(key_, "`"));
|
|
85
102
|
return _localforage.default.getItem(key_).then(function (value) {
|
|
@@ -118,8 +135,7 @@ var StorageAdapterLocalForage = exports.default = /*#__PURE__*/function () {
|
|
|
118
135
|
return _localforage.default.setItem(key_, value);
|
|
119
136
|
}
|
|
120
137
|
}]);
|
|
121
|
-
|
|
122
|
-
}(), ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "del", [_dec], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "del"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "get", [_dec2], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "get"), _class.prototype)), _class));
|
|
138
|
+
}(), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "del", [_dec], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "del"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "get", [_dec2], (0, _getOwnPropertyDescriptor.default)(_class.prototype, "get"), _class.prototype), _class);
|
|
123
139
|
}
|
|
124
140
|
|
|
125
141
|
/**
|
|
@@ -128,7 +144,7 @@ var StorageAdapterLocalForage = exports.default = /*#__PURE__*/function () {
|
|
|
128
144
|
* @param {Object} options
|
|
129
145
|
* @returns {Promise<Bound>}
|
|
130
146
|
*/
|
|
131
|
-
(0, _createClass2.default)(StorageAdapterLocalForage, [{
|
|
147
|
+
return (0, _createClass2.default)(StorageAdapterLocalForage, [{
|
|
132
148
|
key: "bind",
|
|
133
149
|
value: function bind(namespace, options) {
|
|
134
150
|
options = options || {};
|
|
@@ -142,6 +158,5 @@ var StorageAdapterLocalForage = exports.default = /*#__PURE__*/function () {
|
|
|
142
158
|
return _promise.default.resolve(new this.Bound(namespace, options));
|
|
143
159
|
}
|
|
144
160
|
}]);
|
|
145
|
-
return StorageAdapterLocalForage;
|
|
146
161
|
}();
|
|
147
162
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_localforage","_interopRequireDefault","require","_common","_webexCore","namespaces","_weakMap","default","loggers","StorageAdapterLocalForage","exports","_dec","_dec2","_class","_classCallCheck2","Bound","oneFlight","keyFactory","key","namespace","options","set","logger","_createClass2","value","clear","get","debug","_promise","resolve","localforage","del","key_","concat","removeItem","getItem","then","keys","includes","reject","NotFoundError","put","setItem","_applyDecoratedDescriptor2","prototype","_getOwnPropertyDescriptor","bind","Error","info"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport localforage from 'localforage';\nimport {oneFlight} from '@webex/common';\nimport {NotFoundError} from '@webex/webex-core';\n\nconst namespaces = new WeakMap();\nconst loggers = new WeakMap();\n\n/**\n * IndexedDB adapter for webex-core storage layer\n */\nexport default class StorageAdapterLocalForage {\n /**\n * @constructs {StorageAdapterLocalForage}\n * @param {string} basekey localforage key under which\n * all namespaces will be stored\n */\n constructor() {\n /**\n * localforage binding\n */\n this.Bound = class {\n /**\n * @constructs {Bound}\n * @param {string} namespace\n * @param {Object} options\n */\n constructor(namespace, options) {\n namespaces.set(this, namespace);\n loggers.set(this, options.logger);\n }\n\n /**\n * Clears the localforage\n * @param {string} key\n * @returns {Promise}\n */\n clear() {\n loggers.get(this).debug('storage-adapter-local-forage: clearing localforage');\n\n return Promise.resolve(localforage.clear());\n }\n\n @oneFlight({\n keyFactory: (key) => key,\n })\n /**\n * Removes the specified key\n * @param {string} key\n * @returns {Promise}\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n del(key) {\n const key_ = `${namespaces.get(this)}/${key}`;\n\n loggers.get(this).debug(`storage-adapter-local-forage: deleting \\`${key_}\\``);\n\n return localforage.removeItem(key_);\n }\n\n @oneFlight({\n keyFactory: (key) => key,\n })\n /**\n * Retrieves the data at the specified key\n * @param {string} key\n * @see https://localforage.github.io/localForage/#data-api-getitem\n * @returns {Promise<mixed>}\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n get(key) {\n const key_ = `${namespaces.get(this)}/${key}`;\n\n loggers.get(this).debug(`storage-adapter-local-forage: reading \\`${key_}\\``);\n\n return localforage.getItem(key_).then((value) => {\n // if the key does not exist, getItem() will return null\n if (value === null) {\n // If we got null, we need to check if it's because the key\n // doesn't exist or because it has a saved value of null.\n return localforage.keys().then((keys) => {\n if (keys.includes(key_)) {\n return Promise.resolve(value);\n }\n\n return Promise.reject(new NotFoundError(`No value found for ${key_}`));\n });\n }\n\n // even if undefined is saved, null will be returned by getItem()\n return Promise.resolve(value);\n });\n }\n\n /**\n * Stores the specified value at the specified key.\n * If key is undefined, removes the specified key.\n * @param {string} key\n * @param {mixed} value\n * @returns {Promise}\n */\n put(key, value) {\n if (typeof value === 'undefined') {\n return this.del(key);\n }\n const key_ = `${namespaces.get(this)}/${key}`;\n\n loggers.get(this).debug(`storage-adapter-local-forage: writing \\`${key_}\\``);\n\n return localforage.setItem(key_, value);\n }\n };\n }\n\n /**\n * Returns an adapter bound to the specified namespace\n * @param {string} namespace\n * @param {Object} options\n * @returns {Promise<Bound>}\n */\n bind(namespace, options) {\n options = options || {};\n if (!namespace) {\n return Promise.reject(new Error('`namespace` is required'));\n }\n\n if (!options.logger) {\n return Promise.reject(new Error('`options.logger` is required'));\n }\n\n options.logger.info('storage-adapter-local-forage: returning binding');\n\n return Promise.resolve(new this.Bound(namespace, options));\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAMA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AARA;AACA;AACA;;AAEA;;AAMA,IAAMG,UAAU,GAAG,IAAAC,QAAA,CAAAC,OAAA,CAAY,CAAC;AAChC,IAAMC,OAAO,GAAG,IAAAF,QAAA,CAAAC,OAAA,CAAY,CAAC;;AAE7B;AACA;AACA;AAFA,IAGqBE,yBAAyB,GAAAC,OAAA,CAAAH,OAAA;EAC5C;AACF;AACA;AACA;AACA;EACE,SAAAE,0BAAA,EAAc;IAAA,IAAAE,IAAA,EAAAC,KAAA,EAAAC,MAAA;IAAA,IAAAC,gBAAA,CAAAP,OAAA,QAAAE,yBAAA;IACZ;AACJ;AACA;IACI,IAAI,CAACM,KAAK,IAAAJ,IAAA,GAsBP,IAAAK,iBAAS,EAAC;MACTC,UAAU,EAAE,
|
|
1
|
+
{"version":3,"names":["_localforage","_interopRequireDefault","require","_common","_webexCore","namespaces","_weakMap","default","loggers","StorageAdapterLocalForage","exports","_dec","_dec2","_class","_classCallCheck2","Bound","oneFlight","keyFactory","key","namespace","options","set","logger","_createClass2","value","clear","get","debug","_promise","resolve","localforage","del","key_","concat","removeItem","getItem","then","keys","includes","reject","NotFoundError","put","setItem","_applyDecoratedDescriptor2","prototype","_getOwnPropertyDescriptor","bind","Error","info"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport localforage from 'localforage';\nimport {oneFlight} from '@webex/common';\nimport {NotFoundError} from '@webex/webex-core';\n\nconst namespaces = new WeakMap();\nconst loggers = new WeakMap();\n\n/**\n * IndexedDB adapter for webex-core storage layer\n */\nexport default class StorageAdapterLocalForage {\n /**\n * @constructs {StorageAdapterLocalForage}\n * @param {string} basekey localforage key under which\n * all namespaces will be stored\n */\n constructor() {\n /**\n * localforage binding\n */\n this.Bound = class {\n /**\n * @constructs {Bound}\n * @param {string} namespace\n * @param {Object} options\n */\n constructor(namespace, options) {\n namespaces.set(this, namespace);\n loggers.set(this, options.logger);\n }\n\n /**\n * Clears the localforage\n * @param {string} key\n * @returns {Promise}\n */\n clear() {\n loggers.get(this).debug('storage-adapter-local-forage: clearing localforage');\n\n return Promise.resolve(localforage.clear());\n }\n\n @oneFlight({\n keyFactory: (key) => key,\n })\n /**\n * Removes the specified key\n * @param {string} key\n * @returns {Promise}\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n del(key) {\n const key_ = `${namespaces.get(this)}/${key}`;\n\n loggers.get(this).debug(`storage-adapter-local-forage: deleting \\`${key_}\\``);\n\n return localforage.removeItem(key_);\n }\n\n @oneFlight({\n keyFactory: (key) => key,\n })\n /**\n * Retrieves the data at the specified key\n * @param {string} key\n * @see https://localforage.github.io/localForage/#data-api-getitem\n * @returns {Promise<mixed>}\n */\n // suppress doc warning because decorators confuse eslint\n // eslint-disable-next-line require-jsdoc\n get(key) {\n const key_ = `${namespaces.get(this)}/${key}`;\n\n loggers.get(this).debug(`storage-adapter-local-forage: reading \\`${key_}\\``);\n\n return localforage.getItem(key_).then((value) => {\n // if the key does not exist, getItem() will return null\n if (value === null) {\n // If we got null, we need to check if it's because the key\n // doesn't exist or because it has a saved value of null.\n return localforage.keys().then((keys) => {\n if (keys.includes(key_)) {\n return Promise.resolve(value);\n }\n\n return Promise.reject(new NotFoundError(`No value found for ${key_}`));\n });\n }\n\n // even if undefined is saved, null will be returned by getItem()\n return Promise.resolve(value);\n });\n }\n\n /**\n * Stores the specified value at the specified key.\n * If key is undefined, removes the specified key.\n * @param {string} key\n * @param {mixed} value\n * @returns {Promise}\n */\n put(key, value) {\n if (typeof value === 'undefined') {\n return this.del(key);\n }\n const key_ = `${namespaces.get(this)}/${key}`;\n\n loggers.get(this).debug(`storage-adapter-local-forage: writing \\`${key_}\\``);\n\n return localforage.setItem(key_, value);\n }\n };\n }\n\n /**\n * Returns an adapter bound to the specified namespace\n * @param {string} namespace\n * @param {Object} options\n * @returns {Promise<Bound>}\n */\n bind(namespace, options) {\n options = options || {};\n if (!namespace) {\n return Promise.reject(new Error('`namespace` is required'));\n }\n\n if (!options.logger) {\n return Promise.reject(new Error('`options.logger` is required'));\n }\n\n options.logger.info('storage-adapter-local-forage: returning binding');\n\n return Promise.resolve(new this.Bound(namespace, options));\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@webex/common": "3.8.1-next.11",
|
|
37
37
|
"@webex/storage-adapter-spec": "3.8.1-next.11",
|
|
38
|
-
"@webex/webex-core": "3.10.0-next.
|
|
38
|
+
"@webex/webex-core": "3.10.0-next.4",
|
|
39
39
|
"localforage": "^1.7.3"
|
|
40
40
|
},
|
|
41
41
|
"scripts": {
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"test:browser": "webex-legacy-tools test --unit --runner karma",
|
|
47
47
|
"test:style": "eslint ./src/**/*.*"
|
|
48
48
|
},
|
|
49
|
-
"version": "3.10.0-next.
|
|
49
|
+
"version": "3.10.0-next.4"
|
|
50
50
|
}
|