-
Notifications
You must be signed in to change notification settings - Fork 99
/
Copy pathconvertLintConfig.ts
57 lines (51 loc) · 2.52 KB
/
convertLintConfig.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { FileSystem } from "../../adapters/fileSystem";
import { SansDependencies } from "../../binding";
import { AllOriginalConfigurations } from "../../input/findOriginalConfigurations";
import { ResultStatus, ResultWithStatus, TSLintToESLintSettings } from "../../types";
import { createESLintConfiguration } from "./createESLintConfiguration";
import { formatOutput } from "./formatting/formatOutput";
import { joinConfigConversionResults } from "./joinConfigConversionResults";
import { logMissingPackages } from "./reporting/packages/logMissingPackages";
import { reportConfigConversionResults } from "./reporting/reportConfigConversionResults";
export type ConvertLintConfigDependencies = {
createESLintConfiguration: SansDependencies<typeof createESLintConfiguration>;
fileSystem: Pick<FileSystem, "writeFile">;
logMissingPackages: SansDependencies<typeof logMissingPackages>;
reportConfigConversionResults: SansDependencies<typeof reportConfigConversionResults>;
};
/**
* Root-level driver to convert a TSLint configuration to ESLint.
* @see `/docs/Architecture/Linting.md` for documentation.
*/
export const convertLintConfig = async (
dependencies: ConvertLintConfigDependencies,
settings: TSLintToESLintSettings,
originalConfigurations: AllOriginalConfigurations,
ruleEquivalents: Map<string, string[]>,
): Promise<ResultWithStatus> => {
// 1. Deduplicated ESLint rules and metadata are generated from raw TSLint rules.
const summarizedConfiguration = await dependencies.createESLintConfiguration(
originalConfigurations,
settings.prettier,
ruleEquivalents,
);
// 2. Those deduplicated rules and metadata are written to the output configuration file.
const output = joinConfigConversionResults(summarizedConfiguration, originalConfigurations);
// 3. That ESLint configuration output is written to the output configuration file.
const fileWriteError = await dependencies.fileSystem.writeFile(
settings.config,
formatOutput(settings.config, output),
);
if (fileWriteError !== undefined) {
return {
errors: [fileWriteError],
status: ResultStatus.Failed,
};
}
// 5. A summary of conversion results is printed, along with any now-missing packages.
await dependencies.reportConfigConversionResults(settings.config, summarizedConfiguration);
await dependencies.logMissingPackages(summarizedConfiguration, originalConfigurations.packages);
return {
status: ResultStatus.Succeeded,
};
};