-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathfillOutRawOptions.ts
91 lines (86 loc) · 2.87 KB
/
fillOutRawOptions.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import { ProcessOutput } from "../output/types.js";
import { collectOptionals } from "../shared/arrays.js";
import { ReactPropTypesHint, ReactPropTypesOptionality } from "./enums.js";
import { ParsedCompilerOptions } from "./parseRawCompilerOptions.js";
import { collectAddedMutators } from "./parsing/collectAddedMutators.js";
import { collectFileOptions } from "./parsing/collectFileOptions.js";
import { collectNoImplicitAny } from "./parsing/collectNoImplicitAny.js";
import { collectNoImplicitThis } from "./parsing/collectNoImplicitThis.js";
import { collectPackageOptions } from "./parsing/collectPackageOptions.js";
import { collectStrictNullChecks } from "./parsing/collectStrictNullChecks.js";
import { PendingTypeStatOptions, RawTypeStatOptions } from "./types.js";
export interface OptionsFromRawOptionsSettings {
compilerOptions: Readonly<ParsedCompilerOptions>;
cwd: string;
output: ProcessOutput;
projectPath: string;
rawOptions: RawTypeStatOptions;
}
/**
* Combines Node and CLi argument options with project and file metadata into pending TypeStat options.
* @returns Parsed TypeStat options, or a string for an error complaint.
*/
export const fillOutRawOptions = ({
compilerOptions,
cwd,
output,
projectPath,
rawOptions,
}: OptionsFromRawOptionsSettings): PendingTypeStatOptions => {
const rawOptionTypes = rawOptions.types ?? {};
const noImplicitAny = collectNoImplicitAny(compilerOptions, rawOptions);
const noImplicitThis = collectNoImplicitThis(compilerOptions, rawOptions);
const { compilerStrictNullChecks, typeStrictNullChecks } =
collectStrictNullChecks(compilerOptions, rawOptionTypes);
const packageOptions = collectPackageOptions(cwd, rawOptions);
const shell: (readonly string[])[] = [];
if (rawOptions.postProcess?.shell !== undefined) {
shell.push(...rawOptions.postProcess.shell);
}
return {
cleanups: {
suppressTypeErrors: false,
...rawOptions.cleanups,
},
compilerOptions: {
...compilerOptions,
noImplicitAny,
noImplicitThis,
strictNullChecks: compilerStrictNullChecks,
},
files: collectFileOptions(rawOptions),
filters: collectOptionals(rawOptions.filters),
fixes: {
importExtensions: false,
incompleteTypes: false,
missingProperties: false,
noImplicitAny: false,
noImplicitThis: false,
noInferableTypes: false,
strictNonNullAssertions: false,
...rawOptions.fixes,
},
hints: {
react: {
propTypes:
rawOptions.hints?.react?.propTypes ?? ReactPropTypesHint.WhenRequired,
propTypesOptionality:
rawOptions.hints?.react?.propTypesOptionality ??
ReactPropTypesOptionality.AsWritten,
},
},
include: rawOptions.include ?? compilerOptions.include,
mutators: collectAddedMutators(
rawOptions,
packageOptions.directory,
output,
),
output,
package: packageOptions,
postProcess: { shell },
projectPath,
types: {
strictNullChecks: typeStrictNullChecks,
},
};
};