@next-vibe/checker 1.0.11 → 1.0.13

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 (400) hide show
  1. package/.dist/bin/vibe-runtime.js +26 -22
  2. package/.dist/bin/vibe-runtime.js.map +5 -5
  3. package/.dist/oxlint-plugins/i18n.js +4 -0
  4. package/.dist/oxlint-plugins/i18n.js.map +1 -0
  5. package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
  6. package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
  7. package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
  8. package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
  9. package/check.config.ts +4 -12
  10. package/package.json +2 -9
  11. package/src/app/api/[locale]/LICENSE +674 -0
  12. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  13. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  14. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  15. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  16. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  17. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  18. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  19. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  20. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  21. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  22. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  23. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  24. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  25. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  26. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  27. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  28. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  29. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  30. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  31. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  32. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  33. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  34. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  35. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  36. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  37. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  38. package/src/app/api/[locale]/system/builder/enum.ts +78 -0
  39. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  40. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  41. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  42. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  43. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  44. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  45. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  46. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  47. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  48. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  49. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  50. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  51. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  52. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  53. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  54. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  55. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  56. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  57. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  58. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  59. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  60. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  61. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  62. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  67. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  68. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  69. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  70. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  71. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  72. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  73. package/src/app/api/[locale]/system/check/config/repository.ts +886 -0
  74. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  75. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  76. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  77. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  78. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  79. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  80. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  81. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  82. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  83. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  84. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  85. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  86. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  87. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  88. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  89. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  90. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  91. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  92. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  93. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  94. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  95. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  96. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  97. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  98. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  99. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  100. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  101. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  102. package/src/app/api/[locale]/system/check/test-project/bun.lock +532 -0
  103. package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
  104. package/src/app/api/[locale]/system/check/test-project/package.json +12 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  112. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  113. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  114. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  115. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  116. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  117. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  118. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +34 -0
  119. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  120. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  121. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  122. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  123. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  124. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  125. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  126. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  127. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  130. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  131. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  132. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  133. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  134. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  135. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  136. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  137. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  138. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  139. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  140. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  141. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  142. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  143. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  144. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  146. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  147. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  148. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  149. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  150. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  151. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  153. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  154. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  155. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  156. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  157. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  158. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  159. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  160. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  161. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  162. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  163. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  164. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  165. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  166. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  167. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  168. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  169. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  170. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  171. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  172. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  173. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  174. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  175. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  176. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  177. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  178. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  179. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  180. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  181. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  182. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  183. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  184. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  185. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  186. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  187. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  188. package/src/app/api/[locale]/system/help/route.ts +16 -0
  189. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  190. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  191. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  192. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  193. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  194. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  195. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  209. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  210. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  211. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  212. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  213. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  214. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  215. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  216. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  288. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  289. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  290. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  291. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  292. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  293. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  294. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  295. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  296. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  304. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  305. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  306. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  307. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  308. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  309. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  374. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  375. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  376. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  377. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  378. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  379. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  380. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  381. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  382. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  383. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  384. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  385. package/src/app/api/[locale]/user/enum.ts +64 -0
  386. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  387. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  388. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  389. package/src/app/api/[locale]/user/types.ts +118 -0
  390. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  391. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  392. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  393. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  394. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  395. package/src/app/api/i18n/de/index.ts +6 -0
  396. package/src/app/api/i18n/en/index.ts +5 -0
  397. package/src/app/api/i18n/pl/index.ts +5 -0
  398. package/src/app/i18n/de/index.ts +6 -0
  399. package/src/app/i18n/en/index.ts +5 -0
  400. package/src/app/i18n/pl/index.ts +5 -0
