Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/modules / ___dist / oneRequest / middleware / persistance.js
Size: Mime:
"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;