@ngxtm/devkit 3.3.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 (345) hide show
  1. package/cli/index.js +59 -13
  2. package/cli/rules.js +248 -0
  3. package/package.json +2 -1
  4. package/rules/README.md +141 -0
  5. package/rules/dart/best-practices/SKILL.md +23 -0
  6. package/rules/dart/language/SKILL.md +52 -0
  7. package/rules/dart/tooling/SKILL.md +43 -0
  8. package/rules/dotnet/aspnet-core/SKILL.md +92 -0
  9. package/rules/dotnet/aspnet-core/references/REFERENCE.md +335 -0
  10. package/rules/dotnet/best-practices/SKILL.md +101 -0
  11. package/rules/dotnet/best-practices/references/REFERENCE.md +256 -0
  12. package/rules/dotnet/blazor/SKILL.md +146 -0
  13. package/rules/dotnet/blazor/references/REFERENCE.md +392 -0
  14. package/rules/dotnet/language/SKILL.md +82 -0
  15. package/rules/dotnet/language/references/REFERENCE.md +222 -0
  16. package/rules/dotnet/patterns.rule.md +388 -0
  17. package/rules/dotnet/razor-pages/SKILL.md +124 -0
  18. package/rules/dotnet/razor-pages/references/REFERENCE.md +321 -0
  19. package/rules/dotnet/security/SKILL.md +89 -0
  20. package/rules/dotnet/security/references/REFERENCE.md +295 -0
  21. package/rules/dotnet/tooling/SKILL.md +92 -0
  22. package/rules/dotnet/tooling/references/REFERENCE.md +300 -0
  23. package/rules/flutter/auto-route-navigation/SKILL.md +43 -0
  24. package/rules/flutter/auto-route-navigation/references/REFERENCE.md +19 -0
  25. package/rules/flutter/auto-route-navigation/references/router-config.md +62 -0
  26. package/rules/flutter/bloc-state-management/SKILL.md +64 -0
  27. package/rules/flutter/bloc-state-management/references/REFERENCE.md +20 -0
  28. package/rules/flutter/bloc-state-management/references/auth-bloc-example.md +52 -0
  29. package/rules/flutter/bloc-state-management/references/equatable-usage.md +56 -0
  30. package/rules/flutter/bloc-state-management/references/property-based-state.md +68 -0
  31. package/rules/flutter/bloc.rule.md +76 -0
  32. package/rules/flutter/cicd/SKILL.md +48 -0
  33. package/rules/flutter/cicd/references/advanced-workflow.md +66 -0
  34. package/rules/flutter/cicd/references/fastlane.md +139 -0
  35. package/rules/flutter/cicd/references/github-actions.md +59 -0
  36. package/rules/flutter/dependency-injection/SKILL.md +42 -0
  37. package/rules/flutter/dependency-injection/references/REFERENCE.md +15 -0
  38. package/rules/flutter/dependency-injection/references/modules.md +37 -0
  39. package/rules/flutter/error-handling/SKILL.md +32 -0
  40. package/rules/flutter/error-handling/references/REFERENCE.md +19 -0
  41. package/rules/flutter/error-handling/references/error-mapping.md +31 -0
  42. package/rules/flutter/feature-based-clean-architecture/SKILL.md +46 -0
  43. package/rules/flutter/feature-based-clean-architecture/references/REFERENCE.md +14 -0
  44. package/rules/flutter/feature-based-clean-architecture/references/folder-structure.md +36 -0
  45. package/rules/flutter/getx-navigation/SKILL.md +70 -0
  46. package/rules/flutter/getx-navigation/references/app-pages.md +40 -0
  47. package/rules/flutter/getx-navigation/references/middleware-example.md +29 -0
  48. package/rules/flutter/getx-state-management/SKILL.md +76 -0
  49. package/rules/flutter/getx-state-management/references/binding-example.md +32 -0
  50. package/rules/flutter/getx-state-management/references/reactive-vs-simple.md +39 -0
  51. package/rules/flutter/go-router-navigation/SKILL.md +57 -0
  52. package/rules/flutter/idiomatic-flutter/SKILL.md +20 -0
  53. package/rules/flutter/layer-based-clean-architecture/SKILL.md +50 -0
  54. package/rules/flutter/layer-based-clean-architecture/references/REFERENCE.md +60 -0
  55. package/rules/flutter/layer-based-clean-architecture/references/repository-mapping.md +50 -0
  56. package/rules/flutter/localization/SKILL.md +50 -0
  57. package/rules/flutter/localization/references/REFERENCE.md +48 -0
  58. package/rules/flutter/localization/references/sheet-loader.md +33 -0
  59. package/rules/flutter/navigator-v1-navigation/SKILL.md +71 -0
  60. package/rules/flutter/navigator-v1-navigation/references/on-generate-route.md +48 -0
  61. package/rules/flutter/performance/SKILL.md +24 -0
  62. package/rules/flutter/retrofit-networking/SKILL.md +51 -0
  63. package/rules/flutter/retrofit-networking/references/REFERENCE.md +19 -0
  64. package/rules/flutter/retrofit-networking/references/token-refresh.md +40 -0
  65. package/rules/flutter/riverpod-state-management/SKILL.md +53 -0
  66. package/rules/flutter/riverpod-state-management/references/architecture.md +124 -0
  67. package/rules/flutter/riverpod-state-management/references/best-practices.md +89 -0
  68. package/rules/flutter/riverpod-state-management/references/testing.md +73 -0
  69. package/rules/flutter/riverpod.rule.md +78 -0
  70. package/rules/flutter/security/SKILL.md +33 -0
  71. package/rules/flutter/security/references/REFERENCE.md +15 -0
  72. package/rules/flutter/security/references/network-security.md +28 -0
  73. package/rules/flutter/testing/SKILL.md +44 -0
  74. package/rules/flutter/testing/references/REFERENCE.md +21 -0
  75. package/rules/flutter/testing/references/bloc-testing.md +38 -0
  76. package/rules/flutter/testing/references/integration-testing.md +128 -0
  77. package/rules/flutter/testing/references/robot-pattern.md +82 -0
  78. package/rules/flutter/testing/references/unit-testing.md +130 -0
  79. package/rules/flutter/testing/references/widget-testing.md +120 -0
  80. package/rules/flutter/widgets/SKILL.md +37 -0
  81. package/rules/golang/chi-router/SKILL.md +219 -0
  82. package/rules/golang/chi-router/references/REFERENCE.md +13 -0
  83. package/rules/golang/chi-router/references/routing-patterns.md +205 -0
  84. package/rules/golang/cobra-cli/SKILL.md +227 -0
  85. package/rules/golang/cobra-cli/references/REFERENCE.md +13 -0
  86. package/rules/golang/cobra-cli/references/command-patterns.md +224 -0
  87. package/rules/golang/core/SKILL.md +210 -0
  88. package/rules/golang/core/references/REFERENCE.md +14 -0
  89. package/rules/golang/core/references/concurrency-patterns.md +114 -0
  90. package/rules/golang/core/references/error-handling.md +87 -0
  91. package/rules/golang/echo-framework/SKILL.md +215 -0
  92. package/rules/golang/echo-framework/references/REFERENCE.md +14 -0
  93. package/rules/golang/echo-framework/references/middleware-patterns.md +141 -0
  94. package/rules/golang/echo-framework/references/routing-patterns.md +140 -0
  95. package/rules/golang/ent-orm/SKILL.md +239 -0
  96. package/rules/golang/ent-orm/references/REFERENCE.md +13 -0
  97. package/rules/golang/ent-orm/references/schema-patterns.md +255 -0
  98. package/rules/golang/fiber-framework/SKILL.md +196 -0
  99. package/rules/golang/fiber-framework/references/REFERENCE.md +13 -0
  100. package/rules/golang/fiber-framework/references/routing-patterns.md +191 -0
  101. package/rules/golang/gin-framework/SKILL.md +205 -0
  102. package/rules/golang/gin-framework/references/REFERENCE.md +14 -0
  103. package/rules/golang/gin-framework/references/middleware-patterns.md +119 -0
  104. package/rules/golang/gorm-orm/SKILL.md +196 -0
  105. package/rules/golang/gorm-orm/references/REFERENCE.md +14 -0
  106. package/rules/golang/gorm-orm/references/model-definitions.md +167 -0
  107. package/rules/golang/gorm-orm/references/query-patterns.md +161 -0
  108. package/rules/golang/grpc/SKILL.md +231 -0
  109. package/rules/golang/grpc/references/REFERENCE.md +13 -0
  110. package/rules/golang/grpc/references/service-patterns.md +276 -0
  111. package/rules/golang/testify/SKILL.md +239 -0
  112. package/rules/golang/testify/references/REFERENCE.md +13 -0
  113. package/rules/golang/testify/references/assert-patterns.md +170 -0
  114. package/rules/golang/validator/SKILL.md +234 -0
  115. package/rules/golang/validator/references/REFERENCE.md +13 -0
  116. package/rules/golang/validator/references/validation-tags.md +211 -0
  117. package/rules/golang/viper-config/SKILL.md +244 -0
  118. package/rules/golang/viper-config/references/REFERENCE.md +13 -0
  119. package/rules/golang/viper-config/references/config-loading.md +181 -0
  120. package/rules/golang/wire-di/SKILL.md +243 -0
  121. package/rules/golang/wire-di/references/REFERENCE.md +13 -0
  122. package/rules/golang/wire-di/references/provider-patterns.md +193 -0
  123. package/rules/golang/zap-logging/SKILL.md +203 -0
  124. package/rules/golang/zap-logging/references/REFERENCE.md +13 -0
  125. package/rules/golang/zap-logging/references/logger-config.md +165 -0
  126. package/rules/java/build-gradle/SKILL.md +92 -0
  127. package/rules/java/build-gradle/references/REFERENCE.md +14 -0
  128. package/rules/java/build-gradle/references/kotlin-dsl.md +118 -0
  129. package/rules/java/build-gradle/references/task-configuration.md +132 -0
  130. package/rules/java/build-maven/SKILL.md +86 -0
  131. package/rules/java/build-maven/references/REFERENCE.md +14 -0
  132. package/rules/java/build-maven/references/dependency-management.md +111 -0
  133. package/rules/java/build-maven/references/lifecycle-phases.md +114 -0
  134. package/rules/java/graalvm-native/SKILL.md +105 -0
  135. package/rules/java/graalvm-native/references/REFERENCE.md +12 -0
  136. package/rules/java/java-collections-streams/SKILL.md +148 -0
  137. package/rules/java/java-collections-streams/references/REFERENCE.md +15 -0
  138. package/rules/java/java-collections-streams/references/collectors-patterns.md +178 -0
  139. package/rules/java/java-collections-streams/references/stream-pipelines.md +165 -0
  140. package/rules/java/java-concurrency/SKILL.md +187 -0
  141. package/rules/java/java-concurrency/references/REFERENCE.md +17 -0
  142. package/rules/java/java-concurrency/references/completable-future.md +165 -0
  143. package/rules/java/java-concurrency/references/executor-patterns.md +176 -0
  144. package/rules/java/java-concurrency/references/virtual-threads.md +190 -0
  145. package/rules/java/java-core-language/SKILL.md +121 -0
  146. package/rules/java/java-core-language/references/REFERENCE.md +15 -0
  147. package/rules/java/java-core-language/references/jvm-memory-model.md +160 -0
  148. package/rules/java/java-core-language/references/modern-java-features.md +168 -0
  149. package/rules/java/java-project-structure/SKILL.md +195 -0
  150. package/rules/java/java-project-structure/references/REFERENCE.md +15 -0
  151. package/rules/java/java-project-structure/references/maven-project-layout.md +199 -0
  152. package/rules/java/java-project-structure/references/module-system.md +159 -0
  153. package/rules/java/micronaut-core/SKILL.md +99 -0
  154. package/rules/java/micronaut-core/references/REFERENCE.md +12 -0
  155. package/rules/java/micronaut-reactive/SKILL.md +68 -0
  156. package/rules/java/micronaut-reactive/references/REFERENCE.md +12 -0
  157. package/rules/java/quarkus-core/SKILL.md +85 -0
  158. package/rules/java/quarkus-core/references/REFERENCE.md +12 -0
  159. package/rules/java/quarkus-reactive/SKILL.md +67 -0
  160. package/rules/java/quarkus-reactive/references/REFERENCE.md +12 -0
  161. package/rules/java/spring-batch/SKILL.md +102 -0
  162. package/rules/java/spring-batch/references/REFERENCE.md +12 -0
  163. package/rules/java/spring-boot-architecture/SKILL.md +206 -0
  164. package/rules/java/spring-boot-architecture/references/REFERENCE.md +15 -0
  165. package/rules/java/spring-boot-architecture/references/auto-configuration.md +158 -0
  166. package/rules/java/spring-boot-architecture/references/configuration-properties.md +202 -0
  167. package/rules/java/spring-boot-web/SKILL.md +217 -0
  168. package/rules/java/spring-boot-web/references/REFERENCE.md +17 -0
  169. package/rules/java/spring-cloud/SKILL.md +109 -0
  170. package/rules/java/spring-cloud/references/REFERENCE.md +13 -0
  171. package/rules/java/spring-data-jpa/SKILL.md +241 -0
  172. package/rules/java/spring-data-jpa/references/REFERENCE.md +16 -0
  173. package/rules/java/spring-security/SKILL.md +161 -0
  174. package/rules/java/spring-security/references/REFERENCE.md +16 -0
  175. package/rules/java/spring-security/references/jwt-auth-flow.md +213 -0
  176. package/rules/java/testing-junit-mockito/SKILL.md +135 -0
  177. package/rules/java/testing-junit-mockito/references/REFERENCE.md +15 -0
  178. package/rules/java/testing-junit-mockito/references/junit5-patterns.md +159 -0
  179. package/rules/java/testing-junit-mockito/references/mockito-patterns.md +148 -0
  180. package/rules/java/testing-junit-mockito/references/spring-boot-testing.md +152 -0
  181. package/rules/javascript/best-practices/SKILL.md +64 -0
  182. package/rules/javascript/best-practices/references/REFERENCE.md +91 -0
  183. package/rules/javascript/language/SKILL.md +71 -0
  184. package/rules/javascript/language/references/REFERENCE.md +106 -0
  185. package/rules/javascript/tooling/SKILL.md +60 -0
  186. package/rules/javascript/tooling/references/REFERENCE.md +107 -0
  187. package/rules/metadata.json +54 -0
  188. package/rules/nestjs/api-standards/SKILL.md +47 -0
  189. package/rules/nestjs/api-standards/references/pagination-wrapper.md +87 -0
  190. package/rules/nestjs/architecture/SKILL.md +68 -0
  191. package/rules/nestjs/architecture/references/dynamic-module.md +53 -0
  192. package/rules/nestjs/caching/SKILL.md +51 -0
  193. package/rules/nestjs/caching/references/REFERENCE.md +13 -0
  194. package/rules/nestjs/caching/references/cache-patterns.md +183 -0
  195. package/rules/nestjs/configuration/SKILL.md +41 -0
  196. package/rules/nestjs/configuration/references/REFERENCE.md +13 -0
  197. package/rules/nestjs/configuration/references/config-patterns.md +184 -0
  198. package/rules/nestjs/controllers-services/SKILL.md +63 -0
  199. package/rules/nestjs/controllers-services/references/REFERENCE.md +14 -0
  200. package/rules/nestjs/controllers-services/references/controller-patterns.md +119 -0
  201. package/rules/nestjs/controllers-services/references/service-patterns.md +129 -0
  202. package/rules/nestjs/database/SKILL.md +102 -0
  203. package/rules/nestjs/database/references/REFERENCE.md +14 -0
  204. package/rules/nestjs/database/references/typeorm-patterns.md +156 -0
  205. package/rules/nestjs/deployment/SKILL.md +36 -0
  206. package/rules/nestjs/deployment/references/REFERENCE.md +13 -0
  207. package/rules/nestjs/deployment/references/deployment-patterns.md +140 -0
  208. package/rules/nestjs/documentation/SKILL.md +64 -0
  209. package/rules/nestjs/documentation/references/REFERENCE.md +13 -0
  210. package/rules/nestjs/documentation/references/swagger-patterns.md +139 -0
  211. package/rules/nestjs/error-handling/SKILL.md +55 -0
  212. package/rules/nestjs/error-handling/references/REFERENCE.md +13 -0
  213. package/rules/nestjs/error-handling/references/exception-filters.md +152 -0
  214. package/rules/nestjs/file-uploads/SKILL.md +35 -0
  215. package/rules/nestjs/file-uploads/references/REFERENCE.md +13 -0
  216. package/rules/nestjs/file-uploads/references/upload-patterns.md +125 -0
  217. package/rules/nestjs/observability/SKILL.md +39 -0
  218. package/rules/nestjs/observability/references/REFERENCE.md +13 -0
  219. package/rules/nestjs/observability/references/logging-metrics.md +175 -0
  220. package/rules/nestjs/performance/SKILL.md +60 -0
  221. package/rules/nestjs/performance/references/REFERENCE.md +13 -0
  222. package/rules/nestjs/performance/references/performance-patterns.md +107 -0
  223. package/rules/nestjs/real-time/SKILL.md +45 -0
  224. package/rules/nestjs/real-time/references/REFERENCE.md +13 -0
  225. package/rules/nestjs/real-time/references/websocket-patterns.md +121 -0
  226. package/rules/nestjs/scheduling/SKILL.md +39 -0
  227. package/rules/nestjs/scheduling/references/REFERENCE.md +13 -0
  228. package/rules/nestjs/scheduling/references/scheduling-patterns.md +137 -0
  229. package/rules/nestjs/search/SKILL.md +41 -0
  230. package/rules/nestjs/search/references/REFERENCE.md +13 -0
  231. package/rules/nestjs/search/references/search-patterns.md +137 -0
  232. package/rules/nestjs/security/SKILL.md +87 -0
  233. package/rules/nestjs/security/references/REFERENCE.md +14 -0
  234. package/rules/nestjs/security/references/authentication.md +151 -0
  235. package/rules/nestjs/testing/SKILL.md +40 -0
  236. package/rules/nestjs/testing/references/REFERENCE.md +14 -0
  237. package/rules/nestjs/testing/references/unit-testing.md +179 -0
  238. package/rules/nestjs/transport/SKILL.md +45 -0
  239. package/rules/nestjs/transport/references/REFERENCE.md +13 -0
  240. package/rules/nestjs/transport/references/microservices-patterns.md +170 -0
  241. package/rules/nextjs/app-router/SKILL.md +46 -0
  242. package/rules/nextjs/app-router/references/REFERENCE.md +14 -0
  243. package/rules/nextjs/app-router/references/routing-patterns.md +182 -0
  244. package/rules/nextjs/architecture/SKILL.md +44 -0
  245. package/rules/nextjs/architecture/references/fsd-structure.md +77 -0
  246. package/rules/nextjs/authentication/SKILL.md +29 -0
  247. package/rules/nextjs/authentication/references/auth-implementation.md +73 -0
  248. package/rules/nextjs/caching/SKILL.md +66 -0
  249. package/rules/nextjs/caching/references/REFERENCE.md +13 -0
  250. package/rules/nextjs/caching/references/cache-strategies.md +168 -0
  251. package/rules/nextjs/data-access-layer/SKILL.md +33 -0
  252. package/rules/nextjs/data-access-layer/references/patterns.md +66 -0
  253. package/rules/nextjs/data-fetching/SKILL.md +59 -0
  254. package/rules/nextjs/data-fetching/references/REFERENCE.md +13 -0
  255. package/rules/nextjs/data-fetching/references/fetch-patterns.md +160 -0
  256. package/rules/nextjs/internationalization/SKILL.md +105 -0
  257. package/rules/nextjs/internationalization/references/REFERENCE.md +13 -0
  258. package/rules/nextjs/internationalization/references/i18n-patterns.md +180 -0
  259. package/rules/nextjs/optimization/SKILL.md +64 -0
  260. package/rules/nextjs/optimization/references/REFERENCE.md +13 -0
  261. package/rules/nextjs/optimization/references/optimization-patterns.md +190 -0
  262. package/rules/nextjs/rendering/SKILL.md +91 -0
  263. package/rules/nextjs/rendering/references/REFERENCE.md +13 -0
  264. package/rules/nextjs/rendering/references/rendering-modes.md +163 -0
  265. package/rules/nextjs/server-actions/SKILL.md +46 -0
  266. package/rules/nextjs/server-actions/references/REFERENCE.md +13 -0
  267. package/rules/nextjs/server-actions/references/action-patterns.md +188 -0
  268. package/rules/nextjs/server-components/SKILL.md +52 -0
  269. package/rules/nextjs/server-components/references/REFERENCE.md +13 -0
  270. package/rules/nextjs/server-components/references/component-patterns.md +175 -0
  271. package/rules/nextjs/state-management/SKILL.md +73 -0
  272. package/rules/nextjs/state-management/references/REFERENCE.md +13 -0
  273. package/rules/nextjs/state-management/references/state-patterns.md +218 -0
  274. package/rules/nextjs/styling/SKILL.md +31 -0
  275. package/rules/nextjs/styling/references/implementation.md +56 -0
  276. package/rules/react/component-patterns/SKILL.md +66 -0
  277. package/rules/react/component-patterns/references/REFERENCE.md +126 -0
  278. package/rules/react/hooks/SKILL.md +60 -0
  279. package/rules/react/hooks/references/REFERENCE.md +132 -0
  280. package/rules/react/hooks.rule.md +79 -0
  281. package/rules/react/performance/SKILL.md +69 -0
  282. package/rules/react/performance/references/REFERENCE.md +143 -0
  283. package/rules/react/security/SKILL.md +46 -0
  284. package/rules/react/security/references/REFERENCE.md +170 -0
  285. package/rules/react/state-management/SKILL.md +56 -0
  286. package/rules/react/state-management/references/REFERENCE.md +137 -0
  287. package/rules/react/testing/SKILL.md +45 -0
  288. package/rules/react/testing/references/REFERENCE.md +149 -0
  289. package/rules/react/tooling/SKILL.md +39 -0
  290. package/rules/react/typescript/SKILL.md +53 -0
  291. package/rules/rust/actix-web/SKILL.md +160 -0
  292. package/rules/rust/actix-web/references/REFERENCE.md +13 -0
  293. package/rules/rust/actix-web/references/handler-patterns.md +198 -0
  294. package/rules/rust/async-graphql/SKILL.md +228 -0
  295. package/rules/rust/async-graphql/references/REFERENCE.md +13 -0
  296. package/rules/rust/async-graphql/references/schema-patterns.md +215 -0
  297. package/rules/rust/axum/SKILL.md +161 -0
  298. package/rules/rust/axum/references/REFERENCE.md +14 -0
  299. package/rules/rust/axum/references/handler-patterns.md +97 -0
  300. package/rules/rust/bevy/SKILL.md +206 -0
  301. package/rules/rust/bevy/references/REFERENCE.md +13 -0
  302. package/rules/rust/bevy/references/ecs-patterns.md +226 -0
  303. package/rules/rust/clap/SKILL.md +217 -0
  304. package/rules/rust/clap/references/REFERENCE.md +13 -0
  305. package/rules/rust/clap/references/derive-patterns.md +205 -0
  306. package/rules/rust/core/SKILL.md +154 -0
  307. package/rules/rust/core/references/REFERENCE.md +14 -0
  308. package/rules/rust/core/references/error-handling.md +92 -0
  309. package/rules/rust/diesel-orm/SKILL.md +176 -0
  310. package/rules/rust/diesel-orm/references/REFERENCE.md +13 -0
  311. package/rules/rust/diesel-orm/references/schema-patterns.md +206 -0
  312. package/rules/rust/rocket/SKILL.md +182 -0
  313. package/rules/rust/rocket/references/REFERENCE.md +13 -0
  314. package/rules/rust/rocket/references/handler-patterns.md +209 -0
  315. package/rules/rust/sea-orm/SKILL.md +230 -0
  316. package/rules/rust/sea-orm/references/REFERENCE.md +13 -0
  317. package/rules/rust/sea-orm/references/entity-patterns.md +221 -0
  318. package/rules/rust/serde-serialization/SKILL.md +150 -0
  319. package/rules/rust/serde-serialization/references/REFERENCE.md +13 -0
  320. package/rules/rust/serde-serialization/references/serialization-patterns.md +199 -0
  321. package/rules/rust/sqlx-database/SKILL.md +140 -0
  322. package/rules/rust/sqlx-database/references/REFERENCE.md +13 -0
  323. package/rules/rust/sqlx-database/references/query-patterns.md +210 -0
  324. package/rules/rust/tauri/SKILL.md +180 -0
  325. package/rules/rust/tauri/references/REFERENCE.md +13 -0
  326. package/rules/rust/tauri/references/command-patterns.md +209 -0
  327. package/rules/rust/tokio-runtime/SKILL.md +167 -0
  328. package/rules/rust/tokio-runtime/references/REFERENCE.md +14 -0
  329. package/rules/rust/tokio-runtime/references/async-patterns.md +137 -0
  330. package/rules/rust/tokio-runtime/references/synchronization.md +152 -0
  331. package/rules/rust/tonic/SKILL.md +231 -0
  332. package/rules/rust/tonic/references/REFERENCE.md +13 -0
  333. package/rules/rust/tonic/references/service-patterns.md +213 -0
  334. package/rules/rust/tracing/SKILL.md +214 -0
  335. package/rules/rust/tracing/references/REFERENCE.md +13 -0
  336. package/rules/rust/tracing/references/instrumentation.md +187 -0
  337. package/rules/typescript/best-practices/SKILL.md +108 -0
  338. package/rules/typescript/best-practices/references/REFERENCE.md +68 -0
  339. package/rules/typescript/language/SKILL.md +72 -0
  340. package/rules/typescript/language/references/REFERENCE.md +67 -0
  341. package/rules/typescript/patterns.rule.md +85 -0
  342. package/rules/typescript/security/SKILL.md +59 -0
  343. package/rules/typescript/security/references/REFERENCE.md +113 -0
  344. package/rules/typescript/tooling/SKILL.md +52 -0
  345. package/rules/typescript/tooling/references/REFERENCE.md +110 -0
