-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathindex.ts
57 lines (54 loc) · 1.56 KB
/
index.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 {writeFileSync} from 'fs';
import {basename} from 'path';
import {parseArgs} from './parseArgs';
import parse from './parse';
import {
printSingleTypeValidator,
printTypeCollectionValidator,
} from './printValidator';
import prettierFile from './prettierFile';
import loadTsConfig from './loadTsConfig';
import normalizeSchema from './normalizeSchema';
export {
parse,
parseArgs,
printSingleTypeValidator,
printTypeCollectionValidator,
};
export default function run(args?: string[]) {
const {files, options} = parseArgs(args);
const tsConfig = loadTsConfig();
const parsed = parse(
files.map(f => f.fileName),
tsConfig,
options.schema,
);
files.forEach(({fileName, typeName}) => {
const outputFileName = fileName.replace(/\.tsx?$/, '.validator.ts');
let validator: string;
if (typeName) {
const schema = parsed.getType(typeName);
validator = printSingleTypeValidator(
typeName,
options.useNamedExport,
normalizeSchema(schema),
`./${basename(fileName, /\.ts$/.test(fileName) ? '.ts' : '.tsx')}`,
options.customKeywordFnName,
options.customKeywordPath,
tsConfig,
options.ajv,
);
} else {
const {symbols, schema} = parsed.getAllTypes();
validator = printTypeCollectionValidator(
symbols,
normalizeSchema(schema),
`./${basename(fileName, /\.ts$/.test(fileName) ? '.ts' : '.tsx')}`,
tsConfig,
options.ajv,
);
}
writeFileSync(outputFileName, validator);
prettierFile(outputFileName);
});
}