@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,500 @@
1
+ /**
2
+ * Oxlint JS Plugin: Restricted Syntax
3
+ *
4
+ * Enforces custom syntax restrictions:
5
+ * - No `unknown` type
6
+ * - No `object` type
7
+ * - No `throw` statements
8
+ * - No JSX in object literals (except for common React node properties like content, icon, title, etc.)
9
+ *
10
+ * Configuration is loaded from check.config.ts via the shared config loader.
11
+ *
12
+ * Supports:
13
+ * - Bun runtime (direct TypeScript)
14
+ * - Node.js runtime (compiled JavaScript)
15
+ * - NPM package installation
16
+ * - Local development
17
+ */
18
+
19
+ import type { RestrictedSyntaxPluginConfig } from "../../../../config/types";
20
+ import type {
21
+ OxlintASTNode,
22
+ OxlintComment,
23
+ OxlintRuleContext,
24
+ } from "../../../types";
25
+ import type {
26
+ createPluginMessages,
27
+ loadPluginConfig,
28
+ } from "../../shared/config-loader";
29
+
30
+ // ============================================================
31
+ // Types
32
+ // ============================================================
33
+
34
+ /** Extended rule context with restricted-syntax options */
35
+ interface RestrictedSyntaxRuleContext extends OxlintRuleContext {
36
+ options?: RestrictedSyntaxPluginConfig[];
37
+ getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
38
+ getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
39
+ getFilename?: () => string;
40
+ filename?: string;
41
+ sourceCode?: {
42
+ getCommentsBefore?: (node: OxlintASTNode) => OxlintComment[];
43
+ getCommentsInside?: (node: OxlintASTNode) => OxlintComment[];
44
+ };
45
+ }
46
+
47
+ /** AST node for Identifier */
48
+ interface Identifier extends OxlintASTNode {
49
+ type: "Identifier";
50
+ name: string;
51
+ }
52
+
53
+ /** AST node for Literal */
54
+ interface Literal extends OxlintASTNode {
55
+ type: "Literal";
56
+ value: string | number | boolean | null;
57
+ raw?: string;
58
+ }
59
+
60
+ /** AST node for Property */
61
+ interface Property extends OxlintASTNode {
62
+ type: "Property";
63
+ key?: OxlintASTNode;
64
+ value?: OxlintASTNode;
65
+ computed?: boolean;
66
+ method?: boolean;
67
+ shorthand?: boolean;
68
+ }
69
+
70
+ /** AST node for ParenthesizedExpression */
71
+ interface ParenthesizedExpression extends OxlintASTNode {
72
+ type: "ParenthesizedExpression";
73
+ expression?: OxlintASTNode;
74
+ }
75
+
76
+ /** Default error messages (can be customized via config) */
77
+ interface RestrictedSyntaxMessages {
78
+ unknownType: string;
79
+ objectType: string;
80
+ throwStatement: string;
81
+ jsxInObjectLiteral: string;
82
+ }
83
+
84
+ // ============================================================
85
+ // Default Configuration
86
+ // ============================================================
87
+
88
+ const DEFAULT_CONFIG: RestrictedSyntaxPluginConfig = {
89
+ jsxAllowedProperties: [
90
+ "content",
91
+ "icon",
92
+ "title",
93
+ "label",
94
+ "description",
95
+ "children",
96
+ "render",
97
+ "fallback",
98
+ "error",
99
+ "loading",
100
+ "empty",
101
+ "header",
102
+ "footer",
103
+ "trigger",
104
+ "component",
105
+ ],
106
+ };
107
+
108
+ const DEFAULT_MESSAGES: RestrictedSyntaxMessages = {
109
+ unknownType:
110
+ "Usage of the 'unknown' type isn't allowed. Consider using the inferred types from the unified interface system based on definition.ts",
111
+ objectType:
112
+ "Usage of the 'object' type isn't allowed. Consider using the inferred types from the unified interface system based on definition.ts",
113
+ throwStatement:
114
+ "Usage of 'throw' statements is not allowed. Use proper ResponseType<T> patterns instead.",
115
+ jsxInObjectLiteral:
116
+ "JSX elements inside object literals are not allowed. Extract JSX to a separate function to ensure i18n rules work properly.",
117
+ };
118
+
119
+ // ============================================================
120
+ // Dynamic Import for Shared Loader
121
+ // ============================================================
122
+
123
+ // Plugin config loader (lazy loaded to handle various runtime environments)
124
+ let configLoader: {
125
+ loadPluginConfig: typeof loadPluginConfig;
126
+ createPluginMessages: typeof createPluginMessages;
127
+ } | null = null;
128
+
129
+ let cachedConfig: RestrictedSyntaxPluginConfig | null = null;
130
+ let cachedMessages: RestrictedSyntaxMessages | null = null;
131
+
132
+ /**
133
+ * Load the shared config loader module
134
+ * Uses dynamic require to handle different runtime environments
135
+ */
136
+ function getConfigLoader(): typeof configLoader {
137
+ if (configLoader) {
138
+ return configLoader;
139
+ }
140
+
141
+ try {
142
+ // eslint-disable-next-line @typescript-eslint/no-require-imports -- Plugin context requires sync loading
143
+ configLoader = require("../../shared/config-loader") as typeof configLoader;
144
+ return configLoader;
145
+ } catch {
146
+ // Shared loader not available, will use fallback
147
+ return null;
148
+ }
149
+ }
150
+
151
+ /**
152
+ * Load restricted-syntax config using shared loader or fallback
153
+ */
154
+ function loadRestrictedSyntaxConfig(): RestrictedSyntaxPluginConfig {
155
+ if (cachedConfig !== null) {
156
+ return cachedConfig;
157
+ }
158
+
159
+ const loader = getConfigLoader();
160
+
161
+ if (loader) {
162
+ const result = loader.loadPluginConfig(
163
+ "oxlint-plugin-restricted/restricted-syntax",
164
+ DEFAULT_CONFIG,
165
+ );
166
+ cachedConfig = result.config ?? DEFAULT_CONFIG;
167
+ } else {
168
+ // Fallback: try direct require of check.config.ts
169
+ cachedConfig = loadConfigFallback();
170
+ }
171
+
172
+ return cachedConfig;
173
+ }
174
+
175
+ /**
176
+ * Fallback config loading when shared loader is not available
177
+ */
178
+ function loadConfigFallback(): RestrictedSyntaxPluginConfig {
179
+ try {
180
+ // eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment -- Plugin fallback requires dynamic loading
181
+ const config = require(`${process.cwd()}/check.config.ts`);
182
+ const checkConfig = config.default ?? config;
183
+ const exported =
184
+ typeof checkConfig === "function" ? checkConfig() : checkConfig;
185
+
186
+ const ruleConfig =
187
+ exported?.oxlint?.rules?.["oxlint-plugin-restricted/restricted-syntax"];
188
+ if (Array.isArray(ruleConfig) && ruleConfig[1]) {
189
+ return ruleConfig[1] as RestrictedSyntaxPluginConfig;
190
+ }
191
+ } catch {
192
+ // Config not available
193
+ }
194
+
195
+ return DEFAULT_CONFIG;
196
+ }
197
+
198
+ /**
199
+ * Get error messages (supports customization via config)
200
+ */
201
+ function getMessages(): RestrictedSyntaxMessages {
202
+ if (cachedMessages !== null) {
203
+ return cachedMessages;
204
+ }
205
+ cachedMessages = DEFAULT_MESSAGES;
206
+ return cachedMessages;
207
+ }
208
+
209
+ // ============================================================
210
+ // Helper Functions
211
+ // ============================================================
212
+
213
+ /**
214
+ * Type guard to check if a node is a Property node
215
+ */
216
+ function isProperty(node: OxlintASTNode): node is Property {
217
+ return (
218
+ node.type === "Property" && typeof (node as Property).method === "boolean"
219
+ );
220
+ }
221
+
222
+ /**
223
+ * Check if the current file is in an allowed path where restricted syntax is permitted
224
+ */
225
+ function isAllowedPath(context: RestrictedSyntaxRuleContext): boolean {
226
+ let filename = "";
227
+
228
+ // Try to get filename from context
229
+ if (typeof context.getFilename === "function") {
230
+ filename = context.getFilename();
231
+ } else if (typeof context.filename === "string") {
232
+ filename = context.filename;
233
+ }
234
+
235
+ if (!filename) {
236
+ return false;
237
+ }
238
+
239
+ return false;
240
+ }
241
+
242
+ /**
243
+ * Check if the node has a disable comment
244
+ */
245
+ function hasDisableComment(
246
+ context: RestrictedSyntaxRuleContext,
247
+ node: OxlintASTNode,
248
+ ): boolean {
249
+ // Try to get comments from context
250
+ const getComments =
251
+ context.getCommentsBefore ?? context.sourceCode?.getCommentsBefore;
252
+ if (typeof getComments !== "function") {
253
+ // If comment API is not available, allow the node (fail open)
254
+ return false;
255
+ }
256
+
257
+ try {
258
+ const comments = getComments(node);
259
+ if (!comments || !Array.isArray(comments)) {
260
+ return false;
261
+ }
262
+
263
+ // Check if any preceding comment contains eslint-disable or oxlint-disable for restricted-syntax
264
+ for (const comment of comments) {
265
+ if (!comment || typeof comment.value !== "string") {
266
+ continue;
267
+ }
268
+ const commentText = comment.value.trim();
269
+ if (
270
+ (commentText.includes("eslint-disable-next-line") ||
271
+ commentText.includes("oxlint-disable-next-line")) &&
272
+ (commentText.includes("restricted-syntax") ||
273
+ commentText.includes("no-restricted-syntax"))
274
+ ) {
275
+ return true;
276
+ }
277
+ }
278
+ } catch {
279
+ // If any error occurs, don't block (fail open)
280
+ return false;
281
+ }
282
+
283
+ return false;
284
+ }
285
+
286
+ /**
287
+ * Check if a node is an ObjectProperty
288
+ */
289
+ function isObjectProperty(prop: OxlintASTNode): prop is Property {
290
+ return isProperty(prop);
291
+ }
292
+
293
+ /**
294
+ * Get the JSX allowed properties Set from rule options or config file
295
+ */
296
+ function getJsxAllowedProperties(
297
+ context: RestrictedSyntaxRuleContext,
298
+ ): Set<string> {
299
+ // First try rule options (primary - passed via oxlint config)
300
+ const ruleOptions = context.options?.[0];
301
+ if (ruleOptions?.jsxAllowedProperties) {
302
+ return new Set(ruleOptions.jsxAllowedProperties);
303
+ }
304
+
305
+ // Fallback to config file (for direct plugin usage)
306
+ const config = loadRestrictedSyntaxConfig();
307
+ if (config.jsxAllowedProperties) {
308
+ return new Set(config.jsxAllowedProperties);
309
+ }
310
+
311
+ // Return empty set if no config
312
+ return new Set();
313
+ }
314
+
315
+ /**
316
+ * Check if a property key is in the allowlist for JSX values
317
+ */
318
+ function isJSXAllowedKey(
319
+ prop: OxlintASTNode,
320
+ jsxAllowedProperties: Set<string>,
321
+ ): boolean {
322
+ const property = prop as Property;
323
+ if (property.computed) {
324
+ return false;
325
+ }
326
+ const key = property.key;
327
+ if (!key) {
328
+ return false;
329
+ }
330
+
331
+ let keyName: string | null = null;
332
+
333
+ if (key.type === "Identifier") {
334
+ keyName = (key as Identifier).name;
335
+ } else if (
336
+ key.type === "Literal" &&
337
+ typeof (key as Literal).value === "string"
338
+ ) {
339
+ keyName = (key as Literal).value as string;
340
+ }
341
+
342
+ return keyName !== null && jsxAllowedProperties.has(keyName);
343
+ }
344
+
345
+ /**
346
+ * Check if a node is a JSX element or fragment
347
+ */
348
+ function isJSX(n: OxlintASTNode): boolean {
349
+ return n && (n.type === "JSXElement" || n.type === "JSXFragment");
350
+ }
351
+
352
+ /**
353
+ * Unwrap parenthesized expressions to get the inner node
354
+ */
355
+ function unwrapParen(n: OxlintASTNode): OxlintASTNode {
356
+ let cur = n;
357
+ while (cur?.type === "ParenthesizedExpression") {
358
+ const expr = (cur as ParenthesizedExpression).expression;
359
+ if (!expr) {
360
+ break;
361
+ }
362
+ cur = expr;
363
+ }
364
+ return cur;
365
+ }
366
+
367
+ // ============================================================
368
+ // Rule Implementation
369
+ // ============================================================
370
+
371
+ const restrictedSyntaxRule = {
372
+ meta: {
373
+ type: "problem",
374
+ docs: {
375
+ description:
376
+ "Enforces restricted syntax patterns (no unknown, object, throw, JSX in non-React-node properties)",
377
+ category: "Best Practices",
378
+ recommended: true,
379
+ },
380
+ schema: [
381
+ {
382
+ type: "object",
383
+ properties: {
384
+ jsxAllowedProperties: { type: "array", items: { type: "string" } },
385
+ },
386
+ },
387
+ ],
388
+ },
389
+ create(
390
+ context: RestrictedSyntaxRuleContext,
391
+ ): Record<string, (node: OxlintASTNode) => void> {
392
+ // Check if file is in allowed path (applies to all rules)
393
+ const isAllowed = isAllowedPath(context);
394
+
395
+ // Load JSX allowed properties from rule options or config (single source of truth)
396
+ const jsxAllowedProperties = getJsxAllowedProperties(context);
397
+
398
+ // Get customizable messages
399
+ const messages = getMessages();
400
+
401
+ return {
402
+ // ============================================================
403
+ // Restricted syntax rules
404
+ // ============================================================
405
+ TSUnknownKeyword(node: OxlintASTNode): void {
406
+ if (isAllowed || hasDisableComment(context, node)) {
407
+ return;
408
+ }
409
+ context.report({
410
+ node,
411
+ message: messages.unknownType,
412
+ });
413
+ },
414
+
415
+ TSObjectKeyword(node: OxlintASTNode): void {
416
+ if (isAllowed || hasDisableComment(context, node)) {
417
+ return;
418
+ }
419
+ context.report({
420
+ node,
421
+ message: messages.objectType,
422
+ });
423
+ },
424
+
425
+ ThrowStatement(node: OxlintASTNode): void {
426
+ if (isAllowed || hasDisableComment(context, node)) {
427
+ return;
428
+ }
429
+ context.report({
430
+ node,
431
+ message: messages.throwStatement,
432
+ });
433
+ },
434
+
435
+ Property(node: OxlintASTNode): void {
436
+ // Only process ObjectProperty nodes
437
+ if (!isObjectProperty(node)) {
438
+ return;
439
+ }
440
+
441
+ // Skip properties that are allowed to have JSX values
442
+ if (isJSXAllowedKey(node, jsxAllowedProperties)) {
443
+ return;
444
+ }
445
+
446
+ const property = node as Property;
447
+ const value = property.value;
448
+
449
+ if (
450
+ !value ||
451
+ typeof value === "string" ||
452
+ typeof value === "number" ||
453
+ typeof value === "boolean" ||
454
+ value === null
455
+ ) {
456
+ return;
457
+ }
458
+
459
+ // Check for direct JSX
460
+ if (isJSX(value)) {
461
+ context.report({
462
+ node: value,
463
+ message: messages.jsxInObjectLiteral,
464
+ });
465
+ return;
466
+ }
467
+
468
+ // Check for parenthesized JSX
469
+ if (value.type === "ParenthesizedExpression") {
470
+ const inner = unwrapParen(value);
471
+ if (isJSX(inner)) {
472
+ context.report({
473
+ node: inner,
474
+ message: messages.jsxInObjectLiteral,
475
+ });
476
+ }
477
+ }
478
+ },
479
+ };
480
+ },
481
+ };
482
+
483
+ // ============================================================
484
+ // Plugin Export
485
+ // ============================================================
486
+
487
+ export default {
488
+ meta: {
489
+ name: "oxlint-plugin-restricted",
490
+ version: "1.0.0",
491
+ },
492
+ rules: {
493
+ "restricted-syntax": restrictedSyntaxRule,
494
+ },
495
+ };
496
+
497
+ // Named exports for direct access
498
+ export { DEFAULT_CONFIG as defaultConfig };
499
+ export { DEFAULT_MESSAGES as defaultMessages };
500
+ export type { RestrictedSyntaxMessages, RestrictedSyntaxPluginConfig };
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Test file for oxlint-plugin-restricted/restricted-syntax rule
3
+ *
4
+ * This file verifies that the restricted-syntax plugin catches all violations:
5
+ * - unknown type usage
6
+ * - object type usage
7
+ * - throw statements
8
+ * - JSX in object literals (except icon property)
9
+ *
10
+ * Each violation is marked with eslint-disable-next-line to assert that an
11
+ * error SHOULD occur. If the rule stops working, these assertions will become
12
+ * errors themselves.
13
+ */
14
+
15
+ import type React from "react";
16
+
17
+ // ============================================================================
18
+ // TEST 1: unknown type (SHOULD ERROR)
19
+ // ============================================================================
20
+
21
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax
22
+ const testUnknown: unknown = 5;
23
+
24
+ // ============================================================================
25
+ // TEST 2: object type (SHOULD ERROR)
26
+ // ============================================================================
27
+
28
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax
29
+ const testObject: object = {};
30
+
31
+ // ============================================================================
32
+ // TEST 3: throw statement (SHOULD ERROR)
33
+ // ============================================================================
34
+
35
+ function testThrow() {
36
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax
37
+ throw new Error("error"); // Should error: Usage of 'throw' statements is not allowed
38
+ }
39
+
40
+ // ============================================================================
41
+ // TEST 4: JSX in object literal (SHOULD ERROR)
42
+ // ============================================================================
43
+
44
+ const configWithJsx = {
45
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, oxlint-plugin-i18n/no-literal-string
46
+ content: <div>Test</div>, // Should error: JSX elements inside object literals are not allowed
47
+ };
48
+
49
+ // ============================================================================
50
+ // TEST 5: JSX in object with icon exception (SHOULD PASS)
51
+ // ============================================================================
52
+
53
+ const configWithIcon: { icon: React.ReactNode } = {
54
+ // eslint-disable-next-line oxlint-plugin-i18n/no-literal-string
55
+ icon: <svg>Icon</svg>, // Should NOT error: icon property is allowed
56
+ };
57
+
58
+ // ============================================================================
59
+ // TEST 6: Parenthesized JSX in object (SHOULD ERROR)
60
+ // ============================================================================
61
+
62
+ const configWithParenthesizedJsx = {
63
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax, oxlint-plugin-i18n/no-literal-string
64
+ element: <span>Wrapped</span>, // Should error: JSX elements inside object literals are not allowed
65
+ };
66
+
67
+ export {
68
+ configWithIcon,
69
+ configWithJsx,
70
+ configWithParenthesizedJsx,
71
+ testObject,
72
+ testThrow,
73
+ testUnknown,
74
+ };