@next-vibe/checker 1.0.11 → 1.0.12

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 (394) hide show
  1. package/.dist/bin/vibe-runtime.js +10 -19
  2. package/.dist/bin/vibe-runtime.js.map +3 -3
  3. package/check.config.ts +4 -4
  4. package/package.json +2 -9
  5. package/src/app/api/[locale]/LICENSE +674 -0
  6. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  7. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  8. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  9. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  10. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  11. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  12. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  13. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  14. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  15. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  16. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  17. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  18. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  19. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  20. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  21. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  22. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  23. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  24. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  25. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  26. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  27. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  28. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  29. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  30. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  31. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  32. package/src/app/api/[locale]/system/builder/enum.ts +77 -0
  33. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  34. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  35. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  36. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  37. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  38. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  39. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  40. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  41. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  42. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  43. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  44. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  45. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  46. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  47. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  48. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  49. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  50. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  51. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  52. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  53. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  54. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  55. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  56. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  57. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  58. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  59. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  60. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  61. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  62. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  67. package/src/app/api/[locale]/system/check/config/repository.ts +819 -0
  68. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  69. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  70. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  71. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  72. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  73. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  74. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  75. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  76. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  77. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  78. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  79. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  80. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  81. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  82. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  83. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  84. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  85. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  86. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  87. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  88. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  89. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  90. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  91. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  92. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  93. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  94. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  95. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  96. package/src/app/api/[locale]/system/check/test-project/bun.lock +449 -0
  97. package/src/app/api/[locale]/system/check/test-project/check.config.ts +989 -0
  98. package/src/app/api/[locale]/system/check/test-project/package.json +20 -0
  99. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  100. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  101. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  102. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  103. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  104. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  112. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +38 -0
  113. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  114. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  115. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  116. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  117. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  118. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  119. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  120. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  121. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  122. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  123. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  124. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  125. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  126. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  127. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  130. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  131. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  132. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  133. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  134. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  135. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  136. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  137. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  138. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  139. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  140. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  141. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  142. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  143. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  144. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  146. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  147. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  148. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  149. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  150. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  151. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  153. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  154. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  155. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  156. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  157. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  158. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  159. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  160. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  161. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  162. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  163. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  164. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  165. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  166. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  167. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  168. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  169. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  170. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  171. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  172. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  173. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  174. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  175. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  176. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  177. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  178. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  179. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  180. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  181. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  182. package/src/app/api/[locale]/system/help/route.ts +16 -0
  183. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  184. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  185. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  186. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  187. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  188. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  189. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  190. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  191. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  192. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  193. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  194. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  195. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  209. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  210. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  211. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  212. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  213. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  214. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  215. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  216. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  288. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  289. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  290. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  291. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  292. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  293. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  294. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  295. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  296. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  304. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  305. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  306. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  307. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  308. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  309. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  374. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  375. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  376. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  377. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  378. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  379. package/src/app/api/[locale]/user/enum.ts +64 -0
  380. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  381. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  382. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  383. package/src/app/api/[locale]/user/types.ts +118 -0
  384. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  385. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  386. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  387. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  388. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  389. package/src/app/api/i18n/de/index.ts +6 -0
  390. package/src/app/api/i18n/en/index.ts +5 -0
  391. package/src/app/api/i18n/pl/index.ts +5 -0
  392. package/src/app/i18n/de/index.ts +6 -0
  393. package/src/app/i18n/en/index.ts +5 -0
  394. package/src/app/i18n/pl/index.ts +5 -0
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Oxlint JS Plugin: i18n No Literal String
3
+ *
4
+ * Detects untranslated literal strings in JSX and code.
5
+ * Configuration is loaded from check.config.ts via the shared config loader.
6
+ *
7
+ * Supports:
8
+ * - Bun runtime (direct TypeScript)
9
+ * - Node.js runtime (compiled JavaScript)
10
+ * - NPM package installation
11
+ * - Local development
12
+ */
13
+
14
+ import type { I18nPluginConfig } from "../../../../config/types";
15
+ import type {
16
+ JSXAttribute,
17
+ JSXIdentifier,
18
+ JSXLiteral,
19
+ OxlintASTNode,
20
+ OxlintRuleContext,
21
+ } from "../../../types";
22
+ import type {
23
+ createPluginMessages,
24
+ loadPluginConfig,
25
+ } from "../../shared/config-loader";
26
+
27
+ // ============================================================
28
+ // Types
29
+ // ============================================================
30
+
31
+ /** Extended rule context with i18n options */
32
+ interface I18nRuleContext extends OxlintRuleContext {
33
+ options?: I18nPluginConfig[];
34
+ }
35
+
36
+ /** Default error messages (can be customized via config) */
37
+ interface I18nMessages {
38
+ jsxText: string;
39
+ jsxExpression: string;
40
+ jsxAttribute: string;
41
+ }
42
+
43
+ // ============================================================
44
+ // Default Configuration
45
+ // ============================================================
46
+
47
+ const DEFAULT_CONFIG: I18nPluginConfig = {
48
+ words: {
49
+ exclude: [
50
+ // Punctuation and symbols only
51
+ String.raw`^[\[\]{}—<>•+%#@.:_*;,/()\-]+$`,
52
+ // Whitespace only
53
+ String.raw`^\s+$`,
54
+ // Numbers only
55
+ String.raw`^\d+$`,
56
+ // File extensions
57
+ String.raw`^[^\s]+\.[^\s]+$`,
58
+ // URLs and paths
59
+ String.raw`^(?:https?://|/)[^\s]*$`,
60
+ ],
61
+ },
62
+ "jsx-attributes": {
63
+ exclude: [
64
+ "className",
65
+ "href",
66
+ "src",
67
+ "alt",
68
+ "id",
69
+ "name",
70
+ "type",
71
+ "value",
72
+ "key",
73
+ "ref",
74
+ "*ClassName",
75
+ "*Style",
76
+ "*Variant",
77
+ "*Size",
78
+ "*Color",
79
+ ],
80
+ },
81
+ "object-properties": {
82
+ exclude: [],
83
+ },
84
+ };
85
+
86
+ const DEFAULT_MESSAGES: I18nMessages = {
87
+ jsxText: 'Literal string "{value}" should be translated using i18n.',
88
+ jsxExpression:
89
+ 'Literal string "{value}" in JSX expression should be translated.',
90
+ jsxAttribute:
91
+ 'Literal string "{value}" in JSX attribute should be translated.',
92
+ };
93
+
94
+ // ============================================================
95
+ // Dynamic Import for Shared Loader
96
+ // ============================================================
97
+
98
+ // Plugin config loader (lazy loaded to handle various runtime environments)
99
+ let configLoader: {
100
+ loadPluginConfig: typeof loadPluginConfig;
101
+ createPluginMessages: typeof createPluginMessages;
102
+ } | null = null;
103
+
104
+ let cachedConfig: I18nPluginConfig | null = null;
105
+ let cachedMessages: I18nMessages | null = null;
106
+
107
+ /**
108
+ * Load the shared config loader module
109
+ * Uses dynamic require to handle different runtime environments
110
+ */
111
+ function getConfigLoader(): typeof configLoader {
112
+ if (configLoader) {
113
+ return configLoader;
114
+ }
115
+
116
+ try {
117
+ // eslint-disable-next-line @typescript-eslint/no-require-imports -- Plugin context requires sync loading
118
+ configLoader = require("../../shared/config-loader") as typeof configLoader;
119
+ return configLoader;
120
+ } catch {
121
+ // Shared loader not available, will use fallback
122
+ return null;
123
+ }
124
+ }
125
+
126
+ /**
127
+ * Load i18n config using shared loader or fallback
128
+ */
129
+ function loadI18nConfig(): I18nPluginConfig {
130
+ if (cachedConfig !== null) {
131
+ return cachedConfig;
132
+ }
133
+
134
+ const loader = getConfigLoader();
135
+
136
+ if (loader) {
137
+ const result = loader.loadPluginConfig(
138
+ "oxlint-plugin-i18n/no-literal-string",
139
+ DEFAULT_CONFIG,
140
+ );
141
+ cachedConfig = result.config ?? DEFAULT_CONFIG;
142
+ } else {
143
+ // Fallback: try direct require of check.config.ts
144
+ cachedConfig = loadConfigFallback();
145
+ }
146
+
147
+ return cachedConfig;
148
+ }
149
+
150
+ /**
151
+ * Fallback config loading when shared loader is not available
152
+ */
153
+ function loadConfigFallback(): I18nPluginConfig {
154
+ try {
155
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment -- Plugin fallback requires dynamic loading
156
+ const config = require(`${process.cwd()}/check.config.ts`);
157
+ const checkConfig = config.default ?? config;
158
+ const exported =
159
+ typeof checkConfig === "function" ? checkConfig() : checkConfig;
160
+
161
+ const ruleConfig =
162
+ exported?.oxlint?.rules?.["oxlint-plugin-i18n/no-literal-string"];
163
+ if (Array.isArray(ruleConfig) && ruleConfig[1]) {
164
+ return ruleConfig[1] as I18nPluginConfig;
165
+ }
166
+ } catch {
167
+ // Config not available
168
+ }
169
+
170
+ return DEFAULT_CONFIG;
171
+ }
172
+
173
+ /**
174
+ * Get error messages (supports customization via config)
175
+ */
176
+ function getMessages(): I18nMessages {
177
+ if (cachedMessages !== null) {
178
+ return cachedMessages;
179
+ }
180
+ cachedMessages = DEFAULT_MESSAGES;
181
+ return cachedMessages;
182
+ }
183
+
184
+ /**
185
+ * Format a message with value substitution
186
+ */
187
+ function formatMessage(template: string, value: string): string {
188
+ return template.replaceAll("{value}", value);
189
+ }
190
+
191
+ // ============================================================
192
+ // Rule Implementation
193
+ // ============================================================
194
+
195
+ const noLiteralStringRule = {
196
+ meta: {
197
+ type: "problem",
198
+ docs: {
199
+ description: "Disallow literal strings that should be internationalized",
200
+ category: "Best Practices",
201
+ recommended: true,
202
+ },
203
+ schema: [
204
+ {
205
+ type: "object",
206
+ properties: {
207
+ words: {
208
+ type: "object",
209
+ properties: {
210
+ exclude: { type: "array", items: { type: "string" } },
211
+ },
212
+ },
213
+ "jsx-attributes": {
214
+ type: "object",
215
+ properties: {
216
+ exclude: { type: "array", items: { type: "string" } },
217
+ },
218
+ },
219
+ "object-properties": {
220
+ type: "object",
221
+ properties: {
222
+ exclude: { type: "array", items: { type: "string" } },
223
+ },
224
+ },
225
+ },
226
+ },
227
+ ],
228
+ },
229
+ create(
230
+ context: I18nRuleContext,
231
+ ): Record<string, (node: OxlintASTNode) => void> {
232
+ // Load config from check.config.ts (single source of truth)
233
+ // Falls back to rule options if config file not available
234
+ const configFromFile = loadI18nConfig();
235
+ const ruleOptions = context.options?.[0] ?? {};
236
+
237
+ // Merge: rule options override file config
238
+ const options: I18nPluginConfig = {
239
+ ...configFromFile,
240
+ ...ruleOptions,
241
+ words: {
242
+ ...configFromFile.words,
243
+ ...ruleOptions.words,
244
+ },
245
+ "jsx-attributes": {
246
+ ...configFromFile["jsx-attributes"],
247
+ ...ruleOptions["jsx-attributes"],
248
+ },
249
+ };
250
+
251
+ const messages = getMessages();
252
+
253
+ // Convert string patterns to RegExp with Unicode support
254
+ const wordExclusionPatterns = (options.words?.exclude ?? []).map(
255
+ (pattern: string) => new RegExp(pattern, "u"),
256
+ );
257
+ const excludedAttributes = options["jsx-attributes"]?.exclude ?? [];
258
+
259
+ // Helper: Check if a string should be excluded
260
+ const shouldExcludeString = (value: string): boolean => {
261
+ if (!value || typeof value !== "string") {
262
+ return true;
263
+ }
264
+
265
+ // Check all word exclusion patterns
266
+ for (const pattern of wordExclusionPatterns) {
267
+ if (pattern.test(value)) {
268
+ return true;
269
+ }
270
+ }
271
+
272
+ return false;
273
+ };
274
+
275
+ // Helper: Check if JSX attribute is excluded
276
+ const isExcludedAttribute = (attrName: string): boolean => {
277
+ return excludedAttributes.some((excluded: string) => {
278
+ if (excluded.startsWith("*")) {
279
+ return attrName.endsWith(excluded.slice(1));
280
+ }
281
+ return attrName === excluded;
282
+ });
283
+ };
284
+
285
+ return {
286
+ // JSX Text nodes
287
+ JSXText(node: OxlintASTNode): void {
288
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- AST node parsing: Node values from the parser are unknown until runtime type checking
289
+ const value = (node as { value?: unknown }).value;
290
+ if (typeof value !== "string") {
291
+ return;
292
+ }
293
+ const trimmed = value.trim();
294
+
295
+ if (trimmed && !shouldExcludeString(trimmed)) {
296
+ context.report({
297
+ node,
298
+ message: formatMessage(messages.jsxText, trimmed),
299
+ });
300
+ }
301
+ },
302
+
303
+ // String literals in JSX expressions
304
+ "JSXExpressionContainer > Literal"(node: OxlintASTNode): void {
305
+ const value = (node as JSXLiteral).value;
306
+ if (typeof value === "string" && !shouldExcludeString(value)) {
307
+ context.report({
308
+ node,
309
+ message: formatMessage(messages.jsxExpression, value),
310
+ });
311
+ }
312
+ },
313
+
314
+ // JSX Attribute values
315
+ JSXAttribute(node: OxlintASTNode): void {
316
+ const attrNode = node as JSXAttribute;
317
+ const nameNode = attrNode.name;
318
+
319
+ if (!nameNode) {
320
+ return;
321
+ }
322
+
323
+ // Get the attribute name string
324
+ const attrName: string =
325
+ (nameNode as JSXIdentifier).name ?? String(nameNode);
326
+
327
+ // Skip ALL excluded attributes
328
+ if (isExcludedAttribute(attrName)) {
329
+ return;
330
+ }
331
+
332
+ // For non-excluded attributes, check if the value is a literal string
333
+ const valueNode = attrNode.value;
334
+ if (!valueNode) {
335
+ return;
336
+ }
337
+
338
+ if (valueNode.type === "Literal") {
339
+ const literalValue = (valueNode as JSXLiteral).value;
340
+ if (
341
+ typeof literalValue === "string" &&
342
+ !shouldExcludeString(literalValue)
343
+ ) {
344
+ context.report({
345
+ node: valueNode,
346
+ message: formatMessage(messages.jsxAttribute, literalValue),
347
+ });
348
+ }
349
+ }
350
+ },
351
+ };
352
+ },
353
+ };
354
+
355
+ // ============================================================
356
+ // Plugin Export
357
+ // ============================================================
358
+
359
+ export default {
360
+ meta: {
361
+ name: "oxlint-plugin-i18n",
362
+ version: "1.0.0",
363
+ },
364
+ rules: {
365
+ "no-literal-string": noLiteralStringRule,
366
+ },
367
+ };
368
+
369
+ // Named exports for direct access
370
+ export { DEFAULT_CONFIG as defaultConfig };
371
+ export { DEFAULT_MESSAGES as defaultMessages };
372
+ export type { I18nMessages, I18nPluginConfig };
@@ -0,0 +1,246 @@
1
+ # oxlint-plugin-jsx-capitalization
2
+
3
+ Oxlint plugin that enforces the use of capitalized JSX components from `next-vibe-ui` instead of lowercase HTML elements.
4
+
5
+ ## Features
6
+
7
+ - ✅ Detects lowercase JSX elements (div, p, a, button, etc.)
8
+ - ✅ Provides helpful error messages with suggested imports
9
+ - ✅ Automatically excludes files in `/src/packages/next-vibe-ui/web/` directory
10
+ - ✅ Supports disable comments
11
+
12
+ ## Installation
13
+
14
+ This plugin is part of the monorepo and is built automatically.
15
+
16
+ ```bash
17
+ npm run build
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ The plugin is configured in the oxlint configuration file:
23
+
24
+ ```json
25
+ {
26
+ "jsPlugins": [
27
+ "oxlint-plugin-jsx-capitalization"
28
+ ],
29
+ "rules": {
30
+ "oxlint-plugin-jsx-capitalization/jsx-capitalization": "error"
31
+ }
32
+ }
33
+ ```
34
+
35
+ ## Error Examples
36
+
37
+ ### Common UI Components
38
+
39
+ #### ❌ Bad
40
+ ```tsx
41
+ function MyComponent() {
42
+ return <div>Hello World</div>;
43
+ }
44
+ ```
45
+
46
+ **Error message:**
47
+ ```
48
+ Use platform-independent <Div> component instead of <div>.
49
+ import { Div } from "next-vibe-ui/ui/div";
50
+ ```
51
+
52
+ #### ✅ Good
53
+ ```tsx
54
+ import { Div } from "next-vibe-ui/ui/div";
55
+
56
+ function MyComponent() {
57
+ return <Div>Hello World</Div>;
58
+ }
59
+ ```
60
+
61
+ ### Typography Components
62
+
63
+ #### ❌ Bad
64
+ ```tsx
65
+ function Article() {
66
+ return (
67
+ <>
68
+ <h2>Title</h2>
69
+ <p>Paragraph text</p>
70
+ </>
71
+ );
72
+ }
73
+ ```
74
+
75
+ **Error messages:**
76
+ ```
77
+ Use typography component <H2> instead of <h2>.
78
+ import { H2 } from "next-vibe-ui/ui/typography";
79
+
80
+ Use typography component <P> instead of <p>.
81
+ import { P } from "next-vibe-ui/ui/typography";
82
+ ```
83
+
84
+ #### ✅ Good
85
+ ```tsx
86
+ import { H2, P } from "next-vibe-ui/ui/typography";
87
+
88
+ function Article() {
89
+ return (
90
+ <>
91
+ <H2>Title</H2>
92
+ <P>Paragraph text</P>
93
+ </>
94
+ );
95
+ }
96
+ ```
97
+
98
+ ### Image Components
99
+
100
+ #### ❌ Bad
101
+ ```tsx
102
+ function Avatar() {
103
+ return <img src="/avatar.png" alt="User" />;
104
+ }
105
+ ```
106
+
107
+ **Error message:**
108
+ ```
109
+ Use platform-independent <Image> component instead of <img>.
110
+ import { Image } from "next-vibe-ui/ui/image";
111
+ ```
112
+
113
+ #### ✅ Good
114
+ ```tsx
115
+ import { Image } from "next-vibe-ui/ui/image";
116
+
117
+ function Avatar() {
118
+ return <Image src="/avatar.png" alt="User" />;
119
+ }
120
+ ```
121
+
122
+ ### SVG Elements
123
+
124
+ #### ❌ Bad
125
+ ```tsx
126
+ function Icon() {
127
+ return (
128
+ <svg viewBox="0 0 24 24">
129
+ <path d="M12 2L2 7v10l10 5 10-5V7L12 2z" />
130
+ </svg>
131
+ );
132
+ }
133
+ ```
134
+
135
+ **Error message:**
136
+ ```
137
+ SVG element <svg> detected. For icons, use components from
138
+ next-vibe-ui/ui/icons instead. For custom SVG, create
139
+ platform-independent components using react-native-svg that
140
+ work on both web and native.
141
+ ```
142
+
143
+ #### ✅ Good
144
+ ```tsx
145
+ // Option 1: Use existing icon components
146
+ import { CheckIcon } from "next-vibe-ui/ui/icons/Check";
147
+
148
+ function Success() {
149
+ return <CheckIcon />;
150
+ }
151
+
152
+ // Option 2: Create custom SVG component with react-native-svg
153
+ import Svg, { Path } from "react-native-svg";
154
+
155
+ function CustomIcon() {
156
+ return (
157
+ <Svg viewBox="0 0 24 24">
158
+ <Path d="M12 2L2 7v10l10 5 10-5V7L12 2z" />
159
+ </Svg>
160
+ );
161
+ }
162
+ ```
163
+
164
+ ## Excluded Paths
165
+
166
+ Files in the following directory are automatically excluded:
167
+ - `/src/packages/next-vibe-ui/web/`
168
+
169
+ ## Disable Comments
170
+
171
+ You can disable the rule for specific lines using comments:
172
+
173
+ ```tsx
174
+ // eslint-disable-next-line oxlint-plugin-jsx-capitalization/jsx-capitalization
175
+ <div>This is allowed</div>
176
+
177
+ // oxlint-disable-next-line jsx-capitalization
178
+ <p>This is also allowed</p>
179
+ ```
180
+
181
+ ## Element Categories
182
+
183
+ The plugin checks for **ALL lowercase JSX elements** and provides context-specific error messages:
184
+
185
+ ### 1. Typography Components
186
+ Import from `next-vibe-ui/ui/typography`:
187
+ - **Headings:** h1, h2, h3, h4 → H1, H2, H3, H4
188
+ - **Text:** p → P
189
+ - **Quotes:** blockquote → BlockQuote
190
+ - **Code:** code → Code
191
+
192
+ ### 2. Standalone UI Components
193
+ Import individually from `next-vibe-ui/ui/{component}`:
194
+ - **Text:** span → Span (from `next-vibe-ui/ui/span`)
195
+ - **Code blocks:** pre → Pre (from `next-vibe-ui/ui/pre`)
196
+
197
+ ### 3. Common UI Components
198
+ Import from `next-vibe-ui/ui/{element}`:
199
+ - **Containers:** div, section, article, aside, header, footer, main, nav
200
+ - **Interactive:** button, input, textarea, select, label, form
201
+ - **Lists:** ul, ol, li
202
+ - **Tables:** table, thead, tbody, tr, th, td
203
+ - **Links:** link
204
+ - **And many more...**
205
+
206
+ ### 4. Image Components
207
+ Import from `next-vibe-ui/ui/image`:
208
+ - **Images:** img, picture → Image
209
+
210
+ ### 5. SVG Elements
211
+ **Suggests using icon components or react-native-svg:**
212
+ - svg, path, circle, rect, polygon, etc.
213
+ - For icons: Use components from `next-vibe-ui/ui/icons`
214
+ - For custom SVG: Use `react-native-svg` for platform independence
215
+
216
+ ### 6. Unknown Elements
217
+ For any element without a known wrapper component, the plugin suggests:
218
+ 1. Creating `next-vibe-ui/web/ui/{element}.tsx` for web
219
+ 2. Creating `next-vibe-ui/native/ui/{element}.tsx` for React Native
220
+ 3. Or using an existing component if available
221
+
222
+ **Note:** The plugin uses dynamic lowercase detection, so it catches **any** element starting with a lowercase letter.
223
+
224
+ ## Development
225
+
226
+ ### Build
227
+
228
+ ```bash
229
+ npm run build
230
+ ```
231
+
232
+ ### Watch mode
233
+
234
+ ```bash
235
+ npm run dev
236
+ ```
237
+
238
+ ### Clean
239
+
240
+ ```bash
241
+ npm run clean
242
+ ```
243
+
244
+ ## License
245
+
246
+ MIT