jass-vue 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +43 -0
- data/lib/jass/vue.rb +12 -0
- data/lib/jass/vue/version.rb +5 -0
- data/vendor/node_modules/arr-diff/index.js +58 -0
- data/vendor/node_modules/arr-diff/package.json +49 -0
- data/vendor/node_modules/arr-flatten/index.js +22 -0
- data/vendor/node_modules/arr-flatten/package.json +76 -0
- data/vendor/node_modules/array-unique/index.js +28 -0
- data/vendor/node_modules/array-unique/package.json +37 -0
- data/vendor/node_modules/braces/index.js +399 -0
- data/vendor/node_modules/braces/package.json +83 -0
- data/vendor/node_modules/de-indent/index.js +45 -0
- data/vendor/node_modules/de-indent/package.json +25 -0
- data/vendor/node_modules/de-indent/test.js +30 -0
- data/vendor/node_modules/estree-walker/dist/estree-walker.es.js +55 -0
- data/vendor/node_modules/estree-walker/dist/estree-walker.es6.js +59 -0
- data/vendor/node_modules/estree-walker/dist/estree-walker.umd.js +65 -0
- data/vendor/node_modules/estree-walker/package.json +33 -0
- data/vendor/node_modules/estree-walker/src/estree-walker.js +49 -0
- data/vendor/node_modules/expand-brackets/index.js +163 -0
- data/vendor/node_modules/expand-brackets/package.json +62 -0
- data/vendor/node_modules/expand-range/index.js +43 -0
- data/vendor/node_modules/expand-range/package.json +73 -0
- data/vendor/node_modules/extglob/index.js +178 -0
- data/vendor/node_modules/extglob/package.json +60 -0
- data/vendor/node_modules/filename-regex/index.js +10 -0
- data/vendor/node_modules/filename-regex/package.json +50 -0
- data/vendor/node_modules/fill-range/index.js +408 -0
- data/vendor/node_modules/fill-range/package.json +61 -0
- data/vendor/node_modules/for-in/index.js +16 -0
- data/vendor/node_modules/for-in/package.json +68 -0
- data/vendor/node_modules/for-own/index.js +19 -0
- data/vendor/node_modules/for-own/package.json +70 -0
- data/vendor/node_modules/glob-base/index.js +51 -0
- data/vendor/node_modules/glob-base/package.json +52 -0
- data/vendor/node_modules/glob-parent/index.js +10 -0
- data/vendor/node_modules/glob-parent/package.json +35 -0
- data/vendor/node_modules/glob-parent/test.js +28 -0
- data/vendor/node_modules/he/bin/he +148 -0
- data/vendor/node_modules/he/he.js +342 -0
- data/vendor/node_modules/he/man/he.1 +78 -0
- data/vendor/node_modules/he/package.json +56 -0
- data/vendor/node_modules/is-buffer/index.js +21 -0
- data/vendor/node_modules/is-buffer/package.json +51 -0
- data/vendor/node_modules/is-dotfile/index.js +14 -0
- data/vendor/node_modules/is-dotfile/package.json +69 -0
- data/vendor/node_modules/is-equal-shallow/index.js +27 -0
- data/vendor/node_modules/is-equal-shallow/package.json +54 -0
- data/vendor/node_modules/is-extendable/index.js +13 -0
- data/vendor/node_modules/is-extendable/package.json +51 -0
- data/vendor/node_modules/is-extglob/index.js +11 -0
- data/vendor/node_modules/is-extglob/package.json +48 -0
- data/vendor/node_modules/is-glob/index.js +14 -0
- data/vendor/node_modules/is-glob/package.json +60 -0
- data/vendor/node_modules/is-number/index.js +19 -0
- data/vendor/node_modules/is-number/package.json +59 -0
- data/vendor/node_modules/is-posix-bracket/index.js +10 -0
- data/vendor/node_modules/is-posix-bracket/package.json +64 -0
- data/vendor/node_modules/is-primitive/index.js +13 -0
- data/vendor/node_modules/is-primitive/package.json +46 -0
- data/vendor/node_modules/isarray/index.js +5 -0
- data/vendor/node_modules/isarray/package.json +45 -0
- data/vendor/node_modules/isarray/test.js +20 -0
- data/vendor/node_modules/isobject/index.js +14 -0
- data/vendor/node_modules/isobject/package.json +67 -0
- data/vendor/node_modules/kind-of/index.js +116 -0
- data/vendor/node_modules/kind-of/package.json +90 -0
- data/vendor/node_modules/magic-string/dist/magic-string.cjs.js +1287 -0
- data/vendor/node_modules/magic-string/dist/magic-string.es.js +1283 -0
- data/vendor/node_modules/magic-string/dist/magic-string.umd.js +1339 -0
- data/vendor/node_modules/magic-string/package.json +60 -0
- data/vendor/node_modules/magic-string/src/Bundle.js +263 -0
- data/vendor/node_modules/magic-string/src/Chunk.js +154 -0
- data/vendor/node_modules/magic-string/src/MagicString.js +618 -0
- data/vendor/node_modules/magic-string/src/index-legacy.js +6 -0
- data/vendor/node_modules/magic-string/src/index.js +4 -0
- data/vendor/node_modules/magic-string/src/utils/Mappings.js +117 -0
- data/vendor/node_modules/magic-string/src/utils/SourceMap.js +21 -0
- data/vendor/node_modules/magic-string/src/utils/Stats.js +18 -0
- data/vendor/node_modules/magic-string/src/utils/btoa.js +13 -0
- data/vendor/node_modules/magic-string/src/utils/getLocator.js +35 -0
- data/vendor/node_modules/magic-string/src/utils/getRelativePath.js +18 -0
- data/vendor/node_modules/magic-string/src/utils/guessIndent.js +25 -0
- data/vendor/node_modules/magic-string/src/utils/hasOwnProp.js +1 -0
- data/vendor/node_modules/magic-string/src/utils/isObject.js +5 -0
- data/vendor/node_modules/micromatch/index.js +431 -0
- data/vendor/node_modules/micromatch/lib/chars.js +67 -0
- data/vendor/node_modules/micromatch/lib/expand.js +304 -0
- data/vendor/node_modules/micromatch/lib/glob.js +193 -0
- data/vendor/node_modules/micromatch/lib/utils.js +149 -0
- data/vendor/node_modules/micromatch/package.json +114 -0
- data/vendor/node_modules/normalize-path/index.js +19 -0
- data/vendor/node_modules/normalize-path/package.json +78 -0
- data/vendor/node_modules/object.omit/index.js +40 -0
- data/vendor/node_modules/object.omit/package.json +67 -0
- data/vendor/node_modules/parse-glob/index.js +156 -0
- data/vendor/node_modules/parse-glob/package.json +62 -0
- data/vendor/node_modules/preserve/index.js +54 -0
- data/vendor/node_modules/preserve/package.json +48 -0
- data/vendor/node_modules/preserve/test.js +48 -0
- data/vendor/node_modules/randomatic/index.js +82 -0
- data/vendor/node_modules/randomatic/node_modules/is-number/index.js +22 -0
- data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/index.js +116 -0
- data/vendor/node_modules/randomatic/node_modules/is-number/node_modules/kind-of/package.json +90 -0
- data/vendor/node_modules/randomatic/node_modules/is-number/package.json +83 -0
- data/vendor/node_modules/randomatic/node_modules/kind-of/index.js +119 -0
- data/vendor/node_modules/randomatic/node_modules/kind-of/package.json +90 -0
- data/vendor/node_modules/randomatic/package.json +78 -0
- data/vendor/node_modules/regex-cache/index.js +68 -0
- data/vendor/node_modules/regex-cache/package.json +64 -0
- data/vendor/node_modules/remove-trailing-separator/index.js +17 -0
- data/vendor/node_modules/remove-trailing-separator/package.json +37 -0
- data/vendor/node_modules/repeat-element/index.js +18 -0
- data/vendor/node_modules/repeat-element/package.json +44 -0
- data/vendor/node_modules/repeat-string/index.js +70 -0
- data/vendor/node_modules/repeat-string/package.json +77 -0
- data/vendor/node_modules/rollup-plugin-vue2/dist/rollup-plugin-vue2.common.js +164 -0
- data/vendor/node_modules/rollup-plugin-vue2/dist/rollup-plugin-vue2.es.js +160 -0
- data/vendor/node_modules/rollup-plugin-vue2/package.json +50 -0
- data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.cjs.js +223 -0
- data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es.js +214 -0
- data/vendor/node_modules/rollup-pluginutils/dist/pluginutils.es6.js +217 -0
- data/vendor/node_modules/rollup-pluginutils/package.json +40 -0
- data/vendor/node_modules/rollup-pluginutils/src/addExtension.js +6 -0
- data/vendor/node_modules/rollup-pluginutils/src/attachScopes.js +147 -0
- data/vendor/node_modules/rollup-pluginutils/src/createFilter.js +33 -0
- data/vendor/node_modules/rollup-pluginutils/src/index.js +4 -0
- data/vendor/node_modules/rollup-pluginutils/src/makeLegalIdentifier.js +15 -0
- data/vendor/node_modules/rollup-pluginutils/src/utils/ensureArray.js +5 -0
- data/vendor/node_modules/vlq/dist/vlq.js +91 -0
- data/vendor/node_modules/vlq/package.json +27 -0
- data/vendor/node_modules/vlq/src/vlq.js +78 -0
- data/vendor/node_modules/vue-template-compiler/browser.js +5237 -0
- data/vendor/node_modules/vue-template-compiler/build.js +4835 -0
- data/vendor/node_modules/vue-template-compiler/index.js +18 -0
- data/vendor/node_modules/vue-template-compiler/package.json +27 -0
- data/vendor/node_modules/vue-template-es2015-compiler/buble.js +14112 -0
- data/vendor/node_modules/vue-template-es2015-compiler/index.js +24 -0
- data/vendor/node_modules/vue-template-es2015-compiler/package.json +28 -0
- data/vendor/package.json +9 -0
- data/vendor/yarn.lock +268 -0
- metadata +242 -0
@@ -0,0 +1,163 @@
|
|
1
|
+
/*!
|
2
|
+
* expand-brackets <https://github.com/jonschlinkert/expand-brackets>
|
3
|
+
*
|
4
|
+
* Copyright (c) 2015 Jon Schlinkert.
|
5
|
+
* Licensed under the MIT license.
|
6
|
+
*/
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
var isPosixBracket = require('is-posix-bracket');
|
11
|
+
|
12
|
+
/**
|
13
|
+
* POSIX character classes
|
14
|
+
*/
|
15
|
+
|
16
|
+
var POSIX = {
|
17
|
+
alnum: 'a-zA-Z0-9',
|
18
|
+
alpha: 'a-zA-Z',
|
19
|
+
blank: ' \\t',
|
20
|
+
cntrl: '\\x00-\\x1F\\x7F',
|
21
|
+
digit: '0-9',
|
22
|
+
graph: '\\x21-\\x7E',
|
23
|
+
lower: 'a-z',
|
24
|
+
print: '\\x20-\\x7E',
|
25
|
+
punct: '-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
|
26
|
+
space: ' \\t\\r\\n\\v\\f',
|
27
|
+
upper: 'A-Z',
|
28
|
+
word: 'A-Za-z0-9_',
|
29
|
+
xdigit: 'A-Fa-f0-9',
|
30
|
+
};
|
31
|
+
|
32
|
+
/**
|
33
|
+
* Expose `brackets`
|
34
|
+
*/
|
35
|
+
|
36
|
+
module.exports = brackets;
|
37
|
+
|
38
|
+
function brackets(str) {
|
39
|
+
if (!isPosixBracket(str)) {
|
40
|
+
return str;
|
41
|
+
}
|
42
|
+
|
43
|
+
var negated = false;
|
44
|
+
if (str.indexOf('[^') !== -1) {
|
45
|
+
negated = true;
|
46
|
+
str = str.split('[^').join('[');
|
47
|
+
}
|
48
|
+
if (str.indexOf('[!') !== -1) {
|
49
|
+
negated = true;
|
50
|
+
str = str.split('[!').join('[');
|
51
|
+
}
|
52
|
+
|
53
|
+
var a = str.split('[');
|
54
|
+
var b = str.split(']');
|
55
|
+
var imbalanced = a.length !== b.length;
|
56
|
+
|
57
|
+
var parts = str.split(/(?::\]\[:|\[?\[:|:\]\]?)/);
|
58
|
+
var len = parts.length, i = 0;
|
59
|
+
var end = '', beg = '';
|
60
|
+
var res = [];
|
61
|
+
|
62
|
+
// start at the end (innermost) first
|
63
|
+
while (len--) {
|
64
|
+
var inner = parts[i++];
|
65
|
+
if (inner === '^[!' || inner === '[!') {
|
66
|
+
inner = '';
|
67
|
+
negated = true;
|
68
|
+
}
|
69
|
+
|
70
|
+
var prefix = negated ? '^' : '';
|
71
|
+
var ch = POSIX[inner];
|
72
|
+
|
73
|
+
if (ch) {
|
74
|
+
res.push('[' + prefix + ch + ']');
|
75
|
+
} else if (inner) {
|
76
|
+
if (/^\[?\w-\w\]?$/.test(inner)) {
|
77
|
+
if (i === parts.length) {
|
78
|
+
res.push('[' + prefix + inner);
|
79
|
+
} else if (i === 1) {
|
80
|
+
res.push(prefix + inner + ']');
|
81
|
+
} else {
|
82
|
+
res.push(prefix + inner);
|
83
|
+
}
|
84
|
+
} else {
|
85
|
+
if (i === 1) {
|
86
|
+
beg += inner;
|
87
|
+
} else if (i === parts.length) {
|
88
|
+
end += inner;
|
89
|
+
} else {
|
90
|
+
res.push('[' + prefix + inner + ']');
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
|
96
|
+
var result = res.join('|');
|
97
|
+
var rlen = res.length || 1;
|
98
|
+
if (rlen > 1) {
|
99
|
+
result = '(?:' + result + ')';
|
100
|
+
rlen = 1;
|
101
|
+
}
|
102
|
+
if (beg) {
|
103
|
+
rlen++;
|
104
|
+
if (beg.charAt(0) === '[') {
|
105
|
+
if (imbalanced) {
|
106
|
+
beg = '\\[' + beg.slice(1);
|
107
|
+
} else {
|
108
|
+
beg += ']';
|
109
|
+
}
|
110
|
+
}
|
111
|
+
result = beg + result;
|
112
|
+
}
|
113
|
+
if (end) {
|
114
|
+
rlen++;
|
115
|
+
if (end.slice(-1) === ']') {
|
116
|
+
if (imbalanced) {
|
117
|
+
end = end.slice(0, end.length - 1) + '\\]';
|
118
|
+
} else {
|
119
|
+
end = '[' + end;
|
120
|
+
}
|
121
|
+
}
|
122
|
+
result += end;
|
123
|
+
}
|
124
|
+
|
125
|
+
if (rlen > 1) {
|
126
|
+
result = result.split('][').join(']|[');
|
127
|
+
if (result.indexOf('|') !== -1 && !/\(\?/.test(result)) {
|
128
|
+
result = '(?:' + result + ')';
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
result = result.replace(/\[+=|=\]+/g, '\\b');
|
133
|
+
return result;
|
134
|
+
}
|
135
|
+
|
136
|
+
brackets.makeRe = function(pattern) {
|
137
|
+
try {
|
138
|
+
return new RegExp(brackets(pattern));
|
139
|
+
} catch (err) {}
|
140
|
+
};
|
141
|
+
|
142
|
+
brackets.isMatch = function(str, pattern) {
|
143
|
+
try {
|
144
|
+
return brackets.makeRe(pattern).test(str);
|
145
|
+
} catch (err) {
|
146
|
+
return false;
|
147
|
+
}
|
148
|
+
};
|
149
|
+
|
150
|
+
brackets.match = function(arr, pattern) {
|
151
|
+
var len = arr.length, i = 0;
|
152
|
+
var res = arr.slice();
|
153
|
+
|
154
|
+
var re = brackets.makeRe(pattern);
|
155
|
+
while (i < len) {
|
156
|
+
var ele = arr[i++];
|
157
|
+
if (!re.test(ele)) {
|
158
|
+
continue;
|
159
|
+
}
|
160
|
+
res.splice(i, 1);
|
161
|
+
}
|
162
|
+
return res;
|
163
|
+
};
|
@@ -0,0 +1,62 @@
|
|
1
|
+
{
|
2
|
+
"name": "expand-brackets",
|
3
|
+
"description": "Expand POSIX bracket expressions (character classes) in glob patterns.",
|
4
|
+
"version": "0.1.5",
|
5
|
+
"homepage": "https://github.com/jonschlinkert/expand-brackets",
|
6
|
+
"author": "Jon Schlinkert (https://github.com/jonschlinkert)",
|
7
|
+
"repository": "jonschlinkert/expand-brackets",
|
8
|
+
"bugs": {
|
9
|
+
"url": "https://github.com/jonschlinkert/expand-brackets/issues"
|
10
|
+
},
|
11
|
+
"license": "MIT",
|
12
|
+
"files": [
|
13
|
+
"index.js"
|
14
|
+
],
|
15
|
+
"main": "index.js",
|
16
|
+
"engines": {
|
17
|
+
"node": ">=0.10.0"
|
18
|
+
},
|
19
|
+
"scripts": {
|
20
|
+
"test": "mocha"
|
21
|
+
},
|
22
|
+
"dependencies": {
|
23
|
+
"is-posix-bracket": "^0.1.0"
|
24
|
+
},
|
25
|
+
"devDependencies": {
|
26
|
+
"gulp-format-md": "^0.1.7",
|
27
|
+
"mocha": "^2.2.5",
|
28
|
+
"should": "^7.0.2"
|
29
|
+
},
|
30
|
+
"keywords": [
|
31
|
+
"bracket",
|
32
|
+
"character class",
|
33
|
+
"expression",
|
34
|
+
"posix"
|
35
|
+
],
|
36
|
+
"verb": {
|
37
|
+
"run": true,
|
38
|
+
"toc": false,
|
39
|
+
"layout": "default",
|
40
|
+
"tasks": [
|
41
|
+
"readme"
|
42
|
+
],
|
43
|
+
"plugins": [
|
44
|
+
"gulp-format-md"
|
45
|
+
],
|
46
|
+
"related": {
|
47
|
+
"list": [
|
48
|
+
"extglob",
|
49
|
+
"is-extglob",
|
50
|
+
"is-glob",
|
51
|
+
"is-posix-bracket",
|
52
|
+
"micromatch"
|
53
|
+
]
|
54
|
+
},
|
55
|
+
"reflinks": [
|
56
|
+
"verb"
|
57
|
+
],
|
58
|
+
"lint": {
|
59
|
+
"reflinks": true
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
/*!
|
2
|
+
* expand-range <https://github.com/jonschlinkert/expand-range>
|
3
|
+
*
|
4
|
+
* Copyright (c) 2014-2015, Jon Schlinkert.
|
5
|
+
* Licensed under the MIT license.
|
6
|
+
*/
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
var fill = require('fill-range');
|
11
|
+
|
12
|
+
module.exports = function expandRange(str, options, fn) {
|
13
|
+
if (typeof str !== 'string') {
|
14
|
+
throw new TypeError('expand-range expects a string.');
|
15
|
+
}
|
16
|
+
|
17
|
+
if (typeof options === 'function') {
|
18
|
+
fn = options;
|
19
|
+
options = {};
|
20
|
+
}
|
21
|
+
|
22
|
+
if (typeof options === 'boolean') {
|
23
|
+
options = {};
|
24
|
+
options.makeRe = true;
|
25
|
+
}
|
26
|
+
|
27
|
+
// create arguments to pass to fill-range
|
28
|
+
var opts = options || {};
|
29
|
+
var args = str.split('..');
|
30
|
+
var len = args.length;
|
31
|
+
if (len > 3) { return str; }
|
32
|
+
|
33
|
+
// if only one argument, it can't expand so return it
|
34
|
+
if (len === 1) { return args; }
|
35
|
+
|
36
|
+
// if `true`, tell fill-range to regexify the string
|
37
|
+
if (typeof fn === 'boolean' && fn === true) {
|
38
|
+
opts.makeRe = true;
|
39
|
+
}
|
40
|
+
|
41
|
+
args.push(opts);
|
42
|
+
return fill.apply(null, args.concat(fn));
|
43
|
+
};
|
@@ -0,0 +1,73 @@
|
|
1
|
+
{
|
2
|
+
"name": "expand-range",
|
3
|
+
"description": "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.",
|
4
|
+
"version": "1.8.2",
|
5
|
+
"homepage": "https://github.com/jonschlinkert/expand-range",
|
6
|
+
"author": "Jon Schlinkert (https://github.com/jonschlinkert)",
|
7
|
+
"repository": "jonschlinkert/expand-range",
|
8
|
+
"bugs": {
|
9
|
+
"url": "https://github.com/jonschlinkert/expand-range/issues"
|
10
|
+
},
|
11
|
+
"license": "MIT",
|
12
|
+
"files": [
|
13
|
+
"index.js"
|
14
|
+
],
|
15
|
+
"main": "index.js",
|
16
|
+
"engines": {
|
17
|
+
"node": ">=0.10.0"
|
18
|
+
},
|
19
|
+
"scripts": {
|
20
|
+
"test": "mocha"
|
21
|
+
},
|
22
|
+
"dependencies": {
|
23
|
+
"fill-range": "^2.1.0"
|
24
|
+
},
|
25
|
+
"devDependencies": {
|
26
|
+
"benchmarked": "^0.2.4",
|
27
|
+
"brace-expansion": "^1.1.4",
|
28
|
+
"glob": "^7.0.3",
|
29
|
+
"gulp-format-md": "^0.1.9",
|
30
|
+
"minimatch": "^3.0.0",
|
31
|
+
"mocha": "^2.4.5"
|
32
|
+
},
|
33
|
+
"keywords": [
|
34
|
+
"alpha",
|
35
|
+
"alphabetical",
|
36
|
+
"bash",
|
37
|
+
"brace",
|
38
|
+
"expand",
|
39
|
+
"expansion",
|
40
|
+
"glob",
|
41
|
+
"match",
|
42
|
+
"matches",
|
43
|
+
"matching",
|
44
|
+
"number",
|
45
|
+
"numerical",
|
46
|
+
"range",
|
47
|
+
"ranges",
|
48
|
+
"sh"
|
49
|
+
],
|
50
|
+
"verb": {
|
51
|
+
"plugins": [
|
52
|
+
"gulp-format-md"
|
53
|
+
],
|
54
|
+
"reflinks": [
|
55
|
+
"verb"
|
56
|
+
],
|
57
|
+
"toc": false,
|
58
|
+
"layout": "default",
|
59
|
+
"lint": {
|
60
|
+
"reflinks": true
|
61
|
+
},
|
62
|
+
"tasks": [
|
63
|
+
"readme"
|
64
|
+
],
|
65
|
+
"related": {
|
66
|
+
"list": [
|
67
|
+
"micromatch",
|
68
|
+
"fill-range",
|
69
|
+
"braces"
|
70
|
+
]
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
@@ -0,0 +1,178 @@
|
|
1
|
+
/*!
|
2
|
+
* extglob <https://github.com/jonschlinkert/extglob>
|
3
|
+
*
|
4
|
+
* Copyright (c) 2015, Jon Schlinkert.
|
5
|
+
* Licensed under the MIT License.
|
6
|
+
*/
|
7
|
+
|
8
|
+
'use strict';
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Module dependencies
|
12
|
+
*/
|
13
|
+
|
14
|
+
var isExtglob = require('is-extglob');
|
15
|
+
var re, cache = {};
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Expose `extglob`
|
19
|
+
*/
|
20
|
+
|
21
|
+
module.exports = extglob;
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Convert the given extglob `string` to a regex-compatible
|
25
|
+
* string.
|
26
|
+
*
|
27
|
+
* ```js
|
28
|
+
* var extglob = require('extglob');
|
29
|
+
* extglob('!(a?(b))');
|
30
|
+
* //=> '(?!a(?:b)?)[^/]*?'
|
31
|
+
* ```
|
32
|
+
*
|
33
|
+
* @param {String} `str` The string to convert.
|
34
|
+
* @param {Object} `options`
|
35
|
+
* @option {Boolean} [options] `esc` If `false` special characters will not be escaped. Defaults to `true`.
|
36
|
+
* @option {Boolean} [options] `regex` If `true` a regular expression is returned instead of a string.
|
37
|
+
* @return {String}
|
38
|
+
* @api public
|
39
|
+
*/
|
40
|
+
|
41
|
+
|
42
|
+
function extglob(str, opts) {
|
43
|
+
opts = opts || {};
|
44
|
+
var o = {}, i = 0;
|
45
|
+
|
46
|
+
// fix common character reversals
|
47
|
+
// '*!(.js)' => '*.!(js)'
|
48
|
+
str = str.replace(/!\(([^\w*()])/g, '$1!(');
|
49
|
+
|
50
|
+
// support file extension negation
|
51
|
+
str = str.replace(/([*\/])\.!\([*]\)/g, function (m, ch) {
|
52
|
+
if (ch === '/') {
|
53
|
+
return escape('\\/[^.]+');
|
54
|
+
}
|
55
|
+
return escape('[^.]+');
|
56
|
+
});
|
57
|
+
|
58
|
+
// create a unique key for caching by
|
59
|
+
// combining the string and options
|
60
|
+
var key = str
|
61
|
+
+ String(!!opts.regex)
|
62
|
+
+ String(!!opts.contains)
|
63
|
+
+ String(!!opts.escape);
|
64
|
+
|
65
|
+
if (cache.hasOwnProperty(key)) {
|
66
|
+
return cache[key];
|
67
|
+
}
|
68
|
+
|
69
|
+
if (!(re instanceof RegExp)) {
|
70
|
+
re = regex();
|
71
|
+
}
|
72
|
+
|
73
|
+
opts.negate = false;
|
74
|
+
var m;
|
75
|
+
|
76
|
+
while (m = re.exec(str)) {
|
77
|
+
var prefix = m[1];
|
78
|
+
var inner = m[3];
|
79
|
+
if (prefix === '!') {
|
80
|
+
opts.negate = true;
|
81
|
+
}
|
82
|
+
|
83
|
+
var id = '__EXTGLOB_' + (i++) + '__';
|
84
|
+
// use the prefix of the _last_ (outtermost) pattern
|
85
|
+
o[id] = wrap(inner, prefix, opts.escape);
|
86
|
+
str = str.split(m[0]).join(id);
|
87
|
+
}
|
88
|
+
|
89
|
+
var keys = Object.keys(o);
|
90
|
+
var len = keys.length;
|
91
|
+
|
92
|
+
// we have to loop again to allow us to convert
|
93
|
+
// patterns in reverse order (starting with the
|
94
|
+
// innermost/last pattern first)
|
95
|
+
while (len--) {
|
96
|
+
var prop = keys[len];
|
97
|
+
str = str.split(prop).join(o[prop]);
|
98
|
+
}
|
99
|
+
|
100
|
+
var result = opts.regex
|
101
|
+
? toRegex(str, opts.contains, opts.negate)
|
102
|
+
: str;
|
103
|
+
|
104
|
+
result = result.split('.').join('\\.');
|
105
|
+
|
106
|
+
// cache the result and return it
|
107
|
+
return (cache[key] = result);
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* Convert `string` to a regex string.
|
112
|
+
*
|
113
|
+
* @param {String} `str`
|
114
|
+
* @param {String} `prefix` Character that determines how to wrap the string.
|
115
|
+
* @param {Boolean} `esc` If `false` special characters will not be escaped. Defaults to `true`.
|
116
|
+
* @return {String}
|
117
|
+
*/
|
118
|
+
|
119
|
+
function wrap(inner, prefix, esc) {
|
120
|
+
if (esc) inner = escape(inner);
|
121
|
+
|
122
|
+
switch (prefix) {
|
123
|
+
case '!':
|
124
|
+
return '(?!' + inner + ')[^/]' + (esc ? '%%%~' : '*?');
|
125
|
+
case '@':
|
126
|
+
return '(?:' + inner + ')';
|
127
|
+
case '+':
|
128
|
+
return '(?:' + inner + ')+';
|
129
|
+
case '*':
|
130
|
+
return '(?:' + inner + ')' + (esc ? '%%' : '*')
|
131
|
+
case '?':
|
132
|
+
return '(?:' + inner + '|)';
|
133
|
+
default:
|
134
|
+
return inner;
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
function escape(str) {
|
139
|
+
str = str.split('*').join('[^/]%%%~');
|
140
|
+
str = str.split('.').join('\\.');
|
141
|
+
return str;
|
142
|
+
}
|
143
|
+
|
144
|
+
/**
|
145
|
+
* extglob regex.
|
146
|
+
*/
|
147
|
+
|
148
|
+
function regex() {
|
149
|
+
return /(\\?[@?!+*$]\\?)(\(([^()]*?)\))/;
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* Negation regex
|
154
|
+
*/
|
155
|
+
|
156
|
+
function negate(str) {
|
157
|
+
return '(?!^' + str + ').*$';
|
158
|
+
}
|
159
|
+
|
160
|
+
/**
|
161
|
+
* Create the regex to do the matching. If
|
162
|
+
* the leading character in the `pattern` is `!`
|
163
|
+
* a negation regex is returned.
|
164
|
+
*
|
165
|
+
* @param {String} `pattern`
|
166
|
+
* @param {Boolean} `contains` Allow loose matching.
|
167
|
+
* @param {Boolean} `isNegated` True if the pattern is a negation pattern.
|
168
|
+
*/
|
169
|
+
|
170
|
+
function toRegex(pattern, contains, isNegated) {
|
171
|
+
var prefix = contains ? '^' : '';
|
172
|
+
var after = contains ? '$' : '';
|
173
|
+
pattern = ('(?:' + pattern + ')' + after);
|
174
|
+
if (isNegated) {
|
175
|
+
pattern = prefix + negate(pattern);
|
176
|
+
}
|
177
|
+
return new RegExp(prefix + pattern);
|
178
|
+
}
|