@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,146 @@
1
+ ---
2
+ name: Blazor
3
+ description: Blazor component patterns for interactive web UIs.
4
+ metadata:
5
+ labels: [blazor, components, wasm, server]
6
+ triggers:
7
+ files: ['**/*.razor', '**/*.razor.cs']
8
+ keywords: [Component, Parameter, CascadingParameter, EventCallback, StateHasChanged]
9
+ ---
10
+
11
+ # Blazor
12
+
13
+ ## **Priority: P1 (OPERATIONAL)**
14
+
15
+ Blazor component patterns for interactive web UIs.
16
+
17
+ ## Implementation Guidelines
18
+
19
+ - **Components**: Keep components focused. Split large components into smaller ones.
20
+ - **Parameters**: Use `[Parameter]` for one-way, `EventCallback` for two-way binding.
21
+ - **Cascading Values**: Use for app-wide state (theme, user context).
22
+ - **State Management**: Component state for local, Fluxor/custom service for global.
23
+ - **Forms**: `EditForm` with `DataAnnotationsValidator` or FluentValidation.
24
+ - **JS Interop**: Use `IJSRuntime` sparingly. Prefer Blazor bindings.
25
+ - **Render Modes**: Choose based on requirements (Server, WASM, Auto in .NET 8+).
26
+ - **Streaming**: Use `[StreamRendering]` for long-loading components.
27
+
28
+ ## Anti-Patterns
29
+
30
+ - **No direct DOM manipulation**: Use Blazor bindings and refs.
31
+ - **No `StateHasChanged()` in lifecycle**: Called automatically after lifecycle methods.
32
+ - **No heavy computation in render**: Move to `OnInitialized` or background task.
33
+ - **No sync JS interop in Server mode**: Causes UI blocking.
34
+
35
+ ## Code
36
+
37
+ ```razor
38
+ @* UserList.razor *@
39
+ @page "/users"
40
+ @attribute [StreamRendering]
41
+ @inject IUserService UserService
42
+
43
+ <PageTitle>Users</PageTitle>
44
+
45
+ <h3>Users</h3>
46
+
47
+ @if (_users is null)
48
+ {
49
+ <p><em>Loading...</em></p>
50
+ }
51
+ else if (_users.Count == 0)
52
+ {
53
+ <p>No users found.</p>
54
+ }
55
+ else
56
+ {
57
+ <div class="user-grid">
58
+ @foreach (var user in _users)
59
+ {
60
+ <UserCard User="user" OnDelete="HandleDelete" />
61
+ }
62
+ </div>
63
+ }
64
+
65
+ @code {
66
+ private List<User>? _users;
67
+
68
+ protected override async Task OnInitializedAsync()
69
+ {
70
+ _users = await UserService.GetAllAsync();
71
+ }
72
+
73
+ private async Task HandleDelete(int userId)
74
+ {
75
+ await UserService.DeleteAsync(userId);
76
+ _users = await UserService.GetAllAsync();
77
+ }
78
+ }
79
+ ```
80
+
81
+ ```razor
82
+ @* UserCard.razor - Reusable component *@
83
+ <div class="card">
84
+ <h5>@User.Name</h5>
85
+ <p>@User.Email</p>
86
+ <button @onclick="() => OnDelete.InvokeAsync(User.Id)">Delete</button>
87
+ </div>
88
+
89
+ @code {
90
+ [Parameter, EditorRequired]
91
+ public User User { get; set; } = default!;
92
+
93
+ [Parameter]
94
+ public EventCallback<int> OnDelete { get; set; }
95
+ }
96
+ ```
97
+
98
+ ```razor
99
+ @* EditForm with validation *@
100
+ <EditForm Model="@_model" OnValidSubmit="HandleSubmit" FormName="CreateUser">
101
+ <DataAnnotationsValidator />
102
+ <ValidationSummary class="text-danger" />
103
+
104
+ <div class="mb-3">
105
+ <label class="form-label">Name</label>
106
+ <InputText @bind-Value="_model.Name" class="form-control" />
107
+ <ValidationMessage For="@(() => _model.Name)" />
108
+ </div>
109
+
110
+ <div class="mb-3">
111
+ <label class="form-label">Email</label>
112
+ <InputText @bind-Value="_model.Email" class="form-control" type="email" />
113
+ <ValidationMessage For="@(() => _model.Email)" />
114
+ </div>
115
+
116
+ <button type="submit" class="btn btn-primary" disabled="@_isSubmitting">
117
+ @if (_isSubmitting)
118
+ {
119
+ <span class="spinner-border spinner-border-sm"></span>
120
+ }
121
+ Submit
122
+ </button>
123
+ </EditForm>
124
+
125
+ @code {
126
+ private CreateUserModel _model = new();
127
+ private bool _isSubmitting;
128
+
129
+ private async Task HandleSubmit()
130
+ {
131
+ _isSubmitting = true;
132
+ await UserService.CreateAsync(_model);
133
+ _isSubmitting = false;
134
+ NavigationManager.NavigateTo("/users");
135
+ }
136
+ }
137
+ ```
138
+
139
+ ## Reference & Examples
140
+
141
+ For lifecycle, state management, and JS interop:
142
+ See [references/REFERENCE.md](references/REFERENCE.md).
143
+
144
+ ## Related Topics
145
+
146
+ aspnet-core | razor-pages | security
@@ -0,0 +1,392 @@
1
+ # Blazor Reference
2
+
3
+ Component lifecycle, state management, and advanced patterns.
4
+
5
+ ## References
6
+
7
+ - [**Lifecycle**](lifecycle.md) - Component lifecycle methods.
8
+ - [**State Management**](state-management.md) - Fluxor, cascading values.
9
+ - [**JS Interop**](js-interop.md) - JavaScript interoperability.
10
+
11
+ ## Component Lifecycle
12
+
13
+ ```csharp
14
+ @code {
15
+ // 1. Called when component is first initialized (before rendering)
16
+ protected override void OnInitialized()
17
+ {
18
+ // Sync initialization
19
+ }
20
+
21
+ // 1b. Async version (preferred for data loading)
22
+ protected override async Task OnInitializedAsync()
23
+ {
24
+ // Load initial data
25
+ _data = await DataService.GetAsync();
26
+ }
27
+
28
+ // 2. Called when parameters are set/changed
29
+ protected override void OnParametersSet()
30
+ {
31
+ // React to parameter changes
32
+ }
33
+
34
+ protected override async Task OnParametersSetAsync()
35
+ {
36
+ // Async parameter processing
37
+ }
38
+
39
+ // 3. Called after component has rendered
40
+ protected override void OnAfterRender(bool firstRender)
41
+ {
42
+ if (firstRender)
43
+ {
44
+ // First render only - initialize JS libraries
45
+ }
46
+ // Every render - update DOM-dependent state
47
+ }
48
+
49
+ protected override async Task OnAfterRenderAsync(bool firstRender)
50
+ {
51
+ if (firstRender)
52
+ {
53
+ await JSRuntime.InvokeVoidAsync("initializeChart", _chartElement);
54
+ }
55
+ }
56
+
57
+ // 4. Optimize re-rendering
58
+ protected override bool ShouldRender()
59
+ {
60
+ // Return false to prevent re-rendering
61
+ return _hasChanged;
62
+ }
63
+
64
+ // 5. Cleanup when component is disposed
65
+ public void Dispose()
66
+ {
67
+ // Unsubscribe from events, dispose resources
68
+ _subscription?.Dispose();
69
+ }
70
+
71
+ // Async dispose (IAsyncDisposable)
72
+ public async ValueTask DisposeAsync()
73
+ {
74
+ await JSRuntime.InvokeVoidAsync("cleanup");
75
+ }
76
+ }
77
+ ```
78
+
79
+ ## State Management Patterns
80
+
81
+ ```csharp
82
+ // 1. Cascading Values - App-wide state
83
+ // App.razor or Routes.razor
84
+ <CascadingValue Value="@_themeState">
85
+ <CascadingValue Value="@_userState">
86
+ <Router AppAssembly="@typeof(App).Assembly">
87
+ ...
88
+ </Router>
89
+ </CascadingValue>
90
+ </CascadingValue>
91
+
92
+ @code {
93
+ private ThemeState _themeState = new();
94
+ private UserState _userState = new();
95
+ }
96
+
97
+ // Consuming component
98
+ @code {
99
+ [CascadingParameter]
100
+ public ThemeState Theme { get; set; } = default!;
101
+
102
+ [CascadingParameter]
103
+ public UserState User { get; set; } = default!;
104
+ }
105
+ ```
106
+
107
+ ```csharp
108
+ // 2. State Container Service
109
+ public class CartState
110
+ {
111
+ private readonly List<CartItem> _items = [];
112
+
113
+ public IReadOnlyList<CartItem> Items => _items.AsReadOnly();
114
+ public decimal Total => _items.Sum(i => i.Price * i.Quantity);
115
+
116
+ public event Action? OnChange;
117
+
118
+ public void AddItem(CartItem item)
119
+ {
120
+ _items.Add(item);
121
+ NotifyStateChanged();
122
+ }
123
+
124
+ public void RemoveItem(int productId)
125
+ {
126
+ _items.RemoveAll(i => i.ProductId == productId);
127
+ NotifyStateChanged();
128
+ }
129
+
130
+ private void NotifyStateChanged() => OnChange?.Invoke();
131
+ }
132
+
133
+ // Registration
134
+ builder.Services.AddScoped<CartState>();
135
+
136
+ // Component usage
137
+ @inject CartState Cart
138
+ @implements IDisposable
139
+
140
+ <div>Total: @Cart.Total.ToString("C")</div>
141
+
142
+ @code {
143
+ protected override void OnInitialized()
144
+ {
145
+ Cart.OnChange += StateHasChanged;
146
+ }
147
+
148
+ public void Dispose()
149
+ {
150
+ Cart.OnChange -= StateHasChanged;
151
+ }
152
+ }
153
+ ```
154
+
155
+ ```csharp
156
+ // 3. Fluxor (Redux pattern)
157
+ // State
158
+ public record CounterState(int Count);
159
+
160
+ public class CounterFeature : Feature<CounterState>
161
+ {
162
+ public override string GetName() => "Counter";
163
+ protected override CounterState GetInitialState() => new(0);
164
+ }
165
+
166
+ // Actions
167
+ public record IncrementAction();
168
+ public record DecrementAction();
169
+ public record SetCountAction(int Count);
170
+
171
+ // Reducers
172
+ public static class CounterReducers
173
+ {
174
+ [ReducerMethod]
175
+ public static CounterState OnIncrement(CounterState state, IncrementAction _)
176
+ => state with { Count = state.Count + 1 };
177
+
178
+ [ReducerMethod]
179
+ public static CounterState OnDecrement(CounterState state, DecrementAction _)
180
+ => state with { Count = state.Count - 1 };
181
+
182
+ [ReducerMethod]
183
+ public static CounterState OnSetCount(CounterState state, SetCountAction action)
184
+ => state with { Count = action.Count };
185
+ }
186
+
187
+ // Component
188
+ @inject IState<CounterState> CounterState
189
+ @inject IDispatcher Dispatcher
190
+
191
+ <p>Count: @CounterState.Value.Count</p>
192
+ <button @onclick="Increment">+</button>
193
+ <button @onclick="Decrement">-</button>
194
+
195
+ @code {
196
+ private void Increment() => Dispatcher.Dispatch(new IncrementAction());
197
+ private void Decrement() => Dispatcher.Dispatch(new DecrementAction());
198
+ }
199
+ ```
200
+
201
+ ## JS Interop
202
+
203
+ ```csharp
204
+ // Calling JavaScript from C#
205
+ @inject IJSRuntime JS
206
+
207
+ @code {
208
+ private ElementReference _inputElement;
209
+
210
+ // Call JS function
211
+ protected override async Task OnAfterRenderAsync(bool firstRender)
212
+ {
213
+ if (firstRender)
214
+ {
215
+ await JS.InvokeVoidAsync("initializeComponent", _inputElement);
216
+ }
217
+ }
218
+
219
+ // Call JS function with return value
220
+ private async Task<string> GetLocalStorage(string key)
221
+ {
222
+ return await JS.InvokeAsync<string>("localStorage.getItem", key);
223
+ }
224
+
225
+ // Focus element
226
+ private async Task FocusInput()
227
+ {
228
+ await _inputElement.FocusAsync();
229
+ }
230
+ }
231
+ ```
232
+
233
+ ```javascript
234
+ // wwwroot/js/interop.js
235
+ window.initializeComponent = (element) => {
236
+ // Initialize third-party library
237
+ new SomeLibrary(element);
238
+ };
239
+
240
+ window.blazorInterop = {
241
+ showAlert: (message) => alert(message),
242
+ getWindowSize: () => ({ width: window.innerWidth, height: window.innerHeight })
243
+ };
244
+ ```
245
+
246
+ ```csharp
247
+ // Calling C# from JavaScript
248
+ // In component
249
+ @inject IJSRuntime JS
250
+
251
+ @code {
252
+ private DotNetObjectReference<MyComponent>? _objRef;
253
+
254
+ protected override void OnInitialized()
255
+ {
256
+ _objRef = DotNetObjectReference.Create(this);
257
+ }
258
+
259
+ protected override async Task OnAfterRenderAsync(bool firstRender)
260
+ {
261
+ if (firstRender)
262
+ {
263
+ await JS.InvokeVoidAsync("registerCallback", _objRef);
264
+ }
265
+ }
266
+
267
+ [JSInvokable]
268
+ public void HandleCallback(string data)
269
+ {
270
+ // Called from JavaScript
271
+ Console.WriteLine($"Received: {data}");
272
+ StateHasChanged();
273
+ }
274
+
275
+ public void Dispose()
276
+ {
277
+ _objRef?.Dispose();
278
+ }
279
+ }
280
+ ```
281
+
282
+ ```javascript
283
+ // JavaScript calling C#
284
+ window.registerCallback = (dotNetRef) => {
285
+ window.myCallback = (data) => {
286
+ dotNetRef.invokeMethodAsync('HandleCallback', data);
287
+ };
288
+ };
289
+
290
+ // Later...
291
+ myCallback('Some data from JS');
292
+ ```
293
+
294
+ ## Render Modes (.NET 8+)
295
+
296
+ ```razor
297
+ @* Static Server Rendering (SSR) - Default *@
298
+ @rendermode InteractiveServer
299
+ @rendermode InteractiveWebAssembly
300
+ @rendermode InteractiveAuto
301
+
302
+ @* Per-component render mode *@
303
+ <Counter @rendermode="InteractiveServer" />
304
+ <Counter @rendermode="InteractiveWebAssembly" />
305
+
306
+ @* Streaming rendering for slow data *@
307
+ @attribute [StreamRendering]
308
+
309
+ <h1>Dashboard</h1>
310
+
311
+ @if (_data is null)
312
+ {
313
+ <p>Loading dashboard data...</p>
314
+ }
315
+ else
316
+ {
317
+ <DashboardContent Data="_data" />
318
+ }
319
+
320
+ @code {
321
+ private DashboardData? _data;
322
+
323
+ protected override async Task OnInitializedAsync()
324
+ {
325
+ // This data streams to the client as it loads
326
+ _data = await SlowDataService.GetDashboardAsync();
327
+ }
328
+ }
329
+ ```
330
+
331
+ ## Error Handling
332
+
333
+ ```razor
334
+ @* ErrorBoundary for graceful error handling *@
335
+ <ErrorBoundary @ref="_errorBoundary">
336
+ <ChildContent>
337
+ <RiskyComponent />
338
+ </ChildContent>
339
+ <ErrorContent Context="exception">
340
+ <div class="alert alert-danger">
341
+ <h4>Something went wrong</h4>
342
+ <p>@exception.Message</p>
343
+ <button @onclick="Recover">Try Again</button>
344
+ </div>
345
+ </ErrorContent>
346
+ </ErrorBoundary>
347
+
348
+ @code {
349
+ private ErrorBoundary? _errorBoundary;
350
+
351
+ private void Recover()
352
+ {
353
+ _errorBoundary?.Recover();
354
+ }
355
+ }
356
+ ```
357
+
358
+ ## Authentication in Blazor
359
+
360
+ ```razor
361
+ @* Show content based on auth state *@
362
+ <AuthorizeView>
363
+ <Authorized>
364
+ <p>Hello, @context.User.Identity?.Name!</p>
365
+ <a href="account/logout">Logout</a>
366
+ </Authorized>
367
+ <NotAuthorized>
368
+ <a href="account/login">Login</a>
369
+ </NotAuthorized>
370
+ </AuthorizeView>
371
+
372
+ @* Role-based content *@
373
+ <AuthorizeView Roles="Admin,Manager">
374
+ <Authorized>
375
+ <AdminPanel />
376
+ </Authorized>
377
+ <NotAuthorized>
378
+ <p>Access denied</p>
379
+ </NotAuthorized>
380
+ </AuthorizeView>
381
+
382
+ @* Policy-based content *@
383
+ <AuthorizeView Policy="CanEditOrders">
384
+ <button @onclick="EditOrder">Edit</button>
385
+ </AuthorizeView>
386
+
387
+ @* Protect entire page *@
388
+ @page "/admin"
389
+ @attribute [Authorize(Roles = "Admin")]
390
+
391
+ <h1>Admin Dashboard</h1>
392
+ ```
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: C# Language Patterns
3
+ description: Modern C# standards for type safety, performance, and maintainability.
4
+ metadata:
5
+ labels: [csharp, dotnet, language, types, async]
6
+ triggers:
7
+ files: ['**/*.cs', '**/*.csproj']
8
+ keywords: [class, record, interface, async, await, linq, nullable, span]
9
+ ---
10
+
11
+ # C# Language Patterns
12
+
13
+ ## **Priority: P0 (CRITICAL)**
14
+
15
+ Modern C# standards for type-safe, performant, maintainable code.
16
+
17
+ ## Implementation Guidelines
18
+
19
+ - **Nullable Reference Types**: Enable `<Nullable>enable</Nullable>`. Use `?` for nullable, avoid `!` except when compiler can't infer.
20
+ - **Records**: `record` for immutable DTOs, `record struct` for stack-allocated value types.
21
+ - **Pattern Matching**: `is` patterns, `switch` expressions, property/positional patterns.
22
+ - **Async/Await**: Always use `CancellationToken`. `ValueTask` for hot paths. `ConfigureAwait(false)` in libraries.
23
+ - **LINQ**: Prefer method syntax. Avoid multiple enumerations (`ToList()` once). Use `AsNoTracking()` for read-only EF queries.
24
+ - **Generics**: Constraints (`where T : class, new()`), covariance (`out T`), contravariance (`in T`).
25
+ - **Spans**: `Span<T>`, `ReadOnlySpan<T>` for zero-allocation slicing.
26
+ - **Primary Constructors**: C# 12+ `class Foo(int x)` for concise DI.
27
+ - **Collection Expressions**: C# 12+ `[1, 2, 3]` syntax.
28
+ - **Raw String Literals**: `"""multi-line"""` for SQL, JSON templates.
29
+
30
+ ## Anti-Patterns
31
+
32
+ - **No `async void`**: Use `async Task`. Exception: event handlers.
33
+ - **No `Task.Result`/`.Wait()`**: Deadlock risk. Always `await`.
34
+ - **No `DateTime.Now`**: Use `DateTimeOffset.UtcNow` for timezone safety.
35
+ - **No string concat in loops**: Use `StringBuilder` or `string.Join`.
36
+ - **No `!` abuse**: Prefer null checks or `??` over null-forgiving.
37
+
38
+ ## Code
39
+
40
+ ```csharp
41
+ // Record with primary constructor
42
+ public record UserDto(string Name, string Email);
43
+
44
+ // Pattern matching with switch expression
45
+ string GetStatus(Order order) => order switch
46
+ {
47
+ { Status: OrderStatus.Pending } => "Waiting",
48
+ { Status: OrderStatus.Shipped, TrackingNumber: not null } => "In Transit",
49
+ { IsCancelled: true } => "Cancelled",
50
+ _ => "Unknown"
51
+ };
52
+
53
+ // Async with cancellation token
54
+ async Task<User?> GetUserAsync(int id, CancellationToken ct = default)
55
+ {
56
+ return await _db.Users
57
+ .AsNoTracking()
58
+ .FirstOrDefaultAsync(u => u.Id == id, ct);
59
+ }
60
+
61
+ // Span for zero-allocation parsing
62
+ ReadOnlySpan<char> GetFirstWord(ReadOnlySpan<char> text)
63
+ {
64
+ int idx = text.IndexOf(' ');
65
+ return idx < 0 ? text : text[..idx];
66
+ }
67
+
68
+ // Primary constructor (C# 12)
69
+ public class UserService(IUserRepository repo, ILogger<UserService> logger)
70
+ {
71
+ public async Task<User?> GetAsync(int id) => await repo.GetByIdAsync(id);
72
+ }
73
+ ```
74
+
75
+ ## Reference & Examples
76
+
77
+ For advanced patterns, spans, and nullable annotations:
78
+ See [references/REFERENCE.md](references/REFERENCE.md).
79
+
80
+ ## Related Topics
81
+
82
+ best-practices | security | tooling