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