@ts-dev-tools/core
Version:
TS dev tools Core
98 lines (97 loc) • 3.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.up = void 0;
const constants_1 = require("../../constants");
const GitService_1 = require("../../services/GitService");
const PackageJson_1 = require("../../services/PackageJson");
const PackageManagerService_1 = require("../../services/PackageManagerService");
const up = async (absoluteProjectDir) => {
const jest = {
preset: "ts-jest",
testEnvironment: "node",
testMatch: [
"**/__tests__/**/*.[jt]s?(x)",
"**/?(*.)+(spec|test)?(.*).+(ts|tsx|js)",
],
collectCoverageFrom: ["**/src/**/*.[jt]s?(x)"],
};
const eslintConfig = {
root: true,
parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint", "jest"],
extends: [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:jest/recommended",
"prettier",
],
env: {
es2021: true,
},
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: "module",
},
settings: {
jest: {
version: "detect",
},
},
};
const prettier = {
semi: true,
printWidth: 100,
trailingComma: "es5",
};
const commitlint = {
extends: ["@commitlint/config-conventional"],
};
const lintStaged = {
"*.{js,ts,tsx}": ["eslint --fix"],
};
const importSort = {
".js, .jsx, .ts, .tsx": {
style: "module",
parser: "typescript",
},
};
const packageManager = PackageManagerService_1.PackageManagerService.detectPackageManager(absoluteProjectDir);
const scripts = {
build: "tsc --noEmit",
format: "prettier --write '**/*.js'",
lint: 'eslint "src/**/*.{ts,tsx}"',
jest: "jest --detectOpenHandles --forceExit",
test: `${packageManager} run jest --maxWorkers=50%`,
"test:watch": `${packageManager} run jest --watch --maxWorkers=25%`,
"test:cov": `${packageManager} run test --coverage`,
"test:ci": `${packageManager} run test:cov --runInBand`,
prepare: `${constants_1.PROJECT_NAME} install`,
};
const packageJson = PackageJson_1.PackageJson.fromDirPath(absoluteProjectDir);
packageJson.merge({
eslintConfig,
prettier,
commitlint,
"lint-staged": lintStaged,
importSort,
scripts,
jest,
});
// Install Git hooks (only if we are in a git repository)
const isGitRepository = await GitService_1.GitService.isGitRepository(absoluteProjectDir);
if (isGitRepository) {
const gitHooks = {
"pre-commit": "npx --no-install lint-staged && npx --no-install pretty-quick --staged",
"commit-msg": "npx --no-install commitlint --edit $1",
"pre-push": `${packageManager} run lint && ${packageManager} run build && ${packageManager} run test`,
};
for (const gitHookName of Object.keys(gitHooks)) {
const gitHookCommand = gitHooks[gitHookName];
await GitService_1.GitService.addGitHook(absoluteProjectDir, gitHookName, gitHookCommand);
}
}
};
exports.up = up;