@ngxtm/devkit 3.4.0 → 3.5.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 (344) hide show
  1. package/package.json +2 -1
  2. package/rules/README.md +141 -0
  3. package/rules/dart/best-practices/SKILL.md +23 -0
  4. package/rules/dart/language/SKILL.md +52 -0
  5. package/rules/dart/tooling/SKILL.md +43 -0
  6. package/rules/dotnet/aspnet-core/SKILL.md +92 -0
  7. package/rules/dotnet/aspnet-core/references/REFERENCE.md +335 -0
  8. package/rules/dotnet/best-practices/SKILL.md +101 -0
  9. package/rules/dotnet/best-practices/references/REFERENCE.md +256 -0
  10. package/rules/dotnet/blazor/SKILL.md +146 -0
  11. package/rules/dotnet/blazor/references/REFERENCE.md +392 -0
  12. package/rules/dotnet/language/SKILL.md +82 -0
  13. package/rules/dotnet/language/references/REFERENCE.md +222 -0
  14. package/rules/dotnet/patterns.rule.md +388 -0
  15. package/rules/dotnet/razor-pages/SKILL.md +124 -0
  16. package/rules/dotnet/razor-pages/references/REFERENCE.md +321 -0
  17. package/rules/dotnet/security/SKILL.md +89 -0
  18. package/rules/dotnet/security/references/REFERENCE.md +295 -0
  19. package/rules/dotnet/tooling/SKILL.md +92 -0
  20. package/rules/dotnet/tooling/references/REFERENCE.md +300 -0
  21. package/rules/flutter/auto-route-navigation/SKILL.md +43 -0
  22. package/rules/flutter/auto-route-navigation/references/REFERENCE.md +19 -0
  23. package/rules/flutter/auto-route-navigation/references/router-config.md +62 -0
  24. package/rules/flutter/bloc-state-management/SKILL.md +64 -0
  25. package/rules/flutter/bloc-state-management/references/REFERENCE.md +20 -0
  26. package/rules/flutter/bloc-state-management/references/auth-bloc-example.md +52 -0
  27. package/rules/flutter/bloc-state-management/references/equatable-usage.md +56 -0
  28. package/rules/flutter/bloc-state-management/references/property-based-state.md +68 -0
  29. package/rules/flutter/bloc.rule.md +76 -0
  30. package/rules/flutter/cicd/SKILL.md +48 -0
  31. package/rules/flutter/cicd/references/advanced-workflow.md +66 -0
  32. package/rules/flutter/cicd/references/fastlane.md +139 -0
  33. package/rules/flutter/cicd/references/github-actions.md +59 -0
  34. package/rules/flutter/dependency-injection/SKILL.md +42 -0
  35. package/rules/flutter/dependency-injection/references/REFERENCE.md +15 -0
  36. package/rules/flutter/dependency-injection/references/modules.md +37 -0
  37. package/rules/flutter/error-handling/SKILL.md +32 -0
  38. package/rules/flutter/error-handling/references/REFERENCE.md +19 -0
  39. package/rules/flutter/error-handling/references/error-mapping.md +31 -0
  40. package/rules/flutter/feature-based-clean-architecture/SKILL.md +46 -0
  41. package/rules/flutter/feature-based-clean-architecture/references/REFERENCE.md +14 -0
  42. package/rules/flutter/feature-based-clean-architecture/references/folder-structure.md +36 -0
  43. package/rules/flutter/getx-navigation/SKILL.md +70 -0
  44. package/rules/flutter/getx-navigation/references/app-pages.md +40 -0
  45. package/rules/flutter/getx-navigation/references/middleware-example.md +29 -0
  46. package/rules/flutter/getx-state-management/SKILL.md +76 -0
  47. package/rules/flutter/getx-state-management/references/binding-example.md +32 -0
  48. package/rules/flutter/getx-state-management/references/reactive-vs-simple.md +39 -0
  49. package/rules/flutter/go-router-navigation/SKILL.md +57 -0
  50. package/rules/flutter/idiomatic-flutter/SKILL.md +20 -0
  51. package/rules/flutter/layer-based-clean-architecture/SKILL.md +50 -0
  52. package/rules/flutter/layer-based-clean-architecture/references/REFERENCE.md +60 -0
  53. package/rules/flutter/layer-based-clean-architecture/references/repository-mapping.md +50 -0
  54. package/rules/flutter/localization/SKILL.md +50 -0
  55. package/rules/flutter/localization/references/REFERENCE.md +48 -0
  56. package/rules/flutter/localization/references/sheet-loader.md +33 -0
  57. package/rules/flutter/navigator-v1-navigation/SKILL.md +71 -0
  58. package/rules/flutter/navigator-v1-navigation/references/on-generate-route.md +48 -0
  59. package/rules/flutter/performance/SKILL.md +24 -0
  60. package/rules/flutter/retrofit-networking/SKILL.md +51 -0
  61. package/rules/flutter/retrofit-networking/references/REFERENCE.md +19 -0
  62. package/rules/flutter/retrofit-networking/references/token-refresh.md +40 -0
  63. package/rules/flutter/riverpod-state-management/SKILL.md +53 -0
  64. package/rules/flutter/riverpod-state-management/references/architecture.md +124 -0
  65. package/rules/flutter/riverpod-state-management/references/best-practices.md +89 -0
  66. package/rules/flutter/riverpod-state-management/references/testing.md +73 -0
  67. package/rules/flutter/riverpod.rule.md +78 -0
  68. package/rules/flutter/security/SKILL.md +33 -0
  69. package/rules/flutter/security/references/REFERENCE.md +15 -0
  70. package/rules/flutter/security/references/network-security.md +28 -0
  71. package/rules/flutter/testing/SKILL.md +44 -0
  72. package/rules/flutter/testing/references/REFERENCE.md +21 -0
  73. package/rules/flutter/testing/references/bloc-testing.md +38 -0
  74. package/rules/flutter/testing/references/integration-testing.md +128 -0
  75. package/rules/flutter/testing/references/robot-pattern.md +82 -0
  76. package/rules/flutter/testing/references/unit-testing.md +130 -0
  77. package/rules/flutter/testing/references/widget-testing.md +120 -0
  78. package/rules/flutter/widgets/SKILL.md +37 -0
  79. package/rules/golang/chi-router/SKILL.md +219 -0
  80. package/rules/golang/chi-router/references/REFERENCE.md +13 -0
  81. package/rules/golang/chi-router/references/routing-patterns.md +205 -0
  82. package/rules/golang/cobra-cli/SKILL.md +227 -0
  83. package/rules/golang/cobra-cli/references/REFERENCE.md +13 -0
  84. package/rules/golang/cobra-cli/references/command-patterns.md +224 -0
  85. package/rules/golang/core/SKILL.md +210 -0
  86. package/rules/golang/core/references/REFERENCE.md +14 -0
  87. package/rules/golang/core/references/concurrency-patterns.md +114 -0
  88. package/rules/golang/core/references/error-handling.md +87 -0
  89. package/rules/golang/echo-framework/SKILL.md +215 -0
  90. package/rules/golang/echo-framework/references/REFERENCE.md +14 -0
  91. package/rules/golang/echo-framework/references/middleware-patterns.md +141 -0
  92. package/rules/golang/echo-framework/references/routing-patterns.md +140 -0
  93. package/rules/golang/ent-orm/SKILL.md +239 -0
  94. package/rules/golang/ent-orm/references/REFERENCE.md +13 -0
  95. package/rules/golang/ent-orm/references/schema-patterns.md +255 -0
  96. package/rules/golang/fiber-framework/SKILL.md +196 -0
  97. package/rules/golang/fiber-framework/references/REFERENCE.md +13 -0
  98. package/rules/golang/fiber-framework/references/routing-patterns.md +191 -0
  99. package/rules/golang/gin-framework/SKILL.md +205 -0
  100. package/rules/golang/gin-framework/references/REFERENCE.md +14 -0
  101. package/rules/golang/gin-framework/references/middleware-patterns.md +119 -0
  102. package/rules/golang/gorm-orm/SKILL.md +196 -0
  103. package/rules/golang/gorm-orm/references/REFERENCE.md +14 -0
  104. package/rules/golang/gorm-orm/references/model-definitions.md +167 -0
  105. package/rules/golang/gorm-orm/references/query-patterns.md +161 -0
  106. package/rules/golang/grpc/SKILL.md +231 -0
  107. package/rules/golang/grpc/references/REFERENCE.md +13 -0
  108. package/rules/golang/grpc/references/service-patterns.md +276 -0
  109. package/rules/golang/testify/SKILL.md +239 -0
  110. package/rules/golang/testify/references/REFERENCE.md +13 -0
  111. package/rules/golang/testify/references/assert-patterns.md +170 -0
  112. package/rules/golang/validator/SKILL.md +234 -0
  113. package/rules/golang/validator/references/REFERENCE.md +13 -0
  114. package/rules/golang/validator/references/validation-tags.md +211 -0
  115. package/rules/golang/viper-config/SKILL.md +244 -0
  116. package/rules/golang/viper-config/references/REFERENCE.md +13 -0
  117. package/rules/golang/viper-config/references/config-loading.md +181 -0
  118. package/rules/golang/wire-di/SKILL.md +243 -0
  119. package/rules/golang/wire-di/references/REFERENCE.md +13 -0
  120. package/rules/golang/wire-di/references/provider-patterns.md +193 -0
  121. package/rules/golang/zap-logging/SKILL.md +203 -0
  122. package/rules/golang/zap-logging/references/REFERENCE.md +13 -0
  123. package/rules/golang/zap-logging/references/logger-config.md +165 -0
  124. package/rules/java/build-gradle/SKILL.md +92 -0
  125. package/rules/java/build-gradle/references/REFERENCE.md +14 -0
  126. package/rules/java/build-gradle/references/kotlin-dsl.md +118 -0
  127. package/rules/java/build-gradle/references/task-configuration.md +132 -0
  128. package/rules/java/build-maven/SKILL.md +86 -0
  129. package/rules/java/build-maven/references/REFERENCE.md +14 -0
  130. package/rules/java/build-maven/references/dependency-management.md +111 -0
  131. package/rules/java/build-maven/references/lifecycle-phases.md +114 -0
  132. package/rules/java/graalvm-native/SKILL.md +105 -0
  133. package/rules/java/graalvm-native/references/REFERENCE.md +12 -0
  134. package/rules/java/java-collections-streams/SKILL.md +148 -0
  135. package/rules/java/java-collections-streams/references/REFERENCE.md +15 -0
  136. package/rules/java/java-collections-streams/references/collectors-patterns.md +178 -0
  137. package/rules/java/java-collections-streams/references/stream-pipelines.md +165 -0
  138. package/rules/java/java-concurrency/SKILL.md +187 -0
  139. package/rules/java/java-concurrency/references/REFERENCE.md +17 -0
  140. package/rules/java/java-concurrency/references/completable-future.md +165 -0
  141. package/rules/java/java-concurrency/references/executor-patterns.md +176 -0
  142. package/rules/java/java-concurrency/references/virtual-threads.md +190 -0
  143. package/rules/java/java-core-language/SKILL.md +121 -0
  144. package/rules/java/java-core-language/references/REFERENCE.md +15 -0
  145. package/rules/java/java-core-language/references/jvm-memory-model.md +160 -0
  146. package/rules/java/java-core-language/references/modern-java-features.md +168 -0
  147. package/rules/java/java-project-structure/SKILL.md +195 -0
  148. package/rules/java/java-project-structure/references/REFERENCE.md +15 -0
  149. package/rules/java/java-project-structure/references/maven-project-layout.md +199 -0
  150. package/rules/java/java-project-structure/references/module-system.md +159 -0
  151. package/rules/java/micronaut-core/SKILL.md +99 -0
  152. package/rules/java/micronaut-core/references/REFERENCE.md +12 -0
  153. package/rules/java/micronaut-reactive/SKILL.md +68 -0
  154. package/rules/java/micronaut-reactive/references/REFERENCE.md +12 -0
  155. package/rules/java/quarkus-core/SKILL.md +85 -0
  156. package/rules/java/quarkus-core/references/REFERENCE.md +12 -0
  157. package/rules/java/quarkus-reactive/SKILL.md +67 -0
  158. package/rules/java/quarkus-reactive/references/REFERENCE.md +12 -0
  159. package/rules/java/spring-batch/SKILL.md +102 -0
  160. package/rules/java/spring-batch/references/REFERENCE.md +12 -0
  161. package/rules/java/spring-boot-architecture/SKILL.md +206 -0
  162. package/rules/java/spring-boot-architecture/references/REFERENCE.md +15 -0
  163. package/rules/java/spring-boot-architecture/references/auto-configuration.md +158 -0
  164. package/rules/java/spring-boot-architecture/references/configuration-properties.md +202 -0
  165. package/rules/java/spring-boot-web/SKILL.md +217 -0
  166. package/rules/java/spring-boot-web/references/REFERENCE.md +17 -0
  167. package/rules/java/spring-cloud/SKILL.md +109 -0
  168. package/rules/java/spring-cloud/references/REFERENCE.md +13 -0
  169. package/rules/java/spring-data-jpa/SKILL.md +241 -0
  170. package/rules/java/spring-data-jpa/references/REFERENCE.md +16 -0
  171. package/rules/java/spring-security/SKILL.md +161 -0
  172. package/rules/java/spring-security/references/REFERENCE.md +16 -0
  173. package/rules/java/spring-security/references/jwt-auth-flow.md +213 -0
  174. package/rules/java/testing-junit-mockito/SKILL.md +135 -0
  175. package/rules/java/testing-junit-mockito/references/REFERENCE.md +15 -0
  176. package/rules/java/testing-junit-mockito/references/junit5-patterns.md +159 -0
  177. package/rules/java/testing-junit-mockito/references/mockito-patterns.md +148 -0
  178. package/rules/java/testing-junit-mockito/references/spring-boot-testing.md +152 -0
  179. package/rules/javascript/best-practices/SKILL.md +64 -0
  180. package/rules/javascript/best-practices/references/REFERENCE.md +91 -0
  181. package/rules/javascript/language/SKILL.md +71 -0
  182. package/rules/javascript/language/references/REFERENCE.md +106 -0
  183. package/rules/javascript/tooling/SKILL.md +60 -0
  184. package/rules/javascript/tooling/references/REFERENCE.md +107 -0
  185. package/rules/metadata.json +54 -0
  186. package/rules/nestjs/api-standards/SKILL.md +47 -0
  187. package/rules/nestjs/api-standards/references/pagination-wrapper.md +87 -0
  188. package/rules/nestjs/architecture/SKILL.md +68 -0
  189. package/rules/nestjs/architecture/references/dynamic-module.md +53 -0
  190. package/rules/nestjs/caching/SKILL.md +51 -0
  191. package/rules/nestjs/caching/references/REFERENCE.md +13 -0
  192. package/rules/nestjs/caching/references/cache-patterns.md +183 -0
  193. package/rules/nestjs/configuration/SKILL.md +41 -0
  194. package/rules/nestjs/configuration/references/REFERENCE.md +13 -0
  195. package/rules/nestjs/configuration/references/config-patterns.md +184 -0
  196. package/rules/nestjs/controllers-services/SKILL.md +63 -0
  197. package/rules/nestjs/controllers-services/references/REFERENCE.md +14 -0
  198. package/rules/nestjs/controllers-services/references/controller-patterns.md +119 -0
  199. package/rules/nestjs/controllers-services/references/service-patterns.md +129 -0
  200. package/rules/nestjs/database/SKILL.md +102 -0
  201. package/rules/nestjs/database/references/REFERENCE.md +14 -0
  202. package/rules/nestjs/database/references/typeorm-patterns.md +156 -0
  203. package/rules/nestjs/deployment/SKILL.md +36 -0
  204. package/rules/nestjs/deployment/references/REFERENCE.md +13 -0
  205. package/rules/nestjs/deployment/references/deployment-patterns.md +140 -0
  206. package/rules/nestjs/documentation/SKILL.md +64 -0
  207. package/rules/nestjs/documentation/references/REFERENCE.md +13 -0
  208. package/rules/nestjs/documentation/references/swagger-patterns.md +139 -0
  209. package/rules/nestjs/error-handling/SKILL.md +55 -0
  210. package/rules/nestjs/error-handling/references/REFERENCE.md +13 -0
  211. package/rules/nestjs/error-handling/references/exception-filters.md +152 -0
  212. package/rules/nestjs/file-uploads/SKILL.md +35 -0
  213. package/rules/nestjs/file-uploads/references/REFERENCE.md +13 -0
  214. package/rules/nestjs/file-uploads/references/upload-patterns.md +125 -0
  215. package/rules/nestjs/observability/SKILL.md +39 -0
  216. package/rules/nestjs/observability/references/REFERENCE.md +13 -0
  217. package/rules/nestjs/observability/references/logging-metrics.md +175 -0
  218. package/rules/nestjs/performance/SKILL.md +60 -0
  219. package/rules/nestjs/performance/references/REFERENCE.md +13 -0
  220. package/rules/nestjs/performance/references/performance-patterns.md +107 -0
  221. package/rules/nestjs/real-time/SKILL.md +45 -0
  222. package/rules/nestjs/real-time/references/REFERENCE.md +13 -0
  223. package/rules/nestjs/real-time/references/websocket-patterns.md +121 -0
  224. package/rules/nestjs/scheduling/SKILL.md +39 -0
  225. package/rules/nestjs/scheduling/references/REFERENCE.md +13 -0
  226. package/rules/nestjs/scheduling/references/scheduling-patterns.md +137 -0
  227. package/rules/nestjs/search/SKILL.md +41 -0
  228. package/rules/nestjs/search/references/REFERENCE.md +13 -0
  229. package/rules/nestjs/search/references/search-patterns.md +137 -0
  230. package/rules/nestjs/security/SKILL.md +87 -0
  231. package/rules/nestjs/security/references/REFERENCE.md +14 -0
  232. package/rules/nestjs/security/references/authentication.md +151 -0
  233. package/rules/nestjs/testing/SKILL.md +40 -0
  234. package/rules/nestjs/testing/references/REFERENCE.md +14 -0
  235. package/rules/nestjs/testing/references/unit-testing.md +179 -0
  236. package/rules/nestjs/transport/SKILL.md +45 -0
  237. package/rules/nestjs/transport/references/REFERENCE.md +13 -0
  238. package/rules/nestjs/transport/references/microservices-patterns.md +170 -0
  239. package/rules/nextjs/app-router/SKILL.md +46 -0
  240. package/rules/nextjs/app-router/references/REFERENCE.md +14 -0
  241. package/rules/nextjs/app-router/references/routing-patterns.md +182 -0
  242. package/rules/nextjs/architecture/SKILL.md +44 -0
  243. package/rules/nextjs/architecture/references/fsd-structure.md +77 -0
  244. package/rules/nextjs/authentication/SKILL.md +29 -0
  245. package/rules/nextjs/authentication/references/auth-implementation.md +73 -0
  246. package/rules/nextjs/caching/SKILL.md +66 -0
  247. package/rules/nextjs/caching/references/REFERENCE.md +13 -0
  248. package/rules/nextjs/caching/references/cache-strategies.md +168 -0
  249. package/rules/nextjs/data-access-layer/SKILL.md +33 -0
  250. package/rules/nextjs/data-access-layer/references/patterns.md +66 -0
  251. package/rules/nextjs/data-fetching/SKILL.md +59 -0
  252. package/rules/nextjs/data-fetching/references/REFERENCE.md +13 -0
  253. package/rules/nextjs/data-fetching/references/fetch-patterns.md +160 -0
  254. package/rules/nextjs/internationalization/SKILL.md +105 -0
  255. package/rules/nextjs/internationalization/references/REFERENCE.md +13 -0
  256. package/rules/nextjs/internationalization/references/i18n-patterns.md +180 -0
  257. package/rules/nextjs/optimization/SKILL.md +64 -0
  258. package/rules/nextjs/optimization/references/REFERENCE.md +13 -0
  259. package/rules/nextjs/optimization/references/optimization-patterns.md +190 -0
  260. package/rules/nextjs/rendering/SKILL.md +91 -0
  261. package/rules/nextjs/rendering/references/REFERENCE.md +13 -0
  262. package/rules/nextjs/rendering/references/rendering-modes.md +163 -0
  263. package/rules/nextjs/server-actions/SKILL.md +46 -0
  264. package/rules/nextjs/server-actions/references/REFERENCE.md +13 -0
  265. package/rules/nextjs/server-actions/references/action-patterns.md +188 -0
  266. package/rules/nextjs/server-components/SKILL.md +52 -0
  267. package/rules/nextjs/server-components/references/REFERENCE.md +13 -0
  268. package/rules/nextjs/server-components/references/component-patterns.md +175 -0
  269. package/rules/nextjs/state-management/SKILL.md +73 -0
  270. package/rules/nextjs/state-management/references/REFERENCE.md +13 -0
  271. package/rules/nextjs/state-management/references/state-patterns.md +218 -0
  272. package/rules/nextjs/styling/SKILL.md +31 -0
  273. package/rules/nextjs/styling/references/implementation.md +56 -0
  274. package/rules/react/component-patterns/SKILL.md +66 -0
  275. package/rules/react/component-patterns/references/REFERENCE.md +126 -0
  276. package/rules/react/hooks/SKILL.md +60 -0
  277. package/rules/react/hooks/references/REFERENCE.md +132 -0
  278. package/rules/react/hooks.rule.md +79 -0
  279. package/rules/react/performance/SKILL.md +69 -0
  280. package/rules/react/performance/references/REFERENCE.md +143 -0
  281. package/rules/react/security/SKILL.md +46 -0
  282. package/rules/react/security/references/REFERENCE.md +170 -0
  283. package/rules/react/state-management/SKILL.md +56 -0
  284. package/rules/react/state-management/references/REFERENCE.md +137 -0
  285. package/rules/react/testing/SKILL.md +45 -0
  286. package/rules/react/testing/references/REFERENCE.md +149 -0
  287. package/rules/react/tooling/SKILL.md +39 -0
  288. package/rules/react/typescript/SKILL.md +53 -0
  289. package/rules/rust/actix-web/SKILL.md +160 -0
  290. package/rules/rust/actix-web/references/REFERENCE.md +13 -0
  291. package/rules/rust/actix-web/references/handler-patterns.md +198 -0
  292. package/rules/rust/async-graphql/SKILL.md +228 -0
  293. package/rules/rust/async-graphql/references/REFERENCE.md +13 -0
  294. package/rules/rust/async-graphql/references/schema-patterns.md +215 -0
  295. package/rules/rust/axum/SKILL.md +161 -0
  296. package/rules/rust/axum/references/REFERENCE.md +14 -0
  297. package/rules/rust/axum/references/handler-patterns.md +97 -0
  298. package/rules/rust/bevy/SKILL.md +206 -0
  299. package/rules/rust/bevy/references/REFERENCE.md +13 -0
  300. package/rules/rust/bevy/references/ecs-patterns.md +226 -0
  301. package/rules/rust/clap/SKILL.md +217 -0
  302. package/rules/rust/clap/references/REFERENCE.md +13 -0
  303. package/rules/rust/clap/references/derive-patterns.md +205 -0
  304. package/rules/rust/core/SKILL.md +154 -0
  305. package/rules/rust/core/references/REFERENCE.md +14 -0
  306. package/rules/rust/core/references/error-handling.md +92 -0
  307. package/rules/rust/diesel-orm/SKILL.md +176 -0
  308. package/rules/rust/diesel-orm/references/REFERENCE.md +13 -0
  309. package/rules/rust/diesel-orm/references/schema-patterns.md +206 -0
  310. package/rules/rust/rocket/SKILL.md +182 -0
  311. package/rules/rust/rocket/references/REFERENCE.md +13 -0
  312. package/rules/rust/rocket/references/handler-patterns.md +209 -0
  313. package/rules/rust/sea-orm/SKILL.md +230 -0
  314. package/rules/rust/sea-orm/references/REFERENCE.md +13 -0
  315. package/rules/rust/sea-orm/references/entity-patterns.md +221 -0
  316. package/rules/rust/serde-serialization/SKILL.md +150 -0
  317. package/rules/rust/serde-serialization/references/REFERENCE.md +13 -0
  318. package/rules/rust/serde-serialization/references/serialization-patterns.md +199 -0
  319. package/rules/rust/sqlx-database/SKILL.md +140 -0
  320. package/rules/rust/sqlx-database/references/REFERENCE.md +13 -0
  321. package/rules/rust/sqlx-database/references/query-patterns.md +210 -0
  322. package/rules/rust/tauri/SKILL.md +180 -0
  323. package/rules/rust/tauri/references/REFERENCE.md +13 -0
  324. package/rules/rust/tauri/references/command-patterns.md +209 -0
  325. package/rules/rust/tokio-runtime/SKILL.md +167 -0
  326. package/rules/rust/tokio-runtime/references/REFERENCE.md +14 -0
  327. package/rules/rust/tokio-runtime/references/async-patterns.md +137 -0
  328. package/rules/rust/tokio-runtime/references/synchronization.md +152 -0
  329. package/rules/rust/tonic/SKILL.md +231 -0
  330. package/rules/rust/tonic/references/REFERENCE.md +13 -0
  331. package/rules/rust/tonic/references/service-patterns.md +213 -0
  332. package/rules/rust/tracing/SKILL.md +214 -0
  333. package/rules/rust/tracing/references/REFERENCE.md +13 -0
  334. package/rules/rust/tracing/references/instrumentation.md +187 -0
  335. package/rules/typescript/best-practices/SKILL.md +108 -0
  336. package/rules/typescript/best-practices/references/REFERENCE.md +68 -0
  337. package/rules/typescript/language/SKILL.md +72 -0
  338. package/rules/typescript/language/references/REFERENCE.md +67 -0
  339. package/rules/typescript/patterns.rule.md +85 -0
  340. package/rules/typescript/security/SKILL.md +59 -0
  341. package/rules/typescript/security/references/REFERENCE.md +113 -0
  342. package/rules/typescript/tooling/SKILL.md +52 -0
  343. package/rules/typescript/tooling/references/REFERENCE.md +110 -0
  344. package/skills/learn/SKILL.md +476 -0
