# Code Style and Conventions ## Naming Conventions - **Interfaces**: Prefix with `I` (e.g., `IUserData`) - **Types**: Prefix with `T` (e.g., `TResponseType`) - **Files**: Always lowercase (e.g., `classes.clamavservice.ts`) - **Classes**: PascalCase (e.g., `ClamAvService`) - **Methods/Functions**: camelCase (e.g., `scanBuffer`) - Avoid ENums when possible ## TypeScript Patterns - TypeScript-first approach with full type safety - ES modules (type: "module" in package.json) - Import dependencies in `ts/plugins.ts` - Reference with full path: `plugins.myModule.myClass()` ## File Organization - Source code in `ts/` directory - Tests in `test/` directory - Distribution in `dist_ts/` directory - Use `.js` extensions in imports for ES modules ## Testing Patterns - Use @git.zone/tstest framework - Import expect from @push.rocks/tapbundle - Test files end with `export default tap.start()` - Test naming: `*.both.ts`, `*.node.ts`, `*.browser.ts` - EICAR test string for antivirus verification ## General Principles - Make RAZOR SHARP changes - every modification must be goal-oriented - Improve elegance - changes should enhance clarity and maintainability - Preserve necessary complexity - don't oversimplify - Keep async patterns - maintain Promises where they add value - Remove redundancy carefully while preserving functionality