@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,13 @@
1
+ # SQLx Database References
2
+
3
+ ## References
4
+
5
+ - [**Query Patterns**](query-patterns.md) - Compile-time checked queries, pooling
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use sqlx::query! for compile-time checking
10
+ - [ ] Connection pooling with PgPool
11
+ - [ ] Migrations with sqlx-cli
12
+ - [ ] Transaction support
13
+ - [ ] FromRow for custom types
@@ -0,0 +1,210 @@
1
+ # SQLx Query Patterns
2
+
3
+ ## Connection Pool
4
+
5
+ ```rust
6
+ use sqlx::postgres::PgPoolOptions;
7
+ use sqlx::PgPool;
8
+
9
+ async fn create_pool() -> Result<PgPool, sqlx::Error> {
10
+ let pool = PgPoolOptions::new()
11
+ .max_connections(5)
12
+ .acquire_timeout(Duration::from_secs(3))
13
+ .connect(&std::env::var("DATABASE_URL")?)
14
+ .await?;
15
+
16
+ Ok(pool)
17
+ }
18
+ ```
19
+
20
+ ## Compile-Time Checked Queries
21
+
22
+ ```rust
23
+ // Requires DATABASE_URL at compile time
24
+ // Run: cargo sqlx prepare
25
+
26
+ // Single row
27
+ let user = sqlx::query!(
28
+ "SELECT id, name, email FROM users WHERE id = $1",
29
+ user_id
30
+ )
31
+ .fetch_one(&pool)
32
+ .await?;
33
+
34
+ println!("User: {} - {}", user.name, user.email);
35
+
36
+ // Multiple rows
37
+ let users = sqlx::query!(
38
+ "SELECT id, name FROM users WHERE active = $1 LIMIT $2",
39
+ true,
40
+ 10i64
41
+ )
42
+ .fetch_all(&pool)
43
+ .await?;
44
+
45
+ // Optional row
46
+ let user = sqlx::query!(
47
+ "SELECT id, name FROM users WHERE email = $1",
48
+ email
49
+ )
50
+ .fetch_optional(&pool)
51
+ .await?;
52
+ ```
53
+
54
+ ## Query As (Map to Struct)
55
+
56
+ ```rust
57
+ #[derive(sqlx::FromRow)]
58
+ struct User {
59
+ id: i64,
60
+ name: String,
61
+ email: String,
62
+ created_at: DateTime<Utc>,
63
+ }
64
+
65
+ let users: Vec<User> = sqlx::query_as!(
66
+ User,
67
+ "SELECT id, name, email, created_at FROM users WHERE active = $1",
68
+ true
69
+ )
70
+ .fetch_all(&pool)
71
+ .await?;
72
+
73
+ // Or with runtime query
74
+ let users: Vec<User> = sqlx::query_as::<_, User>(
75
+ "SELECT id, name, email, created_at FROM users"
76
+ )
77
+ .fetch_all(&pool)
78
+ .await?;
79
+ ```
80
+
81
+ ## Insert, Update, Delete
82
+
83
+ ```rust
84
+ // Insert with returning
85
+ let user = sqlx::query!(
86
+ r#"
87
+ INSERT INTO users (name, email)
88
+ VALUES ($1, $2)
89
+ RETURNING id, name, email, created_at
90
+ "#,
91
+ name,
92
+ email
93
+ )
94
+ .fetch_one(&pool)
95
+ .await?;
96
+
97
+ // Update
98
+ let result = sqlx::query!(
99
+ "UPDATE users SET name = $1 WHERE id = $2",
100
+ new_name,
101
+ user_id
102
+ )
103
+ .execute(&pool)
104
+ .await?;
105
+
106
+ println!("Rows affected: {}", result.rows_affected());
107
+
108
+ // Delete
109
+ sqlx::query!("DELETE FROM users WHERE id = $1", user_id)
110
+ .execute(&pool)
111
+ .await?;
112
+ ```
113
+
114
+ ## Transactions
115
+
116
+ ```rust
117
+ async fn transfer_funds(
118
+ pool: &PgPool,
119
+ from: i64,
120
+ to: i64,
121
+ amount: i64,
122
+ ) -> Result<(), sqlx::Error> {
123
+ let mut tx = pool.begin().await?;
124
+
125
+ sqlx::query!(
126
+ "UPDATE accounts SET balance = balance - $1 WHERE id = $2",
127
+ amount,
128
+ from
129
+ )
130
+ .execute(&mut *tx)
131
+ .await?;
132
+
133
+ sqlx::query!(
134
+ "UPDATE accounts SET balance = balance + $1 WHERE id = $2",
135
+ amount,
136
+ to
137
+ )
138
+ .execute(&mut *tx)
139
+ .await?;
140
+
141
+ tx.commit().await?;
142
+ Ok(())
143
+ }
144
+ ```
145
+
146
+ ## Streaming
147
+
148
+ ```rust
149
+ use futures::TryStreamExt;
150
+
151
+ let mut rows = sqlx::query!("SELECT id, name FROM users")
152
+ .fetch(&pool);
153
+
154
+ while let Some(row) = rows.try_next().await? {
155
+ println!("User: {} - {}", row.id, row.name);
156
+ }
157
+ ```
158
+
159
+ ## Custom Types
160
+
161
+ ```rust
162
+ #[derive(sqlx::Type)]
163
+ #[sqlx(type_name = "user_role", rename_all = "lowercase")]
164
+ enum UserRole {
165
+ Admin,
166
+ User,
167
+ Guest,
168
+ }
169
+
170
+ #[derive(sqlx::FromRow)]
171
+ struct User {
172
+ id: i64,
173
+ name: String,
174
+ role: UserRole,
175
+ }
176
+
177
+ // In query
178
+ let users = sqlx::query_as!(
179
+ User,
180
+ r#"SELECT id, name, role as "role: UserRole" FROM users"#
181
+ )
182
+ .fetch_all(&pool)
183
+ .await?;
184
+ ```
185
+
186
+ ## Migrations
187
+
188
+ ```bash
189
+ # Install CLI
190
+ cargo install sqlx-cli
191
+
192
+ # Create migration
193
+ sqlx migrate add create_users
194
+
195
+ # Run migrations
196
+ sqlx migrate run
197
+
198
+ # Prepare for offline compilation
199
+ cargo sqlx prepare
200
+ ```
201
+
202
+ ```sql
203
+ -- migrations/20240101000000_create_users.sql
204
+ CREATE TABLE users (
205
+ id BIGSERIAL PRIMARY KEY,
206
+ name VARCHAR(255) NOT NULL,
207
+ email VARCHAR(255) UNIQUE NOT NULL,
208
+ created_at TIMESTAMPTZ DEFAULT NOW()
209
+ );
210
+ ```
@@ -0,0 +1,180 @@
1
+ ---
2
+ name: Tauri
3
+ description: Build desktop apps with Rust backend and WebView frontend.
4
+ metadata:
5
+ labels: [rust, tauri, desktop, webview]
6
+ triggers:
7
+ files: ['tauri.conf.json', 'src-tauri/**/*.rs']
8
+ keywords: [tauri, invoke, command, emit, State]
9
+ ---
10
+
11
+ # Tauri Standards
12
+
13
+ ## Architecture
14
+
15
+ ```
16
+ my-app/
17
+ ├── src/ # Frontend (React/Vue/Svelte)
18
+ ├── src-tauri/
19
+ │ ├── Cargo.toml
20
+ │ ├── tauri.conf.json # Tauri config
21
+ │ ├── src/
22
+ │ │ ├── main.rs # Entry point
23
+ │ │ └── lib.rs # Commands
24
+ │ └── icons/
25
+ ```
26
+
27
+ ## Commands (Rust → Frontend)
28
+
29
+ ```rust
30
+ use tauri::State;
31
+
32
+ #[tauri::command]
33
+ fn greet(name: &str) -> String {
34
+ format!("Hello, {}!", name)
35
+ }
36
+
37
+ // With state
38
+ #[tauri::command]
39
+ fn get_count(state: State<'_, AppState>) -> u32 {
40
+ *state.count.lock().unwrap()
41
+ }
42
+
43
+ // Async command
44
+ #[tauri::command]
45
+ async fn fetch_data(url: String) -> Result<String, String> {
46
+ reqwest::get(&url)
47
+ .await
48
+ .map_err(|e| e.to_string())?
49
+ .text()
50
+ .await
51
+ .map_err(|e| e.to_string())
52
+ }
53
+
54
+ // Register commands
55
+ fn main() {
56
+ tauri::Builder::default()
57
+ .manage(AppState::default())
58
+ .invoke_handler(tauri::generate_handler![greet, get_count, fetch_data])
59
+ .run(tauri::generate_context!())
60
+ .expect("error running app");
61
+ }
62
+ ```
63
+
64
+ ## Frontend Invoke
65
+
66
+ ```typescript
67
+ import { invoke } from '@tauri-apps/api/tauri';
68
+
69
+ // Call Rust command
70
+ const result = await invoke<string>('greet', { name: 'World' });
71
+
72
+ // With error handling
73
+ try {
74
+ const data = await invoke<Data>('fetch_data', { url });
75
+ } catch (error) {
76
+ console.error(error);
77
+ }
78
+ ```
79
+
80
+ ## State Management
81
+
82
+ ```rust
83
+ use std::sync::Mutex;
84
+
85
+ struct AppState {
86
+ count: Mutex<u32>,
87
+ db: Mutex<Database>,
88
+ }
89
+
90
+ impl Default for AppState {
91
+ fn default() -> Self {
92
+ Self {
93
+ count: Mutex::new(0),
94
+ db: Mutex::new(Database::new()),
95
+ }
96
+ }
97
+ }
98
+
99
+ // Access in commands
100
+ #[tauri::command]
101
+ fn increment(state: State<'_, AppState>) -> u32 {
102
+ let mut count = state.count.lock().unwrap();
103
+ *count += 1;
104
+ *count
105
+ }
106
+ ```
107
+
108
+ ## Events
109
+
110
+ ```rust
111
+ use tauri::{AppHandle, Manager};
112
+
113
+ // Emit from Rust
114
+ #[tauri::command]
115
+ fn start_process(app: AppHandle) {
116
+ std::thread::spawn(move || {
117
+ for i in 0..100 {
118
+ app.emit_all("progress", i).unwrap();
119
+ std::thread::sleep(Duration::from_millis(100));
120
+ }
121
+ });
122
+ }
123
+
124
+ // Listen in Rust
125
+ app.listen_global("frontend-event", |event| {
126
+ println!("Received: {:?}", event.payload());
127
+ });
128
+ ```
129
+
130
+ ```typescript
131
+ // Listen in frontend
132
+ import { listen } from '@tauri-apps/api/event';
133
+
134
+ const unlisten = await listen<number>('progress', (event) => {
135
+ console.log('Progress:', event.payload);
136
+ });
137
+
138
+ // Emit from frontend
139
+ import { emit } from '@tauri-apps/api/event';
140
+ await emit('frontend-event', { data: 'value' });
141
+ ```
142
+
143
+ ## File System
144
+
145
+ ```rust
146
+ use tauri::api::path::app_data_dir;
147
+
148
+ #[tauri::command]
149
+ fn save_config(app: AppHandle, config: Config) -> Result<(), String> {
150
+ let path = app_data_dir(&app.config())
151
+ .ok_or("No app data dir")?
152
+ .join("config.json");
153
+
154
+ std::fs::write(&path, serde_json::to_string(&config).unwrap())
155
+ .map_err(|e| e.to_string())
156
+ }
157
+ ```
158
+
159
+ ## Permissions (tauri.conf.json)
160
+
161
+ ```json
162
+ {
163
+ "tauri": {
164
+ "allowlist": {
165
+ "fs": { "all": true, "scope": ["$APP/*"] },
166
+ "shell": { "open": true },
167
+ "dialog": { "all": true },
168
+ "http": { "all": true, "scope": ["https://api.example.com/*"] }
169
+ }
170
+ }
171
+ }
172
+ ```
173
+
174
+ ## Best Practices
175
+
176
+ 1. **Commands**: Keep thin, delegate to services
177
+ 2. **State**: Use `Mutex` for shared state, avoid long locks
178
+ 3. **Errors**: Return `Result<T, String>` for frontend handling
179
+ 4. **Async**: Use async commands for I/O operations
180
+ 5. **Security**: Scope file/http access in allowlist
@@ -0,0 +1,13 @@
1
+ # Tauri Desktop References
2
+
3
+ ## References
4
+
5
+ - [**Command Patterns**](command-patterns.md) - IPC, state, events
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use #[tauri::command] for IPC
10
+ - [ ] Manage state with State<>
11
+ - [ ] Emit events for async updates
12
+ - [ ] Window management
13
+ - [ ] File system access with APIs
@@ -0,0 +1,209 @@
1
+ # Tauri Command Patterns
2
+
3
+ ## Basic Commands
4
+
5
+ ```rust
6
+ use tauri::command;
7
+
8
+ #[command]
9
+ fn greet(name: &str) -> String {
10
+ format!("Hello, {}!", name)
11
+ }
12
+
13
+ #[command]
14
+ async fn fetch_data(url: String) -> Result<String, String> {
15
+ reqwest::get(&url)
16
+ .await
17
+ .map_err(|e| e.to_string())?
18
+ .text()
19
+ .await
20
+ .map_err(|e| e.to_string())
21
+ }
22
+
23
+ fn main() {
24
+ tauri::Builder::default()
25
+ .invoke_handler(tauri::generate_handler![greet, fetch_data])
26
+ .run(tauri::generate_context!())
27
+ .expect("error running app");
28
+ }
29
+ ```
30
+
31
+ ## State Management
32
+
33
+ ```rust
34
+ use std::sync::Mutex;
35
+ use tauri::State;
36
+
37
+ struct AppState {
38
+ counter: Mutex<i32>,
39
+ db: Database,
40
+ }
41
+
42
+ #[command]
43
+ fn increment(state: State<AppState>) -> i32 {
44
+ let mut counter = state.counter.lock().unwrap();
45
+ *counter += 1;
46
+ *counter
47
+ }
48
+
49
+ #[command]
50
+ async fn get_users(state: State<'_, AppState>) -> Result<Vec<User>, String> {
51
+ state.db.get_users()
52
+ .await
53
+ .map_err(|e| e.to_string())
54
+ }
55
+
56
+ fn main() {
57
+ let state = AppState {
58
+ counter: Mutex::new(0),
59
+ db: Database::new(),
60
+ };
61
+
62
+ tauri::Builder::default()
63
+ .manage(state)
64
+ .invoke_handler(tauri::generate_handler![increment, get_users])
65
+ .run(tauri::generate_context!())
66
+ .unwrap();
67
+ }
68
+ ```
69
+
70
+ ## Events
71
+
72
+ ```rust
73
+ use tauri::{Manager, Window};
74
+
75
+ #[command]
76
+ fn start_download(window: Window, url: String) {
77
+ std::thread::spawn(move || {
78
+ for progress in 0..=100 {
79
+ std::thread::sleep(std::time::Duration::from_millis(50));
80
+ window.emit("download-progress", progress).unwrap();
81
+ }
82
+ window.emit("download-complete", ()).unwrap();
83
+ });
84
+ }
85
+
86
+ // In frontend (JavaScript)
87
+ // import { listen } from '@tauri-apps/api/event';
88
+ // await listen('download-progress', (event) => {
89
+ // console.log('Progress:', event.payload);
90
+ // });
91
+ ```
92
+
93
+ ## Window Management
94
+
95
+ ```rust
96
+ use tauri::{Manager, WindowBuilder, WindowUrl};
97
+
98
+ #[command]
99
+ async fn open_settings(app: tauri::AppHandle) -> Result<(), String> {
100
+ WindowBuilder::new(
101
+ &app,
102
+ "settings",
103
+ WindowUrl::App("settings.html".into())
104
+ )
105
+ .title("Settings")
106
+ .inner_size(600.0, 400.0)
107
+ .resizable(false)
108
+ .build()
109
+ .map_err(|e| e.to_string())?;
110
+
111
+ Ok(())
112
+ }
113
+
114
+ #[command]
115
+ fn close_window(window: Window) {
116
+ window.close().unwrap();
117
+ }
118
+
119
+ #[command]
120
+ fn minimize_window(window: Window) {
121
+ window.minimize().unwrap();
122
+ }
123
+ ```
124
+
125
+ ## File Operations
126
+
127
+ ```rust
128
+ use std::fs;
129
+ use tauri::api::path::app_data_dir;
130
+
131
+ #[command]
132
+ fn read_config(app: tauri::AppHandle) -> Result<String, String> {
133
+ let config_dir = app_data_dir(&app.config())
134
+ .ok_or("Failed to get app data dir")?;
135
+ let config_path = config_dir.join("config.json");
136
+
137
+ fs::read_to_string(config_path)
138
+ .map_err(|e| e.to_string())
139
+ }
140
+
141
+ #[command]
142
+ fn save_config(app: tauri::AppHandle, config: String) -> Result<(), String> {
143
+ let config_dir = app_data_dir(&app.config())
144
+ .ok_or("Failed to get app data dir")?;
145
+
146
+ fs::create_dir_all(&config_dir)
147
+ .map_err(|e| e.to_string())?;
148
+
149
+ fs::write(config_dir.join("config.json"), config)
150
+ .map_err(|e| e.to_string())
151
+ }
152
+ ```
153
+
154
+ ## Menu and System Tray
155
+
156
+ ```rust
157
+ use tauri::{CustomMenuItem, Menu, MenuItem, Submenu, SystemTray, SystemTrayMenu};
158
+
159
+ fn main() {
160
+ let menu = Menu::new()
161
+ .add_submenu(Submenu::new(
162
+ "File",
163
+ Menu::new()
164
+ .add_item(CustomMenuItem::new("open", "Open"))
165
+ .add_native_item(MenuItem::Separator)
166
+ .add_item(CustomMenuItem::new("quit", "Quit")),
167
+ ));
168
+
169
+ let tray_menu = SystemTrayMenu::new()
170
+ .add_item(CustomMenuItem::new("show", "Show"))
171
+ .add_item(CustomMenuItem::new("quit", "Quit"));
172
+
173
+ let tray = SystemTray::new().with_menu(tray_menu);
174
+
175
+ tauri::Builder::default()
176
+ .menu(menu)
177
+ .system_tray(tray)
178
+ .on_menu_event(|event| {
179
+ match event.menu_item_id() {
180
+ "quit" => std::process::exit(0),
181
+ "open" => { /* handle open */ }
182
+ _ => {}
183
+ }
184
+ })
185
+ .on_system_tray_event(|app, event| {
186
+ // Handle tray events
187
+ })
188
+ .run(tauri::generate_context!())
189
+ .unwrap();
190
+ }
191
+ ```
192
+
193
+ ## Frontend Integration
194
+
195
+ ```typescript
196
+ // In frontend (TypeScript)
197
+ import { invoke } from '@tauri-apps/api/tauri';
198
+
199
+ // Call commands
200
+ const greeting = await invoke<string>('greet', { name: 'World' });
201
+ const users = await invoke<User[]>('get_users');
202
+
203
+ // With error handling
204
+ try {
205
+ const data = await invoke('fetch_data', { url: 'https://api.example.com' });
206
+ } catch (error) {
207
+ console.error('Failed:', error);
208
+ }
209
+ ```