@@ -0,0 +1,243 @@
1
+ ---
2
+ name: Wire Dependency Injection
3
+ description: Compile-time dependency injection from Google.
4
+ metadata:
5
+ labels: [golang, wire, di, dependency-injection]
6
+ triggers:
7
+ files: ['**/wire.go', '**/wire_gen.go']
8
+ keywords: [wire, Build, NewSet, Bind, Injector]
9
+ ---
10
+
11
+ # Wire DI Standards
12
+
13
+ ## Basic Setup
14
+
15
+ ```go
16
+ // wire.go
17
+ //go:build wireinject
18
+ // +build wireinject
19
+
20
+ package main
21
+
22
+ import "github.com/google/wire"
23
+
24
+ func InitializeApp() (*App, error) {
25
+ wire.Build(
26
+ NewDatabase,
27
+ NewUserRepository,
28
+ NewUserService,
29
+ NewApp,
30
+ )
31
+ return nil, nil
32
+ }
33
+ ```
34
+
35
+ ```bash
36
+ # Generate wire_gen.go
37
+ wire ./...
38
+ ```
39
+
40
+ ## Providers
41
+
42
+ ```go
43
+ // Providers are constructors
44
+ func NewDatabase(cfg *Config) (*sql.DB, error) {
45
+ return sql.Open("postgres", cfg.DatabaseURL)
46
+ }
47
+
48
+ func NewUserRepository(db *sql.DB) *UserRepository {
49
+ return &UserRepository{db: db}
50
+ }
51
+
52
+ func NewUserService(repo *UserRepository) *UserService {
53
+ return &UserService{repo: repo}
54
+ }
55
+
56
+ func NewApp(svc *UserService) *App {
57
+ return &App{userService: svc}
58
+ }
59
+ ```
60
+
61
+ ## Provider Sets
62
+
63
+ ```go
64
+ // Group related providers
65
+ var DatabaseSet = wire.NewSet(
66
+ NewDatabase,
67
+ NewUserRepository,
68
+ NewPostRepository,
69
+ )
70
+
71
+ var ServiceSet = wire.NewSet(
72
+ NewUserService,
73
+ NewPostService,
74
+ )
75
+
76
+ // Use sets in injector
77
+ func InitializeApp(cfg *Config) (*App, error) {
78
+ wire.Build(
79
+ DatabaseSet,
80
+ ServiceSet,
81
+ NewApp,
82
+ )
83
+ return nil, nil
84
+ }
85
+ ```
86
+
87
+ ## Interface Binding
88
+
89
+ ```go
90
+ type UserRepository interface {
91
+ FindByID(id int) (*User, error)
92
+ }
93
+
94
+ type userRepository struct {
95
+ db *sql.DB
96
+ }
97
+
98
+ func NewUserRepository(db *sql.DB) *userRepository {
99
+ return &userRepository{db: db}
100
+ }
101
+
102
+ // Bind implementation to interface
103
+ var RepositorySet = wire.NewSet(
104
+ NewUserRepository,
105
+ wire.Bind(new(UserRepository), new(*userRepository)),
106
+ )
107
+ ```
108
+
109
+ ## Struct Providers
110
+
111
+ ```go
112
+ type Config struct {
113
+ DatabaseURL string
114
+ Port int
115
+ }
116
+
117
+ // Provide struct fields
118
+ var ConfigSet = wire.NewSet(
119
+ wire.Struct(new(Config), "*"), // All fields
120
+ // or
121
+ wire.Struct(new(Config), "DatabaseURL", "Port"), // Specific fields
122
+ )
123
+
124
+ // Field providers must exist
125
+ func InitializeApp(dbURL string, port int) (*App, error) {
126
+ wire.Build(
127
+ ConfigSet,
128
+ // ...
129
+ )
130
+ return nil, nil
131
+ }
132
+ ```
133
+
134
+ ## Value Providers
135
+
136
+ ```go
137
+ func InitializeApp() (*App, error) {
138
+ wire.Build(
139
+ wire.Value(&Config{
140
+ DatabaseURL: "postgres://...",
141
+ Port: 8080,
142
+ }),
143
+ NewDatabase,
144
+ NewApp,
145
+ )
146
+ return nil, nil
147
+ }
148
+
149
+ // Or interface value
150
+ wire.InterfaceValue(new(io.Writer), os.Stdout)
151
+ ```
152
+
153
+ ## Cleanup Functions
154
+
155
+ ```go
156
+ func NewDatabase(cfg *Config) (*sql.DB, func(), error) {
157
+ db, err := sql.Open("postgres", cfg.DatabaseURL)
158
+ if err != nil {
159
+ return nil, nil, err
160
+ }
161
+
162
+ cleanup := func() {
163
+ db.Close()
164
+ }
165
+
166
+ return db, cleanup, nil
167
+ }
168
+
169
+ // Injector returns cleanup
170
+ func InitializeApp(cfg *Config) (*App, func(), error) {
171
+ wire.Build(
172
+ NewDatabase,
173
+ NewApp,
174
+ )
175
+ return nil, nil, nil
176
+ }
177
+
178
+ // Usage
179
+ app, cleanup, err := InitializeApp(cfg)
180
+ if err != nil {
181
+ log.Fatal(err)
182
+ }
183
+ defer cleanup()
184
+ ```
185
+
186
+ ## Multiple Injectors
187
+
188
+ ```go
189
+ // wire.go
190
+ //go:build wireinject
191
+
192
+ package main
193
+
194
+ import "github.com/google/wire"
195
+
196
+ // For HTTP server
197
+ func InitializeHTTPServer(cfg *Config) (*HTTPServer, func(), error) {
198
+ wire.Build(
199
+ DatabaseSet,
200
+ HTTPSet,
201
+ )
202
+ return nil, nil, nil
203
+ }
204
+
205
+ // For CLI
206
+ func InitializeCLI(cfg *Config) (*CLI, error) {
207
+ wire.Build(
208
+ DatabaseSet,
209
+ CLISet,
210
+ )
211
+ return nil, nil
212
+ }
213
+ ```
214
+
215
+ ## Testing
216
+
217
+ ```go
218
+ // Mock for testing
219
+ type mockUserRepository struct{}
220
+
221
+ func (m *mockUserRepository) FindByID(id int) (*User, error) {
222
+ return &User{ID: id, Name: "Test"}, nil
223
+ }
224
+
225
+ // Test injector
226
+ func InitializeTestApp() (*App, error) {
227
+ wire.Build(
228
+ wire.Value(&mockUserRepository{}),
229
+ wire.Bind(new(UserRepository), new(*mockUserRepository)),
230
+ NewUserService,
231
+ NewApp,
232
+ )
233
+ return nil, nil
234
+ }
235
+ ```
236
+
237
+ ## Best Practices
238
+
239
+ 1. **Provider sets**: Group related providers
240
+ 2. **Interfaces**: Use `wire.Bind` for testability
241
+ 3. **Cleanup**: Return cleanup functions for resources
242
+ 4. **Build tags**: Use `wireinject` build tag
243
+ 5. **Regenerate**: Run `wire ./...` after changes
@@ -0,0 +1,13 @@
1
+ # Wire DI References
2
+
3
+ ## References
4
+
5
+ - [**Provider Patterns**](provider-patterns.md) - Providers, sets, injectors
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use ProviderSet for grouping related providers
10
+ - [ ] wire.Build in injector functions
11
+ - [ ] Interface bindings with wire.Bind
12
+ - [ ] Cleanup functions for resources
13
+ - [ ] Run wire generate after changes
@@ -0,0 +1,193 @@
1
+ # Wire Provider Patterns
2
+
3
+ ## Basic Providers
4
+
5
+ ```go
6
+ // Provider function returns a dependency
7
+ func NewDatabase(cfg *Config) (*Database, error) {
8
+ db, err := sql.Open("postgres", cfg.DSN)
9
+ if err != nil {
10
+ return nil, err
11
+ }
12
+ return &Database{db: db}, nil
13
+ }
14
+
15
+ func NewUserRepository(db *Database) *UserRepository {
16
+ return &UserRepository{db: db}
17
+ }
18
+
19
+ func NewUserService(repo *UserRepository) *UserService {
20
+ return &UserService{repo: repo}
21
+ }
22
+ ```
23
+
24
+ ## Injector Function
25
+
26
+ ```go
27
+ // +build wireinject
28
+
29
+ package main
30
+
31
+ import "github.com/google/wire"
32
+
33
+ // InitializeApp creates the application with all dependencies
34
+ func InitializeApp(cfg *Config) (*App, error) {
35
+ wire.Build(
36
+ NewDatabase,
37
+ NewUserRepository,
38
+ NewUserService,
39
+ NewApp,
40
+ )
41
+ return nil, nil // Wire generates the actual implementation
42
+ }
43
+
44
+ // Run: wire gen ./...
45
+ ```
46
+
47
+ ## Provider Sets
48
+
49
+ ```go
50
+ // Group related providers
51
+ var DatabaseSet = wire.NewSet(
52
+ NewDatabase,
53
+ NewUserRepository,
54
+ NewOrderRepository,
55
+ )
56
+
57
+ var ServiceSet = wire.NewSet(
58
+ NewUserService,
59
+ NewOrderService,
60
+ NewPaymentService,
61
+ )
62
+
63
+ var AppSet = wire.NewSet(
64
+ DatabaseSet,
65
+ ServiceSet,
66
+ NewApp,
67
+ )
68
+
69
+ // Use in injector
70
+ func InitializeApp(cfg *Config) (*App, error) {
71
+ wire.Build(AppSet)
72
+ return nil, nil
73
+ }
74
+ ```
75
+
76
+ ## Interface Bindings
77
+
78
+ ```go
79
+ // Interface
80
+ type UserRepository interface {
81
+ FindByID(id int) (*User, error)
82
+ Save(user *User) error
83
+ }
84
+
85
+ // Implementation
86
+ type PostgresUserRepository struct {
87
+ db *Database
88
+ }
89
+
90
+ func NewPostgresUserRepository(db *Database) *PostgresUserRepository {
91
+ return &PostgresUserRepository{db: db}
92
+ }
93
+
94
+ // Bind implementation to interface
95
+ var RepositorySet = wire.NewSet(
96
+ NewPostgresUserRepository,
97
+ wire.Bind(new(UserRepository), new(*PostgresUserRepository)),
98
+ )
99
+
100
+ // Service now depends on interface
101
+ func NewUserService(repo UserRepository) *UserService {
102
+ return &UserService{repo: repo}
103
+ }
104
+ ```
105
+
106
+ ## Cleanup Functions
107
+
108
+ ```go
109
+ // Provider with cleanup
110
+ func NewDatabase(cfg *Config) (*Database, func(), error) {
111
+ db, err := sql.Open("postgres", cfg.DSN)
112
+ if err != nil {
113
+ return nil, nil, err
114
+ }
115
+
116
+ cleanup := func() {
117
+ db.Close()
118
+ }
119
+
120
+ return &Database{db: db}, cleanup, nil
121
+ }
122
+
123
+ // Injector returns cleanup function
124
+ func InitializeApp(cfg *Config) (*App, func(), error) {
125
+ wire.Build(AppSet)
126
+ return nil, nil, nil
127
+ }
128
+
129
+ // Usage
130
+ func main() {
131
+ app, cleanup, err := InitializeApp(cfg)
132
+ if err != nil {
133
+ log.Fatal(err)
134
+ }
135
+ defer cleanup() // Cleanup all resources
136
+
137
+ app.Run()
138
+ }
139
+ ```
140
+
141
+ ## Struct Providers
142
+
143
+ ```go
144
+ // Provide struct fields
145
+ type Config struct {
146
+ DB DBConfig
147
+ Server ServerConfig
148
+ }
149
+
150
+ var ConfigSet = wire.NewSet(
151
+ wire.FieldsOf(new(*Config), "DB", "Server"),
152
+ )
153
+
154
+ // Or struct with all exported fields
155
+ var ConfigSet = wire.NewSet(
156
+ wire.Struct(new(Config), "*"),
157
+ )
158
+ ```
159
+
160
+ ## Values
161
+
162
+ ```go
163
+ // Provide specific values
164
+ func InitializeApp() (*App, error) {
165
+ wire.Build(
166
+ wire.Value(Config{Port: 8080}),
167
+ wire.InterfaceValue(new(io.Writer), os.Stdout),
168
+ NewApp,
169
+ )
170
+ return nil, nil
171
+ }
172
+ ```
173
+
174
+ ## Generated Code (wire_gen.go)
175
+
176
+ ```go
177
+ // Code generated by Wire. DO NOT EDIT.
178
+
179
+ package main
180
+
181
+ func InitializeApp(cfg *Config) (*App, func(), error) {
182
+ database, cleanup, err := NewDatabase(cfg)
183
+ if err != nil {
184
+ return nil, nil, err
185
+ }
186
+ userRepository := NewUserRepository(database)
187
+ userService := NewUserService(userRepository)
188
+ app := NewApp(userService)
189
+ return app, func() {
190
+ cleanup()
191
+ }, nil
192
+ }
193
+ ```
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: Zap Logging
3
+ description: Blazing fast structured logging from Uber.
4
+ metadata:
5
+ labels: [golang, zap, logging, observability]
6
+ triggers:
7
+ files: ['**/logger.go', '**/main.go']
8
+ keywords: [zap, Logger, SugaredLogger, zapcore]
9
+ ---
10
+
11
+ # Zap Logging Standards
12
+
13
+ ## Setup
14
+
15
+ ```go
16
+ import "go.uber.org/zap"
17
+
18
+ // Development (human readable)
19
+ func NewDevelopmentLogger() *zap.Logger {
20
+ logger, _ := zap.NewDevelopment()
21
+ return logger
22
+ }
23
+
24
+ // Production (JSON, optimized)
25
+ func NewProductionLogger() *zap.Logger {
26
+ logger, _ := zap.NewProduction()
27
+ return logger
28
+ }
29
+
30
+ // With options
31
+ func NewLogger() *zap.Logger {
32
+ cfg := zap.NewProductionConfig()
33
+ cfg.Level = zap.NewAtomicLevelAt(zap.InfoLevel)
34
+ cfg.OutputPaths = []string{"stdout", "/var/log/app.log"}
35
+ cfg.EncoderConfig.TimeKey = "timestamp"
36
+ cfg.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
37
+
38
+ logger, _ := cfg.Build()
39
+ return logger
40
+ }
41
+ ```
42
+
43
+ ## Logger vs SugaredLogger
44
+
45
+ ```go
46
+ // Logger - faster, type-safe
47
+ logger := zap.NewProduction()
48
+ logger.Info("User logged in",
49
+ zap.String("user_id", "123"),
50
+ zap.Int("attempt", 1),
51
+ zap.Duration("latency", time.Millisecond*50),
52
+ )
53
+
54
+ // SugaredLogger - convenient, slower
55
+ sugar := logger.Sugar()
56
+ sugar.Infow("User logged in",
57
+ "user_id", "123",
58
+ "attempt", 1,
59
+ "latency", time.Millisecond*50,
60
+ )
61
+ sugar.Infof("User %s logged in", userID)
62
+ ```
63
+
64
+ ## Structured Fields
65
+
66
+ ```go
67
+ logger.Info("Request completed",
68
+ zap.String("method", "GET"),
69
+ zap.String("path", "/users"),
70
+ zap.Int("status", 200),
71
+ zap.Duration("latency", latency),
72
+ zap.String("client_ip", clientIP),
73
+ zap.Any("headers", headers), // Any type
74
+ zap.Error(err), // Error field
75
+ zap.Stack("stacktrace"), // Stack trace
76
+ )
77
+
78
+ // Namespaced fields
79
+ logger.Info("Request",
80
+ zap.Namespace("http"),
81
+ zap.String("method", "GET"),
82
+ zap.Int("status", 200),
83
+ )
84
+ // Output: {"http": {"method": "GET", "status": 200}}
85
+ ```
86
+
87
+ ## Log Levels
88
+
89
+ ```go
90
+ logger.Debug("Debug message") // -1
91
+ logger.Info("Info message") // 0
92
+ logger.Warn("Warning message") // 1
93
+ logger.Error("Error message") // 2
94
+ logger.DPanic("DPanic message") // 3 (panics in development)
95
+ logger.Panic("Panic message") // 4 (always panics)
96
+ logger.Fatal("Fatal message") // 5 (calls os.Exit(1))
97
+
98
+ // Check level before expensive operations
99
+ if logger.Core().Enabled(zap.DebugLevel) {
100
+ logger.Debug("Expensive", zap.Any("data", computeExpensiveData()))
101
+ }
102
+ ```
103
+
104
+ ## Child Loggers
105
+
106
+ ```go
107
+ // Add fields to all subsequent logs
108
+ requestLogger := logger.With(
109
+ zap.String("request_id", requestID),
110
+ zap.String("user_id", userID),
111
+ )
112
+
113
+ requestLogger.Info("Processing request")
114
+ requestLogger.Info("Request completed")
115
+ // Both logs include request_id and user_id
116
+
117
+ // Named logger
118
+ dbLogger := logger.Named("database")
119
+ dbLogger.Info("Query executed")
120
+ // Output: {"logger": "database", "msg": "Query executed"}
121
+ ```
122
+
123
+ ## Gin Integration
124
+
125
+ ```go
126
+ import (
127
+ "github.com/gin-gonic/gin"
128
+ "go.uber.org/zap"
129
+ )
130
+
131
+ func GinLogger(logger *zap.Logger) gin.HandlerFunc {
132
+ return func(c *gin.Context) {
133
+ start := time.Now()
134
+ path := c.Request.URL.Path
135
+
136
+ c.Next()
137
+
138
+ logger.Info("Request",
139
+ zap.String("method", c.Request.Method),
140
+ zap.String("path", path),
141
+ zap.Int("status", c.Writer.Status()),
142
+ zap.Duration("latency", time.Since(start)),
143
+ zap.String("client_ip", c.ClientIP()),
144
+ )
145
+ }
146
+ }
147
+
148
+ r := gin.New()
149
+ r.Use(GinLogger(logger))
150
+ ```
151
+
152
+ ## Custom Encoder
153
+
154
+ ```go
155
+ cfg := zap.NewProductionConfig()
156
+ cfg.EncoderConfig = zapcore.EncoderConfig{
157
+ TimeKey: "ts",
158
+ LevelKey: "level",
159
+ NameKey: "logger",
160
+ CallerKey: "caller",
161
+ MessageKey: "msg",
162
+ StacktraceKey: "stacktrace",
163
+ LineEnding: zapcore.DefaultLineEnding,
164
+ EncodeLevel: zapcore.LowercaseLevelEncoder,
165
+ EncodeTime: zapcore.ISO8601TimeEncoder,
166
+ EncodeDuration: zapcore.MillisDurationEncoder,
167
+ EncodeCaller: zapcore.ShortCallerEncoder,
168
+ }
169
+ ```
170
+
171
+ ## Sampling
172
+
173
+ ```go
174
+ // Sample logs to reduce volume in production
175
+ cfg := zap.NewProductionConfig()
176
+ cfg.Sampling = &zap.SamplingConfig{
177
+ Initial: 100, // First 100 per second logged
178
+ Thereafter: 100, // Then every 100th message
179
+ }
180
+ ```
181
+
182
+ ## Global Logger
183
+
184
+ ```go
185
+ // Replace global logger
186
+ logger := zap.NewProduction()
187
+ zap.ReplaceGlobals(logger)
188
+
189
+ // Use global
190
+ zap.L().Info("Using global logger")
191
+ zap.S().Infow("Using global sugar")
192
+
193
+ // Always sync before exit
194
+ defer logger.Sync()
195
+ ```
196
+
197
+ ## Best Practices
198
+
199
+ 1. **Production**: Use `zap.NewProduction()` for JSON output
200
+ 2. **Sync**: Always call `logger.Sync()` before exit
201
+ 3. **Fields**: Prefer `zap.String()` etc. over SugaredLogger
202
+ 4. **Child loggers**: Add request context with `With()`
203
+ 5. **Sampling**: Enable in high-throughput production
@@ -0,0 +1,13 @@
1
+ # Zap Logging References
2
+
3
+ ## References
4
+
5
+ - [**Logger Configuration**](logger-config.md) - Setup, levels, output formats
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use sugared logger for development convenience
10
+ - [ ] Use standard logger for production performance
11
+ - [ ] Structured logging with typed fields
12
+ - [ ] Configure appropriate log levels
13
+ - [ ] Use sampling for high-volume logs