alwaysai
Version:
The alwaysAI command-line interface (CLI)
34 lines (29 loc) • 1.06 kB
text/typescript
import ignore from 'ignore';
import { existsSync, readFileSync } from 'fs';
import { logger } from './logger';
import { AAI_IGNORE_FILENAME } from '../constants';
import { Spawner } from './spawner';
import { join } from 'path';
function createIgnoreObject(rules: string[]) {
return ignore().add(rules);
}
export function parseAaiIgnoreToArray(path?: string) {
const aaiIgnorePath = path ?? AAI_IGNORE_FILENAME;
if (!existsSync(aaiIgnorePath)) {
logger.info(`${aaiIgnorePath} not found.`);
return [];
}
return readFileSync(aaiIgnorePath, 'utf-8')
.split('\n')
.filter((line) => {
const trimmed = line.trim();
return trimmed && !trimmed.startsWith('#');
})
.map((line) => line.trim());
}
export async function getFilteredFileNames(source: Spawner, ignore: string[]) {
const allFileNames = await source.walk();
const aaiIgnoreRules = parseAaiIgnoreToArray();
const ignoreChecker = createIgnoreObject(aaiIgnoreRules.concat(ignore));
return allFileNames.filter((file) => !ignoreChecker.ignores(join(file)));
}