Projekt

Obecné

Profil

Stáhnout (1.24 KB) Statistiky
| Větev: | Revize:
1
'use strict';
2

    
3
var regex = require('regex-not');
4
var Cache = require('fragment-cache');
5

    
6
/**
7
 * Utils
8
 */
9

    
10
var utils = module.exports;
11
var cache = utils.cache = new Cache();
12

    
13
/**
14
 * Cast `val` to an array
15
 * @return {Array}
16
 */
17

    
18
utils.arrayify = function(val) {
19
  if (!Array.isArray(val)) {
20
    return [val];
21
  }
22
  return val;
23
};
24

    
25
/**
26
 * Memoize a generated regex or function
27
 */
28

    
29
utils.memoize = function(type, pattern, options, fn) {
30
  var key = utils.createKey(type + pattern, options);
31

    
32
  if (cache.has(type, key)) {
33
    return cache.get(type, key);
34
  }
35

    
36
  var val = fn(pattern, options);
37
  if (options && options.cache === false) {
38
    return val;
39
  }
40

    
41
  cache.set(type, key, val);
42
  return val;
43
};
44

    
45
/**
46
 * Create the key to use for memoization. The key is generated
47
 * by iterating over the options and concatenating key-value pairs
48
 * to the pattern string.
49
 */
50

    
51
utils.createKey = function(pattern, options) {
52
  var key = pattern;
53
  if (typeof options === 'undefined') {
54
    return key;
55
  }
56
  for (var prop in options) {
57
    key += ';' + prop + '=' + String(options[prop]);
58
  }
59
  return key;
60
};
61

    
62
/**
63
 * Create the regex to use for matching text
64
 */
65

    
66
utils.createRegex = function(str) {
67
  var opts = {contains: true, strictClose: false};
68
  return regex(str, opts);
69
};
(4-4/4)