@biggora/claude-plugins 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +2 -0
  2. package/package.json +1 -1
  3. package/registry/registry.json +15 -0
  4. package/specs/coding.md +6 -0
  5. package/src/commands/skills/add.js +63 -7
  6. package/src/commands/skills/list.js +23 -52
  7. package/src/commands/skills/remove.js +26 -27
  8. package/src/commands/skills/resolve.js +155 -0
  9. package/src/commands/skills/update.js +58 -74
  10. package/src/skills/nest-best-practices/SKILL.md +251 -0
  11. package/src/skills/nest-best-practices/references/best-practices-request-lifecycle.md +158 -0
  12. package/src/skills/nest-best-practices/references/cli-monorepo.md +106 -0
  13. package/src/skills/nest-best-practices/references/cli-overview.md +157 -0
  14. package/src/skills/nest-best-practices/references/core-controllers.md +165 -0
  15. package/src/skills/nest-best-practices/references/core-dependency-injection.md +179 -0
  16. package/src/skills/nest-best-practices/references/core-middleware.md +139 -0
  17. package/src/skills/nest-best-practices/references/core-modules.md +138 -0
  18. package/src/skills/nest-best-practices/references/core-providers.md +188 -0
  19. package/src/skills/nest-best-practices/references/faq-raw-body-hybrid.md +122 -0
  20. package/src/skills/nest-best-practices/references/fundamentals-circular-dependency.md +89 -0
  21. package/src/skills/nest-best-practices/references/fundamentals-custom-decorators.md +107 -0
  22. package/src/skills/nest-best-practices/references/fundamentals-dynamic-modules.md +125 -0
  23. package/src/skills/nest-best-practices/references/fundamentals-exception-filters.md +202 -0
  24. package/src/skills/nest-best-practices/references/fundamentals-execution-context.md +107 -0
  25. package/src/skills/nest-best-practices/references/fundamentals-guards.md +136 -0
  26. package/src/skills/nest-best-practices/references/fundamentals-interceptors.md +187 -0
  27. package/src/skills/nest-best-practices/references/fundamentals-lazy-loading.md +89 -0
  28. package/src/skills/nest-best-practices/references/fundamentals-lifecycle-events.md +87 -0
  29. package/src/skills/nest-best-practices/references/fundamentals-module-reference.md +107 -0
  30. package/src/skills/nest-best-practices/references/fundamentals-pipes.md +197 -0
  31. package/src/skills/nest-best-practices/references/fundamentals-provider-scopes.md +92 -0
  32. package/src/skills/nest-best-practices/references/fundamentals-testing.md +142 -0
  33. package/src/skills/nest-best-practices/references/graphql-overview.md +233 -0
  34. package/src/skills/nest-best-practices/references/graphql-resolvers-mutations.md +199 -0
  35. package/src/skills/nest-best-practices/references/graphql-scalars-unions-enums.md +180 -0
  36. package/src/skills/nest-best-practices/references/graphql-subscriptions.md +228 -0
  37. package/src/skills/nest-best-practices/references/microservices-grpc.md +175 -0
  38. package/src/skills/nest-best-practices/references/microservices-overview.md +221 -0
  39. package/src/skills/nest-best-practices/references/microservices-transports.md +119 -0
  40. package/src/skills/nest-best-practices/references/openapi-swagger.md +207 -0
  41. package/src/skills/nest-best-practices/references/recipes-authentication.md +97 -0
  42. package/src/skills/nest-best-practices/references/recipes-cqrs.md +176 -0
  43. package/src/skills/nest-best-practices/references/recipes-crud-generator.md +87 -0
  44. package/src/skills/nest-best-practices/references/recipes-documentation.md +93 -0
  45. package/src/skills/nest-best-practices/references/recipes-mongoose.md +153 -0
  46. package/src/skills/nest-best-practices/references/recipes-prisma.md +98 -0
  47. package/src/skills/nest-best-practices/references/recipes-terminus.md +148 -0
  48. package/src/skills/nest-best-practices/references/recipes-typeorm.md +122 -0
  49. package/src/skills/nest-best-practices/references/security-authorization.md +196 -0
  50. package/src/skills/nest-best-practices/references/security-cors-helmet-rate-limiting.md +204 -0
  51. package/src/skills/nest-best-practices/references/security-encryption-hashing.md +93 -0
  52. package/src/skills/nest-best-practices/references/techniques-caching.md +142 -0
  53. package/src/skills/nest-best-practices/references/techniques-compression-streaming-sse.md +194 -0
  54. package/src/skills/nest-best-practices/references/techniques-configuration.md +132 -0
  55. package/src/skills/nest-best-practices/references/techniques-database.md +153 -0
  56. package/src/skills/nest-best-practices/references/techniques-events.md +163 -0
  57. package/src/skills/nest-best-practices/references/techniques-fastify.md +137 -0
  58. package/src/skills/nest-best-practices/references/techniques-file-upload.md +140 -0
  59. package/src/skills/nest-best-practices/references/techniques-http-module.md +176 -0
  60. package/src/skills/nest-best-practices/references/techniques-logging.md +146 -0
  61. package/src/skills/nest-best-practices/references/techniques-mvc-serve-static.md +132 -0
  62. package/src/skills/nest-best-practices/references/techniques-queues.md +162 -0
  63. package/src/skills/nest-best-practices/references/techniques-serialization.md +158 -0
  64. package/src/skills/nest-best-practices/references/techniques-sessions-cookies.md +167 -0
  65. package/src/skills/nest-best-practices/references/techniques-task-scheduling.md +166 -0
  66. package/src/skills/nest-best-practices/references/techniques-validation.md +126 -0
  67. package/src/skills/nest-best-practices/references/techniques-versioning.md +153 -0
  68. package/src/skills/nest-best-practices/references/websockets-advanced.md +96 -0
  69. package/src/skills/nest-best-practices/references/websockets-gateways.md +215 -0
  70. package/src/skills/typescript-expert/SKILL.md +145 -0
  71. package/src/skills/typescript-expert/commands/typescript-fix.md +65 -0
  72. package/src/skills/typescript-expert/references/advanced-conditional-types.md +190 -0
  73. package/src/skills/typescript-expert/references/advanced-decorators.md +243 -0
  74. package/src/skills/typescript-expert/references/advanced-mapped-types.md +223 -0
  75. package/src/skills/typescript-expert/references/advanced-template-literals.md +209 -0
  76. package/src/skills/typescript-expert/references/advanced-type-guards.md +308 -0
  77. package/src/skills/typescript-expert/references/best-practices-patterns.md +313 -0
  78. package/src/skills/typescript-expert/references/best-practices-performance.md +185 -0
  79. package/src/skills/typescript-expert/references/best-practices-tsconfig.md +242 -0
  80. package/src/skills/typescript-expert/references/core-generics.md +246 -0
  81. package/src/skills/typescript-expert/references/core-interfaces-types.md +231 -0
  82. package/src/skills/typescript-expert/references/core-type-system.md +261 -0
  83. package/src/skills/typescript-expert/references/core-utility-types.md +235 -0
  84. package/src/skills/typescript-expert/references/features-ts5x.md +370 -0
