UNPKG

@ts-dev-tools/core

Version:
98 lines (97 loc) 3.38 kB
"use strict"; 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;