Awesome-omni-skill solid-generic
SOLID principles for generic TypeScript, Bun, and Node.js projects. Files < 100 lines, interfaces separated, JSDoc mandatory. Use for CLI tools, libraries, scripts, hooks, and non-framework TypeScript code.
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/solid-generic" ~/.claude/skills/diegosouzapw-awesome-omni-skill-solid-generic && rm -rf "$T"
manifest:
skills/development/solid-generic/SKILL.mdsource content
SOLID Generic - TypeScript / Bun / Node.js
Agent Workflow (MANDATORY)
Before ANY implementation, use
TeamCreate to spawn 3 agents:
- fuse-ai-pilot:explore-codebase - Analyze project structure and existing patterns
- fuse-ai-pilot:research-expert - Verify latest TypeScript/Bun docs via Context7
- mcp__context7__query-docs - Check integration compatibility
After implementation, run fuse-ai-pilot:sniper for validation.
DRY - Reuse Before Creating (MANDATORY)
Before writing ANY new code:
- Grep the codebase for similar function names, patterns, or logic
- Check shared locations:
,modules/cores/lib/
,modules/cores/interfaces/modules/cores/errors/ - If similar code exists -> extend/reuse instead of duplicate
- If code will be used by 2+ modules -> create in
modules/cores/ - Extract repeated logic (3+ occurrences) into shared helpers
Absolute Rules (MANDATORY)
1. Files < 100 lines
- Split at 90 lines - Never exceed 100
- Modules < 80 lines
- Services < 60 lines
- Validators < 40 lines
2. Interfaces Separated (Modular MANDATORY)
modules/[feature]/src/interfaces/ # Feature types |- user.interface.ts \- service.interface.ts modules/cores/interfaces/ # Shared types \- shared.interface.ts
NEVER put interfaces in implementation files.
NEVER use flat
structure - always src/
.modules/
3. JSDoc Mandatory
/** * Parse configuration from file path. * * @param filePath - Absolute path to config file * @returns Parsed configuration object * @throws ConfigError if file is invalid */ export function parseConfig(filePath: string): Config
SOLID Principles (Detailed Guides)
| # | Principle | Reference | Key Rule |
|---|---|---|---|
| S | Single Responsibility | single-responsibility.md | One file = one reason to change |
| O | Open/Closed | open-closed.md | Extend via composition, not modification |
| L | Liskov Substitution | liskov-substitution.md | Implementations honor interface contracts |
| I | Interface Segregation | interface-segregation.md | Many focused interfaces > one fat interface |
| D | Dependency Inversion | dependency-inversion.md | Depend on abstractions, inject dependencies |
See solid-principles.md for overview and architecture-patterns.md for project structure.
Code Templates
| Template | Usage | Max Lines |
|---|---|---|
| module.md | TypeScript/Bun module | 80 |
| service.md | Service with DI | 60 |
| interface.md | TypeScript interfaces | - |
| validator.md | Zod validation schemas | 40 |
| factory.md | Factory pattern | 60 |
| error.md | Custom error classes | 40 |
| test.md | Bun test / Vitest | - |
Forbidden
- Files > 100 lines
- Interfaces in implementation files
- Business logic in entry points
- Missing JSDoc on exports
typeany- Barrel exports (index.ts re-exports)
- Duplicating existing utility without Grep search first
- Copy-pasting logic blocks instead of extracting shared function
- Concrete dependencies without interface abstraction