Source: cache-manager/modules/memory-storage.js

/**
 * @summary server-environment
 * @version 3.0.0
 * @since 1.0.0
 * @author Arian Khosravi <arian.khosravi@aofl.com>
 */


/**
 *
 *
 * @memberof module:@aofl/cache-manager
 */
class MemoryStorage {
  /**
   * The clear() method of the Storage interface, when invoked, clears all stored keys.
   */
  static clear() {
    for (const key in MemoryStorage) {
      /* istanbul ignore else */
      if (Object.hasOwnProperty.call(MemoryStorage, key)) {
        MemoryStorage.removeItem(key);
      }
    }
  }

  /**
   * The length read-only property of the Storage interface returns an integer representing the
   *  number of data items stored in the Storage object.
   *
   * @readonly
   * @type {Number}
   */
  static get size() {
    let length = 0;
    for (const key in MemoryStorage) {
      /* istanbul ignore else */
      if (Object.hasOwnProperty.call(MemoryStorage, key)) {
        length++;
      }
    }
    return length;
  }

  /**
   * The getItem() method of the Storage interface, when passed a key name, will return that key's
   * value or null if the key does not exist.
   *
   * @param {String} key The name of the key you want to retrieve the value of.
   * @return {*}
   */
  static getItem(key) {
    /* istanbul ignore else */
    if (Object.hasOwnProperty.call(MemoryStorage, key)) {
      return MemoryStorage[key];
    }
    return null;
  }

  /**
   * The setItem() method of the Storage interface, when passed a key name and value, will add
   * that key to the storage, or update that key's value if it already exists.
   *
   * @param {*} key The name of the key you want to create/update.
   * @param {*} value The value you want to give the key you are creating/updating.
   */
  static setItem(key, value) {
    MemoryStorage[key] = value;
  }

  /**
   * The removeItem() method of the Storage interface, when passed a key name, will remove that key
   * from the storage if it exists. If there is no item associated with the given key, this method
   * will do nothing.
   *
   * @param {String} key The name of the key you want to remove.
   */
  static removeItem(key) {
    MemoryStorage[key] = null;
    delete MemoryStorage[key];
  }
}

export {
  MemoryStorage
};