@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,182 @@
1
+ ---
2
+ name: Rocket Framework
3
+ description: Type-safe, async Rust web framework with intuitive API.
4
+ metadata:
5
+ labels: [rust, rocket, web, framework]
6
+ triggers:
7
+ files: ['**/main.rs', 'Rocket.toml']
8
+ keywords: [rocket, get, post, launch, routes]
9
+ ---
10
+
11
+ # Rocket Framework Standards
12
+
13
+ ## Application Setup
14
+
15
+ ```rust
16
+ #[macro_use] extern crate rocket;
17
+
18
+ #[launch]
19
+ fn rocket() -> _ {
20
+ rocket::build()
21
+ .mount("/", routes![index, users])
22
+ .mount("/api", routes![api_routes])
23
+ .attach(DbConn::fairing())
24
+ .manage(AppState::new())
25
+ }
26
+
27
+ #[get("/")]
28
+ fn index() -> &'static str {
29
+ "Hello, world!"
30
+ }
31
+ ```
32
+
33
+ ## Route Handlers
34
+
35
+ ```rust
36
+ // Path parameters
37
+ #[get("/users/<id>")]
38
+ fn get_user(id: i64) -> Json<User> {
39
+ Json(find_user(id))
40
+ }
41
+
42
+ // Optional parameters
43
+ #[get("/users?<page>&<limit>")]
44
+ fn list_users(page: Option<u32>, limit: Option<u32>) -> Json<Vec<User>> {
45
+ let page = page.unwrap_or(1);
46
+ let limit = limit.unwrap_or(10);
47
+ Json(fetch_users(page, limit))
48
+ }
49
+
50
+ // Multiple segments
51
+ #[get("/files/<path..>")]
52
+ fn get_file(path: PathBuf) -> Option<NamedFile> {
53
+ NamedFile::open(Path::new("static/").join(path)).ok()
54
+ }
55
+ ```
56
+
57
+ ## Request Guards
58
+
59
+ ```rust
60
+ use rocket::request::{FromRequest, Outcome};
61
+
62
+ struct AuthUser {
63
+ id: i64,
64
+ role: String,
65
+ }
66
+
67
+ #[rocket::async_trait]
68
+ impl<'r> FromRequest<'r> for AuthUser {
69
+ type Error = AuthError;
70
+
71
+ async fn from_request(req: &'r Request<'_>) -> Outcome<Self, Self::Error> {
72
+ match req.headers().get_one("Authorization") {
73
+ Some(token) => match validate_token(token).await {
74
+ Ok(user) => Outcome::Success(user),
75
+ Err(e) => Outcome::Error((Status::Unauthorized, e)),
76
+ },
77
+ None => Outcome::Forward(Status::Unauthorized),
78
+ }
79
+ }
80
+ }
81
+
82
+ #[get("/protected")]
83
+ fn protected(user: AuthUser) -> String {
84
+ format!("Hello, {}", user.id)
85
+ }
86
+ ```
87
+
88
+ ## JSON Handling
89
+
90
+ ```rust
91
+ use rocket::serde::json::Json;
92
+
93
+ #[derive(Serialize, Deserialize)]
94
+ struct CreateUser {
95
+ name: String,
96
+ email: String,
97
+ }
98
+
99
+ #[post("/users", data = "<user>")]
100
+ fn create_user(user: Json<CreateUser>) -> Result<Json<User>, Status> {
101
+ let user = user.into_inner();
102
+ match insert_user(&user) {
103
+ Ok(created) => Ok(Json(created)),
104
+ Err(_) => Err(Status::InternalServerError),
105
+ }
106
+ }
107
+ ```
108
+
109
+ ## State Management
110
+
111
+ ```rust
112
+ struct AppState {
113
+ config: Config,
114
+ cache: Cache,
115
+ }
116
+
117
+ #[launch]
118
+ fn rocket() -> _ {
119
+ rocket::build()
120
+ .manage(AppState::new())
121
+ .mount("/", routes![handler])
122
+ }
123
+
124
+ #[get("/config")]
125
+ fn handler(state: &State<AppState>) -> String {
126
+ state.config.name.clone()
127
+ }
128
+ ```
129
+
130
+ ## Fairings (Middleware)
131
+
132
+ ```rust
133
+ use rocket::fairing::{Fairing, Info, Kind};
134
+
135
+ struct RequestLogger;
136
+
137
+ #[rocket::async_trait]
138
+ impl Fairing for RequestLogger {
139
+ fn info(&self) -> Info {
140
+ Info {
141
+ name: "Request Logger",
142
+ kind: Kind::Request | Kind::Response,
143
+ }
144
+ }
145
+
146
+ async fn on_request(&self, req: &mut Request<'_>, _: &mut Data<'_>) {
147
+ println!("Request: {} {}", req.method(), req.uri());
148
+ }
149
+
150
+ async fn on_response<'r>(&self, _: &'r Request<'_>, res: &mut Response<'r>) {
151
+ println!("Response: {}", res.status());
152
+ }
153
+ }
154
+ ```
155
+
156
+ ## Error Handling
157
+
158
+ ```rust
159
+ #[catch(404)]
160
+ fn not_found() -> Json<ErrorResponse> {
161
+ Json(ErrorResponse { error: "Not found".into() })
162
+ }
163
+
164
+ #[catch(500)]
165
+ fn internal_error() -> Json<ErrorResponse> {
166
+ Json(ErrorResponse { error: "Internal server error".into() })
167
+ }
168
+
169
+ #[launch]
170
+ fn rocket() -> _ {
171
+ rocket::build()
172
+ .register("/", catchers![not_found, internal_error])
173
+ }
174
+ ```
175
+
176
+ ## Best Practices
177
+
178
+ 1. **Guards**: Use request guards for auth, validation
179
+ 2. **Managed state**: Prefer `&State<T>` over global state
180
+ 3. **Fairings**: Use for cross-cutting concerns
181
+ 4. **Configuration**: Use `Rocket.toml` for environment-specific config
182
+ 5. **Testing**: Use `rocket::local::blocking::Client` for tests
@@ -0,0 +1,13 @@
1
+ # Rocket Framework References
2
+
3
+ ## References
4
+
5
+ - [**Handler Patterns**](handler-patterns.md) - Routes, guards, responses
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use #[rocket::main] for entry point
10
+ - [ ] Request guards for validation
11
+ - [ ] Responder trait for custom responses
12
+ - [ ] Fairings for middleware
13
+ - [ ] Managed state for shared data
@@ -0,0 +1,209 @@
1
+ # Rocket Handler Patterns
2
+
3
+ ## Basic Routes
4
+
5
+ ```rust
6
+ #[macro_use] extern crate rocket;
7
+
8
+ use rocket::serde::json::Json;
9
+ use serde::{Deserialize, Serialize};
10
+
11
+ #[get("/")]
12
+ fn index() -> &'static str {
13
+ "Hello, world!"
14
+ }
15
+
16
+ #[get("/users/<id>")]
17
+ fn get_user(id: i64) -> Json<User> {
18
+ Json(User { id, name: "John".into() })
19
+ }
20
+
21
+ #[post("/users", data = "<user>")]
22
+ fn create_user(user: Json<CreateUser>) -> Json<User> {
23
+ Json(User {
24
+ id: 1,
25
+ name: user.name.clone(),
26
+ })
27
+ }
28
+
29
+ #[launch]
30
+ fn rocket() -> _ {
31
+ rocket::build()
32
+ .mount("/", routes![index, get_user, create_user])
33
+ }
34
+
35
+ #[derive(Serialize)]
36
+ struct User {
37
+ id: i64,
38
+ name: String,
39
+ }
40
+
41
+ #[derive(Deserialize)]
42
+ struct CreateUser {
43
+ name: String,
44
+ }
45
+ ```
46
+
47
+ ## Request Guards
48
+
49
+ ```rust
50
+ use rocket::request::{self, FromRequest, Request};
51
+ use rocket::http::Status;
52
+
53
+ struct ApiKey<'r>(&'r str);
54
+
55
+ #[rocket::async_trait]
56
+ impl<'r> FromRequest<'r> for ApiKey<'r> {
57
+ type Error = ();
58
+
59
+ async fn from_request(req: &'r Request<'_>) -> request::Outcome<Self, Self::Error> {
60
+ match req.headers().get_one("X-Api-Key") {
61
+ Some(key) if is_valid(key) => request::Outcome::Success(ApiKey(key)),
62
+ Some(_) => request::Outcome::Error((Status::Unauthorized, ())),
63
+ None => request::Outcome::Forward(Status::Unauthorized),
64
+ }
65
+ }
66
+ }
67
+
68
+ #[get("/protected")]
69
+ fn protected(key: ApiKey<'_>) -> &'static str {
70
+ "Secret data"
71
+ }
72
+
73
+ // Optional guard
74
+ #[get("/maybe-auth")]
75
+ fn maybe_auth(key: Option<ApiKey<'_>>) -> &'static str {
76
+ match key {
77
+ Some(_) => "Authenticated",
78
+ None => "Anonymous",
79
+ }
80
+ }
81
+ ```
82
+
83
+ ## Managed State
84
+
85
+ ```rust
86
+ use std::sync::atomic::{AtomicUsize, Ordering};
87
+
88
+ struct HitCount(AtomicUsize);
89
+
90
+ #[get("/count")]
91
+ fn count(hit_count: &State<HitCount>) -> String {
92
+ let count = hit_count.0.fetch_add(1, Ordering::Relaxed);
93
+ format!("Hits: {}", count)
94
+ }
95
+
96
+ #[launch]
97
+ fn rocket() -> _ {
98
+ rocket::build()
99
+ .manage(HitCount(AtomicUsize::new(0)))
100
+ .mount("/", routes![count])
101
+ }
102
+ ```
103
+
104
+ ## Error Handling
105
+
106
+ ```rust
107
+ use rocket::response::status;
108
+ use rocket::http::Status;
109
+
110
+ #[derive(Responder)]
111
+ pub enum ApiResponse<T> {
112
+ #[response(status = 200)]
113
+ Ok(Json<T>),
114
+ #[response(status = 404)]
115
+ NotFound(Json<ErrorMessage>),
116
+ #[response(status = 500)]
117
+ InternalError(Json<ErrorMessage>),
118
+ }
119
+
120
+ #[derive(Serialize)]
121
+ pub struct ErrorMessage {
122
+ message: String,
123
+ }
124
+
125
+ #[get("/users/<id>")]
126
+ async fn get_user(id: i64, db: &State<Database>) -> ApiResponse<User> {
127
+ match db.find_user(id).await {
128
+ Ok(Some(user)) => ApiResponse::Ok(Json(user)),
129
+ Ok(None) => ApiResponse::NotFound(Json(ErrorMessage {
130
+ message: "User not found".into(),
131
+ })),
132
+ Err(_) => ApiResponse::InternalError(Json(ErrorMessage {
133
+ message: "Database error".into(),
134
+ })),
135
+ }
136
+ }
137
+
138
+ // Catchers for default error pages
139
+ #[catch(404)]
140
+ fn not_found() -> Json<ErrorMessage> {
141
+ Json(ErrorMessage { message: "Not found".into() })
142
+ }
143
+
144
+ #[catch(500)]
145
+ fn internal_error() -> Json<ErrorMessage> {
146
+ Json(ErrorMessage { message: "Internal error".into() })
147
+ }
148
+
149
+ #[launch]
150
+ fn rocket() -> _ {
151
+ rocket::build()
152
+ .register("/", catchers![not_found, internal_error])
153
+ }
154
+ ```
155
+
156
+ ## Fairings (Middleware)
157
+
158
+ ```rust
159
+ use rocket::fairing::{Fairing, Info, Kind};
160
+ use rocket::{Request, Response, Data};
161
+
162
+ pub struct Timer;
163
+
164
+ #[rocket::async_trait]
165
+ impl Fairing for Timer {
166
+ fn info(&self) -> Info {
167
+ Info {
168
+ name: "Request Timer",
169
+ kind: Kind::Request | Kind::Response,
170
+ }
171
+ }
172
+
173
+ async fn on_request(&self, request: &mut Request<'_>, _: &mut Data<'_>) {
174
+ request.local_cache(|| std::time::Instant::now());
175
+ }
176
+
177
+ async fn on_response<'r>(&self, request: &'r Request<'_>, response: &mut Response<'r>) {
178
+ let start = request.local_cache(|| std::time::Instant::now());
179
+ let duration = start.elapsed();
180
+ response.set_raw_header("X-Response-Time", format!("{}ms", duration.as_millis()));
181
+ }
182
+ }
183
+
184
+ #[launch]
185
+ fn rocket() -> _ {
186
+ rocket::build()
187
+ .attach(Timer)
188
+ }
189
+ ```
190
+
191
+ ## Forms and Validation
192
+
193
+ ```rust
194
+ use rocket::form::{Form, FromForm};
195
+
196
+ #[derive(FromForm)]
197
+ struct LoginForm<'r> {
198
+ #[field(validate = len(3..=20))]
199
+ username: &'r str,
200
+ #[field(validate = len(8..))]
201
+ password: &'r str,
202
+ }
203
+
204
+ #[post("/login", data = "<form>")]
205
+ fn login(form: Form<LoginForm<'_>>) -> &'static str {
206
+ // Process login
207
+ "Logged in"
208
+ }
209
+ ```
@@ -0,0 +1,230 @@
1
+ ---
2
+ name: SeaORM
3
+ description: Async ORM for Rust with compile-time checked queries.
4
+ metadata:
5
+ labels: [rust, sea-orm, orm, database, async]
6
+ triggers:
7
+ files: ['**/entity/*.rs', '**/migration/*.rs']
8
+ keywords: [sea_orm, Entity, ActiveModel, DbConn, Select]
9
+ ---
10
+
11
+ # SeaORM Standards
12
+
13
+ ## Entity Definition
14
+
15
+ ```rust
16
+ use sea_orm::entity::prelude::*;
17
+
18
+ #[derive(Clone, Debug, PartialEq, DeriveEntityModel)]
19
+ #[sea_orm(table_name = "users")]
20
+ pub struct Model {
21
+ #[sea_orm(primary_key)]
22
+ pub id: i32,
23
+ pub name: String,
24
+ #[sea_orm(unique)]
25
+ pub email: String,
26
+ pub created_at: DateTimeUtc,
27
+ }
28
+
29
+ #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
30
+ pub enum Relation {
31
+ #[sea_orm(has_many = "super::post::Entity")]
32
+ Posts,
33
+ }
34
+
35
+ impl Related<super::post::Entity> for Entity {
36
+ fn to() -> RelationDef {
37
+ Relation::Posts.def()
38
+ }
39
+ }
40
+
41
+ impl ActiveModelBehavior for ActiveModel {}
42
+ ```
43
+
44
+ ## Connection
45
+
46
+ ```rust
47
+ use sea_orm::{Database, DbConn, ConnectOptions};
48
+
49
+ async fn connect() -> Result<DbConn, DbErr> {
50
+ let mut opt = ConnectOptions::new("postgres://user:pass@localhost/db");
51
+ opt.max_connections(100)
52
+ .min_connections(5)
53
+ .sqlx_logging(true);
54
+
55
+ Database::connect(opt).await
56
+ }
57
+ ```
58
+
59
+ ## CRUD Operations
60
+
61
+ ```rust
62
+ use sea_orm::{ActiveModelTrait, EntityTrait, Set};
63
+
64
+ // Create
65
+ async fn create_user(db: &DbConn, name: String, email: String) -> Result<user::Model, DbErr> {
66
+ let user = user::ActiveModel {
67
+ name: Set(name),
68
+ email: Set(email),
69
+ created_at: Set(Utc::now()),
70
+ ..Default::default()
71
+ };
72
+ user.insert(db).await
73
+ }
74
+
75
+ // Read
76
+ async fn find_user(db: &DbConn, id: i32) -> Result<Option<user::Model>, DbErr> {
77
+ User::find_by_id(id).one(db).await
78
+ }
79
+
80
+ async fn find_all(db: &DbConn) -> Result<Vec<user::Model>, DbErr> {
81
+ User::find().all(db).await
82
+ }
83
+
84
+ // Update
85
+ async fn update_user(db: &DbConn, id: i32, name: String) -> Result<user::Model, DbErr> {
86
+ let user: user::ActiveModel = User::find_by_id(id)
87
+ .one(db)
88
+ .await?
89
+ .ok_or(DbErr::RecordNotFound("User not found".into()))?
90
+ .into();
91
+
92
+ user::ActiveModel {
93
+ name: Set(name),
94
+ ..user
95
+ }.update(db).await
96
+ }
97
+
98
+ // Delete
99
+ async fn delete_user(db: &DbConn, id: i32) -> Result<DeleteResult, DbErr> {
100
+ User::delete_by_id(id).exec(db).await
101
+ }
102
+ ```
103
+
104
+ ## Queries
105
+
106
+ ```rust
107
+ use sea_orm::{Condition, QueryFilter, QueryOrder, QuerySelect};
108
+
109
+ // Filter
110
+ let users = User::find()
111
+ .filter(user::Column::Email.contains("@example.com"))
112
+ .filter(user::Column::CreatedAt.gt(cutoff_date))
113
+ .all(db)
114
+ .await?;
115
+
116
+ // Complex conditions
117
+ let users = User::find()
118
+ .filter(
119
+ Condition::any()
120
+ .add(user::Column::Role.eq("admin"))
121
+ .add(user::Column::Role.eq("moderator"))
122
+ )
123
+ .all(db)
124
+ .await?;
125
+
126
+ // Order and limit
127
+ let users = User::find()
128
+ .order_by_desc(user::Column::CreatedAt)
129
+ .limit(10)
130
+ .offset(20)
131
+ .all(db)
132
+ .await?;
133
+
134
+ // Select specific columns
135
+ let names: Vec<String> = User::find()
136
+ .select_only()
137
+ .column(user::Column::Name)
138
+ .into_tuple()
139
+ .all(db)
140
+ .await?;
141
+ ```
142
+
143
+ ## Relations
144
+
145
+ ```rust
146
+ // Define relation in entity
147
+ #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
148
+ pub enum Relation {
149
+ #[sea_orm(
150
+ belongs_to = "super::user::Entity",
151
+ from = "Column::AuthorId",
152
+ to = "super::user::Column::Id"
153
+ )]
154
+ Author,
155
+ }
156
+
157
+ // Eager loading
158
+ let posts_with_authors = Post::find()
159
+ .find_also_related(User)
160
+ .all(db)
161
+ .await?;
162
+
163
+ // Lazy loading
164
+ let user = User::find_by_id(1).one(db).await?;
165
+ let posts = user.find_related(Post).all(db).await?;
166
+ ```
167
+
168
+ ## Transactions
169
+
170
+ ```rust
171
+ use sea_orm::TransactionTrait;
172
+
173
+ async fn transfer(db: &DbConn, from: i32, to: i32, amount: i32) -> Result<(), DbErr> {
174
+ db.transaction::<_, (), DbErr>(|txn| {
175
+ Box::pin(async move {
176
+ // Debit from source
177
+ let from_account = Account::find_by_id(from).one(txn).await?.unwrap();
178
+ account::ActiveModel {
179
+ balance: Set(from_account.balance - amount),
180
+ ..from_account.into()
181
+ }.update(txn).await?;
182
+
183
+ // Credit to destination
184
+ let to_account = Account::find_by_id(to).one(txn).await?.unwrap();
185
+ account::ActiveModel {
186
+ balance: Set(to_account.balance + amount),
187
+ ..to_account.into()
188
+ }.update(txn).await?;
189
+
190
+ Ok(())
191
+ })
192
+ }).await
193
+ }
194
+ ```
195
+
196
+ ## Migrations
197
+
198
+ ```rust
199
+ // migration/src/m20220101_000001_create_users.rs
200
+ use sea_orm_migration::prelude::*;
201
+
202
+ #[derive(DeriveMigrationName)]
203
+ pub struct Migration;
204
+
205
+ #[async_trait::async_trait]
206
+ impl MigrationTrait for Migration {
207
+ async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
208
+ manager.create_table(
209
+ Table::create()
210
+ .table(Users::Table)
211
+ .col(ColumnDef::new(Users::Id).integer().auto_increment().primary_key())
212
+ .col(ColumnDef::new(Users::Name).string().not_null())
213
+ .col(ColumnDef::new(Users::Email).string().unique_key().not_null())
214
+ .to_owned()
215
+ ).await
216
+ }
217
+
218
+ async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
219
+ manager.drop_table(Table::drop().table(Users::Table).to_owned()).await
220
+ }
221
+ }
222
+ ```
223
+
224
+ ## Best Practices
225
+
226
+ 1. **ActiveModel**: Use `Set()` for values to update
227
+ 2. **Transactions**: Wrap related operations
228
+ 3. **Migrations**: Use sea-orm-cli for generation
229
+ 4. **Relations**: Define both sides of relationships
230
+ 5. **Logging**: Enable sqlx_logging for debugging
@@ -0,0 +1,13 @@
1
+ # Sea ORM References
2
+
3
+ ## References
4
+
5
+ - [**Entity Patterns**](entity-patterns.md) - Models, queries, relations
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Derive DeriveEntityModel for entities
10
+ - [ ] Use ActiveModel for inserts/updates
11
+ - [ ] Define relations with Related trait
12
+ - [ ] Async/await native support
13
+ - [ ] Compatible with SQLx runtime