.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / fragment-cache / index.js
1 /*!
2  * fragment-cache <https://github.com/jonschlinkert/fragment-cache>
3  *
4  * Copyright (c) 2016-2017, Jon Schlinkert.
5  * Released under the MIT License.
6  */
7
8 'use strict';
9
10 var MapCache = require('map-cache');
11
12 /**
13  * Create a new `FragmentCache` with an optional object to use for `caches`.
14  *
15  * ```js
16  * var fragment = new FragmentCache();
17  * ```
18  * @name FragmentCache
19  * @param {String} `cacheName`
20  * @return {Object} Returns the [map-cache][] instance.
21  * @api public
22  */
23
24 function FragmentCache(caches) {
25   this.caches = caches || {};
26 }
27
28 /**
29  * Prototype
30  */
31
32 FragmentCache.prototype = {
33
34   /**
35    * Get cache `name` from the `fragment.caches` object. Creates a new
36    * `MapCache` if it doesn't already exist.
37    *
38    * ```js
39    * var cache = fragment.cache('files');
40    * console.log(fragment.caches.hasOwnProperty('files'));
41    * //=> true
42    * ```
43    * @name .cache
44    * @param {String} `cacheName`
45    * @return {Object} Returns the [map-cache][] instance.
46    * @api public
47    */
48
49   cache: function(cacheName) {
50     return this.caches[cacheName] || (this.caches[cacheName] = new MapCache());
51   },
52
53   /**
54    * Set a value for property `key` on cache `name`
55    *
56    * ```js
57    * fragment.set('files', 'somefile.js', new File({path: 'somefile.js'}));
58    * ```
59    * @name .set
60    * @param {String} `name`
61    * @param {String} `key` Property name to set
62    * @param {any} `val` The value of `key`
63    * @return {Object} The cache instance for chaining
64    * @api public
65    */
66
67   set: function(cacheName, key, val) {
68     var cache = this.cache(cacheName);
69     cache.set(key, val);
70     return cache;
71   },
72
73   /**
74    * Returns true if a non-undefined value is set for `key` on fragment cache `name`.
75    *
76    * ```js
77    * var cache = fragment.cache('files');
78    * cache.set('somefile.js');
79    *
80    * console.log(cache.has('somefile.js'));
81    * //=> true
82    *
83    * console.log(cache.has('some-other-file.js'));
84    * //=> false
85    * ```
86    * @name .has
87    * @param {String} `name` Cache name
88    * @param {String} `key` Optionally specify a property to check for on cache `name`
89    * @return {Boolean}
90    * @api public
91    */
92
93   has: function(cacheName, key) {
94     return typeof this.get(cacheName, key) !== 'undefined';
95   },
96
97   /**
98    * Get `name`, or if specified, the value of `key`. Invokes the [cache]() method,
99    * so that cache `name` will be created it doesn't already exist. If `key` is not passed,
100    * the entire cache (`name`) is returned.
101    *
102    * ```js
103    * var Vinyl = require('vinyl');
104    * var cache = fragment.cache('files');
105    * cache.set('somefile.js', new Vinyl({path: 'somefile.js'}));
106    * console.log(cache.get('somefile.js'));
107    * //=> <File "somefile.js">
108    * ```
109    * @name .get
110    * @param {String} `name`
111    * @return {Object} Returns cache `name`, or the value of `key` if specified
112    * @api public
113    */
114
115   get: function(name, key) {
116     var cache = this.cache(name);
117     if (typeof key === 'string') {
118       return cache.get(key);
119     }
120     return cache;
121   }
122 };
123
124 /**
125  * Expose `FragmentCache`
126  */
127
128 exports = module.exports = FragmentCache;