| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 | 
							- var path = require( 'path' );
 
- var fs = require( 'graceful-fs' );
 
- var utils = require( './utils' );
 
- var del = require( './del' );
 
- var writeJSON = utils.writeJSON;
 
- var cache = {
 
-   /**
 
-    * Load a cache identified by the given Id. If the element does not exists, then initialize an empty
 
-    * cache storage. If specified `cacheDir` will be used as the directory to persist the data to. If omitted
 
-    * then the cache module directory `./cache` will be used instead
 
-    *
 
-    * @method load
 
-    * @param docId {String} the id of the cache, would also be used as the name of the file cache
 
-    * @param [cacheDir] {String} directory for the cache entry
 
-    */
 
-   load: function ( docId, cacheDir ) {
 
-     var me = this;
 
-     me._visited = { };
 
-     me._persisted = { };
 
-     me._pathToFile = cacheDir ? path.resolve( cacheDir, docId ) : path.resolve( __dirname, './.cache/', docId );
 
-     if ( fs.existsSync( me._pathToFile ) ) {
 
-       me._persisted = utils.tryParse( me._pathToFile, { } );
 
-     }
 
-   },
 
-   /**
 
-    * Load the cache from the provided file
 
-    * @method loadFile
 
-    * @param  {String} pathToFile the path to the file containing the info for the cache
 
-    */
 
-   loadFile: function ( pathToFile ) {
 
-     var me = this;
 
-     var dir = path.dirname( pathToFile );
 
-     var fName = path.basename( pathToFile );
 
-     me.load( fName, dir );
 
-   },
 
-   /**
 
-    * Returns the entire persisted object
 
-    * @method all
 
-    * @returns {*}
 
-    */
 
-   all: function () {
 
-     return this._persisted;
 
-   },
 
-   keys: function () {
 
-     return Object.keys( this._persisted );
 
-   },
 
-   /**
 
-    * sets a key to a given value
 
-    * @method setKey
 
-    * @param key {string} the key to set
 
-    * @param value {object} the value of the key. Could be any object that can be serialized with JSON.stringify
 
-    */
 
-   setKey: function ( key, value ) {
 
-     this._visited[ key ] = true;
 
-     this._persisted[ key ] = value;
 
-   },
 
-   /**
 
-    * remove a given key from the cache
 
-    * @method removeKey
 
-    * @param key {String} the key to remove from the object
 
-    */
 
-   removeKey: function ( key ) {
 
-     delete this._visited[ key ]; // esfmt-ignore-line
 
-     delete this._persisted[ key ]; // esfmt-ignore-line
 
-   },
 
-   /**
 
-    * Return the value of the provided key
 
-    * @method getKey
 
-    * @param key {String} the name of the key to retrieve
 
-    * @returns {*} the value from the key
 
-    */
 
-   getKey: function ( key ) {
 
-     this._visited[ key ] = true;
 
-     return this._persisted[ key ];
 
-   },
 
-   /**
 
-    * Remove keys that were not accessed/set since the
 
-    * last time the `prune` method was called.
 
-    * @method _prune
 
-    * @private
 
-    */
 
-   _prune: function () {
 
-     var me = this;
 
-     var obj = { };
 
-     var keys = Object.keys( me._visited );
 
-     // no keys visited for either get or set value
 
-     if ( keys.length === 0 ) {
 
-       return;
 
-     }
 
-     keys.forEach( function ( key ) {
 
-       obj[ key ] = me._persisted[ key ];
 
-     } );
 
-     me._visited = { };
 
-     me._persisted = obj;
 
-   },
 
-   /**
 
-    * Save the state of the cache identified by the docId to disk
 
-    * as a JSON structure
 
-    * @param [noPrune=false] {Boolean} whether to remove from cache the non visited files
 
-    * @method save
 
-    */
 
-   save: function ( noPrune ) {
 
-     var me = this;
 
-     (!noPrune) && me._prune();
 
-     writeJSON( me._pathToFile, me._persisted );
 
-   },
 
-   /**
 
-    * remove the file where the cache is persisted
 
-    * @method removeCacheFile
 
-    * @return {Boolean} true or false if the file was successfully deleted
 
-    */
 
-   removeCacheFile: function () {
 
-     return del( this._pathToFile );
 
-   },
 
-   /**
 
-    * Destroy the file cache and cache content.
 
-    * @method destroy
 
-    */
 
-   destroy: function () {
 
-     var me = this;
 
-     me._visited = { };
 
-     me._persisted = { };
 
-     me.removeCacheFile();
 
-   }
 
- };
 
- module.exports = {
 
-   /**
 
-    * Alias for create. Should be considered depreacted. Will be removed in next releases
 
-    *
 
-    * @method load
 
-    * @param docId {String} the id of the cache, would also be used as the name of the file cache
 
-    * @param [cacheDir] {String} directory for the cache entry
 
-    * @returns {cache} cache instance
 
-    */
 
-   load: function ( docId, cacheDir ) {
 
-     return this.create( docId, cacheDir );
 
-   },
 
-   /**
 
-   * Load a cache identified by the given Id. If the element does not exists, then initialize an empty
 
-   * cache storage.
 
-   *
 
-   * @method create
 
-   * @param docId {String} the id of the cache, would also be used as the name of the file cache
 
-   * @param [cacheDir] {String} directory for the cache entry
 
-   * @returns {cache} cache instance
 
-   */
 
-   create: function ( docId, cacheDir ) {
 
-     var obj = Object.create( cache );
 
-     obj.load( docId, cacheDir );
 
-     return obj;
 
-   },
 
-   createFromFile: function ( filePath ) {
 
-     var obj = Object.create( cache );
 
-     obj.loadFile( filePath );
 
-     return obj;
 
-   },
 
-   /**
 
-    * Clear the cache identified by the given id. Caches stored in a different cache directory can be deleted directly
 
-    *
 
-    * @method clearCache
 
-    * @param docId {String} the id of the cache, would also be used as the name of the file cache
 
-    * @param cacheDir {String} the directory where the cache file was written
 
-    * @returns {Boolean} true if the cache folder was deleted. False otherwise
 
-    */
 
-   clearCacheById: function ( docId, cacheDir ) {
 
-     var filePath = cacheDir ? path.resolve( cacheDir, docId ) : path.resolve( __dirname, './.cache/', docId );
 
-     return del( filePath );
 
-   },
 
-   /**
 
-    * Remove all cache stored in the cache directory
 
-    * @method clearAll
 
-    * @returns {Boolean} true if the cache folder was deleted. False otherwise
 
-    */
 
-   clearAll: function ( cacheDir ) {
 
-     var filePath = cacheDir ? path.resolve( cacheDir ) : path.resolve( __dirname, './.cache/' );
 
-     return del( filePath );
 
-   }
 
- };
 
 
  |