Repository URL to install this package:
|
Version:
1.2.12 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.persistance = exports.middlewareForLocalStorage = middlewareForLocalStorage;
exports.default = void 0;
var _chainAbleBoost = require("chain-able-boost");
var _exotic = require("exotic");
var _persistance = _interopRequireDefault(require("../../persistance"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
// import { Request as RequestChain } from '../index.mock'
// import fromRequestToString from '../deps/fromRequestToHash'
function fromRequestToString(url, params) {
return (0, _chainAbleBoost.stringify)({
[url]: params
});
}
let debug = false;
function log() {
// if (debug !== false) {
console.log.apply(console, arguments); // }
debug = true;
}
/**
* @param {RequestChain} requestChain
* @param {Object} [eventData={}]
* @return {void}
*/
function middlewareForLocalStorage(requestChain, eventData = {}) {
const type = eventData.type;
/**
* @example
* const register = registerRequest.toRequest()
*/
/* eslint-disable no-negated-condition */
if (type !== 'toRequest') {
return;
} else {} // console.log(stringify({ eventData, store: requestChain.store }, null, 2))
// throw new Error(stringify({ eventData, store: requestChain.store }, null, 2))
/**
* @example
* const registerRequest = new Request()
* .setDefaultParams(registerParams)
* .setUrl(registerBaseUrl)
* .setMethod(POST)
*/
const method = requestChain.get('method');
async function doUncachedRequest(hash, url, params) {
log((0, _chainAbleBoost.stringify)({
hash,
url,
params
}, null, 2));
log('🚂 uncached: '); // do request
const _ref = await method(url, params),
_ref2 = _slicedToArray(_ref, 2),
error = _ref2[0],
response = _ref2[1];
if (error) {
_persistance.default.clear();
throw error;
} else {
const responseObj = (0, _exotic.isString)(response) ? JSON.parse(response) : response;
log({
responseObj
}); // cache the data
_persistance.default.set(hash, responseObj); // dun
return [error, response];
}
} // eslint-disable-next-line
async function interceptor(url, params) {
// log('PERSISTANCE_MIDDLEWARE', { url, params })
const hash = fromRequestToString(url, params); // get from cache
if (_persistance.default.has(hash)) {
log('💸 cached ');
const saved = _persistance.default.get(hash); // because we save the whole response |> used when we cache backend & need whole response
// const obj = isString(saved) ? JSON.parse(saved) : saved
// const data = obj.data
return [null, saved];
} else {
return doUncachedRequest(hash, url, params);
}
} // await method(url, { params })
requestChain.setMethod(interceptor);
} // middlewareForLocalStorage(RequestChain)
var _default = middlewareForLocalStorage;
exports.default = _default;