123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /*!
- * 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;
|