in node/task.ts [1055:1135]
export function legacyFindFiles(
rootDirectory: string,
pattern: string,
includeFiles?: boolean,
includeDirectories?: boolean): string[] {
if (!pattern) {
throw new Error('pattern parameter cannot be empty');
}
debug(`legacyFindFiles rootDirectory: '${rootDirectory}'`);
debug(`pattern: '${pattern}'`);
debug(`includeFiles: '${includeFiles}'`);
debug(`includeDirectories: '${includeDirectories}'`);
if (!includeFiles && !includeDirectories) {
includeFiles = true;
}
// organize the patterns into include patterns and exclude patterns
let includePatterns: string[] = [];
let excludePatterns: RegExp[] = [];
pattern = pattern.replace(/;;/g, '\0');
for (let pat of pattern.split(';')) {
if (!pat) {
continue;
}
pat = pat.replace(/\0/g, ';');
// determine whether include pattern and remove any include/exclude prefix.
// include patterns start with +: or anything other than -:
// exclude patterns start with -:
let isIncludePattern: boolean;
if (im._startsWith(pat, '+:')) {
pat = pat.substring(2);
isIncludePattern = true;
}
else if (im._startsWith(pat, '-:')) {
pat = pat.substring(2);
isIncludePattern = false;
}
else {
isIncludePattern = true;
}
// validate pattern does not end with a slash
if (im._endsWith(pat, '/') || (process.platform == 'win32' && im._endsWith(pat, '\\'))) {
throw new Error(loc('LIB_InvalidPattern', pat));
}
// root the pattern
if (rootDirectory && !path.isAbsolute(pat)) {
pat = path.join(rootDirectory, pat);
// remove trailing slash sometimes added by path.join() on Windows, e.g.
// path.join('\\\\hello', 'world') => '\\\\hello\\world\\'
// path.join('//hello', 'world') => '\\\\hello\\world\\'
if (im._endsWith(pat, '\\')) {
pat = pat.substring(0, pat.length - 1);
}
}
if (isIncludePattern) {
includePatterns.push(pat);
}
else {
excludePatterns.push(im._legacyFindFiles_convertPatternToRegExp(pat));
}
}
// find and apply patterns
let count = 0;
let result: string[] = _legacyFindFiles_getMatchingItems(includePatterns, excludePatterns, !!includeFiles, !!includeDirectories);
debug('all matches:');
for (let resultItem of result) {
debug(' ' + resultItem);
}
debug('total matched: ' + result.length);
return result;
}