@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,239 @@
1
+ ---
2
+ name: Testify
3
+ description: Testing toolkit with assertions, mocks, and suites.
4
+ metadata:
5
+ labels: [golang, testify, testing, mock]
6
+ triggers:
7
+ files: ['**/*_test.go']
8
+ keywords: [testify, assert, require, mock, suite]
9
+ ---
10
+
11
+ # Testify Standards
12
+
13
+ ## Assert Package
14
+
15
+ ```go
16
+ import (
17
+ "testing"
18
+ "github.com/stretchr/testify/assert"
19
+ )
20
+
21
+ func TestSomething(t *testing.T) {
22
+ // Equality
23
+ assert.Equal(t, 123, result)
24
+ assert.NotEqual(t, 456, result)
25
+
26
+ // Boolean
27
+ assert.True(t, ok)
28
+ assert.False(t, failed)
29
+
30
+ // Nil checks
31
+ assert.Nil(t, err)
32
+ assert.NotNil(t, obj)
33
+
34
+ // Error checks
35
+ assert.NoError(t, err)
36
+ assert.Error(t, err)
37
+ assert.ErrorIs(t, err, ErrNotFound)
38
+ assert.ErrorContains(t, err, "not found")
39
+
40
+ // Collections
41
+ assert.Contains(t, slice, item)
42
+ assert.Len(t, slice, 3)
43
+ assert.Empty(t, slice)
44
+ assert.NotEmpty(t, slice)
45
+ assert.ElementsMatch(t, expected, actual) // Order independent
46
+
47
+ // Comparison
48
+ assert.Greater(t, 2, 1)
49
+ assert.GreaterOrEqual(t, 2, 2)
50
+ assert.Less(t, 1, 2)
51
+
52
+ // Type assertions
53
+ assert.IsType(t, &User{}, obj)
54
+ assert.Implements(t, (*io.Reader)(nil), obj)
55
+
56
+ // With message
57
+ assert.Equal(t, expected, actual, "values should match")
58
+ }
59
+ ```
60
+
61
+ ## Require Package
62
+
63
+ ```go
64
+ import "github.com/stretchr/testify/require"
65
+
66
+ func TestWithRequire(t *testing.T) {
67
+ // Stops test immediately on failure
68
+ user, err := GetUser(1)
69
+ require.NoError(t, err) // Fails here stops test
70
+ require.NotNil(t, user)
71
+
72
+ // Continue knowing user is valid
73
+ assert.Equal(t, "John", user.Name)
74
+ }
75
+ ```
76
+
77
+ ## Mock Package
78
+
79
+ ```go
80
+ import (
81
+ "testing"
82
+ "github.com/stretchr/testify/mock"
83
+ )
84
+
85
+ // Interface to mock
86
+ type UserRepository interface {
87
+ FindByID(id int) (*User, error)
88
+ Save(user *User) error
89
+ }
90
+
91
+ // Mock implementation
92
+ type MockUserRepository struct {
93
+ mock.Mock
94
+ }
95
+
96
+ func (m *MockUserRepository) FindByID(id int) (*User, error) {
97
+ args := m.Called(id)
98
+ if args.Get(0) == nil {
99
+ return nil, args.Error(1)
100
+ }
101
+ return args.Get(0).(*User), args.Error(1)
102
+ }
103
+
104
+ func (m *MockUserRepository) Save(user *User) error {
105
+ args := m.Called(user)
106
+ return args.Error(0)
107
+ }
108
+
109
+ // Test using mock
110
+ func TestUserService(t *testing.T) {
111
+ mockRepo := new(MockUserRepository)
112
+
113
+ // Setup expectations
114
+ mockRepo.On("FindByID", 1).Return(&User{ID: 1, Name: "John"}, nil)
115
+ mockRepo.On("Save", mock.Anything).Return(nil)
116
+
117
+ service := NewUserService(mockRepo)
118
+ user, err := service.GetUser(1)
119
+
120
+ assert.NoError(t, err)
121
+ assert.Equal(t, "John", user.Name)
122
+
123
+ // Verify expectations
124
+ mockRepo.AssertExpectations(t)
125
+ mockRepo.AssertCalled(t, "FindByID", 1)
126
+ mockRepo.AssertNumberOfCalls(t, "FindByID", 1)
127
+ }
128
+ ```
129
+
130
+ ## Mock Matching
131
+
132
+ ```go
133
+ // Exact match
134
+ mockRepo.On("FindByID", 1).Return(user, nil)
135
+
136
+ // Any value
137
+ mockRepo.On("Save", mock.Anything).Return(nil)
138
+
139
+ // Type match
140
+ mockRepo.On("Save", mock.AnythingOfType("*User")).Return(nil)
141
+
142
+ // Custom matcher
143
+ mockRepo.On("FindByID", mock.MatchedBy(func(id int) bool {
144
+ return id > 0
145
+ })).Return(user, nil)
146
+
147
+ // Multiple calls
148
+ mockRepo.On("FindByID", 1).Return(user, nil).Once()
149
+ mockRepo.On("FindByID", 1).Return(nil, ErrNotFound).Once()
150
+
151
+ // Call order
152
+ mockRepo.On("Save", mock.Anything).Return(nil).Run(func(args mock.Arguments) {
153
+ user := args.Get(0).(*User)
154
+ user.ID = 123 // Modify argument
155
+ })
156
+ ```
157
+
158
+ ## Suite Package
159
+
160
+ ```go
161
+ import (
162
+ "testing"
163
+ "github.com/stretchr/testify/suite"
164
+ )
165
+
166
+ type UserServiceTestSuite struct {
167
+ suite.Suite
168
+ db *sql.DB
169
+ service *UserService
170
+ }
171
+
172
+ func (s *UserServiceTestSuite) SetupSuite() {
173
+ // Run once before all tests
174
+ s.db = setupTestDB()
175
+ }
176
+
177
+ func (s *UserServiceTestSuite) TearDownSuite() {
178
+ // Run once after all tests
179
+ s.db.Close()
180
+ }
181
+
182
+ func (s *UserServiceTestSuite) SetupTest() {
183
+ // Run before each test
184
+ s.service = NewUserService(s.db)
185
+ }
186
+
187
+ func (s *UserServiceTestSuite) TearDownTest() {
188
+ // Run after each test
189
+ cleanupTestData(s.db)
190
+ }
191
+
192
+ func (s *UserServiceTestSuite) TestGetUser() {
193
+ user, err := s.service.GetUser(1)
194
+ s.NoError(err)
195
+ s.Equal("John", user.Name)
196
+ }
197
+
198
+ func (s *UserServiceTestSuite) TestCreateUser() {
199
+ user, err := s.service.CreateUser("Jane", "jane@example.com")
200
+ s.NoError(err)
201
+ s.NotZero(user.ID)
202
+ }
203
+
204
+ // Run the suite
205
+ func TestUserServiceSuite(t *testing.T) {
206
+ suite.Run(t, new(UserServiceTestSuite))
207
+ }
208
+ ```
209
+
210
+ ## Table-Driven Tests
211
+
212
+ ```go
213
+ func TestAdd(t *testing.T) {
214
+ tests := []struct {
215
+ name string
216
+ a, b int
217
+ expected int
218
+ }{
219
+ {"positive", 1, 2, 3},
220
+ {"negative", -1, -1, -2},
221
+ {"zero", 0, 0, 0},
222
+ }
223
+
224
+ for _, tt := range tests {
225
+ t.Run(tt.name, func(t *testing.T) {
226
+ result := Add(tt.a, tt.b)
227
+ assert.Equal(t, tt.expected, result)
228
+ })
229
+ }
230
+ }
231
+ ```
232
+
233
+ ## Best Practices
234
+
235
+ 1. **require vs assert**: Use `require` for setup, `assert` for verification
236
+ 2. **Mocks**: Generate with mockery for large interfaces
237
+ 3. **Suites**: Use for tests sharing setup/teardown
238
+ 4. **Messages**: Add context with assertion messages
239
+ 5. **Parallel**: Use `t.Parallel()` for independent tests
@@ -0,0 +1,13 @@
1
+ # Testify Testing References
2
+
3
+ ## References
4
+
5
+ - [**Assert Patterns**](assert-patterns.md) - Assertions, require, suite
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use assert for non-fatal assertions
10
+ - [ ] Use require for fatal assertions
11
+ - [ ] Test suites for setup/teardown
12
+ - [ ] Mock package for interfaces
13
+ - [ ] Table-driven tests with subtests
@@ -0,0 +1,170 @@
1
+ # Testify Assert Patterns
2
+
3
+ ## Assertions
4
+
5
+ ```go
6
+ import (
7
+ "testing"
8
+ "github.com/stretchr/testify/assert"
9
+ "github.com/stretchr/testify/require"
10
+ )
11
+
12
+ func TestUserService(t *testing.T) {
13
+ // Basic assertions (non-fatal, continues on failure)
14
+ assert.Equal(t, expected, actual)
15
+ assert.NotEqual(t, expected, actual)
16
+ assert.True(t, condition)
17
+ assert.False(t, condition)
18
+ assert.Nil(t, value)
19
+ assert.NotNil(t, value)
20
+ assert.Empty(t, slice)
21
+ assert.NotEmpty(t, slice)
22
+ assert.Len(t, slice, 5)
23
+ assert.Contains(t, slice, element)
24
+ assert.ElementsMatch(t, expected, actual)
25
+
26
+ // Require (fatal, stops on failure)
27
+ require.NoError(t, err)
28
+ require.NotNil(t, user)
29
+
30
+ // Error assertions
31
+ assert.Error(t, err)
32
+ assert.NoError(t, err)
33
+ assert.ErrorIs(t, err, ErrNotFound)
34
+ assert.ErrorContains(t, err, "not found")
35
+
36
+ // Type assertions
37
+ assert.IsType(t, &User{}, obj)
38
+ assert.Implements(t, (*io.Reader)(nil), obj)
39
+
40
+ // Numeric comparisons
41
+ assert.Greater(t, 5, 3)
42
+ assert.GreaterOrEqual(t, 5, 5)
43
+ assert.Less(t, 3, 5)
44
+ assert.InDelta(t, 3.14, result, 0.01)
45
+
46
+ // String assertions
47
+ assert.Regexp(t, `^[a-z]+$`, str)
48
+ assert.JSONEq(t, `{"name":"John"}`, jsonStr)
49
+ }
50
+ ```
51
+
52
+ ## Table-Driven Tests
53
+
54
+ ```go
55
+ func TestCalculator_Add(t *testing.T) {
56
+ tests := []struct {
57
+ name string
58
+ a, b int
59
+ expected int
60
+ }{
61
+ {"positive numbers", 2, 3, 5},
62
+ {"negative numbers", -2, -3, -5},
63
+ {"mixed numbers", -2, 3, 1},
64
+ {"zeros", 0, 0, 0},
65
+ }
66
+
67
+ for _, tt := range tests {
68
+ t.Run(tt.name, func(t *testing.T) {
69
+ result := Add(tt.a, tt.b)
70
+ assert.Equal(t, tt.expected, result)
71
+ })
72
+ }
73
+ }
74
+ ```
75
+
76
+ ## Test Suites
77
+
78
+ ```go
79
+ import (
80
+ "testing"
81
+ "github.com/stretchr/testify/suite"
82
+ )
83
+
84
+ type UserServiceTestSuite struct {
85
+ suite.Suite
86
+ db *Database
87
+ service *UserService
88
+ }
89
+
90
+ // Run before each test
91
+ func (s *UserServiceTestSuite) SetupTest() {
92
+ s.db = NewTestDatabase()
93
+ s.service = NewUserService(s.db)
94
+ }
95
+
96
+ // Run after each test
97
+ func (s *UserServiceTestSuite) TearDownTest() {
98
+ s.db.Close()
99
+ }
100
+
101
+ // Run once before all tests
102
+ func (s *UserServiceTestSuite) SetupSuite() {
103
+ // Initialize shared resources
104
+ }
105
+
106
+ func (s *UserServiceTestSuite) TestCreateUser() {
107
+ user, err := s.service.Create("John", "john@example.com")
108
+
109
+ s.NoError(err)
110
+ s.NotNil(user)
111
+ s.Equal("John", user.Name)
112
+ }
113
+
114
+ func (s *UserServiceTestSuite) TestFindUser() {
115
+ // Setup
116
+ s.db.Insert(&User{ID: 1, Name: "John"})
117
+
118
+ // Test
119
+ user, err := s.service.FindByID(1)
120
+
121
+ // Assert
122
+ s.Require().NoError(err)
123
+ s.Equal("John", user.Name)
124
+ }
125
+
126
+ // Run the suite
127
+ func TestUserServiceTestSuite(t *testing.T) {
128
+ suite.Run(t, new(UserServiceTestSuite))
129
+ }
130
+ ```
131
+
132
+ ## Mocking
133
+
134
+ ```go
135
+ import "github.com/stretchr/testify/mock"
136
+
137
+ type MockUserRepository struct {
138
+ mock.Mock
139
+ }
140
+
141
+ func (m *MockUserRepository) FindByID(id int) (*User, error) {
142
+ args := m.Called(id)
143
+ if args.Get(0) == nil {
144
+ return nil, args.Error(1)
145
+ }
146
+ return args.Get(0).(*User), args.Error(1)
147
+ }
148
+
149
+ func (m *MockUserRepository) Save(user *User) error {
150
+ args := m.Called(user)
151
+ return args.Error(0)
152
+ }
153
+
154
+ func TestUserService_GetUser(t *testing.T) {
155
+ // Setup mock
156
+ mockRepo := new(MockUserRepository)
157
+ mockRepo.On("FindByID", 1).Return(&User{ID: 1, Name: "John"}, nil)
158
+
159
+ service := NewUserService(mockRepo)
160
+
161
+ // Test
162
+ user, err := service.GetUser(1)
163
+
164
+ // Assert
165
+ assert.NoError(t, err)
166
+ assert.Equal(t, "John", user.Name)
167
+ mockRepo.AssertExpectations(t)
168
+ mockRepo.AssertCalled(t, "FindByID", 1)
169
+ }
170
+ ```
@@ -0,0 +1,234 @@
1
+ ---
2
+ name: Validator
3
+ description: Struct validation using tags for Go.
4
+ metadata:
5
+ labels: [golang, validator, validation]
6
+ triggers:
7
+ files: ['**/*.go']
8
+ keywords: [validator, validate, binding, Validate]
9
+ ---
10
+
11
+ # Validator Standards
12
+
13
+ ## Basic Usage
14
+
15
+ ```go
16
+ import (
17
+ "github.com/go-playground/validator/v10"
18
+ )
19
+
20
+ var validate = validator.New()
21
+
22
+ type User struct {
23
+ Name string `validate:"required,min=2,max=100"`
24
+ Email string `validate:"required,email"`
25
+ Age int `validate:"gte=0,lte=120"`
26
+ Password string `validate:"required,min=8"`
27
+ }
28
+
29
+ func ValidateUser(user User) error {
30
+ return validate.Struct(user)
31
+ }
32
+
33
+ // Error handling
34
+ err := validate.Struct(user)
35
+ if err != nil {
36
+ for _, err := range err.(validator.ValidationErrors) {
37
+ fmt.Printf("Field: %s, Tag: %s, Value: %v\n",
38
+ err.Field(), err.Tag(), err.Value())
39
+ }
40
+ }
41
+ ```
42
+
43
+ ## Common Validations
44
+
45
+ ```go
46
+ type Request struct {
47
+ // Required
48
+ Name string `validate:"required"`
49
+
50
+ // String length
51
+ Title string `validate:"min=1,max=100"`
52
+
53
+ // Numbers
54
+ Age int `validate:"gte=0,lte=150"`
55
+ Price float64 `validate:"gt=0"`
56
+
57
+ // Email, URL
58
+ Email string `validate:"email"`
59
+ Website string `validate:"url"`
60
+
61
+ // UUID
62
+ ID string `validate:"uuid4"`
63
+
64
+ // Enum
65
+ Status string `validate:"oneof=pending active completed"`
66
+
67
+ // Contains
68
+ Code string `validate:"contains=PREFIX"`
69
+
70
+ // Regex (alpha, alphanum, numeric, etc.)
71
+ Username string `validate:"alphanum,min=3,max=20"`
72
+
73
+ // Date/Time
74
+ StartDate string `validate:"datetime=2006-01-02"`
75
+ }
76
+ ```
77
+
78
+ ## Nested Structs
79
+
80
+ ```go
81
+ type Address struct {
82
+ Street string `validate:"required"`
83
+ City string `validate:"required"`
84
+ ZipCode string `validate:"required,len=5"`
85
+ }
86
+
87
+ type User struct {
88
+ Name string `validate:"required"`
89
+ Address Address `validate:"required"` // Validates nested
90
+ }
91
+
92
+ type Company struct {
93
+ Employees []User `validate:"required,min=1,dive"` // Validates each element
94
+ }
95
+
96
+ type Config struct {
97
+ Settings map[string]string `validate:"required,dive,keys,required,endkeys,required"`
98
+ }
99
+ ```
100
+
101
+ ## Cross-Field Validation
102
+
103
+ ```go
104
+ type DateRange struct {
105
+ StartDate time.Time `validate:"required"`
106
+ EndDate time.Time `validate:"required,gtfield=StartDate"`
107
+ }
108
+
109
+ type PasswordChange struct {
110
+ Password string `validate:"required,min=8"`
111
+ ConfirmPassword string `validate:"required,eqfield=Password"`
112
+ }
113
+
114
+ type Transfer struct {
115
+ FromAccount string `validate:"required"`
116
+ ToAccount string `validate:"required,nefield=FromAccount"`
117
+ }
118
+ ```
119
+
120
+ ## Custom Validators
121
+
122
+ ```go
123
+ func init() {
124
+ validate.RegisterValidation("nowhitespace", noWhitespaceValidator)
125
+ validate.RegisterValidation("strongpassword", strongPasswordValidator)
126
+ }
127
+
128
+ func noWhitespaceValidator(fl validator.FieldLevel) bool {
129
+ return !strings.Contains(fl.Field().String(), " ")
130
+ }
131
+
132
+ func strongPasswordValidator(fl validator.FieldLevel) bool {
133
+ password := fl.Field().String()
134
+ hasUpper := regexp.MustCompile(`[A-Z]`).MatchString(password)
135
+ hasLower := regexp.MustCompile(`[a-z]`).MatchString(password)
136
+ hasNumber := regexp.MustCompile(`[0-9]`).MatchString(password)
137
+ hasSpecial := regexp.MustCompile(`[!@#$%^&*]`).MatchString(password)
138
+ return hasUpper && hasLower && hasNumber && hasSpecial
139
+ }
140
+
141
+ type User struct {
142
+ Username string `validate:"required,nowhitespace"`
143
+ Password string `validate:"required,min=8,strongpassword"`
144
+ }
145
+ ```
146
+
147
+ ## Conditional Validation
148
+
149
+ ```go
150
+ type User struct {
151
+ Type string `validate:"required,oneof=personal business"`
152
+ TaxID string `validate:"required_if=Type business"`
153
+ }
154
+
155
+ type Order struct {
156
+ PaymentMethod string `validate:"required,oneof=card cash"`
157
+ CardNumber string `validate:"required_if=PaymentMethod card"`
158
+ }
159
+
160
+ // Other conditional tags:
161
+ // required_unless, required_with, required_without
162
+ // required_with_all, required_without_all
163
+ ```
164
+
165
+ ## Gin Integration
166
+
167
+ ```go
168
+ import (
169
+ "github.com/gin-gonic/gin"
170
+ "github.com/gin-gonic/gin/binding"
171
+ "github.com/go-playground/validator/v10"
172
+ )
173
+
174
+ func init() {
175
+ if v, ok := binding.Validator.Engine().(*validator.Validate); ok {
176
+ v.RegisterValidation("customtag", customValidator)
177
+ }
178
+ }
179
+
180
+ type CreateUserRequest struct {
181
+ Name string `json:"name" binding:"required,min=2"`
182
+ Email string `json:"email" binding:"required,email"`
183
+ }
184
+
185
+ func CreateUser(c *gin.Context) {
186
+ var req CreateUserRequest
187
+ if err := c.ShouldBindJSON(&req); err != nil {
188
+ c.JSON(400, gin.H{"error": err.Error()})
189
+ return
190
+ }
191
+ // req is validated
192
+ }
193
+ ```
194
+
195
+ ## Error Translation
196
+
197
+ ```go
198
+ import (
199
+ "github.com/go-playground/locales/en"
200
+ ut "github.com/go-playground/universal-translator"
201
+ en_translations "github.com/go-playground/validator/v10/translations/en"
202
+ )
203
+
204
+ var (
205
+ uni *ut.UniversalTranslator
206
+ trans ut.Translator
207
+ validate *validator.Validate
208
+ )
209
+
210
+ func init() {
211
+ en := en.New()
212
+ uni = ut.New(en, en)
213
+ trans, _ = uni.GetTranslator("en")
214
+
215
+ validate = validator.New()
216
+ en_translations.RegisterDefaultTranslations(validate, trans)
217
+ }
218
+
219
+ func translateError(err error) []string {
220
+ var messages []string
221
+ for _, e := range err.(validator.ValidationErrors) {
222
+ messages = append(messages, e.Translate(trans))
223
+ }
224
+ return messages
225
+ }
226
+ ```
227
+
228
+ ## Best Practices
229
+
230
+ 1. **Singleton**: Create one validator instance
231
+ 2. **Custom validators**: Register at init time
232
+ 3. **Dive**: Use for slices and maps
233
+ 4. **Translations**: Provide user-friendly messages
234
+ 5. **Gin**: Use binding tags for automatic validation
@@ -0,0 +1,13 @@
1
+ # Validator References
2
+
3
+ ## References
4
+
5
+ - [**Validation Tags**](validation-tags.md) - Built-in validators, custom rules
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use struct tags for validation rules
10
+ - [ ] Register custom validators as needed
11
+ - [ ] Handle validation errors gracefully
12
+ - [ ] Use dive for slice/map validation
13
+ - [ ] Conditional validation with required_if