create-w3-app
Version:
Create ethereum dApps with w3 stack
67 lines (56 loc) • 2.03 kB
text/typescript
import path from "path";
import fs from "fs-extra";
import { PKG_ROOT } from "~/constants.js";
import { type Installer } from "~/installers/index.js";
import { addPackageDependency } from "~/utils/addPackageDependency.js";
import { addPackageScript } from "~/utils/addPackageScript.js";
import { getUserPkgManager } from "~/utils/getUserPkgManager.js";
import { type AvailableDependencies } from "./dependencyVersionMap.js";
// Also installs prettier
export const dynamicEslintInstaller: Installer = ({ projectDir, packages }) => {
const devPackages: AvailableDependencies[] = [
"prettier",
"eslint",
"eslint-config-next",
"typescript-eslint",
"@eslint/eslintrc",
];
if (packages?.tailwind.inUse) {
devPackages.push("prettier-plugin-tailwindcss");
}
addPackageDependency({
projectDir,
dependencies: devPackages,
devMode: true,
});
const extrasDir = path.join(PKG_ROOT, "template/extras");
// Prettier
let prettierSrc: string;
if (packages?.tailwind.inUse) {
prettierSrc = path.join(extrasDir, "config/_tailwind.prettier.config.js");
} else {
prettierSrc = path.join(extrasDir, "config/_prettier.config.js");
}
const prettierDest = path.join(projectDir, "prettier.config.js");
fs.copySync(prettierSrc, prettierDest);
// pnpm
const pkgManager = getUserPkgManager();
if (pkgManager === "pnpm") {
const pnpmSrc = path.join(extrasDir, "pnpm/_npmrc");
fs.copySync(pnpmSrc, path.join(projectDir, ".npmrc"));
}
addPackageScript({
projectDir,
scripts: {
lint: "next lint",
"lint:fix": "next lint --fix",
check: "next lint && tsc --noEmit",
"format:write": 'prettier --write "**/*.{ts,tsx,js,jsx,mdx}" --cache',
"format:check": 'prettier --check "**/*.{ts,tsx,js,jsx,mdx}" --cache',
},
});
// eslint
const eslintConfigSrc = path.join(extrasDir, "config/_eslint.base.js");
const eslintConfigDest = path.join(projectDir, "eslint.config.js");
fs.copySync(eslintConfigSrc, eslintConfigDest);
};