UNPKG

ts-inquisition

Version:

expect all type errors, except spanish inquisition. Nobody expects spanish inqusition.

94 lines 9.98 kB
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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