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