ts-simple-ast
Version:
TypeScript compiler wrapper for static analysis and code manipulation.
64 lines (63 loc) • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var tsInternal = require("../../typescript/tsInternal");
var utils_1 = require("../../utils");
function readDirectory(fileSystemWrapper, useCaseSensitiveFileNames, rootDir, extensions, excludes, includes, depth) {
var currentDir = fileSystemWrapper.getCurrentDirectory();
var directories = [];
// start: code from compiler api
var regexFlag = useCaseSensitiveFileNames ? "" : "i";
var patterns = tsInternal.getFileMatcherPatterns(rootDir, excludes || [], includes, useCaseSensitiveFileNames, currentDir);
var includeDirectoryRegex = patterns.includeDirectoryPattern && new RegExp(patterns.includeDirectoryPattern, regexFlag);
var excludeRegex = patterns.excludePattern && new RegExp(patterns.excludePattern, regexFlag);
// end
return {
files: tsInternal.matchFiles(rootDir, extensions, excludes || [], includes, useCaseSensitiveFileNames, currentDir, undefined, function (path) {
var includeDir = dirPathMatches(path);
path = fileSystemWrapper.getStandardizedAbsolutePath(path);
if (includeDir)
directories.push(path);
return getFileSystemEntries(path, fileSystemWrapper);
}),
directories: directories
};
function dirPathMatches(absoluteName) {
// needed for the regex to match
if (absoluteName[absoluteName.length - 1] !== "/")
absoluteName += "/";
// condition is from compiler api
return (!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName))
&& (!excludeRegex || !excludeRegex.test(absoluteName));
}
}
exports.readDirectory = readDirectory;
function getFileSystemEntries(path, fileSystemWrapper) {
var e_1, _a;
var files = [];
var directories = [];
try {
var entries = fileSystemWrapper.readDirSync(path);
try {
for (var entries_1 = tslib_1.__values(entries), entries_1_1 = entries_1.next(); !entries_1_1.done; entries_1_1 = entries_1.next()) {
var entry = entries_1_1.value;
if (fileSystemWrapper.fileExistsSync(entry))
files.push(entry);
else
directories.push(entry);
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (entries_1_1 && !entries_1_1.done && (_a = entries_1.return)) _a.call(entries_1);
}
finally { if (e_1) throw e_1.error; }
}
}
catch (err) {
if (!utils_1.FileUtils.isNotExistsError(err))
throw err;
}
return { files: files, directories: directories };
}