Blame view

node_modules/extglob/lib/utils.js 1.24 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  '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);
  };