jass-vue 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +43 -0
  4. data/lib/jass/vue.rb +12 -0
  5. data/lib/jass/vue/version.rb +5 -0
  6. data/vendor/node_modules/arr-diff/index.js +58 -0
  7. data/vendor/node_modules/arr-diff/package.json +49 -0
  8. data/vendor/node_modules/arr-flatten/index.js +22 -0
  9. data/vendor/node_modules/arr-flatten/package.json +76 -0
  10. data/vendor/node_modules/array-unique/index.js +28 -0
  11. data/vendor/node_modules/array-unique/package.json +37 -0
  12. data/vendor/node_modules/braces/index.js +399 -0
  13. data/vendor/node_modules/braces/package.json +83 -0
  14. data/vendor/node_modules/de-indent/index.js +45 -0
  15. data/vendor/node_modules/de-indent/package.json +25 -0
  16. data/vendor/node_modules/de-indent/test.js +30 -0
  17. data/vendor/node_modules/estree-walker/dist/estree-walker.es.js +55 -0
  18. data/vendor/node_modules/estree-walker/dist/estree-walker.es6.js +59 -0
  19. data/vendor/node_modules/estree-walker/dist/estree-walker.umd.js +65 -0
  20. data/vendor/node_modules/estree-walker/package.json +33 -0
  21. data/vendor/node_modules/estree-walker/src/estree-walker.js +49 -0
  22. data/vendor/node_modules/expand-brackets/index.js +163 -0
  23. data/vendor/node_modules/expand-brackets/package.json +62 -0
  24. data/vendor/node_modules/expand-range/index.js +43 -0
  25. data/vendor/node_modules/expand-range/package.json +73 -0
  26. data/vendor/node_modules/extglob/index.js +178 -0
  27. data/vendor/node_modules/extglob/package.json +60 -0
  28. data/vendor/node_modules/filename-regex/index.js +10 -0
  29. data/vendor/node_modules/filename-regex/package.json +50 -0
  30. data/vendor/node_modules/fill-range/index.js +408 -0
  31. data/vendor/node_modules/fill-range/package.json +61 -0
  32. data/vendor/node_modules/for-in/index.js +16 -0
  33. data/vendor/node_modules/for-in/package.json +68 -0
  34. data/vendor/node_modules/for-own/index.js +19 -0
  35. data/vendor/node_modules/for-own/package.json +70 -0
  36. data/vendor/node_modules/glob-base/index.js +51 -0
  37. data/vendor/node_modules/glob-base/package.json +52 -0
  38. data/vendor/node_modules/glob-parent/index.js +10 -0
  39. data/vendor/node_modules/glob-parent/package.json +35 -0
  40. data/vendor/node_modules/glob-parent/test.js +28 -0
  41. data/vendor/node_modules/he/bin/he +148 -0
  42. data/vendor/node_modules/he/he.js +342 -0
  43. data/vendor/node_modules/he/man/he.1 +78 -0
  44. data/vendor/node_modules/he/package.json +56 -0
  45. data/vendor/node_modules/is-buffer/index.js +21 -0
  46. data/vendor/node_modules/is-buffer/package.json +51 -0
  47. data/vendor/node_modules/is-dotfile/index.js +14 -0
  48. data/vendor/node_modules/is-dotfile/package.json +69 -0
  49. data/vendor/node_modules/is-equal-shallow/index.js +27 -0
  50. data/vendor/node_modules/is-equal-shallow/package.json +54 -0
  51. data/vendor/node_modules/is-extendable/index.js +13 -0
  52. data/vendor/node_modules/is-extendable/package.json +51 -0
  53. data/vendor/node_modules/is-extglob/index.js +11 -0
  54. data/vendor/node_modules/is-extglob/package.json +48 -0
  55. data/vendor/node_modules/is-glob/index.js +14 -0
  56. data/vendor/node_modules/is-glob/package.json +60 -0
  57. data/vendor/node_modules/is-number/index.js +19 -0
  58. data/vendor/node_modules/is-number/package.json +59 -0
  59. data/vendor/node_modules/is-posix-bracket/index.js +10 -0
  60. data/vendor/node_modules/is-posix-bracket/package.json +64 -0
  61. data/vendor/node_modules/is-primitive/index.js +13 -0
  62. data/vendor/node_modules/is-primitive/package.json +46 -0
  63. data/vendor/node_modules/isarray/index.js +5 -0
  64. data/vendor/node_modules/isarray/package.json +45 -0
  65. data/vendor/node_modules/isarray/test.js +20 -0
  66. data/vendor/node_modules/isobject/index.js +14 -0
  67. data/vendor/node_modules/isobject/package.json +67 -0
  68. data/vendor/node_modules/kind-of/index.js +116 -0
  69. data/vendor/node_modules/kind-of/package.json +90 -0
  70. data/vendor/node_modules/magic-string/dist/magic-string.cjs.js +1287 -0
  71. data/vendor/node_modules/magic-string/dist/magic-string.es.js +1283 -0
  72. data/vendor/node_modules/magic-string/dist/magic-string.umd.js +1339 -0
  73. data/vendor/node_modules/magic-string/package.json +60 -0
  74. data/vendor/node_modules/magic-string/src/Bundle.js +263 -0
  75. data/vendor/node_modules/magic-string/src/Chunk.js +154 -0
  76. data/vendor/node_modules/magic-string/src/MagicString.js +618 -0
  77. data/vendor/node_modules/magic-string/src/index-legacy.js +6 -0
  78. data/vendor/node_modules/magic-string/src/index.js +4 -0
  79. data/vendor/node_modules/magic-string/src/utils/Mappings.js +117 -0
  80. data/vendor/node_modules/magic-string/src/utils/SourceMap.js +21 -0
  81. data/vendor/node_modules/magic-string/src/utils/Stats.js +18 -0
  82. data/vendor/node_modules/magic-string/src/utils/btoa.js +13 -0
  83. data/vendor/node_modules/magic-string/src/utils/getLocator.js +35 -0
  84. data/vendor/node_modules/magic-string/src/utils/getRelativePath.js +18 -0
  85. data/vendor/node_modules/magic-string/src/utils/guessIndent.js +25 -0
  86. data/vendor/node_modules/magic-string/src/utils/hasOwnProp.js +1 -0
  87. data/vendor/node_modules/magic-string/src/utils/isObject.js +5 -0
  88. data/vendor/node_modules/micromatch/index.js +431 -0
  89. data/vendor/node_modules/micromatch/lib/chars.js +67 -0
  90. data/vendor/node_modules/micromatch/lib/expand.js +304 -0
  91. data/vendor/node_modules/micromatch/lib/glob.js +193 -0
  92. data/vendor/node_modules/micromatch/lib/utils.js +149 -0
  93. data/vendor/node_modules/micromatch/package.json +114 -0
  94. data/vendor/node_modules/normalize-path/index.js +19 -0
  95. data/vendor/node_modules/normalize-path/package.json +78 -0
  96. data/vendor/node_modules/object.omit/index.js +40 -0
  97. data/vendor/node_modules/object.omit/package.json +67 -0
  98. data/vendor/node_modules/parse-glob/index.js +156 -0
  99. data/vendor/node_modules/parse-glob/package.json +62 -0
  100. data/vendor/node_modules/preserve/index.js +54 -0
  101. data/vendor/node_modules/preserve/package.json +48 -0
  102. data/vendor/node_modules/preserve/test.js +48 -0
  103. data/vendor/node_modules/randomatic/index.js +82 -0
  104. data/vendor/node_modules/randomatic/node_modules/is-number/index.js +22 -0
  105. data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js +116 -0
  106. data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json +90 -0
  107. data/vendor/node_modules/randomatic/node_modules/is-number/package.json +83 -0
  108. data/vendor/node_modules/randomatic/node_modules/kind-of/index.js +119 -0
  109. data/vendor/node_modules/randomatic/node_modules/kind-of/package.json +90 -0
  110. data/vendor/node_modules/randomatic/package.json +78 -0
  111. data/vendor/node_modules/regex-cache/index.js +68 -0
  112. data/vendor/node_modules/regex-cache/package.json +64 -0
  113. data/vendor/node_modules/remove-trailing-separator/index.js +17 -0
  114. data/vendor/node_modules/remove-trailing-separator/package.json +37 -0
  115. data/vendor/node_modules/repeat-element/index.js +18 -0
  116. data/vendor/node_modules/repeat-element/package.json +44 -0
  117. data/vendor/node_modules/repeat-string/index.js +70 -0
  118. data/vendor/node_modules/repeat-string/package.json +77 -0
  119. data/vendor/node_modules/rollup-plugin-vue2/dist/rollup-plugin-vue2.common.js +164 -0
  120. data/vendor/node_modules/rollup-plugin-vue2/dist/rollup-plugin-vue2.es.js +160 -0
  121. data/vendor/node_modules/rollup-plugin-vue2/package.json +50 -0
  122. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.cjs.js +223 -0
  123. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es.js +214 -0
  124. data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es6.js +217 -0
  125. data/vendor/node_modules/rollup-pluginutils/package.json +40 -0
  126. data/vendor/node_modules/rollup-pluginutils/src/addExtension.js +6 -0
  127. data/vendor/node_modules/rollup-pluginutils/src/attachScopes.js +147 -0
  128. data/vendor/node_modules/rollup-pluginutils/src/createFilter.js +33 -0
  129. data/vendor/node_modules/rollup-pluginutils/src/index.js +4 -0
  130. data/vendor/node_modules/rollup-pluginutils/src/makeLegalIdentifier.js +15 -0
  131. data/vendor/node_modules/rollup-pluginutils/src/utils/ensureArray.js +5 -0
  132. data/vendor/node_modules/vlq/dist/vlq.js +91 -0
  133. data/vendor/node_modules/vlq/package.json +27 -0
  134. data/vendor/node_modules/vlq/src/vlq.js +78 -0
  135. data/vendor/node_modules/vue-template-compiler/browser.js +5237 -0
  136. data/vendor/node_modules/vue-template-compiler/build.js +4835 -0
  137. data/vendor/node_modules/vue-template-compiler/index.js +18 -0
  138. data/vendor/node_modules/vue-template-compiler/package.json +27 -0
  139. data/vendor/node_modules/vue-template-es2015-compiler/buble.js +14112 -0
  140. data/vendor/node_modules/vue-template-es2015-compiler/index.js +24 -0
  141. data/vendor/node_modules/vue-template-es2015-compiler/package.json +28 -0
  142. data/vendor/package.json +9 -0
  143. data/vendor/yarn.lock +268 -0
  144. metadata +242 -0
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ var chars = {}, unesc, temp;
4
+
5
+ function reverse(object, prepender) {
6
+ return Object.keys(object).reduce(function(reversed, key) {
7
+ var newKey = prepender ? prepender + key : key; // Optionally prepend a string to key.
8
+ reversed[object[key]] = newKey; // Swap key and value.
9
+ return reversed; // Return the result.
10
+ }, {});
11
+ }
12
+
13
+ /**
14
+ * Regex for common characters
15
+ */
16
+
17
+ chars.escapeRegex = {
18
+ '?': /\?/g,
19
+ '@': /\@/g,
20
+ '!': /\!/g,
21
+ '+': /\+/g,
22
+ '*': /\*/g,
23
+ '(': /\(/g,
24
+ ')': /\)/g,
25
+ '[': /\[/g,
26
+ ']': /\]/g
27
+ };
28
+
29
+ /**
30
+ * Escape characters
31
+ */
32
+
33
+ chars.ESC = {
34
+ '?': '__UNESC_QMRK__',
35
+ '@': '__UNESC_AMPE__',
36
+ '!': '__UNESC_EXCL__',
37
+ '+': '__UNESC_PLUS__',
38
+ '*': '__UNESC_STAR__',
39
+ ',': '__UNESC_COMMA__',
40
+ '(': '__UNESC_LTPAREN__',
41
+ ')': '__UNESC_RTPAREN__',
42
+ '[': '__UNESC_LTBRACK__',
43
+ ']': '__UNESC_RTBRACK__'
44
+ };
45
+
46
+ /**
47
+ * Unescape characters
48
+ */
49
+
50
+ chars.UNESC = unesc || (unesc = reverse(chars.ESC, '\\'));
51
+
52
+ chars.ESC_TEMP = {
53
+ '?': '__TEMP_QMRK__',
54
+ '@': '__TEMP_AMPE__',
55
+ '!': '__TEMP_EXCL__',
56
+ '*': '__TEMP_STAR__',
57
+ '+': '__TEMP_PLUS__',
58
+ ',': '__TEMP_COMMA__',
59
+ '(': '__TEMP_LTPAREN__',
60
+ ')': '__TEMP_RTPAREN__',
61
+ '[': '__TEMP_LTBRACK__',
62
+ ']': '__TEMP_RTBRACK__'
63
+ };
64
+
65
+ chars.TEMP = temp || (temp = reverse(chars.ESC_TEMP));
66
+
67
+ module.exports = chars;
@@ -0,0 +1,304 @@
1
+ /*!
2
+ * micromatch <https://github.com/jonschlinkert/micromatch>
3
+ *
4
+ * Copyright (c) 2014-2015, Jon Schlinkert.
5
+ * Licensed under the MIT License.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var utils = require('./utils');
11
+ var Glob = require('./glob');
12
+
13
+ /**
14
+ * Expose `expand`
15
+ */
16
+
17
+ module.exports = expand;
18
+
19
+ /**
20
+ * Expand a glob pattern to resolve braces and
21
+ * similar patterns before converting to regex.
22
+ *
23
+ * @param {String|Array} `pattern`
24
+ * @param {Array} `files`
25
+ * @param {Options} `opts`
26
+ * @return {Array}
27
+ */
28
+
29
+ function expand(pattern, options) {
30
+ if (typeof pattern !== 'string') {
31
+ throw new TypeError('micromatch.expand(): argument should be a string.');
32
+ }
33
+
34
+ var glob = new Glob(pattern, options || {});
35
+ var opts = glob.options;
36
+
37
+ if (!utils.isGlob(pattern)) {
38
+ glob.pattern = glob.pattern.replace(/([\/.])/g, '\\$1');
39
+ return glob;
40
+ }
41
+
42
+ glob.pattern = glob.pattern.replace(/(\+)(?!\()/g, '\\$1');
43
+ glob.pattern = glob.pattern.split('$').join('\\$');
44
+
45
+ if (typeof opts.braces !== 'boolean' && typeof opts.nobraces !== 'boolean') {
46
+ opts.braces = true;
47
+ }
48
+
49
+ if (glob.pattern === '.*') {
50
+ return {
51
+ pattern: '\\.' + star,
52
+ tokens: tok,
53
+ options: opts
54
+ };
55
+ }
56
+
57
+ if (glob.pattern === '*') {
58
+ return {
59
+ pattern: oneStar(opts.dot),
60
+ tokens: tok,
61
+ options: opts
62
+ };
63
+ }
64
+
65
+ // parse the glob pattern into tokens
66
+ glob.parse();
67
+ var tok = glob.tokens;
68
+ tok.is.negated = opts.negated;
69
+
70
+ // dotfile handling
71
+ if ((opts.dotfiles === true || tok.is.dotfile) && opts.dot !== false) {
72
+ opts.dotfiles = true;
73
+ opts.dot = true;
74
+ }
75
+
76
+ if ((opts.dotdirs === true || tok.is.dotdir) && opts.dot !== false) {
77
+ opts.dotdirs = true;
78
+ opts.dot = true;
79
+ }
80
+
81
+ // check for braces with a dotfile pattern
82
+ if (/[{,]\./.test(glob.pattern)) {
83
+ opts.makeRe = false;
84
+ opts.dot = true;
85
+ }
86
+
87
+ if (opts.nonegate !== true) {
88
+ opts.negated = glob.negated;
89
+ }
90
+
91
+ // if the leading character is a dot or a slash, escape it
92
+ if (glob.pattern.charAt(0) === '.' && glob.pattern.charAt(1) !== '/') {
93
+ glob.pattern = '\\' + glob.pattern;
94
+ }
95
+
96
+ /**
97
+ * Extended globs
98
+ */
99
+
100
+ // expand braces, e.g `{1..5}`
101
+ glob.track('before braces');
102
+ if (tok.is.braces) {
103
+ glob.braces();
104
+ }
105
+ glob.track('after braces');
106
+
107
+ // expand extglobs, e.g `foo/!(a|b)`
108
+ glob.track('before extglob');
109
+ if (tok.is.extglob) {
110
+ glob.extglob();
111
+ }
112
+ glob.track('after extglob');
113
+
114
+ // expand brackets, e.g `[[:alpha:]]`
115
+ glob.track('before brackets');
116
+ if (tok.is.brackets) {
117
+ glob.brackets();
118
+ }
119
+ glob.track('after brackets');
120
+
121
+ // special patterns
122
+ glob._replace('[!', '[^');
123
+ glob._replace('(?', '(%~');
124
+ glob._replace(/\[\]/, '\\[\\]');
125
+ glob._replace('/[', '/' + (opts.dot ? dotfiles : nodot) + '[', true);
126
+ glob._replace('/?', '/' + (opts.dot ? dotfiles : nodot) + '[^/]', true);
127
+ glob._replace('/.', '/(?=.)\\.', true);
128
+
129
+ // windows drives
130
+ glob._replace(/^(\w):([\\\/]+?)/gi, '(?=.)$1:$2', true);
131
+
132
+ // negate slashes in exclusion ranges
133
+ if (glob.pattern.indexOf('[^') !== -1) {
134
+ glob.pattern = negateSlash(glob.pattern);
135
+ }
136
+
137
+ if (opts.globstar !== false && glob.pattern === '**') {
138
+ glob.pattern = globstar(opts.dot);
139
+
140
+ } else {
141
+ glob.pattern = balance(glob.pattern, '[', ']');
142
+ glob.escape(glob.pattern);
143
+
144
+ // if the pattern has `**`
145
+ if (tok.is.globstar) {
146
+ glob.pattern = collapse(glob.pattern, '/**');
147
+ glob.pattern = collapse(glob.pattern, '**/');
148
+ glob._replace('/**/', '(?:/' + globstar(opts.dot) + '/|/)', true);
149
+ glob._replace(/\*{2,}/g, '**');
150
+
151
+ // 'foo/*'
152
+ glob._replace(/(\w+)\*(?!\/)/g, '$1[^/]*?', true);
153
+ glob._replace(/\*\*\/\*(\w)/g, globstar(opts.dot) + '\\/' + (opts.dot ? dotfiles : nodot) + '[^/]*?$1', true);
154
+
155
+ if (opts.dot !== true) {
156
+ glob._replace(/\*\*\/(.)/g, '(?:**\\/|)$1');
157
+ }
158
+
159
+ // 'foo/**' or '{**,*}', but not 'foo**'
160
+ if (tok.path.dirname !== '' || /,\*\*|\*\*,/.test(glob.orig)) {
161
+ glob._replace('**', globstar(opts.dot), true);
162
+ }
163
+ }
164
+
165
+ // ends with /*
166
+ glob._replace(/\/\*$/, '\\/' + oneStar(opts.dot), true);
167
+ // ends with *, no slashes
168
+ glob._replace(/(?!\/)\*$/, star, true);
169
+ // has 'n*.' (partial wildcard w/ file extension)
170
+ glob._replace(/([^\/]+)\*/, '$1' + oneStar(true), true);
171
+ // has '*'
172
+ glob._replace('*', oneStar(opts.dot), true);
173
+ glob._replace('?.', '?\\.', true);
174
+ glob._replace('?:', '?:', true);
175
+
176
+ glob._replace(/\?+/g, function(match) {
177
+ var len = match.length;
178
+ if (len === 1) {
179
+ return qmark;
180
+ }
181
+ return qmark + '{' + len + '}';
182
+ });
183
+
184
+ // escape '.abc' => '\\.abc'
185
+ glob._replace(/\.([*\w]+)/g, '\\.$1');
186
+ // fix '[^\\\\/]'
187
+ glob._replace(/\[\^[\\\/]+\]/g, qmark);
188
+ // '///' => '\/'
189
+ glob._replace(/\/+/g, '\\/');
190
+ // '\\\\\\' => '\\'
191
+ glob._replace(/\\{2,}/g, '\\');
192
+ }
193
+
194
+ // unescape previously escaped patterns
195
+ glob.unescape(glob.pattern);
196
+ glob._replace('__UNESC_STAR__', '*');
197
+
198
+ // escape dots that follow qmarks
199
+ glob._replace('?.', '?\\.');
200
+
201
+ // remove unnecessary slashes in character classes
202
+ glob._replace('[^\\/]', qmark);
203
+
204
+ if (glob.pattern.length > 1) {
205
+ if (/^[\[?*]/.test(glob.pattern)) {
206
+ // only prepend the string if we don't want to match dotfiles
207
+ glob.pattern = (opts.dot ? dotfiles : nodot) + glob.pattern;
208
+ }
209
+ }
210
+
211
+ return glob;
212
+ }
213
+
214
+ /**
215
+ * Collapse repeated character sequences.
216
+ *
217
+ * ```js
218
+ * collapse('a/../../../b', '../');
219
+ * //=> 'a/../b'
220
+ * ```
221
+ *
222
+ * @param {String} `str`
223
+ * @param {String} `ch` Character sequence to collapse
224
+ * @return {String}
225
+ */
226
+
227
+ function collapse(str, ch) {
228
+ var res = str.split(ch);
229
+ var isFirst = res[0] === '';
230
+ var isLast = res[res.length - 1] === '';
231
+ res = res.filter(Boolean);
232
+ if (isFirst) res.unshift('');
233
+ if (isLast) res.push('');
234
+ return res.join(ch);
235
+ }
236
+
237
+ /**
238
+ * Negate slashes in exclusion ranges, per glob spec:
239
+ *
240
+ * ```js
241
+ * negateSlash('[^foo]');
242
+ * //=> '[^\\/foo]'
243
+ * ```
244
+ *
245
+ * @param {String} `str` glob pattern
246
+ * @return {String}
247
+ */
248
+
249
+ function negateSlash(str) {
250
+ return str.replace(/\[\^([^\]]*?)\]/g, function(match, inner) {
251
+ if (inner.indexOf('/') === -1) {
252
+ inner = '\\/' + inner;
253
+ }
254
+ return '[^' + inner + ']';
255
+ });
256
+ }
257
+
258
+ /**
259
+ * Escape imbalanced braces/bracket. This is a very
260
+ * basic, naive implementation that only does enough
261
+ * to serve the purpose.
262
+ */
263
+
264
+ function balance(str, a, b) {
265
+ var aarr = str.split(a);
266
+ var alen = aarr.join('').length;
267
+ var blen = str.split(b).join('').length;
268
+
269
+ if (alen !== blen) {
270
+ str = aarr.join('\\' + a);
271
+ return str.split(b).join('\\' + b);
272
+ }
273
+ return str;
274
+ }
275
+
276
+ /**
277
+ * Special patterns to be converted to regex.
278
+ * Heuristics are used to simplify patterns
279
+ * and speed up processing.
280
+ */
281
+
282
+ /* eslint no-multi-spaces: 0 */
283
+ var qmark = '[^/]';
284
+ var star = qmark + '*?';
285
+ var nodot = '(?!\\.)(?=.)';
286
+ var dotfileGlob = '(?:\\/|^)\\.{1,2}($|\\/)';
287
+ var dotfiles = '(?!' + dotfileGlob + ')(?=.)';
288
+ var twoStarDot = '(?:(?!' + dotfileGlob + ').)*?';
289
+
290
+ /**
291
+ * Create a regex for `*`.
292
+ *
293
+ * If `dot` is true, or the pattern does not begin with
294
+ * a leading star, then return the simpler regex.
295
+ */
296
+
297
+ function oneStar(dotfile) {
298
+ return dotfile ? '(?!' + dotfileGlob + ')(?=.)' + star : (nodot + star);
299
+ }
300
+
301
+ function globstar(dotfile) {
302
+ if (dotfile) { return twoStarDot; }
303
+ return '(?:(?!(?:\\/|^)\\.).)*?';
304
+ }
@@ -0,0 +1,193 @@
1
+ 'use strict';
2
+
3
+ var chars = require('./chars');
4
+ var utils = require('./utils');
5
+
6
+ /**
7
+ * Expose `Glob`
8
+ */
9
+
10
+ var Glob = module.exports = function Glob(pattern, options) {
11
+ if (!(this instanceof Glob)) {
12
+ return new Glob(pattern, options);
13
+ }
14
+ this.options = options || {};
15
+ this.pattern = pattern;
16
+ this.history = [];
17
+ this.tokens = {};
18
+ this.init(pattern);
19
+ };
20
+
21
+ /**
22
+ * Initialize defaults
23
+ */
24
+
25
+ Glob.prototype.init = function(pattern) {
26
+ this.orig = pattern;
27
+ this.negated = this.isNegated();
28
+ this.options.track = this.options.track || false;
29
+ this.options.makeRe = true;
30
+ };
31
+
32
+ /**
33
+ * Push a change into `glob.history`. Useful
34
+ * for debugging.
35
+ */
36
+
37
+ Glob.prototype.track = function(msg) {
38
+ if (this.options.track) {
39
+ this.history.push({msg: msg, pattern: this.pattern});
40
+ }
41
+ };
42
+
43
+ /**
44
+ * Return true if `glob.pattern` was negated
45
+ * with `!`, also remove the `!` from the pattern.
46
+ *
47
+ * @return {Boolean}
48
+ */
49
+
50
+ Glob.prototype.isNegated = function() {
51
+ if (this.pattern.charCodeAt(0) === 33 /* '!' */) {
52
+ this.pattern = this.pattern.slice(1);
53
+ return true;
54
+ }
55
+ return false;
56
+ };
57
+
58
+ /**
59
+ * Expand braces in the given glob pattern.
60
+ *
61
+ * We only need to use the [braces] lib when
62
+ * patterns are nested.
63
+ */
64
+
65
+ Glob.prototype.braces = function() {
66
+ if (this.options.nobraces !== true && this.options.nobrace !== true) {
67
+ // naive/fast check for imbalanced characters
68
+ var a = this.pattern.match(/[\{\(\[]/g);
69
+ var b = this.pattern.match(/[\}\)\]]/g);
70
+
71
+ // if imbalanced, don't optimize the pattern
72
+ if (a && b && (a.length !== b.length)) {
73
+ this.options.makeRe = false;
74
+ }
75
+
76
+ // expand brace patterns and join the resulting array
77
+ var expanded = utils.braces(this.pattern, this.options);
78
+ this.pattern = expanded.join('|');
79
+ }
80
+ };
81
+
82
+ /**
83
+ * Expand bracket expressions in `glob.pattern`
84
+ */
85
+
86
+ Glob.prototype.brackets = function() {
87
+ if (this.options.nobrackets !== true) {
88
+ this.pattern = utils.brackets(this.pattern);
89
+ }
90
+ };
91
+
92
+ /**
93
+ * Expand bracket expressions in `glob.pattern`
94
+ */
95
+
96
+ Glob.prototype.extglob = function() {
97
+ if (this.options.noextglob === true) return;
98
+
99
+ if (utils.isExtglob(this.pattern)) {
100
+ this.pattern = utils.extglob(this.pattern, {escape: true});
101
+ }
102
+ };
103
+
104
+ /**
105
+ * Parse the given pattern
106
+ */
107
+
108
+ Glob.prototype.parse = function(pattern) {
109
+ this.tokens = utils.parseGlob(pattern || this.pattern, true);
110
+ return this.tokens;
111
+ };
112
+
113
+ /**
114
+ * Replace `a` with `b`. Also tracks the change before and
115
+ * after each replacement. This is disabled by default, but
116
+ * can be enabled by setting `options.track` to true.
117
+ *
118
+ * Also, when the pattern is a string, `.split()` is used,
119
+ * because it's much faster than replace.
120
+ *
121
+ * @param {RegExp|String} `a`
122
+ * @param {String} `b`
123
+ * @param {Boolean} `escape` When `true`, escapes `*` and `?` in the replacement.
124
+ * @return {String}
125
+ */
126
+
127
+ Glob.prototype._replace = function(a, b, escape) {
128
+ this.track('before (find): "' + a + '" (replace with): "' + b + '"');
129
+ if (escape) b = esc(b);
130
+ if (a && b && typeof a === 'string') {
131
+ this.pattern = this.pattern.split(a).join(b);
132
+ } else {
133
+ this.pattern = this.pattern.replace(a, b);
134
+ }
135
+ this.track('after');
136
+ };
137
+
138
+ /**
139
+ * Escape special characters in the given string.
140
+ *
141
+ * @param {String} `str` Glob pattern
142
+ * @return {String}
143
+ */
144
+
145
+ Glob.prototype.escape = function(str) {
146
+ this.track('before escape: ');
147
+ var re = /["\\](['"]?[^"'\\]['"]?)/g;
148
+
149
+ this.pattern = str.replace(re, function($0, $1) {
150
+ var o = chars.ESC;
151
+ var ch = o && o[$1];
152
+ if (ch) {
153
+ return ch;
154
+ }
155
+ if (/[a-z]/i.test($0)) {
156
+ return $0.split('\\').join('');
157
+ }
158
+ return $0;
159
+ });
160
+
161
+ this.track('after escape: ');
162
+ };
163
+
164
+ /**
165
+ * Unescape special characters in the given string.
166
+ *
167
+ * @param {String} `str`
168
+ * @return {String}
169
+ */
170
+
171
+ Glob.prototype.unescape = function(str) {
172
+ var re = /__([A-Z]+)_([A-Z]+)__/g;
173
+ this.pattern = str.replace(re, function($0, $1) {
174
+ return chars[$1][$0];
175
+ });
176
+ this.pattern = unesc(this.pattern);
177
+ };
178
+
179
+ /**
180
+ * Escape/unescape utils
181
+ */
182
+
183
+ function esc(str) {
184
+ str = str.split('?').join('%~');
185
+ str = str.split('*').join('%%');
186
+ return str;
187
+ }
188
+
189
+ function unesc(str) {
190
+ str = str.split('%~').join('?');
191
+ str = str.split('%%').join('*');
192
+ return str;
193
+ }