@ngxtm/devkit 3.3.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/cli/index.js +59 -13
  2. package/cli/rules.js +248 -0
  3. package/package.json +2 -1
  4. package/rules/README.md +141 -0
  5. package/rules/dart/best-practices/SKILL.md +23 -0
  6. package/rules/dart/language/SKILL.md +52 -0
  7. package/rules/dart/tooling/SKILL.md +43 -0
  8. package/rules/dotnet/aspnet-core/SKILL.md +92 -0
  9. package/rules/dotnet/aspnet-core/references/REFERENCE.md +335 -0
  10. package/rules/dotnet/best-practices/SKILL.md +101 -0
  11. package/rules/dotnet/best-practices/references/REFERENCE.md +256 -0
  12. package/rules/dotnet/blazor/SKILL.md +146 -0
  13. package/rules/dotnet/blazor/references/REFERENCE.md +392 -0
  14. package/rules/dotnet/language/SKILL.md +82 -0
  15. package/rules/dotnet/language/references/REFERENCE.md +222 -0
  16. package/rules/dotnet/patterns.rule.md +388 -0
  17. package/rules/dotnet/razor-pages/SKILL.md +124 -0
  18. package/rules/dotnet/razor-pages/references/REFERENCE.md +321 -0
  19. package/rules/dotnet/security/SKILL.md +89 -0
  20. package/rules/dotnet/security/references/REFERENCE.md +295 -0
  21. package/rules/dotnet/tooling/SKILL.md +92 -0
  22. package/rules/dotnet/tooling/references/REFERENCE.md +300 -0
  23. package/rules/flutter/auto-route-navigation/SKILL.md +43 -0
  24. package/rules/flutter/auto-route-navigation/references/REFERENCE.md +19 -0
  25. package/rules/flutter/auto-route-navigation/references/router-config.md +62 -0
  26. package/rules/flutter/bloc-state-management/SKILL.md +64 -0
  27. package/rules/flutter/bloc-state-management/references/REFERENCE.md +20 -0
  28. package/rules/flutter/bloc-state-management/references/auth-bloc-example.md +52 -0
  29. package/rules/flutter/bloc-state-management/references/equatable-usage.md +56 -0
  30. package/rules/flutter/bloc-state-management/references/property-based-state.md +68 -0
  31. package/rules/flutter/bloc.rule.md +76 -0
  32. package/rules/flutter/cicd/SKILL.md +48 -0
  33. package/rules/flutter/cicd/references/advanced-workflow.md +66 -0
  34. package/rules/flutter/cicd/references/fastlane.md +139 -0
  35. package/rules/flutter/cicd/references/github-actions.md +59 -0
  36. package/rules/flutter/dependency-injection/SKILL.md +42 -0
  37. package/rules/flutter/dependency-injection/references/REFERENCE.md +15 -0
  38. package/rules/flutter/dependency-injection/references/modules.md +37 -0
  39. package/rules/flutter/error-handling/SKILL.md +32 -0
  40. package/rules/flutter/error-handling/references/REFERENCE.md +19 -0
  41. package/rules/flutter/error-handling/references/error-mapping.md +31 -0
  42. package/rules/flutter/feature-based-clean-architecture/SKILL.md +46 -0
  43. package/rules/flutter/feature-based-clean-architecture/references/REFERENCE.md +14 -0
  44. package/rules/flutter/feature-based-clean-architecture/references/folder-structure.md +36 -0
  45. package/rules/flutter/getx-navigation/SKILL.md +70 -0
  46. package/rules/flutter/getx-navigation/references/app-pages.md +40 -0
  47. package/rules/flutter/getx-navigation/references/middleware-example.md +29 -0
  48. package/rules/flutter/getx-state-management/SKILL.md +76 -0
  49. package/rules/flutter/getx-state-management/references/binding-example.md +32 -0
  50. package/rules/flutter/getx-state-management/references/reactive-vs-simple.md +39 -0
  51. package/rules/flutter/go-router-navigation/SKILL.md +57 -0
  52. package/rules/flutter/idiomatic-flutter/SKILL.md +20 -0
  53. package/rules/flutter/layer-based-clean-architecture/SKILL.md +50 -0
  54. package/rules/flutter/layer-based-clean-architecture/references/REFERENCE.md +60 -0
  55. package/rules/flutter/layer-based-clean-architecture/references/repository-mapping.md +50 -0
  56. package/rules/flutter/localization/SKILL.md +50 -0
  57. package/rules/flutter/localization/references/REFERENCE.md +48 -0
  58. package/rules/flutter/localization/references/sheet-loader.md +33 -0
  59. package/rules/flutter/navigator-v1-navigation/SKILL.md +71 -0
  60. package/rules/flutter/navigator-v1-navigation/references/on-generate-route.md +48 -0
  61. package/rules/flutter/performance/SKILL.md +24 -0
  62. package/rules/flutter/retrofit-networking/SKILL.md +51 -0
  63. package/rules/flutter/retrofit-networking/references/REFERENCE.md +19 -0
  64. package/rules/flutter/retrofit-networking/references/token-refresh.md +40 -0
  65. package/rules/flutter/riverpod-state-management/SKILL.md +53 -0
  66. package/rules/flutter/riverpod-state-management/references/architecture.md +124 -0
  67. package/rules/flutter/riverpod-state-management/references/best-practices.md +89 -0
  68. package/rules/flutter/riverpod-state-management/references/testing.md +73 -0
  69. package/rules/flutter/riverpod.rule.md +78 -0
  70. package/rules/flutter/security/SKILL.md +33 -0
  71. package/rules/flutter/security/references/REFERENCE.md +15 -0
  72. package/rules/flutter/security/references/network-security.md +28 -0
  73. package/rules/flutter/testing/SKILL.md +44 -0
  74. package/rules/flutter/testing/references/REFERENCE.md +21 -0
  75. package/rules/flutter/testing/references/bloc-testing.md +38 -0
  76. package/rules/flutter/testing/references/integration-testing.md +128 -0
  77. package/rules/flutter/testing/references/robot-pattern.md +82 -0
  78. package/rules/flutter/testing/references/unit-testing.md +130 -0
  79. package/rules/flutter/testing/references/widget-testing.md +120 -0
  80. package/rules/flutter/widgets/SKILL.md +37 -0
  81. package/rules/golang/chi-router/SKILL.md +219 -0
  82. package/rules/golang/chi-router/references/REFERENCE.md +13 -0
  83. package/rules/golang/chi-router/references/routing-patterns.md +205 -0
  84. package/rules/golang/cobra-cli/SKILL.md +227 -0
  85. package/rules/golang/cobra-cli/references/REFERENCE.md +13 -0
  86. package/rules/golang/cobra-cli/references/command-patterns.md +224 -0
  87. package/rules/golang/core/SKILL.md +210 -0
  88. package/rules/golang/core/references/REFERENCE.md +14 -0
  89. package/rules/golang/core/references/concurrency-patterns.md +114 -0
  90. package/rules/golang/core/references/error-handling.md +87 -0
  91. package/rules/golang/echo-framework/SKILL.md +215 -0
  92. package/rules/golang/echo-framework/references/REFERENCE.md +14 -0
  93. package/rules/golang/echo-framework/references/middleware-patterns.md +141 -0
  94. package/rules/golang/echo-framework/references/routing-patterns.md +140 -0
  95. package/rules/golang/ent-orm/SKILL.md +239 -0
  96. package/rules/golang/ent-orm/references/REFERENCE.md +13 -0
  97. package/rules/golang/ent-orm/references/schema-patterns.md +255 -0
  98. package/rules/golang/fiber-framework/SKILL.md +196 -0
  99. package/rules/golang/fiber-framework/references/REFERENCE.md +13 -0
  100. package/rules/golang/fiber-framework/references/routing-patterns.md +191 -0
  101. package/rules/golang/gin-framework/SKILL.md +205 -0
  102. package/rules/golang/gin-framework/references/REFERENCE.md +14 -0
  103. package/rules/golang/gin-framework/references/middleware-patterns.md +119 -0
  104. package/rules/golang/gorm-orm/SKILL.md +196 -0
  105. package/rules/golang/gorm-orm/references/REFERENCE.md +14 -0
  106. package/rules/golang/gorm-orm/references/model-definitions.md +167 -0
  107. package/rules/golang/gorm-orm/references/query-patterns.md +161 -0
  108. package/rules/golang/grpc/SKILL.md +231 -0
  109. package/rules/golang/grpc/references/REFERENCE.md +13 -0
  110. package/rules/golang/grpc/references/service-patterns.md +276 -0
  111. package/rules/golang/testify/SKILL.md +239 -0
  112. package/rules/golang/testify/references/REFERENCE.md +13 -0
  113. package/rules/golang/testify/references/assert-patterns.md +170 -0
  114. package/rules/golang/validator/SKILL.md +234 -0
  115. package/rules/golang/validator/references/REFERENCE.md +13 -0
  116. package/rules/golang/validator/references/validation-tags.md +211 -0
  117. package/rules/golang/viper-config/SKILL.md +244 -0
  118. package/rules/golang/viper-config/references/REFERENCE.md +13 -0
  119. package/rules/golang/viper-config/references/config-loading.md +181 -0
  120. package/rules/golang/wire-di/SKILL.md +243 -0
  121. package/rules/golang/wire-di/references/REFERENCE.md +13 -0
  122. package/rules/golang/wire-di/references/provider-patterns.md +193 -0
  123. package/rules/golang/zap-logging/SKILL.md +203 -0
  124. package/rules/golang/zap-logging/references/REFERENCE.md +13 -0
  125. package/rules/golang/zap-logging/references/logger-config.md +165 -0
  126. package/rules/java/build-gradle/SKILL.md +92 -0
  127. package/rules/java/build-gradle/references/REFERENCE.md +14 -0
  128. package/rules/java/build-gradle/references/kotlin-dsl.md +118 -0
  129. package/rules/java/build-gradle/references/task-configuration.md +132 -0
  130. package/rules/java/build-maven/SKILL.md +86 -0
  131. package/rules/java/build-maven/references/REFERENCE.md +14 -0
  132. package/rules/java/build-maven/references/dependency-management.md +111 -0
  133. package/rules/java/build-maven/references/lifecycle-phases.md +114 -0
  134. package/rules/java/graalvm-native/SKILL.md +105 -0
  135. package/rules/java/graalvm-native/references/REFERENCE.md +12 -0
  136. package/rules/java/java-collections-streams/SKILL.md +148 -0
  137. package/rules/java/java-collections-streams/references/REFERENCE.md +15 -0
  138. package/rules/java/java-collections-streams/references/collectors-patterns.md +178 -0
  139. package/rules/java/java-collections-streams/references/stream-pipelines.md +165 -0
  140. package/rules/java/java-concurrency/SKILL.md +187 -0
  141. package/rules/java/java-concurrency/references/REFERENCE.md +17 -0
  142. package/rules/java/java-concurrency/references/completable-future.md +165 -0
  143. package/rules/java/java-concurrency/references/executor-patterns.md +176 -0
  144. package/rules/java/java-concurrency/references/virtual-threads.md +190 -0
  145. package/rules/java/java-core-language/SKILL.md +121 -0
  146. package/rules/java/java-core-language/references/REFERENCE.md +15 -0
  147. package/rules/java/java-core-language/references/jvm-memory-model.md +160 -0
  148. package/rules/java/java-core-language/references/modern-java-features.md +168 -0
  149. package/rules/java/java-project-structure/SKILL.md +195 -0
  150. package/rules/java/java-project-structure/references/REFERENCE.md +15 -0
  151. package/rules/java/java-project-structure/references/maven-project-layout.md +199 -0
  152. package/rules/java/java-project-structure/references/module-system.md +159 -0
  153. package/rules/java/micronaut-core/SKILL.md +99 -0
  154. package/rules/java/micronaut-core/references/REFERENCE.md +12 -0
  155. package/rules/java/micronaut-reactive/SKILL.md +68 -0
  156. package/rules/java/micronaut-reactive/references/REFERENCE.md +12 -0
  157. package/rules/java/quarkus-core/SKILL.md +85 -0
  158. package/rules/java/quarkus-core/references/REFERENCE.md +12 -0
  159. package/rules/java/quarkus-reactive/SKILL.md +67 -0
  160. package/rules/java/quarkus-reactive/references/REFERENCE.md +12 -0
  161. package/rules/java/spring-batch/SKILL.md +102 -0
  162. package/rules/java/spring-batch/references/REFERENCE.md +12 -0
  163. package/rules/java/spring-boot-architecture/SKILL.md +206 -0
  164. package/rules/java/spring-boot-architecture/references/REFERENCE.md +15 -0
  165. package/rules/java/spring-boot-architecture/references/auto-configuration.md +158 -0
  166. package/rules/java/spring-boot-architecture/references/configuration-properties.md +202 -0
  167. package/rules/java/spring-boot-web/SKILL.md +217 -0
  168. package/rules/java/spring-boot-web/references/REFERENCE.md +17 -0
  169. package/rules/java/spring-cloud/SKILL.md +109 -0
  170. package/rules/java/spring-cloud/references/REFERENCE.md +13 -0
  171. package/rules/java/spring-data-jpa/SKILL.md +241 -0
  172. package/rules/java/spring-data-jpa/references/REFERENCE.md +16 -0
  173. package/rules/java/spring-security/SKILL.md +161 -0
  174. package/rules/java/spring-security/references/REFERENCE.md +16 -0
  175. package/rules/java/spring-security/references/jwt-auth-flow.md +213 -0
  176. package/rules/java/testing-junit-mockito/SKILL.md +135 -0
  177. package/rules/java/testing-junit-mockito/references/REFERENCE.md +15 -0
  178. package/rules/java/testing-junit-mockito/references/junit5-patterns.md +159 -0
  179. package/rules/java/testing-junit-mockito/references/mockito-patterns.md +148 -0
  180. package/rules/java/testing-junit-mockito/references/spring-boot-testing.md +152 -0
  181. package/rules/javascript/best-practices/SKILL.md +64 -0
  182. package/rules/javascript/best-practices/references/REFERENCE.md +91 -0
  183. package/rules/javascript/language/SKILL.md +71 -0
  184. package/rules/javascript/language/references/REFERENCE.md +106 -0
  185. package/rules/javascript/tooling/SKILL.md +60 -0
  186. package/rules/javascript/tooling/references/REFERENCE.md +107 -0
  187. package/rules/metadata.json +54 -0
  188. package/rules/nestjs/api-standards/SKILL.md +47 -0
  189. package/rules/nestjs/api-standards/references/pagination-wrapper.md +87 -0
  190. package/rules/nestjs/architecture/SKILL.md +68 -0
  191. package/rules/nestjs/architecture/references/dynamic-module.md +53 -0
  192. package/rules/nestjs/caching/SKILL.md +51 -0
  193. package/rules/nestjs/caching/references/REFERENCE.md +13 -0
  194. package/rules/nestjs/caching/references/cache-patterns.md +183 -0
  195. package/rules/nestjs/configuration/SKILL.md +41 -0
  196. package/rules/nestjs/configuration/references/REFERENCE.md +13 -0
  197. package/rules/nestjs/configuration/references/config-patterns.md +184 -0
  198. package/rules/nestjs/controllers-services/SKILL.md +63 -0
  199. package/rules/nestjs/controllers-services/references/REFERENCE.md +14 -0
  200. package/rules/nestjs/controllers-services/references/controller-patterns.md +119 -0
  201. package/rules/nestjs/controllers-services/references/service-patterns.md +129 -0
  202. package/rules/nestjs/database/SKILL.md +102 -0
  203. package/rules/nestjs/database/references/REFERENCE.md +14 -0
  204. package/rules/nestjs/database/references/typeorm-patterns.md +156 -0
  205. package/rules/nestjs/deployment/SKILL.md +36 -0
  206. package/rules/nestjs/deployment/references/REFERENCE.md +13 -0
  207. package/rules/nestjs/deployment/references/deployment-patterns.md +140 -0
  208. package/rules/nestjs/documentation/SKILL.md +64 -0
  209. package/rules/nestjs/documentation/references/REFERENCE.md +13 -0
  210. package/rules/nestjs/documentation/references/swagger-patterns.md +139 -0
  211. package/rules/nestjs/error-handling/SKILL.md +55 -0
  212. package/rules/nestjs/error-handling/references/REFERENCE.md +13 -0
  213. package/rules/nestjs/error-handling/references/exception-filters.md +152 -0
  214. package/rules/nestjs/file-uploads/SKILL.md +35 -0
  215. package/rules/nestjs/file-uploads/references/REFERENCE.md +13 -0
  216. package/rules/nestjs/file-uploads/references/upload-patterns.md +125 -0
  217. package/rules/nestjs/observability/SKILL.md +39 -0
  218. package/rules/nestjs/observability/references/REFERENCE.md +13 -0
  219. package/rules/nestjs/observability/references/logging-metrics.md +175 -0
  220. package/rules/nestjs/performance/SKILL.md +60 -0
  221. package/rules/nestjs/performance/references/REFERENCE.md +13 -0
  222. package/rules/nestjs/performance/references/performance-patterns.md +107 -0
  223. package/rules/nestjs/real-time/SKILL.md +45 -0
  224. package/rules/nestjs/real-time/references/REFERENCE.md +13 -0
  225. package/rules/nestjs/real-time/references/websocket-patterns.md +121 -0
  226. package/rules/nestjs/scheduling/SKILL.md +39 -0
  227. package/rules/nestjs/scheduling/references/REFERENCE.md +13 -0
  228. package/rules/nestjs/scheduling/references/scheduling-patterns.md +137 -0
  229. package/rules/nestjs/search/SKILL.md +41 -0
  230. package/rules/nestjs/search/references/REFERENCE.md +13 -0
  231. package/rules/nestjs/search/references/search-patterns.md +137 -0
  232. package/rules/nestjs/security/SKILL.md +87 -0
  233. package/rules/nestjs/security/references/REFERENCE.md +14 -0
  234. package/rules/nestjs/security/references/authentication.md +151 -0
  235. package/rules/nestjs/testing/SKILL.md +40 -0
  236. package/rules/nestjs/testing/references/REFERENCE.md +14 -0
  237. package/rules/nestjs/testing/references/unit-testing.md +179 -0
  238. package/rules/nestjs/transport/SKILL.md +45 -0
  239. package/rules/nestjs/transport/references/REFERENCE.md +13 -0
  240. package/rules/nestjs/transport/references/microservices-patterns.md +170 -0
  241. package/rules/nextjs/app-router/SKILL.md +46 -0
  242. package/rules/nextjs/app-router/references/REFERENCE.md +14 -0
  243. package/rules/nextjs/app-router/references/routing-patterns.md +182 -0
  244. package/rules/nextjs/architecture/SKILL.md +44 -0
  245. package/rules/nextjs/architecture/references/fsd-structure.md +77 -0
  246. package/rules/nextjs/authentication/SKILL.md +29 -0
  247. package/rules/nextjs/authentication/references/auth-implementation.md +73 -0
  248. package/rules/nextjs/caching/SKILL.md +66 -0
  249. package/rules/nextjs/caching/references/REFERENCE.md +13 -0
  250. package/rules/nextjs/caching/references/cache-strategies.md +168 -0
  251. package/rules/nextjs/data-access-layer/SKILL.md +33 -0
  252. package/rules/nextjs/data-access-layer/references/patterns.md +66 -0
  253. package/rules/nextjs/data-fetching/SKILL.md +59 -0
  254. package/rules/nextjs/data-fetching/references/REFERENCE.md +13 -0
  255. package/rules/nextjs/data-fetching/references/fetch-patterns.md +160 -0
  256. package/rules/nextjs/internationalization/SKILL.md +105 -0
  257. package/rules/nextjs/internationalization/references/REFERENCE.md +13 -0
  258. package/rules/nextjs/internationalization/references/i18n-patterns.md +180 -0
  259. package/rules/nextjs/optimization/SKILL.md +64 -0
  260. package/rules/nextjs/optimization/references/REFERENCE.md +13 -0
  261. package/rules/nextjs/optimization/references/optimization-patterns.md +190 -0
  262. package/rules/nextjs/rendering/SKILL.md +91 -0
  263. package/rules/nextjs/rendering/references/REFERENCE.md +13 -0
  264. package/rules/nextjs/rendering/references/rendering-modes.md +163 -0
  265. package/rules/nextjs/server-actions/SKILL.md +46 -0
  266. package/rules/nextjs/server-actions/references/REFERENCE.md +13 -0
  267. package/rules/nextjs/server-actions/references/action-patterns.md +188 -0
  268. package/rules/nextjs/server-components/SKILL.md +52 -0
  269. package/rules/nextjs/server-components/references/REFERENCE.md +13 -0
  270. package/rules/nextjs/server-components/references/component-patterns.md +175 -0
  271. package/rules/nextjs/state-management/SKILL.md +73 -0
  272. package/rules/nextjs/state-management/references/REFERENCE.md +13 -0
  273. package/rules/nextjs/state-management/references/state-patterns.md +218 -0
  274. package/rules/nextjs/styling/SKILL.md +31 -0
  275. package/rules/nextjs/styling/references/implementation.md +56 -0
  276. package/rules/react/component-patterns/SKILL.md +66 -0
  277. package/rules/react/component-patterns/references/REFERENCE.md +126 -0
  278. package/rules/react/hooks/SKILL.md +60 -0
  279. package/rules/react/hooks/references/REFERENCE.md +132 -0
  280. package/rules/react/hooks.rule.md +79 -0
  281. package/rules/react/performance/SKILL.md +69 -0
  282. package/rules/react/performance/references/REFERENCE.md +143 -0
  283. package/rules/react/security/SKILL.md +46 -0
  284. package/rules/react/security/references/REFERENCE.md +170 -0
  285. package/rules/react/state-management/SKILL.md +56 -0
  286. package/rules/react/state-management/references/REFERENCE.md +137 -0
  287. package/rules/react/testing/SKILL.md +45 -0
  288. package/rules/react/testing/references/REFERENCE.md +149 -0
  289. package/rules/react/tooling/SKILL.md +39 -0
  290. package/rules/react/typescript/SKILL.md +53 -0
  291. package/rules/rust/actix-web/SKILL.md +160 -0
  292. package/rules/rust/actix-web/references/REFERENCE.md +13 -0
  293. package/rules/rust/actix-web/references/handler-patterns.md +198 -0
  294. package/rules/rust/async-graphql/SKILL.md +228 -0
  295. package/rules/rust/async-graphql/references/REFERENCE.md +13 -0
  296. package/rules/rust/async-graphql/references/schema-patterns.md +215 -0
  297. package/rules/rust/axum/SKILL.md +161 -0
  298. package/rules/rust/axum/references/REFERENCE.md +14 -0
  299. package/rules/rust/axum/references/handler-patterns.md +97 -0
  300. package/rules/rust/bevy/SKILL.md +206 -0
  301. package/rules/rust/bevy/references/REFERENCE.md +13 -0
  302. package/rules/rust/bevy/references/ecs-patterns.md +226 -0
  303. package/rules/rust/clap/SKILL.md +217 -0
  304. package/rules/rust/clap/references/REFERENCE.md +13 -0
  305. package/rules/rust/clap/references/derive-patterns.md +205 -0
  306. package/rules/rust/core/SKILL.md +154 -0
  307. package/rules/rust/core/references/REFERENCE.md +14 -0
  308. package/rules/rust/core/references/error-handling.md +92 -0
  309. package/rules/rust/diesel-orm/SKILL.md +176 -0
  310. package/rules/rust/diesel-orm/references/REFERENCE.md +13 -0
  311. package/rules/rust/diesel-orm/references/schema-patterns.md +206 -0
  312. package/rules/rust/rocket/SKILL.md +182 -0
  313. package/rules/rust/rocket/references/REFERENCE.md +13 -0
  314. package/rules/rust/rocket/references/handler-patterns.md +209 -0
  315. package/rules/rust/sea-orm/SKILL.md +230 -0
  316. package/rules/rust/sea-orm/references/REFERENCE.md +13 -0
  317. package/rules/rust/sea-orm/references/entity-patterns.md +221 -0
  318. package/rules/rust/serde-serialization/SKILL.md +150 -0
  319. package/rules/rust/serde-serialization/references/REFERENCE.md +13 -0
  320. package/rules/rust/serde-serialization/references/serialization-patterns.md +199 -0
  321. package/rules/rust/sqlx-database/SKILL.md +140 -0
  322. package/rules/rust/sqlx-database/references/REFERENCE.md +13 -0
  323. package/rules/rust/sqlx-database/references/query-patterns.md +210 -0
  324. package/rules/rust/tauri/SKILL.md +180 -0
  325. package/rules/rust/tauri/references/REFERENCE.md +13 -0
  326. package/rules/rust/tauri/references/command-patterns.md +209 -0
  327. package/rules/rust/tokio-runtime/SKILL.md +167 -0
  328. package/rules/rust/tokio-runtime/references/REFERENCE.md +14 -0
  329. package/rules/rust/tokio-runtime/references/async-patterns.md +137 -0
  330. package/rules/rust/tokio-runtime/references/synchronization.md +152 -0
  331. package/rules/rust/tonic/SKILL.md +231 -0
  332. package/rules/rust/tonic/references/REFERENCE.md +13 -0
  333. package/rules/rust/tonic/references/service-patterns.md +213 -0
  334. package/rules/rust/tracing/SKILL.md +214 -0
  335. package/rules/rust/tracing/references/REFERENCE.md +13 -0
  336. package/rules/rust/tracing/references/instrumentation.md +187 -0
  337. package/rules/typescript/best-practices/SKILL.md +108 -0
  338. package/rules/typescript/best-practices/references/REFERENCE.md +68 -0
  339. package/rules/typescript/language/SKILL.md +72 -0
  340. package/rules/typescript/language/references/REFERENCE.md +67 -0
  341. package/rules/typescript/patterns.rule.md +85 -0
  342. package/rules/typescript/security/SKILL.md +59 -0
  343. package/rules/typescript/security/references/REFERENCE.md +113 -0
  344. package/rules/typescript/tooling/SKILL.md +52 -0
  345. package/rules/typescript/tooling/references/REFERENCE.md +110 -0
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: Flutter Feature-Based Clean Architecture
3
+ description: Standards for organizing code by feature at the root level to improve scalability and maintainability.
4
+ metadata:
5
+ labels: [architecture, clean-architecture, feature-driven, ddd, modularity]
6
+ triggers:
7
+ files: ['lib/features/**']
8
+ keywords: [feature, domain, infrastructure, application, presentation, modular]
9
+ ---
10
+
11
+ # Feature-Based Clean Architecture
12
+
13
+ ## **Priority: P0 (CRITICAL)**
14
+
15
+ Standard for modular Clean Architecture organized by business features in `lib/features/`.
16
+
17
+ ## Structure
18
+
19
+ ```text
20
+ lib/
21
+ ├── features/ <feature_name>/
22
+ │ ├── domain/ # Business Logic (Pure Dart): entities, interfaces, use_cases
23
+ │ ├── data/ # Implementation: data_sources, dtos, repositories
24
+ │ └── presentation/ # UI & State: blocs, pages, widgets
25
+ ├── core/ # Shared infrastructure & utilities
26
+ └── shared/ # Common UI components & shared entities
27
+ ```
28
+
29
+ ## Implementation Guidelines
30
+
31
+ - **Feature Encapsulation**: Keep logic, models, and UI internal to the feature directory.
32
+ - **Strict Layering**: Maintain 3-layer separation (Domain/Data/Presentation) within each feature.
33
+ - **Dependency Rule**: `Presentation -> Domain <- Data`. Domain must have zero external dependencies.
34
+ - **Cross-Feature Communication**: Features only depend on the **Domain** layer of other features.
35
+ - **Flat features**: Keep `lib/features/` flat; avoid nested features.
36
+ - **No DTO Leakage**: Never expose DTOs or Data Sources to UI or other features; return Domain Entities.
37
+ - **Shared logic**: Move cross-cutting concerns to `lib/shared/` or `lib/core/`.
38
+
39
+ ## Reference & Examples
40
+
41
+ For feature folder blueprints and cross-layer dependency templates:
42
+ See [references/REFERENCE.md](references/REFERENCE.md).
43
+
44
+ ## Related Topics
45
+
46
+ layer-based-clean-architecture | retrofit-networking | go-router-navigation | bloc-state-management | dependency-injection
@@ -0,0 +1,14 @@
1
+ # Feature-Based Architecture Reference
2
+
3
+ Detailed examples for organizing large-scale Flutter apps by business domain.
4
+
5
+ ## References
6
+
7
+ - [**Standard Folder Structure**](folder-structure.md) - Deep dive into feature-level directory nesting.
8
+ - [**Shared vs Core**](shared-core.md) - When to put code in `lib/core` versus `lib/shared`.
9
+ - [**Modular Injection**](modular-injection.md) - How to register dependencies per feature.
10
+
11
+ ## **Quick Implementation Rule**
12
+
13
+ - Never import from `lib/features/x/data/` or `lib/features/x/presentation/` from outside `feature/x`.
14
+ - Only `lib/features/x/domain/` is "public" to other features.
@@ -0,0 +1,36 @@
1
+ # Feature Folder Structure
2
+
3
+ A complete blueprint for a single feature directory (e.g., `lib/features/authentication/`).
4
+
5
+ ```text
6
+ lib/features/authentication/
7
+ ├── domain/
8
+ │ ├── entities/
9
+ │ │ └── auth_user.dart
10
+ │ ├── repositories/
11
+ │ │ └── i_auth_repository.dart
12
+ │ └── use_cases/
13
+ │ └── login_use_case.dart
14
+ ├── data/
15
+ │ ├── data_sources/
16
+ │ │ ├── auth_remote_data_source.dart
17
+ │ │ └── auth_local_data_source.dart
18
+ │ ├── dtos/
19
+ │ │ └── user_dto.dart
20
+ │ └── repositories/
21
+ │ └── auth_repository_impl.dart
22
+ └── presentation/
23
+ ├── blocs/
24
+ │ └── auth/
25
+ ├── pages/
26
+ │ ├── login_page.dart
27
+ │ └── profile_page.dart
28
+ └── widgets/
29
+ └── auth_form.dart
30
+ ```
31
+
32
+ ## **Key Constraints**
33
+
34
+ 1. **Barrel Files**: Use `authentication.dart` at the feature root to export ONLY the domain layer.
35
+ 2. **Sub-directories**: Do not create more levels than shown above unless the feature has 20+ files.
36
+ 3. **Mappers**: Should be kept in the `data/` layer, typically as extensions on DTOs.
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: Flutter GetX Navigation
3
+ description: Context-less navigation, named routes, and middleware using GetX.
4
+ metadata:
5
+ labels: [navigation, getx, routing, middleware]
6
+ triggers:
7
+ files: ['**/app_pages.dart', '**/app_routes.dart']
8
+ keywords: [GetPage, Get.to, Get.off, Get.offAll, Get.toNamed, GetMiddleware]
9
+ ---
10
+
11
+ # GetX Navigation
12
+
13
+ ## **Priority: P0 (CRITICAL)**
14
+
15
+ Decoupled navigation system allowing UI transitions without `BuildContext`.
16
+
17
+ ## Implementation Guidelines
18
+
19
+ - **Prefer Named Routes**: Use `Get.toNamed('/path')` for better maintainability. Define routes in a centralized `AppPages` class.
20
+ - **No Context Navigation**: Leverage `Get.to()`, `Get.back()`, etc., directly from controllers.
21
+ - **Navigation Methods**:
22
+ - `Get.to()`: Navigate to next screen.
23
+ - `Get.off()`: Navigate and replace current screen (e.g., Splash -> Home).
24
+ - `Get.offAll()`: Clear stack and navigate (e.g., Logout -> Login).
25
+ - `Get.back()`: Close current screen, dialog, or bottom sheet.
26
+ - **Bindings Everywhere**: Always link routes with `Bindings` to manage controller lifecycles.
27
+ - **Middleware**: Use `GetMiddleware` for route guards (Auth, Permissions) instead of logic inside views.
28
+
29
+ ## Code Example
30
+
31
+ ```dart
32
+ // Route Definition
33
+ static final routes = [
34
+ GetPage(
35
+ name: _Paths.HOME,
36
+ page: () => HomeView(),
37
+ binding: HomeBinding(),
38
+ middlewares: [AuthMiddleware()],
39
+ ),
40
+ ];
41
+
42
+ // Usage in Controller
43
+ void logout() {
44
+ _authService.clear();
45
+ Get.offAllNamed(Routes.LOGIN);
46
+ }
47
+
48
+ // Route Guard
49
+ class AuthMiddleware extends GetMiddleware {
50
+ @override
51
+ RouteSettings? redirect(String? route) {
52
+ return isAuthenticated ? null : RouteSettings(name: Routes.LOGIN);
53
+ }
54
+ }
55
+ ```
56
+
57
+ ## Anti-Patterns
58
+
59
+ - **Mixing Context and GetX**: Do not use `Navigator.of(context)` when GetX is the primary router.
60
+ - **Hardcoded Strings**: Always use a `Routes` constant class for names.
61
+ - **Dialogs without GetX**: Use `Get.dialog()` and `Get.snackbar()` for consistency.
62
+
63
+ ## Reference & Examples
64
+
65
+ For centralized route configuration and middleware guards:
66
+ See [references/app-pages.md](references/app-pages.md) and [references/middleware-example.md](references/middleware-example.md).
67
+
68
+ ## Related Topics
69
+
70
+ getx-state-management | feature-based-clean-architecture
@@ -0,0 +1,40 @@
1
+ # Centralized Route Management
2
+
3
+ Organizing routes in a single location for scalability.
4
+
5
+ ```dart
6
+ // app_routes.dart
7
+ abstract class Routes {
8
+ static const HOME = _Paths.HOME;
9
+ static const LOGIN = _Paths.LOGIN;
10
+ }
11
+
12
+ abstract class _Paths {
13
+ static const HOME = '/home';
14
+ static const LOGIN = '/login';
15
+ }
16
+
17
+ // app_pages.dart
18
+ class AppPages {
19
+ static const INITIAL = Routes.LOGIN;
20
+
21
+ static final routes = [
22
+ GetPage(
23
+ name: _Paths.HOME,
24
+ page: () => HomeView(),
25
+ binding: HomeBinding(),
26
+ ),
27
+ GetPage(
28
+ name: _Paths.LOGIN,
29
+ page: () => LoginView(),
30
+ binding: LoginBinding(),
31
+ ),
32
+ ];
33
+ }
34
+
35
+ // main.dart
36
+ GetMaterialApp(
37
+ initialRoute: AppPages.INITIAL,
38
+ getPages: AppPages.routes,
39
+ )
40
+ ```
@@ -0,0 +1,29 @@
1
+ # Route Middleware (Guards)
2
+
3
+ Use middleware to protect routes from unauthorized access or handle redirections.
4
+
5
+ ```dart
6
+ class AuthMiddleware extends GetMiddleware {
7
+ @override
8
+ int? get priority => 1;
9
+
10
+ @override
11
+ RouteSettings? redirect(String? route) {
12
+ bool isAuthenticated = AuthService.to.isLoggedInValue;
13
+
14
+ if (isAuthenticated) {
15
+ return null; // Continue to target route
16
+ } else {
17
+ // Redirect to login if user is not authenticated
18
+ return const RouteSettings(name: Routes.LOGIN);
19
+ }
20
+ }
21
+ }
22
+
23
+ // Usage in AppPages
24
+ GetPage(
25
+ name: Routes.PROFILE,
26
+ page: () => ProfileView(),
27
+ middlewares: [AuthMiddleware()],
28
+ )
29
+ ```
@@ -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