gherkin-lint-ts
Version:
Gherkin features linter written in Typescript
92 lines • 3.52 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getFeatureFiles = exports.defaultIgnoredFiles = exports.defaultIgnoreFileName = void 0;
const logger = __importStar(require("./logger"));
const _ = require("lodash");
const glob = require("glob");
const fs = require("fs");
const path = require("path");
exports.defaultIgnoreFileName = ".gherkin-lintignore";
exports.defaultIgnoredFiles = "node_modules/**"; // Ignore node_modules by default
function getFeatureFiles(args, ignoreArg) {
let files = [];
const patterns = args.length ? args : ["."];
patterns.forEach(pattern => {
// First we need to fix up the pattern so that it only matches .feature files
// and it's in the format that glob expects it to be
let fixedPattern;
if (pattern === ".") {
fixedPattern = "**/*.feature";
}
else if (pattern.match(/.*\/\*\*/)) {
fixedPattern = `${pattern}/**.feature`;
}
else if (pattern.match(/.*\.feature/)) {
fixedPattern = pattern;
}
else {
try {
if (fs.statSync(pattern).isDirectory()) {
fixedPattern = path.join(pattern, "**/*.feature");
}
}
catch (e) {
// Don't show the fs callstack, we will print a custom error message bellow instead
}
}
if (!fixedPattern) {
logger.boldError(`Invalid format of the feature file path/pattern: "${pattern}".\n
To run the linter please specify an existing feature file, directory or glob.`);
process.exit(1);
return; // This line will only be hit by tests that stub process.exit
}
const globOptions = {
ignore: getIgnorePatterns(ignoreArg),
nodir: true,
};
files = files.concat(glob.sync(fixedPattern, globOptions));
});
return _.uniq(files);
}
exports.getFeatureFiles = getFeatureFiles;
function getIgnorePatterns(ignoreArg) {
if (ignoreArg) {
return ignoreArg;
}
else if (fs.existsSync(exports.defaultIgnoreFileName)) {
// return an array where each element of the array is a line of the ignore file
return fs.readFileSync(exports.defaultIgnoreFileName)
.toString()
.split(/[\n|\r]/)
.filter(i => {
// remove empty strings
if (i !== "") {
return true;
}
return false;
});
}
else {
return exports.defaultIgnoredFiles;
}
}
//# sourceMappingURL=feature-finder.js.map