| 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);};
 |