| name | barrel-export-manager |
| description | This skill should be used when the user asks to "create barrel exports", "add index.ts", "organize exports", "create entity", "add DTO", "create service", or when adding files to NestJS module directories. Auto-maintains barrel exports. |
Barrel Export Manager
Auto-creates and maintains index.ts barrel export files in NestJS modules for clean, maintainable imports.
Activation Triggers
This skill activates when:
- Creating new entity, DTO, service, controller, guard, decorator
- Adding files to module directories
- Organizing NestJS module structure
- Mentioning "NestJS", "module", "create"
- Importing from module directories
Required Pattern (MANDATORY)
Every NestJS module folder MUST have index.ts barrel exports:
users/
├── entities/
│ ├── user.entity.ts
│ ├── profile.entity.ts
│ └── index.ts # ✅ Barrel export
├── dto/
│ ├── create-user.dto.ts
│ ├── update-user.dto.ts
│ └── index.ts # ✅ Barrel export
├── services/
│ ├── users.service.ts
│ └── index.ts # ✅ Barrel export
└── controllers/
├── users.controller.ts
└── index.ts # ✅ Barrel export
Auto-Management Process
Step 1: Detect New File
When user creates:
@Entity('users')
export class User {
@PrimaryGeneratedColumn('uuid')
id: string
}
Step 2: Auto-Create/Update index.ts
Automatically create or update users/entities/index.ts:
export * from './user.entity'
export * from './profile.entity'
Step 3: Verify Imports Use Barrel
Ensure other files import from barrel:
import { User, Profile } from 'src/users/entities'
import { User } from 'src/users/entities/user.entity'
Step 4: Update on File Changes
When files are added/removed/renamed, automatically update the barrel export:
export * from './user.entity'
export * from './profile.entity'
export * from './organization.entity'
Barrel Export Patterns
Entities Directory
export * from './user.entity'
export * from './profile.entity'
export * from './organization.entity'
import { User, Profile, Organization } from 'src/users/entities'
DTOs Directory
export * from './create-user.dto'
export * from './update-user.dto'
export * from './user-response.dto'
export * from './filter-user.dto'
import { CreateUserDto, UpdateUserDto, UserResponseDto } from 'src/users/dto'
Services Directory
export * from './users.service'
export * from './auth.service'
export * from './email.service'
import { UsersService, AuthService } from 'src/users/services'
Controllers Directory
export * from './users.controller'
export * from './auth.controller'
import { UsersController, AuthController } from 'src/users/controllers'
Guards Directory
export * from './jwt-auth.guard'
export * from './roles.guard'
export * from './api-key.guard'
import { JwtAuthGuard, RolesGuard } from 'src/auth/guards'
Decorators Directory
export * from './current-user.decorator'
export * from './roles.decorator'
export * from './api-paginated-response.decorator'
import { CurrentUser, Roles } from 'src/common/decorators'
Complete Module Example
users/
├── users.module.ts
├── entities/
│ ├── user.entity.ts
│ ├── profile.entity.ts
│ └── index.ts # export * from './user.entity'; export * from './profile.entity'
├── dto/
│ ├── create-user.dto.ts
│ ├── update-user.dto.ts
│ └── index.ts # export * from './create-user.dto'; ...
├── services/
│ ├── users.service.ts
│ └── index.ts # export * from './users.service'
├── controllers/
│ ├── users.controller.ts
│ └── index.ts # export * from './users.controller'
└── tests/
└── users.service.spec.ts
Module file uses barrel exports:
import { Module } from '@nestjs/common'
import { TypeOrmModule } from '@nestjs/typeorm'
import { User, Profile } from './entities'
import { UsersService } from './services'
import { UsersController } from './controllers'
@Module({
imports: [TypeOrmModule.forFeature([User, Profile])],
controllers: [UsersController],
providers: [UsersService],
exports: [UsersService],
})
export class UsersModule {}
Benefits of Barrel Exports
1. Clean Imports
import { User } from 'src/users/entities/user.entity'
import { Profile } from 'src/users/entities/profile.entity'
import { Organization } from 'src/users/entities/organization.entity'
import { CreateUserDto } from 'src/users/dto/create-user.dto'
import { UpdateUserDto } from 'src/users/dto/update-user.dto'
import { User, Profile, Organization } from 'src/users/entities'
import { CreateUserDto, UpdateUserDto } from 'src/users/dto'
2. Easier Refactoring
export * from './user-account.entity'
import { User } from 'src/users/entities'
3. Encapsulation
export { UsersService } from './users.service'
Auto-Barrel Creation Rules
Automatically create index.ts when:
- 2+ files in directory (avoids unnecessary barrels)
- Files export classes/types (entities, DTOs, services, etc.)
- Directory is part of module structure (entities/, dto/, services/, etc.)
Selective Exports
For specific exports instead of export *:
export { UsersService } from './users.service'
export { AuthService } from './auth.service'
Integration with TypeORM
export { User } from './user.entity'
export { Profile } from './profile.entity'
import { User, Profile } from './entities'
@Module({
imports: [TypeOrmModule.forFeature([User, Profile])],
})
Module Organization Best Practices
src/
├── users/
│ ├── users.module.ts
│ ├── entities/
│ │ ├── user.entity.ts
│ │ └── index.ts
│ ├── dto/
│ │ ├── create-user.dto.ts
│ │ ├── update-user.dto.ts
│ │ └── index.ts
│ ├── services/
│ │ ├── users.service.ts
│ │ └── index.ts
│ └── controllers/
│ ├── users.controller.ts
│ └── index.ts
Auto-Update Scenarios
Scenario 1: New Entity Added
export * from './user.entity'
export * from './profile.entity'
export * from './payment-method.entity'
Scenario 2: DTO Renamed
export * from './create-user.dto'
export * from './modify-user.dto'
Scenario 3: File Deleted
export * from './user.entity'
Cross-Module Imports
import { Injectable } from '@nestjs/common'
import { User } from 'src/users/entities'
import { UsersService } from 'src/users/services'
@Injectable()
export class OrdersService {
constructor(private usersService: UsersService) {}
async createOrder(userId: string) {
const user = await this.usersService.findOne(userId)
}
}
Success Criteria
✅ Every module directory has barrel exports
✅ All imports use barrel exports (not specific files)
✅ Barrels auto-update when files change
✅ Clean, maintainable import structure
✅ Easy refactoring (rename/move files)
Behavior
Proactive enforcement:
- Create barrels without being asked
- Update barrels automatically when files change
- Convert direct imports to barrel imports
- Explain benefits of barrel exports
- Maintain consistent structure
Never:
- Require explicit "create barrel export" request
- Allow direct file imports when barrel exists
- Wait for imports to break
Always:
- Create
index.ts in module directories
- Keep barrel exports up to date
- Use
export * for simplicity (unless selective needed)
- Ensure imports use barrels
This ensures clean, maintainable NestJS module structure from day one.