@@ -0,0 +1,175 @@
1
+ # NestJS Logging & Metrics
2
+
3
+ ## Built-in Logger
4
+
5
+ ```typescript
6
+ import { Logger, Injectable } from '@nestjs/common';
7
+
8
+ @Injectable()
9
+ export class UsersService {
10
+ private readonly logger = new Logger(UsersService.name);
11
+
12
+ async findOne(id: string) {
13
+ this.logger.log(`Finding user ${id}`);
14
+ this.logger.debug('Debug info');
15
+ this.logger.warn('Warning message');
16
+ this.logger.error('Error occurred', error.stack);
17
+
18
+ return user;
19
+ }
20
+ }
21
+ ```
22
+
23
+ ## Custom Logger
24
+
25
+ ```typescript
26
+ import { LoggerService } from '@nestjs/common';
27
+ import * as winston from 'winston';
28
+
29
+ export class WinstonLogger implements LoggerService {
30
+ private logger: winston.Logger;
31
+
32
+ constructor() {
33
+ this.logger = winston.createLogger({
34
+ level: 'info',
35
+ format: winston.format.combine(
36
+ winston.format.timestamp(),
37
+ winston.format.json(),
38
+ ),
39
+ transports: [
40
+ new winston.transports.Console(),
41
+ new winston.transports.File({ filename: 'app.log' }),
42
+ ],
43
+ });
44
+ }
45
+
46
+ log(message: string, context?: string) {
47
+ this.logger.info(message, { context });
48
+ }
49
+
50
+ error(message: string, trace?: string, context?: string) {
51
+ this.logger.error(message, { trace, context });
52
+ }
53
+
54
+ warn(message: string, context?: string) {
55
+ this.logger.warn(message, { context });
56
+ }
57
+ }
58
+
59
+ // main.ts
60
+ const app = await NestFactory.create(AppModule, {
61
+ logger: new WinstonLogger(),
62
+ });
63
+ ```
64
+
65
+ ## Request Logging Middleware
66
+
67
+ ```typescript
68
+ @Injectable()
69
+ export class LoggingMiddleware implements NestMiddleware {
70
+ private readonly logger = new Logger('HTTP');
71
+
72
+ use(req: Request, res: Response, next: NextFunction) {
73
+ const { method, originalUrl } = req;
74
+ const requestId = req.headers['x-request-id'] || uuid();
75
+
76
+ const start = Date.now();
77
+
78
+ res.on('finish', () => {
79
+ const duration = Date.now() - start;
80
+ this.logger.log(
81
+ `${method} ${originalUrl} ${res.statusCode} ${duration}ms`,
82
+ { requestId },
83
+ );
84
+ });
85
+
86
+ next();
87
+ }
88
+ }
89
+ ```
90
+
91
+ ## Health Checks
92
+
93
+ ```typescript
94
+ import { TerminusModule, HealthCheckService, HttpHealthIndicator, TypeOrmHealthIndicator } from '@nestjs/terminus';
95
+
96
+ @Controller('health')
97
+ export class HealthController {
98
+ constructor(
99
+ private health: HealthCheckService,
100
+ private http: HttpHealthIndicator,
101
+ private db: TypeOrmHealthIndicator,
102
+ ) {}
103
+
104
+ @Get()
105
+ check() {
106
+ return this.health.check([
107
+ () => this.db.pingCheck('database'),
108
+ () => this.http.pingCheck('api', 'https://api.example.com'),
109
+ ]);
110
+ }
111
+
112
+ @Get('liveness')
113
+ liveness() {
114
+ return { status: 'ok' };
115
+ }
116
+
117
+ @Get('readiness')
118
+ readiness() {
119
+ return this.health.check([
120
+ () => this.db.pingCheck('database'),
121
+ ]);
122
+ }
123
+ }
124
+ ```
125
+
126
+ ## Prometheus Metrics
127
+
128
+ ```typescript
129
+ import { PrometheusModule, makeCounterProvider, makeHistogramProvider } from '@willsoto/nestjs-prometheus';
130
+
131
+ @Module({
132
+ imports: [
133
+ PrometheusModule.register({
134
+ path: '/metrics',
135
+ defaultMetrics: { enabled: true },
136
+ }),
137
+ ],
138
+ providers: [
139
+ makeCounterProvider({
140
+ name: 'http_requests_total',
141
+ help: 'Total HTTP requests',
142
+ labelNames: ['method', 'path', 'status'],
143
+ }),
144
+ makeHistogramProvider({
145
+ name: 'http_request_duration_seconds',
146
+ help: 'HTTP request duration',
147
+ labelNames: ['method', 'path'],
148
+ buckets: [0.1, 0.5, 1, 2, 5],
149
+ }),
150
+ ],
151
+ })
152
+ export class MetricsModule {}
153
+
154
+ // Usage in interceptor
155
+ @Injectable()
156
+ export class MetricsInterceptor implements NestInterceptor {
157
+ constructor(
158
+ @InjectMetric('http_requests_total') private counter: Counter,
159
+ @InjectMetric('http_request_duration_seconds') private histogram: Histogram,
160
+ ) {}
161
+
162
+ intercept(context: ExecutionContext, next: CallHandler) {
163
+ const req = context.switchToHttp().getRequest();
164
+ const start = Date.now();
165
+
166
+ return next.handle().pipe(
167
+ tap(() => {
168
+ const duration = (Date.now() - start) / 1000;
169
+ this.counter.inc({ method: req.method, path: req.path, status: 200 });
170
+ this.histogram.observe({ method: req.method, path: req.path }, duration);
171
+ }),
172
+ );
173
+ }
174
+ }
175
+ ```
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: NestJS Performance
3
+ description: Fastify adapter, Scope management, and Compression.
4
+ metadata:
5
+ labels: [nestjs, performance, fastify]
6
+ triggers:
7
+ files: ['main.ts']
8
+ keywords: [FastifyAdapter, compression, SINGLETON, REQUEST scope]
9
+ ---
10
+
11
+ # Performance Tuning
12
+
13
+ ## Network & Runtime
14
+
15
+ - **Adapter**: Use `FastifyAdapter` instead of Express (2x throughput).
16
+ - **Compression**: Enable Gzip/Brotli compression.
17
+
18
+ ```typescript
19
+ // main.ts
20
+ app.use(compression());
21
+ ```
22
+
23
+ - **Keep-Alive**: Configure `http.Agent` keep-alive settings to reuse TCP connections for upstream services.
24
+
25
+ ## Scope & Dependency Injection
26
+
27
+ - **Default Scope**: Adhere to `SINGLETON` scope (default).
28
+ - **Request Scope**: AVOID `REQUEST` scope unless absolutely necessary.
29
+ - **Pro Tip**: A single request-scoped service makes its entire injection chain request-scoped.
30
+ - **Solution**: Use **Durable Providers** (`durable: true`) for multi-tenancy.
31
+ - **Lazy Loading**: Use `LazyModuleLoader` for heavyweight modules (e.g., Admin panels).
32
+
33
+ ## Caching Strategy
34
+
35
+ - **Application Cache**: Use `@nestjs/cache-manager` for computation results.
36
+ - **Deep Dive**: See **[Caching & Redis](../caching/SKILL.md)** for L1/L2 strategies and Invalidation patterns.
37
+ - **HTTP Cache**: Set `Cache-Control` headers for client-side caching (CDN/Browser).
38
+ - **Distributed**: In microservices, use Redis store, not memory store.
39
+
40
+ ## Queues & Async Processing
41
+
42
+ - **Offloading**: Never block the HTTP request for long-running tasks (Emails, Reports, webhooks).
43
+ - **Tool**: Use `@nestjs/bull` (BullMQ) or RabbitMQ (`@nestjs/microservices`).
44
+ - **Pattern**: Producer (Controller) -> Queue -> Consumer (Processor).
45
+
46
+ ## Serialization
47
+
48
+ - **Warning**: `class-transformer` is CPU expensive.
49
+ - **Optimization**: For high-throughput READ endpoints, consider manual mapping or using `fast-json-stringify` (built-in fastify serialization) instead of interceptors.
50
+
51
+ ## Database Tuning
52
+
53
+ - **Projections**: Always use `select: []` to fetch only needed columns.
54
+ - **N+1**: Prevent N+1 queries by using `relations` carefully or `DataLoader` for Graph/Field resolvers.
55
+ - **Connection Pooling**: Configure pool size (e.g., `pool: { min: 2, max: 10 }`) in config to match DB limits.
56
+
57
+ ## Profiling & Scaling
58
+
59
+ - **Offloading**: Move CPU-heavy tasks (Image processing, Crypto) to `worker_threads`.
60
+ - **Clustering**: For non-containerized environments, use `ClusterModule` to utilize all CPU cores. In K8s, prefer ReplicaSets.
@@ -0,0 +1,13 @@
1
+ # NestJS Performance References
2
+
3
+ ## References
4
+
5
+ - [**Performance Patterns**](performance-patterns.md) - Caching, compression, clustering
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Enable compression middleware
10
+ - [ ] Use caching strategically
11
+ - [ ] Implement request/response interceptors
12
+ - [ ] Enable clustering for multi-core
13
+ - [ ] Profile and optimize hot paths
@@ -0,0 +1,107 @@
1
+ # NestJS Performance Patterns
2
+
3
+ ## Compression
4
+
5
+ ```typescript
6
+ import compression from 'compression';
7
+
8
+ async function bootstrap() {
9
+ const app = await NestFactory.create(AppModule);
10
+ app.use(compression());
11
+ await app.listen(3000);
12
+ }
13
+ ```
14
+
15
+ ## Response Caching Interceptor
16
+
17
+ ```typescript
18
+ import { CacheInterceptor, CacheKey, CacheTTL } from '@nestjs/cache-manager';
19
+
20
+ @Controller('products')
21
+ @UseInterceptors(CacheInterceptor)
22
+ export class ProductsController {
23
+ @Get()
24
+ @CacheKey('all-products')
25
+ @CacheTTL(300) // 5 minutes
26
+ findAll() {
27
+ return this.productsService.findAll();
28
+ }
29
+ }
30
+ ```
31
+
32
+ ## Request Timeout
33
+
34
+ ```typescript
35
+ import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
36
+ import { timeout } from 'rxjs/operators';
37
+
38
+ @Injectable()
39
+ export class TimeoutInterceptor implements NestInterceptor {
40
+ intercept(context: ExecutionContext, next: CallHandler) {
41
+ return next.handle().pipe(timeout(5000));
42
+ }
43
+ }
44
+ ```
45
+
46
+ ## Database Query Optimization
47
+
48
+ ```typescript
49
+ @Injectable()
50
+ export class UsersService {
51
+ // Pagination
52
+ async findAll(page = 1, limit = 20) {
53
+ return this.userRepo.find({
54
+ skip: (page - 1) * limit,
55
+ take: limit,
56
+ select: ['id', 'name', 'email'], // Select only needed fields
57
+ });
58
+ }
59
+
60
+ // Eager loading
61
+ async findWithOrders(id: string) {
62
+ return this.userRepo.findOne({
63
+ where: { id },
64
+ relations: ['orders', 'orders.items'],
65
+ });
66
+ }
67
+ }
68
+ ```
69
+
70
+ ## Clustering
71
+
72
+ ```typescript
73
+ // main.ts
74
+ import cluster from 'cluster';
75
+ import os from 'os';
76
+
77
+ if (cluster.isPrimary) {
78
+ const numCPUs = os.cpus().length;
79
+ for (let i = 0; i < numCPUs; i++) {
80
+ cluster.fork();
81
+ }
82
+ cluster.on('exit', (worker) => {
83
+ console.log(`Worker ${worker.process.pid} died`);
84
+ cluster.fork();
85
+ });
86
+ } else {
87
+ bootstrap();
88
+ }
89
+ ```
90
+
91
+ ## Lazy Loading Modules
92
+
93
+ ```typescript
94
+ @Module({})
95
+ export class AppModule {
96
+ static forRoot(): DynamicModule {
97
+ return {
98
+ module: AppModule,
99
+ imports: [
100
+ LazyModuleLoader.forFeature([
101
+ () => import('./reports/reports.module').then(m => m.ReportsModule),
102
+ ]),
103
+ ],
104
+ };
105
+ }
106
+ }
107
+ ```
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: NestJS Real-Time
3
+ description: WebSocket and SSE selection strategies and scaling.
4
+ metadata:
5
+ labels: [nestjs, websockets, sse, socket.io]
6
+ triggers:
7
+ files: ['**/*.gateway.ts', '**/*.controller.ts']
8
+ keywords: [WebSocketGateway, SubscribeMessage, Sse, Socket.io]
9
+ ---
10
+
11
+ # Real-Time & WebSockets
12
+
13
+ ## Selection Strategy (Critical)
14
+
15
+ - **WebSockets (Bi-directional)**: Use for Chat, Multiplayer Games, Collaborative Editing.
16
+ - _High Complexity_: Requires custom scaling (Redis Adapter) and sticky sessions (sometimes).
17
+ - **Server-Sent Events (SSE) (Uni-directional)**: Use for Notifications, Live Feeds, Tickers, CI Log streaming.
18
+ - _Low Complexity_: Standard HTTP. Works with standard Load Balancers. Easy to secure.
19
+ - _NestJS_: Use `@Sse('route')` returning `Observable<MessageEvent>`.
20
+ - **Long Polling**: Use **only** as a fallback or for extremely low-frequency updates (e.g., job status check every 10m).
21
+ - _Impact_: High header overhead. Blocks threads if not handled carefully.
22
+
23
+ ## WebSockets Implementation
24
+
25
+ - **Socket.io**: Default choice. Features "Rooms", "Namespaces", and automatic reconnection. Heavy protocol.
26
+ - **Fastify/WS**: Use `ws` adapter if performance is critical (e.g., high-frequency trading updates) and you don't need "Rooms" logic.
27
+
28
+ ## Scaling (Critical)
29
+
30
+ - **WebSockets**: In K8s, a client connects to Pod A. If Pod B emits an event, the client won't receive it.
31
+ - **Solution**: **Redis Adapter** (`@socket.io/redis-adapter`). Every pod publishes to Redis; Redis distributes to all other pods.
32
+ - **SSE**: Stateless. No special adapter needed, but be aware of **Connection Limits** (6 concurrent connections per domain in HTTP/1.1; virtually unlimited in HTTP/2).
33
+ - **Rule**: Must use **HTTP/2** for SSE at scale.
34
+
35
+ ## Security
36
+
37
+ - **Handshake Auth**: Standard HTTP Guards don't trigger on Ws connection efficiently.
38
+ - **Pattern**: Validate JWT during the `handleConnection()` lifecycle method. Disconnect immediately if invalid.
39
+ - **Rate Limiting**: Sockets are expensive. Apply strict throttling on "Message" events to prevent flooding.
40
+
41
+ ## Architecture
42
+
43
+ - **Gateway != Service**: The `WebSocketGateway` should **only** handle client comms (Join Room, Ack message).
44
+ - **Rule**: Delegate business logic to a Service or Command Bus.
45
+ - **Events**: Use `AsyncApi` or `SocketApi` decorators (from community packages) to document WS events similarly to OpenAPI.
@@ -0,0 +1,13 @@
1
+ # NestJS Real-time References
2
+
3
+ ## References
4
+
5
+ - [**WebSocket Patterns**](websocket-patterns.md) - Gateways, events, rooms
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use @WebSocketGateway decorator
10
+ - [ ] Handle connection/disconnection
11
+ - [ ] Rooms for grouped messaging
12
+ - [ ] Authentication via handshake
13
+ - [ ] Proper error handling
@@ -0,0 +1,121 @@
1
+ # NestJS WebSocket Patterns
2
+
3
+ ## Gateway Setup
4
+
5
+ ```typescript
6
+ import {
7
+ WebSocketGateway,
8
+ WebSocketServer,
9
+ SubscribeMessage,
10
+ OnGatewayConnection,
11
+ OnGatewayDisconnect,
12
+ ConnectedSocket,
13
+ MessageBody,
14
+ } from '@nestjs/websockets';
15
+ import { Server, Socket } from 'socket.io';
16
+
17
+ @WebSocketGateway({
18
+ cors: { origin: '*' },
19
+ namespace: '/chat',
20
+ })
21
+ export class ChatGateway implements OnGatewayConnection, OnGatewayDisconnect {
22
+ @WebSocketServer()
23
+ server: Server;
24
+
25
+ handleConnection(client: Socket) {
26
+ console.log(`Client connected: ${client.id}`);
27
+ }
28
+
29
+ handleDisconnect(client: Socket) {
30
+ console.log(`Client disconnected: ${client.id}`);
31
+ }
32
+
33
+ @SubscribeMessage('message')
34
+ handleMessage(
35
+ @ConnectedSocket() client: Socket,
36
+ @MessageBody() data: { room: string; message: string },
37
+ ) {
38
+ this.server.to(data.room).emit('message', {
39
+ sender: client.id,
40
+ message: data.message,
41
+ });
42
+ }
43
+
44
+ @SubscribeMessage('join')
45
+ handleJoin(
46
+ @ConnectedSocket() client: Socket,
47
+ @MessageBody() room: string,
48
+ ) {
49
+ client.join(room);
50
+ client.emit('joined', room);
51
+ }
52
+ }
53
+ ```
54
+
55
+ ## Authentication
56
+
57
+ ```typescript
58
+ @WebSocketGateway()
59
+ export class AuthenticatedGateway implements OnGatewayConnection {
60
+ constructor(private authService: AuthService) {}
61
+
62
+ async handleConnection(client: Socket) {
63
+ try {
64
+ const token = client.handshake.auth.token;
65
+ const user = await this.authService.validateToken(token);
66
+ client.data.user = user;
67
+ } catch {
68
+ client.disconnect();
69
+ }
70
+ }
71
+
72
+ @SubscribeMessage('protected-event')
73
+ handleProtected(@ConnectedSocket() client: Socket) {
74
+ const user = client.data.user;
75
+ return { user: user.name };
76
+ }
77
+ }
78
+ ```
79
+
80
+ ## Broadcasting
81
+
82
+ ```typescript
83
+ @Injectable()
84
+ export class NotificationsService {
85
+ constructor(
86
+ @Inject('CHAT_GATEWAY')
87
+ private gateway: ChatGateway,
88
+ ) {}
89
+
90
+ // Broadcast to all
91
+ broadcastToAll(event: string, data: any) {
92
+ this.gateway.server.emit(event, data);
93
+ }
94
+
95
+ // To specific room
96
+ broadcastToRoom(room: string, event: string, data: any) {
97
+ this.gateway.server.to(room).emit(event, data);
98
+ }
99
+
100
+ // To specific client
101
+ sendToClient(clientId: string, event: string, data: any) {
102
+ this.gateway.server.to(clientId).emit(event, data);
103
+ }
104
+ }
105
+ ```
106
+
107
+ ## Module Setup
108
+
109
+ ```typescript
110
+ @Module({
111
+ providers: [
112
+ ChatGateway,
113
+ {
114
+ provide: 'CHAT_GATEWAY',
115
+ useExisting: ChatGateway,
116
+ },
117
+ ],
118
+ exports: ['CHAT_GATEWAY'],
119
+ })
120
+ export class WebSocketModule {}
121
+ ```
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: NestJS Scheduling
3
+ description: Distributed cron jobs and locking patterns.
4
+ metadata:
5
+ labels: [nestjs, cron, scheduling, redis]
6
+ triggers:
7
+ files: ['**/*.service.ts']
8
+ keywords: ["@Cron, CronExpression, ScheduleModule"]
9
+ ---
10
+
11
+ # Task Scheduling & Jobs
12
+
13
+ ## Distributed Cron (Critical)
14
+
15
+ - **Problem**: `@Cron()` runs on **every** instance. In K8s with 3 pods, your "Daily Report" runs 3 times.
16
+ - **Solution**: **Distributed Locking** using Redis.
17
+ - **Pattern**: Using a decorator to wrap the cron method.
18
+ - **Logic**: `SET resource_name my_random_value NX PX 30000` (Redis Atomic Set).
19
+
20
+ ## Cron Decorator Pattern
21
+
22
+ - **Implementation**:
23
+
24
+ ```typescript
25
+ @Cron(CronExpression.EVERY_MINUTE)
26
+ @DistributedLock({ key: 'send_emails', ttl: 5000 })
27
+ async handleCron() {
28
+ // Only runs if lock acquired
29
+ }
30
+ ```
31
+
32
+ - **Tools**: Use `nestjs-redlock` or custom Redis wrapper via `redlock` library.
33
+
34
+ ## Job Robustness
35
+
36
+ - **Isolation**: Never perform heavy processing inside the Cron handler.
37
+ - **Pattern**: Cron -> Push Job ID to Queue (BullMQ) -> Worker processes it.
38
+ - **Why**: Cron schedulers can get blocked by the Event Loop; Workers are scalable.
39
+ - **Error Handling**: Wrap ALL cron logic in `try/catch`. Uncaught exceptions in a Cron job can crash the entire Node process.
@@ -0,0 +1,13 @@
1
+ # NestJS Scheduling References
2
+
3
+ ## References
4
+
5
+ - [**Scheduling Patterns**](scheduling-patterns.md) - Cron jobs, intervals, timeouts, queues
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use @Cron for recurring tasks
10
+ - [ ] Use queues for heavy background jobs
11
+ - [ ] Handle job failures gracefully
12
+ - [ ] Implement distributed locking for clusters
13
+ - [ ] Monitor job execution times