@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,215 @@
1
+ # Async-GraphQL Schema Patterns
2
+
3
+ ## Basic Types
4
+
5
+ ```rust
6
+ use async_graphql::*;
7
+
8
+ #[derive(SimpleObject)]
9
+ struct User {
10
+ id: ID,
11
+ name: String,
12
+ email: String,
13
+ #[graphql(skip)]
14
+ password_hash: String, // Hidden from schema
15
+ }
16
+
17
+ // Complex object with resolvers
18
+ #[derive(Default)]
19
+ struct Post {
20
+ id: i64,
21
+ title: String,
22
+ author_id: i64,
23
+ }
24
+
25
+ #[Object]
26
+ impl Post {
27
+ async fn id(&self) -> ID {
28
+ self.id.into()
29
+ }
30
+
31
+ async fn title(&self) -> &str {
32
+ &self.title
33
+ }
34
+
35
+ // Resolver with context
36
+ async fn author(&self, ctx: &Context<'_>) -> Result<User> {
37
+ let db = ctx.data::<Database>()?;
38
+ db.find_user(self.author_id)
39
+ .await
40
+ .ok_or_else(|| Error::new("Author not found"))
41
+ }
42
+ }
43
+
44
+ // Input types
45
+ #[derive(InputObject)]
46
+ struct CreatePostInput {
47
+ title: String,
48
+ content: String,
49
+ }
50
+
51
+ // Enums
52
+ #[derive(Enum, Copy, Clone, Eq, PartialEq)]
53
+ enum PostStatus {
54
+ Draft,
55
+ Published,
56
+ Archived,
57
+ }
58
+ ```
59
+
60
+ ## Query and Mutation
61
+
62
+ ```rust
63
+ struct Query;
64
+
65
+ #[Object]
66
+ impl Query {
67
+ async fn user(&self, ctx: &Context<'_>, id: ID) -> Result<Option<User>> {
68
+ let db = ctx.data::<Database>()?;
69
+ Ok(db.find_user(id.parse()?).await)
70
+ }
71
+
72
+ async fn users(
73
+ &self,
74
+ ctx: &Context<'_>,
75
+ #[graphql(default = 10)] limit: i32,
76
+ #[graphql(default = 0)] offset: i32,
77
+ ) -> Result<Vec<User>> {
78
+ let db = ctx.data::<Database>()?;
79
+ Ok(db.list_users(limit, offset).await)
80
+ }
81
+ }
82
+
83
+ struct Mutation;
84
+
85
+ #[Object]
86
+ impl Mutation {
87
+ async fn create_post(
88
+ &self,
89
+ ctx: &Context<'_>,
90
+ input: CreatePostInput,
91
+ ) -> Result<Post> {
92
+ let db = ctx.data::<Database>()?;
93
+ let user = ctx.data::<CurrentUser>()?;
94
+
95
+ db.create_post(user.id, &input.title, &input.content).await
96
+ }
97
+
98
+ async fn delete_post(&self, ctx: &Context<'_>, id: ID) -> Result<bool> {
99
+ let db = ctx.data::<Database>()?;
100
+ Ok(db.delete_post(id.parse()?).await?)
101
+ }
102
+ }
103
+ ```
104
+
105
+ ## Subscriptions
106
+
107
+ ```rust
108
+ use async_graphql::*;
109
+ use futures_util::Stream;
110
+
111
+ struct Subscription;
112
+
113
+ #[Subscription]
114
+ impl Subscription {
115
+ async fn posts(&self, ctx: &Context<'_>) -> impl Stream<Item = Post> {
116
+ let rx = ctx.data::<broadcast::Receiver<Post>>().unwrap().resubscribe();
117
+ tokio_stream::wrappers::BroadcastStream::new(rx)
118
+ .filter_map(|r| r.ok())
119
+ }
120
+ }
121
+ ```
122
+
123
+ ## DataLoader
124
+
125
+ ```rust
126
+ use async_graphql::dataloader::{DataLoader, Loader};
127
+ use std::collections::HashMap;
128
+
129
+ struct UserLoader {
130
+ db: Database,
131
+ }
132
+
133
+ #[async_trait::async_trait]
134
+ impl Loader<i64> for UserLoader {
135
+ type Value = User;
136
+ type Error = async_graphql::Error;
137
+
138
+ async fn load(&self, keys: &[i64]) -> Result<HashMap<i64, Self::Value>, Self::Error> {
139
+ let users = self.db.find_users_by_ids(keys).await?;
140
+ Ok(users.into_iter().map(|u| (u.id, u)).collect())
141
+ }
142
+ }
143
+
144
+ #[Object]
145
+ impl Post {
146
+ async fn author(&self, ctx: &Context<'_>) -> Result<User> {
147
+ let loader = ctx.data::<DataLoader<UserLoader>>()?;
148
+ loader.load_one(self.author_id)
149
+ .await?
150
+ .ok_or_else(|| Error::new("Author not found"))
151
+ }
152
+ }
153
+ ```
154
+
155
+ ## Guards (Authorization)
156
+
157
+ ```rust
158
+ use async_graphql::*;
159
+
160
+ struct RoleGuard {
161
+ role: Role,
162
+ }
163
+
164
+ #[async_trait::async_trait]
165
+ impl Guard for RoleGuard {
166
+ async fn check(&self, ctx: &Context<'_>) -> Result<()> {
167
+ let user = ctx.data::<CurrentUser>()?;
168
+ if user.role >= self.role {
169
+ Ok(())
170
+ } else {
171
+ Err("Forbidden".into())
172
+ }
173
+ }
174
+ }
175
+
176
+ #[Object]
177
+ impl Mutation {
178
+ #[graphql(guard = "RoleGuard { role: Role::Admin }")]
179
+ async fn delete_user(&self, ctx: &Context<'_>, id: ID) -> Result<bool> {
180
+ // Only admins can access
181
+ Ok(true)
182
+ }
183
+ }
184
+ ```
185
+
186
+ ## Integration with Axum
187
+
188
+ ```rust
189
+ use async_graphql_axum::{GraphQLRequest, GraphQLResponse};
190
+ use axum::{extract::State, routing::post, Router};
191
+
192
+ async fn graphql_handler(
193
+ State(schema): State<Schema<Query, Mutation, Subscription>>,
194
+ req: GraphQLRequest,
195
+ ) -> GraphQLResponse {
196
+ schema.execute(req.into_inner()).await.into()
197
+ }
198
+
199
+ #[tokio::main]
200
+ async fn main() {
201
+ let schema = Schema::build(Query, Mutation, Subscription)
202
+ .data(Database::new())
203
+ .data(DataLoader::new(UserLoader::new(), tokio::spawn))
204
+ .finish();
205
+
206
+ let app = Router::new()
207
+ .route("/graphql", post(graphql_handler))
208
+ .with_state(schema);
209
+
210
+ axum::Server::bind(&"0.0.0.0:8080".parse().unwrap())
211
+ .serve(app.into_make_service())
212
+ .await
213
+ .unwrap();
214
+ }
215
+ ```
@@ -0,0 +1,161 @@
1
+ ---
2
+ name: Axum Framework
3
+ description: Ergonomic Rust web framework built on Tower and Tokio.
4
+ metadata:
5
+ labels: [rust, axum, web, framework, tower]
6
+ triggers:
7
+ files: ['**/main.rs', '**/routes/*.rs']
8
+ keywords: [axum, Router, Extension, State]
9
+ ---
10
+
11
+ # Axum Standards
12
+
13
+ ## Router Setup
14
+
15
+ ```rust
16
+ use axum::{Router, routing::{get, post}, Extension};
17
+
18
+ #[tokio::main]
19
+ async fn main() {
20
+ let app = Router::new()
21
+ .route("/", get(root))
22
+ .route("/users", get(list_users).post(create_user))
23
+ .route("/users/:id", get(get_user))
24
+ .nest("/api", api_routes())
25
+ .layer(Extension(db_pool))
26
+ .layer(TraceLayer::new_for_http());
27
+
28
+ let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
29
+ axum::serve(listener, app).await.unwrap();
30
+ }
31
+ ```
32
+
33
+ ## Extractors
34
+
35
+ ```rust
36
+ use axum::{
37
+ extract::{Path, Query, State, Json},
38
+ http::StatusCode,
39
+ };
40
+
41
+ // Path parameters
42
+ async fn get_user(Path(id): Path<u64>) -> impl IntoResponse {
43
+ Json(user)
44
+ }
45
+
46
+ // Query parameters
47
+ async fn list(Query(params): Query<Pagination>) -> impl IntoResponse {
48
+ Json(items)
49
+ }
50
+
51
+ // JSON body
52
+ async fn create(Json(payload): Json<CreateUser>) -> impl IntoResponse {
53
+ (StatusCode::CREATED, Json(user))
54
+ }
55
+
56
+ // State (shared application state)
57
+ async fn handler(State(pool): State<PgPool>) -> impl IntoResponse {
58
+ let conn = pool.acquire().await?;
59
+ Json(result)
60
+ }
61
+ ```
62
+
63
+ ## State Management
64
+
65
+ ```rust
66
+ #[derive(Clone)]
67
+ struct AppState {
68
+ db: PgPool,
69
+ cache: RedisPool,
70
+ }
71
+
72
+ let state = AppState { db, cache };
73
+
74
+ let app = Router::new()
75
+ .route("/users", get(handler))
76
+ .with_state(state);
77
+
78
+ async fn handler(State(state): State<AppState>) -> impl IntoResponse {
79
+ // Access state.db, state.cache
80
+ }
81
+ ```
82
+
83
+ ## Error Handling
84
+
85
+ ```rust
86
+ use axum::{
87
+ response::{IntoResponse, Response},
88
+ http::StatusCode,
89
+ };
90
+
91
+ enum AppError {
92
+ NotFound,
93
+ Database(sqlx::Error),
94
+ }
95
+
96
+ impl IntoResponse for AppError {
97
+ fn into_response(self) -> Response {
98
+ let (status, message) = match self {
99
+ AppError::NotFound => (StatusCode::NOT_FOUND, "Not found"),
100
+ AppError::Database(_) => (StatusCode::INTERNAL_SERVER_ERROR, "Database error"),
101
+ };
102
+ (status, Json(json!({ "error": message }))).into_response()
103
+ }
104
+ }
105
+
106
+ // Handler returns Result<T, AppError>
107
+ async fn handler() -> Result<Json<User>, AppError> {
108
+ let user = db.find(id).await.map_err(AppError::Database)?;
109
+ user.ok_or(AppError::NotFound).map(Json)
110
+ }
111
+ ```
112
+
113
+ ## Middleware (Tower Layers)
114
+
115
+ ```rust
116
+ use tower_http::{
117
+ trace::TraceLayer,
118
+ cors::CorsLayer,
119
+ compression::CompressionLayer,
120
+ };
121
+
122
+ let app = Router::new()
123
+ .route("/", get(handler))
124
+ .layer(TraceLayer::new_for_http())
125
+ .layer(CompressionLayer::new())
126
+ .layer(CorsLayer::permissive());
127
+
128
+ // Custom middleware
129
+ async fn auth_layer<B>(
130
+ req: Request<B>,
131
+ next: Next<B>,
132
+ ) -> Result<Response, StatusCode> {
133
+ let token = req.headers().get("Authorization");
134
+ // Validate token
135
+ Ok(next.run(req).await)
136
+ }
137
+ ```
138
+
139
+ ## Testing
140
+
141
+ ```rust
142
+ use axum::http::StatusCode;
143
+ use axum_test::TestServer;
144
+
145
+ #[tokio::test]
146
+ async fn test_get_user() {
147
+ let app = create_app();
148
+ let server = TestServer::new(app).unwrap();
149
+
150
+ let response = server.get("/users/1").await;
151
+
152
+ assert_eq!(response.status_code(), StatusCode::OK);
153
+ }
154
+ ```
155
+
156
+ ## Best Practices
157
+
158
+ 1. **State**: Use `State<T>` over `Extension<T>` for type safety
159
+ 2. **Extractors**: Order matters - put fallible extractors last
160
+ 3. **Layers**: Apply common layers at router level, not per-route
161
+ 4. **Errors**: Implement `IntoResponse` for custom error types
@@ -0,0 +1,14 @@
1
+ # Axum References
2
+
3
+ ## References
4
+
5
+ - [**Handler Patterns**](handler-patterns.md) - Extractors, responses, error handling
6
+ - [**Middleware**](middleware.md) - Tower layers, authentication, tracing
7
+
8
+ ## Quick Checks
9
+
10
+ - [ ] Use extractors for request data (Json, Path, Query)
11
+ - [ ] Return IntoResponse types
12
+ - [ ] Use State for shared application state
13
+ - [ ] Tower layers for middleware
14
+ - [ ] Type-safe routing with typed paths
@@ -0,0 +1,97 @@
1
+ # Axum Handler Patterns
2
+
3
+ ## Basic Handlers
4
+
5
+ ```rust
6
+ use axum::{
7
+ extract::{Path, Query, State, Json},
8
+ http::StatusCode,
9
+ response::IntoResponse,
10
+ routing::{get, post},
11
+ Router,
12
+ };
13
+
14
+ // GET with path parameter
15
+ async fn get_user(Path(id): Path<i64>) -> impl IntoResponse {
16
+ Json(User { id, name: "John".into() })
17
+ }
18
+
19
+ // POST with JSON body
20
+ async fn create_user(
21
+ State(db): State<Database>,
22
+ Json(payload): Json<CreateUserRequest>,
23
+ ) -> Result<impl IntoResponse, AppError> {
24
+ let user = db.create_user(&payload).await?;
25
+ Ok((StatusCode::CREATED, Json(user)))
26
+ }
27
+
28
+ // Query parameters
29
+ async fn list_users(
30
+ Query(params): Query<ListParams>,
31
+ ) -> impl IntoResponse {
32
+ Json(vec![/* users */])
33
+ }
34
+
35
+ // Router setup
36
+ fn app(db: Database) -> Router {
37
+ Router::new()
38
+ .route("/users", get(list_users).post(create_user))
39
+ .route("/users/:id", get(get_user))
40
+ .with_state(db)
41
+ }
42
+ ```
43
+
44
+ ## Error Handling
45
+
46
+ ```rust
47
+ use axum::{
48
+ http::StatusCode,
49
+ response::{IntoResponse, Response},
50
+ Json,
51
+ };
52
+
53
+ pub enum AppError {
54
+ NotFound,
55
+ BadRequest(String),
56
+ Internal(anyhow::Error),
57
+ }
58
+
59
+ impl IntoResponse for AppError {
60
+ fn into_response(self) -> Response {
61
+ let (status, message) = match self {
62
+ AppError::NotFound => (StatusCode::NOT_FOUND, "Not found".into()),
63
+ AppError::BadRequest(msg) => (StatusCode::BAD_REQUEST, msg),
64
+ AppError::Internal(e) => {
65
+ tracing::error!("Internal error: {:?}", e);
66
+ (StatusCode::INTERNAL_SERVER_ERROR, "Internal error".into())
67
+ }
68
+ };
69
+
70
+ (status, Json(serde_json::json!({ "error": message }))).into_response()
71
+ }
72
+ }
73
+
74
+ // Usage in handler
75
+ async fn get_user(Path(id): Path<i64>) -> Result<Json<User>, AppError> {
76
+ let user = find_user(id).await.ok_or(AppError::NotFound)?;
77
+ Ok(Json(user))
78
+ }
79
+ ```
80
+
81
+ ## Middleware with Tower
82
+
83
+ ```rust
84
+ use tower_http::{
85
+ cors::CorsLayer,
86
+ trace::TraceLayer,
87
+ compression::CompressionLayer,
88
+ };
89
+
90
+ fn app() -> Router {
91
+ Router::new()
92
+ .route("/", get(root))
93
+ .layer(TraceLayer::new_for_http())
94
+ .layer(CompressionLayer::new())
95
+ .layer(CorsLayer::permissive())
96
+ }
97
+ ```
@@ -0,0 +1,206 @@
1
+ ---
2
+ name: Bevy Game Engine
3
+ description: Data-driven game engine with ECS architecture.
4
+ metadata:
5
+ labels: [rust, bevy, game, ecs]
6
+ triggers:
7
+ files: ['**/main.rs', 'assets/**']
8
+ keywords: [bevy, App, Component, Query, Resource, Commands]
9
+ ---
10
+
11
+ # Bevy Standards
12
+
13
+ ## App Setup
14
+
15
+ ```rust
16
+ use bevy::prelude::*;
17
+
18
+ fn main() {
19
+ App::new()
20
+ .add_plugins(DefaultPlugins)
21
+ .add_systems(Startup, setup)
22
+ .add_systems(Update, (movement, collision).chain())
23
+ .run();
24
+ }
25
+
26
+ fn setup(mut commands: Commands) {
27
+ commands.spawn(Camera2dBundle::default());
28
+ }
29
+ ```
30
+
31
+ ## Components
32
+
33
+ ```rust
34
+ #[derive(Component)]
35
+ struct Player {
36
+ speed: f32,
37
+ }
38
+
39
+ #[derive(Component)]
40
+ struct Health(u32);
41
+
42
+ #[derive(Component)]
43
+ struct Velocity(Vec2);
44
+
45
+ // Spawn entity with components
46
+ fn spawn_player(mut commands: Commands) {
47
+ commands.spawn((
48
+ Player { speed: 200.0 },
49
+ Health(100),
50
+ Velocity(Vec2::ZERO),
51
+ SpriteBundle {
52
+ transform: Transform::from_xyz(0.0, 0.0, 0.0),
53
+ ..default()
54
+ },
55
+ ));
56
+ }
57
+ ```
58
+
59
+ ## Systems
60
+
61
+ ```rust
62
+ // Query components
63
+ fn movement(
64
+ time: Res<Time>,
65
+ input: Res<Input<KeyCode>>,
66
+ mut query: Query<(&Player, &mut Transform, &mut Velocity)>,
67
+ ) {
68
+ for (player, mut transform, mut velocity) in &mut query {
69
+ let mut direction = Vec2::ZERO;
70
+ if input.pressed(KeyCode::W) { direction.y += 1.0; }
71
+ if input.pressed(KeyCode::S) { direction.y -= 1.0; }
72
+ if input.pressed(KeyCode::A) { direction.x -= 1.0; }
73
+ if input.pressed(KeyCode::D) { direction.x += 1.0; }
74
+
75
+ velocity.0 = direction.normalize_or_zero() * player.speed;
76
+ transform.translation += velocity.0.extend(0.0) * time.delta_seconds();
77
+ }
78
+ }
79
+
80
+ // Filter queries
81
+ fn damage_enemies(
82
+ mut query: Query<&mut Health, (With<Enemy>, Without<Player>)>,
83
+ ) {
84
+ for mut health in &mut query {
85
+ health.0 = health.0.saturating_sub(10);
86
+ }
87
+ }
88
+ ```
89
+
90
+ ## Resources
91
+
92
+ ```rust
93
+ #[derive(Resource)]
94
+ struct GameState {
95
+ score: u32,
96
+ level: u32,
97
+ }
98
+
99
+ #[derive(Resource, Default)]
100
+ struct GameAssets {
101
+ player_texture: Handle<Image>,
102
+ }
103
+
104
+ // Insert resource
105
+ app.insert_resource(GameState { score: 0, level: 1 });
106
+
107
+ // Access in system
108
+ fn update_score(mut state: ResMut<GameState>) {
109
+ state.score += 10;
110
+ }
111
+ ```
112
+
113
+ ## Events
114
+
115
+ ```rust
116
+ #[derive(Event)]
117
+ struct CollisionEvent {
118
+ entity_a: Entity,
119
+ entity_b: Entity,
120
+ }
121
+
122
+ // Send event
123
+ fn detect_collision(mut events: EventWriter<CollisionEvent>) {
124
+ events.send(CollisionEvent { entity_a, entity_b });
125
+ }
126
+
127
+ // Read events
128
+ fn handle_collision(mut events: EventReader<CollisionEvent>) {
129
+ for event in events.read() {
130
+ println!("Collision: {:?} <-> {:?}", event.entity_a, event.entity_b);
131
+ }
132
+ }
133
+
134
+ // Register event
135
+ app.add_event::<CollisionEvent>();
136
+ ```
137
+
138
+ ## States
139
+
140
+ ```rust
141
+ #[derive(States, Debug, Clone, Eq, PartialEq, Hash, Default)]
142
+ enum GameState {
143
+ #[default]
144
+ Menu,
145
+ Playing,
146
+ Paused,
147
+ GameOver,
148
+ }
149
+
150
+ app.add_state::<GameState>()
151
+ .add_systems(OnEnter(GameState::Playing), start_game)
152
+ .add_systems(OnExit(GameState::Playing), cleanup_game)
153
+ .add_systems(Update, game_logic.run_if(in_state(GameState::Playing)));
154
+
155
+ // Change state
156
+ fn pause_game(mut next_state: ResMut<NextState<GameState>>) {
157
+ next_state.set(GameState::Paused);
158
+ }
159
+ ```
160
+
161
+ ## Assets
162
+
163
+ ```rust
164
+ fn load_assets(
165
+ mut commands: Commands,
166
+ asset_server: Res<AssetServer>,
167
+ ) {
168
+ let texture = asset_server.load("player.png");
169
+ commands.insert_resource(GameAssets { player_texture: texture });
170
+ }
171
+
172
+ // Spawn with texture
173
+ fn spawn_sprite(
174
+ mut commands: Commands,
175
+ assets: Res<GameAssets>,
176
+ ) {
177
+ commands.spawn(SpriteBundle {
178
+ texture: assets.player_texture.clone(),
179
+ ..default()
180
+ });
181
+ }
182
+ ```
183
+
184
+ ## Plugins
185
+
186
+ ```rust
187
+ pub struct PlayerPlugin;
188
+
189
+ impl Plugin for PlayerPlugin {
190
+ fn build(&self, app: &mut App) {
191
+ app.add_systems(Startup, spawn_player)
192
+ .add_systems(Update, (movement, animation));
193
+ }
194
+ }
195
+
196
+ // Use plugin
197
+ app.add_plugins(PlayerPlugin);
198
+ ```
199
+
200
+ ## Best Practices
201
+
202
+ 1. **ECS**: Prefer composition over inheritance
203
+ 2. **Systems**: Keep small, single responsibility
204
+ 3. **Queries**: Use filters (`With`, `Without`) for performance
205
+ 4. **Resources**: For global state, not per-entity data
206
+ 5. **Events**: Decouple systems, avoid direct dependencies
@@ -0,0 +1,13 @@
1
+ # Bevy Game Engine References
2
+
3
+ ## References
4
+
5
+ - [**ECS Patterns**](ecs-patterns.md) - Entities, components, systems
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use ECS architecture (Entity-Component-System)
10
+ - [ ] Resources for global state
11
+ - [ ] Events for communication
12
+ - [ ] States for game flow
13
+ - [ ] Assets for loading resources