.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / fast-glob / node_modules / extglob / lib / utils.js
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 };