@ts-dev-tools/core
Version:
TS dev tools Core
104 lines (103 loc) • 3.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.up = exports.hooks = void 0;
const constants_1 = require("../../constants");
const PackageJson_1 = require("../../services/PackageJson");
const PackageManagerService_1 = require("../../services/PackageManagerService");
function getPackageManagerCommand(absoluteProjectDir) {
return PackageManagerService_1.PackageManagerService.detectPackageManager(absoluteProjectDir);
}
exports.hooks = [
{
name: "pre-commit",
command: "npx --no-install lint-staged && npx --no-install pretty-quick --staged",
},
{
name: "commit-msg",
command: "npx --no-install commitlint --edit $1",
},
{
name: "pre-push",
command: (absoluteProjectDir) => {
const packageManager = getPackageManagerCommand(absoluteProjectDir);
return `${packageManager} run lint && ${packageManager} run build && ${packageManager} run test`;
},
},
];
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,
});
};
exports.up = up;