# Code Style and Conventions ## TypeScript Configuration - **Strict mode enabled**: All strict checks are on - **Target**: ES2022 - **Module**: ESNext with bundler resolution - **Path aliases**: `@stock-bot/*` maps to `libs/*/src` - **Decorators**: Enabled for dependency injection ## Code Style Rules (ESLint) - **No unused variables**: Error (except prefixed with `_`) - **No explicit any**: Warning - **No non-null assertion**: Warning - **No console**: Warning (except in tests) - **Prefer const**: Enforced - **Strict equality**: Always use `===` - **Curly braces**: Required for all blocks ## Formatting (Prettier) - **Semicolons**: Always - **Single quotes**: Yes - **Trailing comma**: ES5 - **Print width**: 100 characters - **Tab width**: 2 spaces - **Arrow parens**: Avoid when possible - **End of line**: LF ## Import Order 1. Node built-ins 2. Third-party modules 3. `@stock-bot/*` imports 4. Relative imports (parent directories first) 5. Current directory imports ## Naming Conventions - **Files**: kebab-case (e.g., `database-setup.ts`) - **Classes**: PascalCase - **Functions/Variables**: camelCase - **Constants**: UPPER_SNAKE_CASE - **Interfaces/Types**: PascalCase with 'I' or 'T' prefix optional ## Library Standards - **Named exports only**: No default exports - **Factory patterns**: For complex initialization - **Singleton pattern**: For global services (config, logger) - **Direct class exports**: For DI-managed services ## Testing - **File naming**: `*.test.ts` or `*.spec.ts` - **Test structure**: Bun's built-in test runner - **Integration tests**: Use TestContainers for databases - **Mocking**: Mock external dependencies ## Documentation - **JSDoc**: For all public APIs - **README.md**: Required for each library - **Usage examples**: Include in documentation - **Error messages**: Descriptive with context