@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,111 @@
1
+ # Maven Dependency Management
2
+
3
+ ## Dependency Scopes
4
+
5
+ ```xml
6
+ <dependencies>
7
+ <!-- compile (default) - available everywhere -->
8
+ <dependency>
9
+ <groupId>org.springframework.boot</groupId>
10
+ <artifactId>spring-boot-starter-web</artifactId>
11
+ </dependency>
12
+
13
+ <!-- provided - compile only, container provides at runtime -->
14
+ <dependency>
15
+ <groupId>jakarta.servlet</groupId>
16
+ <artifactId>jakarta.servlet-api</artifactId>
17
+ <scope>provided</scope>
18
+ </dependency>
19
+
20
+ <!-- runtime - not needed for compile -->
21
+ <dependency>
22
+ <groupId>org.postgresql</groupId>
23
+ <artifactId>postgresql</artifactId>
24
+ <scope>runtime</scope>
25
+ </dependency>
26
+
27
+ <!-- test - only for tests -->
28
+ <dependency>
29
+ <groupId>org.junit.jupiter</groupId>
30
+ <artifactId>junit-jupiter</artifactId>
31
+ <scope>test</scope>
32
+ </dependency>
33
+ </dependencies>
34
+ ```
35
+
36
+ ## BOM (Bill of Materials)
37
+
38
+ ```xml
39
+ <dependencyManagement>
40
+ <dependencies>
41
+ <!-- Import BOM -->
42
+ <dependency>
43
+ <groupId>org.springframework.boot</groupId>
44
+ <artifactId>spring-boot-dependencies</artifactId>
45
+ <version>3.2.0</version>
46
+ <type>pom</type>
47
+ <scope>import</scope>
48
+ </dependency>
49
+
50
+ <!-- Now use without version -->
51
+ </dependencies>
52
+ </dependencyManagement>
53
+
54
+ <dependencies>
55
+ <dependency>
56
+ <groupId>org.springframework.boot</groupId>
57
+ <artifactId>spring-boot-starter-web</artifactId>
58
+ <!-- Version inherited from BOM -->
59
+ </dependency>
60
+ </dependencies>
61
+ ```
62
+
63
+ ## Exclusions
64
+
65
+ ```xml
66
+ <dependency>
67
+ <groupId>org.springframework.boot</groupId>
68
+ <artifactId>spring-boot-starter-web</artifactId>
69
+ <exclusions>
70
+ <exclusion>
71
+ <groupId>org.springframework.boot</groupId>
72
+ <artifactId>spring-boot-starter-tomcat</artifactId>
73
+ </exclusion>
74
+ </exclusions>
75
+ </dependency>
76
+
77
+ <!-- Replace with Jetty -->
78
+ <dependency>
79
+ <groupId>org.springframework.boot</groupId>
80
+ <artifactId>spring-boot-starter-jetty</artifactId>
81
+ </dependency>
82
+ ```
83
+
84
+ ## Version Properties
85
+
86
+ ```xml
87
+ <properties>
88
+ <java.version>21</java.version>
89
+ <spring-boot.version>3.2.0</spring-boot.version>
90
+ <lombok.version>1.18.30</lombok.version>
91
+ </properties>
92
+
93
+ <dependencies>
94
+ <dependency>
95
+ <groupId>org.projectlombok</groupId>
96
+ <artifactId>lombok</artifactId>
97
+ <version>${lombok.version}</version>
98
+ <scope>provided</scope>
99
+ </dependency>
100
+ </dependencies>
101
+ ```
102
+
103
+ ## Optional Dependencies
104
+
105
+ ```xml
106
+ <dependency>
107
+ <groupId>com.example</groupId>
108
+ <artifactId>optional-feature</artifactId>
109
+ <optional>true</optional>
110
+ </dependency>
111
+ ```
@@ -0,0 +1,114 @@
1
+ # Maven Lifecycle Phases
2
+
3
+ ## Default Lifecycle
4
+
5
+ ```xml
6
+ <!-- Phase order: validate → compile → test → package → verify → install → deploy -->
7
+
8
+ <!-- Skip tests during build -->
9
+ <properties>
10
+ <maven.test.skip>true</maven.test.skip>
11
+ <!-- Or just skip execution, still compile -->
12
+ <skipTests>true</skipTests>
13
+ </properties>
14
+ ```
15
+
16
+ ## Common Commands
17
+
18
+ ```bash
19
+ # Clean and build
20
+ mvn clean install
21
+
22
+ # Build without tests
23
+ mvn clean install -DskipTests
24
+
25
+ # Run specific phase
26
+ mvn compile
27
+ mvn test
28
+ mvn package
29
+
30
+ # Run with profile
31
+ mvn clean install -Pproduction
32
+
33
+ # Debug output
34
+ mvn clean install -X
35
+
36
+ # Dependency tree
37
+ mvn dependency:tree
38
+
39
+ # Effective POM
40
+ mvn help:effective-pom
41
+ ```
42
+
43
+ ## Plugin Configuration
44
+
45
+ ```xml
46
+ <build>
47
+ <plugins>
48
+ <!-- Compiler plugin -->
49
+ <plugin>
50
+ <groupId>org.apache.maven.plugins</groupId>
51
+ <artifactId>maven-compiler-plugin</artifactId>
52
+ <version>3.11.0</version>
53
+ <configuration>
54
+ <source>21</source>
55
+ <target>21</target>
56
+ <compilerArgs>
57
+ <arg>--enable-preview</arg>
58
+ </compilerArgs>
59
+ </configuration>
60
+ </plugin>
61
+
62
+ <!-- Surefire for unit tests -->
63
+ <plugin>
64
+ <groupId>org.apache.maven.plugins</groupId>
65
+ <artifactId>maven-surefire-plugin</artifactId>
66
+ <version>3.1.2</version>
67
+ <configuration>
68
+ <includes>
69
+ <include>**/*Test.java</include>
70
+ </includes>
71
+ </configuration>
72
+ </plugin>
73
+
74
+ <!-- Failsafe for integration tests -->
75
+ <plugin>
76
+ <groupId>org.apache.maven.plugins</groupId>
77
+ <artifactId>maven-failsafe-plugin</artifactId>
78
+ <version>3.1.2</version>
79
+ <executions>
80
+ <execution>
81
+ <goals>
82
+ <goal>integration-test</goal>
83
+ <goal>verify</goal>
84
+ </goals>
85
+ </execution>
86
+ </executions>
87
+ </plugin>
88
+ </plugins>
89
+ </build>
90
+ ```
91
+
92
+ ## Multi-Module Project
93
+
94
+ ```xml
95
+ <!-- Parent POM -->
96
+ <project>
97
+ <groupId>com.example</groupId>
98
+ <artifactId>parent</artifactId>
99
+ <version>1.0.0</version>
100
+ <packaging>pom</packaging>
101
+
102
+ <modules>
103
+ <module>core</module>
104
+ <module>api</module>
105
+ <module>web</module>
106
+ </modules>
107
+
108
+ <dependencyManagement>
109
+ <dependencies>
110
+ <!-- Centralize versions here -->
111
+ </dependencies>
112
+ </dependencyManagement>
113
+ </project>
114
+ ```
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: GraalVM Native
3
+ description: Native image compilation, reflection configuration, and build optimization.
4
+ metadata:
5
+ labels: [java, graalvm, native, aot]
6
+ triggers:
7
+ files: ['**/*.java', 'native-image.properties', 'META-INF/native-image/**', 'pom.xml', 'build.gradle']
8
+ keywords: [GraalVM, native-image, reflection-config, reachability-metadata, '@RegisterForReflection']
9
+ ---
10
+
11
+ # GraalVM Native Standards
12
+
13
+ ## Building Native Image
14
+
15
+ ```bash
16
+ # Maven with Spring Boot
17
+ ./mvnw -Pnative native:compile
18
+
19
+ # Maven with Quarkus
20
+ ./mvnw package -Dnative
21
+
22
+ # Gradle
23
+ ./gradlew nativeCompile
24
+ ```
25
+
26
+ ## Reflection Configuration
27
+
28
+ ```java
29
+ // Quarkus - register for reflection
30
+ @RegisterForReflection
31
+ public class User {
32
+ private String name;
33
+ private String email;
34
+ }
35
+
36
+ // Spring Boot - hints
37
+ @Configuration
38
+ @ImportRuntimeHints(MyRuntimeHints.class)
39
+ public class NativeConfig {}
40
+
41
+ public class MyRuntimeHints implements RuntimeHintsRegistrar {
42
+ @Override
43
+ public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
44
+ hints.reflection().registerType(User.class,
45
+ MemberCategory.PUBLIC_FIELDS,
46
+ MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS,
47
+ MemberCategory.INVOKE_PUBLIC_METHODS);
48
+ }
49
+ }
50
+ ```
51
+
52
+ ## Native Image Configuration Files
53
+
54
+ ```
55
+ src/main/resources/META-INF/native-image/
56
+ ├── reflect-config.json
57
+ ├── resource-config.json
58
+ ├── serialization-config.json
59
+ └── native-image.properties
60
+ ```
61
+
62
+ ```json
63
+ // reflect-config.json
64
+ [
65
+ {
66
+ "name": "com.example.User",
67
+ "allDeclaredConstructors": true,
68
+ "allPublicMethods": true,
69
+ "allDeclaredFields": true
70
+ }
71
+ ]
72
+ ```
73
+
74
+ ```json
75
+ // resource-config.json
76
+ {
77
+ "resources": {
78
+ "includes": [
79
+ {"pattern": "application\\.yml"},
80
+ {"pattern": "db/migration/.*"}
81
+ ]
82
+ }
83
+ }
84
+ ```
85
+
86
+ ## Performance Tips
87
+
88
+ ```java
89
+ // Use build-time initialization
90
+ @BuildTimeInit
91
+ public class Constants {
92
+ public static final Map<String, String> CONFIG = loadConfig();
93
+ }
94
+
95
+ // Avoid runtime class loading
96
+ // DON'T: Class.forName("com.example.MyClass")
97
+ // DO: Reference classes directly
98
+
99
+ // Use static configuration
100
+ // Avoid dynamic proxies when possible
101
+ ```
102
+
103
+ ## References
104
+
105
+ - [Native Image Config](references/native-image-config.md) - Full configuration options
@@ -0,0 +1,12 @@
1
+ # GraalVM Native References
2
+
3
+ ## References
4
+
5
+ - [**Native Image Config**](native-image-config.md) - Reflection, resources, serialization config
6
+
7
+ ## Quick Checks
8
+
9
+ - [ ] Register classes for reflection explicitly
10
+ - [ ] Include resource files in resource-config.json
11
+ - [ ] Avoid dynamic class loading
12
+ - [ ] Test native image in CI before release
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: Java Collections & Streams
3
+ description: Collections framework, Stream API, functional interfaces, and Optional patterns.
4
+ metadata:
5
+ labels: [java, collections, streams, functional]
6
+ triggers:
7
+ files: ['**/*.java']
8
+ keywords: [List, Map, Set, Stream, Optional, Collector, Collectors, HashMap, ArrayList, LinkedList, TreeMap]
9
+ ---
10
+
11
+ # Java Collections & Streams Standards
12
+
13
+ ## Collections Framework
14
+
15
+ ```java
16
+ // Choose the right collection
17
+ List<String> list = new ArrayList<>(); // Random access, dynamic size
18
+ List<String> linked = new LinkedList<>(); // Frequent insertions/deletions
19
+ Set<String> set = new HashSet<>(); // Unique elements, O(1) lookup
20
+ Set<String> sorted = new TreeSet<>(); // Sorted unique elements
21
+ Map<K, V> map = new HashMap<>(); // Key-value pairs, O(1) lookup
22
+ Map<K, V> linked = new LinkedHashMap<>(); // Insertion order preserved
23
+ Map<K, V> tree = new TreeMap<>(); // Sorted by keys
24
+
25
+ // Immutable collections (Java 9+)
26
+ List<String> immutable = List.of("a", "b", "c");
27
+ Set<Integer> immutableSet = Set.of(1, 2, 3);
28
+ Map<String, Integer> immutableMap = Map.of("a", 1, "b", 2);
29
+
30
+ // Unmodifiable wrappers
31
+ List<String> unmodifiable = Collections.unmodifiableList(mutableList);
32
+ // Or with copyOf (Java 10+)
33
+ List<String> copy = List.copyOf(mutableList);
34
+ ```
35
+
36
+ ## Stream API
37
+
38
+ ```java
39
+ // Basic pipeline
40
+ List<String> result = items.stream()
41
+ .filter(item -> item.isActive())
42
+ .map(Item::getName)
43
+ .sorted()
44
+ .distinct()
45
+ .collect(Collectors.toList());
46
+
47
+ // Parallel streams (use with caution)
48
+ long count = largeList.parallelStream()
49
+ .filter(this::expensiveCheck)
50
+ .count();
51
+
52
+ // FlatMap for nested structures
53
+ List<String> allTags = posts.stream()
54
+ .flatMap(post -> post.getTags().stream())
55
+ .distinct()
56
+ .toList(); // Java 16+
57
+
58
+ // Reduce operations
59
+ int sum = numbers.stream()
60
+ .reduce(0, Integer::sum);
61
+
62
+ Optional<Integer> max = numbers.stream()
63
+ .reduce(Integer::max);
64
+ ```
65
+
66
+ ## Collectors
67
+
68
+ ```java
69
+ // Group by
70
+ Map<Status, List<Order>> byStatus = orders.stream()
71
+ .collect(Collectors.groupingBy(Order::getStatus));
72
+
73
+ // Group by with downstream collector
74
+ Map<Status, Long> countByStatus = orders.stream()
75
+ .collect(Collectors.groupingBy(
76
+ Order::getStatus,
77
+ Collectors.counting()
78
+ ));
79
+
80
+ // Partition by predicate
81
+ Map<Boolean, List<User>> partitioned = users.stream()
82
+ .collect(Collectors.partitioningBy(User::isActive));
83
+
84
+ // To map
85
+ Map<String, User> byId = users.stream()
86
+ .collect(Collectors.toMap(
87
+ User::getId,
88
+ Function.identity(),
89
+ (existing, replacement) -> existing // Merge function
90
+ ));
91
+
92
+ // Joining strings
93
+ String csv = items.stream()
94
+ .map(Item::getName)
95
+ .collect(Collectors.joining(", "));
96
+
97
+ // Statistics
98
+ IntSummaryStatistics stats = orders.stream()
99
+ .collect(Collectors.summarizingInt(Order::getQuantity));
100
+ ```
101
+
102
+ ## Optional
103
+
104
+ ```java
105
+ // Return Optional for nullable results
106
+ public Optional<User> findById(String id) {
107
+ return Optional.ofNullable(repository.get(id));
108
+ }
109
+
110
+ // Chain operations
111
+ String email = findById(id)
112
+ .filter(User::isActive)
113
+ .map(User::getEmail)
114
+ .orElse("unknown@example.com");
115
+
116
+ // Throw on absence
117
+ User user = findById(id)
118
+ .orElseThrow(() -> new UserNotFoundException(id));
119
+
120
+ // Conditional execution
121
+ findById(id).ifPresent(this::sendNotification);
122
+
123
+ // With fallback computation
124
+ User user = findById(id)
125
+ .orElseGet(() -> createDefaultUser());
126
+
127
+ // Stream of Optional (Java 9+)
128
+ List<User> activeUsers = ids.stream()
129
+ .map(this::findById)
130
+ .flatMap(Optional::stream)
131
+ .filter(User::isActive)
132
+ .toList();
133
+ ```
134
+
135
+ ## Best Practices
136
+
137
+ 1. **Prefer immutable collections** from factories (List.of, Set.of, Map.of)
138
+ 2. **Size collections** when capacity is known: `new ArrayList<>(100)`
139
+ 3. **Use appropriate collection** for use case (HashMap vs TreeMap)
140
+ 4. **Avoid null in collections** - use Optional or empty collections
141
+ 5. **Stream once** - streams cannot be reused after terminal operation
142
+ 6. **Parallel streams carefully** - only for CPU-bound, large datasets
143
+ 7. **Optional for returns only** - never as fields or parameters
144
+
145
+ ## References
146
+
147
+ - [Stream Pipelines](references/stream-pipelines.md) - Advanced stream patterns
148
+ - [Collectors Patterns](references/collectors-patterns.md) - Custom collectors, complex aggregations
@@ -0,0 +1,15 @@
1
+ # Java Collections & Streams References
2
+
3
+ ## References
4
+
5
+ - [**Stream Pipelines**](stream-pipelines.md) - Advanced stream operations, lazy evaluation, short-circuiting
6
+ - [**Collectors Patterns**](collectors-patterns.md) - Custom collectors, complex aggregations, downstream collectors
7
+
8
+ ## Quick Checks
9
+
10
+ - [ ] Use List.of/Set.of/Map.of for immutable collections
11
+ - [ ] Size ArrayList/HashMap when capacity known
12
+ - [ ] Stream once - don't reuse after terminal operation
13
+ - [ ] Parallel streams only for large, CPU-bound operations
14
+ - [ ] Optional for return types, never parameters or fields
15
+ - [ ] Avoid nulls in collections - use empty collections instead
@@ -0,0 +1,178 @@
1
+ # Collectors Patterns
2
+
3
+ ## Built-in Collectors
4
+
5
+ ```java
6
+ // toList, toSet, toCollection
7
+ List<String> list = stream.collect(Collectors.toList());
8
+ Set<String> set = stream.collect(Collectors.toSet());
9
+ TreeSet<String> treeSet = stream.collect(Collectors.toCollection(TreeSet::new));
10
+
11
+ // Java 16+ shorthand
12
+ List<String> list = stream.toList(); // Returns unmodifiable list
13
+
14
+ // toMap with merge function
15
+ Map<String, User> userById = users.stream()
16
+ .collect(Collectors.toMap(
17
+ User::getId,
18
+ Function.identity(),
19
+ (existing, replacement) -> existing, // Keep existing on duplicate
20
+ LinkedHashMap::new // Maintain insertion order
21
+ ));
22
+ ```
23
+
24
+ ## Grouping Collectors
25
+
26
+ ```java
27
+ // Simple groupingBy
28
+ Map<Department, List<Employee>> byDept = employees.stream()
29
+ .collect(Collectors.groupingBy(Employee::getDepartment));
30
+
31
+ // With downstream collector
32
+ Map<Department, Long> countByDept = employees.stream()
33
+ .collect(Collectors.groupingBy(
34
+ Employee::getDepartment,
35
+ Collectors.counting()
36
+ ));
37
+
38
+ // Nested grouping
39
+ Map<Department, Map<Level, List<Employee>>> nested = employees.stream()
40
+ .collect(Collectors.groupingBy(
41
+ Employee::getDepartment,
42
+ Collectors.groupingBy(Employee::getLevel)
43
+ ));
44
+
45
+ // GroupingBy with mapping
46
+ Map<Department, Set<String>> namesByDept = employees.stream()
47
+ .collect(Collectors.groupingBy(
48
+ Employee::getDepartment,
49
+ Collectors.mapping(
50
+ Employee::getName,
51
+ Collectors.toSet()
52
+ )
53
+ ));
54
+
55
+ // GroupingBy with reducing
56
+ Map<Department, Optional<Employee>> highestPaid = employees.stream()
57
+ .collect(Collectors.groupingBy(
58
+ Employee::getDepartment,
59
+ Collectors.maxBy(Comparator.comparing(Employee::getSalary))
60
+ ));
61
+ ```
62
+
63
+ ## Partitioning
64
+
65
+ ```java
66
+ // Simple partition
67
+ Map<Boolean, List<User>> partition = users.stream()
68
+ .collect(Collectors.partitioningBy(User::isActive));
69
+
70
+ List<User> active = partition.get(true);
71
+ List<User> inactive = partition.get(false);
72
+
73
+ // Partition with downstream
74
+ Map<Boolean, Long> counts = users.stream()
75
+ .collect(Collectors.partitioningBy(
76
+ User::isActive,
77
+ Collectors.counting()
78
+ ));
79
+ ```
80
+
81
+ ## Aggregation Collectors
82
+
83
+ ```java
84
+ // Statistics
85
+ IntSummaryStatistics stats = orders.stream()
86
+ .collect(Collectors.summarizingInt(Order::getQuantity));
87
+ // stats.getSum(), stats.getAverage(), stats.getMax(), stats.getMin(), stats.getCount()
88
+
89
+ // Sum with mapping
90
+ int totalQuantity = orders.stream()
91
+ .collect(Collectors.summingInt(Order::getQuantity));
92
+
93
+ // Average
94
+ Double avgSalary = employees.stream()
95
+ .collect(Collectors.averagingDouble(Employee::getSalary));
96
+
97
+ // Max/Min
98
+ Optional<Employee> highest = employees.stream()
99
+ .collect(Collectors.maxBy(Comparator.comparing(Employee::getSalary)));
100
+ ```
101
+
102
+ ## Joining Collector
103
+
104
+ ```java
105
+ // Simple join
106
+ String csv = names.stream()
107
+ .collect(Collectors.joining(", "));
108
+
109
+ // With prefix and suffix
110
+ String json = items.stream()
111
+ .map(Item::toJson)
112
+ .collect(Collectors.joining(",\n", "[\n", "\n]"));
113
+ ```
114
+
115
+ ## Custom Collectors
116
+
117
+ ```java
118
+ // Collector.of pattern
119
+ Collector<Person, ?, ImmutableList<Person>> toImmutableList =
120
+ Collector.of(
121
+ ImmutableList::<Person>builder, // Supplier
122
+ ImmutableList.Builder::add, // Accumulator
123
+ (b1, b2) -> b1.addAll(b2.build()), // Combiner
124
+ ImmutableList.Builder::build // Finisher
125
+ );
126
+
127
+ // Using collectingAndThen for transformation
128
+ List<User> unmodifiable = users.stream()
129
+ .collect(Collectors.collectingAndThen(
130
+ Collectors.toList(),
131
+ Collections::unmodifiableList
132
+ ));
133
+
134
+ // Teeing collector (Java 12+) - two collectors at once
135
+ record MinMax(int min, int max) {}
136
+
137
+ MinMax result = numbers.stream()
138
+ .collect(Collectors.teeing(
139
+ Collectors.minBy(Comparator.naturalOrder()),
140
+ Collectors.maxBy(Comparator.naturalOrder()),
141
+ (min, max) -> new MinMax(
142
+ min.orElse(0),
143
+ max.orElse(0)
144
+ )
145
+ ));
146
+ ```
147
+
148
+ ## Filtering Collector (Java 9+)
149
+
150
+ ```java
151
+ // Filter within grouping
152
+ Map<Department, List<Employee>> seniorByDept = employees.stream()
153
+ .collect(Collectors.groupingBy(
154
+ Employee::getDepartment,
155
+ Collectors.filtering(
156
+ e -> e.getYearsOfService() > 5,
157
+ Collectors.toList()
158
+ )
159
+ ));
160
+
161
+ // vs filter before grouping (different semantics)
162
+ // filtering: includes all departments, even with empty lists
163
+ // filter: excludes departments with no matching employees
164
+ ```
165
+
166
+ ## FlatMapping Collector (Java 9+)
167
+
168
+ ```java
169
+ // FlatMap within grouping
170
+ Map<Author, Set<String>> tagsByAuthor = posts.stream()
171
+ .collect(Collectors.groupingBy(
172
+ Post::getAuthor,
173
+ Collectors.flatMapping(
174
+ post -> post.getTags().stream(),
175
+ Collectors.toSet()
176
+ )
177
+ ));
178
+ ```