@ngxtm/devkit 3.3.0 → 3.4.1

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 (345) hide show
  1. package/cli/index.js +59 -13
  2. package/cli/rules.js +248 -0
  3. package/package.json +2 -1
  4. package/rules/README.md +141 -0
  5. package/rules/dart/best-practices/SKILL.md +23 -0
  6. package/rules/dart/language/SKILL.md +52 -0
  7. package/rules/dart/tooling/SKILL.md +43 -0
  8. package/rules/dotnet/aspnet-core/SKILL.md +92 -0
  9. package/rules/dotnet/aspnet-core/references/REFERENCE.md +335 -0
  10. package/rules/dotnet/best-practices/SKILL.md +101 -0
  11. package/rules/dotnet/best-practices/references/REFERENCE.md +256 -0
  12. package/rules/dotnet/blazor/SKILL.md +146 -0
  13. package/rules/dotnet/blazor/references/REFERENCE.md +392 -0
  14. package/rules/dotnet/language/SKILL.md +82 -0
  15. package/rules/dotnet/language/references/REFERENCE.md +222 -0
  16. package/rules/dotnet/patterns.rule.md +388 -0
  17. package/rules/dotnet/razor-pages/SKILL.md +124 -0
  18. package/rules/dotnet/razor-pages/references/REFERENCE.md +321 -0
  19. package/rules/dotnet/security/SKILL.md +89 -0
  20. package/rules/dotnet/security/references/REFERENCE.md +295 -0
  21. package/rules/dotnet/tooling/SKILL.md +92 -0
  22. package/rules/dotnet/tooling/references/REFERENCE.md +300 -0
  23. package/rules/flutter/auto-route-navigation/SKILL.md +43 -0
  24. package/rules/flutter/auto-route-navigation/references/REFERENCE.md +19 -0
  25. package/rules/flutter/auto-route-navigation/references/router-config.md +62 -0
  26. package/rules/flutter/bloc-state-management/SKILL.md +64 -0
  27. package/rules/flutter/bloc-state-management/references/REFERENCE.md +20 -0
  28. package/rules/flutter/bloc-state-management/references/auth-bloc-example.md +52 -0
  29. package/rules/flutter/bloc-state-management/references/equatable-usage.md +56 -0
  30. package/rules/flutter/bloc-state-management/references/property-based-state.md +68 -0
  31. package/rules/flutter/bloc.rule.md +76 -0
  32. package/rules/flutter/cicd/SKILL.md +48 -0
  33. package/rules/flutter/cicd/references/advanced-workflow.md +66 -0
  34. package/rules/flutter/cicd/references/fastlane.md +139 -0
  35. package/rules/flutter/cicd/references/github-actions.md +59 -0
  36. package/rules/flutter/dependency-injection/SKILL.md +42 -0
  37. package/rules/flutter/dependency-injection/references/REFERENCE.md +15 -0
  38. package/rules/flutter/dependency-injection/references/modules.md +37 -0
  39. package/rules/flutter/error-handling/SKILL.md +32 -0
  40. package/rules/flutter/error-handling/references/REFERENCE.md +19 -0
  41. package/rules/flutter/error-handling/references/error-mapping.md +31 -0
  42. package/rules/flutter/feature-based-clean-architecture/SKILL.md +46 -0
  43. package/rules/flutter/feature-based-clean-architecture/references/REFERENCE.md +14 -0
  44. package/rules/flutter/feature-based-clean-architecture/references/folder-structure.md +36 -0
  45. package/rules/flutter/getx-navigation/SKILL.md +70 -0
  46. package/rules/flutter/getx-navigation/references/app-pages.md +40 -0
  47. package/rules/flutter/getx-navigation/references/middleware-example.md +29 -0
  48. package/rules/flutter/getx-state-management/SKILL.md +76 -0
  49. package/rules/flutter/getx-state-management/references/binding-example.md +32 -0
  50. package/rules/flutter/getx-state-management/references/reactive-vs-simple.md +39 -0
  51. package/rules/flutter/go-router-navigation/SKILL.md +57 -0
  52. package/rules/flutter/idiomatic-flutter/SKILL.md +20 -0
  53. package/rules/flutter/layer-based-clean-architecture/SKILL.md +50 -0
  54. package/rules/flutter/layer-based-clean-architecture/references/REFERENCE.md +60 -0
  55. package/rules/flutter/layer-based-clean-architecture/references/repository-mapping.md +50 -0
  56. package/rules/flutter/localization/SKILL.md +50 -0
  57. package/rules/flutter/localization/references/REFERENCE.md +48 -0
  58. package/rules/flutter/localization/references/sheet-loader.md +33 -0
  59. package/rules/flutter/navigator-v1-navigation/SKILL.md +71 -0
  60. package/rules/flutter/navigator-v1-navigation/references/on-generate-route.md +48 -0
  61. package/rules/flutter/performance/SKILL.md +24 -0
  62. package/rules/flutter/retrofit-networking/SKILL.md +51 -0
  63. package/rules/flutter/retrofit-networking/references/REFERENCE.md +19 -0
  64. package/rules/flutter/retrofit-networking/references/token-refresh.md +40 -0
  65. package/rules/flutter/riverpod-state-management/SKILL.md +53 -0
  66. package/rules/flutter/riverpod-state-management/references/architecture.md +124 -0
  67. package/rules/flutter/riverpod-state-management/references/best-practices.md +89 -0
  68. package/rules/flutter/riverpod-state-management/references/testing.md +73 -0
  69. package/rules/flutter/riverpod.rule.md +78 -0
  70. package/rules/flutter/security/SKILL.md +33 -0
  71. package/rules/flutter/security/references/REFERENCE.md +15 -0
  72. package/rules/flutter/security/references/network-security.md +28 -0
  73. package/rules/flutter/testing/SKILL.md +44 -0
  74. package/rules/flutter/testing/references/REFERENCE.md +21 -0
  75. package/rules/flutter/testing/references/bloc-testing.md +38 -0
  76. package/rules/flutter/testing/references/integration-testing.md +128 -0
  77. package/rules/flutter/testing/references/robot-pattern.md +82 -0
  78. package/rules/flutter/testing/references/unit-testing.md +130 -0
  79. package/rules/flutter/testing/references/widget-testing.md +120 -0
  80. package/rules/flutter/widgets/SKILL.md +37 -0
  81. package/rules/golang/chi-router/SKILL.md +219 -0
  82. package/rules/golang/chi-router/references/REFERENCE.md +13 -0
  83. package/rules/golang/chi-router/references/routing-patterns.md +205 -0
  84. package/rules/golang/cobra-cli/SKILL.md +227 -0
  85. package/rules/golang/cobra-cli/references/REFERENCE.md +13 -0
  86. package/rules/golang/cobra-cli/references/command-patterns.md +224 -0
  87. package/rules/golang/core/SKILL.md +210 -0
  88. package/rules/golang/core/references/REFERENCE.md +14 -0
  89. package/rules/golang/core/references/concurrency-patterns.md +114 -0
  90. package/rules/golang/core/references/error-handling.md +87 -0
  91. package/rules/golang/echo-framework/SKILL.md +215 -0
  92. package/rules/golang/echo-framework/references/REFERENCE.md +14 -0
  93. package/rules/golang/echo-framework/references/middleware-patterns.md +141 -0
  94. package/rules/golang/echo-framework/references/routing-patterns.md +140 -0
  95. package/rules/golang/ent-orm/SKILL.md +239 -0
  96. package/rules/golang/ent-orm/references/REFERENCE.md +13 -0
  97. package/rules/golang/ent-orm/references/schema-patterns.md +255 -0
  98. package/rules/golang/fiber-framework/SKILL.md +196 -0
  99. package/rules/golang/fiber-framework/references/REFERENCE.md +13 -0
  100. package/rules/golang/fiber-framework/references/routing-patterns.md +191 -0
  101. package/rules/golang/gin-framework/SKILL.md +205 -0
  102. package/rules/golang/gin-framework/references/REFERENCE.md +14 -0
  103. package/rules/golang/gin-framework/references/middleware-patterns.md +119 -0
  104. package/rules/golang/gorm-orm/SKILL.md +196 -0
  105. package/rules/golang/gorm-orm/references/REFERENCE.md +14 -0
  106. package/rules/golang/gorm-orm/references/model-definitions.md +167 -0
  107. package/rules/golang/gorm-orm/references/query-patterns.md +161 -0
  108. package/rules/golang/grpc/SKILL.md +231 -0
  109. package/rules/golang/grpc/references/REFERENCE.md +13 -0
  110. package/rules/golang/grpc/references/service-patterns.md +276 -0
  111. package/rules/golang/testify/SKILL.md +239 -0
  112. package/rules/golang/testify/references/REFERENCE.md +13 -0
  113. package/rules/golang/testify/references/assert-patterns.md +170 -0
  114. package/rules/golang/validator/SKILL.md +234 -0
  115. package/rules/golang/validator/references/REFERENCE.md +13 -0
  116. package/rules/golang/validator/references/validation-tags.md +211 -0
  117. package/rules/golang/viper-config/SKILL.md +244 -0
  118. package/rules/golang/viper-config/references/REFERENCE.md +13 -0
  119. package/rules/golang/viper-config/references/config-loading.md +181 -0
  120. package/rules/golang/wire-di/SKILL.md +243 -0
  121. package/rules/golang/wire-di/references/REFERENCE.md +13 -0
  122. package/rules/golang/wire-di/references/provider-patterns.md +193 -0
  123. package/rules/golang/zap-logging/SKILL.md +203 -0
  124. package/rules/golang/zap-logging/references/REFERENCE.md +13 -0
  125. package/rules/golang/zap-logging/references/logger-config.md +165 -0
  126. package/rules/java/build-gradle/SKILL.md +92 -0
  127. package/rules/java/build-gradle/references/REFERENCE.md +14 -0
  128. package/rules/java/build-gradle/references/kotlin-dsl.md +118 -0
  129. package/rules/java/build-gradle/references/task-configuration.md +132 -0
  130. package/rules/java/build-maven/SKILL.md +86 -0
  131. package/rules/java/build-maven/references/REFERENCE.md +14 -0
  132. package/rules/java/build-maven/references/dependency-management.md +111 -0
  133. package/rules/java/build-maven/references/lifecycle-phases.md +114 -0
  134. package/rules/java/graalvm-native/SKILL.md +105 -0
  135. package/rules/java/graalvm-native/references/REFERENCE.md +12 -0
  136. package/rules/java/java-collections-streams/SKILL.md +148 -0
  137. package/rules/java/java-collections-streams/references/REFERENCE.md +15 -0
  138. package/rules/java/java-collections-streams/references/collectors-patterns.md +178 -0
  139. package/rules/java/java-collections-streams/references/stream-pipelines.md +165 -0
  140. package/rules/java/java-concurrency/SKILL.md +187 -0
  141. package/rules/java/java-concurrency/references/REFERENCE.md +17 -0
  142. package/rules/java/java-concurrency/references/completable-future.md +165 -0
  143. package/rules/java/java-concurrency/references/executor-patterns.md +176 -0
  144. package/rules/java/java-concurrency/references/virtual-threads.md +190 -0
  145. package/rules/java/java-core-language/SKILL.md +121 -0
  146. package/rules/java/java-core-language/references/REFERENCE.md +15 -0
  147. package/rules/java/java-core-language/references/jvm-memory-model.md +160 -0
  148. package/rules/java/java-core-language/references/modern-java-features.md +168 -0
  149. package/rules/java/java-project-structure/SKILL.md +195 -0
  150. package/rules/java/java-project-structure/references/REFERENCE.md +15 -0
  151. package/rules/java/java-project-structure/references/maven-project-layout.md +199 -0
  152. package/rules/java/java-project-structure/references/module-system.md +159 -0
  153. package/rules/java/micronaut-core/SKILL.md +99 -0
  154. package/rules/java/micronaut-core/references/REFERENCE.md +12 -0
  155. package/rules/java/micronaut-reactive/SKILL.md +68 -0
  156. package/rules/java/micronaut-reactive/references/REFERENCE.md +12 -0
  157. package/rules/java/quarkus-core/SKILL.md +85 -0
  158. package/rules/java/quarkus-core/references/REFERENCE.md +12 -0
  159. package/rules/java/quarkus-reactive/SKILL.md +67 -0
  160. package/rules/java/quarkus-reactive/references/REFERENCE.md +12 -0
  161. package/rules/java/spring-batch/SKILL.md +102 -0
  162. package/rules/java/spring-batch/references/REFERENCE.md +12 -0
  163. package/rules/java/spring-boot-architecture/SKILL.md +206 -0
  164. package/rules/java/spring-boot-architecture/references/REFERENCE.md +15 -0
  165. package/rules/java/spring-boot-architecture/references/auto-configuration.md +158 -0
  166. package/rules/java/spring-boot-architecture/references/configuration-properties.md +202 -0
  167. package/rules/java/spring-boot-web/SKILL.md +217 -0
  168. package/rules/java/spring-boot-web/references/REFERENCE.md +17 -0
  169. package/rules/java/spring-cloud/SKILL.md +109 -0
  170. package/rules/java/spring-cloud/references/REFERENCE.md +13 -0
  171. package/rules/java/spring-data-jpa/SKILL.md +241 -0
  172. package/rules/java/spring-data-jpa/references/REFERENCE.md +16 -0
  173. package/rules/java/spring-security/SKILL.md +161 -0
  174. package/rules/java/spring-security/references/REFERENCE.md +16 -0
  175. package/rules/java/spring-security/references/jwt-auth-flow.md +213 -0
  176. package/rules/java/testing-junit-mockito/SKILL.md +135 -0
  177. package/rules/java/testing-junit-mockito/references/REFERENCE.md +15 -0
  178. package/rules/java/testing-junit-mockito/references/junit5-patterns.md +159 -0
  179. package/rules/java/testing-junit-mockito/references/mockito-patterns.md +148 -0
  180. package/rules/java/testing-junit-mockito/references/spring-boot-testing.md +152 -0
  181. package/rules/javascript/best-practices/SKILL.md +64 -0
  182. package/rules/javascript/best-practices/references/REFERENCE.md +91 -0
  183. package/rules/javascript/language/SKILL.md +71 -0
  184. package/rules/javascript/language/references/REFERENCE.md +106 -0
  185. package/rules/javascript/tooling/SKILL.md +60 -0
  186. package/rules/javascript/tooling/references/REFERENCE.md +107 -0
  187. package/rules/metadata.json +54 -0
  188. package/rules/nestjs/api-standards/SKILL.md +47 -0
  189. package/rules/nestjs/api-standards/references/pagination-wrapper.md +87 -0
  190. package/rules/nestjs/architecture/SKILL.md +68 -0
  191. package/rules/nestjs/architecture/references/dynamic-module.md +53 -0
  192. package/rules/nestjs/caching/SKILL.md +51 -0
  193. package/rules/nestjs/caching/references/REFERENCE.md +13 -0
  194. package/rules/nestjs/caching/references/cache-patterns.md +183 -0
  195. package/rules/nestjs/configuration/SKILL.md +41 -0
  196. package/rules/nestjs/configuration/references/REFERENCE.md +13 -0
  197. package/rules/nestjs/configuration/references/config-patterns.md +184 -0
  198. package/rules/nestjs/controllers-services/SKILL.md +63 -0
  199. package/rules/nestjs/controllers-services/references/REFERENCE.md +14 -0
  200. package/rules/nestjs/controllers-services/references/controller-patterns.md +119 -0
  201. package/rules/nestjs/controllers-services/references/service-patterns.md +129 -0
  202. package/rules/nestjs/database/SKILL.md +102 -0
  203. package/rules/nestjs/database/references/REFERENCE.md +14 -0
  204. package/rules/nestjs/database/references/typeorm-patterns.md +156 -0
  205. package/rules/nestjs/deployment/SKILL.md +36 -0
  206. package/rules/nestjs/deployment/references/REFERENCE.md +13 -0
  207. package/rules/nestjs/deployment/references/deployment-patterns.md +140 -0
  208. package/rules/nestjs/documentation/SKILL.md +64 -0
  209. package/rules/nestjs/documentation/references/REFERENCE.md +13 -0
  210. package/rules/nestjs/documentation/references/swagger-patterns.md +139 -0
  211. package/rules/nestjs/error-handling/SKILL.md +55 -0
  212. package/rules/nestjs/error-handling/references/REFERENCE.md +13 -0
  213. package/rules/nestjs/error-handling/references/exception-filters.md +152 -0
  214. package/rules/nestjs/file-uploads/SKILL.md +35 -0
  215. package/rules/nestjs/file-uploads/references/REFERENCE.md +13 -0
  216. package/rules/nestjs/file-uploads/references/upload-patterns.md +125 -0
  217. package/rules/nestjs/observability/SKILL.md +39 -0
  218. package/rules/nestjs/observability/references/REFERENCE.md +13 -0
  219. package/rules/nestjs/observability/references/logging-metrics.md +175 -0
  220. package/rules/nestjs/performance/SKILL.md +60 -0
  221. package/rules/nestjs/performance/references/REFERENCE.md +13 -0
  222. package/rules/nestjs/performance/references/performance-patterns.md +107 -0
  223. package/rules/nestjs/real-time/SKILL.md +45 -0
  224. package/rules/nestjs/real-time/references/REFERENCE.md +13 -0
  225. package/rules/nestjs/real-time/references/websocket-patterns.md +121 -0
  226. package/rules/nestjs/scheduling/SKILL.md +39 -0
  227. package/rules/nestjs/scheduling/references/REFERENCE.md +13 -0
  228. package/rules/nestjs/scheduling/references/scheduling-patterns.md +137 -0
  229. package/rules/nestjs/search/SKILL.md +41 -0
  230. package/rules/nestjs/search/references/REFERENCE.md +13 -0
  231. package/rules/nestjs/search/references/search-patterns.md +137 -0
  232. package/rules/nestjs/security/SKILL.md +87 -0
  233. package/rules/nestjs/security/references/REFERENCE.md +14 -0
  234. package/rules/nestjs/security/references/authentication.md +151 -0
  235. package/rules/nestjs/testing/SKILL.md +40 -0
  236. package/rules/nestjs/testing/references/REFERENCE.md +14 -0
  237. package/rules/nestjs/testing/references/unit-testing.md +179 -0
  238. package/rules/nestjs/transport/SKILL.md +45 -0
  239. package/rules/nestjs/transport/references/REFERENCE.md +13 -0
  240. package/rules/nestjs/transport/references/microservices-patterns.md +170 -0
  241. package/rules/nextjs/app-router/SKILL.md +46 -0
  242. package/rules/nextjs/app-router/references/REFERENCE.md +14 -0
  243. package/rules/nextjs/app-router/references/routing-patterns.md +182 -0
  244. package/rules/nextjs/architecture/SKILL.md +44 -0
  245. package/rules/nextjs/architecture/references/fsd-structure.md +77 -0
  246. package/rules/nextjs/authentication/SKILL.md +29 -0
  247. package/rules/nextjs/authentication/references/auth-implementation.md +73 -0
  248. package/rules/nextjs/caching/SKILL.md +66 -0
  249. package/rules/nextjs/caching/references/REFERENCE.md +13 -0
  250. package/rules/nextjs/caching/references/cache-strategies.md +168 -0
  251. package/rules/nextjs/data-access-layer/SKILL.md +33 -0
  252. package/rules/nextjs/data-access-layer/references/patterns.md +66 -0
  253. package/rules/nextjs/data-fetching/SKILL.md +59 -0
  254. package/rules/nextjs/data-fetching/references/REFERENCE.md +13 -0
  255. package/rules/nextjs/data-fetching/references/fetch-patterns.md +160 -0
  256. package/rules/nextjs/internationalization/SKILL.md +105 -0
  257. package/rules/nextjs/internationalization/references/REFERENCE.md +13 -0
  258. package/rules/nextjs/internationalization/references/i18n-patterns.md +180 -0
  259. package/rules/nextjs/optimization/SKILL.md +64 -0
  260. package/rules/nextjs/optimization/references/REFERENCE.md +13 -0
  261. package/rules/nextjs/optimization/references/optimization-patterns.md +190 -0
  262. package/rules/nextjs/rendering/SKILL.md +91 -0
  263. package/rules/nextjs/rendering/references/REFERENCE.md +13 -0
  264. package/rules/nextjs/rendering/references/rendering-modes.md +163 -0
  265. package/rules/nextjs/server-actions/SKILL.md +46 -0
  266. package/rules/nextjs/server-actions/references/REFERENCE.md +13 -0
  267. package/rules/nextjs/server-actions/references/action-patterns.md +188 -0
  268. package/rules/nextjs/server-components/SKILL.md +52 -0
  269. package/rules/nextjs/server-components/references/REFERENCE.md +13 -0
  270. package/rules/nextjs/server-components/references/component-patterns.md +175 -0
  271. package/rules/nextjs/state-management/SKILL.md +73 -0
  272. package/rules/nextjs/state-management/references/REFERENCE.md +13 -0
  273. package/rules/nextjs/state-management/references/state-patterns.md +218 -0
  274. package/rules/nextjs/styling/SKILL.md +31 -0
  275. package/rules/nextjs/styling/references/implementation.md +56 -0
  276. package/rules/react/component-patterns/SKILL.md +66 -0
  277. package/rules/react/component-patterns/references/REFERENCE.md +126 -0
  278. package/rules/react/hooks/SKILL.md +60 -0
  279. package/rules/react/hooks/references/REFERENCE.md +132 -0
  280. package/rules/react/hooks.rule.md +79 -0
  281. package/rules/react/performance/SKILL.md +69 -0
  282. package/rules/react/performance/references/REFERENCE.md +143 -0
  283. package/rules/react/security/SKILL.md +46 -0
  284. package/rules/react/security/references/REFERENCE.md +170 -0
  285. package/rules/react/state-management/SKILL.md +56 -0
  286. package/rules/react/state-management/references/REFERENCE.md +137 -0
  287. package/rules/react/testing/SKILL.md +45 -0
  288. package/rules/react/testing/references/REFERENCE.md +149 -0
  289. package/rules/react/tooling/SKILL.md +39 -0
  290. package/rules/react/typescript/SKILL.md +53 -0
  291. package/rules/rust/actix-web/SKILL.md +160 -0
  292. package/rules/rust/actix-web/references/REFERENCE.md +13 -0
  293. package/rules/rust/actix-web/references/handler-patterns.md +198 -0
  294. package/rules/rust/async-graphql/SKILL.md +228 -0
  295. package/rules/rust/async-graphql/references/REFERENCE.md +13 -0
  296. package/rules/rust/async-graphql/references/schema-patterns.md +215 -0
  297. package/rules/rust/axum/SKILL.md +161 -0
  298. package/rules/rust/axum/references/REFERENCE.md +14 -0
  299. package/rules/rust/axum/references/handler-patterns.md +97 -0
  300. package/rules/rust/bevy/SKILL.md +206 -0
  301. package/rules/rust/bevy/references/REFERENCE.md +13 -0
  302. package/rules/rust/bevy/references/ecs-patterns.md +226 -0
  303. package/rules/rust/clap/SKILL.md +217 -0
  304. package/rules/rust/clap/references/REFERENCE.md +13 -0
  305. package/rules/rust/clap/references/derive-patterns.md +205 -0
  306. package/rules/rust/core/SKILL.md +154 -0
  307. package/rules/rust/core/references/REFERENCE.md +14 -0
  308. package/rules/rust/core/references/error-handling.md +92 -0
  309. package/rules/rust/diesel-orm/SKILL.md +176 -0
  310. package/rules/rust/diesel-orm/references/REFERENCE.md +13 -0
  311. package/rules/rust/diesel-orm/references/schema-patterns.md +206 -0
  312. package/rules/rust/rocket/SKILL.md +182 -0
  313. package/rules/rust/rocket/references/REFERENCE.md +13 -0
  314. package/rules/rust/rocket/references/handler-patterns.md +209 -0
  315. package/rules/rust/sea-orm/SKILL.md +230 -0
  316. package/rules/rust/sea-orm/references/REFERENCE.md +13 -0
  317. package/rules/rust/sea-orm/references/entity-patterns.md +221 -0
  318. package/rules/rust/serde-serialization/SKILL.md +150 -0
  319. package/rules/rust/serde-serialization/references/REFERENCE.md +13 -0
  320. package/rules/rust/serde-serialization/references/serialization-patterns.md +199 -0
  321. package/rules/rust/sqlx-database/SKILL.md +140 -0
  322. package/rules/rust/sqlx-database/references/REFERENCE.md +13 -0
  323. package/rules/rust/sqlx-database/references/query-patterns.md +210 -0
  324. package/rules/rust/tauri/SKILL.md +180 -0
  325. package/rules/rust/tauri/references/REFERENCE.md +13 -0
  326. package/rules/rust/tauri/references/command-patterns.md +209 -0
  327. package/rules/rust/tokio-runtime/SKILL.md +167 -0
  328. package/rules/rust/tokio-runtime/references/REFERENCE.md +14 -0
  329. package/rules/rust/tokio-runtime/references/async-patterns.md +137 -0
  330. package/rules/rust/tokio-runtime/references/synchronization.md +152 -0
  331. package/rules/rust/tonic/SKILL.md +231 -0
  332. package/rules/rust/tonic/references/REFERENCE.md +13 -0
  333. package/rules/rust/tonic/references/service-patterns.md +213 -0
  334. package/rules/rust/tracing/SKILL.md +214 -0
  335. package/rules/rust/tracing/references/REFERENCE.md +13 -0
  336. package/rules/rust/tracing/references/instrumentation.md +187 -0
  337. package/rules/typescript/best-practices/SKILL.md +108 -0
  338. package/rules/typescript/best-practices/references/REFERENCE.md +68 -0
  339. package/rules/typescript/language/SKILL.md +72 -0
  340. package/rules/typescript/language/references/REFERENCE.md +67 -0
  341. package/rules/typescript/patterns.rule.md +85 -0
  342. package/rules/typescript/security/SKILL.md +59 -0
  343. package/rules/typescript/security/references/REFERENCE.md +113 -0
  344. package/rules/typescript/tooling/SKILL.md +52 -0
  345. package/rules/typescript/tooling/references/REFERENCE.md +110 -0
