vibe-check-formatter
Version:
A code formatter that checks the vibe of your code
106 lines (92 loc) • 2.69 kB
JavaScript
#!/usr/bin/env node
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");
const inquirer = require("inquirer");
// --- Constants ---
const eslintConfig = `module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
"eslint:recommended",
"plugin:react/recommended",
"plugin:@typescript-eslint/recommended",
"prettier",
],
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: "latest",
sourceType: "module",
},
plugins: ["react", "@typescript-eslint"],
rules: {
"react/react-in-jsx-scope": "off",
"no-console": "warn",
"@typescript-eslint/no-unused-vars": ["warn"],
},
};
`;
const prettierConfig = `{
"printWidth": 100,
"semi": true,
"singleQuote": true,
"trailingComma": "all"
}
`;
const scriptsToAdd = {
lint: "eslint .",
format: "prettier --write .",
};
// --- Helpers ---
function writeFileSafe(fileName, content) {
if (fs.existsSync(fileName)) {
console.log(`⚠️ ${fileName} already exists. Skipping.`);
return;
}
fs.writeFileSync(fileName, content);
console.log(`✅ Created ${fileName}`);
}
function addScriptsToPackageJSON() {
const pkgPath = path.resolve("package.json");
if (!fs.existsSync(pkgPath)) {
console.log("❌ package.json not found. Run npm init first.");
process.exit(1);
}
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
pkg.scripts = { ...pkg.scripts, ...scriptsToAdd };
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
console.log("✅ Updated package.json scripts");
}
function installDependencies() {
console.log("📦 Installing dependencies...");
execSync(
"npm install -D eslint prettier eslint-config-prettier eslint-plugin-react eslint-plugin-import @typescript-eslint/parser @typescript-eslint/eslint-plugin",
{ stdio: "inherit" }
);
console.log("✅ Dependencies installed");
}
// --- Main ---
(async () => {
console.log("✨ Running vibe-check-formatter init ✨\n");
const answers = await inquirer.prompt([
{
type: "confirm",
name: "installDeps",
message: "Install ESLint and Prettier dependencies?",
default: true,
},
]);
writeFileSafe(".eslintrc.js", eslintConfig);
writeFileSafe(".prettierrc", prettierConfig);
writeFileSafe(".eslintignore", "node_modules\ndist\nbuild\n");
writeFileSafe(".prettierignore", "node_modules\ndist\nbuild\n");
addScriptsToPackageJSON();
if (answers.installDeps) installDependencies();
console.log("\n🌈 Vibe check complete. Your code is now legally attractive.");
})();