CheckerCli
Запускает внешнюю CLI-команду в рамках единого пайплайна генератора с cwd: rootDir. Команда выполняется синхронно через spawnSync. stdout успешного выполнения не попадает в логи, а при неуспешном попадает вывод команды, exit code, сигнал и другая доступная информация.
ts | Имя чекера для логов |
ts | Функция возвращает массив, где первый элемент — команда, остальные — её аргументы. Возврат
|
Пример: Vitest запускает связанные тесты
При полной генерации и после удаления файлов запускаются все тесты, а при инкрементальной - только связанные с изменёнными файлами
new CheckerCli({
name: 'vitest',
getCommand({ changedFiles, deletedFiles, isFullGeneration }) {
const vitest = path.resolve(process.cwd(), 'node_modules/.bin/vitest');
if (isFullGeneration || deletedFiles.length > 0) return [vitest, 'run'];
if (changedFiles.length === 0) return false;
return [vitest, 'related', '--run', ...changedFiles.map(({ relativePath }) => relativePath)];
},
}),
Запустить Sandbox
export const sum = (a: number, b: number) => a + b;
export const double = (value: number) => value * 2;
export const obsolete = true;
import { expect, it } from 'vitest';
import { sum } from '../src/sum';
it('adds two numbers', () => {
expect(sum(2, 3)).toBe(5);
});
import { expect, it } from 'vitest';
import { double } from '../src/double';
it('doubles a number', () => {
expect(double(3)).toBe(6);
});
[ARFA-GEN] finished in 0ms
Пример: Biome проверяет только изменённые файлы
Если измененных файлов не было (например, были только удаленные), проверка пропускается
new CheckerCli({
name: 'biome',
getCommand({ changedFiles }) {
if (changedFiles.length === 0) return false;
return [
path.resolve(process.cwd(), 'node_modules/.bin/biome'),
'check',
'--no-errors-on-unmatched',
...changedFiles.map(({ relativePath }) => relativePath),
];
},
}),
Запустить Sandbox
{
"formatter": {
"indentStyle": "space",
"indentWidth": 2
},
"javascript": {
"formatter": {
"quoteStyle": "single"
}
}
}
export const answer = 42;
[ARFA-GEN] finished in 0ms
Пример: проверка типов через tsc
В данном случае tsc запускается для всего проекта, даже если были только удаленные файлы
new CheckerCli({
name: 'tsc',
getCommand: () => [path.resolve(process.cwd(), 'node_modules/.bin/tsc')],
}),
Запустить Sandbox
{
"include": ["src"],
"compilerOptions": {
"target": "ES2023",
"module": "ESNext",
"moduleResolution": "bundler",
"noEmit": true,
"strict": true,
"types": []
}
}
export const count: number = 1;
[ARFA-GEN] finished in 0ms