1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var path_1 = require("path");
|
4 | var globFunction = require("glob");
|
5 | var helpers_1 = require("./helpers");
|
6 | function isNegative(pattern) {
|
7 | return pattern[0] === '!';
|
8 | }
|
9 | function isString(pattern) {
|
10 | return typeof pattern === 'string';
|
11 | }
|
12 | function assertPatternsInput(patterns) {
|
13 | if (!patterns.every(isString)) {
|
14 | throw new Error('Each glob entry must be a string');
|
15 | }
|
16 | }
|
17 | function generateGlobTasks(patterns, opts) {
|
18 | patterns = [].concat(patterns);
|
19 | assertPatternsInput(patterns);
|
20 | var globTasks = [];
|
21 | opts = Object.assign({
|
22 | cache: Object.create(null),
|
23 | statCache: Object.create(null),
|
24 | realpathCache: Object.create(null),
|
25 | symlinks: Object.create(null),
|
26 | ignore: []
|
27 | }, opts);
|
28 | patterns.forEach(function (pattern, i) {
|
29 | if (isNegative(pattern)) {
|
30 | return;
|
31 | }
|
32 | var ignore = patterns.slice(i).filter(isNegative).map(function (pattern) {
|
33 | return pattern.slice(1);
|
34 | });
|
35 | var task = {
|
36 | pattern: pattern,
|
37 | opts: Object.assign({}, opts, {
|
38 | ignore: opts.ignore.concat(ignore).concat(exports.DEFAULT_IGNORE_ARRAY),
|
39 | nodir: true
|
40 | }),
|
41 | base: getBasePath(pattern)
|
42 | };
|
43 | globTasks.push(task);
|
44 | });
|
45 | return globTasks;
|
46 | }
|
47 | exports.generateGlobTasks = generateGlobTasks;
|
48 | function globWrapper(task) {
|
49 | return new Promise(function (resolve, reject) {
|
50 | globFunction(task.pattern, task.opts, function (err, files) {
|
51 | if (err) {
|
52 | return reject(err);
|
53 | }
|
54 | var globResults = files.map(function (file) {
|
55 | return {
|
56 | absolutePath: path_1.normalize(path_1.resolve(file)),
|
57 | base: path_1.normalize(path_1.resolve(getBasePath(task.pattern)))
|
58 | };
|
59 | });
|
60 | return resolve(globResults);
|
61 | });
|
62 | });
|
63 | }
|
64 | function globAll(globs) {
|
65 | return Promise.resolve().then(function () {
|
66 | var globTasks = generateGlobTasks(globs, {});
|
67 | var resultSet = [];
|
68 | var promises = [];
|
69 | for (var _i = 0, globTasks_1 = globTasks; _i < globTasks_1.length; _i++) {
|
70 | var globTask = globTasks_1[_i];
|
71 | var promise = globWrapper(globTask);
|
72 | promises.push(promise);
|
73 | promise.then(function (globResult) {
|
74 | resultSet = resultSet.concat(globResult);
|
75 | });
|
76 | }
|
77 | return Promise.all(promises).then(function () {
|
78 | return resultSet;
|
79 | });
|
80 | });
|
81 | }
|
82 | exports.globAll = globAll;
|
83 | function getBasePath(pattern) {
|
84 | var basePath;
|
85 | var sepRe = (process.platform === 'win32' ? /[\/\\]/ : /\/+/);
|
86 | var parent = globParent(pattern);
|
87 | basePath = toAbsoluteGlob(parent);
|
88 | if (!sepRe.test(basePath.charAt(basePath.length - 1))) {
|
89 | basePath += path_1.sep;
|
90 | }
|
91 | return basePath;
|
92 | }
|
93 | exports.getBasePath = getBasePath;
|
94 | function isNegatedGlob(pattern) {
|
95 | var glob = { negated: false, pattern: pattern, original: pattern };
|
96 | if (pattern.charAt(0) === '!' && pattern.charAt(1) !== '(') {
|
97 | glob.negated = true;
|
98 | glob.pattern = pattern.slice(1);
|
99 | }
|
100 | return glob;
|
101 | }
|
102 |
|
103 | function toAbsoluteGlob(pattern) {
|
104 | var cwd = helpers_1.toUnixPath(process.cwd());
|
105 |
|
106 | if (pattern.slice(0, 2) === './') {
|
107 | pattern = pattern.slice(2);
|
108 | }
|
109 |
|
110 | if (pattern.length === 1 && pattern === '.') {
|
111 | pattern = '';
|
112 | }
|
113 |
|
114 | var suffix = pattern.slice(-1);
|
115 |
|
116 | var ing = isNegatedGlob(pattern);
|
117 | pattern = ing.pattern;
|
118 | if (!path_1.isAbsolute(pattern) || pattern.slice(0, 1) === '\\') {
|
119 | pattern = path_1.join(cwd, pattern);
|
120 | }
|
121 |
|
122 | if (suffix === '/' && pattern.slice(-1) !== '/') {
|
123 | pattern += '/';
|
124 | }
|
125 |
|
126 | return ing.negated ? '!' + pattern : pattern;
|
127 | }
|
128 |
|
129 | function globParent(pattern) {
|
130 |
|
131 | if (/[\{\[].*[\/]*.*[\}\]]$/.test(pattern))
|
132 | pattern += '/';
|
133 |
|
134 | pattern += 'a';
|
135 |
|
136 | do {
|
137 | pattern = helpers_1.toUnixPath(path_1.dirname(pattern));
|
138 | } while (isGlob(pattern) || /(^|[^\\])([\{\[]|\([^\)]+$)/.test(pattern));
|
139 |
|
140 | return pattern.replace(/\\([\*\?\|\[\]\(\)\{\}])/g, '$1');
|
141 | }
|
142 |
|
143 | function isGlob(pattern) {
|
144 | if (pattern === '') {
|
145 | return false;
|
146 | }
|
147 | if (isExtglob(pattern))
|
148 | return true;
|
149 | var regex = /(\\).|([*?]|\[.*\]|\{.*\}|\(.*\|.*\)|^!)/;
|
150 | var match;
|
151 | while ((match = regex.exec(pattern))) {
|
152 | if (match[2])
|
153 | return true;
|
154 | pattern = pattern.slice(match.index + match[0].length);
|
155 | }
|
156 | return false;
|
157 | }
|
158 |
|
159 | function isExtglob(pattern) {
|
160 | if (pattern === '') {
|
161 | return false;
|
162 | }
|
163 | var match;
|
164 | while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(pattern))) {
|
165 | if (match[2])
|
166 | return true;
|
167 | pattern = pattern.slice(match.index + match[0].length);
|
168 | }
|
169 | return false;
|
170 | }
|
171 | exports.DEFAULT_IGNORE_ARRAY = ['**/*.DS_Store'];
|