@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,114 @@
1
+ # Concurrency Patterns
2
+
3
+ ## Goroutines and Channels
4
+
5
+ ```go
6
+ // Worker pool
7
+ func workerPool(jobs <-chan Job, results chan<- Result, workers int) {
8
+ var wg sync.WaitGroup
9
+ for i := 0; i < workers; i++ {
10
+ wg.Add(1)
11
+ go func() {
12
+ defer wg.Done()
13
+ for job := range jobs {
14
+ results <- process(job)
15
+ }
16
+ }()
17
+ }
18
+ wg.Wait()
19
+ close(results)
20
+ }
21
+
22
+ // Fan-out, fan-in
23
+ func fanOut(input <-chan int, workers int) []<-chan int {
24
+ channels := make([]<-chan int, workers)
25
+ for i := 0; i < workers; i++ {
26
+ channels[i] = worker(input)
27
+ }
28
+ return channels
29
+ }
30
+
31
+ func fanIn(channels ...<-chan int) <-chan int {
32
+ out := make(chan int)
33
+ var wg sync.WaitGroup
34
+ for _, ch := range channels {
35
+ wg.Add(1)
36
+ go func(c <-chan int) {
37
+ defer wg.Done()
38
+ for v := range c {
39
+ out <- v
40
+ }
41
+ }(ch)
42
+ }
43
+ go func() {
44
+ wg.Wait()
45
+ close(out)
46
+ }()
47
+ return out
48
+ }
49
+ ```
50
+
51
+ ## Context for Cancellation
52
+
53
+ ```go
54
+ func processWithTimeout(ctx context.Context) error {
55
+ ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
56
+ defer cancel()
57
+
58
+ select {
59
+ case result := <-doWork(ctx):
60
+ return handleResult(result)
61
+ case <-ctx.Done():
62
+ return ctx.Err()
63
+ }
64
+ }
65
+
66
+ // Propagate context
67
+ func handler(w http.ResponseWriter, r *http.Request) {
68
+ ctx := r.Context()
69
+ result, err := service.Process(ctx) // Pass context down
70
+ // ...
71
+ }
72
+ ```
73
+
74
+ ## Sync Primitives
75
+
76
+ ```go
77
+ // Mutex for shared state
78
+ type Counter struct {
79
+ mu sync.Mutex
80
+ value int
81
+ }
82
+
83
+ func (c *Counter) Increment() {
84
+ c.mu.Lock()
85
+ defer c.mu.Unlock()
86
+ c.value++
87
+ }
88
+
89
+ // RWMutex for read-heavy workloads
90
+ type Cache struct {
91
+ mu sync.RWMutex
92
+ data map[string]string
93
+ }
94
+
95
+ func (c *Cache) Get(key string) (string, bool) {
96
+ c.mu.RLock()
97
+ defer c.mu.RUnlock()
98
+ v, ok := c.data[key]
99
+ return v, ok
100
+ }
101
+
102
+ // Once for initialization
103
+ var (
104
+ instance *Config
105
+ once sync.Once
106
+ )
107
+
108
+ func GetConfig() *Config {
109
+ once.Do(func() {
110
+ instance = loadConfig()
111
+ })
112
+ return instance
113
+ }
114
+ ```
@@ -0,0 +1,87 @@
1
+ # Error Handling Patterns
2
+
3
+ ## Error Wrapping
4
+
5
+ ```go
6
+ import (
7
+ "errors"
8
+ "fmt"
9
+ )
10
+
11
+ // Wrap errors with context
12
+ func processUser(id string) error {
13
+ user, err := findUser(id)
14
+ if err != nil {
15
+ return fmt.Errorf("processUser: finding user %s: %w", id, err)
16
+ }
17
+ return nil
18
+ }
19
+
20
+ // Check for specific error
21
+ if errors.Is(err, ErrNotFound) {
22
+ // handle not found
23
+ }
24
+
25
+ // Extract error type
26
+ var validationErr *ValidationError
27
+ if errors.As(err, &validationErr) {
28
+ // handle validation error
29
+ }
30
+ ```
31
+
32
+ ## Custom Errors
33
+
34
+ ```go
35
+ // Sentinel errors
36
+ var (
37
+ ErrNotFound = errors.New("not found")
38
+ ErrUnauthorized = errors.New("unauthorized")
39
+ )
40
+
41
+ // Custom error type
42
+ type ValidationError struct {
43
+ Field string
44
+ Message string
45
+ }
46
+
47
+ func (e *ValidationError) Error() string {
48
+ return fmt.Sprintf("validation failed: %s - %s", e.Field, e.Message)
49
+ }
50
+
51
+ // Usage
52
+ return &ValidationError{Field: "email", Message: "invalid format"}
53
+ ```
54
+
55
+ ## Error Handling Best Practices
56
+
57
+ ```go
58
+ // 1. Handle errors at the appropriate level
59
+ func handler(w http.ResponseWriter, r *http.Request) {
60
+ result, err := service.Process(r.Context())
61
+ if err != nil {
62
+ switch {
63
+ case errors.Is(err, ErrNotFound):
64
+ http.Error(w, "Not found", http.StatusNotFound)
65
+ case errors.Is(err, ErrUnauthorized):
66
+ http.Error(w, "Unauthorized", http.StatusUnauthorized)
67
+ default:
68
+ log.Printf("unexpected error: %v", err)
69
+ http.Error(w, "Internal error", http.StatusInternalServerError)
70
+ }
71
+ return
72
+ }
73
+ json.NewEncoder(w).Encode(result)
74
+ }
75
+
76
+ // 2. Don't ignore errors
77
+ file, err := os.Open(path)
78
+ if err != nil {
79
+ return err // Don't: _ = os.Open(path)
80
+ }
81
+ defer file.Close()
82
+
83
+ // 3. Panic only for unrecoverable errors
84
+ if config == nil {
85
+ panic("config is required") // Startup only
86
+ }
87
+ ```
@@ -0,0 +1,215 @@
1
+ ---
2
+ name: Echo Framework
3
+ description: High-performance, minimalist Go web framework.
4
+ metadata:
5
+ labels: [golang, echo, web, framework]
6
+ triggers:
7
+ files: ['**/main.go']
8
+ keywords: [echo, echo.New, echo.Context, e.Start]
9
+ ---
10
+
11
+ # Echo Framework Standards
12
+
13
+ ## Application Setup
14
+
15
+ ```go
16
+ package main
17
+
18
+ import (
19
+ "github.com/labstack/echo/v4"
20
+ "github.com/labstack/echo/v4/middleware"
21
+ )
22
+
23
+ func main() {
24
+ e := echo.New()
25
+
26
+ // Middleware
27
+ e.Use(middleware.Logger())
28
+ e.Use(middleware.Recover())
29
+ e.Use(middleware.CORS())
30
+
31
+ // Routes
32
+ e.GET("/", homeHandler)
33
+ e.GET("/users/:id", getUser)
34
+ e.POST("/users", createUser)
35
+
36
+ // Groups
37
+ api := e.Group("/api/v1")
38
+ api.GET("/items", listItems)
39
+
40
+ e.Logger.Fatal(e.Start(":8080"))
41
+ }
42
+ ```
43
+
44
+ ## Handlers
45
+
46
+ ```go
47
+ // Path parameters
48
+ func getUser(c echo.Context) error {
49
+ id := c.Param("id")
50
+ user, err := findUser(id)
51
+ if err != nil {
52
+ return echo.NewHTTPError(404, "User not found")
53
+ }
54
+ return c.JSON(200, user)
55
+ }
56
+
57
+ // Query parameters
58
+ func listUsers(c echo.Context) error {
59
+ page := c.QueryParam("page")
60
+ limit := c.QueryParam("limit")
61
+ users := fetchUsers(page, limit)
62
+ return c.JSON(200, users)
63
+ }
64
+
65
+ // JSON body binding
66
+ type CreateUserRequest struct {
67
+ Name string `json:"name" validate:"required"`
68
+ Email string `json:"email" validate:"required,email"`
69
+ }
70
+
71
+ func createUser(c echo.Context) error {
72
+ var req CreateUserRequest
73
+ if err := c.Bind(&req); err != nil {
74
+ return echo.NewHTTPError(400, err.Error())
75
+ }
76
+ if err := c.Validate(&req); err != nil {
77
+ return err
78
+ }
79
+ user := insertUser(req)
80
+ return c.JSON(201, user)
81
+ }
82
+ ```
83
+
84
+ ## Validation
85
+
86
+ ```go
87
+ import "github.com/go-playground/validator/v10"
88
+
89
+ type CustomValidator struct {
90
+ validator *validator.Validate
91
+ }
92
+
93
+ func (cv *CustomValidator) Validate(i interface{}) error {
94
+ if err := cv.validator.Struct(i); err != nil {
95
+ return echo.NewHTTPError(400, err.Error())
96
+ }
97
+ return nil
98
+ }
99
+
100
+ func main() {
101
+ e := echo.New()
102
+ e.Validator = &CustomValidator{validator: validator.New()}
103
+ }
104
+ ```
105
+
106
+ ## Middleware
107
+
108
+ ```go
109
+ // Built-in middleware
110
+ e.Use(middleware.Logger())
111
+ e.Use(middleware.Recover())
112
+ e.Use(middleware.CORS())
113
+ e.Use(middleware.Gzip())
114
+ e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20)))
115
+
116
+ // JWT middleware
117
+ e.Use(middleware.JWTWithConfig(middleware.JWTConfig{
118
+ SigningKey: []byte("secret"),
119
+ Claims: &JwtCustomClaims{},
120
+ }))
121
+
122
+ // Custom middleware
123
+ func authMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
124
+ return func(c echo.Context) error {
125
+ token := c.Request().Header.Get("Authorization")
126
+ if token == "" {
127
+ return echo.NewHTTPError(401, "Unauthorized")
128
+ }
129
+
130
+ user, err := validateToken(token)
131
+ if err != nil {
132
+ return echo.NewHTTPError(401, "Invalid token")
133
+ }
134
+
135
+ c.Set("user", user)
136
+ return next(c)
137
+ }
138
+ }
139
+
140
+ // Apply middleware to group
141
+ api := e.Group("/api", authMiddleware)
142
+ ```
143
+
144
+ ## Error Handling
145
+
146
+ ```go
147
+ // Custom HTTP error handler
148
+ e.HTTPErrorHandler = func(err error, c echo.Context) {
149
+ code := 500
150
+ message := "Internal Server Error"
151
+
152
+ if he, ok := err.(*echo.HTTPError); ok {
153
+ code = he.Code
154
+ message = he.Message.(string)
155
+ }
156
+
157
+ c.JSON(code, map[string]string{
158
+ "error": message,
159
+ })
160
+ }
161
+
162
+ // In handlers
163
+ func handler(c echo.Context) error {
164
+ if notFound {
165
+ return echo.NewHTTPError(404, "Resource not found")
166
+ }
167
+ return c.JSON(200, data)
168
+ }
169
+ ```
170
+
171
+ ## Response Types
172
+
173
+ ```go
174
+ // JSON
175
+ c.JSON(200, user)
176
+
177
+ // String
178
+ c.String(200, "Hello, World!")
179
+
180
+ // HTML
181
+ c.HTML(200, "<h1>Hello</h1>")
182
+
183
+ // File
184
+ c.File("path/to/file.pdf")
185
+
186
+ // Stream
187
+ c.Stream(200, "text/csv", reader)
188
+
189
+ // Redirect
190
+ c.Redirect(301, "/new-location")
191
+
192
+ // No Content
193
+ c.NoContent(204)
194
+ ```
195
+
196
+ ## Context Values
197
+
198
+ ```go
199
+ // Set value
200
+ c.Set("user", user)
201
+
202
+ // Get value
203
+ user := c.Get("user").(*User)
204
+
205
+ // Request context
206
+ ctx := c.Request().Context()
207
+ ```
208
+
209
+ ## Best Practices
210
+
211
+ 1. **Validation**: Always validate input with custom validator
212
+ 2. **Error handling**: Use `echo.NewHTTPError` for HTTP errors
213
+ 3. **Context**: Don't store echo.Context outside request lifecycle
214
+ 4. **Middleware order**: Logger first, then Recover, then custom
215
+ 5. **Graceful shutdown**: Use `e.Shutdown(ctx)` for graceful shutdown
@@ -0,0 +1,14 @@
1
+ # Echo Framework References
2
+
3
+ ## References
4
+
5
+ - [**Routing Patterns**](routing-patterns.md) - Routes, groups, path parameters
6
+ - [**Middleware**](middleware-patterns.md) - Built-in and custom middleware
7
+
8
+ ## Quick Checks
9
+
10
+ - [ ] Use route groups for versioning
11
+ - [ ] Apply middleware at appropriate levels
12
+ - [ ] Custom context for request-scoped data
13
+ - [ ] Structured error handling with HTTPError
14
+ - [ ] Graceful shutdown handling
@@ -0,0 +1,141 @@
1
+ # Echo Middleware Patterns
2
+
3
+ ## Built-in Middleware
4
+
5
+ ```go
6
+ import (
7
+ "github.com/labstack/echo/v4"
8
+ "github.com/labstack/echo/v4/middleware"
9
+ )
10
+
11
+ func main() {
12
+ e := echo.New()
13
+
14
+ // Logger
15
+ e.Use(middleware.Logger())
16
+
17
+ // Recover from panics
18
+ e.Use(middleware.Recover())
19
+
20
+ // CORS
21
+ e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
22
+ AllowOrigins: []string{"https://example.com"},
23
+ AllowMethods: []string{http.MethodGet, http.MethodPost},
24
+ }))
25
+
26
+ // Request ID
27
+ e.Use(middleware.RequestID())
28
+
29
+ // Rate limiter
30
+ e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20)))
31
+
32
+ // Gzip compression
33
+ e.Use(middleware.Gzip())
34
+ }
35
+ ```
36
+
37
+ ## Custom Middleware
38
+
39
+ ```go
40
+ // Timing middleware
41
+ func TimingMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
42
+ return func(c echo.Context) error {
43
+ start := time.Now()
44
+
45
+ err := next(c)
46
+
47
+ duration := time.Since(start)
48
+ c.Response().Header().Set("X-Response-Time", duration.String())
49
+
50
+ return err
51
+ }
52
+ }
53
+
54
+ // Auth middleware
55
+ func AuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
56
+ return func(c echo.Context) error {
57
+ token := c.Request().Header.Get("Authorization")
58
+ if token == "" {
59
+ return echo.NewHTTPError(http.StatusUnauthorized, "missing token")
60
+ }
61
+
62
+ // Validate token
63
+ claims, err := validateToken(token)
64
+ if err != nil {
65
+ return echo.NewHTTPError(http.StatusUnauthorized, "invalid token")
66
+ }
67
+
68
+ // Store in context
69
+ c.Set("user", claims.UserID)
70
+
71
+ return next(c)
72
+ }
73
+ }
74
+
75
+ // Usage
76
+ e.GET("/protected", handler, AuthMiddleware)
77
+ ```
78
+
79
+ ## Middleware with Config
80
+
81
+ ```go
82
+ type AuthConfig struct {
83
+ Skipper middleware.Skipper
84
+ TokenLookup string
85
+ AuthScheme string
86
+ }
87
+
88
+ func AuthWithConfig(config AuthConfig) echo.MiddlewareFunc {
89
+ return func(next echo.HandlerFunc) echo.HandlerFunc {
90
+ return func(c echo.Context) error {
91
+ if config.Skipper != nil && config.Skipper(c) {
92
+ return next(c)
93
+ }
94
+
95
+ // Auth logic using config...
96
+
97
+ return next(c)
98
+ }
99
+ }
100
+ }
101
+
102
+ // Skip auth for certain paths
103
+ e.Use(AuthWithConfig(AuthConfig{
104
+ Skipper: func(c echo.Context) bool {
105
+ return c.Path() == "/health" || c.Path() == "/login"
106
+ },
107
+ }))
108
+ ```
109
+
110
+ ## JWT Authentication
111
+
112
+ ```go
113
+ import "github.com/labstack/echo-jwt/v4"
114
+
115
+ func main() {
116
+ e := echo.New()
117
+
118
+ // JWT middleware
119
+ config := echojwt.Config{
120
+ SigningKey: []byte("secret"),
121
+ NewClaimsFunc: func(c echo.Context) jwt.Claims {
122
+ return new(JwtCustomClaims)
123
+ },
124
+ }
125
+
126
+ r := e.Group("/api")
127
+ r.Use(echojwt.WithConfig(config))
128
+
129
+ r.GET("/users", func(c echo.Context) error {
130
+ token := c.Get("user").(*jwt.Token)
131
+ claims := token.Claims.(*JwtCustomClaims)
132
+ return c.JSON(http.StatusOK, claims)
133
+ })
134
+ }
135
+
136
+ type JwtCustomClaims struct {
137
+ UserID string `json:"user_id"`
138
+ Role string `json:"role"`
139
+ jwt.RegisteredClaims
140
+ }
141
+ ```
@@ -0,0 +1,140 @@
1
+ # Echo Routing Patterns
2
+
3
+ ## Basic Routing
4
+
5
+ ```go
6
+ import (
7
+ "net/http"
8
+ "github.com/labstack/echo/v4"
9
+ )
10
+
11
+ func main() {
12
+ e := echo.New()
13
+
14
+ // Basic routes
15
+ e.GET("/users", listUsers)
16
+ e.POST("/users", createUser)
17
+ e.GET("/users/:id", getUser)
18
+ e.PUT("/users/:id", updateUser)
19
+ e.DELETE("/users/:id", deleteUser)
20
+
21
+ e.Logger.Fatal(e.Start(":8080"))
22
+ }
23
+
24
+ // Handler with path parameter
25
+ func getUser(c echo.Context) error {
26
+ id := c.Param("id")
27
+ return c.JSON(http.StatusOK, map[string]string{"id": id})
28
+ }
29
+
30
+ // Query parameters
31
+ func listUsers(c echo.Context) error {
32
+ page := c.QueryParam("page")
33
+ limit := c.QueryParam("limit")
34
+ return c.JSON(http.StatusOK, map[string]string{
35
+ "page": page,
36
+ "limit": limit,
37
+ })
38
+ }
39
+ ```
40
+
41
+ ## Route Groups
42
+
43
+ ```go
44
+ func main() {
45
+ e := echo.New()
46
+
47
+ // API versioning
48
+ v1 := e.Group("/api/v1")
49
+ {
50
+ v1.GET("/users", listUsersV1)
51
+ v1.POST("/users", createUserV1)
52
+ }
53
+
54
+ v2 := e.Group("/api/v2")
55
+ {
56
+ v2.GET("/users", listUsersV2)
57
+ }
58
+
59
+ // Group with middleware
60
+ admin := e.Group("/admin", middleware.BasicAuth(validateAdmin))
61
+ {
62
+ admin.GET("/stats", getStats)
63
+ admin.POST("/config", updateConfig)
64
+ }
65
+ }
66
+ ```
67
+
68
+ ## Request Binding
69
+
70
+ ```go
71
+ type CreateUserRequest struct {
72
+ Name string `json:"name" validate:"required"`
73
+ Email string `json:"email" validate:"required,email"`
74
+ Age int `json:"age" validate:"gte=0,lte=130"`
75
+ }
76
+
77
+ func createUser(c echo.Context) error {
78
+ req := new(CreateUserRequest)
79
+ if err := c.Bind(req); err != nil {
80
+ return echo.NewHTTPError(http.StatusBadRequest, err.Error())
81
+ }
82
+
83
+ // Validate
84
+ if err := c.Validate(req); err != nil {
85
+ return err
86
+ }
87
+
88
+ // Process...
89
+ return c.JSON(http.StatusCreated, req)
90
+ }
91
+
92
+ // Setup validator
93
+ func main() {
94
+ e := echo.New()
95
+ e.Validator = &CustomValidator{validator: validator.New()}
96
+ }
97
+
98
+ type CustomValidator struct {
99
+ validator *validator.Validate
100
+ }
101
+
102
+ func (cv *CustomValidator) Validate(i interface{}) error {
103
+ if err := cv.validator.Struct(i); err != nil {
104
+ return echo.NewHTTPError(http.StatusBadRequest, err.Error())
105
+ }
106
+ return nil
107
+ }
108
+ ```
109
+
110
+ ## Error Handling
111
+
112
+ ```go
113
+ // Custom HTTP error handler
114
+ e.HTTPErrorHandler = func(err error, c echo.Context) {
115
+ code := http.StatusInternalServerError
116
+ message := "Internal Server Error"
117
+
118
+ if he, ok := err.(*echo.HTTPError); ok {
119
+ code = he.Code
120
+ message = he.Message.(string)
121
+ }
122
+
123
+ c.JSON(code, map[string]string{
124
+ "error": message,
125
+ })
126
+ }
127
+
128
+ // In handlers
129
+ func getUser(c echo.Context) error {
130
+ id := c.Param("id")
131
+ user, err := userService.FindByID(id)
132
+ if err != nil {
133
+ if errors.Is(err, ErrNotFound) {
134
+ return echo.NewHTTPError(http.StatusNotFound, "user not found")
135
+ }
136
+ return echo.NewHTTPError(http.StatusInternalServerError, err.Error())
137
+ }
138
+ return c.JSON(http.StatusOK, user)
139
+ }
140
+ ```