@synergyerp/backend-standards
v1.9.7
Published
SynergyERP backend standards — ESLint, Prettier, commitlint, Husky, TypeScript configs, modularization enforcement, and PR templates.
Maintainers
Readme
@synergyerp/backend-standards
Shared backend standards for all AO Holdings backend projects. Provides unified configurations for ESLint, Prettier, commitlint, Husky, TypeScript, Vitest, and module isolation enforcement.
Quick Start
pnpm add -D @synergyerp/backend-standards📖 Starting a new child project? Use the SynergyERP API Base Template and follow its CHILD_PROJECT_SETUP.md for onboarding (branch setup, CI/CD, secrets, deployment, migrations).
What's Included
| Config | File | Description |
| -------------- | ---------------------------------- | --------------------------------------------------------------------------------------------------- |
| ESLint v9 | eslint.config.js | Flat config with naming, imports, module boundaries, barrel-file enforcement, console/debugger bans |
| Prettier | prettier.config.js | Shared formatting with prettier-plugin-organize-imports |
| commitlint | commitlint.config.js | Conventional commit enforcement |
| TypeScript | tsconfig.base.json | Strict mode base with decorators, path aliases |
| Vitest | vitest.config.base.ts | Node environment, coverage thresholds (80/75/80/80) |
| VS Code | .vscode/ | settings.json + extensions.json |
| Husky | .husky/ | pre-commit, commit-msg, pre-push hooks |
| Modularization | scripts/check-modularization.mjs | Module structure + barrel file validator |
| PR Template | .github/PULL_REQUEST_TEMPLATE.md | PR checklist with module isolation compliance |
Usage
ESLint
// eslint.config.js
export { default } from '@synergyerp/backend-standards';TypeScript
// tsconfig.json
{
"extends": "@synergyerp/backend-standards/tsconfig.base.json",
}Vitest
// vitest.config.ts
import baseConfig from '@synergyerp/backend-standards/vitest.config.base';
import { defineConfig, mergeConfig } from 'vitest/config';
export default mergeConfig(baseConfig, defineConfig({}));Scripts
{
"scripts": {
"prepare": "cp -r node_modules/@synergyerp/backend-standards/.husky . 2>/dev/null && chmod +x .husky/* 2>/dev/null || true",
"lint": "eslint --ext .ts --max-warnings 0 .",
"lint:fix": "eslint --ext .ts . --fix",
"format": "prettier --write \"src/**/*.ts\"",
"format:check": "prettier --check \"src/**/*.ts\"",
"check-types": "tsc --noEmit",
"check-modularization": "node node_modules/@synergyerp/backend-standards/scripts/check-modularization.mjs",
"test": "vitest run",
"test:watch": "vitest",
"test:ci": "vitest run --coverage",
"validate": "pnpm lint && pnpm check-modularization && pnpm check-types && pnpm test:ci"
},
"lint-staged": {
"src/**/*.ts": ["eslint --fix --max-warnings 0", "prettier --write"],
"*.{json,md,yaml,yml}": ["prettier --write"]
}
}Enable Hooks
pnpm prepare
pnpm add -D husky lint-stagedCI Pipeline
cp node_modules/@synergyerp/backend-standards/.github/workflows/ci-template.yml .github/workflows/ci.ymlModule Isolation Enforcement
| Rule | Tool |
| ------------------------------------------- | ------------------------------------ |
| No flat files at modules/ root | check-modularization.mjs |
| Every module has index.ts barrel | check-modularization.mjs |
| Cross-module imports go through barrel only | import/no-internal-modules |
| No direct imports of repos/controllers | import/no-restricted-paths |
| Barrel only exports service layer | check-modularization.mjs (warning) |
Related Documents
- BACKEND_STANDARDS.md — Full backend coding standards
- CICD_STANDARDS.md — CI/CD pipeline standards
