UNPKG

vibe-check-formatter

Version:

A code formatter that checks the vibe of your code

106 lines (92 loc) 2.69 kB
#!/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."); })();