@ngxtm/devkit 3.4.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 (343) 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
@@ -0,0 +1,76 @@
1
+ ---
2
+ name: Flutter GetX State Management
3
+ description: Simple and powerful reactive state management using GetX.
4
+ metadata:
5
+ labels: [state-management, getx, controller, reactive]
6
+ triggers:
7
+ files: ['**_controller.dart', '**/bindings/*.dart']
8
+ keywords:
9
+ [GetxController, Obx, GetBuilder, .obs, Get.put, Get.find, Get.lazyPut]
10
+ ---
11
+
12
+ # GetX State Management
13
+
14
+ ## **Priority: P0 (CRITICAL)**
15
+
16
+ Reactive and lightweight state management separating business logic from UI using `GetX`.
17
+
18
+ ## Structure
19
+
20
+ ```text
21
+ lib/app/modules/home/
22
+ ├── controllers/
23
+ │ └── home_controller.dart
24
+ ├── bindings/
25
+ │ └── home_binding.dart
26
+ └── views/
27
+ └── home_view.dart
28
+ ```
29
+
30
+ ## Implementation Guidelines
31
+
32
+ - **Controllers**: Extend `GetxController`. Store logic and state variables here.
33
+ - **Reactivity**:
34
+ - Use `.obs` for observable variables (e.g., `final count = 0.obs;`).
35
+ - Wrap UI in `Obx(() => ...)` to listen for changes.
36
+ - For simple state, use `update()` in controller and `GetBuilder` in UI.
37
+ - **Dependency Injection**:
38
+ - **Bindings**: Use `Bindings` class to decouple DI from UI.
39
+ - **Lazy Load**: Prefer `Get.lazyPut(() => Controller())` in Bindings.
40
+ - **Lifecycle**: Let GetX handle disposal. Avoid `permanent: true`.
41
+ - **Hooks**: Use `onInit()`, `onReady()`, `onClose()` instead of `initState`/`dispose`.
42
+ - **Architecture**: Use `get_cli` for modular MVVM (data, models, modules).
43
+
44
+ ## Anti-Patterns
45
+
46
+ - **Ctx in Logic**: Pass no `BuildContext` to controllers.
47
+ - **Inline DI**: Avoid `Get.put()` in widgets; use Bindings + `Get.find`.
48
+ - **Fat Views**: Keep views pure UI; delegate all logic to controller.
49
+
50
+ ## Code Example
51
+
52
+ ```dart
53
+ class UserController extends GetxController {
54
+ final name = "User".obs;
55
+ void updateName(String val) => name.value = val;
56
+ }
57
+
58
+ class UserView extends GetView<UserController> {
59
+ @override
60
+ Widget build(ctx) => Scaffold(
61
+ body: Obx(() => Text(controller.name.value)),
62
+ floatingActionButton: FloatingActionButton(
63
+ onPressed: () => controller.updateName("New"),
64
+ ),
65
+ );
66
+ }
67
+ ```
68
+
69
+ ## Reference & Examples
70
+
71
+ For DI Bindings and Reactive patterns:
72
+ See [references/binding-example.md](references/binding-example.md) and [references/reactive-vs-simple.md](references/reactive-vs-simple.md).
73
+
74
+ ## Related Topics
75
+
76
+ getx-navigation | feature-based-clean-architecture | dependency-injection
@@ -0,0 +1,32 @@
1
+ # GetX Binding Example
2
+
3
+ Using Bindings ensures that dependencies are only in memory when the associated route is active.
4
+
5
+ ```dart
6
+ // 1. Define the Binding
7
+ class HomeBinding extends Bindings {
8
+ @override
9
+ void dependencies() {
10
+ // lazyPut only initializes the controller when it's first used (Get.find)
11
+ Get.lazyPut<HomeController>(() => HomeController());
12
+ Get.lazyPut<HomeRepository>(() => HomeRepositoryImpl());
13
+ }
14
+ }
15
+
16
+ // 2. Attach to Route
17
+ GetPage(
18
+ name: '/home',
19
+ page: () => HomeView(),
20
+ binding: HomeBinding(),
21
+ )
22
+
23
+ // 3. Use in View via GetView (automatically finds the controller)
24
+ class HomeView extends GetView<HomeController> {
25
+ @override
26
+ Widget build(BuildContext context) {
27
+ return Scaffold(
28
+ body: Obx(() => Text(controller.title.value)),
29
+ );
30
+ }
31
+ }
32
+ ```
@@ -0,0 +1,39 @@
1
+ # Reactive vs. Simple State Management
2
+
3
+ GetX provides two ways to manage state. Choose based on complexity and performance needs.
4
+
5
+ ## 1. Reactive (.obs + Obx)
6
+
7
+ Best for: Highly interactive UIs, streams, and granular updates.
8
+
9
+ ```dart
10
+ class UserController extends GetxController {
11
+ final name = "Guest".obs;
12
+ final age = 18.obs;
13
+
14
+ void updateName(String newName) => name.value = newName;
15
+ }
16
+
17
+ // UI
18
+ Obx(() => Text(controller.name.value));
19
+ ```
20
+
21
+ ### 2. Simple state management
22
+
23
+ Best for: Large objects, low-frequency updates, or reducing memory overhead of many streams.
24
+
25
+ ```dart
26
+ class UserController extends GetxController {
27
+ String name = "Guest";
28
+
29
+ void updateName(String newName) {
30
+ name = newName;
31
+ update(); // Manually notify listeners
32
+ }
33
+ }
34
+
35
+ // UI
36
+ GetBuilder<UserController>(
37
+ builder: (controller) => Text(controller.name),
38
+ );
39
+ ```
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: Flutter GoRouter Navigation
3
+ description: Typed routes, route state, and redirection using go_router.
4
+ metadata:
5
+ labels: [navigation, go-router, routing]
6
+ triggers:
7
+ files: ['**/router.dart', '**/app_router.dart']
8
+ keywords: [GoRouter, GoRoute, StatefulShellRoute, redirection, typed-routes]
9
+ ---
10
+
11
+ # GoRouter Navigation
12
+
13
+ ## **Priority: P0 (CRITICAL)**
14
+
15
+ Type-safe deep linking and routing system using `go_router` and `go_router_builder`.
16
+
17
+ ## Structure
18
+
19
+ ```text
20
+ core/router/
21
+ ├── app_router.dart # Router configuration
22
+ └── routes.dart # Typed route definitions (GoRouteData)
23
+ ```
24
+
25
+ ## Implementation Guidelines
26
+
27
+ - **Typed Routes**: Always use `GoRouteData` from `go_router_builder`. Never use raw path strings.
28
+ - **Root Router**: One global `GoRouter` instance registered in DI.
29
+ - **Sub-Routes**: Nest related routes using `TypedGoRoute` and children lists.
30
+ - **Redirection**: Handle Auth (Login check) in the `redirect` property of the `GoRouter` config.
31
+ - **Parameters**: Use `@TypedGoRoute` to define paths with `:id` parameters.
32
+ - **Transitions**: Define standard transitions (Fade, Slide) in `buildPage`.
33
+ - **Navigation**: Use `MyRoute().go(context)` or `MyRoute().push(context)`.
34
+
35
+ ## Code
36
+
37
+ ```dart
38
+ // Route Definition
39
+ @TypedGoRoute<HomeRoute>(path: '/')
40
+ class HomeRoute extends GoRouteData {
41
+ @override
42
+ Widget build(context, state) => const HomePage();
43
+ }
44
+
45
+ // Router Config
46
+ final router = GoRouter(
47
+ routes: $appRoutes,
48
+ redirect: (context, state) {
49
+ if (notAuthenticated) return '/login';
50
+ return null;
51
+ },
52
+ );
53
+ ```
54
+
55
+ ## Related Topics
56
+
57
+ layer-based-clean-architecture | auto-route-navigation | security
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Idiomatic Flutter
3
+ description: Modern layout and widget composition standards.
4
+ metadata:
5
+ labels: [flutter, clean-code, widgets]
6
+ triggers:
7
+ files: ['lib/presentation/**/*.dart']
8
+ keywords: [context.mounted, SizedBox, Gap, composition, shrink]
9
+ ---
10
+
11
+ # Idiomatic Flutter (P1)
12
+
13
+ - **Async Gaps**: Check `if (context.mounted)` before using `BuildContext` after `await`.
14
+ - **Composition**: Extract complex UI into small widgets. Avoid deep nesting or large helper methods.
15
+ - **Layout**:
16
+ - Spacing: Use `Gap(n)` or `SizedBox` over `Padding` for simple gaps.
17
+ - Empty UI: Use `const SizedBox.shrink()`.
18
+ - Intrinsic: Avoid `IntrinsicWidth/Height`; use `Stack` + `FractionallySizedBox` for overlays.
19
+ - **Optimization**: Use `ColoredBox`/`Padding`/`DecoratedBox` instead of `Container` when possible.
20
+ - **Themes**: Use extensions for `Theme.of(context)` access.
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: Flutter Layer-based Clean Architecture + DDD
3
+ description: Standards for separation of concerns, layer dependency rules, and DDD in Flutter.
4
+ metadata:
5
+ labels: [architecture, clean-architecture, layers, ddd]
6
+ triggers:
7
+ files: ['lib/domain/**', 'lib/infrastructure/**', 'lib/application/**']
8
+ keywords: [domain, infrastructure, application, presentation, layers, dto, mapper]
9
+ ---
10
+
11
+ # Layer-Based Clean Architecture
12
+
13
+ ## **Priority: P0 (CRITICAL)**
14
+
15
+ Standardized separation of concerns and dependency flow using DDD principles.
16
+
17
+ ## Structure
18
+
19
+ ```text
20
+ lib/
21
+ ├── domain/ # Pure Dart: entities (@freezed), failures, repository interfaces
22
+ ├── infrastructure/ # Implementation: DTOs, data sources, mappers, repo impls
23
+ ├── application/ # Orchestration: BLoCs / Cubits
24
+ └── presentation/ # UI: Screens, reusable components
25
+ ```
26
+
27
+ ## Implementation Guidelines
28
+
29
+ - **Dependency Flow**: `Presentation -> Application -> Domain <- Infrastructure`. Dependencies point inward.
30
+ - **Pure Domain**: No Flutter (Material/Store) or Infrastructure (Dio/Hive) dependencies in `Domain`.
31
+ - **Functional Error Handling**: Repositories must return `Either<Failure, Success>`.
32
+ - **Always Map**: Infrastructure must map DTOs to Domain Entities; do not leak DTOs to UI.
33
+ - **Immutability**: Use `@freezed` for all entities and failures.
34
+ - **Logic Placement**: No business logic in UI; widgets only display state and emit events.
35
+ - **Inversion of Control**: Use `get_it` to inject repository implementations into BLoCs.
36
+
37
+ ## Anti-Patterns
38
+
39
+ - **No DTOs in UI**: Never import a `.g.dart` or Data class directly in a Widget.
40
+ - **No Material in Domain**: Do not import `package:flutter/material.dart` in the `domain` layer.
41
+ - **No Shared Prefs in Repo**: Do not use `shared_preferences` directly in a Repository; use a Data Source.
42
+
43
+ ## Reference & Examples
44
+
45
+ For full implementation templates and DTO-to-Domain mapping examples:
46
+ See [references/REFERENCE.md](references/REFERENCE.md).
47
+
48
+ ## Related Topics
49
+
50
+ feature-based-clean-architecture | bloc-state-management | dependency-injection | error-handling
@@ -0,0 +1,60 @@
1
+ # Reference: Layer-based Clean Architecture Examples
2
+
3
+ ## **Full Layer Implementation**
4
+
5
+ ### 1. Domain Layer (Entity)
6
+
7
+ ```dart
8
+ @freezed
9
+ class Bank with _$Bank {
10
+ const factory Bank({
11
+ required String id,
12
+ required String name,
13
+ required String branchCode,
14
+ }) = _Bank;
15
+
16
+ factory Bank.fromJson(Map<String, dynamic> json) => _$BankFromJson(json);
17
+ }
18
+ ```
19
+
20
+ ### 2. Infrastructure Layer (DTO & Mapper)
21
+
22
+ ```dart
23
+ @freezed
24
+ class BankDto with _$BankDto {
25
+ const factory BankDto({
26
+ @JsonKey(name: 'bank_id') required String id,
27
+ @JsonKey(name: 'bank_name') required String name,
28
+ @JsonKey(name: 'code') required String branchCode,
29
+ }) = _BankDto;
30
+
31
+ factory BankDto.fromJson(Map<String, dynamic> json) => _$BankDtoFromJson(json);
32
+
33
+ Bank toDomain() => Bank(
34
+ id: id,
35
+ name: name,
36
+ branchCode: branchCode,
37
+ );
38
+ }
39
+ ```
40
+
41
+ ### 3. Application Layer (BLoC)
42
+
43
+ ```dart
44
+ class BankBloc extends Bloc<BankEvent, BankState> {
45
+ final IBankRepository repository;
46
+
47
+ BankBloc(this.repository) : super(const BankState.initial()) {
48
+ on<_Fetch>(_onFetch);
49
+ }
50
+
51
+ Future<void> _onFetch(_Fetch event, Emitter<BankState> emit) async {
52
+ emit(const BankState.loading());
53
+ final failureOrBanks = await repository.fetchBanks();
54
+ emit(failureOrBanks.fold(
55
+ (f) => BankState.error(f.message),
56
+ (banks) => BankState.loaded(banks),
57
+ ));
58
+ }
59
+ }
60
+ ```
@@ -0,0 +1,50 @@
1
+ # Repositories & DTO Mapping Reference
2
+
3
+ ## **Data Transfer Object (DTO)**
4
+
5
+ DTOs live in the **Infrastructure** layer and represent the raw JSON response.
6
+
7
+ ```dart
8
+ @freezed
9
+ class BankDto with _$BankDto {
10
+ const BankDto._();
11
+
12
+ const factory BankDto({
13
+ @JsonKey(name: 'bank_id') required String id,
14
+ @JsonKey(name: 'bank_name') required String name,
15
+ @JsonKey(name: 'code') required String branchCode,
16
+ }) = _BankDto;
17
+
18
+ factory BankDto.fromJson(Map<String, dynamic> json) => _$BankDtoFromJson(json);
19
+
20
+ // Mapping to Domain Entity
21
+ Bank toDomain() => Bank(
22
+ id: id,
23
+ name: name,
24
+ branchCode: branchCode,
25
+ );
26
+ }
27
+ ```
28
+
29
+ ## **Repository Implementation**
30
+
31
+ The implementation handles the actual data fetching (Remote/Local) and mapping.
32
+
33
+ ```dart
34
+ class BankRepository implements IBankRepository {
35
+ final BankRemoteDataSource remoteDataSource;
36
+
37
+ BankRepository(this.remoteDataSource);
38
+
39
+ @override
40
+ Future<Either<ApiFailure, List<Bank>>> fetchBanks() async {
41
+ try {
42
+ final dtoList = await remoteDataSource.getBanks();
43
+ // Perform the mapping here
44
+ return right(dtoList.map((dto) => dto.toDomain()).toList());
45
+ } catch (e) {
46
+ return left(ApiFailure.fromException(e));
47
+ }
48
+ }
49
+ }
50
+ ```
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: Flutter Localization
3
+ description: Standards for multi-language support using easy_localization and JSON/CSV assets.
4
+ metadata:
5
+ labels: [localization, l10n, i18n, easy_localization]
6
+ triggers:
7
+ files: ['**/assets/translations/*.json', 'main.dart']
8
+ keywords:
9
+ [localization, multi-language, translation, tr(), easy_localization]
10
+ ---
11
+
12
+ # Localization
13
+
14
+ ## **Priority: P1 (STANDARD)**
15
+
16
+ Consistent multi-language support using `easy_localization`.
17
+
18
+ ## Structure
19
+
20
+ ```text
21
+ assets/
22
+ └── translations/
23
+ ├── en.json
24
+ └── vi.json
25
+ ```
26
+
27
+ ## Implementation Guidelines
28
+
29
+ - **Bootstrap**: Wrap root with `EasyLocalization`. Always use `await EasyLocalization.ensureInitialized()`.
30
+ - **Format**: Default to JSON. Store in `assets/translations/`.
31
+ - **Lookup**: Use `.tr()` extension on strings.
32
+ - **Locale**: Change via `context.setLocale(Locale('code'))`.
33
+ - **Params**: Use `{}` in JSON; pass via `tr(args: [...])`.
34
+ - **Counting**: Use `plural()` for quantities.
35
+ - **Sheets**: Sync via `sheet_loader_localization` from Google Sheets for Online file storage to JSON/CSV.
36
+
37
+ ## Anti-Patterns
38
+
39
+ - **Hardcoding**: No raw strings in UI; use keys.
40
+ - **Manual L10n**: Avoid standard `Localizations.of`; use GetX or `easy_localization` context methods.
41
+ - **Desync**: Keep keys identical across all locale files.
42
+
43
+ ## Reference & Examples
44
+
45
+ For setup and Google Sheets automation:
46
+ See [references/REFERENCE.md](references/REFERENCE.md).
47
+
48
+ ## Related Topics
49
+
50
+ idiomatic-flutter | widgets
@@ -0,0 +1,48 @@
1
+ # Localization Reference
2
+
3
+ ## Easy Localization Setup
4
+
5
+ Basic implementation in `main.dart`.
6
+
7
+ ```dart
8
+ Future<void> main() async {
9
+ WidgetsFlutterBinding.ensureInitialized();
10
+ await EasyLocalization.ensureInitialized();
11
+
12
+ runApp(
13
+ EasyLocalization(
14
+ supportedLocales: const [Locale('en'), Locale('vi')],
15
+ path: 'assets/translations', // <-- Path to translations
16
+ fallbackLocale: const Locale('en'),
17
+ child: const MyApp(),
18
+ ),
19
+ );
20
+ }
21
+ ```
22
+
23
+ ## JSON Translation Format
24
+
25
+ Default format for project assets.
26
+
27
+ ```json
28
+ // en.json
29
+ {
30
+ "app_title": "My App",
31
+ "welcome": "Welcome, {}!",
32
+ "items_count": {
33
+ "zero": "No items",
34
+ "one": "{} item",
35
+ "other": "{} items"
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## Google Sheets Integration
41
+
42
+ Use `sheet_loader_localization` to fetch and generate localizations from Google Sheets.
43
+
44
+ 1. Add to `pubspec.yaml` under `dev_dependencies`.
45
+ 2. Configure sheets URL/ID in `pubspec.yaml` or separate config.
46
+ 3. Run `flutter pub run sheet_loader_localization:main`.
47
+
48
+ See [Sheet Loader Example](sheet-loader.md).
@@ -0,0 +1,33 @@
1
+ # Google Sheets Localization Loader
2
+
3
+ Automating translation updates from Google Sheets using `sheet_loader_localization`.
4
+
5
+ ## Configuration (`pubspec.yaml`)
6
+
7
+ ```yaml
8
+ dev_dependencies:
9
+ sheet_loader_localization: ^0.1.0
10
+
11
+ sheet_loader_localization:
12
+ # Google Sheet ID (find in the URL of your sheet)
13
+ doc_id: 'your_google_sheet_id_here'
14
+ sheet_id: '0' # Usually 0 for first sheet
15
+ output_path: 'assets/translations'
16
+ output_format: 'json' # Can be csv or json
17
+ ```
18
+
19
+ ## Typical Sheet Format ([example sheet](https://docs.google.com/spreadsheets/d/1v2Y3e0Uvn0JTwHvsduNT70u7Fy9TG43DIcZYJxPu1ZA/edit?gid=1013756643#gid=1013756643))
20
+
21
+ | key | en | vi |
22
+ | :------------- | :------------ | :--------- |
23
+ | welcome | Welcome! | Chào mừng! |
24
+ | login.button | Login | Đăng nhập |
25
+ | errors.network | Network Error | Lỗi mạng |
26
+
27
+ ## CLI Command
28
+
29
+ Run this command to synchronize your local asset files with the Google Sheet:
30
+
31
+ ```bash
32
+ flutter pub run sheet_loader_localization:main
33
+ ```
@@ -0,0 +1,71 @@
1
+ ---
2
+ name: Flutter Navigator v1 (Imperative)
3
+ description: Standard Flutter navigation using Navigator 1.0 (push/pop).
4
+ metadata:
5
+ labels: [navigation, navigator, flutter-core]
6
+ triggers:
7
+ files: ['**/app.dart']
8
+ keywords: [Navigator, push, pop, MaterialPageRoute, onGenerateRoute]
9
+ ---
10
+
11
+ # Navigator v1 Navigation
12
+
13
+ ## **Priority: P0 (CRITICAL)**
14
+
15
+ Standard imperative navigation system built into Flutter using `Navigator` and `MaterialPageRoute`.
16
+
17
+ ## Implementation Guidelines
18
+
19
+ - **Standard Push**: Use `Navigator.of(context).push(MaterialPageRoute(builder: (_) => Screen()))`.
20
+ - **Named Routes**: Define `routes` map in `MaterialApp` or use `onGenerateRoute` for dynamic routing.
21
+ - **Passing Arguments**:
22
+ - For named routes: Use `Navigator.pushNamed(context, '/path', arguments: data)`.
23
+ - For `onGenerateRoute`: Extract arguments using `settings.arguments`.
24
+ - **Returning Data**: `final result = await Navigator.push(...)` and `Navigator.pop(context, data)`.
25
+ - **Replacing Screens**: Use `pushReplacement` or `pushAndRemoveUntil` for auth/splash flows.
26
+
27
+ ## Code Example
28
+
29
+ ```dart
30
+ // Basic Push
31
+ Navigator.push(
32
+ context,
33
+ MaterialPageRoute(builder: (context) => const DetailScreen()),
34
+ );
35
+
36
+ // Named Routes Configuration
37
+ MaterialApp(
38
+ initialRoute: '/',
39
+ onGenerateRoute: (settings) {
40
+ if (settings.name == '/details') {
41
+ final args = settings.arguments as Map;
42
+ return MaterialPageRoute(
43
+ builder: (context) => DetailScreen(id: args['id']),
44
+ );
45
+ }
46
+ return null;
47
+ },
48
+ );
49
+
50
+ // Navigation with Arguments
51
+ Navigator.pushNamed(
52
+ context,
53
+ '/details',
54
+ arguments: {'id': 123},
55
+ );
56
+ ```
57
+
58
+ ## Anti-Patterns
59
+
60
+ - **Deep Nesting**: Avoid anonymous routes for complex apps; use `onGenerateRoute`.
61
+ - **Manual String Paths**: Always use constants for route names.
62
+ - **Context Leaks**: Ensure `BuildContext` is valid when calling `Navigator.of(context)`. Use `ScaffoldMessenger` or global keys if navigation is needed outside `build`.
63
+
64
+ ## Reference & Examples
65
+
66
+ For centralized `onGenerateRoute` implementation:
67
+ See [references/on-generate-route.md](references/on-generate-route.md).
68
+
69
+ ## Related Topics
70
+
71
+ idiomatic-flutter | widgets
@@ -0,0 +1,48 @@
1
+ # Navigator v1: Centralized onGenerateRoute
2
+
3
+ Using an abstract class for route names and a centralized router for navigation logic.
4
+
5
+ ```dart
6
+ // route_names.dart
7
+ abstract class Routes {
8
+ static const home = '/';
9
+ static const details = '/details';
10
+ }
11
+
12
+ // app_router.dart
13
+ class AppRouter {
14
+ static Route<dynamic> onGenerateRoute(RouteSettings settings) {
15
+ switch (settings.name) {
16
+ case Routes.home:
17
+ return MaterialPageRoute(builder: (_) => const HomeScreen());
18
+
19
+ case Routes.details:
20
+ // Safe argument extraction
21
+ final args = settings.arguments;
22
+ if (args is int) {
23
+ return MaterialPageRoute(
24
+ builder: (_) => DetailScreen(id: args),
25
+ );
26
+ }
27
+ return _errorRoute();
28
+
29
+ default:
30
+ return _errorRoute();
31
+ }
32
+ }
33
+
34
+ static Route<dynamic> _errorRoute() {
35
+ return MaterialPageRoute(
36
+ builder: (_) => const Scaffold(body: Center(child: Text('Error'))),
37
+ );
38
+ }
39
+ }
40
+
41
+ // main.dart
42
+ MaterialApp(
43
+ onGenerateRoute: AppRouter.onGenerateRoute,
44
+ )
45
+
46
+ // Usage
47
+ Navigator.pushNamed(context, Routes.details, arguments: 42);
48
+ ```
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: Flutter Performance
3
+ description: Optimization standards for rebuilds and memory.
4
+ metadata:
5
+ labels: [performance]
6
+ triggers:
7
+ files: ['lib/presentation/**', 'pubspec.yaml']
8
+ keywords: [const, buildWhen, ListView.builder, Isolate, RepaintBoundary]
9
+ ---
10
+
11
+ # Performance (P1)
12
+
13
+ - **Rebuilds**: Use `const` widgets and `buildWhen` / `select` for granular updates.
14
+ - **Lists**: Always use `ListView.builder` for item recycling.
15
+ - **Heavy Tasks**: Use `compute()` or `Isolates` for parsing/logic.
16
+ - **Repaints**: Use `RepaintBoundary` for complex animations. Use `debugRepaintRainbowEnabled` to debug.
17
+ - **Images**: Use `CachedNetworkImage` + `memCacheWidth`. `precachePicture` for SVGs.
18
+
19
+ ```dart
20
+ BlocBuilder<UserBloc, UserState>(
21
+ buildWhen: (p, c) => p.id != c.id,
22
+ builder: (context, state) => Text(state.name),
23
+ )
24
+ ```