Tooling Configuration
IGNIS provides centralized development configurations via the @venizia/dev-configs package.
IMPORTANT
Bun is the only package manager - never npm, yarn, or pnpm. Compile with tsc directly - never npx, bunx, or bun x.
Installation
bun add -d @venizia/dev-configsThis package provides:
- ESLint rules - flat config, pre-configured for Node.js/TypeScript projects
- Prettier settings - Consistent formatting across all IGNIS projects
- TypeScript configs - Shared base and common configurations
Prettier Configuration
Automatic code formatting eliminates style debates.
.prettierrc.mjs:
import { prettierConfigs } from '@venizia/dev-configs';
export default prettierConfigs;Default Settings:
| Setting | Value | Description |
|---|---|---|
bracketSpacing | true | { foo: bar } |
singleQuote | true | 'string' (single quotes) |
printWidth | 100 | Maximum line length |
tabWidth | 2 | 2-space indentation |
trailingComma | 'all' | [1, 2, 3,] |
arrowParens | 'avoid' | x => x not (x) => x |
semi | true | Semicolons required |
Customization:
import { prettierConfigs } from '@venizia/dev-configs';
export default {
...prettierConfigs,
printWidth: 120, // Override specific settings
};Usage:
bun run prettier:cli # Check formatting
bun run prettier:fix # Auto-fixESLint Configuration
Prevents common errors and enforces best practices.
eslint.config.mjs:
import { eslintConfigs } from '@venizia/dev-configs';
export default eslintConfigs;Includes:
- Pre-configured rules for Node.js/TypeScript (via
@minimaltech/eslint-node) - Disables
@typescript-eslint/no-explicit-anyby default - Enforces mandatory braces:
curly: ['error', 'all']andunicorn/switch-case-braces: ['error', 'always']
Customization:
import { eslintConfigs } from '@venizia/dev-configs';
export default [
...eslintConfigs,
{
rules: {
'no-console': 'warn', // Add project-specific rules
},
},
];Usage:
bun run eslint # Check for issues
bun run eslint --fix # Auto-fix issues
bun run lint:fix # Run both ESLint + PrettierTypeScript Configuration
Use the centralized TypeScript configs:
tsconfig.json:
{
"$schema": "http://json.schemastore.org/tsconfig",
"extends": "@venizia/dev-configs/tsconfig.common.json",
"compilerOptions": {
"outDir": "dist",
"rootDir": "src",
"baseUrl": "src",
"paths": {
"@/*": ["./*"]
}
},
"include": ["src"],
"exclude": ["node_modules", "dist"]
}What's Included:
| Option | Value | Purpose |
|---|---|---|
target | ES2024 | Modern JavaScript features |
experimentalDecorators | true | Required for IGNIS decorators |
emitDecoratorMetadata | true | Metadata reflection for DI |
useDefineForClassFields | false | Decorator-compatible class fields |
strict | true | Strict type checking |
skipLibCheck | true | Faster compilation |
noEmitOnError | true | A type error emits nothing - the build fails loudly |
Every package in the monorepo pins TypeScript ^6.0.3; @venizia/dev-configs accepts ^5.0.0 || ^6.0.0. Do not upgrade past 6 - typescript-eslint breaks.
WARNING
Bun does not resolve experimentalDecorators / emitDecoratorMetadata through extends. In an application tsconfig.json that Bun executes, declare both flags directly in compilerOptions, or @inject parameter decorators are dropped silently and DI fails at boot.
IDE Integration
VS Code
Recommended Extensions:
- ESLint (
dbaeumer.vscode-eslint) - Prettier (
esbenp.prettier-vscode)
.vscode/settings.json:
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"typescript.preferences.importModuleSpecifier": "relative"
}WebStorm / IntelliJ
- Go to Settings → Languages & Frameworks → JavaScript → Prettier
- Enable "Run on save"
- Go to Settings → Languages & Frameworks → JavaScript → Code Quality Tools → ESLint
- Select "Automatic ESLint configuration"
See Also
- Naming Conventions - File and class naming
- Type Safety - TypeScript best practices