feat: initial dev-configs monorepo

Shared configs for TypeScript projects: ESLint, Prettier, TypeScript,
Vite, Jest, Playwright, Knip. Published as @vigdorov/* npm packages
to Gitea registry.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-16 23:40:22 +03:00
commit cf64bf6d7d
38 changed files with 11287 additions and 0 deletions

View File

@ -0,0 +1,23 @@
{
"name": "@vigdorov/jest-config",
"version": "1.0.0",
"description": "Shared Jest configuration",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": ["dist"],
"scripts": {
"build": "tsc"
},
"peerDependencies": {
"jest": ">=29.0.0"
},
"dependencies": {
"@swc/jest": "^0.2.38"
},
"devDependencies": {
"jest": "^29.7.0",
"@types/jest": "^29.5.14",
"typescript": "^5.8.3"
}
}

View File

@ -0,0 +1,28 @@
export interface JestConfigOptions {
environment?: 'node' | 'jsdom';
aliases?: Record<string, string>;
}
function resolveAliases(aliases: Record<string, string>): Record<string, string> {
return Object.fromEntries(
Object.entries(aliases).map(([key, aliasPath]) => [`^${key}(.*)$`, `<rootDir>/${aliasPath}$1`]),
);
}
export function jestConfig(options: JestConfigOptions = {}) {
const {environment = 'node', aliases} = options;
return {
testEnvironment: environment === 'jsdom' ? 'jsdom' : 'node',
clearMocks: true,
collectCoverage: true,
coverageReporters: ['html', 'text', 'text-summary', 'lcov'],
coverageDirectory: 'coverage',
testMatch: ['**/__tests__/**/*.(j|t)s?(x)', '**/?(*.)+(spec|test).(j|t)s?(x)'],
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
transform: {
'^.+\\.(t|j)sx?$': '@swc/jest',
},
...(aliases ? {moduleNameMapper: resolveAliases(aliases)} : {}),
};
}

View File

@ -0,0 +1,8 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"outDir": "dist",
"rootDir": "src"
},
"include": ["src"]
}