@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,231 @@
1
+ ---
2
+ name: Go gRPC
3
+ description: High-performance RPC framework with Protocol Buffers.
4
+ metadata:
5
+ labels: [golang, grpc, protobuf, rpc]
6
+ triggers:
7
+ files: ['**/*.proto', '**/*_grpc.pb.go']
8
+ keywords: [grpc, proto, RegisterServer, NewClient]
9
+ ---
10
+
11
+ # Go gRPC Standards
12
+
13
+ ## Proto Definition
14
+
15
+ ```protobuf
16
+ // proto/user.proto
17
+ syntax = "proto3";
18
+ package user;
19
+ option go_package = "myapp/gen/user";
20
+
21
+ service UserService {
22
+ rpc GetUser (GetUserRequest) returns (User);
23
+ rpc ListUsers (ListUsersRequest) returns (stream User);
24
+ rpc CreateUsers (stream CreateUserRequest) returns (CreateUsersResponse);
25
+ rpc Chat (stream Message) returns (stream Message);
26
+ }
27
+
28
+ message User {
29
+ int64 id = 1;
30
+ string name = 2;
31
+ string email = 3;
32
+ }
33
+
34
+ message GetUserRequest {
35
+ int64 id = 1;
36
+ }
37
+
38
+ message ListUsersRequest {
39
+ int32 page_size = 1;
40
+ string page_token = 2;
41
+ }
42
+ ```
43
+
44
+ ## Code Generation
45
+
46
+ ```bash
47
+ # Install
48
+ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
49
+ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
50
+
51
+ # Generate
52
+ protoc --go_out=. --go-grpc_out=. proto/user.proto
53
+ ```
54
+
55
+ ## Server Implementation
56
+
57
+ ```go
58
+ type userServer struct {
59
+ pb.UnimplementedUserServiceServer
60
+ db *sql.DB
61
+ }
62
+
63
+ func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
64
+ user, err := s.db.FindUser(ctx, req.Id)
65
+ if err != nil {
66
+ return nil, status.Errorf(codes.NotFound, "user not found: %v", err)
67
+ }
68
+ return &pb.User{
69
+ Id: user.ID,
70
+ Name: user.Name,
71
+ Email: user.Email,
72
+ }, nil
73
+ }
74
+
75
+ func main() {
76
+ lis, _ := net.Listen("tcp", ":50051")
77
+ s := grpc.NewServer()
78
+ pb.RegisterUserServiceServer(s, &userServer{db: db})
79
+ s.Serve(lis)
80
+ }
81
+ ```
82
+
83
+ ## Client
84
+
85
+ ```go
86
+ func main() {
87
+ conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
88
+ if err != nil {
89
+ log.Fatal(err)
90
+ }
91
+ defer conn.Close()
92
+
93
+ client := pb.NewUserServiceClient(conn)
94
+
95
+ ctx, cancel := context.WithTimeout(context.Background(), time.Second)
96
+ defer cancel()
97
+
98
+ user, err := client.GetUser(ctx, &pb.GetUserRequest{Id: 1})
99
+ if err != nil {
100
+ log.Fatal(err)
101
+ }
102
+ fmt.Printf("User: %v\n", user)
103
+ }
104
+ ```
105
+
106
+ ## Streaming
107
+
108
+ ```go
109
+ // Server streaming
110
+ func (s *userServer) ListUsers(req *pb.ListUsersRequest, stream pb.UserService_ListUsersServer) error {
111
+ users, _ := s.db.ListUsers(req.PageSize)
112
+ for _, user := range users {
113
+ if err := stream.Send(user); err != nil {
114
+ return err
115
+ }
116
+ }
117
+ return nil
118
+ }
119
+
120
+ // Client streaming
121
+ func (s *userServer) CreateUsers(stream pb.UserService_CreateUsersServer) error {
122
+ var count int32
123
+ for {
124
+ req, err := stream.Recv()
125
+ if err == io.EOF {
126
+ return stream.SendAndClose(&pb.CreateUsersResponse{Count: count})
127
+ }
128
+ if err != nil {
129
+ return err
130
+ }
131
+ s.db.CreateUser(req)
132
+ count++
133
+ }
134
+ }
135
+
136
+ // Bidirectional streaming
137
+ func (s *userServer) Chat(stream pb.UserService_ChatServer) error {
138
+ for {
139
+ msg, err := stream.Recv()
140
+ if err == io.EOF {
141
+ return nil
142
+ }
143
+ if err != nil {
144
+ return err
145
+ }
146
+ reply := &pb.Message{Text: "Echo: " + msg.Text}
147
+ if err := stream.Send(reply); err != nil {
148
+ return err
149
+ }
150
+ }
151
+ }
152
+ ```
153
+
154
+ ## Interceptors
155
+
156
+ ```go
157
+ // Unary interceptor
158
+ func loggingInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
159
+ start := time.Now()
160
+ resp, err := handler(ctx, req)
161
+ log.Printf("Method: %s, Duration: %s, Error: %v", info.FullMethod, time.Since(start), err)
162
+ return resp, err
163
+ }
164
+
165
+ // Auth interceptor
166
+ func authInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
167
+ md, ok := metadata.FromIncomingContext(ctx)
168
+ if !ok {
169
+ return nil, status.Error(codes.Unauthenticated, "no metadata")
170
+ }
171
+ tokens := md.Get("authorization")
172
+ if len(tokens) == 0 {
173
+ return nil, status.Error(codes.Unauthenticated, "no token")
174
+ }
175
+ // Validate token...
176
+ return handler(ctx, req)
177
+ }
178
+
179
+ // Apply interceptors
180
+ s := grpc.NewServer(
181
+ grpc.ChainUnaryInterceptor(loggingInterceptor, authInterceptor),
182
+ grpc.ChainStreamInterceptor(streamLoggingInterceptor),
183
+ )
184
+ ```
185
+
186
+ ## Error Handling
187
+
188
+ ```go
189
+ import (
190
+ "google.golang.org/grpc/codes"
191
+ "google.golang.org/grpc/status"
192
+ )
193
+
194
+ func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
195
+ if req.Id <= 0 {
196
+ return nil, status.Error(codes.InvalidArgument, "invalid user id")
197
+ }
198
+
199
+ user, err := s.db.FindUser(ctx, req.Id)
200
+ if err == sql.ErrNoRows {
201
+ return nil, status.Error(codes.NotFound, "user not found")
202
+ }
203
+ if err != nil {
204
+ return nil, status.Error(codes.Internal, "database error")
205
+ }
206
+
207
+ return user, nil
208
+ }
209
+
210
+ // Client error handling
211
+ user, err := client.GetUser(ctx, req)
212
+ if err != nil {
213
+ st, ok := status.FromError(err)
214
+ if ok {
215
+ switch st.Code() {
216
+ case codes.NotFound:
217
+ // Handle not found
218
+ case codes.InvalidArgument:
219
+ // Handle invalid input
220
+ }
221
+ }
222
+ }
223
+ ```
224
+
225
+ ## Best Practices
226
+
227
+ 1. **Proto first**: Design API in proto files
228
+ 2. **Deadlines**: Always set context timeouts
229
+ 3. **Errors**: Use gRPC status codes correctly
230
+ 4. **Streaming**: For large data or real-time
231
+ 5. **Interceptors**: Logging, auth, metrics
@@ -0,0 +1,13 @@
1
+ # gRPC References
2
+
3
+ ## References
4
+
5
+ - [**Service Patterns**](service-patterns.md) - Proto definitions, server/client impl
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Define services in .proto files
10
+ - [ ] Generate code with protoc
11
+ - [ ] Implement server handlers
12
+ - [ ] Use streaming for large data
13
+ - [ ] Proper error handling with status codes
@@ -0,0 +1,276 @@
1
+ # gRPC Service Patterns
2
+
3
+ ## Proto Definition
4
+
5
+ ```protobuf
6
+ // user.proto
7
+ syntax = "proto3";
8
+
9
+ package user;
10
+
11
+ option go_package = "github.com/example/myapp/proto/user";
12
+
13
+ service UserService {
14
+ // Unary RPC
15
+ rpc GetUser(GetUserRequest) returns (User);
16
+ rpc CreateUser(CreateUserRequest) returns (User);
17
+
18
+ // Server streaming
19
+ rpc ListUsers(ListUsersRequest) returns (stream User);
20
+
21
+ // Client streaming
22
+ rpc UploadUsers(stream User) returns (UploadResponse);
23
+
24
+ // Bidirectional streaming
25
+ rpc Chat(stream ChatMessage) returns (stream ChatMessage);
26
+ }
27
+
28
+ message User {
29
+ string id = 1;
30
+ string name = 2;
31
+ string email = 3;
32
+ int32 age = 4;
33
+ }
34
+
35
+ message GetUserRequest {
36
+ string id = 1;
37
+ }
38
+
39
+ message CreateUserRequest {
40
+ string name = 1;
41
+ string email = 2;
42
+ int32 age = 3;
43
+ }
44
+
45
+ message ListUsersRequest {
46
+ int32 page_size = 1;
47
+ string page_token = 2;
48
+ }
49
+
50
+ message UploadResponse {
51
+ int32 count = 1;
52
+ }
53
+
54
+ message ChatMessage {
55
+ string user_id = 1;
56
+ string content = 2;
57
+ }
58
+ ```
59
+
60
+ ## Server Implementation
61
+
62
+ ```go
63
+ import (
64
+ "context"
65
+ "net"
66
+ "google.golang.org/grpc"
67
+ "google.golang.org/grpc/codes"
68
+ "google.golang.org/grpc/status"
69
+ pb "github.com/example/myapp/proto/user"
70
+ )
71
+
72
+ type userServer struct {
73
+ pb.UnimplementedUserServiceServer
74
+ db *Database
75
+ }
76
+
77
+ // Unary RPC
78
+ func (s *userServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
79
+ user, err := s.db.FindUser(req.Id)
80
+ if err != nil {
81
+ return nil, status.Errorf(codes.NotFound, "user not found: %v", err)
82
+ }
83
+
84
+ return &pb.User{
85
+ Id: user.ID,
86
+ Name: user.Name,
87
+ Email: user.Email,
88
+ Age: int32(user.Age),
89
+ }, nil
90
+ }
91
+
92
+ func (s *userServer) CreateUser(ctx context.Context, req *pb.CreateUserRequest) (*pb.User, error) {
93
+ if req.Name == "" {
94
+ return nil, status.Error(codes.InvalidArgument, "name is required")
95
+ }
96
+
97
+ user, err := s.db.CreateUser(req.Name, req.Email, int(req.Age))
98
+ if err != nil {
99
+ return nil, status.Errorf(codes.Internal, "failed to create user: %v", err)
100
+ }
101
+
102
+ return &pb.User{
103
+ Id: user.ID,
104
+ Name: user.Name,
105
+ Email: user.Email,
106
+ Age: int32(user.Age),
107
+ }, nil
108
+ }
109
+
110
+ // Server streaming
111
+ func (s *userServer) ListUsers(req *pb.ListUsersRequest, stream pb.UserService_ListUsersServer) error {
112
+ users, err := s.db.ListUsers(int(req.PageSize))
113
+ if err != nil {
114
+ return status.Errorf(codes.Internal, "failed to list users: %v", err)
115
+ }
116
+
117
+ for _, user := range users {
118
+ if err := stream.Send(&pb.User{
119
+ Id: user.ID,
120
+ Name: user.Name,
121
+ Email: user.Email,
122
+ }); err != nil {
123
+ return err
124
+ }
125
+ }
126
+
127
+ return nil
128
+ }
129
+
130
+ // Start server
131
+ func main() {
132
+ lis, err := net.Listen("tcp", ":50051")
133
+ if err != nil {
134
+ log.Fatalf("failed to listen: %v", err)
135
+ }
136
+
137
+ grpcServer := grpc.NewServer()
138
+ pb.RegisterUserServiceServer(grpcServer, &userServer{db: db})
139
+
140
+ log.Println("gRPC server listening on :50051")
141
+ if err := grpcServer.Serve(lis); err != nil {
142
+ log.Fatalf("failed to serve: %v", err)
143
+ }
144
+ }
145
+ ```
146
+
147
+ ## Client Implementation
148
+
149
+ ```go
150
+ import (
151
+ "context"
152
+ "io"
153
+ "google.golang.org/grpc"
154
+ "google.golang.org/grpc/credentials/insecure"
155
+ pb "github.com/example/myapp/proto/user"
156
+ )
157
+
158
+ func main() {
159
+ conn, err := grpc.Dial("localhost:50051",
160
+ grpc.WithTransportCredentials(insecure.NewCredentials()),
161
+ )
162
+ if err != nil {
163
+ log.Fatalf("failed to connect: %v", err)
164
+ }
165
+ defer conn.Close()
166
+
167
+ client := pb.NewUserServiceClient(conn)
168
+
169
+ // Unary call
170
+ ctx := context.Background()
171
+ user, err := client.GetUser(ctx, &pb.GetUserRequest{Id: "123"})
172
+ if err != nil {
173
+ log.Fatalf("GetUser failed: %v", err)
174
+ }
175
+ log.Printf("User: %v", user)
176
+
177
+ // Server streaming
178
+ stream, err := client.ListUsers(ctx, &pb.ListUsersRequest{PageSize: 10})
179
+ if err != nil {
180
+ log.Fatalf("ListUsers failed: %v", err)
181
+ }
182
+
183
+ for {
184
+ user, err := stream.Recv()
185
+ if err == io.EOF {
186
+ break
187
+ }
188
+ if err != nil {
189
+ log.Fatalf("stream error: %v", err)
190
+ }
191
+ log.Printf("User: %v", user)
192
+ }
193
+ }
194
+ ```
195
+
196
+ ## Interceptors (Middleware)
197
+
198
+ ```go
199
+ // Unary interceptor
200
+ func loggingInterceptor(
201
+ ctx context.Context,
202
+ req interface{},
203
+ info *grpc.UnaryServerInfo,
204
+ handler grpc.UnaryHandler,
205
+ ) (interface{}, error) {
206
+ start := time.Now()
207
+
208
+ resp, err := handler(ctx, req)
209
+
210
+ log.Printf("Method: %s, Duration: %v, Error: %v",
211
+ info.FullMethod, time.Since(start), err)
212
+
213
+ return resp, err
214
+ }
215
+
216
+ // Stream interceptor
217
+ func streamLoggingInterceptor(
218
+ srv interface{},
219
+ ss grpc.ServerStream,
220
+ info *grpc.StreamServerInfo,
221
+ handler grpc.StreamHandler,
222
+ ) error {
223
+ log.Printf("Stream started: %s", info.FullMethod)
224
+ err := handler(srv, ss)
225
+ log.Printf("Stream ended: %s, Error: %v", info.FullMethod, err)
226
+ return err
227
+ }
228
+
229
+ // Apply interceptors
230
+ grpcServer := grpc.NewServer(
231
+ grpc.UnaryInterceptor(loggingInterceptor),
232
+ grpc.StreamInterceptor(streamLoggingInterceptor),
233
+ )
234
+ ```
235
+
236
+ ## Error Handling
237
+
238
+ ```go
239
+ import (
240
+ "google.golang.org/grpc/codes"
241
+ "google.golang.org/grpc/status"
242
+ )
243
+
244
+ // Server-side
245
+ func (s *server) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) {
246
+ if req.Id == "" {
247
+ return nil, status.Error(codes.InvalidArgument, "id is required")
248
+ }
249
+
250
+ user, err := s.db.FindUser(req.Id)
251
+ if err == ErrNotFound {
252
+ return nil, status.Errorf(codes.NotFound, "user %s not found", req.Id)
253
+ }
254
+ if err != nil {
255
+ return nil, status.Errorf(codes.Internal, "database error: %v", err)
256
+ }
257
+
258
+ return user, nil
259
+ }
260
+
261
+ // Client-side
262
+ user, err := client.GetUser(ctx, req)
263
+ if err != nil {
264
+ st, ok := status.FromError(err)
265
+ if ok {
266
+ switch st.Code() {
267
+ case codes.NotFound:
268
+ log.Printf("User not found")
269
+ case codes.InvalidArgument:
270
+ log.Printf("Invalid request: %s", st.Message())
271
+ default:
272
+ log.Printf("Error: %v", st.Message())
273
+ }
274
+ }
275
+ }
276
+ ```