@@ -0,0 +1,165 @@
1
+ ---
2
+ name: core-controllers
3
+ description: NestJS controllers for handling HTTP requests and responses
4
+ ---
5
+
6
+ # Controllers
7
+
8
+ Controllers are responsible for handling incoming HTTP requests and sending responses back to the client. They use decorators to define routes and handle different HTTP methods.
9
+
10
+ ## Basic Controller
11
+
12
+ ```typescript
13
+ import { Controller, Get } from '@nestjs/common';
14
+
15
+ @Controller('cats')
16
+ export class CatsController {
17
+ @Get()
18
+ findAll(): string {
19
+ return 'This action returns all cats';
20
+ }
21
+ }
22
+ ```
23
+
24
+ ## HTTP Method Decorators
25
+
26
+ Nest provides decorators for all standard HTTP methods:
27
+
28
+ ```typescript
29
+ @Controller('cats')
30
+ export class CatsController {
31
+ @Get()
32
+ findAll() {
33
+ return 'All cats';
34
+ }
35
+
36
+ @Post()
37
+ create() {
38
+ return 'Create cat';
39
+ }
40
+
41
+ @Put(':id')
42
+ update(@Param('id') id: string) {
43
+ return `Update cat ${id}`;
44
+ }
45
+
46
+ @Delete(':id')
47
+ remove(@Param('id') id: string) {
48
+ return `Remove cat ${id}`;
49
+ }
50
+
51
+ @Patch(':id')
52
+ patch(@Param('id') id: string) {
53
+ return `Patch cat ${id}`;
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## Request Parameters
59
+
60
+ Use decorators to extract request data:
61
+
62
+ ```typescript
63
+ @Controller('cats')
64
+ export class CatsController {
65
+ @Get(':id')
66
+ findOne(@Param('id') id: string) {
67
+ return `Cat ${id}`;
68
+ }
69
+
70
+ @Post()
71
+ create(@Body() createCatDto: CreateCatDto) {
72
+ return this.catsService.create(createCatDto);
73
+ }
74
+
75
+ @Get()
76
+ findAll(@Query('breed') breed?: string) {
77
+ return this.catsService.findAll(breed);
78
+ }
79
+
80
+ @Get()
81
+ findWithHeaders(@Headers('authorization') auth: string) {
82
+ return this.catsService.find(auth);
83
+ }
84
+ }
85
+ ```
86
+
87
+ ## Available Parameter Decorators
88
+
89
+ - `@Request()`, `@Req()` - Request object
90
+ - `@Response()`, `@Res()` - Response object (use with caution)
91
+ - `@Param(key?: string)` - Route parameters
92
+ - `@Body(key?: string)` - Request body
93
+ - `@Query(key?: string)` - Query parameters
94
+ - `@Headers(name?: string)` - Request headers
95
+ - `@Ip()` - Client IP address
96
+ - `@HostParam()` - Host parameters
97
+ - `@Session()` - Session object
98
+
99
+ ## Status Codes and Headers
100
+
101
+ ```typescript
102
+ @Post()
103
+ @HttpCode(204)
104
+ @Header('Cache-Control', 'no-store')
105
+ create() {
106
+ return 'Created';
107
+ }
108
+
109
+ @Get()
110
+ @Redirect('https://nestjs.com', 301)
111
+ redirect() {
112
+ return;
113
+ }
114
+ ```
115
+
116
+ ## Route Wildcards
117
+
118
+ ```typescript
119
+ @Get('abcd/*')
120
+ findAll() {
121
+ return 'Wildcard route';
122
+ }
123
+ ```
124
+
125
+ ## Sub-domain Routing
126
+
127
+ ```typescript
128
+ @Controller({ host: 'admin.example.com' })
129
+ export class AdminController {
130
+ @Get()
131
+ index(): string {
132
+ return 'Admin page';
133
+ }
134
+ }
135
+ ```
136
+
137
+ ## Async Handlers
138
+
139
+ Controllers can return Promises or Observables:
140
+
141
+ ```typescript
142
+ @Get()
143
+ async findAll(): Promise<Cat[]> {
144
+ return this.catsService.findAll();
145
+ }
146
+
147
+ @Get()
148
+ findAll(): Observable<Cat[]> {
149
+ return of([]);
150
+ }
151
+ ```
152
+
153
+ ## Key Points
154
+
155
+ - Controllers must be registered in a module's `controllers` array
156
+ - Use DTOs (Data Transfer Objects) for request body validation
157
+ - Prefer returning values over using `@Res()` for better compatibility
158
+ - Route parameters should be declared after static paths
159
+ - Use `@HttpCode()` to set custom status codes
160
+ - Use `@Header()` to set custom response headers
161
+
162
+ <!--
163
+ Source references:
164
+ - https://docs.nestjs.com/controllers
165
+ -->
@@ -0,0 +1,179 @@
1
+ ---
2
+ name: core-dependency-injection
3
+ description: NestJS dependency injection system and custom providers
4
+ ---
5
+
6
+ # Dependency Injection
7
+
8
+ NestJS uses dependency injection (DI) to manage dependencies between components. The DI container automatically resolves and injects dependencies.
9
+
10
+ ## How DI Works
11
+
12
+ 1. Provider is marked with `@Injectable()`
13
+ 2. Consumer declares dependency in constructor
14
+ 3. Provider is registered in module's `providers` array
15
+
16
+ ```typescript
17
+ // 1. Define provider
18
+ @Injectable()
19
+ export class CatsService {
20
+ findAll() {
21
+ return [];
22
+ }
23
+ }
24
+
25
+ // 2. Inject in consumer
26
+ @Controller('cats')
27
+ export class CatsController {
28
+ constructor(private catsService: CatsService) {}
29
+ }
30
+
31
+ // 3. Register in module
32
+ @Module({
33
+ providers: [CatsService],
34
+ controllers: [CatsController],
35
+ })
36
+ export class CatsModule {}
37
+ ```
38
+
39
+ ## Standard Providers
40
+
41
+ Short-hand syntax:
42
+
43
+ ```typescript
44
+ providers: [CatsService]
45
+ ```
46
+
47
+ Is equivalent to:
48
+
49
+ ```typescript
50
+ providers: [
51
+ {
52
+ provide: CatsService,
53
+ useClass: CatsService,
54
+ },
55
+ ]
56
+ ```
57
+
58
+ ## Custom Provider Types
59
+
60
+ ### Value Providers
61
+
62
+ Inject constant values or mocks:
63
+
64
+ ```typescript
65
+ const mockCatsService = {
66
+ findAll: () => ['test'],
67
+ };
68
+
69
+ @Module({
70
+ providers: [
71
+ {
72
+ provide: CatsService,
73
+ useValue: mockCatsService,
74
+ },
75
+ ],
76
+ })
77
+ export class AppModule {}
78
+ ```
79
+
80
+ ### Class Providers
81
+
82
+ Dynamically select implementation:
83
+
84
+ ```typescript
85
+ const configServiceProvider = {
86
+ provide: ConfigService,
87
+ useClass: process.env.NODE_ENV === 'development'
88
+ ? DevelopmentConfigService
89
+ : ProductionConfigService,
90
+ };
91
+ ```
92
+
93
+ ### Factory Providers
94
+
95
+ Create providers dynamically:
96
+
97
+ ```typescript
98
+ const connectionProvider = {
99
+ provide: 'CONNECTION',
100
+ useFactory: (optionsProvider: OptionsProvider, optional?: string) => {
101
+ const options = optionsProvider.get();
102
+ return new DatabaseConnection(options);
103
+ },
104
+ inject: [OptionsProvider, { token: 'SomeOptionalProvider', optional: true }],
105
+ };
106
+ ```
107
+
108
+ ### Alias Providers
109
+
110
+ Create aliases for existing providers:
111
+
112
+ ```typescript
113
+ const loggerAliasProvider = {
114
+ provide: 'AliasedLoggerService',
115
+ useExisting: LoggerService,
116
+ };
117
+ ```
118
+
119
+ ## Non-class Tokens
120
+
121
+ Use strings, symbols, or enums as tokens:
122
+
123
+ ```typescript
124
+ @Module({
125
+ providers: [
126
+ {
127
+ provide: 'CONNECTION',
128
+ useValue: connection,
129
+ },
130
+ ],
131
+ })
132
+ export class AppModule {}
133
+ ```
134
+
135
+ Inject with `@Inject()`:
136
+
137
+ ```typescript
138
+ @Injectable()
139
+ export class CatsRepository {
140
+ constructor(@Inject('CONNECTION') connection: Connection) {}
141
+ }
142
+ ```
143
+
144
+ ## Exporting Custom Providers
145
+
146
+ Export by token:
147
+
148
+ ```typescript
149
+ @Module({
150
+ providers: [connectionFactory],
151
+ exports: ['CONNECTION'],
152
+ })
153
+ export class AppModule {}
154
+ ```
155
+
156
+ Or export the full provider object:
157
+
158
+ ```typescript
159
+ @Module({
160
+ providers: [connectionFactory],
161
+ exports: [connectionFactory],
162
+ })
163
+ export class AppModule {}
164
+ ```
165
+
166
+ ## Key Points
167
+
168
+ - DI container resolves dependencies automatically
169
+ - Dependencies are resolved transitively
170
+ - Use `@Inject()` for non-class tokens
171
+ - Factory providers can inject other providers
172
+ - Providers are cached as singletons by default
173
+ - Use `NEST_DEBUG` environment variable for DI debugging
174
+
175
+ <!--
176
+ Source references:
177
+ - https://docs.nestjs.com/fundamentals/custom-providers
178
+ - https://docs.nestjs.com/providers#dependency-injection
179
+ -->
@@ -0,0 +1,139 @@
1
+ ---
2
+ name: core-middleware
3
+ description: NestJS middleware for request/response processing
4
+ ---
5
+
6
+ # Middleware
7
+
8
+ Middleware functions are called before route handlers. They have access to request and response objects and can modify them or end the request-response cycle.
9
+
10
+ ## Class-based Middleware
11
+
12
+ ```typescript
13
+ import { Injectable, NestMiddleware } from '@nestjs/common';
14
+ import { Request, Response, NextFunction } from 'express';
15
+
16
+ @Injectable()
17
+ export class LoggerMiddleware implements NestMiddleware {
18
+ use(req: Request, res: Response, next: NextFunction) {
19
+ console.log('Request...');
20
+ next();
21
+ }
22
+ }
23
+ ```
24
+
25
+ ## Functional Middleware
26
+
27
+ For simple middleware without dependencies:
28
+
29
+ ```typescript
30
+ import { Request, Response, NextFunction } from 'express';
31
+
32
+ export function logger(req: Request, res: Response, next: NextFunction) {
33
+ console.log('Request...');
34
+ next();
35
+ }
36
+ ```
37
+
38
+ ## Applying Middleware
39
+
40
+ Use `configure()` method in module:
41
+
42
+ ```typescript
43
+ import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
44
+ import { LoggerMiddleware } from './common/middleware/logger.middleware';
45
+ import { CatsModule } from './cats/cats.module';
46
+
47
+ @Module({
48
+ imports: [CatsModule],
49
+ })
50
+ export class AppModule implements NestModule {
51
+ configure(consumer: MiddlewareConsumer) {
52
+ consumer
53
+ .apply(LoggerMiddleware)
54
+ .forRoutes('cats');
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## Route-specific Middleware
60
+
61
+ Apply to specific routes:
62
+
63
+ ```typescript
64
+ consumer
65
+ .apply(LoggerMiddleware)
66
+ .forRoutes({ path: 'cats', method: RequestMethod.GET });
67
+ ```
68
+
69
+ ## Controller-based Middleware
70
+
71
+ Apply to entire controller:
72
+
73
+ ```typescript
74
+ consumer
75
+ .apply(LoggerMiddleware)
76
+ .forRoutes(CatsController);
77
+ ```
78
+
79
+ ## Excluding Routes
80
+
81
+ Exclude specific routes:
82
+
83
+ ```typescript
84
+ consumer
85
+ .apply(LoggerMiddleware)
86
+ .exclude(
87
+ { path: 'cats', method: RequestMethod.GET },
88
+ { path: 'cats', method: RequestMethod.POST },
89
+ 'cats/{*splat}',
90
+ )
91
+ .forRoutes(CatsController);
92
+ ```
93
+
94
+ ## Multiple Middleware
95
+
96
+ Apply multiple middleware sequentially:
97
+
98
+ ```typescript
99
+ consumer
100
+ .apply(cors(), helmet(), logger)
101
+ .forRoutes(CatsController);
102
+ ```
103
+
104
+ ## Global Middleware
105
+
106
+ Apply to all routes:
107
+
108
+ ```typescript
109
+ const app = await NestFactory.create(AppModule);
110
+ app.use(logger);
111
+ await app.listen(3000);
112
+ ```
113
+
114
+ ## Route Wildcards
115
+
116
+ Use wildcards in routes:
117
+
118
+ ```typescript
119
+ consumer
120
+ .apply(LoggerMiddleware)
121
+ .forRoutes({
122
+ path: 'abcd/*splat',
123
+ method: RequestMethod.ALL,
124
+ });
125
+ ```
126
+
127
+ ## Key Points
128
+
129
+ - Middleware runs before route handlers
130
+ - Use functional middleware when no dependencies needed
131
+ - Class middleware supports dependency injection
132
+ - Middleware can be route-specific or global
133
+ - Use `exclude()` to skip certain routes
134
+ - Global middleware cannot access DI container
135
+
136
+ <!--
137
+ Source references:
138
+ - https://docs.nestjs.com/middleware
139
+ -->
@@ -0,0 +1,138 @@
1
+ ---
2
+ name: core-modules
3
+ description: NestJS modules for organizing application structure
4
+ ---
5
+
6
+ # Modules
7
+
8
+ Modules are classes annotated with `@Module()` decorator that organize application components. Every Nest application has at least one root module.
9
+
10
+ ## Basic Module
11
+
12
+ ```typescript
13
+ import { Module } from '@nestjs/common';
14
+ import { CatsController } from './cats.controller';
15
+ import { CatsService } from './cats.service';
16
+
17
+ @Module({
18
+ controllers: [CatsController],
19
+ providers: [CatsService],
20
+ })
21
+ export class CatsModule {}
22
+ ```
23
+
24
+ ## Module Properties
25
+
26
+ - `providers` - Services that can be injected
27
+ - `controllers` - Controllers in this module
28
+ - `imports` - Other modules to import
29
+ - `exports` - Providers to make available to other modules
30
+
31
+ ## Feature Modules
32
+
33
+ Group related functionality:
34
+
35
+ ```typescript
36
+ @Module({
37
+ controllers: [CatsController],
38
+ providers: [CatsService],
39
+ })
40
+ export class CatsModule {}
41
+ ```
42
+
43
+ ## Shared Modules
44
+
45
+ Export providers to share across modules:
46
+
47
+ ```typescript
48
+ @Module({
49
+ providers: [CatsService],
50
+ exports: [CatsService],
51
+ })
52
+ export class CatsModule {}
53
+ ```
54
+
55
+ ## Global Modules
56
+
57
+ Make providers available everywhere:
58
+
59
+ ```typescript
60
+ import { Module, Global } from '@nestjs/common';
61
+
62
+ @Global()
63
+ @Module({
64
+ providers: [CatsService],
65
+ exports: [CatsService],
66
+ })
67
+ export class CatsModule {}
68
+ ```
69
+
70
+ ## Dynamic Modules
71
+
72
+ Create configurable modules:
73
+
74
+ ```typescript
75
+ @Module({
76
+ providers: [Connection],
77
+ exports: [Connection],
78
+ })
79
+ export class DatabaseModule {
80
+ static forRoot(entities = [], options?): DynamicModule {
81
+ const providers = createDatabaseProviders(options, entities);
82
+ return {
83
+ module: DatabaseModule,
84
+ providers: providers,
85
+ exports: providers,
86
+ };
87
+ }
88
+ }
89
+ ```
90
+
91
+ Usage:
92
+
93
+ ```typescript
94
+ @Module({
95
+ imports: [DatabaseModule.forRoot([User])],
96
+ })
97
+ export class AppModule {}
98
+ ```
99
+
100
+ ## Module Re-exporting
101
+
102
+ Re-export imported modules:
103
+
104
+ ```typescript
105
+ @Module({
106
+ imports: [CommonModule],
107
+ exports: [CommonModule],
108
+ })
109
+ export class CoreModule {}
110
+ ```
111
+
112
+ ## Module Dependency Injection
113
+
114
+ Modules can inject providers:
115
+
116
+ ```typescript
117
+ @Module({
118
+ providers: [CatsService],
119
+ })
120
+ export class CatsModule {
121
+ constructor(private catsService: CatsService) {}
122
+ }
123
+ ```
124
+
125
+ ## Key Points
126
+
127
+ - Modules encapsulate providers by default
128
+ - Export providers to make them available to other modules
129
+ - Use `@Global()` sparingly - prefer explicit imports
130
+ - Dynamic modules allow runtime configuration
131
+ - Modules are singletons by default
132
+ - Module classes cannot be injected as providers
133
+
134
+ <!--
135
+ Source references:
136
+ - https://docs.nestjs.com/modules
137
+ - https://docs.nestjs.com/fundamentals/dynamic-modules
138
+ -->