@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,160 @@
1
+ # Next.js Fetch Patterns
2
+
3
+ ## Basic Fetching
4
+
5
+ ```tsx
6
+ // Server Component - direct fetch
7
+ async function UserProfile({ id }: { id: string }) {
8
+ const user = await fetch(`https://api.example.com/users/${id}`);
9
+ const data = await user.json();
10
+ return <div>{data.name}</div>;
11
+ }
12
+
13
+ // With error handling
14
+ async function getData() {
15
+ const res = await fetch('https://api.example.com/data');
16
+ if (!res.ok) {
17
+ throw new Error('Failed to fetch');
18
+ }
19
+ return res.json();
20
+ }
21
+ ```
22
+
23
+ ## Caching & Revalidation
24
+
25
+ ```tsx
26
+ // Cache forever (default)
27
+ fetch('https://api.example.com/data');
28
+
29
+ // No cache
30
+ fetch('https://api.example.com/data', { cache: 'no-store' });
31
+
32
+ // Revalidate after 60 seconds
33
+ fetch('https://api.example.com/data', { next: { revalidate: 60 } });
34
+
35
+ // Revalidate on demand with tags
36
+ fetch('https://api.example.com/posts', { next: { tags: ['posts'] } });
37
+
38
+ // Trigger revalidation (Server Action or Route Handler)
39
+ import { revalidateTag, revalidatePath } from 'next/cache';
40
+ revalidateTag('posts');
41
+ revalidatePath('/blog');
42
+ ```
43
+
44
+ ## Page-Level Caching
45
+
46
+ ```tsx
47
+ // Force dynamic rendering
48
+ export const dynamic = 'force-dynamic';
49
+
50
+ // Force static rendering
51
+ export const dynamic = 'force-static';
52
+
53
+ // Revalidate every 60 seconds
54
+ export const revalidate = 60;
55
+
56
+ // Disable caching
57
+ export const revalidate = 0;
58
+ ```
59
+
60
+ ## Parallel Fetching
61
+
62
+ ```tsx
63
+ // ✅ Good - parallel fetches
64
+ async function Dashboard() {
65
+ const [user, posts, analytics] = await Promise.all([
66
+ getUser(),
67
+ getPosts(),
68
+ getAnalytics(),
69
+ ]);
70
+
71
+ return (
72
+ <div>
73
+ <UserCard user={user} />
74
+ <PostsList posts={posts} />
75
+ <Analytics data={analytics} />
76
+ </div>
77
+ );
78
+ }
79
+
80
+ // ❌ Bad - sequential (waterfall)
81
+ async function Dashboard() {
82
+ const user = await getUser();
83
+ const posts = await getPosts();
84
+ const analytics = await getAnalytics();
85
+ // ...
86
+ }
87
+ ```
88
+
89
+ ## Request Deduplication
90
+
91
+ ```tsx
92
+ import { cache } from 'react';
93
+
94
+ // Deduplicated across components in same request
95
+ export const getUser = cache(async (id: string) => {
96
+ const res = await fetch(`https://api.example.com/users/${id}`);
97
+ return res.json();
98
+ });
99
+
100
+ // Multiple components can call getUser(id)
101
+ // Only one request is made
102
+ async function UserName({ id }: { id: string }) {
103
+ const user = await getUser(id);
104
+ return <span>{user.name}</span>;
105
+ }
106
+
107
+ async function UserEmail({ id }: { id: string }) {
108
+ const user = await getUser(id);
109
+ return <span>{user.email}</span>;
110
+ }
111
+ ```
112
+
113
+ ## Database Queries
114
+
115
+ ```tsx
116
+ import { unstable_cache } from 'next/cache';
117
+
118
+ // Cache database queries
119
+ const getCachedUser = unstable_cache(
120
+ async (id: string) => {
121
+ return db.user.findUnique({ where: { id } });
122
+ },
123
+ ['user-cache'],
124
+ { revalidate: 3600, tags: ['users'] }
125
+ );
126
+
127
+ // Usage
128
+ async function UserProfile({ id }: { id: string }) {
129
+ const user = await getCachedUser(id);
130
+ return <Profile user={user} />;
131
+ }
132
+ ```
133
+
134
+ ## Streaming
135
+
136
+ ```tsx
137
+ import { Suspense } from 'react';
138
+
139
+ // Stream slow data
140
+ async function Page() {
141
+ // Fast data renders immediately
142
+ const quickData = await getQuickData();
143
+
144
+ return (
145
+ <div>
146
+ <h1>{quickData.title}</h1>
147
+
148
+ {/* Slow data streams in */}
149
+ <Suspense fallback={<Loading />}>
150
+ <SlowComponent />
151
+ </Suspense>
152
+ </div>
153
+ );
154
+ }
155
+
156
+ async function SlowComponent() {
157
+ const slowData = await getSlowData();
158
+ return <div>{slowData.content}</div>;
159
+ }
160
+ ```
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: Next.js Internationalization (i18n)
3
+ description: Best practices for multi-language handling, locale routing, and detection middleware.
4
+ metadata:
5
+ labels: [nextjs, i18n, middleware, routing]
6
+ triggers:
7
+ files: ['middleware.ts', 'app/[lang]/**', 'messages/*.json']
8
+ keywords: [i18n, locale, translation, next-intl, redirect]
9
+ ---
10
+
11
+ # Internationalization (i18n)
12
+
13
+ ## **Priority: P2 (MEDIUM)**
14
+
15
+ Use Sub-path Routing (`/en`, `/de`) and Server Components for translations.
16
+
17
+ ## Principles
18
+
19
+ 1. **Sub-path Routing**: Use URL segments (e.g., `app/[lang]/page.tsx`) to manage locales.
20
+ - _Why_: SEO friendly, sharable, and cacheable.
21
+ 2. **Server-Side Translation**: Load dictionary files (`en.json`) in Server Components.
22
+ - _Why_: Reduces client bundle size. No huge JSON blobs sent to browser.
23
+ 3. **Middleware Detection**: Use `middleware.ts` to detect `Accept-Language` headers and redirect users to their preferred locale.
24
+ 4. **Type Safety**: Use robust typing for translation keys to prevent broken text UI.
25
+
26
+ ## Implementation Pattern
27
+
28
+ ### 1. Directory Structure
29
+
30
+ ```text
31
+ app/
32
+ ├── [lang]/ # Dynamic Locale Segment
33
+ │ ├── layout.tsx # <html lang={params.lang}>
34
+ │ └── page.tsx
35
+ └── api/
36
+ messages/ # Translation Dictionaries
37
+ ├── en.json
38
+ └── es.json
39
+ middleware.ts # Locale Redirection
40
+ ```
41
+
42
+ ### 2. Middleware (`middleware.ts`)
43
+
44
+ Redirect root traffic (`/`) to localized traffic (`/en`).
45
+
46
+ ```typescript
47
+ import { NextResponse } from 'next/server';
48
+ import type { NextRequest } from 'next/server';
49
+ import { match } from '@formatjs/intl-localematcher';
50
+ import Negotiator from 'negotiator';
51
+
52
+ const LOCALES = ['en', 'es', 'fr'];
53
+ const DEFAULT = 'en';
54
+
55
+ export function middleware(request: NextRequest) {
56
+ const { pathname } = request.nextUrl;
57
+
58
+ // 1. Check if path already has locale
59
+ const pathnameHasLocale = LOCALES.some(
60
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`,
61
+ );
62
+ if (pathnameHasLocale) return;
63
+
64
+ // 2. Detect locale (Header matching)
65
+ const headers = {
66
+ 'accept-language': request.headers.get('accept-language') || '',
67
+ };
68
+ const languages = new Negotiator({ headers }).languages();
69
+ const locale = match(languages, LOCALES, DEFAULT);
70
+
71
+ // 3. Redirect
72
+ request.nextUrl.pathname = `/${locale}${pathname}`;
73
+ return NextResponse.redirect(request.nextUrl);
74
+ }
75
+
76
+ export const config = {
77
+ matcher: ['/((?!_next|api|static|favicon.ico).*)'],
78
+ };
79
+ ```
80
+
81
+ ### 3. Server Component Usage
82
+
83
+ ```typescript
84
+ // app/[lang]/page.tsx
85
+
86
+ // 1. Dynamic Params ensure static generation works for each language
87
+ export async function generateStaticParams() {
88
+ return [{ lang: 'en' }, { lang: 'es' }];
89
+ }
90
+
91
+ export default async function Page({ params: { lang } }) {
92
+ // 2. Load Dictionary On Demand
93
+ const dict = await getDictionary(lang);
94
+
95
+ return <h1>{dict.home.title}</h1>;
96
+ }
97
+ ```
98
+
99
+ ## Redirect Handling Strategy
100
+
101
+ When handling redirects (Authentication, Legacy URLs) in an i18n app:
102
+
103
+ - **Always preserve locale**: Use `redirect(`/${lang}/login`)` instead of just `/login`.
104
+ - **Server Actions**: Return `redirect(...)` from actions.
105
+ - **Next Config**: Use `next.config.js` for legacy SEO 301s (e.g., old-site `/about-us` -> `/en/about`).
@@ -0,0 +1,13 @@
1
+ # Next.js Internationalization References
2
+
3
+ ## References
4
+
5
+ - [**i18n Patterns**](i18n-patterns.md) - Routing, translations, locale detection
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Configure supported locales in next.config
10
+ - [ ] Use dynamic route segments for locale
11
+ - [ ] Implement locale detection middleware
12
+ - [ ] Load translations efficiently
13
+ - [ ] Handle RTL languages properly
@@ -0,0 +1,180 @@
1
+ # Next.js Internationalization Patterns
2
+
3
+ ## App Router i18n Setup
4
+
5
+ ```typescript
6
+ // middleware.ts
7
+ import { NextRequest, NextResponse } from 'next/server';
8
+ import Negotiator from 'negotiator';
9
+ import { match } from '@formatjs/intl-localematcher';
10
+
11
+ const locales = ['en', 'vi', 'ja'];
12
+ const defaultLocale = 'en';
13
+
14
+ function getLocale(request: NextRequest): string {
15
+ const headers = { 'accept-language': request.headers.get('accept-language') || '' };
16
+ const languages = new Negotiator({ headers }).languages();
17
+ return match(languages, locales, defaultLocale);
18
+ }
19
+
20
+ export function middleware(request: NextRequest) {
21
+ const { pathname } = request.nextUrl;
22
+
23
+ // Check if locale is in pathname
24
+ const pathnameHasLocale = locales.some(
25
+ (locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`
26
+ );
27
+
28
+ if (pathnameHasLocale) return;
29
+
30
+ // Redirect to locale path
31
+ const locale = getLocale(request);
32
+ request.nextUrl.pathname = `/${locale}${pathname}`;
33
+ return NextResponse.redirect(request.nextUrl);
34
+ }
35
+
36
+ export const config = {
37
+ matcher: ['/((?!api|_next/static|_next/image|favicon.ico).*)'],
38
+ };
39
+ ```
40
+
41
+ ## Directory Structure
42
+
43
+ ```
44
+ app/
45
+ ├── [locale]/
46
+ │ ├── layout.tsx
47
+ │ ├── page.tsx
48
+ │ └── about/
49
+ │ └── page.tsx
50
+ └── dictionaries/
51
+ ├── en.json
52
+ ├── vi.json
53
+ └── ja.json
54
+ ```
55
+
56
+ ## Dictionary Loading
57
+
58
+ ```typescript
59
+ // dictionaries.ts
60
+ const dictionaries = {
61
+ en: () => import('./dictionaries/en.json').then((m) => m.default),
62
+ vi: () => import('./dictionaries/vi.json').then((m) => m.default),
63
+ ja: () => import('./dictionaries/ja.json').then((m) => m.default),
64
+ };
65
+
66
+ export const getDictionary = async (locale: string) => {
67
+ return dictionaries[locale]?.() ?? dictionaries.en();
68
+ };
69
+
70
+ // app/[locale]/page.tsx
71
+ export default async function Page({ params: { locale } }) {
72
+ const dict = await getDictionary(locale);
73
+
74
+ return (
75
+ <main>
76
+ <h1>{dict.home.title}</h1>
77
+ <p>{dict.home.description}</p>
78
+ </main>
79
+ );
80
+ }
81
+ ```
82
+
83
+ ## Dictionary File
84
+
85
+ ```json
86
+ // dictionaries/en.json
87
+ {
88
+ "home": {
89
+ "title": "Welcome",
90
+ "description": "This is the home page"
91
+ },
92
+ "nav": {
93
+ "about": "About",
94
+ "contact": "Contact"
95
+ },
96
+ "common": {
97
+ "loading": "Loading...",
98
+ "error": "Something went wrong"
99
+ }
100
+ }
101
+ ```
102
+
103
+ ## Layout with Locale
104
+
105
+ ```typescript
106
+ // app/[locale]/layout.tsx
107
+ import { getDictionary } from '../dictionaries';
108
+
109
+ export async function generateStaticParams() {
110
+ return [{ locale: 'en' }, { locale: 'vi' }, { locale: 'ja' }];
111
+ }
112
+
113
+ export default async function LocaleLayout({
114
+ children,
115
+ params: { locale },
116
+ }: {
117
+ children: React.ReactNode;
118
+ params: { locale: string };
119
+ }) {
120
+ const dict = await getDictionary(locale);
121
+
122
+ return (
123
+ <html lang={locale} dir={locale === 'ar' ? 'rtl' : 'ltr'}>
124
+ <body>
125
+ <nav>
126
+ <a href={`/${locale}`}>{dict.nav.home}</a>
127
+ <a href={`/${locale}/about`}>{dict.nav.about}</a>
128
+ <LocaleSwitcher locale={locale} />
129
+ </nav>
130
+ {children}
131
+ </body>
132
+ </html>
133
+ );
134
+ }
135
+ ```
136
+
137
+ ## Locale Switcher
138
+
139
+ ```typescript
140
+ 'use client';
141
+
142
+ import { usePathname, useRouter } from 'next/navigation';
143
+
144
+ export function LocaleSwitcher({ locale }: { locale: string }) {
145
+ const pathname = usePathname();
146
+ const router = useRouter();
147
+
148
+ const switchLocale = (newLocale: string) => {
149
+ const newPath = pathname.replace(`/${locale}`, `/${newLocale}`);
150
+ router.push(newPath);
151
+ };
152
+
153
+ return (
154
+ <select value={locale} onChange={(e) => switchLocale(e.target.value)}>
155
+ <option value="en">English</option>
156
+ <option value="vi">Tiếng Việt</option>
157
+ <option value="ja">日本語</option>
158
+ </select>
159
+ );
160
+ }
161
+ ```
162
+
163
+ ## next-intl Integration
164
+
165
+ ```typescript
166
+ // For more advanced i18n, use next-intl
167
+ import { useTranslations } from 'next-intl';
168
+
169
+ export default function HomePage() {
170
+ const t = useTranslations('home');
171
+
172
+ return (
173
+ <div>
174
+ <h1>{t('title')}</h1>
175
+ <p>{t('greeting', { name: 'World' })}</p>
176
+ <p>{t('items', { count: 5 })}</p>
177
+ </div>
178
+ );
179
+ }
180
+ ```
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: Next.js Optimization
3
+ description: Image, Font, Script, and Metadata optimization strategies.
4
+ metadata:
5
+ labels: [nextjs, optimization, seo, performance]
6
+ triggers:
7
+ files: ['**/layout.tsx', '**/page.tsx']
8
+ keywords: [next/image, next/font, metadata, generateMetadata]
9
+ ---
10
+
11
+ # Optimization
12
+
13
+ ## **Priority: P1 (HIGH)**
14
+
15
+ Core optimization primitives provided by Next.js. **Monitor First, Optimize Later.**
16
+
17
+ ## Monitoring (Core Web Vitals)
18
+
19
+ Before applying optimizations, identify bottlenecks using:
20
+
21
+ - **LCP (Largest Contentful Paint)**: Initial load speed. Target < 2.5s.
22
+ - **CLS (Cumulative Layout Shift)**: Visual stability. Target < 0.1.
23
+ - **INP (Interaction to Next Paint)**: Responsiveness. Target < 200ms.
24
+ - **Tools**: Chrome DevTools "Performance" tab, `next/speed-insights`, or `React Profiler`.
25
+
26
+ ## Images (`next/image`)
27
+
28
+ - **Component**: `<Image src="..." alt="..." width={500} height={300} />`.
29
+ - **Features**: Automatic resizing, lazy loading, format conversion (WebP/AVIF), and CLS prevention (placeholder sizing).
30
+ - **Remote**: Must configure `images.remotePatterns` in `next.config.js` for external URLs.
31
+
32
+ ## Fonts (`next/font`)
33
+
34
+ - **Local**: `localFont({ src: ... })`.
35
+ - **Google**: `Inter({ subsets: ['latin'] })`.
36
+ - **Why**: Self-hosts fonts at build time. Zero Layout Shift.
37
+
38
+ ## Metadata (SEO)
39
+
40
+ - **Static**: Export `metadata` object from `layout.tsx` or `page.tsx`.
41
+
42
+ ```tsx
43
+ export const metadata: Metadata = {
44
+ title: 'Dashboard',
45
+ description: '...',
46
+ };
47
+ ```
48
+
49
+ - **Dynamic**: Export `generateMetadata({ params })` function.
50
+
51
+ ```tsx
52
+ export async function generateMetadata({ params }) {
53
+ const product = await getProduct(params.id);
54
+ return { title: product.name };
55
+ }
56
+ ```
57
+
58
+ - **Open Graph**: Use `openGraph` key for social cards.
59
+
60
+ ## Scripts (`next/script`)
61
+
62
+ - **Loading Strategy**: Control when 3rd party scripts load.
63
+ - `strategy="afterInteractive"` (Default): Google Analytics.
64
+ - `strategy="lazyOnload"`: Chat widgets, low priority.
@@ -0,0 +1,13 @@
1
+ # Next.js Optimization References
2
+
3
+ ## References
4
+
5
+ - [**Optimization Patterns**](optimization-patterns.md) - Images, fonts, scripts, bundle
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Use next/image for automatic optimization
10
+ - [ ] Use next/font for font optimization
11
+ - [ ] Use next/script for third-party scripts
12
+ - [ ] Implement code splitting
13
+ - [ ] Analyze bundle with @next/bundle-analyzer