@intlayer/chokidar
Version:
Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.
62 lines (60 loc) • 2.04 kB
JavaScript
import { dirname, extname } from "node:path";
import { getAppLogger } from "@intlayer/config/logger";
//#region src/loadDictionaries/logTypeScriptErrors.ts
const logTypeScriptErrors = async (filePaths, configuration) => {
const appLogger = getAppLogger(configuration);
const filesToCheck = filePaths.filter((path) => {
const ext = extname(path);
return [
".ts",
".tsx",
".js",
".jsx",
".cjs",
".mjs",
".json"
].includes(ext);
});
if (filesToCheck.length === 0) return;
let ts;
try {
ts = (await import("typescript")).default || await import("typescript");
} catch {
return;
}
const configFileName = ts.findConfigFile(configuration.system?.baseDir ?? process.cwd(), ts.sys.fileExists, "tsconfig.json");
let compilerOptions = {
noEmit: true,
allowJs: true,
resolveJsonModule: true
};
if (configFileName) {
const configFileText = ts.sys.readFile(configFileName);
if (configFileText) {
const configJson = ts.parseConfigFileTextToJson(configFileName, configFileText);
if (!configJson.error) {
const { incremental, tsBuildInfoFile, ...restOptions } = ts.parseJsonConfigFileContent(configJson.config, ts.sys, dirname(configFileName)).options;
compilerOptions = {
...compilerOptions,
...restOptions,
noEmit: true
};
}
}
}
const program = ts.createProgram(filesToCheck, compilerOptions);
filesToCheck.forEach((filePath) => {
const sourceFile = program.getSourceFile(filePath);
if (!sourceFile) return;
ts.getPreEmitDiagnostics(program, sourceFile).forEach((diagnostic) => {
const message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
if (diagnostic.file && diagnostic.start !== void 0) {
const { line, character } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
appLogger(`TS Error in ${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`, { level: "warn" });
}
});
});
};
//#endregion
export { logTypeScriptErrors };
//# sourceMappingURL=logTypeScriptErrors.mjs.map