@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,135 @@
1
+ ---
2
+ name: Testing with JUnit & Mockito
3
+ description: JUnit 5, Mockito, Spring test slices, integration testing, and test organization.
4
+ metadata:
5
+ labels: [java, testing, junit, mockito]
6
+ triggers:
7
+ files: ['**/*Test.java', '**/*IT.java', '**/*Tests.java']
8
+ keywords: [JUnit, Jupiter, Mockito, '@Test', '@ExtendWith', '@MockBean', '@SpringBootTest', '@DataJpaTest', '@WebMvcTest']
9
+ ---
10
+
11
+ # Testing Standards
12
+
13
+ ## JUnit 5 Basics
14
+
15
+ ```java
16
+ class UserServiceTest {
17
+
18
+ @Test
19
+ @DisplayName("should create user with valid data")
20
+ void shouldCreateUser() {
21
+ // Given
22
+ var request = new CreateUserRequest("John", "john@example.com");
23
+
24
+ // When
25
+ var user = userService.create(request);
26
+
27
+ // Then
28
+ assertThat(user.getName()).isEqualTo("John");
29
+ assertThat(user.getEmail()).isEqualTo("john@example.com");
30
+ }
31
+
32
+ @ParameterizedTest
33
+ @ValueSource(strings = {"", " ", "invalid"})
34
+ void shouldRejectInvalidEmail(String email) {
35
+ var request = new CreateUserRequest("John", email);
36
+
37
+ assertThatThrownBy(() -> userService.create(request))
38
+ .isInstanceOf(ValidationException.class);
39
+ }
40
+
41
+ @BeforeEach
42
+ void setUp() {
43
+ // Setup before each test
44
+ }
45
+
46
+ @AfterEach
47
+ void tearDown() {
48
+ // Cleanup after each test
49
+ }
50
+ }
51
+ ```
52
+
53
+ ## Mockito
54
+
55
+ ```java
56
+ @ExtendWith(MockitoExtension.class)
57
+ class OrderServiceTest {
58
+
59
+ @Mock
60
+ OrderRepository orderRepository;
61
+
62
+ @Mock
63
+ InventoryService inventoryService;
64
+
65
+ @InjectMocks
66
+ OrderService orderService;
67
+
68
+ @Test
69
+ void shouldCreateOrder() {
70
+ // Given
71
+ var request = new CreateOrderRequest("product-1", 2);
72
+ when(inventoryService.checkStock("product-1")).thenReturn(true);
73
+ when(orderRepository.save(any())).thenAnswer(inv -> inv.getArgument(0));
74
+
75
+ // When
76
+ var order = orderService.create(request);
77
+
78
+ // Then
79
+ assertThat(order).isNotNull();
80
+ verify(inventoryService).checkStock("product-1");
81
+ verify(orderRepository).save(any(Order.class));
82
+ }
83
+ }
84
+ ```
85
+
86
+ ## Spring Test Slices
87
+
88
+ ```java
89
+ // Full context
90
+ @SpringBootTest
91
+ class ApplicationTests {}
92
+
93
+ // Web layer only
94
+ @WebMvcTest(UserController.class)
95
+ class UserControllerTest {
96
+ @Autowired MockMvc mockMvc;
97
+ @MockBean UserService userService;
98
+
99
+ @Test
100
+ void shouldReturnUser() throws Exception {
101
+ when(userService.findById(1L)).thenReturn(Optional.of(new User(1L, "John")));
102
+
103
+ mockMvc.perform(get("/api/users/1"))
104
+ .andExpect(status().isOk())
105
+ .andExpect(jsonPath("$.name").value("John"));
106
+ }
107
+ }
108
+
109
+ // JPA layer only
110
+ @DataJpaTest
111
+ class UserRepositoryTest {
112
+ @Autowired UserRepository repository;
113
+ @Autowired TestEntityManager entityManager;
114
+
115
+ @Test
116
+ void shouldFindByEmail() {
117
+ entityManager.persist(new User("john@example.com"));
118
+ var user = repository.findByEmail("john@example.com");
119
+ assertThat(user).isPresent();
120
+ }
121
+ }
122
+ ```
123
+
124
+ ## Best Practices
125
+
126
+ 1. **Given-When-Then** structure for readability
127
+ 2. **One assertion concept per test**
128
+ 3. **Use test slices** to minimize context
129
+ 4. **AssertJ** for fluent assertions
130
+ 5. **Parameterized tests** for multiple inputs
131
+
132
+ ## References
133
+
134
+ - [Test Slices](references/test-slices.md) - Available slices, customization
135
+ - [Mockito Patterns](references/mockito-patterns.md) - Stubbing, verification, argument captors
@@ -0,0 +1,15 @@
1
+ # JUnit and Mockito Testing References
2
+
3
+ ## References
4
+
5
+ - [**JUnit 5 Patterns**](junit5-patterns.md) - Test structure, parameterized tests, assertions
6
+ - [**Mockito Patterns**](mockito-patterns.md) - Mocking, stubbing, verification, spying
7
+ - [**Spring Boot Testing**](spring-boot-testing.md) - Slice tests, integration, Testcontainers
8
+
9
+ ## Quick Checks
10
+
11
+ - [ ] Use @ExtendWith(MockitoExtension.class)
12
+ - [ ] @DisplayName for readable test names
13
+ - [ ] Parameterized tests for multiple inputs
14
+ - [ ] Slice tests (@WebMvcTest, @DataJpaTest) for focused testing
15
+ - [ ] Testcontainers for real database tests
@@ -0,0 +1,159 @@
1
+ # JUnit 5 Testing Patterns
2
+
3
+ ## Basic Test Structure
4
+
5
+ ```java
6
+ import org.junit.jupiter.api.*;
7
+ import static org.junit.jupiter.api.Assertions.*;
8
+
9
+ class UserServiceTest {
10
+
11
+ private UserService userService;
12
+
13
+ @BeforeEach
14
+ void setUp() {
15
+ userService = new UserService();
16
+ }
17
+
18
+ @Test
19
+ @DisplayName("Should find user by ID")
20
+ void shouldFindUserById() {
21
+ User user = userService.findById(1L);
22
+
23
+ assertNotNull(user);
24
+ assertEquals("John", user.getName());
25
+ }
26
+
27
+ @Test
28
+ void shouldThrowWhenUserNotFound() {
29
+ assertThrows(UserNotFoundException.class, () -> {
30
+ userService.findById(999L);
31
+ });
32
+ }
33
+
34
+ @AfterEach
35
+ void tearDown() {
36
+ // cleanup
37
+ }
38
+ }
39
+ ```
40
+
41
+ ## Parameterized Tests
42
+
43
+ ```java
44
+ import org.junit.jupiter.params.ParameterizedTest;
45
+ import org.junit.jupiter.params.provider.*;
46
+
47
+ class ValidationTest {
48
+
49
+ @ParameterizedTest
50
+ @ValueSource(strings = {"a@b.com", "test@example.org"})
51
+ void shouldAcceptValidEmails(String email) {
52
+ assertTrue(EmailValidator.isValid(email));
53
+ }
54
+
55
+ @ParameterizedTest
56
+ @NullAndEmptySource
57
+ @ValueSource(strings = {"invalid", "@no-local.com"})
58
+ void shouldRejectInvalidEmails(String email) {
59
+ assertFalse(EmailValidator.isValid(email));
60
+ }
61
+
62
+ @ParameterizedTest
63
+ @CsvSource({
64
+ "1, 1, 2",
65
+ "2, 3, 5",
66
+ "10, 20, 30"
67
+ })
68
+ void shouldAddNumbers(int a, int b, int expected) {
69
+ assertEquals(expected, Calculator.add(a, b));
70
+ }
71
+
72
+ @ParameterizedTest
73
+ @MethodSource("userProvider")
74
+ void shouldValidateUser(User user, boolean expected) {
75
+ assertEquals(expected, UserValidator.isValid(user));
76
+ }
77
+
78
+ static Stream<Arguments> userProvider() {
79
+ return Stream.of(
80
+ Arguments.of(new User("John", 25), true),
81
+ Arguments.of(new User("", 25), false),
82
+ Arguments.of(new User("John", -1), false)
83
+ );
84
+ }
85
+ }
86
+ ```
87
+
88
+ ## Nested Tests
89
+
90
+ ```java
91
+ @DisplayName("OrderService")
92
+ class OrderServiceTest {
93
+
94
+ @Nested
95
+ @DisplayName("when creating order")
96
+ class WhenCreatingOrder {
97
+
98
+ @Test
99
+ void shouldCreateWithValidItems() { }
100
+
101
+ @Test
102
+ void shouldRejectEmptyCart() { }
103
+ }
104
+
105
+ @Nested
106
+ @DisplayName("when canceling order")
107
+ class WhenCancelingOrder {
108
+
109
+ @Test
110
+ void shouldCancelPendingOrder() { }
111
+
112
+ @Test
113
+ void shouldNotCancelShippedOrder() { }
114
+ }
115
+ }
116
+ ```
117
+
118
+ ## Assertions
119
+
120
+ ```java
121
+ // Multiple assertions
122
+ assertAll("user",
123
+ () -> assertEquals("John", user.getName()),
124
+ () -> assertEquals(25, user.getAge()),
125
+ () -> assertTrue(user.isActive())
126
+ );
127
+
128
+ // Timeout
129
+ assertTimeout(Duration.ofSeconds(2), () -> {
130
+ longRunningOperation();
131
+ });
132
+
133
+ // Exception details
134
+ var exception = assertThrows(ValidationException.class, () -> {
135
+ service.validate(invalidData);
136
+ });
137
+ assertEquals("Invalid input", exception.getMessage());
138
+ ```
139
+
140
+ ## Test Lifecycle
141
+
142
+ ```java
143
+ @TestInstance(TestInstance.Lifecycle.PER_CLASS)
144
+ class ExpensiveResourceTest {
145
+
146
+ private Database db;
147
+
148
+ @BeforeAll
149
+ void initDatabase() {
150
+ db = new Database();
151
+ db.connect();
152
+ }
153
+
154
+ @AfterAll
155
+ void closeDatabase() {
156
+ db.disconnect();
157
+ }
158
+ }
159
+ ```
@@ -0,0 +1,148 @@
1
+ # Mockito Testing Patterns
2
+
3
+ ## Basic Mocking
4
+
5
+ ```java
6
+ import org.junit.jupiter.api.Test;
7
+ import org.junit.jupiter.api.extension.ExtendWith;
8
+ import org.mockito.InjectMocks;
9
+ import org.mockito.Mock;
10
+ import org.mockito.junit.jupiter.MockitoExtension;
11
+ import static org.mockito.Mockito.*;
12
+
13
+ @ExtendWith(MockitoExtension.class)
14
+ class OrderServiceTest {
15
+
16
+ @Mock
17
+ private UserRepository userRepository;
18
+
19
+ @Mock
20
+ private OrderRepository orderRepository;
21
+
22
+ @InjectMocks
23
+ private OrderService orderService;
24
+
25
+ @Test
26
+ void shouldCreateOrder() {
27
+ // Given
28
+ User user = new User(1L, "John");
29
+ when(userRepository.findById(1L)).thenReturn(Optional.of(user));
30
+ when(orderRepository.save(any(Order.class))).thenAnswer(inv -> {
31
+ Order order = inv.getArgument(0);
32
+ order.setId(100L);
33
+ return order;
34
+ });
35
+
36
+ // When
37
+ Order order = orderService.createOrder(1L, List.of(item1, item2));
38
+
39
+ // Then
40
+ assertNotNull(order);
41
+ assertEquals(100L, order.getId());
42
+ verify(orderRepository).save(any(Order.class));
43
+ }
44
+ }
45
+ ```
46
+
47
+ ## Stubbing
48
+
49
+ ```java
50
+ // Return value
51
+ when(mock.method()).thenReturn(value);
52
+
53
+ // Throw exception
54
+ when(mock.method()).thenThrow(new RuntimeException());
55
+
56
+ // Multiple calls
57
+ when(mock.method())
58
+ .thenReturn(first)
59
+ .thenReturn(second)
60
+ .thenThrow(new RuntimeException());
61
+
62
+ // Argument matchers
63
+ when(userRepo.findByEmail(anyString())).thenReturn(user);
64
+ when(userRepo.findByAge(argThat(age -> age > 18))).thenReturn(adults);
65
+
66
+ // Void methods
67
+ doNothing().when(mock).voidMethod();
68
+ doThrow(new RuntimeException()).when(mock).voidMethod();
69
+ ```
70
+
71
+ ## Verification
72
+
73
+ ```java
74
+ // Called once (default)
75
+ verify(mock).method();
76
+
77
+ // Called specific times
78
+ verify(mock, times(3)).method();
79
+ verify(mock, never()).method();
80
+ verify(mock, atLeast(2)).method();
81
+ verify(mock, atMost(5)).method();
82
+
83
+ // With argument capture
84
+ ArgumentCaptor<Order> captor = ArgumentCaptor.forClass(Order.class);
85
+ verify(orderRepo).save(captor.capture());
86
+ Order saved = captor.getValue();
87
+ assertEquals(expectedTotal, saved.getTotal());
88
+
89
+ // Verification order
90
+ InOrder inOrder = inOrder(first, second);
91
+ inOrder.verify(first).method();
92
+ inOrder.verify(second).method();
93
+
94
+ // No more interactions
95
+ verifyNoMoreInteractions(mock);
96
+ ```
97
+
98
+ ## Spying
99
+
100
+ ```java
101
+ // Partial mock - real object with stubbed methods
102
+ @Spy
103
+ private List<String> spiedList = new ArrayList<>();
104
+
105
+ @Test
106
+ void shouldSpyRealObject() {
107
+ spiedList.add("one");
108
+ spiedList.add("two");
109
+
110
+ verify(spiedList).add("one");
111
+ assertEquals(2, spiedList.size()); // Real behavior
112
+
113
+ // Override specific method
114
+ doReturn(100).when(spiedList).size();
115
+ assertEquals(100, spiedList.size());
116
+ }
117
+ ```
118
+
119
+ ## BDD Style
120
+
121
+ ```java
122
+ import static org.mockito.BDDMockito.*;
123
+
124
+ @Test
125
+ void shouldProcessPayment() {
126
+ // Given
127
+ given(paymentGateway.process(any())).willReturn(PaymentResult.SUCCESS);
128
+
129
+ // When
130
+ boolean result = paymentService.pay(order);
131
+
132
+ // Then
133
+ then(paymentGateway).should().process(any());
134
+ assertThat(result).isTrue();
135
+ }
136
+ ```
137
+
138
+ ## Static Mocking
139
+
140
+ ```java
141
+ try (MockedStatic<Utils> utilities = mockStatic(Utils.class)) {
142
+ utilities.when(() -> Utils.generateId()).thenReturn("mocked-id");
143
+
144
+ String id = Utils.generateId();
145
+
146
+ assertEquals("mocked-id", id);
147
+ }
148
+ ```
@@ -0,0 +1,152 @@
1
+ # Spring Boot Testing
2
+
3
+ ## Slice Tests
4
+
5
+ ```java
6
+ // Web layer only
7
+ @WebMvcTest(UserController.class)
8
+ class UserControllerTest {
9
+
10
+ @Autowired
11
+ private MockMvc mockMvc;
12
+
13
+ @MockitoBean
14
+ private UserService userService;
15
+
16
+ @Test
17
+ void shouldGetUser() throws Exception {
18
+ when(userService.findById(1L)).thenReturn(new User(1L, "John"));
19
+
20
+ mockMvc.perform(get("/users/1"))
21
+ .andExpect(status().isOk())
22
+ .andExpect(jsonPath("$.name").value("John"));
23
+ }
24
+
25
+ @Test
26
+ void shouldCreateUser() throws Exception {
27
+ mockMvc.perform(post("/users")
28
+ .contentType(MediaType.APPLICATION_JSON)
29
+ .content("""
30
+ {"name": "John", "email": "john@example.com"}
31
+ """))
32
+ .andExpect(status().isCreated());
33
+ }
34
+ }
35
+
36
+ // JPA layer only
37
+ @DataJpaTest
38
+ class UserRepositoryTest {
39
+
40
+ @Autowired
41
+ private TestEntityManager entityManager;
42
+
43
+ @Autowired
44
+ private UserRepository userRepository;
45
+
46
+ @Test
47
+ void shouldFindByEmail() {
48
+ entityManager.persist(new User("John", "john@example.com"));
49
+
50
+ Optional<User> found = userRepository.findByEmail("john@example.com");
51
+
52
+ assertThat(found).isPresent();
53
+ assertThat(found.get().getName()).isEqualTo("John");
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## Integration Tests
59
+
60
+ ```java
61
+ @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
62
+ class OrderIntegrationTest {
63
+
64
+ @Autowired
65
+ private TestRestTemplate restTemplate;
66
+
67
+ @Test
68
+ void shouldCreateAndRetrieveOrder() {
69
+ // Create
70
+ OrderRequest request = new OrderRequest(List.of(item1, item2));
71
+ ResponseEntity<Order> createResponse = restTemplate
72
+ .postForEntity("/orders", request, Order.class);
73
+
74
+ assertThat(createResponse.getStatusCode()).isEqualTo(HttpStatus.CREATED);
75
+ Long orderId = createResponse.getBody().getId();
76
+
77
+ // Retrieve
78
+ ResponseEntity<Order> getResponse = restTemplate
79
+ .getForEntity("/orders/" + orderId, Order.class);
80
+
81
+ assertThat(getResponse.getBody().getItems()).hasSize(2);
82
+ }
83
+ }
84
+ ```
85
+
86
+ ## Testcontainers
87
+
88
+ ```java
89
+ @SpringBootTest
90
+ @Testcontainers
91
+ class PostgresIntegrationTest {
92
+
93
+ @Container
94
+ static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15")
95
+ .withDatabaseName("testdb")
96
+ .withUsername("test")
97
+ .withPassword("test");
98
+
99
+ @DynamicPropertySource
100
+ static void configureProperties(DynamicPropertyRegistry registry) {
101
+ registry.add("spring.datasource.url", postgres::getJdbcUrl);
102
+ registry.add("spring.datasource.username", postgres::getUsername);
103
+ registry.add("spring.datasource.password", postgres::getPassword);
104
+ }
105
+
106
+ @Autowired
107
+ private UserRepository userRepository;
108
+
109
+ @Test
110
+ void shouldPersistUser() {
111
+ User saved = userRepository.save(new User("John", "john@example.com"));
112
+
113
+ assertThat(saved.getId()).isNotNull();
114
+ assertThat(userRepository.findById(saved.getId())).isPresent();
115
+ }
116
+ }
117
+ ```
118
+
119
+ ## Test Configuration
120
+
121
+ ```java
122
+ @TestConfiguration
123
+ class TestConfig {
124
+
125
+ @Bean
126
+ @Primary
127
+ public EmailService mockEmailService() {
128
+ return mock(EmailService.class);
129
+ }
130
+ }
131
+
132
+ @SpringBootTest
133
+ @Import(TestConfig.class)
134
+ class ServiceTest {
135
+ // Uses mock EmailService
136
+ }
137
+ ```
138
+
139
+ ## Test Properties
140
+
141
+ ```properties
142
+ # src/test/resources/application-test.properties
143
+ spring.datasource.url=jdbc:h2:mem:testdb
144
+ spring.jpa.hibernate.ddl-auto=create-drop
145
+ spring.jpa.show-sql=true
146
+ ```
147
+
148
+ ```java
149
+ @SpringBootTest
150
+ @ActiveProfiles("test")
151
+ class TestWithProfile { }
152
+ ```
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: JavaScript Best Practices
3
+ description: Idiomatic JavaScript patterns and conventions for maintainable code.
4
+ metadata:
5
+ labels: [javascript, best-practices, conventions, code-quality]
6
+ triggers:
7
+ files: ['**/*.js', '**/*.mjs']
8
+ keywords: [module, import, export, error, validation]
9
+ ---
10
+
11
+ # JavaScript Best Practices
12
+
13
+ ## **Priority: P1 (OPERATIONAL)**
14
+
15
+ Conventions and patterns for writing maintainable JavaScript.
16
+
17
+ ## Implementation Guidelines
18
+
19
+ - **Naming**: `camelCase` (vars/funcs), `PascalCase` (classes), `UPPER_SNAKE` (constants).
20
+ - **Errors**: Throw `Error` objects only. Handle all async errors.
21
+ - **Comments**: JSDoc for APIs. Explain "why" not "what".
22
+ - **Files**: One entity per file. `index.js` for exports.
23
+ - **Modules**: Named exports only. Order: Ext -> Int -> Rel.
24
+
25
+ ## Anti-Patterns
26
+
27
+ - **No Globals**: Encapsulate state.
28
+ - **No Magic Numbers**: Use `const`.
29
+ - **No Nesting**: Guard clauses/early returns.
30
+ - **No Defaults**: Use named exports.
31
+ - **No Side Effects**: Keep functions pure.
32
+
33
+ ## Code
34
+
35
+ ```javascript
36
+ // Constants
37
+ const STATUS = { OK: 200, ERROR: 500 };
38
+
39
+ // Errors
40
+ class APIError extends Error {
41
+ constructor(msg, code) {
42
+ super(msg);
43
+ this.code = code;
44
+ }
45
+ }
46
+
47
+ // Async + JDoc
48
+ /** @throws {APIError} */
49
+ export async function getData(id) {
50
+ if (!id) throw new APIError('Missing ID', 400);
51
+ const res = await fetch(`/api/${id}`);
52
+ if (!res.ok) throw new APIError('Failed', res.status);
53
+ return res.json();
54
+ }
55
+ ```
56
+
57
+ ## Reference & Examples
58
+
59
+ For module patterns and project structure:
60
+ See [references/REFERENCE.md](references/REFERENCE.md).
61
+
62
+ ## Related Topics
63
+
64
+ language | tooling