@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,90 @@
1
+ /**
2
+ * Section Widget Logic
3
+ * Shared data extraction and processing for SECTION widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed section data structure
11
+ */
12
+ export interface ProcessedSection {
13
+ title: string;
14
+ content: WidgetData;
15
+ description?: string;
16
+ collapsible?: boolean;
17
+ defaultExpanded?: boolean;
18
+ }
19
+
20
+ /**
21
+ * Check if section is empty (has no meaningful content)
22
+ */
23
+ export function isSectionEmpty(value: Record<string, WidgetData>): boolean {
24
+ const entries = Object.entries(value);
25
+ if (entries.length === 0) {
26
+ return true;
27
+ }
28
+
29
+ // Check if all values are empty/null/undefined
30
+ return entries.every((entry) => {
31
+ const val = entry[1];
32
+ if (val === null || val === undefined) {
33
+ return true;
34
+ }
35
+ if (Array.isArray(val) && val.length === 0) {
36
+ return true;
37
+ }
38
+ if (typeof val === "object" && Object.keys(val).length === 0) {
39
+ return true;
40
+ }
41
+ return false;
42
+ });
43
+ }
44
+
45
+ /**
46
+ * Extract and validate section data from WidgetData
47
+ */
48
+ export function extractSectionData(value: WidgetData): ProcessedSection | null {
49
+ // Section must be an object
50
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
51
+ return null;
52
+ }
53
+
54
+ // Extract required title
55
+ const title =
56
+ "title" in value && typeof value.title === "string" ? value.title : "";
57
+
58
+ if (!title) {
59
+ return null;
60
+ }
61
+
62
+ // Extract required content
63
+ const content = "content" in value ? value.content : null;
64
+
65
+ if (content === null || content === undefined) {
66
+ return null;
67
+ }
68
+
69
+ // Extract optional properties
70
+ const description =
71
+ "description" in value && typeof value.description === "string"
72
+ ? value.description
73
+ : undefined;
74
+ const collapsible =
75
+ "collapsible" in value && typeof value.collapsible === "boolean"
76
+ ? value.collapsible
77
+ : false;
78
+ const defaultExpanded =
79
+ "defaultExpanded" in value && typeof value.defaultExpanded === "boolean"
80
+ ? value.defaultExpanded
81
+ : true;
82
+
83
+ return {
84
+ title,
85
+ content,
86
+ description,
87
+ collapsible,
88
+ defaultExpanded,
89
+ };
90
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Stats Grid Widget Logic
3
+ * Shared data extraction and processing for STATS_GRID widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+ import type { ProcessedMetricCard } from "./metric-card";
9
+ import { extractMetricCardData } from "./metric-card";
10
+
11
+ /**
12
+ * Processed stats grid data structure
13
+ */
14
+ export interface ProcessedStatsGrid {
15
+ stats: ProcessedMetricCard[];
16
+ columns: number;
17
+ title?: string;
18
+ }
19
+
20
+ /**
21
+ * Extract and validate stats grid data from WidgetData
22
+ */
23
+ export function extractStatsGridData(
24
+ value: WidgetData,
25
+ ): ProcessedStatsGrid | null {
26
+ // Narrow to object type first
27
+ const isObject =
28
+ typeof value === "object" && value !== null && !Array.isArray(value);
29
+
30
+ if (!isObject) {
31
+ return null;
32
+ }
33
+
34
+ // Extract stats array
35
+ const stats =
36
+ "stats" in value && Array.isArray(value.stats) ? value.stats : [];
37
+
38
+ if (stats.length === 0) {
39
+ return null;
40
+ }
41
+
42
+ // Extract optional properties
43
+ const columns =
44
+ "columns" in value && typeof value.columns === "number" ? value.columns : 3;
45
+ const title =
46
+ "title" in value && typeof value.title === "string"
47
+ ? value.title
48
+ : undefined;
49
+
50
+ // Process each stat using metric card extractor
51
+ const processedStats = stats
52
+ .map((stat: WidgetData) => extractMetricCardData(stat))
53
+ .filter((stat): stat is ProcessedMetricCard => stat !== null);
54
+
55
+ if (processedStats.length === 0) {
56
+ return null;
57
+ }
58
+
59
+ return {
60
+ stats: processedStats,
61
+ columns: Math.max(1, Math.min(4, columns)),
62
+ title,
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Get grid columns count
68
+ */
69
+ export function getStatsGridColumns(columns: number): number {
70
+ return Math.max(1, Math.min(4, columns));
71
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Tabs Widget Logic
3
+ * Shared data extraction and processing for TABS widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Tab item structure
11
+ */
12
+ export interface TabItem {
13
+ id: string;
14
+ label: string;
15
+ content: WidgetData;
16
+ disabled?: boolean;
17
+ }
18
+
19
+ /**
20
+ * Processed tabs data structure
21
+ */
22
+ export interface ProcessedTabs {
23
+ tabs: TabItem[];
24
+ activeTab?: string;
25
+ variant?: "default" | "pills" | "underline";
26
+ }
27
+
28
+ /**
29
+ * Extract and validate tabs data from WidgetData
30
+ */
31
+ export function extractTabsData(value: WidgetData): ProcessedTabs | null {
32
+ // Handle object value with tabs properties
33
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
34
+ const tabs = "tabs" in value && Array.isArray(value.tabs) ? value.tabs : [];
35
+ const activeTab =
36
+ "activeTab" in value && typeof value.activeTab === "string"
37
+ ? value.activeTab
38
+ : undefined;
39
+ const variant =
40
+ "variant" in value && typeof value.variant === "string"
41
+ ? (value.variant as "default" | "pills" | "underline")
42
+ : "default";
43
+
44
+ // Validate tabs
45
+ const validTabs = tabs
46
+ .filter((t) => typeof t === "object" && t !== null)
47
+ .map((t) => ({
48
+ id: "id" in t && typeof t.id === "string" ? t.id : "",
49
+ label: "label" in t && typeof t.label === "string" ? t.label : "",
50
+ content: "content" in t ? t.content : null,
51
+ disabled:
52
+ "disabled" in t && typeof t.disabled === "boolean"
53
+ ? t.disabled
54
+ : false,
55
+ }))
56
+ .filter((t) => t.id && t.label);
57
+
58
+ if (validTabs.length === 0) {
59
+ return null;
60
+ }
61
+
62
+ return {
63
+ tabs: validTabs,
64
+ activeTab: activeTab || validTabs[0].id,
65
+ variant,
66
+ };
67
+ }
68
+
69
+ // Invalid type
70
+ return null;
71
+ }
72
+
73
+ /**
74
+ * Get active tab from tabs
75
+ */
76
+ export function getActiveTab(data: ProcessedTabs): TabItem | null {
77
+ return (
78
+ data.tabs.find((tab) => tab.id === data.activeTab) || data.tabs[0] || null
79
+ );
80
+ }
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Text Widget Logic
3
+ * Shared data extraction and processing for TEXT widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed text data structure
11
+ */
12
+ export interface ProcessedText {
13
+ text: string;
14
+ truncate?: number;
15
+ format?: "plain" | "code" | "pre";
16
+ }
17
+
18
+ /**
19
+ * Extract and validate text data from WidgetData
20
+ */
21
+ export function extractTextData(value: WidgetData): ProcessedText | null {
22
+ // Handle string value directly
23
+ if (typeof value === "string") {
24
+ return {
25
+ text: value,
26
+ format: "plain",
27
+ };
28
+ }
29
+
30
+ // Handle number value
31
+ if (typeof value === "number") {
32
+ return {
33
+ text: String(value),
34
+ format: "plain",
35
+ };
36
+ }
37
+
38
+ // Handle boolean value
39
+ if (typeof value === "boolean") {
40
+ return {
41
+ text: value ? "true" : "false",
42
+ format: "plain",
43
+ };
44
+ }
45
+
46
+ // Handle object value with text properties
47
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
48
+ const text =
49
+ "text" in value && typeof value.text === "string" ? value.text : "";
50
+ const truncate =
51
+ "truncate" in value && typeof value.truncate === "number"
52
+ ? value.truncate
53
+ : undefined;
54
+ const format =
55
+ "format" in value && typeof value.format === "string"
56
+ ? value.format
57
+ : "plain";
58
+
59
+ if (!text) {
60
+ return null;
61
+ }
62
+
63
+ return {
64
+ text,
65
+ truncate,
66
+ format:
67
+ format === "code" || format === "pre" || format === "plain"
68
+ ? format
69
+ : "plain",
70
+ };
71
+ }
72
+
73
+ // Handle null/undefined
74
+ if (value === null || value === undefined) {
75
+ return null;
76
+ }
77
+
78
+ // Handle array by converting to JSON
79
+ if (Array.isArray(value)) {
80
+ return {
81
+ text: JSON.stringify(value),
82
+ format: "code",
83
+ };
84
+ }
85
+
86
+ return null;
87
+ }
88
+
89
+ /**
90
+ * Truncate text to specified length
91
+ */
92
+ export function truncateText(text: string, maxLength?: number): string {
93
+ if (!maxLength || text.length <= maxLength) {
94
+ return text;
95
+ }
96
+ // oxlint-disable-next-line prefer-template
97
+ return text.slice(0, maxLength - 3) + "...";
98
+ }
99
+
100
+ /**
101
+ * Format text value for display
102
+ */
103
+ export function formatText(text: string, truncate?: number): string {
104
+ return truncateText(text, truncate);
105
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Title Widget Logic
3
+ * Shared data extraction and processing for TITLE widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed title data structure
11
+ */
12
+ export interface ProcessedTitle {
13
+ text: string;
14
+ level: 1 | 2 | 3 | 4 | 5 | 6;
15
+ subtitle?: string;
16
+ align?: "left" | "center" | "right";
17
+ }
18
+
19
+ /**
20
+ * Extract and validate title data from WidgetData
21
+ */
22
+ export function extractTitleData(value: WidgetData): ProcessedTitle | null {
23
+ // Handle string value directly
24
+ if (typeof value === "string") {
25
+ return {
26
+ text: value,
27
+ level: 2,
28
+ align: "left",
29
+ };
30
+ }
31
+
32
+ // Handle object value with title properties
33
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
34
+ const text =
35
+ "text" in value && typeof value.text === "string" ? value.text : "";
36
+
37
+ if (!text) {
38
+ return null;
39
+ }
40
+
41
+ const level =
42
+ "level" in value && typeof value.level === "number" ? value.level : 2;
43
+ const subtitle =
44
+ "subtitle" in value && typeof value.subtitle === "string"
45
+ ? value.subtitle
46
+ : undefined;
47
+ const align =
48
+ "align" in value && typeof value.align === "string"
49
+ ? value.align
50
+ : "left";
51
+
52
+ return {
53
+ text,
54
+ level:
55
+ level === 1 ||
56
+ level === 2 ||
57
+ level === 3 ||
58
+ level === 4 ||
59
+ level === 5 ||
60
+ level === 6
61
+ ? level
62
+ : 2,
63
+ subtitle,
64
+ align:
65
+ align === "center" || align === "right" || align === "left"
66
+ ? align
67
+ : "left",
68
+ };
69
+ }
70
+
71
+ return null;
72
+ }
@@ -0,0 +1,240 @@
1
+ import type React from "react";
2
+
3
+ import type { ResponseType } from "@/app/api/[locale]/shared/types/response.schema";
4
+ import type { WidgetType } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
5
+ import type { UserRoleValue } from "@/app/api/[locale]/user/user-roles/enum";
6
+ import type { CountryLanguage } from "@/i18n/core/config";
7
+ import type { TranslatedKeyType } from "@/i18n/core/scoped-translation";
8
+ import type { TParams } from "@/i18n/core/static-types";
9
+
10
+ import type { UnifiedField } from "../types/endpoint";
11
+ import type { Platform } from "../types/platform";
12
+ import type { ExtractWidgetConfig } from "./configs";
13
+
14
+ export type WidgetData =
15
+ | string
16
+ | number
17
+ | boolean
18
+ | null
19
+ | undefined
20
+ | string[]
21
+ | number[]
22
+ | WidgetData[]
23
+ | { [key: string]: WidgetData };
24
+
25
+ export interface WidgetInput<TKey extends string> {
26
+ field: UnifiedField<TKey>;
27
+ value: WidgetData;
28
+ context: WidgetRenderContext;
29
+ }
30
+
31
+ export type WidgetActionType =
32
+ | "click"
33
+ | "edit"
34
+ | "delete"
35
+ | "create"
36
+ | "navigate"
37
+ | "refresh"
38
+ | "retry"
39
+ | "cancel"
40
+ | "submit";
41
+
42
+ export type WidgetActionPayload =
43
+ | { type: "click"; fieldName: string; value?: string | number | boolean }
44
+ | { type: "edit"; fieldName: string; oldValue: string; newValue: string }
45
+ | { type: "delete"; id: string }
46
+ | { type: "create"; data: Record<string, string | number | boolean> }
47
+ | { type: "navigate"; url: string }
48
+ | { type: "refresh" }
49
+ | { type: "retry" }
50
+ | { type: "cancel" }
51
+ | { type: "submit"; data: Record<string, string | number | boolean> };
52
+
53
+ export interface WidgetAction {
54
+ type: WidgetActionType;
55
+ payload: WidgetActionPayload;
56
+ metadata?: {
57
+ fieldName?: string;
58
+ fieldPath?: string;
59
+ timestamp?: number;
60
+ };
61
+ }
62
+
63
+ export interface WidgetRenderContext {
64
+ locale: CountryLanguage;
65
+ isInteractive: boolean;
66
+ permissions: readonly UserRoleValue[];
67
+ onNavigate?: (url: string) => void;
68
+ platform?:
69
+ | typeof Platform.TRPC
70
+ | typeof Platform.NEXT_PAGE
71
+ | typeof Platform.NEXT_API
72
+ | typeof Platform.CLI
73
+ | typeof Platform.CLI_PACKAGE;
74
+ theme?: "light" | "dark" | "system";
75
+ endpointFields?: Record<string, WidgetData>; // Original endpoint fields for nested path lookup
76
+ disabled?: boolean; // Disable all form inputs
77
+ response?: ResponseType<WidgetData>; // Full ResponseType from endpoint (includes success/error state)
78
+ /**
79
+ * Optional scoped translation function for this endpoint
80
+ * When provided, widgets should use this instead of the global translation function
81
+ * This enables module-specific translations with type safety
82
+ * Note: Uses method syntax for bivariance - accepts both narrow (scoped) and broad (string) key types
83
+ */
84
+ scopedT: (locale: CountryLanguage) => {
85
+ t(key: string, params?: TParams): TranslatedKeyType;
86
+ };
87
+ /**
88
+ * Endpoint mutations available for widgets to trigger directly
89
+ * Widgets can call these methods to perform CRUD operations
90
+ * This enables definition-driven interactions without custom handlers
91
+ */
92
+ endpointMutations?: {
93
+ create?: {
94
+ submit: (data: Record<string, WidgetData>) => Promise<void>;
95
+ isSubmitting?: boolean;
96
+ };
97
+ update?: {
98
+ submit: (data: Record<string, WidgetData>) => Promise<void>;
99
+ isSubmitting?: boolean;
100
+ };
101
+ delete?: {
102
+ submit: (data: Record<string, WidgetData>) => Promise<void>;
103
+ isSubmitting?: boolean;
104
+ };
105
+ read?: {
106
+ refetch: () => Promise<void>;
107
+ isLoading?: boolean;
108
+ };
109
+ };
110
+ }
111
+
112
+ /**
113
+ * Base widget component props.
114
+ */
115
+ export interface WidgetComponentProps<TKey extends string> {
116
+ field: UnifiedField<TKey>;
117
+ fieldName?: string;
118
+ value: WidgetData;
119
+ context: WidgetRenderContext;
120
+ className?: string;
121
+ onSubmit?: () => void;
122
+ isSubmitting?: boolean;
123
+ }
124
+
125
+ /**
126
+ * Field type with narrowed widget config based on WidgetType discriminator.
127
+ */
128
+ export type NarrowedField<
129
+ TKey extends string,
130
+ T extends WidgetType,
131
+ > = UnifiedField<TKey> & {
132
+ ui: ExtractWidgetConfig<T, TKey>;
133
+ };
134
+
135
+ // ============================================================================
136
+ // DISCRIMINATED UNION TYPES FOR TYPE-SAFE WIDGET PROPS
137
+ // ============================================================================
138
+
139
+ /**
140
+ * Base widget props shared across all platforms.
141
+ * The `widgetType` field acts as the discriminator for the union.
142
+ */
143
+ export interface BaseWidgetProps<TKey extends string, T extends WidgetType> {
144
+ widgetType: T;
145
+ field: NarrowedField<TKey, T>;
146
+ value: WidgetData;
147
+ }
148
+
149
+ /**
150
+ * Maps each WidgetType to its base props.
151
+ * Used to create discriminated unions that TypeScript can narrow automatically.
152
+ */
153
+ export type WidgetPropsMap<TKey extends string> = {
154
+ [T in WidgetType]: BaseWidgetProps<TKey, T>;
155
+ };
156
+
157
+ /**
158
+ * Union of all widget props - TypeScript narrows this in switch statements.
159
+ */
160
+ export type WidgetPropsUnion<TKey extends string> =
161
+ WidgetPropsMap<TKey>[WidgetType];
162
+
163
+ /**
164
+ * React-specific widget props. Extends base props with React context and form handling.
165
+ */
166
+ export interface ReactWidgetProps<
167
+ T extends WidgetType,
168
+ TKey extends string,
169
+ > extends BaseWidgetProps<TKey, T> {
170
+ context: WidgetRenderContext;
171
+ fieldName?: string;
172
+ onAction?: (action: WidgetAction) => void | Promise<void>;
173
+ className?: string;
174
+ onSubmit?: () => void;
175
+ isSubmitting?: boolean;
176
+ }
177
+
178
+ /**
179
+ * Value-only React widget props for widgets that don't need field definition.
180
+ * Use this for leaf widgets that only consume value/context (e.g., MetricCardWidget).
181
+ */
182
+ export interface ValueOnlyReactWidgetProps<T extends WidgetType> {
183
+ widgetType: T;
184
+ value: WidgetData;
185
+ context: WidgetRenderContext;
186
+ className?: string;
187
+ }
188
+
189
+ /**
190
+ * Maps each WidgetType to React-specific props.
191
+ */
192
+ export type ReactWidgetPropsMap<TKey extends string> = {
193
+ [T in WidgetType]: ReactWidgetProps<T, TKey>;
194
+ };
195
+
196
+ /**
197
+ * Union of all React widget props.
198
+ */
199
+ export type ReactWidgetPropsUnion<TKey extends string> =
200
+ ReactWidgetPropsMap<TKey>[WidgetType];
201
+
202
+ export type WidgetRenderer<TKey extends string> = (
203
+ props: WidgetComponentProps<TKey>,
204
+ ) => React.ReactElement | string | null;
205
+
206
+ export interface WidgetRegistryEntry<TKey extends string> {
207
+ type: WidgetType;
208
+ component:
209
+ | React.ComponentType<WidgetComponentProps<TKey>>
210
+ | WidgetRenderer<TKey>;
211
+ platforms?: Array<
212
+ | typeof Platform.TRPC
213
+ | typeof Platform.NEXT_PAGE
214
+ | typeof Platform.NEXT_API
215
+ | typeof Platform.CLI
216
+ >;
217
+ supportsEditing?: boolean;
218
+ supportsCRUD?: boolean;
219
+ }
220
+
221
+ export interface WidgetErrorBoundaryProps {
222
+ children: React.ReactNode;
223
+ locale: CountryLanguage;
224
+ fallback?: React.ReactElement;
225
+ onError?: (error: Error, errorInfo: React.ErrorInfo) => void;
226
+ }
227
+
228
+ export interface WidgetLoadingProps {
229
+ message?: string;
230
+ size?: "sm" | "md" | "lg";
231
+ }
232
+
233
+ export interface WidgetEmptyStateProps {
234
+ message: string;
235
+ icon?: string;
236
+ action?: {
237
+ label: string;
238
+ onClick: () => void;
239
+ };
240
+ }