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 / persistance / OneStorage.js
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = exports.OneStorage = void 0;

var _indexdb = _interopRequireDefault(require("./indexdb"));

var _localStorage = _interopRequireDefault(require("./local-storage"));

var _inMemory = _interopRequireDefault(require("./in-memory"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/**
 * @todo replace oneStorage everywhere
 */
const IS_BROWSER = typeof window === 'object';
const HAS_INDEX_DB = IS_BROWSER && 'indexedDB' in window;
/**
 * keys, values...
 * @alias OmniStorage
 */

class OneStorage {
  constructor() {
    this.inMemory = _inMemory.default;
    this.indexdb = _indexdb.default;
    this.ls = _localStorage.default;
  } // parse when reading back out of ls...?


  get(key) {
    if (_inMemory.default.has(key) === true) {
      return _inMemory.default.get(key);
    }

    if (_localStorage.default.has(key) === true) {
      return _localStorage.default.get(key);
    } // not sure this is needed


    const existing = _inMemory.default.get(key); // could node-async-fs it, or mongo


    if (HAS_INDEX_DB) {
      _indexdb.default.get(key).then(saved => {
        if (existing !== saved) {
          _inMemory.default.set(key, saved);
        }
      });
    }

    return existing;
  } // @todo is it faster to "graphql-client-cache" ignore if it always fills?


  set(key, value) {
    // store as string for graphql? perf?
    // const final = isString(value) ? JSON.parse(value) : value
    // return indexdb.set(key, final)
    // @note @important - we start indexdb transaction first, it's async
    const resolving = HAS_INDEX_DB ? _indexdb.default.set(key, value) : Promise.resolve(-42); // not putting it in ls, took 1s

    if (key !== 'graphql-client-cache') {
      _localStorage.default.set(key, value);
    }

    _inMemory.default.set(key, value);

    return resolving; // indexdb.set(key, value)
    // if (isObj(value)) {
    //   indexdb.set(key, JSON.stringify(value))
    // } else {
    //   indexdb.set(key, value)
    // }
  }

  has(key) {
    return !!this.get(key);
  }

  remove(key) {
    if (HAS_INDEX_DB) {
      _indexdb.default.delete(key);
    }

    _inMemory.default.delete(key);

    _localStorage.default.remove(key);
  }

  clear() {
    if (HAS_INDEX_DB) {
      _indexdb.default.clear();
    }

    _inMemory.default.clear();

    _localStorage.default.clear();
  }

} // eslint-disable-next-line


exports.OneStorage = OneStorage;
OneStorage.prototype['delete'] = OneStorage.prototype.remove;
OneStorage.prototype['removeItem'] = OneStorage.prototype.remove;
OneStorage.prototype['getItem'] = OneStorage.prototype.get;
OneStorage.prototype['setItem'] = OneStorage.prototype.set;
OneStorage.prototype['hasItem'] = OneStorage.prototype.has;
var _default = OneStorage;
exports.default = _default;