ts-inquisition
Version:
expect all type errors, except spanish inquisition. Nobody expects spanish inqusition.
94 lines • 9.98 kB
JavaScript
import json5 from 'json5';
import globby from 'globby';
import _, { uniq } from 'lodash';
import os from 'os';
// @ts-expect-error
import unpad from 'unpad';
import path from 'path';
import ts from 'typescript';
import { readFileSync, writeFileSync } from 'fs';
const tsJsonPath = path.join(process.cwd(), 'tsconfig.json');
console.log('path', tsJsonPath);
const tsconfig = json5.parse(readFileSync(tsJsonPath, 'utf8'));
const compilerOptions = _.omit(tsconfig.compilerOptions, ['moduleResolution']);
compilerOptions.noEmit = true;
compilerOptions.lib = ['lib.dom.d.ts', `${process.cwd()}/types/custom.d.ts`];
function nthIndex(str, pat, n) {
const L = str.length;
let i = -1;
while (n-- && i++ < L) {
i = str.indexOf(pat, i);
if (i < 0)
break;
}
return i;
}
const insertAt = (str, sub, pos) => `${str.slice(0, pos)}${sub}${str.slice(pos)}`;
export async function runGlobAndModifyTsFiles(folder, breadcrumbDate = true) {
const globPath = path.join(process.cwd(), `${folder}/*.{ts,tsx}`);
console.log('runGlobAndModifyTsFiles -> globPath', globPath);
const files = await globby([globPath]);
files && addExpectErrors(files, compilerOptions, breadcrumbDate);
}
function addExpectErrors(fileNames, options, breadcrumbDate) {
const program = ts.createProgram(fileNames, options);
const allDiagnostics = ts.getPreEmitDiagnostics(program);
const errorLinesByFiles = {};
allDiagnostics.forEach((diagnostic) => {
if (diagnostic.file) {
const { fileName } = diagnostic.file;
if (fileNames.indexOf(fileName) < 0) {
return;
}
if (!errorLinesByFiles[fileName]) {
errorLinesByFiles[fileName] = [];
}
const { line } = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
if ([2724, 2307].includes(diagnostic.code)) {
// bad import, let's keep those
return;
}
errorLinesByFiles[fileName].push(line);
}
else {
console.log(`${ts.flattenDiagnosticMessageText(diagnostic.messageText, '\n')}`);
}
});
const breadcrumb = breadcrumbDate
? ' ' + new Date().toLocaleString().split(',')[0]
: '';
Object.entries(errorLinesByFiles).forEach(([file, badLines]) => {
let fileContent = readFileSync(file, 'utf8');
const badLinesDeduped = uniq(badLines);
let lineShift = 0;
badLinesDeduped.forEach((line) => {
// console.log(`line ${line + 1}`);
const indexOfTheLine = nthIndex(fileContent, os.EOL, line + lineShift);
const currentLine = fileContent.substring(indexOfTheLine, nthIndex(fileContent, os.EOL, line + lineShift + 1));
const unpaddedCurrentLine = unpad(currentLine);
if (file.endsWith('tsx')) {
const prevChar = fileContent[indexOfTheLine - 1];
// console.log('addExpectErrors -> prevChar', prevChar);
// console.log(
// 'addExpectErrors -> unpaddedCurrentLine',
// unpaddedCurrentLine
// );
if (['>', '}'].includes(prevChar) &&
['<', '{'].includes(unpaddedCurrentLine[0])) {
// this is JSX formatted with prettier
fileContent = insertAt(fileContent, `${os.EOL}${` {/* @ts-expect-error ${breadcrumb}*/}`.padStart(currentLine.length - unpaddedCurrentLine.length)}`, indexOfTheLine);
}
else {
fileContent = insertAt(fileContent, `${os.EOL}${` // @ts-expect-error${breadcrumb}`.padStart(currentLine.length - unpaddedCurrentLine.length)}`, indexOfTheLine);
}
}
else {
fileContent = insertAt(fileContent, `${os.EOL}${` // @ts-expect-error${breadcrumb}`.padStart(currentLine.length - unpaddedCurrentLine.length)}`, indexOfTheLine);
}
lineShift += 1;
});
writeFileSync(file, fileContent, 'utf8');
console.log(`${badLinesDeduped.length} error/s expected in ${file}`);
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHMtaW5xdWlzaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHMtaW5xdWlzaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFBO0FBRXpCLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQTtBQUMzQixPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNoQyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUE7QUFDbkIsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUE7QUFDdkIsT0FBTyxFQUF1QixNQUFNLFlBQVksQ0FBQTtBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQTtBQUNoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQTtBQUU1RCxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUMvQixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUU5RCxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUE7QUFDOUUsZUFBZSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7QUFDN0IsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDLGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtBQUU1RSxTQUFTLFFBQVEsQ0FBQyxHQUFXLEVBQUUsR0FBVyxFQUFFLENBQVM7SUFDbkQsTUFBTSxD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