aboutsummaryrefslogtreecommitdiff
path: root/node_modules/extglob/lib/extglob.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/extglob/lib/extglob.js')
-rw-r--r--node_modules/extglob/lib/extglob.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/node_modules/extglob/lib/extglob.js b/node_modules/extglob/lib/extglob.js
new file mode 100644
index 0000000..015f928
--- /dev/null
+++ b/node_modules/extglob/lib/extglob.js
@@ -0,0 +1,78 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var Snapdragon = require('snapdragon');
+var define = require('define-property');
+var extend = require('extend-shallow');
+
+/**
+ * Local dependencies
+ */
+
+var compilers = require('./compilers');
+var parsers = require('./parsers');
+
+/**
+ * Customize Snapdragon parser and renderer
+ */
+
+function Extglob(options) {
+ this.options = extend({source: 'extglob'}, options);
+ this.snapdragon = this.options.snapdragon || new Snapdragon(this.options);
+ this.snapdragon.patterns = this.snapdragon.patterns || {};
+ this.compiler = this.snapdragon.compiler;
+ this.parser = this.snapdragon.parser;
+
+ compilers(this.snapdragon);
+ parsers(this.snapdragon);
+
+ /**
+ * Override Snapdragon `.parse` method
+ */
+
+ define(this.snapdragon, 'parse', function(str, options) {
+ var parsed = Snapdragon.prototype.parse.apply(this, arguments);
+ parsed.input = str;
+
+ // escape unmatched brace/bracket/parens
+ var last = this.parser.stack.pop();
+ if (last && this.options.strict !== true) {
+ var node = last.nodes[0];
+ node.val = '\\' + node.val;
+ var sibling = node.parent.nodes[1];
+ if (sibling.type === 'star') {
+ sibling.loose = true;
+ }
+ }
+
+ // add non-enumerable parser reference
+ define(parsed, 'parser', this.parser);
+ return parsed;
+ });
+
+ /**
+ * Decorate `.parse` method
+ */
+
+ define(this, 'parse', function(ast, options) {
+ return this.snapdragon.parse.apply(this.snapdragon, arguments);
+ });
+
+ /**
+ * Decorate `.compile` method
+ */
+
+ define(this, 'compile', function(ast, options) {
+ return this.snapdragon.compile.apply(this.snapdragon, arguments);
+ });
+
+}
+
+/**
+ * Expose `Extglob`
+ */
+
+module.exports = Extglob;