aboutsummaryrefslogtreecommitdiff
path: root/node_modules/extglob/lib/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/extglob/lib/utils.js')
-rw-r--r--node_modules/extglob/lib/utils.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/node_modules/extglob/lib/utils.js b/node_modules/extglob/lib/utils.js
new file mode 100644
index 0000000..37a59fb
--- /dev/null
+++ b/node_modules/extglob/lib/utils.js
@@ -0,0 +1,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);
+};