@@ -0,0 +1,388 @@
1
+ ---
2
+ id: dotnet-patterns
3
+ version: 1.0.0
4
+ triggers:
5
+ files: ['**/*.cs']
6
+ keywords: [Result, Repository, CQRS, MediatR, Handler, Command, Query]
7
+ ---
8
+
9
+ # .NET Design Patterns
10
+
11
+ Common architectural and design patterns for .NET applications.
12
+
13
+ ## Result Pattern
14
+
15
+ Explicit success/failure handling without exceptions for expected failures.
16
+
17
+ ```csharp
18
+ public readonly struct Result<T>
19
+ {
20
+ public bool IsSuccess { get; }
21
+ public T? Value { get; }
22
+ public string? Error { get; }
23
+
24
+ private Result(T value) => (IsSuccess, Value) = (true, value);
25
+ private Result(string error) => (IsSuccess, Error) = (false, error);
26
+
27
+ public static Result<T> Success(T value) => new(value);
28
+ public static Result<T> Failure(string error) => new(error);
29
+
30
+ public TResult Match<TResult>(
31
+ Func<T, TResult> onSuccess,
32
+ Func<string, TResult> onFailure) =>
33
+ IsSuccess ? onSuccess(Value!) : onFailure(Error!);
34
+ }
35
+
36
+ // Usage
37
+ public async Task<Result<User>> GetUserAsync(int id)
38
+ {
39
+ var user = await _repo.FindAsync(id);
40
+ return user is null
41
+ ? Result<User>.Failure("User not found")
42
+ : Result<User>.Success(user);
43
+ }
44
+
45
+ // In controller
46
+ var result = await _service.GetUserAsync(id);
47
+ return result.Match<IActionResult>(
48
+ user => Ok(user),
49
+ error => NotFound(new { error }));
50
+ ```
51
+
52
+ ## Repository Pattern
53
+
54
+ Abstract data access with a generic interface.
55
+
56
+ ```csharp
57
+ public interface IRepository<T> where T : class, IEntity
58
+ {
59
+ Task<T?> GetByIdAsync(int id, CancellationToken ct = default);
60
+ Task<IReadOnlyList<T>> GetAllAsync(CancellationToken ct = default);
61
+ Task<T> AddAsync(T entity, CancellationToken ct = default);
62
+ Task UpdateAsync(T entity, CancellationToken ct = default);
63
+ Task DeleteAsync(T entity, CancellationToken ct = default);
64
+ }
65
+
66
+ public class Repository<T>(AppDbContext context) : IRepository<T>
67
+ where T : class, IEntity
68
+ {
69
+ protected readonly DbSet<T> DbSet = context.Set<T>();
70
+
71
+ public virtual async Task<T?> GetByIdAsync(int id, CancellationToken ct = default) =>
72
+ await DbSet.FindAsync([id], ct);
73
+
74
+ public virtual async Task<IReadOnlyList<T>> GetAllAsync(CancellationToken ct = default) =>
75
+ await DbSet.ToListAsync(ct);
76
+
77
+ public virtual async Task<T> AddAsync(T entity, CancellationToken ct = default)
78
+ {
79
+ await DbSet.AddAsync(entity, ct);
80
+ await context.SaveChangesAsync(ct);
81
+ return entity;
82
+ }
83
+
84
+ public virtual async Task UpdateAsync(T entity, CancellationToken ct = default)
85
+ {
86
+ DbSet.Update(entity);
87
+ await context.SaveChangesAsync(ct);
88
+ }
89
+
90
+ public virtual async Task DeleteAsync(T entity, CancellationToken ct = default)
91
+ {
92
+ DbSet.Remove(entity);
93
+ await context.SaveChangesAsync(ct);
94
+ }
95
+ }
96
+ ```
97
+
98
+ ## CQRS with MediatR
99
+
100
+ Separate read (Query) and write (Command) operations.
101
+
102
+ ```csharp
103
+ // Command
104
+ public record CreateOrderCommand(int UserId, List<OrderItemDto> Items)
105
+ : IRequest<Result<int>>;
106
+
107
+ public class CreateOrderHandler(
108
+ IOrderRepository repo,
109
+ IUnitOfWork uow,
110
+ ILogger<CreateOrderHandler> logger)
111
+ : IRequestHandler<CreateOrderCommand, Result<int>>
112
+ {
113
+ public async Task<Result<int>> Handle(
114
+ CreateOrderCommand request,
115
+ CancellationToken ct)
116
+ {
117
+ var order = Order.Create(request.UserId, request.Items);
118
+
119
+ if (order.IsFailure)
120
+ return Result<int>.Failure(order.Error!);
121
+
122
+ await repo.AddAsync(order.Value!, ct);
123
+ await uow.SaveChangesAsync(ct);
124
+
125
+ logger.LogInformation("Order {OrderId} created", order.Value!.Id);
126
+
127
+ return Result<int>.Success(order.Value!.Id);
128
+ }
129
+ }
130
+
131
+ // Query
132
+ public record GetOrderQuery(int OrderId) : IRequest<OrderDto?>;
133
+
134
+ public class GetOrderHandler(IOrderRepository repo)
135
+ : IRequestHandler<GetOrderQuery, OrderDto?>
136
+ {
137
+ public async Task<OrderDto?> Handle(GetOrderQuery request, CancellationToken ct) =>
138
+ await repo.GetDtoByIdAsync(request.OrderId, ct);
139
+ }
140
+
141
+ // Controller usage
142
+ [ApiController]
143
+ [Route("api/orders")]
144
+ public class OrdersController(ISender mediator) : ControllerBase
145
+ {
146
+ [HttpPost]
147
+ public async Task<IActionResult> Create(CreateOrderRequest request)
148
+ {
149
+ var command = new CreateOrderCommand(request.UserId, request.Items);
150
+ var result = await mediator.Send(command);
151
+
152
+ return result.Match<IActionResult>(
153
+ id => CreatedAtAction(nameof(Get), new { id }, null),
154
+ error => BadRequest(new { error }));
155
+ }
156
+
157
+ [HttpGet("{id:int}")]
158
+ public async Task<IActionResult> Get(int id)
159
+ {
160
+ var order = await mediator.Send(new GetOrderQuery(id));
161
+ return order is null ? NotFound() : Ok(order);
162
+ }
163
+ }
164
+ ```
165
+
166
+ ## Options Pattern
167
+
168
+ Strongly-typed configuration with validation.
169
+
170
+ ```csharp
171
+ public class EmailSettings
172
+ {
173
+ public const string SectionName = "Email";
174
+
175
+ [Required]
176
+ public string SmtpHost { get; init; } = string.Empty;
177
+
178
+ [Range(1, 65535)]
179
+ public int SmtpPort { get; init; } = 587;
180
+
181
+ [Required, EmailAddress]
182
+ public string FromAddress { get; init; } = string.Empty;
183
+
184
+ public bool UseSsl { get; init; } = true;
185
+ }
186
+
187
+ // Registration with validation
188
+ builder.Services.AddOptions<EmailSettings>()
189
+ .BindConfiguration(EmailSettings.SectionName)
190
+ .ValidateDataAnnotations()
191
+ .ValidateOnStart();
192
+
193
+ // Usage
194
+ public class EmailService(IOptions<EmailSettings> options)
195
+ {
196
+ private readonly EmailSettings _settings = options.Value;
197
+
198
+ public async Task SendAsync(string to, string subject, string body)
199
+ {
200
+ using var client = new SmtpClient(_settings.SmtpHost, _settings.SmtpPort);
201
+ client.EnableSsl = _settings.UseSsl;
202
+ // Send email...
203
+ }
204
+ }
205
+ ```
206
+
207
+ ## Specification Pattern
208
+
209
+ Encapsulate query logic for reuse and composition.
210
+
211
+ ```csharp
212
+ public abstract class Specification<T>
213
+ {
214
+ public abstract Expression<Func<T, bool>> ToExpression();
215
+
216
+ public bool IsSatisfiedBy(T entity) =>
217
+ ToExpression().Compile()(entity);
218
+
219
+ public Specification<T> And(Specification<T> other) =>
220
+ new AndSpecification<T>(this, other);
221
+
222
+ public Specification<T> Or(Specification<T> other) =>
223
+ new OrSpecification<T>(this, other);
224
+
225
+ public Specification<T> Not() =>
226
+ new NotSpecification<T>(this);
227
+ }
228
+
229
+ public class AndSpecification<T>(Specification<T> left, Specification<T> right)
230
+ : Specification<T>
231
+ {
232
+ public override Expression<Func<T, bool>> ToExpression()
233
+ {
234
+ var leftExpr = left.ToExpression();
235
+ var rightExpr = right.ToExpression();
236
+
237
+ var param = Expression.Parameter(typeof(T));
238
+ var body = Expression.AndAlso(
239
+ Expression.Invoke(leftExpr, param),
240
+ Expression.Invoke(rightExpr, param));
241
+
242
+ return Expression.Lambda<Func<T, bool>>(body, param);
243
+ }
244
+ }
245
+
246
+ // Concrete specifications
247
+ public class ActiveUserSpec : Specification<User>
248
+ {
249
+ public override Expression<Func<User, bool>> ToExpression() =>
250
+ user => user.IsActive && !user.IsDeleted;
251
+ }
252
+
253
+ public class UserInRoleSpec(string role) : Specification<User>
254
+ {
255
+ public override Expression<Func<User, bool>> ToExpression() =>
256
+ user => user.Role == role;
257
+ }
258
+
259
+ // Usage
260
+ var spec = new ActiveUserSpec().And(new UserInRoleSpec("Admin"));
261
+ var admins = await _context.Users.Where(spec.ToExpression()).ToListAsync();
262
+ ```
263
+
264
+ ## Unit of Work
265
+
266
+ Coordinate multiple repositories in a transaction.
267
+
268
+ ```csharp
269
+ public interface IUnitOfWork : IAsyncDisposable
270
+ {
271
+ IUserRepository Users { get; }
272
+ IOrderRepository Orders { get; }
273
+ IProductRepository Products { get; }
274
+
275
+ Task<int> SaveChangesAsync(CancellationToken ct = default);
276
+ Task BeginTransactionAsync(CancellationToken ct = default);
277
+ Task CommitAsync(CancellationToken ct = default);
278
+ Task RollbackAsync(CancellationToken ct = default);
279
+ }
280
+
281
+ public class UnitOfWork(AppDbContext context) : IUnitOfWork
282
+ {
283
+ private IDbContextTransaction? _transaction;
284
+ private IUserRepository? _users;
285
+ private IOrderRepository? _orders;
286
+ private IProductRepository? _products;
287
+
288
+ public IUserRepository Users => _users ??= new UserRepository(context);
289
+ public IOrderRepository Orders => _orders ??= new OrderRepository(context);
290
+ public IProductRepository Products => _products ??= new ProductRepository(context);
291
+
292
+ public Task<int> SaveChangesAsync(CancellationToken ct = default) =>
293
+ context.SaveChangesAsync(ct);
294
+
295
+ public async Task BeginTransactionAsync(CancellationToken ct = default) =>
296
+ _transaction = await context.Database.BeginTransactionAsync(ct);
297
+
298
+ public async Task CommitAsync(CancellationToken ct = default)
299
+ {
300
+ await context.SaveChangesAsync(ct);
301
+ if (_transaction is not null)
302
+ await _transaction.CommitAsync(ct);
303
+ }
304
+
305
+ public async Task RollbackAsync(CancellationToken ct = default)
306
+ {
307
+ if (_transaction is not null)
308
+ await _transaction.RollbackAsync(ct);
309
+ }
310
+
311
+ public async ValueTask DisposeAsync()
312
+ {
313
+ if (_transaction is not null)
314
+ await _transaction.DisposeAsync();
315
+ await context.DisposeAsync();
316
+ }
317
+ }
318
+
319
+ // Usage
320
+ public class OrderService(IUnitOfWork uow)
321
+ {
322
+ public async Task<Result<int>> CreateOrderWithInventoryUpdate(
323
+ CreateOrderCommand command, CancellationToken ct)
324
+ {
325
+ await uow.BeginTransactionAsync(ct);
326
+
327
+ try
328
+ {
329
+ var order = new Order(command.UserId);
330
+
331
+ foreach (var item in command.Items)
332
+ {
333
+ var product = await uow.Products.GetByIdAsync(item.ProductId, ct);
334
+ if (product is null || product.Stock < item.Quantity)
335
+ {
336
+ await uow.RollbackAsync(ct);
337
+ return Result<int>.Failure("Insufficient stock");
338
+ }
339
+
340
+ product.Stock -= item.Quantity;
341
+ order.AddItem(product, item.Quantity);
342
+ }
343
+
344
+ await uow.Orders.AddAsync(order, ct);
345
+ await uow.CommitAsync(ct);
346
+
347
+ return Result<int>.Success(order.Id);
348
+ }
349
+ catch
350
+ {
351
+ await uow.RollbackAsync(ct);
352
+ throw;
353
+ }
354
+ }
355
+ }
356
+ ```
357
+
358
+ ## Factory Pattern
359
+
360
+ Encapsulate object creation logic.
361
+
362
+ ```csharp
363
+ public interface INotificationFactory
364
+ {
365
+ INotification Create(NotificationType type);
366
+ }
367
+
368
+ public class NotificationFactory(IServiceProvider services) : INotificationFactory
369
+ {
370
+ public INotification Create(NotificationType type) => type switch
371
+ {
372
+ NotificationType.Email => services.GetRequiredService<EmailNotification>(),
373
+ NotificationType.Sms => services.GetRequiredService<SmsNotification>(),
374
+ NotificationType.Push => services.GetRequiredService<PushNotification>(),
375
+ _ => throw new ArgumentException($"Unknown notification type: {type}")
376
+ };
377
+ }
378
+
379
+ // Registration
380
+ builder.Services.AddTransient<EmailNotification>();
381
+ builder.Services.AddTransient<SmsNotification>();
382
+ builder.Services.AddTransient<PushNotification>();
383
+ builder.Services.AddSingleton<INotificationFactory, NotificationFactory>();
384
+ ```
385
+
386
+ ## Related Topics
387
+
388
+ See also: [language](language/SKILL.md) | [best-practices](best-practices/SKILL.md) | [aspnet-core](aspnet-core/SKILL.md)
@@ -0,0 +1,124 @@
1
+ ---
2
+ name: Razor Pages
3
+ description: ASP.NET Core Razor Pages patterns for server-rendered web apps.
4
+ metadata:
5
+ labels: [razor, mvc, aspnet, web]
6
+ triggers:
7
+ files: ['**/*.cshtml', '**/*.cshtml.cs']
8
+ keywords: [PageModel, OnGet, OnPost, asp-for, asp-action]
9
+ ---
10
+
11
+ # Razor Pages
12
+
13
+ ## **Priority: P1 (OPERATIONAL)**
14
+
15
+ ASP.NET Core Razor Pages patterns for server-rendered web applications.
16
+
17
+ ## Implementation Guidelines
18
+
19
+ - **PageModel**: Keep logic in PageModel, not in `.cshtml`. Use handlers (`OnGet`, `OnPost`).
20
+ - **Model Binding**: Use `[BindProperty]` for form data. `[FromQuery]` for query params.
21
+ - **Tag Helpers**: Use `asp-for`, `asp-action`, `asp-route-*` for type-safe HTML.
22
+ - **Partial Views**: Reusable UI components with `<partial>` tag helper.
23
+ - **View Components**: Complex reusable UI with server logic.
24
+ - **Layout**: Shared layout in `_Layout.cshtml`. Use sections for page-specific content.
25
+ - **TempData**: Flash messages with PRG (Post-Redirect-Get) pattern.
26
+
27
+ ## Anti-Patterns
28
+
29
+ - **No logic in `.cshtml`**: Move to PageModel or View Components.
30
+ - **No `ViewBag`/`ViewData`**: Use strongly-typed models.
31
+ - **No inline CSS/JS**: Use external files with bundling.
32
+ - **No form without anti-forgery**: Always include `@Html.AntiForgeryToken()` or use `asp-antiforgery`.
33
+
34
+ ## Code
35
+
36
+ ```csharp
37
+ // Pages/Users/Create.cshtml.cs
38
+ public class CreateModel(IUserService userService, ILogger<CreateModel> logger) : PageModel
39
+ {
40
+ [BindProperty]
41
+ public CreateUserInput Input { get; set; } = new();
42
+
43
+ public List<SelectListItem> Roles { get; set; } = [];
44
+
45
+ public async Task OnGetAsync()
46
+ {
47
+ Roles = await GetRolesAsync();
48
+ }
49
+
50
+ public async Task<IActionResult> OnPostAsync()
51
+ {
52
+ if (!ModelState.IsValid)
53
+ {
54
+ Roles = await GetRolesAsync();
55
+ return Page();
56
+ }
57
+
58
+ var result = await userService.CreateAsync(Input);
59
+
60
+ if (!result.IsSuccess)
61
+ {
62
+ ModelState.AddModelError(string.Empty, result.Error!);
63
+ Roles = await GetRolesAsync();
64
+ return Page();
65
+ }
66
+
67
+ TempData["Success"] = "User created successfully";
68
+ return RedirectToPage("./Index");
69
+ }
70
+ }
71
+ ```
72
+
73
+ ```html
74
+ @* Pages/Users/Create.cshtml *@
75
+ @page
76
+ @model CreateModel
77
+
78
+ <h2>Create User</h2>
79
+
80
+ @if (TempData["Error"] is string error)
81
+ {
82
+ <div class="alert alert-danger">@error</div>
83
+ }
84
+
85
+ <form method="post">
86
+ <div asp-validation-summary="ModelOnly" class="text-danger"></div>
87
+
88
+ <div class="mb-3">
89
+ <label asp-for="Input.Name" class="form-label"></label>
90
+ <input asp-for="Input.Name" class="form-control" />
91
+ <span asp-validation-for="Input.Name" class="text-danger"></span>
92
+ </div>
93
+
94
+ <div class="mb-3">
95
+ <label asp-for="Input.Email" class="form-label"></label>
96
+ <input asp-for="Input.Email" class="form-control" type="email" />
97
+ <span asp-validation-for="Input.Email" class="text-danger"></span>
98
+ </div>
99
+
100
+ <div class="mb-3">
101
+ <label asp-for="Input.RoleId" class="form-label"></label>
102
+ <select asp-for="Input.RoleId" asp-items="Model.Roles" class="form-select">
103
+ <option value="">Select a role</option>
104
+ </select>
105
+ <span asp-validation-for="Input.RoleId" class="text-danger"></span>
106
+ </div>
107
+
108
+ <button type="submit" class="btn btn-primary">Create</button>
109
+ <a asp-page="./Index" class="btn btn-secondary">Cancel</a>
110
+ </form>
111
+
112
+ @section Scripts {
113
+ <partial name="_ValidationScriptsPartial" />
114
+ }
115
+ ```
116
+
117
+ ## Reference & Examples
118
+
119
+ For page conventions, view components, and AJAX patterns:
120
+ See [references/REFERENCE.md](references/REFERENCE.md).
121
+
122
+ ## Related Topics
123
+
124
+ aspnet-core | blazor | security