@@ -0,0 +1,583 @@
1
+ /**
2
+ * Oxlint JS Plugin: JSX Capitalization
3
+ *
4
+ * Enforces the use of capitalized JSX components from next-vibe-ui
5
+ * instead of lowercase HTML elements (div, p, a, etc.)
6
+ *
7
+ * Configuration is loaded from check.config.ts via the shared config loader.
8
+ *
9
+ * Supports:
10
+ * - Bun runtime (direct TypeScript)
11
+ * - Node.js runtime (compiled JavaScript)
12
+ * - NPM package installation
13
+ * - Local development
14
+ */
15
+
16
+ import type { JsxCapitalizationPluginConfig } from "../../../../config/types";
17
+ import type {
18
+ JSXIdentifier,
19
+ OxlintASTNode,
20
+ OxlintComment,
21
+ OxlintRuleContext,
22
+ } from "../../../types";
23
+ import type {
24
+ createPluginMessages,
25
+ loadPluginConfig,
26
+ } from "../../shared/config-loader";
27
+
28
+ /** JSXOpeningElement AST node */
29
+ interface JSXOpeningElement extends OxlintASTNode {
30
+ type: "JSXOpeningElement";
31
+ name?: OxlintASTNode;
32
+ attributes?: OxlintASTNode[];
33
+ selfClosing?: boolean;
34
+ }
35
+
36
+ // ============================================================
37
+ // Types
38
+ // ============================================================
39
+
40
+ /** Extended rule context with jsx-capitalization options */
41
+ interface JsxCapitalizationRuleContext extends OxlintRuleContext {
42
+ options?: JsxCapitalizationPluginConfig[];
43
+ getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
44
+ getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
45
+ getFilename?: () => string;
46
+ filename?: string;
47
+ sourceCode?: {
48
+ getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
49
+ getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
50
+ };
51
+ }
52
+
53
+ /** Element sets structure for use in rule */
54
+ interface ElementSets {
55
+ typography: Set<string>;
56
+ standalone: Set<string>;
57
+ svg: Set<string>;
58
+ image: Set<string>;
59
+ commonUi: Set<string>;
60
+ }
61
+
62
+ /** Default error messages (can be customized via config) */
63
+ interface JsxCapitalizationMessages {
64
+ anchorTag: string;
65
+ typographyElement: string;
66
+ standaloneElement: string;
67
+ svgElement: string;
68
+ imageElement: string;
69
+ commonUiElement: string;
70
+ genericElement: string;
71
+ }
72
+
73
+ // ============================================================
74
+ // Default Configuration
75
+ // ============================================================
76
+
77
+ const DEFAULT_CONFIG: JsxCapitalizationPluginConfig = {
78
+ excludedPaths: [],
79
+ excludedFilePatterns: [".email.tsx", ".test.tsx", ".spec.tsx"],
80
+ typographyElements: [
81
+ "p",
82
+ "span",
83
+ "h1",
84
+ "h2",
85
+ "h3",
86
+ "h4",
87
+ "h5",
88
+ "h6",
89
+ "strong",
90
+ "em",
91
+ "small",
92
+ "blockquote",
93
+ "code",
94
+ "pre",
95
+ ],
96
+ standaloneElements: [
97
+ "div",
98
+ "button",
99
+ "input",
100
+ "label",
101
+ "form",
102
+ "table",
103
+ "ul",
104
+ "ol",
105
+ "li",
106
+ ],
107
+ svgElements: [
108
+ "svg",
109
+ "path",
110
+ "circle",
111
+ "rect",
112
+ "line",
113
+ "polygon",
114
+ "polyline",
115
+ "ellipse",
116
+ "g",
117
+ ],
118
+ imageElements: ["img", "picture", "source", "video", "audio"],
119
+ commonUiElements: [
120
+ "nav",
121
+ "header",
122
+ "footer",
123
+ "main",
124
+ "section",
125
+ "article",
126
+ "aside",
127
+ ],
128
+ };
129
+
130
+ const DEFAULT_MESSAGES: JsxCapitalizationMessages = {
131
+ anchorTag:
132
+ 'Use platform-independent <Link> component instead of <a>. import { Link } from "next-vibe-ui/ui/link";',
133
+ typographyElement:
134
+ 'Use typography component <{capitalizedName}> instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/typography";',
135
+ standaloneElement:
136
+ 'Use platform-independent <{capitalizedName}> component instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/{elementName}";',
137
+ svgElement:
138
+ "SVG element <{elementName}> detected. For icons, use components from next-vibe-ui/ui/icons instead. For custom SVG, create platform-independent components using react-native-svg that work on both web and native.",
139
+ imageElement:
140
+ 'Use platform-independent <Image> component instead of <{elementName}>. import { Image } from "next-vibe-ui/ui/image";',
141
+ commonUiElement:
142
+ 'Use platform-independent <{capitalizedName}> component instead of <{elementName}>. import { {capitalizedName} } from "next-vibe-ui/ui/{elementName}";',
143
+ genericElement:
144
+ "Lowercase element <{elementName}> detected. Create platform-independent components: 1) Create next-vibe-ui/web/ui/{elementName}.tsx for web, 2) Create next-vibe-ui/native/ui/{elementName}.tsx for React Native, or 3) Use an existing component if available.",
145
+ };
146
+
147
+ // ============================================================
148
+ // Dynamic Import for Shared Loader
149
+ // ============================================================
150
+
151
+ // Plugin config loader (lazy loaded to handle various runtime environments)
152
+ let configLoader: {
153
+ loadPluginConfig: typeof loadPluginConfig;
154
+ createPluginMessages: typeof createPluginMessages;
155
+ } | null = null;
156
+
157
+ let cachedConfig: JsxCapitalizationPluginConfig | null = null;
158
+ let cachedMessages: JsxCapitalizationMessages | null = null;
159
+
160
+ /**
161
+ * Load the shared config loader module
162
+ * Uses dynamic require to handle different runtime environments
163
+ */
164
+ function getConfigLoader(): typeof configLoader {
165
+ if (configLoader) {
166
+ return configLoader;
167
+ }
168
+
169
+ try {
170
+ // eslint-disable-next-line @typescript-eslint/no-require-imports -- Plugin context requires sync loading
171
+ configLoader = require("../../shared/config-loader") as typeof configLoader;
172
+ return configLoader;
173
+ } catch {
174
+ // Shared loader not available, will use fallback
175
+ return null;
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Load jsx-capitalization config using shared loader or fallback
181
+ */
182
+ function loadJsxCapitalizationConfig(): JsxCapitalizationPluginConfig {
183
+ if (cachedConfig !== null) {
184
+ return cachedConfig;
185
+ }
186
+
187
+ const loader = getConfigLoader();
188
+
189
+ if (loader) {
190
+ const result = loader.loadPluginConfig(
191
+ "oxlint-plugin-jsx-capitalization/jsx-capitalization",
192
+ DEFAULT_CONFIG,
193
+ );
194
+ cachedConfig = result.config ?? DEFAULT_CONFIG;
195
+ } else {
196
+ // Fallback: try direct require of check.config.ts
197
+ cachedConfig = loadConfigFallback();
198
+ }
199
+
200
+ return cachedConfig;
201
+ }
202
+
203
+ /**
204
+ * Fallback config loading when shared loader is not available
205
+ */
206
+ function loadConfigFallback(): JsxCapitalizationPluginConfig {
207
+ try {
208
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment -- Plugin fallback requires dynamic loading
209
+ const config = require(`${process.cwd()}/check.config.ts`);
210
+ const checkConfig = config.default ?? config;
211
+ const exported =
212
+ typeof checkConfig === "function" ? checkConfig() : checkConfig;
213
+
214
+ const ruleConfig =
215
+ exported?.oxlint?.rules?.[
216
+ "oxlint-plugin-jsx-capitalization/jsx-capitalization"
217
+ ];
218
+ if (Array.isArray(ruleConfig) && ruleConfig[1]) {
219
+ return ruleConfig[1] as JsxCapitalizationPluginConfig;
220
+ }
221
+ } catch {
222
+ // Config not available
223
+ }
224
+
225
+ return DEFAULT_CONFIG;
226
+ }
227
+
228
+ /**
229
+ * Get error messages (supports customization via config)
230
+ */
231
+ function getMessages(): JsxCapitalizationMessages {
232
+ if (cachedMessages !== null) {
233
+ return cachedMessages;
234
+ }
235
+ cachedMessages = DEFAULT_MESSAGES;
236
+ return cachedMessages;
237
+ }
238
+
239
+ /**
240
+ * Format a message with value substitution
241
+ */
242
+ function formatMessage(
243
+ template: string,
244
+ elementName: string,
245
+ capitalizedName: string,
246
+ ): string {
247
+ return template
248
+ .replaceAll("{elementName}", elementName)
249
+ .replaceAll("{capitalizedName}", capitalizedName);
250
+ }
251
+
252
+ // ============================================================
253
+ // Helper Functions
254
+ // ============================================================
255
+
256
+ /**
257
+ * Check if a JSX element name is lowercase (indicating an HTML element)
258
+ * In React/JSX, lowercase names are HTML elements, uppercase names are components
259
+ */
260
+ function isLowercaseElement(elementName: string): boolean {
261
+ const firstChar = elementName.charAt(0);
262
+ return (
263
+ firstChar === firstChar.toLowerCase() &&
264
+ firstChar !== firstChar.toUpperCase()
265
+ );
266
+ }
267
+
268
+ /**
269
+ * Check if the current file is in the excluded path or matches excluded patterns
270
+ */
271
+ function isExcludedPath(
272
+ context: JsxCapitalizationRuleContext,
273
+ excludedPaths: readonly string[],
274
+ excludedFilePatterns: readonly string[],
275
+ ): boolean {
276
+ let filename = "";
277
+
278
+ // Try to get filename from context
279
+ if (typeof context.getFilename === "function") {
280
+ filename = context.getFilename();
281
+ } else if (typeof context.filename === "string") {
282
+ filename = context.filename;
283
+ }
284
+
285
+ if (!filename) {
286
+ return false;
287
+ }
288
+
289
+ // Normalize path separators
290
+ const normalizedPath = filename.replaceAll("\\", "/");
291
+
292
+ // Check if file is in any excluded directory
293
+ for (const excludedPath of excludedPaths) {
294
+ if (normalizedPath.includes(excludedPath)) {
295
+ return true;
296
+ }
297
+ }
298
+
299
+ // Check if file matches any excluded pattern
300
+ for (const pattern of excludedFilePatterns) {
301
+ if (normalizedPath.includes(pattern) || normalizedPath.endsWith(pattern)) {
302
+ return true;
303
+ }
304
+ }
305
+
306
+ return false;
307
+ }
308
+
309
+ /**
310
+ * Check if the node has a disable comment
311
+ */
312
+ function hasDisableComment(
313
+ context: JsxCapitalizationRuleContext,
314
+ node: OxlintASTNode,
315
+ ): boolean {
316
+ const getComments =
317
+ context.getCommentsBefore ?? context.sourceCode?.getCommentsBefore;
318
+ if (typeof getComments !== "function") {
319
+ return false;
320
+ }
321
+
322
+ try {
323
+ const comments = getComments(node);
324
+ if (!comments || !Array.isArray(comments)) {
325
+ return false;
326
+ }
327
+
328
+ for (const comment of comments) {
329
+ if (!comment || typeof comment.value !== "string") {
330
+ continue;
331
+ }
332
+ const commentText = comment.value.trim();
333
+ if (
334
+ (commentText.includes("eslint-disable-next-line") ||
335
+ commentText.includes("oxlint-disable-next-line")) &&
336
+ (commentText.includes("jsx-capitalization") ||
337
+ commentText.includes("no-lowercase-jsx"))
338
+ ) {
339
+ return true;
340
+ }
341
+ }
342
+ } catch {
343
+ return false;
344
+ }
345
+
346
+ return false;
347
+ }
348
+
349
+ /**
350
+ * Get the element name from JSX opening element
351
+ */
352
+ function getElementName(node: JSXOpeningElement): string | null {
353
+ const name = node.name;
354
+
355
+ if (!name) {
356
+ return null;
357
+ }
358
+
359
+ // Handle simple identifier (e.g., <div>)
360
+ if (name.type === "JSXIdentifier") {
361
+ return (name as JSXIdentifier).name;
362
+ }
363
+
364
+ // Handle member expression (e.g., <Foo.Bar>) - not applicable for HTML elements
365
+ if (name.type === "JSXMemberExpression") {
366
+ return null;
367
+ }
368
+
369
+ // Handle namespaced name (e.g., <svg:path>) - not applicable for HTML elements
370
+ if (name.type === "JSXNamespacedName") {
371
+ return null;
372
+ }
373
+
374
+ return null;
375
+ }
376
+
377
+ /**
378
+ * Capitalize the first letter of a string
379
+ */
380
+ function capitalize(str: string): string {
381
+ return str.charAt(0).toUpperCase() + str.slice(1);
382
+ }
383
+
384
+ /**
385
+ * Get element sets from rule options or config file
386
+ */
387
+ function getElementSets(context: JsxCapitalizationRuleContext): ElementSets {
388
+ // First try rule options (primary - passed via oxlint config)
389
+ const ruleOptions = context.options?.[0];
390
+ if (ruleOptions) {
391
+ return {
392
+ typography: new Set(ruleOptions.typographyElements ?? []),
393
+ standalone: new Set(ruleOptions.standaloneElements ?? []),
394
+ svg: new Set(ruleOptions.svgElements ?? []),
395
+ image: new Set(ruleOptions.imageElements ?? []),
396
+ commonUi: new Set(ruleOptions.commonUiElements ?? []),
397
+ };
398
+ }
399
+
400
+ // Fallback to config file (for direct plugin usage)
401
+ const config = loadJsxCapitalizationConfig();
402
+ return {
403
+ typography: new Set(config.typographyElements ?? []),
404
+ standalone: new Set(config.standaloneElements ?? []),
405
+ svg: new Set(config.svgElements ?? []),
406
+ image: new Set(config.imageElements ?? []),
407
+ commonUi: new Set(config.commonUiElements ?? []),
408
+ };
409
+ }
410
+
411
+ /**
412
+ * Get excluded paths from rule options or config file
413
+ */
414
+ function getExcludedPaths(context: JsxCapitalizationRuleContext): {
415
+ excludedPaths: readonly string[];
416
+ excludedFilePatterns: readonly string[];
417
+ } {
418
+ // First try rule options
419
+ const ruleOptions = context.options?.[0];
420
+ if (ruleOptions) {
421
+ return {
422
+ excludedPaths: ruleOptions.excludedPaths ?? [],
423
+ excludedFilePatterns: ruleOptions.excludedFilePatterns ?? [],
424
+ };
425
+ }
426
+
427
+ // Fallback to config file
428
+ const config = loadJsxCapitalizationConfig();
429
+ return {
430
+ excludedPaths: config.excludedPaths ?? [],
431
+ excludedFilePatterns: config.excludedFilePatterns ?? [],
432
+ };
433
+ }
434
+
435
+ /**
436
+ * Get error message for lowercase JSX element with smart import suggestions
437
+ */
438
+ function getErrorMessage(
439
+ elementName: string,
440
+ elementSets: ElementSets,
441
+ ): string {
442
+ const capitalizedName = capitalize(elementName);
443
+ const messages = getMessages();
444
+
445
+ // Special case: anchor tags should use Link component
446
+ if (elementName === "a") {
447
+ return messages.anchorTag;
448
+ }
449
+
450
+ // Typography elements from typography.tsx
451
+ if (elementSets.typography.has(elementName)) {
452
+ return formatMessage(
453
+ messages.typographyElement,
454
+ elementName,
455
+ capitalizedName,
456
+ );
457
+ }
458
+
459
+ // Standalone UI elements with their own files
460
+ if (elementSets.standalone.has(elementName)) {
461
+ return formatMessage(
462
+ messages.standaloneElement,
463
+ elementName,
464
+ capitalizedName,
465
+ );
466
+ }
467
+
468
+ // SVG elements - suggest using icons instead
469
+ if (elementSets.svg.has(elementName)) {
470
+ return formatMessage(messages.svgElement, elementName, capitalizedName);
471
+ }
472
+
473
+ // Image elements
474
+ if (elementSets.image.has(elementName)) {
475
+ return formatMessage(messages.imageElement, elementName, capitalizedName);
476
+ }
477
+
478
+ // Common UI elements with known wrappers
479
+ if (elementSets.commonUi.has(elementName)) {
480
+ return formatMessage(
481
+ messages.commonUiElement,
482
+ elementName,
483
+ capitalizedName,
484
+ );
485
+ }
486
+
487
+ // Generic/unknown elements - guide to create platform-specific components
488
+ return formatMessage(messages.genericElement, elementName, capitalizedName);
489
+ }
490
+
491
+ // ============================================================
492
+ // Rule Implementation
493
+ // ============================================================
494
+
495
+ const jsxCapitalizationRule = {
496
+ meta: {
497
+ type: "problem",
498
+ docs: {
499
+ description:
500
+ "Enforces the use of capitalized JSX components instead of lowercase HTML elements",
501
+ category: "Best Practices",
502
+ recommended: true,
503
+ },
504
+ schema: [
505
+ {
506
+ type: "object",
507
+ properties: {
508
+ excludedPaths: { type: "array", items: { type: "string" } },
509
+ excludedFilePatterns: { type: "array", items: { type: "string" } },
510
+ typographyElements: { type: "array", items: { type: "string" } },
511
+ standaloneElements: { type: "array", items: { type: "string" } },
512
+ svgElements: { type: "array", items: { type: "string" } },
513
+ imageElements: { type: "array", items: { type: "string" } },
514
+ commonUiElements: { type: "array", items: { type: "string" } },
515
+ },
516
+ },
517
+ ],
518
+ },
519
+ create(
520
+ context: JsxCapitalizationRuleContext,
521
+ ): Record<string, (node: OxlintASTNode) => void> {
522
+ // Load config from check.config.ts (single source of truth)
523
+ // Falls back to rule options if config file not available
524
+ const { excludedPaths, excludedFilePatterns } = getExcludedPaths(context);
525
+ const elementSets = getElementSets(context);
526
+
527
+ // Check if file is in excluded path
528
+ const isExcluded = isExcludedPath(
529
+ context,
530
+ excludedPaths,
531
+ excludedFilePatterns,
532
+ );
533
+
534
+ return {
535
+ JSXOpeningElement(node: OxlintASTNode): void {
536
+ // Skip if file is in excluded directory
537
+ if (isExcluded) {
538
+ return;
539
+ }
540
+
541
+ // Skip if has disable comment
542
+ if (hasDisableComment(context, node)) {
543
+ return;
544
+ }
545
+
546
+ const openingElement = node as JSXOpeningElement;
547
+ const elementName = getElementName(openingElement);
548
+
549
+ // Skip if we couldn't get the element name
550
+ if (!elementName) {
551
+ return;
552
+ }
553
+
554
+ // Check if it's a lowercase element (HTML element that should be capitalized)
555
+ if (isLowercaseElement(elementName)) {
556
+ context.report({
557
+ node,
558
+ message: getErrorMessage(elementName, elementSets),
559
+ });
560
+ }
561
+ },
562
+ };
563
+ },
564
+ };
565
+
566
+ // ============================================================
567
+ // Plugin Export
568
+ // ============================================================
569
+
570
+ export default {
571
+ meta: {
572
+ name: "oxlint-plugin-jsx-capitalization",
573
+ version: "1.0.0",
574
+ },
575
+ rules: {
576
+ "jsx-capitalization": jsxCapitalizationRule,
577
+ },
578
+ };
579
+
580
+ // Named exports for direct access
581
+ export { DEFAULT_CONFIG as defaultConfig };
582
+ export { DEFAULT_MESSAGES as defaultMessages };
583
+ export type { JsxCapitalizationMessages, JsxCapitalizationPluginConfig };