1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 'use strict';
- var minimatch = require('minimatch');
- var path = require('path');
- function IgnoreMatcher(str) {
- var negated = [];
- this.negated = negated;
- var rooted = [];
- this.rooted = rooted;
- this.matchers = str.split(/\r?\n|\r/).map(function (line) {
- var negatedLine = line[0] === '!';
- var commentLine = line[0] === '#';
- var rootedLine = line[0] === '/';
- if (negatedLine || commentLine || rootedLine) {
- line = line.slice(1);
- }
- var emptyLine = line === '';
- if (emptyLine) {
- return null;
- }
- var isShellGlob = line.indexOf('/') >= 0;
- negated[negated.length] = negatedLine;
- rooted[rooted.length] = rootedLine || isShellGlob;
- return minimatch.makeRe(line, {
- comment: commentLine,
- empty: emptyLine,
- matchBase: !rootedLine,
- negated: true // negated
- });
- }).filter(Boolean);
- return this;
- }
- IgnoreMatcher.prototype.delimiter = path.sep;
- IgnoreMatcher.prototype.shouldIgnore = function (filename) {
- var isMatching = false;
- for (var i = 0; i < this.matchers.length; i++) {
- var matcher = this.matchers[i];
- if (this.rooted[i]) {
- if (matcher.test(filename)) {
- isMatching = !this.negated[i];
- }
- } else if (filename.split(this.delimiter).some(function (part) {
- return matcher.test(part);
- })) {
- isMatching = !this.negated[i];
- }
- }
- return isMatching;
- };
- exports.createMatcher = function (ignoreFileStr) {
- return new IgnoreMatcher(ignoreFileStr);
- };
|