| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 
							- 'use strict';
 
- var regex = require('regex-not');
 
- var Cache = require('fragment-cache');
 
- /**
 
-  * Utils
 
-  */
 
- var utils = module.exports;
 
- var cache = utils.cache = new Cache();
 
- /**
 
-  * Cast `val` to an array
 
-  * @return {Array}
 
-  */
 
- utils.arrayify = function(val) {
 
-   if (!Array.isArray(val)) {
 
-     return [val];
 
-   }
 
-   return val;
 
- };
 
- /**
 
-  * Memoize a generated regex or function
 
-  */
 
- utils.memoize = function(type, pattern, options, fn) {
 
-   var key = utils.createKey(type + pattern, options);
 
-   if (cache.has(type, key)) {
 
-     return cache.get(type, key);
 
-   }
 
-   var val = fn(pattern, options);
 
-   if (options && options.cache === false) {
 
-     return val;
 
-   }
 
-   cache.set(type, key, val);
 
-   return val;
 
- };
 
- /**
 
-  * Create the key to use for memoization. The key is generated
 
-  * by iterating over the options and concatenating key-value pairs
 
-  * to the pattern string.
 
-  */
 
- utils.createKey = function(pattern, options) {
 
-   var key = pattern;
 
-   if (typeof options === 'undefined') {
 
-     return key;
 
-   }
 
-   for (var prop in options) {
 
-     key += ';' + prop + '=' + String(options[prop]);
 
-   }
 
-   return key;
 
- };
 
- /**
 
-  * Create the regex to use for matching text
 
-  */
 
- utils.createRegex = function(str) {
 
-   var opts = {contains: true, strictClose: false};
 
-   return regex(str, opts);
 
- };
 
 
  |