@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,219 @@
1
+ ---
2
+ name: Chi Router
3
+ description: Lightweight, composable Go HTTP router built on net/http.
4
+ metadata:
5
+ labels: [golang, chi, router, http]
6
+ triggers:
7
+ files: ['**/main.go', '**/routes.go']
8
+ keywords: [chi, chi.NewRouter, chi.Router, r.Route]
9
+ ---
10
+
11
+ # Chi Router Standards
12
+
13
+ ## Router Setup
14
+
15
+ ```go
16
+ package main
17
+
18
+ import (
19
+ "net/http"
20
+ "github.com/go-chi/chi/v5"
21
+ "github.com/go-chi/chi/v5/middleware"
22
+ )
23
+
24
+ func main() {
25
+ r := chi.NewRouter()
26
+
27
+ // Middleware
28
+ r.Use(middleware.Logger)
29
+ r.Use(middleware.Recoverer)
30
+ r.Use(middleware.RequestID)
31
+ r.Use(middleware.RealIP)
32
+
33
+ // Routes
34
+ r.Get("/", homeHandler)
35
+ r.Get("/users/{id}", getUser)
36
+ r.Post("/users", createUser)
37
+
38
+ // Sub-routers
39
+ r.Route("/api/v1", func(r chi.Router) {
40
+ r.Get("/items", listItems)
41
+ r.Post("/items", createItem)
42
+ })
43
+
44
+ http.ListenAndServe(":8080", r)
45
+ }
46
+ ```
47
+
48
+ ## Handlers
49
+
50
+ ```go
51
+ // Path parameters
52
+ func getUser(w http.ResponseWriter, r *http.Request) {
53
+ id := chi.URLParam(r, "id")
54
+ user, err := findUser(id)
55
+ if err != nil {
56
+ http.Error(w, "Not found", http.StatusNotFound)
57
+ return
58
+ }
59
+ json.NewEncoder(w).Encode(user)
60
+ }
61
+
62
+ // Query parameters
63
+ func listUsers(w http.ResponseWriter, r *http.Request) {
64
+ page := r.URL.Query().Get("page")
65
+ limit := r.URL.Query().Get("limit")
66
+ users := fetchUsers(page, limit)
67
+ json.NewEncoder(w).Encode(users)
68
+ }
69
+
70
+ // JSON body
71
+ func createUser(w http.ResponseWriter, r *http.Request) {
72
+ var req CreateUserRequest
73
+ if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
74
+ http.Error(w, err.Error(), http.StatusBadRequest)
75
+ return
76
+ }
77
+ user := insertUser(req)
78
+ w.WriteHeader(http.StatusCreated)
79
+ json.NewEncoder(w).Encode(user)
80
+ }
81
+ ```
82
+
83
+ ## Middleware
84
+
85
+ ```go
86
+ // Built-in middleware
87
+ r.Use(middleware.Logger) // Logs requests
88
+ r.Use(middleware.Recoverer) // Panic recovery
89
+ r.Use(middleware.RequestID) // Request ID header
90
+ r.Use(middleware.RealIP) // Real IP from headers
91
+ r.Use(middleware.Compress(5)) // Gzip compression
92
+ r.Use(middleware.Timeout(60 * time.Second))
93
+
94
+ // Custom middleware
95
+ func authMiddleware(next http.Handler) http.Handler {
96
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
97
+ token := r.Header.Get("Authorization")
98
+ if token == "" {
99
+ http.Error(w, "Unauthorized", http.StatusUnauthorized)
100
+ return
101
+ }
102
+
103
+ user, err := validateToken(token)
104
+ if err != nil {
105
+ http.Error(w, "Invalid token", http.StatusUnauthorized)
106
+ return
107
+ }
108
+
109
+ ctx := context.WithValue(r.Context(), "user", user)
110
+ next.ServeHTTP(w, r.WithContext(ctx))
111
+ })
112
+ }
113
+
114
+ // Apply to group
115
+ r.Route("/api", func(r chi.Router) {
116
+ r.Use(authMiddleware)
117
+ r.Get("/protected", protectedHandler)
118
+ })
119
+ ```
120
+
121
+ ## Route Groups & Nesting
122
+
123
+ ```go
124
+ r.Route("/api/v1", func(r chi.Router) {
125
+ // All routes here prefixed with /api/v1
126
+
127
+ r.Route("/users", func(r chi.Router) {
128
+ r.Get("/", listUsers)
129
+ r.Post("/", createUser)
130
+
131
+ r.Route("/{id}", func(r chi.Router) {
132
+ r.Get("/", getUser)
133
+ r.Put("/", updateUser)
134
+ r.Delete("/", deleteUser)
135
+ })
136
+ })
137
+
138
+ r.Route("/items", func(r chi.Router) {
139
+ r.Get("/", listItems)
140
+ })
141
+ })
142
+ ```
143
+
144
+ ## Mount Sub-Routers
145
+
146
+ ```go
147
+ func main() {
148
+ r := chi.NewRouter()
149
+ r.Mount("/api/v1", apiRouter())
150
+ r.Mount("/admin", adminRouter())
151
+ http.ListenAndServe(":8080", r)
152
+ }
153
+
154
+ func apiRouter() chi.Router {
155
+ r := chi.NewRouter()
156
+ r.Get("/users", listUsers)
157
+ r.Post("/users", createUser)
158
+ return r
159
+ }
160
+
161
+ func adminRouter() chi.Router {
162
+ r := chi.NewRouter()
163
+ r.Use(adminAuthMiddleware)
164
+ r.Get("/stats", getStats)
165
+ return r
166
+ }
167
+ ```
168
+
169
+ ## Context Values
170
+
171
+ ```go
172
+ // Set in middleware
173
+ ctx := context.WithValue(r.Context(), "user", user)
174
+ next.ServeHTTP(w, r.WithContext(ctx))
175
+
176
+ // Get in handler
177
+ user := r.Context().Value("user").(*User)
178
+
179
+ // Type-safe context keys
180
+ type contextKey string
181
+ const userKey contextKey = "user"
182
+
183
+ ctx := context.WithValue(r.Context(), userKey, user)
184
+ user := r.Context().Value(userKey).(*User)
185
+ ```
186
+
187
+ ## Response Helpers
188
+
189
+ ```go
190
+ import "github.com/go-chi/render"
191
+
192
+ type UserResponse struct {
193
+ ID int `json:"id"`
194
+ Name string `json:"name"`
195
+ }
196
+
197
+ func (u *UserResponse) Render(w http.ResponseWriter, r *http.Request) error {
198
+ return nil
199
+ }
200
+
201
+ func getUser(w http.ResponseWriter, r *http.Request) {
202
+ user := &UserResponse{ID: 1, Name: "John"}
203
+ render.Render(w, r, user)
204
+ }
205
+
206
+ // Error response
207
+ func ErrNotFound(w http.ResponseWriter, r *http.Request, err error) {
208
+ render.Status(r, http.StatusNotFound)
209
+ render.JSON(w, r, map[string]string{"error": err.Error()})
210
+ }
211
+ ```
212
+
213
+ ## Best Practices
214
+
215
+ 1. **Standard library**: Chi uses net/http, fully compatible with standard handlers
216
+ 2. **Composition**: Use `r.Route()` for grouping, `r.Mount()` for sub-routers
217
+ 3. **Middleware order**: Apply in order of execution (outer to inner)
218
+ 4. **Context**: Use typed keys for context values
219
+ 5. **Testing**: Use `httptest` - Chi handlers are standard `http.Handler`
@@ -0,0 +1,13 @@
1
+ # Chi Router References
2
+
3
+ ## References
4
+
5
+ - [**Routing Patterns**](routing-patterns.md) - Routes, middleware, subrouters
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Lightweight, idiomatic Go router
10
+ - [ ] Middleware chain pattern
11
+ - [ ] URL parameters via chi.URLParam
12
+ - [ ] Subrouters for modular code
13
+ - [ ] Compatible with net/http
@@ -0,0 +1,205 @@
1
+ # Chi Routing Patterns
2
+
3
+ ## Basic Setup
4
+
5
+ ```go
6
+ import (
7
+ "net/http"
8
+ "github.com/go-chi/chi/v5"
9
+ "github.com/go-chi/chi/v5/middleware"
10
+ )
11
+
12
+ func main() {
13
+ r := chi.NewRouter()
14
+
15
+ // Built-in middleware
16
+ r.Use(middleware.Logger)
17
+ r.Use(middleware.Recoverer)
18
+ r.Use(middleware.RequestID)
19
+
20
+ // Routes
21
+ r.Get("/", func(w http.ResponseWriter, r *http.Request) {
22
+ w.Write([]byte("Hello World!"))
23
+ })
24
+
25
+ r.Get("/users/{id}", getUser)
26
+ r.Post("/users", createUser)
27
+
28
+ http.ListenAndServe(":3000", r)
29
+ }
30
+ ```
31
+
32
+ ## Handlers
33
+
34
+ ```go
35
+ import (
36
+ "encoding/json"
37
+ "net/http"
38
+ "github.com/go-chi/chi/v5"
39
+ )
40
+
41
+ func getUser(w http.ResponseWriter, r *http.Request) {
42
+ id := chi.URLParam(r, "id")
43
+
44
+ user := User{ID: id, Name: "John"}
45
+
46
+ w.Header().Set("Content-Type", "application/json")
47
+ json.NewEncoder(w).Encode(user)
48
+ }
49
+
50
+ func createUser(w http.ResponseWriter, r *http.Request) {
51
+ var user User
52
+ if err := json.NewDecoder(r.Body).Decode(&user); err != nil {
53
+ http.Error(w, err.Error(), http.StatusBadRequest)
54
+ return
55
+ }
56
+
57
+ w.WriteHeader(http.StatusCreated)
58
+ json.NewEncoder(w).Encode(user)
59
+ }
60
+ ```
61
+
62
+ ## Route Groups
63
+
64
+ ```go
65
+ func main() {
66
+ r := chi.NewRouter()
67
+
68
+ // API routes
69
+ r.Route("/api", func(r chi.Router) {
70
+ r.Use(apiMiddleware)
71
+
72
+ r.Route("/v1", func(r chi.Router) {
73
+ r.Get("/users", listUsersV1)
74
+ r.Post("/users", createUserV1)
75
+
76
+ r.Route("/users/{id}", func(r chi.Router) {
77
+ r.Get("/", getUser)
78
+ r.Put("/", updateUser)
79
+ r.Delete("/", deleteUser)
80
+ })
81
+ })
82
+ })
83
+
84
+ // Admin routes with auth
85
+ r.Group(func(r chi.Router) {
86
+ r.Use(authMiddleware)
87
+ r.Get("/admin/stats", getStats)
88
+ })
89
+ }
90
+ ```
91
+
92
+ ## Subrouters
93
+
94
+ ```go
95
+ // users.go
96
+ func UsersRouter() chi.Router {
97
+ r := chi.NewRouter()
98
+
99
+ r.Get("/", listUsers)
100
+ r.Post("/", createUser)
101
+ r.Get("/{id}", getUser)
102
+ r.Put("/{id}", updateUser)
103
+ r.Delete("/{id}", deleteUser)
104
+
105
+ return r
106
+ }
107
+
108
+ // orders.go
109
+ func OrdersRouter() chi.Router {
110
+ r := chi.NewRouter()
111
+ r.Get("/", listOrders)
112
+ r.Post("/", createOrder)
113
+ return r
114
+ }
115
+
116
+ // main.go
117
+ func main() {
118
+ r := chi.NewRouter()
119
+
120
+ r.Mount("/users", UsersRouter())
121
+ r.Mount("/orders", OrdersRouter())
122
+
123
+ http.ListenAndServe(":3000", r)
124
+ }
125
+ ```
126
+
127
+ ## Middleware
128
+
129
+ ```go
130
+ // Custom middleware
131
+ func AuthMiddleware(next http.Handler) http.Handler {
132
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
133
+ token := r.Header.Get("Authorization")
134
+ if token == "" {
135
+ http.Error(w, "Unauthorized", http.StatusUnauthorized)
136
+ return
137
+ }
138
+
139
+ // Validate token, add user to context
140
+ ctx := context.WithValue(r.Context(), "user", userID)
141
+ next.ServeHTTP(w, r.WithContext(ctx))
142
+ })
143
+ }
144
+
145
+ // Request-scoped middleware
146
+ func UserCtx(next http.Handler) http.Handler {
147
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
148
+ id := chi.URLParam(r, "id")
149
+ user, err := findUser(id)
150
+ if err != nil {
151
+ http.Error(w, "Not Found", http.StatusNotFound)
152
+ return
153
+ }
154
+ ctx := context.WithValue(r.Context(), "user", user)
155
+ next.ServeHTTP(w, r.WithContext(ctx))
156
+ })
157
+ }
158
+
159
+ // Usage
160
+ r.Route("/users/{id}", func(r chi.Router) {
161
+ r.Use(UserCtx)
162
+ r.Get("/", getUser) // User available in context
163
+ r.Put("/", updateUser)
164
+ })
165
+ ```
166
+
167
+ ## Built-in Middleware
168
+
169
+ ```go
170
+ import "github.com/go-chi/chi/v5/middleware"
171
+
172
+ r.Use(middleware.RequestID) // X-Request-ID header
173
+ r.Use(middleware.RealIP) // X-Real-IP, X-Forwarded-For
174
+ r.Use(middleware.Logger) // Request logging
175
+ r.Use(middleware.Recoverer) // Panic recovery
176
+ r.Use(middleware.Timeout(60 * time.Second))
177
+ r.Use(middleware.Throttle(100)) // Rate limiting
178
+ r.Use(middleware.Compress(5)) // Gzip compression
179
+ r.Use(middleware.AllowContentType("application/json"))
180
+ ```
181
+
182
+ ## Pattern Matching
183
+
184
+ ```go
185
+ // Basic pattern
186
+ r.Get("/users/{id}", handler)
187
+
188
+ // Regex constraint
189
+ r.Get("/articles/{date:\\d{4}-\\d{2}-\\d{2}}", handler)
190
+
191
+ // Catch-all
192
+ r.Get("/files/*", handler) // r.URL.Path contains full path
193
+
194
+ // Not found handler
195
+ r.NotFound(func(w http.ResponseWriter, r *http.Request) {
196
+ w.WriteHeader(http.StatusNotFound)
197
+ w.Write([]byte("Not found"))
198
+ })
199
+
200
+ // Method not allowed
201
+ r.MethodNotAllowed(func(w http.ResponseWriter, r *http.Request) {
202
+ w.WriteHeader(http.StatusMethodNotAllowed)
203
+ w.Write([]byte("Method not allowed"))
204
+ })
205
+ ```
@@ -0,0 +1,227 @@
1
+ ---
2
+ name: Cobra CLI
3
+ description: Modern CLI framework used by kubectl, docker, and more.
4
+ metadata:
5
+ labels: [golang, cobra, cli, command]
6
+ triggers:
7
+ files: ['cmd/**/*.go', '**/root.go']
8
+ keywords: [cobra, Command, RunE, Flags, PersistentFlags]
9
+ ---
10
+
11
+ # Cobra CLI Standards
12
+
13
+ ## Basic Setup
14
+
15
+ ```go
16
+ // cmd/root.go
17
+ package cmd
18
+
19
+ import (
20
+ "os"
21
+ "github.com/spf13/cobra"
22
+ )
23
+
24
+ var rootCmd = &cobra.Command{
25
+ Use: "myapp",
26
+ Short: "A brief description",
27
+ Long: `A longer description...`,
28
+ }
29
+
30
+ func Execute() {
31
+ if err := rootCmd.Execute(); err != nil {
32
+ os.Exit(1)
33
+ }
34
+ }
35
+
36
+ func init() {
37
+ rootCmd.PersistentFlags().StringP("config", "c", "", "config file")
38
+ rootCmd.PersistentFlags().BoolP("verbose", "v", false, "verbose output")
39
+ }
40
+ ```
41
+
42
+ ```go
43
+ // main.go
44
+ package main
45
+
46
+ import "myapp/cmd"
47
+
48
+ func main() {
49
+ cmd.Execute()
50
+ }
51
+ ```
52
+
53
+ ## Subcommands
54
+
55
+ ```go
56
+ // cmd/serve.go
57
+ var serveCmd = &cobra.Command{
58
+ Use: "serve",
59
+ Short: "Start the server",
60
+ RunE: func(cmd *cobra.Command, args []string) error {
61
+ port, _ := cmd.Flags().GetInt("port")
62
+ return startServer(port)
63
+ },
64
+ }
65
+
66
+ func init() {
67
+ rootCmd.AddCommand(serveCmd)
68
+ serveCmd.Flags().IntP("port", "p", 8080, "server port")
69
+ }
70
+
71
+ // cmd/db.go - nested commands
72
+ var dbCmd = &cobra.Command{
73
+ Use: "db",
74
+ Short: "Database operations",
75
+ }
76
+
77
+ var dbMigrateCmd = &cobra.Command{
78
+ Use: "migrate",
79
+ Short: "Run migrations",
80
+ RunE: func(cmd *cobra.Command, args []string) error {
81
+ return runMigrations()
82
+ },
83
+ }
84
+
85
+ func init() {
86
+ rootCmd.AddCommand(dbCmd)
87
+ dbCmd.AddCommand(dbMigrateCmd)
88
+ }
89
+ ```
90
+
91
+ ## Flags
92
+
93
+ ```go
94
+ var cfgFile string
95
+ var verbose bool
96
+
97
+ func init() {
98
+ // Persistent flags (inherited by subcommands)
99
+ rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file")
100
+ rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose")
101
+
102
+ // Local flags (only for this command)
103
+ serveCmd.Flags().IntP("port", "p", 8080, "port number")
104
+ serveCmd.Flags().StringSlice("hosts", []string{}, "allowed hosts")
105
+
106
+ // Required flags
107
+ serveCmd.MarkFlagRequired("port")
108
+
109
+ // Flag groups
110
+ serveCmd.MarkFlagsRequiredTogether("cert", "key")
111
+ serveCmd.MarkFlagsMutuallyExclusive("json", "yaml")
112
+ }
113
+ ```
114
+
115
+ ## Arguments
116
+
117
+ ```go
118
+ var echoCmd = &cobra.Command{
119
+ Use: "echo [message]",
120
+ Short: "Echo a message",
121
+ Args: cobra.ExactArgs(1), // Require exactly 1 arg
122
+ RunE: func(cmd *cobra.Command, args []string) error {
123
+ fmt.Println(args[0])
124
+ return nil
125
+ },
126
+ }
127
+
128
+ // Argument validators
129
+ cobra.NoArgs // No arguments allowed
130
+ cobra.ExactArgs(n) // Exactly n arguments
131
+ cobra.MinimumNArgs(n) // At least n arguments
132
+ cobra.MaximumNArgs(n) // At most n arguments
133
+ cobra.RangeArgs(m, n) // Between m and n arguments
134
+
135
+ // Custom validation
136
+ Args: func(cmd *cobra.Command, args []string) error {
137
+ if len(args) < 1 {
138
+ return errors.New("requires at least one argument")
139
+ }
140
+ return nil
141
+ },
142
+ ```
143
+
144
+ ## Viper Integration
145
+
146
+ ```go
147
+ import (
148
+ "github.com/spf13/cobra"
149
+ "github.com/spf13/viper"
150
+ )
151
+
152
+ func init() {
153
+ cobra.OnInitialize(initConfig)
154
+ rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file")
155
+
156
+ // Bind flags to viper
157
+ rootCmd.PersistentFlags().String("database-url", "", "database URL")
158
+ viper.BindPFlag("database.url", rootCmd.PersistentFlags().Lookup("database-url"))
159
+ }
160
+
161
+ func initConfig() {
162
+ if cfgFile != "" {
163
+ viper.SetConfigFile(cfgFile)
164
+ } else {
165
+ viper.SetConfigName("config")
166
+ viper.SetConfigType("yaml")
167
+ viper.AddConfigPath(".")
168
+ viper.AddConfigPath("$HOME/.myapp")
169
+ }
170
+
171
+ viper.AutomaticEnv()
172
+ viper.ReadInConfig()
173
+ }
174
+ ```
175
+
176
+ ## Pre/Post Hooks
177
+
178
+ ```go
179
+ var rootCmd = &cobra.Command{
180
+ Use: "myapp",
181
+ PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
182
+ // Runs before any command
183
+ return initLogger()
184
+ },
185
+ PersistentPostRunE: func(cmd *cobra.Command, args []string) error {
186
+ // Runs after any command
187
+ return cleanup()
188
+ },
189
+ }
190
+
191
+ var serveCmd = &cobra.Command{
192
+ Use: "serve",
193
+ PreRunE: func(cmd *cobra.Command, args []string) error {
194
+ // Runs before this command only
195
+ return validateConfig()
196
+ },
197
+ RunE: func(cmd *cobra.Command, args []string) error {
198
+ return serve()
199
+ },
200
+ }
201
+ ```
202
+
203
+ ## Shell Completions
204
+
205
+ ```go
206
+ // Auto-generated completions
207
+ rootCmd.GenBashCompletionFile("completions/myapp.bash")
208
+ rootCmd.GenZshCompletionFile("completions/myapp.zsh")
209
+ rootCmd.GenFishCompletionFile("completions/myapp.fish")
210
+
211
+ // Custom completions
212
+ var userCmd = &cobra.Command{
213
+ Use: "user [username]",
214
+ ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
215
+ users := fetchUsernames()
216
+ return users, cobra.ShellCompDirectiveNoFileComp
217
+ },
218
+ }
219
+ ```
220
+
221
+ ## Best Practices
222
+
223
+ 1. **Structure**: One file per command in `cmd/` directory
224
+ 2. **Errors**: Use `RunE` and return errors, don't `os.Exit`
225
+ 3. **Flags**: Use persistent flags for shared options
226
+ 4. **Viper**: Integrate for config file support
227
+ 5. **Help**: Write clear Use, Short, and Long descriptions
@@ -0,0 +1,13 @@
1
+ # Cobra CLI References
2
+
3
+ ## References
4
+
5
+ - [**Command Patterns**](command-patterns.md) - Commands, flags, subcommands
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Root command for main entry
10
+ - [ ] Subcommands for features
11
+ - [ ] Persistent flags for global options
12
+ - [ ] PreRun/PostRun hooks
13
+ - [ ] Automatic help generation