20240517
This commit is contained in:
63
node_modules/store2/src/store.async.js
generated
vendored
Normal file
63
node_modules/store2/src/store.async.js
generated
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* Copyright (c) 2019 ESHA Research
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Adds an 'async' duplicate on all store APIs that
|
||||
* performs storage-related operations asynchronously and returns
|
||||
* a promise.
|
||||
*
|
||||
* Status: BETA - works great, but lacks justification for existence
|
||||
*/
|
||||
;(function(window, _) {
|
||||
|
||||
var dontPromisify = ['async', 'area', 'namespace', 'isFake', 'toString'];
|
||||
_.promisify = function(api) {
|
||||
var async = api.async = _.Store(api._id, api._area, api._ns);
|
||||
async._async = true;
|
||||
Object.keys(api).forEach(function(name) {
|
||||
if (name.charAt(0) !== '_' && dontPromisify.indexOf(name) < 0) {
|
||||
var fn = api[name];
|
||||
if (typeof fn === "function") {
|
||||
async[name] = _.promiseFn(name, fn, api);
|
||||
}
|
||||
}
|
||||
});
|
||||
return async;
|
||||
};
|
||||
_.promiseFn = function(name, fn, self) {
|
||||
return function promised() {
|
||||
var args = arguments;
|
||||
return new Promise(function(resolve, reject) {
|
||||
setTimeout(function() {
|
||||
try {
|
||||
resolve(fn.apply(self, args));
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
}, 0);
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
// promisify existing apis
|
||||
for (var apiName in _.apis) {
|
||||
_.promisify(_.apis[apiName]);
|
||||
}
|
||||
// ensure future apis are promisified
|
||||
Object.defineProperty(_.storeAPI, 'async', {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
get: function() {
|
||||
var async = _.promisify(this);
|
||||
// overwrite getter to avoid re-promisifying
|
||||
Object.defineProperty(this, 'async', {
|
||||
enumerable: true,
|
||||
value: async
|
||||
});
|
||||
return async;
|
||||
}
|
||||
});
|
||||
|
||||
})(window, window.store._);
|
||||
Reference in New Issue
Block a user