knip-it-test
Version:
A CLI tool to identify redundant code with knip
78 lines (71 loc) • 1.9 kB
JavaScript
import inquirer from "inquirer";
import { execa } from "execa";
import fs from "fs/promises";
async function main() {
const defaults = {
fileExtensions: [
"src/**/*.tsx",
"src/**/*.ts",
"src/**/*.jsx",
"src/**/*.js",
],
entry: "['src/index.tsx']",
packageManager: "yarn",
};
try {
const answers = await inquirer.prompt([
{
type: "input",
name: "fileExtensions",
message: `List of file extensions used: `,
default: defaults.fileExtensions,
},
{
type: "input",
name: "entry",
message: `Specify the entry:`,
default: defaults.entry,
},
{
type: "input",
name: "packageManager",
message: `Package manager of choice (npm/yarn):`,
default: defaults.packageManager,
},
]);
console.log("Installing knip");
try {
switch (answers.packageManager) {
case "npm":
await execa("npm", ["i", "knip"]);
break;
case "yarn":
default:
await execa("yarn", ["add", "knip"]);
}
} catch (e) {
console.log("package manager switch failed", e);
}
await fs.writeFile(
"knip.js",
`const config = {entry:${answers.entry}, project:${answers.fileExtensions}}; export default config;`
);
console.log("Running the library with the configuration...");
await execa(answers.packageManager, ["knip"]);
console.log("Uninstalling knip...");
switch (answers.packageManager) {
case "npm":
await execa("npm", ["uninstall", "knip"]);
break;
case "yarn":
await execa("yarn", ["remove", "knip"]);
default:
}
await fs.rm("knip.js");
console.log("CLI program finished successfully.");
} catch (error) {
console.error("Error:", error);
}
}
main();