@ngxtm/devkit 3.4.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 (343) 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
@@ -0,0 +1,160 @@
1
+ ---
2
+ name: Actix-web Framework
3
+ description: High-performance Rust web framework with actor model foundation.
4
+ metadata:
5
+ labels: [rust, actix-web, web, framework]
6
+ triggers:
7
+ files: ['**/main.rs', '**/handlers/*.rs']
8
+ keywords: [actix_web, HttpServer, web, App]
9
+ ---
10
+
11
+ # Actix-web Standards
12
+
13
+ ## Handler Functions
14
+
15
+ ```rust
16
+ use actix_web::{web, HttpResponse, Result};
17
+
18
+ // Path parameters
19
+ async fn get_user(path: web::Path<u64>) -> Result<HttpResponse> {
20
+ let user_id = path.into_inner();
21
+ Ok(HttpResponse::Ok().json(user))
22
+ }
23
+
24
+ // Query parameters
25
+ #[derive(Deserialize)]
26
+ struct Pagination {
27
+ page: Option<u32>,
28
+ limit: Option<u32>,
29
+ }
30
+
31
+ async fn list_users(query: web::Query<Pagination>) -> Result<HttpResponse> {
32
+ let page = query.page.unwrap_or(1);
33
+ Ok(HttpResponse::Ok().json(users))
34
+ }
35
+
36
+ // JSON body
37
+ async fn create_user(body: web::Json<CreateUser>) -> Result<HttpResponse> {
38
+ let user = body.into_inner();
39
+ Ok(HttpResponse::Created().json(created))
40
+ }
41
+ ```
42
+
43
+ ## Extractors
44
+
45
+ | Extractor | Purpose |
46
+ |-----------|---------|
47
+ | `web::Path<T>` | URL path parameters |
48
+ | `web::Query<T>` | Query string |
49
+ | `web::Json<T>` | JSON request body |
50
+ | `web::Form<T>` | Form data |
51
+ | `web::Data<T>` | Application state |
52
+ | `HttpRequest` | Full request access |
53
+
54
+ **Custom Extractors**:
55
+ ```rust
56
+ impl FromRequest for AuthUser {
57
+ type Error = Error;
58
+ type Future = Ready<Result<Self, Self::Error>>;
59
+
60
+ fn from_request(req: &HttpRequest, _: &mut Payload) -> Self::Future {
61
+ // Extract and validate auth header
62
+ }
63
+ }
64
+ ```
65
+
66
+ ## State Management
67
+
68
+ ```rust
69
+ struct AppState {
70
+ db: PgPool,
71
+ cache: RedisPool,
72
+ }
73
+
74
+ #[actix_web::main]
75
+ async fn main() -> std::io::Result<()> {
76
+ let state = web::Data::new(AppState {
77
+ db: create_pool().await,
78
+ cache: create_cache().await,
79
+ });
80
+
81
+ HttpServer::new(move || {
82
+ App::new()
83
+ .app_data(state.clone())
84
+ .service(handlers)
85
+ })
86
+ .bind("127.0.0.1:8080")?
87
+ .run()
88
+ .await
89
+ }
90
+
91
+ // Access in handlers
92
+ async fn handler(state: web::Data<AppState>) -> Result<HttpResponse> {
93
+ let conn = state.db.acquire().await?;
94
+ Ok(HttpResponse::Ok().finish())
95
+ }
96
+ ```
97
+
98
+ ## Middleware
99
+
100
+ ```rust
101
+ use actix_web::middleware::{Logger, Compress, NormalizePath};
102
+
103
+ App::new()
104
+ .wrap(Logger::default())
105
+ .wrap(Compress::default())
106
+ .wrap(NormalizePath::trim())
107
+ .wrap(custom_middleware)
108
+
109
+ // Custom middleware
110
+ async fn auth_middleware(
111
+ req: ServiceRequest,
112
+ srv: &Service,
113
+ ) -> Result<ServiceResponse, Error> {
114
+ // Validate token
115
+ srv.call(req).await
116
+ }
117
+ ```
118
+
119
+ ## Error Handling
120
+
121
+ ```rust
122
+ use actix_web::{error, HttpResponse};
123
+
124
+ #[derive(Debug, thiserror::Error)]
125
+ enum ApiError {
126
+ #[error("Not found")]
127
+ NotFound,
128
+ #[error("Database error")]
129
+ Database(#[from] sqlx::Error),
130
+ }
131
+
132
+ impl error::ResponseError for ApiError {
133
+ fn error_response(&self) -> HttpResponse {
134
+ match self {
135
+ ApiError::NotFound => HttpResponse::NotFound().json({"error": "Not found"}),
136
+ ApiError::Database(_) => HttpResponse::InternalServerError().finish(),
137
+ }
138
+ }
139
+ }
140
+ ```
141
+
142
+ ## Routing
143
+
144
+ ```rust
145
+ App::new()
146
+ .route("/", web::get().to(index))
147
+ .service(
148
+ web::scope("/api/v1")
149
+ .route("/users", web::get().to(list_users))
150
+ .route("/users/{id}", web::get().to(get_user))
151
+ .route("/users", web::post().to(create_user))
152
+ )
153
+ ```
154
+
155
+ ## Best Practices
156
+
157
+ 1. **Concurrency**: Use `.workers(N)` to control thread pool size
158
+ 2. **Timeouts**: Configure `keep_alive` and client timeouts
159
+ 3. **Graceful Shutdown**: Handle SIGTERM properly
160
+ 4. **Testing**: Use `actix_web::test` for integration tests
@@ -0,0 +1,13 @@
1
+ # Actix Web References
2
+
3
+ ## References
4
+
5
+ - [**Handler Patterns**](handler-patterns.md) - Extractors, responses, middleware
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use extractors for request data
10
+ - [ ] Implement Responder for custom responses
11
+ - [ ] Data for shared application state
12
+ - [ ] Configure workers appropriately
13
+ - [ ] Error handling with actix_web::Error
@@ -0,0 +1,198 @@
1
+ # Actix Web Handler Patterns
2
+
3
+ ## Basic Handlers
4
+
5
+ ```rust
6
+ use actix_web::{web, App, HttpServer, HttpResponse, Responder};
7
+
8
+ async fn hello() -> impl Responder {
9
+ HttpResponse::Ok().body("Hello world!")
10
+ }
11
+
12
+ async fn echo(req_body: String) -> impl Responder {
13
+ HttpResponse::Ok().body(req_body)
14
+ }
15
+
16
+ #[actix_web::main]
17
+ async fn main() -> std::io::Result<()> {
18
+ HttpServer::new(|| {
19
+ App::new()
20
+ .route("/", web::get().to(hello))
21
+ .route("/echo", web::post().to(echo))
22
+ })
23
+ .bind(("127.0.0.1", 8080))?
24
+ .run()
25
+ .await
26
+ }
27
+ ```
28
+
29
+ ## Extractors
30
+
31
+ ```rust
32
+ use actix_web::{web, HttpResponse};
33
+ use serde::Deserialize;
34
+
35
+ // Path parameters
36
+ async fn get_user(path: web::Path<(u64,)>) -> HttpResponse {
37
+ let user_id = path.into_inner().0;
38
+ HttpResponse::Ok().json(format!("User {}", user_id))
39
+ }
40
+
41
+ // Named path parameters
42
+ #[derive(Deserialize)]
43
+ struct UserPath {
44
+ id: u64,
45
+ }
46
+
47
+ async fn get_user_named(path: web::Path<UserPath>) -> HttpResponse {
48
+ HttpResponse::Ok().json(format!("User {}", path.id))
49
+ }
50
+
51
+ // Query parameters
52
+ #[derive(Deserialize)]
53
+ struct ListQuery {
54
+ page: Option<u32>,
55
+ limit: Option<u32>,
56
+ }
57
+
58
+ async fn list_users(query: web::Query<ListQuery>) -> HttpResponse {
59
+ let page = query.page.unwrap_or(1);
60
+ let limit = query.limit.unwrap_or(10);
61
+ HttpResponse::Ok().json(format!("Page {} limit {}", page, limit))
62
+ }
63
+
64
+ // JSON body
65
+ #[derive(Deserialize)]
66
+ struct CreateUser {
67
+ name: String,
68
+ email: String,
69
+ }
70
+
71
+ async fn create_user(body: web::Json<CreateUser>) -> HttpResponse {
72
+ HttpResponse::Created().json(format!("Created {}", body.name))
73
+ }
74
+ ```
75
+
76
+ ## Application State
77
+
78
+ ```rust
79
+ use std::sync::Mutex;
80
+
81
+ struct AppState {
82
+ counter: Mutex<i32>,
83
+ db: PgPool,
84
+ }
85
+
86
+ async fn increment(data: web::Data<AppState>) -> HttpResponse {
87
+ let mut counter = data.counter.lock().unwrap();
88
+ *counter += 1;
89
+ HttpResponse::Ok().json(*counter)
90
+ }
91
+
92
+ #[actix_web::main]
93
+ async fn main() -> std::io::Result<()> {
94
+ let pool = create_pool().await;
95
+ let state = web::Data::new(AppState {
96
+ counter: Mutex::new(0),
97
+ db: pool,
98
+ });
99
+
100
+ HttpServer::new(move || {
101
+ App::new()
102
+ .app_data(state.clone())
103
+ .route("/count", web::get().to(increment))
104
+ })
105
+ .bind("127.0.0.1:8080")?
106
+ .run()
107
+ .await
108
+ }
109
+ ```
110
+
111
+ ## Error Handling
112
+
113
+ ```rust
114
+ use actix_web::{error, HttpResponse};
115
+ use derive_more::{Display, Error};
116
+
117
+ #[derive(Debug, Display, Error)]
118
+ enum AppError {
119
+ #[display(fmt = "Not found")]
120
+ NotFound,
121
+ #[display(fmt = "Bad request: {}", _0)]
122
+ BadRequest(String),
123
+ #[display(fmt = "Internal error")]
124
+ Internal,
125
+ }
126
+
127
+ impl error::ResponseError for AppError {
128
+ fn error_response(&self) -> HttpResponse {
129
+ match self {
130
+ AppError::NotFound => HttpResponse::NotFound().json("Not found"),
131
+ AppError::BadRequest(msg) => HttpResponse::BadRequest().json(msg),
132
+ AppError::Internal => HttpResponse::InternalServerError().json("Error"),
133
+ }
134
+ }
135
+ }
136
+
137
+ async fn get_user(path: web::Path<u64>) -> Result<HttpResponse, AppError> {
138
+ let user = find_user(path.into_inner())
139
+ .await
140
+ .ok_or(AppError::NotFound)?;
141
+ Ok(HttpResponse::Ok().json(user))
142
+ }
143
+ ```
144
+
145
+ ## Middleware
146
+
147
+ ```rust
148
+ use actix_web::middleware::{Logger, Compress};
149
+ use actix_cors::Cors;
150
+
151
+ #[actix_web::main]
152
+ async fn main() -> std::io::Result<()> {
153
+ HttpServer::new(|| {
154
+ let cors = Cors::default()
155
+ .allowed_origin("https://example.com")
156
+ .allowed_methods(vec!["GET", "POST"])
157
+ .max_age(3600);
158
+
159
+ App::new()
160
+ .wrap(Logger::default())
161
+ .wrap(Compress::default())
162
+ .wrap(cors)
163
+ .service(web::resource("/").to(index))
164
+ })
165
+ .bind("127.0.0.1:8080")?
166
+ .run()
167
+ .await
168
+ }
169
+ ```
170
+
171
+ ## Route Configuration
172
+
173
+ ```rust
174
+ fn config(cfg: &mut web::ServiceConfig) {
175
+ cfg.service(
176
+ web::resource("/users")
177
+ .route(web::get().to(list_users))
178
+ .route(web::post().to(create_user))
179
+ )
180
+ .service(
181
+ web::resource("/users/{id}")
182
+ .route(web::get().to(get_user))
183
+ .route(web::put().to(update_user))
184
+ .route(web::delete().to(delete_user))
185
+ );
186
+ }
187
+
188
+ #[actix_web::main]
189
+ async fn main() -> std::io::Result<()> {
190
+ HttpServer::new(|| {
191
+ App::new()
192
+ .configure(config)
193
+ })
194
+ .bind("127.0.0.1:8080")?
195
+ .run()
196
+ .await
197
+ }
198
+ ```
@@ -0,0 +1,228 @@
1
+ ---
2
+ name: async-graphql
3
+ description: High-performance GraphQL server library for Rust.
4
+ metadata:
5
+ labels: [rust, graphql, async-graphql, api]
6
+ triggers:
7
+ files: ['**/schema.rs', '**/graphql.rs']
8
+ keywords: [async_graphql, Object, Query, Mutation, Subscription, Schema]
9
+ ---
10
+
11
+ # async-graphql Standards
12
+
13
+ ## Schema Setup
14
+
15
+ ```rust
16
+ use async_graphql::{Schema, EmptySubscription};
17
+
18
+ type AppSchema = Schema<QueryRoot, MutationRoot, EmptySubscription>;
19
+
20
+ fn create_schema(db: Database) -> AppSchema {
21
+ Schema::build(QueryRoot, MutationRoot, EmptySubscription)
22
+ .data(db)
23
+ .finish()
24
+ }
25
+ ```
26
+
27
+ ## Query
28
+
29
+ ```rust
30
+ use async_graphql::{Object, Context, Result};
31
+
32
+ struct QueryRoot;
33
+
34
+ #[Object]
35
+ impl QueryRoot {
36
+ async fn user(&self, ctx: &Context<'_>, id: i32) -> Result<Option<User>> {
37
+ let db = ctx.data::<Database>()?;
38
+ Ok(db.find_user(id).await?)
39
+ }
40
+
41
+ async fn users(
42
+ &self,
43
+ ctx: &Context<'_>,
44
+ #[graphql(default = 10)] limit: i32,
45
+ #[graphql(default = 0)] offset: i32,
46
+ ) -> Result<Vec<User>> {
47
+ let db = ctx.data::<Database>()?;
48
+ Ok(db.list_users(limit, offset).await?)
49
+ }
50
+ }
51
+ ```
52
+
53
+ ## Types
54
+
55
+ ```rust
56
+ use async_graphql::{Object, SimpleObject, InputObject, Enum};
57
+
58
+ // Simple object (auto-implement resolvers)
59
+ #[derive(SimpleObject)]
60
+ struct User {
61
+ id: i32,
62
+ name: String,
63
+ email: String,
64
+ #[graphql(skip)] // Don't expose
65
+ password_hash: String,
66
+ }
67
+
68
+ // Complex object (custom resolvers)
69
+ #[Object]
70
+ impl User {
71
+ async fn posts(&self, ctx: &Context<'_>) -> Result<Vec<Post>> {
72
+ let db = ctx.data::<Database>()?;
73
+ Ok(db.posts_by_user(self.id).await?)
74
+ }
75
+ }
76
+
77
+ // Input type
78
+ #[derive(InputObject)]
79
+ struct CreateUserInput {
80
+ name: String,
81
+ email: String,
82
+ password: String,
83
+ }
84
+
85
+ // Enum
86
+ #[derive(Enum, Copy, Clone, Eq, PartialEq)]
87
+ enum Role {
88
+ Admin,
89
+ User,
90
+ Guest,
91
+ }
92
+ ```
93
+
94
+ ## Mutation
95
+
96
+ ```rust
97
+ struct MutationRoot;
98
+
99
+ #[Object]
100
+ impl MutationRoot {
101
+ async fn create_user(
102
+ &self,
103
+ ctx: &Context<'_>,
104
+ input: CreateUserInput,
105
+ ) -> Result<User> {
106
+ let db = ctx.data::<Database>()?;
107
+ Ok(db.create_user(input).await?)
108
+ }
109
+
110
+ async fn delete_user(&self, ctx: &Context<'_>, id: i32) -> Result<bool> {
111
+ let db = ctx.data::<Database>()?;
112
+ db.delete_user(id).await?;
113
+ Ok(true)
114
+ }
115
+ }
116
+ ```
117
+
118
+ ## Subscription
119
+
120
+ ```rust
121
+ use async_graphql::{Subscription, Object};
122
+ use futures_util::Stream;
123
+
124
+ struct SubscriptionRoot;
125
+
126
+ #[Subscription]
127
+ impl SubscriptionRoot {
128
+ async fn messages(&self, room_id: i32) -> impl Stream<Item = Message> {
129
+ // Return stream of messages
130
+ tokio_stream::wrappers::BroadcastStream::new(rx)
131
+ .filter_map(|r| r.ok())
132
+ }
133
+ }
134
+ ```
135
+
136
+ ## DataLoader
137
+
138
+ ```rust
139
+ use async_graphql::dataloader::{DataLoader, Loader};
140
+ use std::collections::HashMap;
141
+
142
+ struct UserLoader(Database);
143
+
144
+ impl Loader<i32> for UserLoader {
145
+ type Value = User;
146
+ type Error = Error;
147
+
148
+ async fn load(&self, keys: &[i32]) -> Result<HashMap<i32, User>, Error> {
149
+ let users = self.0.users_by_ids(keys).await?;
150
+ Ok(users.into_iter().map(|u| (u.id, u)).collect())
151
+ }
152
+ }
153
+
154
+ // Use in resolver
155
+ #[Object]
156
+ impl Post {
157
+ async fn author(&self, ctx: &Context<'_>) -> Result<User> {
158
+ let loader = ctx.data::<DataLoader<UserLoader>>()?;
159
+ loader.load_one(self.author_id).await?.ok_or("not found".into())
160
+ }
161
+ }
162
+
163
+ // Setup
164
+ Schema::build(query, mutation, subscription)
165
+ .data(DataLoader::new(UserLoader(db), tokio::spawn))
166
+ ```
167
+
168
+ ## Error Handling
169
+
170
+ ```rust
171
+ use async_graphql::{Error, ErrorExtensions};
172
+
173
+ #[Object]
174
+ impl QueryRoot {
175
+ async fn user(&self, id: i32) -> Result<User> {
176
+ find_user(id)
177
+ .await
178
+ .ok_or_else(|| Error::new("User not found")
179
+ .extend_with(|_, e| e.set("code", "NOT_FOUND")))
180
+ }
181
+ }
182
+
183
+ // Custom error type
184
+ #[derive(thiserror::Error, Debug)]
185
+ enum AppError {
186
+ #[error("Not found")]
187
+ NotFound,
188
+ #[error("Unauthorized")]
189
+ Unauthorized,
190
+ }
191
+
192
+ impl ErrorExtensions for AppError {
193
+ fn extend(&self) -> Error {
194
+ Error::new(self.to_string()).extend_with(|_, e| {
195
+ e.set("code", match self {
196
+ AppError::NotFound => "NOT_FOUND",
197
+ AppError::Unauthorized => "UNAUTHORIZED",
198
+ });
199
+ })
200
+ }
201
+ }
202
+ ```
203
+
204
+ ## Axum Integration
205
+
206
+ ```rust
207
+ use async_graphql_axum::{GraphQLRequest, GraphQLResponse};
208
+ use axum::{Extension, Router, routing::post};
209
+
210
+ async fn graphql_handler(
211
+ Extension(schema): Extension<AppSchema>,
212
+ req: GraphQLRequest,
213
+ ) -> GraphQLResponse {
214
+ schema.execute(req.into_inner()).await.into()
215
+ }
216
+
217
+ let app = Router::new()
218
+ .route("/graphql", post(graphql_handler))
219
+ .layer(Extension(schema));
220
+ ```
221
+
222
+ ## Best Practices
223
+
224
+ 1. **DataLoader**: Use for N+1 query prevention
225
+ 2. **Context**: Store shared state (DB, auth) in context
226
+ 3. **Input validation**: Validate in resolvers, return typed errors
227
+ 4. **Pagination**: Use cursor-based pagination for lists
228
+ 5. **Subscriptions**: Use for real-time features only
@@ -0,0 +1,13 @@
1
+ # Async-GraphQL References
2
+
3
+ ## References
4
+
5
+ - [**Schema Patterns**](schema-patterns.md) - Types, resolvers, subscriptions
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use derive macros for types
10
+ - [ ] Context for shared state
11
+ - [ ] DataLoader for N+1 prevention
12
+ - [ ] Subscriptions with async streams
13
+ - [ ] Guard for authorization