increment-type-check
Version:
用于 TS 项目的增量检查工具,可以帮助你管理存量错误并专注于新代码的质量。
69 lines (59 loc) • 2.32 kB
text/typescript
import fs from "fs";
import path from "path";
import stripJsonComments from "strip-json-comments";
import { root, rootDir, tsCheckIgnorePath } from "./constants";
import type { ErrorFileRecord } from "./types";
const ignoreContent = fs.readFileSync(path.join(root, ".tsCheckIgnore"));
const ignorePaths = ignoreContent.toString("utf-8").split("\n");
const ignorePathSet = new Set(ignorePaths);
/**
* 获取ts校验的tsconfig
* @param options 一些可选选项
* @returns ts校验的tsconfig
*/
export const getTypeCheckTsConfig = (options?: { readArgs?: boolean }) => {
const args = process.argv.slice(2);
const configFilePath = path.join(root, "tsconfig.json");
const checkingConfigJsonStr = stripJsonComments(
fs.readFileSync(configFilePath).toString("utf-8")
);
const checkingTsConfig = JSON.parse(checkingConfigJsonStr);
// 更新临时的配置
checkingTsConfig.compilerOptions.noEmit = true;
// 对于js文件不进行校验加快校验速度,新增文件都统一使用TS文件
checkingTsConfig.compilerOptions.allowJs = false;
checkingTsConfig.compilerOptions.checkJs = false;
// 当有参数传递进来时则将参数指定进files中进行校验,并且将 include 置空
if (options?.readArgs && args.length) {
checkingTsConfig.include = [];
checkingTsConfig.files = args;
}
return checkingTsConfig;
};
/**
* 判断一个文件是否为ts校验需要跳过的文件
* @param filePath 文件路径
* @returns 是否为ts校验需要跳过的文件
*/
export const isTypeCheckIgnoreFile = (filePath: string) => {
const relativePath = filePath.startsWith(rootDir)
? filePath.substring(rootDir.length)
: filePath;
return ignorePathSet.has(relativePath);
};
export const clearTsCheckIgnoreFileContent = () => {
fs.writeFileSync(tsCheckIgnorePath, "", "utf-8");
};
export const updateTsCheckIgnoreFileContent = (
errorFilesRecords: ErrorFileRecord[]
) => {
const content = uniq(errorFilesRecords.map(({ filePath }) => filePath)).join(
"\n"
);
fs.writeFileSync(tsCheckIgnorePath, content);
};
export const uniq = <T>(array: ArrayLike<T> | null | undefined): T[] => {
if (!Array.isArray(array)) return [];
var result = [...new Set(array)];
return result;
};