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
92
93
94
95
96
97
98
99
100
101
|
import chalk from "chalk";
import inquirer from "inquirer";
import loadTransformers from "../../utils/loadTransformers";
import checkGitStatus from "../../utils/checkGitStatus";
import directoryInfo from "../../utils/directoryInfo";
import type {
TransformCommandOptions,
TransformCommandArgument,
} from "./types";
import { Runner } from "../../runner";
export default async function transform(
transform: TransformCommandArgument,
directory: TransformCommandArgument,
options: TransformCommandOptions
) {
const transforms = loadTransformers();
if (options.list) {
console.log(
transforms
.map((transform) => `- ${chalk.cyan(transform.value)}`)
.join("\n")
);
return process.exit(0);
}
// check git status
if (!options.dry) {
checkGitStatus({ directory, force: options.force });
}
const answers = await inquirer.prompt<{
directoryInput?: string;
transformerInput?: string;
}>([
{
type: "input",
name: "directoryInput",
message: "Where is the root of the repo where the transform should run?",
when: !directory,
default: ".",
validate: (directory: string) => {
const { exists, absolute } = directoryInfo({ directory });
if (exists) {
return true;
} else {
return `Directory ${chalk.dim(`(${absolute})`)} does not exist`;
}
},
filter: (directory: string) => directory.trim(),
},
{
type: "list",
name: "transformerInput",
message: "Which transform would you like to apply?",
when: !transform,
pageSize: transforms.length,
choices: transforms,
},
]);
const {
directoryInput: selectedDirectory = directory as string,
transformerInput: selectedTransformer = transform as string,
} = answers;
const { exists, absolute: root } = directoryInfo({
directory: selectedDirectory,
});
if (!exists) {
console.error(`Directory ${chalk.dim(`(${root})`)} does not exist`);
return process.exit(1);
}
const transformKeys = transforms.map((transform) => transform.value);
const transformData = transforms.find(
(transform) => transform.value === selectedTransformer
);
// validate transforms
if (!transformData) {
console.error(
`Invalid transform choice ${chalk.dim(`(${transform})`)}, pick one of:`
);
console.error(transformKeys.map((key) => `- ${key}`).join("\n"));
return process.exit(1);
}
// run the transform
const result = transformData.transformer({
root,
options,
});
if (result.fatalError) {
// Runner already logs this, so we can just exit
return process.exit(1);
}
Runner.logResults(result);
}
|