create-app-setup
Version:
A CLI tool to quickly set up frontend & backend projects with various frameworks.
88 lines (87 loc) • 3.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const eslintConfig = (props) => {
const { pkgJson, destinationPath, isJest = false, isPrettier = false, isTypescript = false, } = props;
// Path to ESLint config file
const eslintFilePath = path_1.default.join(destinationPath, ".eslintrc.json");
// Define base ESLint config
const eslintConfig = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: ["eslint:recommended"],
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
},
rules: {},
plugins: [],
overrides: [
{
files: ["*.ts", "*.tsx", "*.js", "*.jsx"],
excludedFiles: ["node_modules/", "dist/", "build/"],
},
],
};
// Apply TypeScript-specific rules
if (isTypescript) {
eslintConfig.extends.push("plugin:@typescript-eslint/recommended");
eslintConfig.parser = "@typescript-eslint/parser";
eslintConfig.plugins.push("@typescript-eslint");
}
// Apply Jest-specific rules
if (isJest) {
eslintConfig.env.jest = true;
eslintConfig.extends.push("plugin:jest/recommended");
eslintConfig.plugins.push("jest");
}
// Apply Prettier-specific rules
if (isPrettier) {
eslintConfig.extends.push("plugin:prettier/recommended");
eslintConfig.plugins.push("prettier");
eslintConfig.rules["prettier/prettier"] = ["error"];
}
// Write the ESLint config file
fs_1.default.writeFileSync(eslintFilePath, JSON.stringify(eslintConfig, null, 2));
// console.log(`✅ ESLint config created at: ${eslintFilePath}`);
// Read and update package.json
const packageJsonPath = path_1.default.resolve(pkgJson);
const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, "utf-8"));
// Ensure ESLint dependencies exist
const eslintDependencies = {
eslint: "^8.0.0",
};
if (isTypescript) {
eslintDependencies["@typescript-eslint/parser"] = "^5.0.0";
eslintDependencies["@typescript-eslint/eslint-plugin"] = "^5.0.0";
}
if (isJest) {
eslintDependencies["eslint-plugin-jest"] = "^27.0.0";
}
if (isPrettier) {
eslintDependencies["eslint-plugin-prettier"] = "^5.0.0";
eslintDependencies["eslint-config-prettier"] = "^9.0.0";
eslintDependencies["prettier"] = "^3.0.0";
}
// Merge and update package.json dependencies
packageJson.devDependencies = {
...packageJson.devDependencies,
...eslintDependencies,
};
// Ensure lint script is added
packageJson.scripts = {
...packageJson.scripts,
lint: "eslint . --ext .js,.jsx,.ts,.tsx",
};
// Write back the updated package.json
fs_1.default.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
// console.log("🚀 ESLint setup completed! Run `npm run lint` to check.");
};
exports.default = eslintConfig;