| /*! | 
|  * fragment-cache <https://github.com/jonschlinkert/fragment-cache> | 
|  * | 
|  * Copyright (c) 2016-2017, Jon Schlinkert. | 
|  * Released under the MIT License. | 
|  */ | 
|   | 
| 'use strict'; | 
|   | 
| var MapCache = require('map-cache'); | 
|   | 
| /** | 
|  * Create a new `FragmentCache` with an optional object to use for `caches`. | 
|  * | 
|  * ```js | 
|  * var fragment = new FragmentCache(); | 
|  * ``` | 
|  * @name FragmentCache | 
|  * @param {String} `cacheName` | 
|  * @return {Object} Returns the [map-cache][] instance. | 
|  * @api public | 
|  */ | 
|   | 
| function FragmentCache(caches) { | 
|   this.caches = caches || {}; | 
| } | 
|   | 
| /** | 
|  * Prototype | 
|  */ | 
|   | 
| FragmentCache.prototype = { | 
|   | 
|   /** | 
|    * Get cache `name` from the `fragment.caches` object. Creates a new | 
|    * `MapCache` if it doesn't already exist. | 
|    * | 
|    * ```js | 
|    * var cache = fragment.cache('files'); | 
|    * console.log(fragment.caches.hasOwnProperty('files')); | 
|    * //=> true | 
|    * ``` | 
|    * @name .cache | 
|    * @param {String} `cacheName` | 
|    * @return {Object} Returns the [map-cache][] instance. | 
|    * @api public | 
|    */ | 
|   | 
|   cache: function(cacheName) { | 
|     return this.caches[cacheName] || (this.caches[cacheName] = new MapCache()); | 
|   }, | 
|   | 
|   /** | 
|    * Set a value for property `key` on cache `name` | 
|    * | 
|    * ```js | 
|    * fragment.set('files', 'somefile.js', new File({path: 'somefile.js'})); | 
|    * ``` | 
|    * @name .set | 
|    * @param {String} `name` | 
|    * @param {String} `key` Property name to set | 
|    * @param {any} `val` The value of `key` | 
|    * @return {Object} The cache instance for chaining | 
|    * @api public | 
|    */ | 
|   | 
|   set: function(cacheName, key, val) { | 
|     var cache = this.cache(cacheName); | 
|     cache.set(key, val); | 
|     return cache; | 
|   }, | 
|   | 
|   /** | 
|    * Returns true if a non-undefined value is set for `key` on fragment cache `name`. | 
|    * | 
|    * ```js | 
|    * var cache = fragment.cache('files'); | 
|    * cache.set('somefile.js'); | 
|    * | 
|    * console.log(cache.has('somefile.js')); | 
|    * //=> true | 
|    * | 
|    * console.log(cache.has('some-other-file.js')); | 
|    * //=> false | 
|    * ``` | 
|    * @name .has | 
|    * @param {String} `name` Cache name | 
|    * @param {String} `key` Optionally specify a property to check for on cache `name` | 
|    * @return {Boolean} | 
|    * @api public | 
|    */ | 
|   | 
|   has: function(cacheName, key) { | 
|     return typeof this.get(cacheName, key) !== 'undefined'; | 
|   }, | 
|   | 
|   /** | 
|    * Get `name`, or if specified, the value of `key`. Invokes the [cache]() method, | 
|    * so that cache `name` will be created it doesn't already exist. If `key` is not passed, | 
|    * the entire cache (`name`) is returned. | 
|    * | 
|    * ```js | 
|    * var Vinyl = require('vinyl'); | 
|    * var cache = fragment.cache('files'); | 
|    * cache.set('somefile.js', new Vinyl({path: 'somefile.js'})); | 
|    * console.log(cache.get('somefile.js')); | 
|    * //=> <File "somefile.js"> | 
|    * ``` | 
|    * @name .get | 
|    * @param {String} `name` | 
|    * @return {Object} Returns cache `name`, or the value of `key` if specified | 
|    * @api public | 
|    */ | 
|   | 
|   get: function(name, key) { | 
|     var cache = this.cache(name); | 
|     if (typeof key === 'string') { | 
|       return cache.get(key); | 
|     } | 
|     return cache; | 
|   } | 
| }; | 
|   | 
| /** | 
|  * Expose `FragmentCache` | 
|  */ | 
|   | 
| exports = module.exports = FragmentCache; |