@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,989 @@
1
+ /* eslint-disable i18next/no-literal-string */
2
+ /**
3
+ * Unified Check Configuration
4
+ *
5
+ * Single source of truth for all code quality tools:
6
+ * - Oxlint (fast Rust linter)
7
+ * - ESLint (import sorting, react hooks)
8
+ * - Prettier (code formatting)
9
+ * - TypeScript (type checking)
10
+ * - Testing (vitest)
11
+ * - VSCode integration
12
+ */
13
+
14
+ import type {
15
+ CheckConfig,
16
+ EslintFlatConfigItem,
17
+ } from "@next-vibe/checker/system/check/config/types";
18
+
19
+ // --------------------------------------------------------
20
+ // Vibe Check Defaults
21
+ // --------------------------------------------------------
22
+ const vibeCheck: CheckConfig["vibeCheck"] = {
23
+ fix: false,
24
+ skipLint: false,
25
+ skipEslint: false,
26
+ skipOxlint: false,
27
+ skipTypecheck: false,
28
+ timeout: 3600,
29
+ limit: 200,
30
+ maxFilesInSummary: 50,
31
+ };
32
+
33
+ // ============================================================
34
+ // Feature Flags (local to this file, not part of CheckConfig)
35
+ // ============================================================
36
+
37
+ const features = {
38
+ // Linting features
39
+ react: true, // React-specific rules
40
+ reactCompiler: true, // React compiler rules (requires react)
41
+ accessibility: true, // jsx-a11y rules
42
+ promise: true, // Promise best practices
43
+ node: true, // Node.js rules
44
+ unicorn: true, // Unicorn rules (modern JS)
45
+ nextjs: true, // Next.js specific rules
46
+ pedantic: false, // Stricter/pedantic rules
47
+ // Custom plugins
48
+ i18n: true, // Check for untranslated strings
49
+ jsxCapitalization: true, // Enforce capitalized JSX components
50
+ restrictedSyntax: true, // No throw, unknown, object types
51
+ // TypeScript
52
+ tsgo: true, // Use tsgo instead of tsc for type checking
53
+ strictTypes: true, // Strict type checking rules
54
+ } as const;
55
+
56
+ // ============================================================
57
+ // Shared Ignores (files, folders, globs - mixed)
58
+ // ============================================================
59
+
60
+ const { oxlintIgnores, eslintIgnores } = formatIgnorePatterns([
61
+ // Directories
62
+ "dist",
63
+ ".dist",
64
+ ".next",
65
+ ".tmp",
66
+ "node_modules",
67
+ ".git",
68
+ "coverage",
69
+ "public",
70
+ "drizzle",
71
+ ".vscode",
72
+ ".vibe-guard-instance",
73
+ ".github",
74
+ ".claude",
75
+ "to_migrate",
76
+ "postgres_data",
77
+ ".nyc_output",
78
+ "build",
79
+ "test-files",
80
+ "test-project",
81
+ // Files
82
+ ".DS_Store",
83
+ "thumbs.db",
84
+ ".gitignore",
85
+ ".env",
86
+ ".env.local",
87
+ ".env.development",
88
+ ".env.production",
89
+ "next-env.d.ts",
90
+ "nativewind-env.d.ts",
91
+ // Glob patterns
92
+ "**/test-files/**",
93
+ ]);
94
+
95
+ // --------------------------------------------------------
96
+ // Typecheck Configuration
97
+ // --------------------------------------------------------
98
+ const typecheck = {
99
+ enabled: true as const,
100
+ cachePath: ".tmp/typecheck-cache",
101
+ useTsgo: features.tsgo,
102
+ };
103
+
104
+ // --------------------------------------------------------
105
+ // Oxlint Configuration
106
+ // --------------------------------------------------------
107
+ const oxlint: CheckConfig["oxlint"] = {
108
+ enabled: true,
109
+ configPath: ".tmp/.oxlintrc.json",
110
+ cachePath: ".tmp/oxlint-cache",
111
+ lintableExtensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"],
112
+ $schema: "./node_modules/oxlint/configuration_schema.json",
113
+ ignorePatterns: oxlintIgnores,
114
+ plugins: [
115
+ "typescript",
116
+ "oxc",
117
+ ...(features.unicorn ? ["unicorn"] : []),
118
+ ...(features.react ? ["react"] : []),
119
+ ...(features.accessibility ? ["jsx-a11y"] : []),
120
+ ...(features.promise ? ["promise"] : []),
121
+ ...(features.node ? ["node"] : []),
122
+ ...(features.nextjs ? ["nextjs"] : []),
123
+ ],
124
+ jsPlugins: [
125
+ ...(features.restrictedSyntax
126
+ ? [
127
+ "@next-vibe/checker/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts",
128
+ ]
129
+ : []),
130
+ ...(features.jsxCapitalization
131
+ ? [
132
+ "@next-vibe/checker/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts",
133
+ ]
134
+ : []),
135
+ ...(features.i18n
136
+ ? [
137
+ "@next-vibe/checker/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts",
138
+ ]
139
+ : []),
140
+ ],
141
+ categories: {
142
+ correctness: "error",
143
+ suspicious: "error",
144
+ pedantic: features.pedantic ? "warn" : "off",
145
+ style: "off",
146
+ },
147
+ rules: {
148
+ // ── Core ESLint (always enabled) ──────────────────────────
149
+ "no-debugger": "error",
150
+ "no-console": "error",
151
+ curly: "error",
152
+ eqeqeq: "error",
153
+ "no-undef": "off",
154
+ camelcase: "error",
155
+ "no-template-curly-in-string": "error",
156
+ "no-unsafe-optional-chaining": "error",
157
+ "array-callback-return": "error",
158
+ "no-constructor-return": "error",
159
+ "no-self-compare": "error",
160
+ "no-unreachable-loop": "error",
161
+ "no-unused-private-class-members": "error",
162
+ "prefer-template": "error",
163
+ "require-atomic-updates": "warn",
164
+ "no-promise-executor-return": "error",
165
+
166
+ // ── TypeScript (always enabled) ───────────────────────────
167
+ "typescript/no-explicit-any": "error",
168
+ "typescript/no-unused-vars": [
169
+ "error",
170
+ {
171
+ vars: "all",
172
+ args: "all",
173
+ caughtErrors: "none",
174
+ ignoreRestSiblings: false,
175
+ argsIgnorePattern: "^$",
176
+ varsIgnorePattern: "^$",
177
+ },
178
+ ],
179
+ "typescript/no-inferrable-types": "error",
180
+ "typescript/consistent-type-imports": "error",
181
+ "typescript/no-empty-function": "error",
182
+ "typescript/prefer-includes": "error",
183
+ "typescript/prefer-string-starts-ends-with": "error",
184
+ "typescript/ban-ts-comment": "error",
185
+ "typescript/consistent-type-definitions": "error",
186
+ "typescript/no-empty-object-type": "error",
187
+ "typescript/no-unsafe-function-type": "error",
188
+ "typescript/no-wrapper-object-types": "error",
189
+ "typescript/no-duplicate-enum-values": "error",
190
+ "typescript/no-extra-non-null-assertion": "error",
191
+ "no-extraneous-class": "off",
192
+ // Strict type rules (enabled via strictTypes flag)
193
+ ...(features.strictTypes
194
+ ? {
195
+ "typescript/await-thenable": "error",
196
+ "typescript/no-floating-promises": "error",
197
+ "typescript/no-for-in-array": "error",
198
+ "typescript/no-misused-promises": "error",
199
+ "typescript/no-unsafe-assignment": "error",
200
+ "typescript/no-unnecessary-type-assertion": "error",
201
+ "typescript/explicit-function-return-type": "error",
202
+ "typescript/restrict-template-expressions": "error",
203
+ }
204
+ : {}),
205
+
206
+ // ── React (enabled via react flag) ────────────────────────
207
+ ...(features.react
208
+ ? {
209
+ "react/jsx-key": "error",
210
+ "react/jsx-no-duplicate-props": "error",
211
+ "react/jsx-no-undef": "error",
212
+ "react/jsx-uses-react": "off",
213
+ "react/jsx-uses-vars": "error",
214
+ "react/no-children-prop": "error",
215
+ "react/no-deprecated": "error",
216
+ "react/no-direct-mutation-state": "error",
217
+ "react/no-unknown-property": "error",
218
+ "react/self-closing-comp": "error",
219
+ "react/react-in-jsx-scope": "off",
220
+ }
221
+ : {}),
222
+
223
+ // ── Accessibility (enabled via accessibility flag) ────────
224
+ ...(features.accessibility
225
+ ? {
226
+ "jsx-a11y/alt-text": "error",
227
+ "jsx-a11y/aria-props": "error",
228
+ "jsx-a11y/aria-role": "error",
229
+ "jsx-a11y/anchor-has-content": "error",
230
+ "jsx-a11y/aria-proptypes": "error",
231
+ "jsx-a11y/aria-unsupported-elements": "error",
232
+ "jsx-a11y/click-events-have-key-events": "error",
233
+ "jsx-a11y/heading-has-content": "error",
234
+ "jsx-a11y/html-has-lang": "error",
235
+ "jsx-a11y/iframe-has-title": "error",
236
+ "jsx-a11y/img-redundant-alt": "error",
237
+ "jsx-a11y/no-access-key": "error",
238
+ "jsx-a11y/no-autofocus": "error",
239
+ "jsx-a11y/no-distracting-elements": "error",
240
+ "jsx-a11y/no-redundant-roles": "error",
241
+ "jsx-a11y/role-has-required-aria-props": "error",
242
+ "jsx-a11y/role-supports-aria-props": "error",
243
+ "jsx-a11y/scope": "error",
244
+ "jsx-a11y/tabindex-no-positive": "error",
245
+ }
246
+ : {}),
247
+
248
+ // ── Promise (enabled via promise flag) ────────────────────
249
+ ...(features.promise
250
+ ? {
251
+ "promise/param-names": "error",
252
+ "promise/always-return": "error",
253
+ "promise/catch-or-return": "error",
254
+ }
255
+ : {}),
256
+
257
+ // ── Node (enabled via node flag) ──────────────────────────
258
+ ...(features.node
259
+ ? {
260
+ "node/no-missing-import": "off",
261
+ "node/no-unsupported-features/es-syntax": "off",
262
+ }
263
+ : {}),
264
+
265
+ // ── Unicorn (enabled via unicorn flag) ────────────────────
266
+ ...(features.unicorn
267
+ ? {
268
+ "unicorn/prefer-string-starts-ends-with": "error",
269
+ "unicorn/no-empty-file": "error",
270
+ "unicorn/no-unnecessary-await": "error",
271
+ "unicorn/no-useless-spread": "error",
272
+ "unicorn/prefer-set-size": "error",
273
+ "unicorn/no-await-in-promise-methods": "error",
274
+ "unicorn/no-invalid-fetch-options": "error",
275
+ "unicorn/no-invalid-remove-event-listener": "error",
276
+ "unicorn/no-new-array": "error",
277
+ "unicorn/no-single-promise-in-promise-methods": "error",
278
+ "unicorn/no-thenable": "error",
279
+ "unicorn/no-useless-fallback-in-spread": "off",
280
+ "unicorn/no-useless-length-check": "error",
281
+ "unicorn/prefer-array-flat": "error",
282
+ "unicorn/prefer-array-flat-map": "error",
283
+ "unicorn/prefer-includes": "error",
284
+ "unicorn/prefer-modern-dom-apis": "error",
285
+ "unicorn/prefer-node-protocol": "error",
286
+ "unicorn/prefer-spread": "error",
287
+ }
288
+ : {}),
289
+
290
+ // ── OXC (always enabled) ──────────────────────────────────
291
+ "oxc/no-optional-chaining": "off",
292
+ "oxc/missing-throw": "error",
293
+ "oxc/number-arg-out-of-range": "error",
294
+ "oxc/only-used-in-recursion": "error",
295
+ "oxc/bad-array-method-on-arguments": "error",
296
+ "oxc/bad-comparison-sequence": "error",
297
+ "oxc/const-comparisons": "error",
298
+ "oxc/double-comparisons": "error",
299
+ "oxc/erasing-op": "error",
300
+ "oxc/bad-char-at-comparison": "error",
301
+ "oxc/bad-min-max-func": "error",
302
+ "oxc/bad-object-literal-comparison": "error",
303
+ "oxc/bad-replace-all-arg": "error",
304
+ "oxc/uninvoked-array-callback": "error",
305
+
306
+ // ── Pedantic rule overrides ─────────────────────────────────
307
+ "max-lines": "off",
308
+ ...(features.pedantic
309
+ ? { "max-lines-per-function": ["warn", { max: 150 }] }
310
+ : {}),
311
+ // Disable rules that conflict with TypeScript strict null checks
312
+ // (.at() and .codePointAt() return T | undefined)
313
+ "unicorn/prefer-at": "off",
314
+ "unicorn/prefer-code-point": "off",
315
+ "unicorn/prefer-negative-index": "off",
316
+ // Conflicts with promise/always-return which requires returning something
317
+ "unicorn/no-useless-undefined": "off",
318
+ "unicorn/no-useless-switch-case": "off",
319
+ "unicorn/no-array-callback-reference": "off",
320
+ "unicorn/prefer-query-selector": "off",
321
+
322
+ // ── Custom JS Plugins (enabled via feature flags) ────────
323
+ // Options defined inline, plugins read from config.oxlint.rules
324
+ ...(features.restrictedSyntax
325
+ ? {
326
+ "oxlint-plugin-restricted/restricted-syntax": [
327
+ "error",
328
+ {
329
+ jsxAllowedProperties: [
330
+ "icon",
331
+ "content",
332
+ "title",
333
+ "description",
334
+ "children",
335
+ "header",
336
+ "footer",
337
+ "element",
338
+ "component",
339
+ "label",
340
+ "placeholder",
341
+ "tooltip",
342
+ "badge",
343
+ "prefix",
344
+ "suffix",
345
+ "startAdornment",
346
+ "endAdornment",
347
+ "emptyState",
348
+ "fallback",
349
+ ],
350
+ },
351
+ ],
352
+ }
353
+ : {}),
354
+ ...(features.jsxCapitalization
355
+ ? {
356
+ "oxlint-plugin-jsx-capitalization/jsx-capitalization": [
357
+ "error",
358
+ {
359
+ excludedPaths: ["/src/packages/next-vibe-ui/web/"],
360
+ excludedFilePatterns: [
361
+ "/email.tsx",
362
+ ".email.tsx",
363
+ "/test.tsx",
364
+ ".test.tsx",
365
+ ".spec.tsx",
366
+ "/__tests__/",
367
+ ],
368
+ typographyElements: [
369
+ "h1",
370
+ "h2",
371
+ "h3",
372
+ "h4",
373
+ "p",
374
+ "blockquote",
375
+ "code",
376
+ ],
377
+ standaloneElements: ["span", "pre"],
378
+ svgElements: [
379
+ "svg",
380
+ "path",
381
+ "circle",
382
+ "rect",
383
+ "line",
384
+ "polyline",
385
+ "polygon",
386
+ "ellipse",
387
+ "g",
388
+ "text",
389
+ "tspan",
390
+ "defs",
391
+ "linearGradient",
392
+ "radialGradient",
393
+ "stop",
394
+ "clipPath",
395
+ "mask",
396
+ "pattern",
397
+ "use",
398
+ "symbol",
399
+ "marker",
400
+ "foreignObject",
401
+ ],
402
+ imageElements: ["img", "picture"],
403
+ commonUiElements: [
404
+ "div",
405
+ "section",
406
+ "article",
407
+ "aside",
408
+ "header",
409
+ "footer",
410
+ "main",
411
+ "nav",
412
+ "button",
413
+ "input",
414
+ "textarea",
415
+ "select",
416
+ "option",
417
+ "label",
418
+ "form",
419
+ "fieldset",
420
+ "legend",
421
+ "ul",
422
+ "ol",
423
+ "li",
424
+ "dl",
425
+ "dt",
426
+ "dd",
427
+ "table",
428
+ "thead",
429
+ "tbody",
430
+ "tfoot",
431
+ "tr",
432
+ "th",
433
+ "td",
434
+ "caption",
435
+ "video",
436
+ "audio",
437
+ "source",
438
+ "track",
439
+ "canvas",
440
+ "hr",
441
+ "br",
442
+ "iframe",
443
+ "embed",
444
+ "object",
445
+ "details",
446
+ "summary",
447
+ "dialog",
448
+ "menu",
449
+ "figure",
450
+ "figcaption",
451
+ "time",
452
+ "progress",
453
+ "meter",
454
+ "output",
455
+ "strong",
456
+ "em",
457
+ "b",
458
+ "i",
459
+ "u",
460
+ "s",
461
+ ],
462
+ },
463
+ ],
464
+ }
465
+ : {}),
466
+ ...(features.i18n
467
+ ? {
468
+ "oxlint-plugin-i18n/no-literal-string": [
469
+ "error",
470
+ {
471
+ words: {
472
+ exclude: [
473
+ String.raw`^[\[\]{}—<>•+%#@.:_*;,/()\-]+$`,
474
+ String.raw`^\s+$`,
475
+ String.raw`^\d+$`,
476
+ String.raw`^[^\s]+\.[^\s]+$`,
477
+ String.raw`\.(?:jpe?g|png|svg|webp|gif|csv|json|xml|pdf)$`,
478
+ String.raw`^(?:https?://|/)[^\s]*$`,
479
+ String.raw`^[#@]\w+$`,
480
+ String.raw`^[a-z]+$`,
481
+ String.raw`^[a-z]+(?:[A-Z][a-zA-Z0-9]*)*$`,
482
+ String.raw`^[^\s]+(?:-[^\s]+)+$`,
483
+ String.raw`^[^\s]+\/(?:[^\s]*)$`,
484
+ String.raw`^[A-Z]+(?:_[A-Z]+)*$`,
485
+ String.raw`^use (?:client|server|custom)$`,
486
+ String.raw`^&[a-z]+;$`,
487
+ String.raw`^[MmLlHhVvCcSsQqTtAaZz0-9\s,.-]+$`,
488
+ String.raw`^[▶◀▲▼►◄▴▾►◄✅✕✔✓🔧]+$`,
489
+ String.raw`^[\d\s]+(?:px|em|rem|%|vh|vw|deg|rad)?(?:\s+[\d]+)*$`,
490
+ String.raw`^url\([^)]+\)$`,
491
+ String.raw`^(?:translate|rotate|scale|matrix|skew)\([^)]+\)$`,
492
+ String.raw`^(?:Esc|Enter|Tab|Shift|Ctrl|Alt|Cmd|Space|Backspace|Delete|ArrowUp|ArrowDown|ArrowLeft|ArrowRight|F\d+)$`,
493
+ String.raw`^[A-Z0-9]{1,2}$`,
494
+ ],
495
+ },
496
+ "jsx-attributes": {
497
+ exclude: [
498
+ "className",
499
+ "*ClassName",
500
+ "id",
501
+ "data-testid",
502
+ "to",
503
+ "href",
504
+ "style",
505
+ "target",
506
+ "rel",
507
+ "type",
508
+ "src",
509
+ "viewBox",
510
+ "d",
511
+ "fill",
512
+ "stroke",
513
+ "transform",
514
+ "gradientTransform",
515
+ "gradientUnits",
516
+ "cn",
517
+ "cx",
518
+ "cy",
519
+ "r",
520
+ "fx",
521
+ "fy",
522
+ "offset",
523
+ "stopColor",
524
+ "stopOpacity",
525
+ "width",
526
+ "height",
527
+ "x",
528
+ "y",
529
+ "x1",
530
+ "x2",
531
+ "y1",
532
+ "y2",
533
+ "strokeWidth",
534
+ "strokeLinecap",
535
+ "strokeLinejoin",
536
+ "fillRule",
537
+ "clipRule",
538
+ "opacity",
539
+ "xmlns",
540
+ "xmlnsXlink",
541
+ "aria-label",
542
+ "aria-labelledby",
543
+ "aria-describedby",
544
+ "title",
545
+ "placeholder",
546
+ ],
547
+ },
548
+ "object-properties": {
549
+ exclude: [
550
+ "id",
551
+ "key",
552
+ "type",
553
+ "className",
554
+ "*ClassName",
555
+ "imageUrl",
556
+ "style",
557
+ "path",
558
+ "href",
559
+ "to",
560
+ "data",
561
+ "alg",
562
+ "backgroundColor",
563
+ "borderRadius",
564
+ "color",
565
+ "fontSize",
566
+ "lineHeight",
567
+ "padding",
568
+ "textDecoration",
569
+ "marginTop",
570
+ "marginBottom",
571
+ "margin",
572
+ "value",
573
+ "email",
574
+ "displayName",
575
+ ],
576
+ },
577
+ },
578
+ ],
579
+ }
580
+ : {}),
581
+
582
+ // ── Next.js (enabled via nextjs flag) ─────────────────────
583
+ ...(features.nextjs
584
+ ? {
585
+ "nextjs/google-font-display": "error",
586
+ "nextjs/google-font-preconnect": "error",
587
+ "nextjs/inline-script-id": "error",
588
+ "nextjs/next-script-for-ga": "error",
589
+ "nextjs/no-assign-module-variable": "error",
590
+ "nextjs/no-before-interactive-script-outside-document": "error",
591
+ "nextjs/no-css-tags": "error",
592
+ "nextjs/no-document-import-in-page": "error",
593
+ "nextjs/no-duplicate-head": "error",
594
+ "nextjs/no-head-element": "error",
595
+ "nextjs/no-head-import-in-document": "error",
596
+ "nextjs/no-html-link-for-pages": "error",
597
+ "nextjs/no-img-element": "warn",
598
+ "nextjs/no-page-custom-font": "error",
599
+ "nextjs/no-script-component-in-head": "error",
600
+ "nextjs/no-styled-jsx-in-document": "error",
601
+ "nextjs/no-sync-scripts": "error",
602
+ "nextjs/no-title-in-document-head": "error",
603
+ "nextjs/no-typos": "error",
604
+ "nextjs/no-unwanted-polyfillio": "error",
605
+ }
606
+ : {}),
607
+ },
608
+ settings: {
609
+ "jsx-a11y": {
610
+ polymorphicPropName: null,
611
+ components: {},
612
+ attributes: {},
613
+ },
614
+ next: { rootDir: ["."] },
615
+ react: { formComponents: [], linkComponents: [] },
616
+ jsdoc: {
617
+ ignorePrivate: false,
618
+ ignoreInternal: false,
619
+ ignoreReplacesDocs: true,
620
+ overrideReplacesDocs: true,
621
+ augmentsExtendsReplacesDocs: false,
622
+ implementsReplacesDocs: false,
623
+ exemptDestructuredRootsFromChecks: false,
624
+ tagNamePreference: {},
625
+ },
626
+ },
627
+ env: { builtin: true },
628
+ globals: {
629
+ React: "readonly",
630
+ JSX: "readonly",
631
+ NodeJS: "readonly",
632
+ __dirname: "readonly",
633
+ __filename: "readonly",
634
+ process: "readonly",
635
+ global: "readonly",
636
+ },
637
+ };
638
+
639
+ // --------------------------------------------------------
640
+ // Prettier Configuration
641
+ // --------------------------------------------------------
642
+ const prettier: CheckConfig["prettier"] = {
643
+ enabled: true,
644
+ configPath: ".tmp/.oxfmtrc.json",
645
+ semi: true,
646
+ singleQuote: false,
647
+ trailingComma: "all",
648
+ tabWidth: 2,
649
+ useTabs: false,
650
+ printWidth: 80,
651
+ arrowParens: "always",
652
+ endOfLine: "lf",
653
+ bracketSpacing: true,
654
+ jsxSingleQuote: false,
655
+ jsxBracketSameLine: false,
656
+ proseWrap: "preserve",
657
+ };
658
+
659
+ // --------------------------------------------------------
660
+ // Testing Configuration
661
+ // --------------------------------------------------------
662
+ const testing: CheckConfig["testing"] = {
663
+ enabled: true,
664
+ command: "bun test",
665
+ timeout: 300_000,
666
+ include: ["**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx"],
667
+ exclude: [...oxlintIgnores],
668
+ coverage: {
669
+ enabled: false,
670
+ provider: "v8",
671
+ thresholds: { lines: 80, branches: 80, functions: 80, statements: 80 },
672
+ },
673
+ };
674
+
675
+ // --------------------------------------------------------
676
+ // VSCode Integration
677
+ // --------------------------------------------------------
678
+ const vscode: CheckConfig["vscode"] = {
679
+ enabled: true,
680
+ autoGenerateSettings: true,
681
+ settingsPath: "./.vscode/settings.json",
682
+ settings: {
683
+ oxc: {
684
+ enable: true,
685
+ lintRun: "onSave",
686
+ configPath: ".tmp/.oxlintrc.json",
687
+ fmtConfigPath: ".tmp/.oxfmtrc.json",
688
+ fmtExperimental: true,
689
+ typeAware: true,
690
+ traceServer: "verbose",
691
+ },
692
+ editor: {
693
+ formatOnSave: true,
694
+ defaultFormatter: "oxc.oxc-vscode",
695
+ codeActionsOnSave: {
696
+ "source.fixAll.eslint": "explicit",
697
+ "source.organizeImports": "explicit",
698
+ },
699
+ },
700
+ typescript: {
701
+ validateEnable: true,
702
+ suggestAutoImports: true,
703
+ preferTypeOnlyAutoImports: true,
704
+ experimentalUseTsgo: typecheck.enabled && typecheck.useTsgo,
705
+ },
706
+ files: { eol: "\n" },
707
+ search: {
708
+ exclude: {
709
+ "**/node_modules": true,
710
+ "**/tsconfig.tsbuildinfo": true,
711
+ "**/*.tmp": true,
712
+ "**/*.next": true,
713
+ },
714
+ },
715
+ },
716
+ };
717
+
718
+ // ============================================================
719
+ // ESLint FlatConfig Cache (lazy-loaded on first access)
720
+ // ============================================================
721
+ let cachedEslintFlatConfig: EslintFlatConfigItem[] | null = null;
722
+
723
+ const config = (): CheckConfig => {
724
+ // --------------------------------------------------------
725
+ // ESLint Configuration (for rules oxlint doesn't support)
726
+ // --------------------------------------------------------
727
+ const eslint: CheckConfig["eslint"] = {
728
+ enabled: true,
729
+ configPath: ".tmp/eslint.config.mjs",
730
+ cachePath: ".tmp/eslint-cache",
731
+ lintableExtensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"],
732
+ ignores: oxlintIgnores,
733
+ // Build flatConfig with plugins (called from eslint.config.mjs which loads plugins)
734
+ buildFlatConfig(
735
+ reactCompilerPlugin: unknown,
736
+ reactHooksPlugin: unknown,
737
+ simpleImportSortPlugin: unknown,
738
+ tseslint: unknown,
739
+ ): EslintFlatConfigItem[] {
740
+ if (cachedEslintFlatConfig) {
741
+ return cachedEslintFlatConfig;
742
+ }
743
+
744
+ cachedEslintFlatConfig = [
745
+ { ignores: eslintIgnores },
746
+ {
747
+ files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"],
748
+ languageOptions: {
749
+ parser: tseslint.parser,
750
+ parserOptions: {
751
+ ecmaVersion: "latest",
752
+ sourceType: "module",
753
+ ecmaFeatures: { jsx: true },
754
+ },
755
+ },
756
+ linterOptions: { reportUnusedDisableDirectives: "off" },
757
+ plugins: {
758
+ "simple-import-sort": simpleImportSortPlugin,
759
+ ...(features.react ? { "react-hooks": reactHooksPlugin } : {}),
760
+ ...(features.reactCompiler
761
+ ? { "react-compiler": reactCompilerPlugin }
762
+ : {}),
763
+ // Stubs for oxlint rules
764
+ i18next: createEslintStub(["no-literal-string"]),
765
+ "oxlint-plugin-restricted": createEslintStub(["restricted-syntax"]),
766
+ "oxlint-plugin-jsx-capitalization": createEslintStub([
767
+ "jsx-capitalization",
768
+ ]),
769
+ "oxlint-plugin-i18n": createEslintStub(["no-literal-string"]),
770
+ "@typescript-eslint": createEslintStub([
771
+ "no-explicit-any",
772
+ "no-unused-vars",
773
+ "no-empty-function",
774
+ "no-empty-object-type",
775
+ "no-floating-promises",
776
+ "require-await",
777
+ "only-throw-error",
778
+ "no-unsafe-assignment",
779
+ "triple-slash-reference",
780
+ "consistent-type-definitions",
781
+ "no-require-imports",
782
+ "no-unsafe-function-type",
783
+ "explicit-function-return-type",
784
+ "no-namespace",
785
+ "no-unsafe-enum-comparison",
786
+ "consistent-type-imports",
787
+ "no-unnecessary-condition",
788
+ "no-base-to-string",
789
+ "no-unsafe-member-access",
790
+ "no-implied-eval",
791
+ ]),
792
+ "typescript-eslint": createEslintStub([
793
+ "no-explicit-any",
794
+ "no-unused-vars",
795
+ ]),
796
+ "eslint-plugin-unicorn": createEslintStub([
797
+ "require-module-specifiers",
798
+ ]),
799
+ prettier: createEslintStub(["prettier"]),
800
+ "eslint-plugin-promise": createEslintStub(["no-multiple-resolved"]),
801
+ "eslint-plugin-next": createEslintStub([
802
+ "no-html-link-for-pages",
803
+ "no-img-element",
804
+ "no-assign-module-variable",
805
+ ]),
806
+ "@next/next": createEslintStub(["no-img-element"]),
807
+ eslint: createEslintStub(["no-template-curly-in-string"]),
808
+ "jsx-a11y": createEslintStub(["prefer-tag-over-role"]),
809
+ oxc: createEslintStub(["only-used-in-recursion"]),
810
+ "eslint-plugin-import": createEslintStub(["no-named-as-default"]),
811
+ i18n: createEslintStub(["no-literal-string"]),
812
+ },
813
+ rules: {
814
+ "simple-import-sort/imports": "error",
815
+ "simple-import-sort/exports": "error",
816
+ ...(features.react
817
+ ? {
818
+ "react-hooks/rules-of-hooks": "error",
819
+ "react-hooks/exhaustive-deps": "error",
820
+ }
821
+ : {}),
822
+ ...(features.reactCompiler
823
+ ? { "react-compiler/react-compiler": "error" }
824
+ : {}),
825
+ "no-unused-vars": "off",
826
+ "no-console": "off",
827
+ "no-template-curly-in-string": "off",
828
+ "no-control-regex": "off",
829
+ "prefer-template": "off",
830
+ },
831
+ },
832
+ {
833
+ files: ["**/*.js", "**/*.jsx", "**/*.mjs", "**/*.cjs"],
834
+ linterOptions: { reportUnusedDisableDirectives: "off" },
835
+ plugins: {
836
+ "simple-import-sort": simpleImportSortPlugin,
837
+ ...(features.react ? { "react-hooks": reactHooksPlugin } : {}),
838
+ i18next: createEslintStub(["no-literal-string"]),
839
+ "oxlint-plugin-restricted": createEslintStub(["restricted-syntax"]),
840
+ "@typescript-eslint": createEslintStub([
841
+ "no-explicit-any",
842
+ "no-unused-vars",
843
+ ]),
844
+ "eslint-plugin-unicorn": createEslintStub([
845
+ "require-module-specifiers",
846
+ ]),
847
+ prettier: createEslintStub(["prettier"]),
848
+ "eslint-plugin-promise": createEslintStub(["no-multiple-resolved"]),
849
+ "eslint-plugin-next": createEslintStub([
850
+ "no-html-link-for-pages",
851
+ "no-img-element",
852
+ "no-assign-module-variable",
853
+ ]),
854
+ "@next/next": createEslintStub(["no-img-element"]),
855
+ eslint: createEslintStub(["no-template-curly-in-string"]),
856
+ "jsx-a11y": createEslintStub(["prefer-tag-over-role"]),
857
+ oxc: createEslintStub(["only-used-in-recursion"]),
858
+ "eslint-plugin-import": createEslintStub(["no-named-as-default"]),
859
+ i18n: createEslintStub(["no-literal-string"]),
860
+ },
861
+ rules: {
862
+ "simple-import-sort/imports": "error",
863
+ "simple-import-sort/exports": "error",
864
+ ...(features.react
865
+ ? {
866
+ "react-hooks/rules-of-hooks": "error",
867
+ "react-hooks/exhaustive-deps": "error",
868
+ }
869
+ : {}),
870
+ "no-unused-vars": "off",
871
+ "no-console": "off",
872
+ "no-template-curly-in-string": "off",
873
+ "no-control-regex": "off",
874
+ "prefer-template": "off",
875
+ },
876
+ },
877
+ ];
878
+
879
+ return cachedEslintFlatConfig;
880
+ },
881
+ };
882
+
883
+ return {
884
+ vibeCheck,
885
+ oxlint,
886
+ prettier,
887
+ eslint,
888
+ typecheck,
889
+ testing,
890
+ vscode,
891
+ };
892
+ };
893
+
894
+ /** ESLint stub plugin for rules handled by oxlint */
895
+ interface EslintStubPlugin {
896
+ rules: Record<
897
+ string,
898
+ {
899
+ create: () => Record<string, never>;
900
+ meta: { docs: { description: string } };
901
+ }
902
+ >;
903
+ }
904
+
905
+ /** Format result for ignore patterns */
906
+ interface IgnoreFormats {
907
+ oxlintIgnores: string[];
908
+ eslintIgnores: string[];
909
+ }
910
+
911
+ /**
912
+ * Creates stub ESLint plugin for rules handled by oxlint.
913
+ *
914
+ * This allows ESLint disable comments (e.g., `// eslint-disable-next-line rule-name`)
915
+ * to work without errors, even though the actual linting is done by oxlint.
916
+ *
917
+ * @param rules - Array of rule names to stub
918
+ * @returns ESLint plugin with no-op rules
919
+ *
920
+ * @example
921
+ * ```typescript
922
+ * const tsStub = createEslintStub(["no-explicit-any", "no-unused-vars"]);
923
+ * // Use in ESLint config:
924
+ * plugins: { "@typescript-eslint": tsStub }
925
+ * ```
926
+ */
927
+ export function createEslintStub(rules: string[]): EslintStubPlugin {
928
+ return {
929
+ rules: Object.fromEntries(
930
+ rules.map((rule) => [
931
+ rule,
932
+ {
933
+ create: (): Record<string, never> => ({}),
934
+ meta: { docs: { description: "Stub - handled by oxlint" } },
935
+ },
936
+ ]),
937
+ ),
938
+ };
939
+ }
940
+
941
+ /**
942
+ * Converts an array of ignore patterns to both oxlint and ESLint formats.
943
+ *
944
+ * Oxlint accepts mixed patterns (directories, files, globs) directly.
945
+ * ESLint flat config requires glob patterns with proper prefixes/suffixes.
946
+ *
947
+ * Pattern conversion rules for ESLint:
948
+ * - Glob patterns (contain `*`): kept as-is
949
+ * - Files with extensions (contain `.` but don't start with `.`): wrapped as `** /filename`
950
+ * - Directories and dotfiles/dotdirs: wrapped as `** /name/**`
951
+ *
952
+ * @param patterns - Array of ignore patterns (directories, files, or globs)
953
+ * @returns Object with patterns formatted for oxlint and eslint
954
+ *
955
+ * @example
956
+ * ```typescript
957
+ * const { oxlintIgnores, eslintIgnores } = formatIgnorePatterns([
958
+ * "dist", // Directory
959
+ * ".next", // Dotdir
960
+ * ".env", // Dotfile
961
+ * "file.min.js", // File
962
+ * "** /test/**", // Glob (already formatted)
963
+ * ]);
964
+ *
965
+ * // oxlintIgnores = ["dist", ".next", ".env", "file.min.js", "** /test/**"]
966
+ * // eslintIgnores = ["** /dist/**", "** /.next/**", "** /.env/**", "** /file.min.js", "** /test/**"]
967
+ * ```
968
+ */
969
+ export function formatIgnorePatterns(patterns: string[]): IgnoreFormats {
970
+ const eslintPatterns = patterns.map((pattern) => {
971
+ // Already a glob pattern - keep as-is
972
+ if (pattern.includes("*")) {
973
+ return pattern;
974
+ }
975
+ // File with extension (but not dotfile) - wrap with **/ prefix only
976
+ if (pattern.includes(".") && !pattern.startsWith(".")) {
977
+ return `**/${pattern}`;
978
+ }
979
+ // Directory or dotfile/dotdir - wrap with **/ prefix and /** suffix
980
+ return `**/${pattern}/**`;
981
+ });
982
+
983
+ return {
984
+ oxlintIgnores: patterns,
985
+ eslintIgnores: eslintPatterns,
986
+ };
987
+ }
988
+
989
+ export default config;