You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							69 lines
						
					
					
						
							1.2 KiB
						
					
					
				'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); | 
						|
};
 | 
						|
 |