@next-vibe/checker 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/.dist/bin/vibe-runtime.js +26 -22
  2. package/.dist/bin/vibe-runtime.js.map +5 -5
  3. package/.dist/oxlint-plugins/i18n.js +4 -0
  4. package/.dist/oxlint-plugins/i18n.js.map +1 -0
  5. package/.dist/oxlint-plugins/jsx-capitalization.js +4 -0
  6. package/.dist/oxlint-plugins/jsx-capitalization.js.map +1 -0
  7. package/.dist/oxlint-plugins/restricted-syntax.js +4 -0
  8. package/.dist/oxlint-plugins/restricted-syntax.js.map +1 -0
  9. package/check.config.ts +4 -12
  10. package/package.json +2 -9
  11. package/src/app/api/[locale]/LICENSE +674 -0
  12. package/src/app/api/[locale]/i18n/de/index.ts +13 -0
  13. package/src/app/api/[locale]/i18n/en/index.ts +12 -0
  14. package/src/app/api/[locale]/i18n/pl/index.ts +11 -0
  15. package/src/app/api/[locale]/shared/i18n/de/index.ts +85 -0
  16. package/src/app/api/[locale]/shared/i18n/en/index.ts +83 -0
  17. package/src/app/api/[locale]/shared/i18n/pl/index.ts +85 -0
  18. package/src/app/api/[locale]/shared/stats-filtering.ts +202 -0
  19. package/src/app/api/[locale]/shared/types/common.schema.ts +55 -0
  20. package/src/app/api/[locale]/shared/types/response.schema.ts +372 -0
  21. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +375 -0
  22. package/src/app/api/[locale]/shared/types/utils.ts +190 -0
  23. package/src/app/api/[locale]/shared/utils/base64.ts +49 -0
  24. package/src/app/api/[locale]/shared/utils/env-util.ts +40 -0
  25. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +21 -0
  26. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +19 -0
  27. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +21 -0
  28. package/src/app/api/[locale]/shared/utils/index.ts +11 -0
  29. package/src/app/api/[locale]/shared/utils/object-path.ts +41 -0
  30. package/src/app/api/[locale]/shared/utils/object.test.ts +82 -0
  31. package/src/app/api/[locale]/shared/utils/object.ts +75 -0
  32. package/src/app/api/[locale]/shared/utils/parse-error.ts +134 -0
  33. package/src/app/api/[locale]/shared/utils/parse-json.ts +70 -0
  34. package/src/app/api/[locale]/shared/utils/time.ts +53 -0
  35. package/src/app/api/[locale]/shared/utils/validation.ts +127 -0
  36. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +116 -0
  37. package/src/app/api/[locale]/system/builder/definition.ts +1942 -0
  38. package/src/app/api/[locale]/system/builder/enum.ts +78 -0
  39. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +677 -0
  40. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +665 -0
  41. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +668 -0
  42. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +182 -0
  43. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +583 -0
  44. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +261 -0
  45. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +197 -0
  46. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +159 -0
  47. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +97 -0
  48. package/src/app/api/[locale]/system/builder/repository/constants.ts +125 -0
  49. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +75 -0
  50. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +98 -0
  51. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +80 -0
  52. package/src/app/api/[locale]/system/builder/repository/index.ts +2 -0
  53. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +146 -0
  54. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +104 -0
  55. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +79 -0
  56. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +125 -0
  57. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +291 -0
  58. package/src/app/api/[locale]/system/builder/route.ts +21 -0
  59. package/src/app/api/[locale]/system/builder/test-files/file1.ts +2 -0
  60. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +10 -0
  61. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +16 -0
  62. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +2 -0
  63. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +38 -0
  64. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +8 -0
  65. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +24 -0
  66. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +6 -0
  67. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +18 -0
  68. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +7 -0
  69. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +27 -0
  70. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +19 -0
  71. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +1 -0
  72. package/src/app/api/[locale]/system/builder/test-files/test3.css +1 -0
  73. package/src/app/api/[locale]/system/check/config/repository.ts +886 -0
  74. package/src/app/api/[locale]/system/check/config/shared.ts +396 -0
  75. package/src/app/api/[locale]/system/check/config/types.ts +616 -0
  76. package/src/app/api/[locale]/system/check/config/utils.ts +171 -0
  77. package/src/app/api/[locale]/system/check/i18n/de/index.ts +15 -0
  78. package/src/app/api/[locale]/system/check/i18n/en/index.ts +14 -0
  79. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +15 -0
  80. package/src/app/api/[locale]/system/check/lint/definition.ts +414 -0
  81. package/src/app/api/[locale]/system/check/lint/enum.ts +37 -0
  82. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +164 -0
  83. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +162 -0
  84. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +164 -0
  85. package/src/app/api/[locale]/system/check/lint/repository.ts +753 -0
  86. package/src/app/api/[locale]/system/check/lint/route.ts +21 -0
  87. package/src/app/api/[locale]/system/check/oxlint/README.md +190 -0
  88. package/src/app/api/[locale]/system/check/oxlint/definition.ts +414 -0
  89. package/src/app/api/[locale]/system/check/oxlint/enum.ts +37 -0
  90. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +171 -0
  91. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +168 -0
  92. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +172 -0
  93. package/src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts +372 -0
  94. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +246 -0
  95. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts +583 -0
  96. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts +500 -0
  97. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +74 -0
  98. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +305 -0
  99. package/src/app/api/[locale]/system/check/oxlint/repository.ts +959 -0
  100. package/src/app/api/[locale]/system/check/oxlint/route.ts +21 -0
  101. package/src/app/api/[locale]/system/check/oxlint/types.ts +193 -0
  102. package/src/app/api/[locale]/system/check/test-project/bun.lock +532 -0
  103. package/src/app/api/[locale]/system/check/test-project/check.config.ts +981 -0
  104. package/src/app/api/[locale]/system/check/test-project/package.json +12 -0
  105. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +6 -0
  106. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +18 -0
  107. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +107 -0
  108. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +37 -0
  109. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +137 -0
  110. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +129 -0
  111. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +131 -0
  112. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +95 -0
  113. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +76 -0
  114. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +95 -0
  115. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +61 -0
  116. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +80 -0
  117. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +27 -0
  118. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +34 -0
  119. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +1 -0
  120. package/src/app/api/[locale]/system/check/typecheck/definition.ts +369 -0
  121. package/src/app/api/[locale]/system/check/typecheck/enum.ts +37 -0
  122. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +159 -0
  123. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +150 -0
  124. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +155 -0
  125. package/src/app/api/[locale]/system/check/typecheck/repository.ts +919 -0
  126. package/src/app/api/[locale]/system/check/typecheck/route.ts +22 -0
  127. package/src/app/api/[locale]/system/check/typecheck/utils.ts +168 -0
  128. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +568 -0
  129. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +69 -0
  130. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +192 -0
  131. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +189 -0
  132. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +192 -0
  133. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +545 -0
  134. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +1142 -0
  135. package/src/app/api/[locale]/system/check/vibe-check/route.ts +21 -0
  136. package/src/app/api/[locale]/system/generated/endpoint.ts +313 -0
  137. package/src/app/api/[locale]/system/generated/endpoints.ts +156 -0
  138. package/src/app/api/[locale]/system/generated/route-handlers.ts +224 -0
  139. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +193 -0
  140. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +48 -0
  141. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +48 -0
  142. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +50 -0
  143. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +291 -0
  144. package/src/app/api/[locale]/system/generators/endpoint/route.ts +21 -0
  145. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +246 -0
  146. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +54 -0
  147. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +52 -0
  148. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +54 -0
  149. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +463 -0
  150. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +383 -0
  151. package/src/app/api/[locale]/system/generators/endpoints/route.ts +18 -0
  152. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +194 -0
  153. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +71 -0
  154. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +69 -0
  155. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +71 -0
  156. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +294 -0
  157. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +18 -0
  158. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +355 -0
  159. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +96 -0
  160. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +94 -0
  161. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +96 -0
  162. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +257 -0
  163. package/src/app/api/[locale]/system/generators/generate-all/route.ts +20 -0
  164. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +15 -0
  165. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +14 -0
  166. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +15 -0
  167. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +198 -0
  168. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +48 -0
  169. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +48 -0
  170. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +50 -0
  171. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +277 -0
  172. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +17 -0
  173. package/src/app/api/[locale]/system/generators/shared/utils.ts +233 -0
  174. package/src/app/api/[locale]/system/help/definition.ts +445 -0
  175. package/src/app/api/[locale]/system/help/i18n/de/index.ts +267 -0
  176. package/src/app/api/[locale]/system/help/i18n/en/index.ts +262 -0
  177. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +265 -0
  178. package/src/app/api/[locale]/system/help/interactive/definition.ts +125 -0
  179. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +22 -0
  180. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +19 -0
  181. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +22 -0
  182. package/src/app/api/[locale]/system/help/interactive/repository.ts +1025 -0
  183. package/src/app/api/[locale]/system/help/interactive/route.ts +53 -0
  184. package/src/app/api/[locale]/system/help/list/definition.ts +372 -0
  185. package/src/app/api/[locale]/system/help/list/repository.ts +110 -0
  186. package/src/app/api/[locale]/system/help/list/route.ts +21 -0
  187. package/src/app/api/[locale]/system/help/repository.ts +212 -0
  188. package/src/app/api/[locale]/system/help/route.ts +16 -0
  189. package/src/app/api/[locale]/system/i18n/de/index.ts +68 -0
  190. package/src/app/api/[locale]/system/i18n/en/index.ts +65 -0
  191. package/src/app/api/[locale]/system/i18n/pl/index.ts +66 -0
  192. package/src/app/api/[locale]/system/release-tool/definition.ts +3104 -0
  193. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +813 -0
  194. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +797 -0
  195. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +810 -0
  196. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +128 -0
  197. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +212 -0
  198. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +566 -0
  199. package/src/app/api/[locale]/system/release-tool/repository/config.ts +113 -0
  200. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +407 -0
  201. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +527 -0
  202. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +403 -0
  203. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +100 -0
  204. package/src/app/api/[locale]/system/release-tool/repository/index.ts +1 -0
  205. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +638 -0
  206. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +169 -0
  207. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +253 -0
  208. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +428 -0
  209. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +293 -0
  210. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +1198 -0
  211. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +136 -0
  212. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +642 -0
  213. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +288 -0
  214. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +297 -0
  215. package/src/app/api/[locale]/system/release-tool/route.ts +21 -0
  216. package/src/app/api/[locale]/system/unified-interface/README.md +328 -0
  217. package/src/app/api/[locale]/system/unified-interface/cli/README.md +349 -0
  218. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +95 -0
  219. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +146 -0
  220. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +266 -0
  221. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +26 -0
  222. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +157 -0
  223. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +155 -0
  224. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +158 -0
  225. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +595 -0
  226. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +129 -0
  227. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +155 -0
  228. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +452 -0
  229. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +297 -0
  230. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +859 -0
  231. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +12 -0
  232. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +11 -0
  233. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +12 -0
  234. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +262 -0
  235. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +54 -0
  236. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +52 -0
  237. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +54 -0
  238. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +421 -0
  239. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +25 -0
  240. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +181 -0
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +61 -0
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +59 -0
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +61 -0
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +195 -0
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +22 -0
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +188 -0
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +54 -0
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +52 -0
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +54 -0
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +209 -0
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +24 -0
  252. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +200 -0
  253. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +54 -0
  254. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +52 -0
  255. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +54 -0
  256. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +113 -0
  257. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +22 -0
  258. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +304 -0
  259. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +270 -0
  260. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +309 -0
  261. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +126 -0
  262. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +67 -0
  263. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +65 -0
  264. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +67 -0
  265. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +74 -0
  266. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +39 -0
  267. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +54 -0
  268. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +298 -0
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +89 -0
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +298 -0
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +96 -0
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +186 -0
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +65 -0
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +570 -0
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +80 -0
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +385 -0
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +99 -0
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +55 -0
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +67 -0
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +729 -0
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +87 -0
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +112 -0
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +59 -0
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +50 -0
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +131 -0
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +291 -0
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +120 -0
  288. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +149 -0
  289. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +61 -0
  290. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +78 -0
  291. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +42 -0
  292. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +418 -0
  293. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +534 -0
  294. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +42 -0
  295. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +40 -0
  296. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +43 -0
  297. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +114 -0
  298. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +146 -0
  299. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +182 -0
  300. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +179 -0
  301. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +181 -0
  302. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +343 -0
  303. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +147 -0
  304. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +38 -0
  305. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +14 -0
  306. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +309 -0
  307. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +154 -0
  308. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +193 -0
  309. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +246 -0
  310. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +1510 -0
  311. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +581 -0
  312. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +52 -0
  313. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +152 -0
  314. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +265 -0
  315. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +680 -0
  316. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +220 -0
  317. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +325 -0
  318. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +184 -0
  319. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +201 -0
  320. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +58 -0
  321. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +49 -0
  322. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +47 -0
  323. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +58 -0
  324. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +110 -0
  325. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +339 -0
  326. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +408 -0
  327. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +1349 -0
  328. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +107 -0
  329. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +268 -0
  330. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +114 -0
  331. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +169 -0
  332. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +88 -0
  333. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +177 -0
  334. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +82 -0
  335. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +33 -0
  336. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +4 -0
  337. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +289 -0
  338. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +1167 -0
  339. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +382 -0
  340. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +34 -0
  341. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +80 -0
  342. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +76 -0
  343. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +27 -0
  344. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +63 -0
  345. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +241 -0
  346. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +256 -0
  347. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +1158 -0
  348. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +80 -0
  349. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +82 -0
  350. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +75 -0
  351. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +89 -0
  352. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +302 -0
  353. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +202 -0
  354. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +129 -0
  355. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +81 -0
  356. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +258 -0
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +123 -0
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +387 -0
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +89 -0
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +78 -0
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +93 -0
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +448 -0
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +38 -0
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +130 -0
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +127 -0
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +68 -0
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +81 -0
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +176 -0
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +241 -0
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +90 -0
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +71 -0
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +80 -0
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +105 -0
  374. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +72 -0
  375. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +240 -0
  376. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +137 -0
  377. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +437 -0
  378. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +40 -0
  379. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +465 -0
  380. package/src/app/api/[locale]/user/auth/enum.ts +16 -0
  381. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +227 -0
  382. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +205 -0
  383. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +219 -0
  384. package/src/app/api/[locale]/user/auth/types.ts +110 -0
  385. package/src/app/api/[locale]/user/enum.ts +64 -0
  386. package/src/app/api/[locale]/user/private/i18n/de/index.ts +3 -0
  387. package/src/app/api/[locale]/user/private/i18n/en/index.ts +1 -0
  388. package/src/app/api/[locale]/user/private/i18n/pl/index.ts +3 -0
  389. package/src/app/api/[locale]/user/types.ts +118 -0
  390. package/src/app/api/[locale]/user/user-roles/enum.ts +112 -0
  391. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +85 -0
  392. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +83 -0
  393. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +86 -0
  394. package/src/app/api/[locale]/user/user-roles/types.ts +34 -0
  395. package/src/app/api/i18n/de/index.ts +6 -0
  396. package/src/app/api/i18n/en/index.ts +5 -0
  397. package/src/app/api/i18n/pl/index.ts +5 -0
  398. package/src/app/i18n/de/index.ts +6 -0
  399. package/src/app/i18n/en/index.ts +5 -0
  400. package/src/app/i18n/pl/index.ts +5 -0
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Error Widget Logic
3
+ * Shared data extraction and processing for ERROR widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed error data structure
11
+ */
12
+ export interface ProcessedError {
13
+ title: string;
14
+ message?: string;
15
+ code?: string;
16
+ stack?: string;
17
+ action?: {
18
+ label: string;
19
+ action: string;
20
+ };
21
+ }
22
+
23
+ /**
24
+ * Extract and validate error data from WidgetData
25
+ */
26
+ export function extractErrorData(value: WidgetData): ProcessedError | null {
27
+ // Handle string value directly (simple error message)
28
+ if (typeof value === "string") {
29
+ return {
30
+ title: "Error",
31
+ message: value,
32
+ };
33
+ }
34
+
35
+ // Handle Error object
36
+ if (value instanceof Error) {
37
+ return {
38
+ title: value.name || "Error",
39
+ message: value.message,
40
+ stack: value.stack,
41
+ };
42
+ }
43
+
44
+ // Handle object value with error properties
45
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
46
+ const title =
47
+ "title" in value && typeof value.title === "string"
48
+ ? value.title
49
+ : "Error";
50
+ const message =
51
+ "message" in value && typeof value.message === "string"
52
+ ? value.message
53
+ : undefined;
54
+ const code =
55
+ "code" in value && typeof value.code === "string"
56
+ ? value.code
57
+ : undefined;
58
+ const stack =
59
+ "stack" in value && typeof value.stack === "string"
60
+ ? value.stack
61
+ : undefined;
62
+ const action =
63
+ "action" in value &&
64
+ typeof value.action === "object" &&
65
+ value.action !== null
66
+ ? {
67
+ label:
68
+ "label" in value.action && typeof value.action.label === "string"
69
+ ? value.action.label
70
+ : "Retry",
71
+ action:
72
+ "action" in value.action &&
73
+ typeof value.action.action === "string"
74
+ ? value.action.action
75
+ : "",
76
+ }
77
+ : undefined;
78
+
79
+ return {
80
+ title,
81
+ message,
82
+ code,
83
+ stack,
84
+ action,
85
+ };
86
+ }
87
+
88
+ // Default error
89
+ return {
90
+ title: "Error",
91
+ message: "An unknown error occurred",
92
+ };
93
+ }
@@ -0,0 +1,448 @@
1
+ /**
2
+ * Grouped List Widget Logic
3
+ * Shared data extraction and processing for GROUPED_LIST widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Individual item in a grouped list
11
+ */
12
+ export interface GroupedListItem {
13
+ [key: string]: WidgetData;
14
+ line?: number;
15
+ column?: number;
16
+ severity?: string;
17
+ message?: string;
18
+ rule?: string;
19
+ file?: string;
20
+ }
21
+
22
+ /**
23
+ * Stat configuration for summary
24
+ */
25
+ export interface StatConfig {
26
+ field: string;
27
+ value: string;
28
+ label?: string;
29
+ icon?: string;
30
+ color?: string;
31
+ }
32
+
33
+ /**
34
+ * Grouped list configuration
35
+ */
36
+ export interface GroupedListConfig {
37
+ groupBy: string;
38
+ sortBy: string;
39
+ showGroupSummary: boolean;
40
+ maxItemsPerGroup: number;
41
+ summaryTitle?: string;
42
+ summaryStats?: StatConfig[];
43
+ renderMode?: "code-quality" | "simple";
44
+ hierarchical?: boolean;
45
+ }
46
+
47
+ /**
48
+ * Tree node for hierarchical rendering
49
+ */
50
+ export interface TreeNode {
51
+ name: string;
52
+ fullPath: string;
53
+ items: GroupedListItem[];
54
+ children: Map<string, TreeNode>;
55
+ }
56
+
57
+ /**
58
+ * Processed grouped list data structure
59
+ */
60
+ export interface ProcessedGroupedList {
61
+ groups: Array<{
62
+ key: string;
63
+ label: string;
64
+ items: GroupedListItem[];
65
+ summary?: Record<string, WidgetData>;
66
+ }>;
67
+ maxItemsPerGroup?: number;
68
+ showGroupSummary: boolean;
69
+ }
70
+
71
+ /**
72
+ * Get grouped list configuration from field
73
+ */
74
+ export function getGroupedListConfig(): GroupedListConfig {
75
+ return {
76
+ groupBy: "file",
77
+ sortBy: "severity",
78
+ showGroupSummary: true,
79
+ maxItemsPerGroup: 50,
80
+ };
81
+ }
82
+
83
+ /**
84
+ * Group list data by specified field with sorting
85
+ */
86
+ export function groupListData(
87
+ data: GroupedListItem[],
88
+ groupBy: string,
89
+ ): Map<string, GroupedListItem[]> {
90
+ const groups = new Map<string, GroupedListItem[]>();
91
+
92
+ for (const item of data) {
93
+ const groupValue = item[groupBy];
94
+ let groupKey = "unknown";
95
+ if (typeof groupValue === "string") {
96
+ groupKey = groupValue;
97
+ } else if (typeof groupValue === "number") {
98
+ groupKey = String(groupValue);
99
+ } else if (typeof groupValue === "boolean") {
100
+ groupKey = groupValue ? "true" : "false";
101
+ } else if (groupValue !== null && groupValue !== undefined) {
102
+ groupKey = "unknown";
103
+ }
104
+ if (!groups.has(groupKey)) {
105
+ groups.set(groupKey, []);
106
+ }
107
+ groups.get(groupKey)!.push(item);
108
+ }
109
+
110
+ // Sort groups by key alphabetically
111
+ return new Map(
112
+ [...groups.entries()].toSorted((a, b) => a[0].localeCompare(b[0])),
113
+ );
114
+ }
115
+
116
+ /**
117
+ * Sort grouped items by specified field
118
+ */
119
+ export function sortGroupedItems(
120
+ items: GroupedListItem[],
121
+ sortBy: string,
122
+ ): GroupedListItem[] {
123
+ return items.toSorted((a, b) => {
124
+ if (sortBy === "severity") {
125
+ const severityOrder = { error: 0, warning: 1, info: 2 };
126
+ const aOrder =
127
+ severityOrder[a.severity as keyof typeof severityOrder] ?? 3;
128
+ const bOrder =
129
+ severityOrder[b.severity as keyof typeof severityOrder] ?? 3;
130
+ if (aOrder !== bOrder) {
131
+ return aOrder - bOrder;
132
+ }
133
+ }
134
+
135
+ // Secondary sort by line number
136
+ if (typeof a.line === "number" && typeof b.line === "number") {
137
+ return a.line - b.line;
138
+ }
139
+
140
+ return 0;
141
+ });
142
+ }
143
+
144
+ /**
145
+ * Build hierarchical tree structure from flat data
146
+ */
147
+ export function buildHierarchicalTree(
148
+ data: GroupedListItem[],
149
+ groupBy: string,
150
+ ): TreeNode {
151
+ const root: TreeNode = {
152
+ name: "",
153
+ fullPath: "",
154
+ items: [],
155
+ children: new Map(),
156
+ };
157
+
158
+ // Group items by category path
159
+ for (const item of data) {
160
+ const categoryPath = item[groupBy];
161
+ if (typeof categoryPath !== "string") {
162
+ continue;
163
+ }
164
+
165
+ const parts = categoryPath.split("/").filter((p) => p.length);
166
+ let currentNode = root;
167
+
168
+ // Build/traverse tree
169
+ for (let i = 0; i < parts.length; i++) {
170
+ const part = parts[i];
171
+ const fullPath = parts.slice(0, i + 1).join("/");
172
+
173
+ if (!currentNode.children.has(part)) {
174
+ currentNode.children.set(part, {
175
+ name: part,
176
+ fullPath,
177
+ items: [],
178
+ children: new Map(),
179
+ });
180
+ }
181
+ currentNode = currentNode.children.get(part)!;
182
+ }
183
+
184
+ // Add item to leaf node
185
+ currentNode.items.push(item);
186
+ }
187
+
188
+ return root;
189
+ }
190
+
191
+ /**
192
+ * Count items recursively including all children
193
+ */
194
+ export function countItemsRecursive(node: TreeNode): number {
195
+ let count = node.items.length;
196
+ for (const childEntry of node.children) {
197
+ const child = childEntry[1];
198
+ count += countItemsRecursive(child);
199
+ }
200
+ return count;
201
+ }
202
+
203
+ /**
204
+ * Calculate stat count for a specific field/value combination
205
+ */
206
+ export function calculateStatCount(
207
+ data: GroupedListItem[],
208
+ stat: StatConfig,
209
+ ): number {
210
+ if (!stat.field || !stat.value) {
211
+ return 0;
212
+ }
213
+
214
+ return data.filter((item) => {
215
+ const fieldValue = item[stat.field];
216
+ return fieldValue === stat.value;
217
+ }).length;
218
+ }
219
+
220
+ /**
221
+ * Extract and validate grouped list data from WidgetData
222
+ */
223
+ export function extractGroupedListData(
224
+ value: WidgetData,
225
+ config?: { groupBy?: string; sortBy?: string },
226
+ ): ProcessedGroupedList | null {
227
+ // Handle direct array input
228
+ if (Array.isArray(value)) {
229
+ const items = value as GroupedListItem[];
230
+ if (items.length === 0) {
231
+ return null;
232
+ }
233
+
234
+ // Use groupBy from config, fallback to "status", or create single group
235
+ const groupByField = config?.groupBy ?? "status";
236
+ if (groupByField in items[0]) {
237
+ const grouped = groupListData(items, groupByField);
238
+ let autoGroups = [...grouped.entries()].map(([key, groupItems]) => ({
239
+ key,
240
+ label: key,
241
+ items: groupItems,
242
+ }));
243
+
244
+ // Apply sorting if sortBy is specified
245
+ const sortBy = config?.sortBy;
246
+ if (sortBy) {
247
+ autoGroups = autoGroups.map((group) => ({
248
+ ...group,
249
+ items: sortGroupedItems(group.items, sortBy),
250
+ }));
251
+ }
252
+
253
+ return {
254
+ groups: autoGroups,
255
+ maxItemsPerGroup: undefined,
256
+ showGroupSummary: false,
257
+ };
258
+ }
259
+ // Single group with all items
260
+ let allItems = items;
261
+ if (config?.sortBy) {
262
+ allItems = sortGroupedItems(items, config.sortBy);
263
+ }
264
+
265
+ return {
266
+ groups: [
267
+ {
268
+ key: "all",
269
+ label: "All Items",
270
+ items: allItems,
271
+ },
272
+ ],
273
+ maxItemsPerGroup: undefined,
274
+ showGroupSummary: false,
275
+ };
276
+ }
277
+
278
+ // Narrow to object type
279
+ const isObject =
280
+ typeof value === "object" && value !== null && !Array.isArray(value);
281
+
282
+ if (!isObject) {
283
+ return null;
284
+ }
285
+
286
+ // Extract properties with explicit checks
287
+ const groups =
288
+ "groups" in value && Array.isArray(value.groups) ? value.groups : [];
289
+ const maxItemsPerGroup =
290
+ "maxItemsPerGroup" in value && typeof value.maxItemsPerGroup === "number"
291
+ ? value.maxItemsPerGroup
292
+ : undefined;
293
+ const showGroupSummary =
294
+ "showGroupSummary" in value && typeof value.showGroupSummary === "boolean"
295
+ ? value.showGroupSummary
296
+ : false;
297
+
298
+ // If no groups found, try to find an array property to auto-group
299
+ if (!groups || groups.length === 0) {
300
+ // Look for array properties in the value object (direct or nested)
301
+ let arrayKeys = Object.keys(value).filter((key) =>
302
+ Array.isArray(value[key]),
303
+ );
304
+
305
+ // If no direct arrays found, check nested objects (common pattern: { response: { items: [...] } })
306
+ if (arrayKeys.length === 0) {
307
+ for (const key of Object.keys(value)) {
308
+ const nestedValue = value[key];
309
+ if (
310
+ typeof nestedValue === "object" &&
311
+ nestedValue !== null &&
312
+ !Array.isArray(nestedValue)
313
+ ) {
314
+ const nestedArrayKeys = Object.keys(nestedValue).filter((nestedKey) =>
315
+ Array.isArray(nestedValue[nestedKey]),
316
+ );
317
+ if (nestedArrayKeys.length > 0) {
318
+ // Found nested array, use the nested object as the value
319
+ return extractGroupedListData(nestedValue, config);
320
+ }
321
+ }
322
+ }
323
+ }
324
+
325
+ if (arrayKeys.length > 0) {
326
+ // Use the first array found (commonly: leads, items, results, etc.)
327
+ const arrayKey = arrayKeys[0];
328
+ const items = value[arrayKey] as GroupedListItem[];
329
+
330
+ if (items.length > 0) {
331
+ // Use groupBy from config, fallback to "status", or create single group
332
+ const groupByField = config?.groupBy || "status";
333
+ if (groupByField in items[0]) {
334
+ const grouped = groupListData(items, groupByField);
335
+ let autoGroups = [...grouped.entries()].map(([key, groupItems]) => ({
336
+ key,
337
+ label: key,
338
+ items: groupItems,
339
+ }));
340
+
341
+ // Apply sorting if sortBy is specified
342
+ const sortBy = config?.sortBy;
343
+ if (sortBy) {
344
+ autoGroups = autoGroups.map((group) => ({
345
+ ...group,
346
+ items: sortGroupedItems(group.items, sortBy),
347
+ }));
348
+ }
349
+
350
+ return {
351
+ groups: autoGroups,
352
+ maxItemsPerGroup,
353
+ showGroupSummary: false,
354
+ };
355
+ }
356
+ // Single group with all items
357
+ let allItems = items;
358
+ if (config?.sortBy) {
359
+ allItems = sortGroupedItems(items, config.sortBy);
360
+ }
361
+
362
+ return {
363
+ groups: [
364
+ {
365
+ key: "all",
366
+ label: "All Items",
367
+ items: allItems,
368
+ },
369
+ ],
370
+ maxItemsPerGroup,
371
+ showGroupSummary: false,
372
+ };
373
+ }
374
+ }
375
+
376
+ return null;
377
+ }
378
+
379
+ // Process and validate groups
380
+ const processedGroups = groups
381
+ .map((group: WidgetData) => {
382
+ if (typeof group !== "object" || group === null) {
383
+ return null;
384
+ }
385
+
386
+ const groupKey = "key" in group ? String(group.key) : "";
387
+ const groupLabel = "label" in group ? String(group.label) : "";
388
+ const groupItems =
389
+ "items" in group && Array.isArray(group.items) ? group.items : [];
390
+ const groupSummary =
391
+ "summary" in group &&
392
+ typeof group.summary === "object" &&
393
+ group.summary !== null
394
+ ? (group.summary as Record<string, WidgetData>)
395
+ : undefined;
396
+
397
+ // Filter items to only valid objects
398
+ const validItems = groupItems.filter(
399
+ (item): item is GroupedListItem =>
400
+ typeof item === "object" && item !== null && !Array.isArray(item),
401
+ );
402
+
403
+ return {
404
+ key: groupKey,
405
+ label: groupLabel,
406
+ items: validItems,
407
+ summary: groupSummary,
408
+ };
409
+ })
410
+ .filter((group): group is NonNullable<typeof group> => group !== null);
411
+
412
+ if (processedGroups.length === 0) {
413
+ return null;
414
+ }
415
+
416
+ return {
417
+ groups: processedGroups,
418
+ maxItemsPerGroup,
419
+ showGroupSummary,
420
+ };
421
+ }
422
+
423
+ /**
424
+ * Get items to display based on maxItemsPerGroup
425
+ */
426
+ export function getDisplayItems(
427
+ items: GroupedListItem[],
428
+ maxItems: number | undefined,
429
+ isExpanded: boolean,
430
+ ): GroupedListItem[] {
431
+ if (!maxItems || isExpanded) {
432
+ return items;
433
+ }
434
+ return items.slice(0, maxItems);
435
+ }
436
+
437
+ /**
438
+ * Calculate remaining items count
439
+ */
440
+ export function getRemainingItemsCount(
441
+ totalItems: number,
442
+ maxItems: number | undefined,
443
+ ): number {
444
+ if (!maxItems || totalItems <= maxItems) {
445
+ return 0;
446
+ }
447
+ return totalItems - maxItems;
448
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Widget Logic Index
3
+ * Central export for all widget data extraction and processing logic
4
+ * Used by both React and CLI widget implementations
5
+ */
6
+
7
+ export * from "./accordion";
8
+ export * from "./avatar";
9
+ export * from "./badge";
10
+ export * from "./code-output";
11
+ export {
12
+ type CodeQualityItem,
13
+ countCodeQualityBySeverity,
14
+ extractCodeQualityListData,
15
+ groupCodeQualityItems,
16
+ type ProcessedCodeQualityList,
17
+ sortBySeverity,
18
+ } from "./code-quality-list";
19
+ export * from "./container";
20
+ export * from "./data-card";
21
+ export * from "./data-cards";
22
+ export * from "./data-list";
23
+ export * from "./data-table";
24
+ export * from "./editable-text";
25
+ export * from "./empty-state";
26
+ export * from "./errors";
27
+ export * from "./grouped-list";
28
+ export * from "./link";
29
+ export * from "./link-card";
30
+ export * from "./link-list";
31
+ export * from "./loading";
32
+ export * from "./markdown";
33
+ export * from "./metric-card";
34
+ export * from "./section";
35
+ export * from "./stats-grid";
36
+ export * from "./tabs";
37
+ export * from "./text";
38
+ export * from "./title";
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Link Card Widget Logic
3
+ * Shared data extraction and processing for LINK_CARD widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed link card data structure
11
+ */
12
+ export interface ProcessedLinkCard {
13
+ url: string;
14
+ title: string;
15
+ description?: string;
16
+ icon?: string;
17
+ favicon?: string;
18
+ metadata?: Record<string, string>;
19
+ snippet?: string;
20
+ age?: string;
21
+ source?: string;
22
+ thumbnail?: string;
23
+ openInNewTab?: boolean;
24
+ }
25
+
26
+ /**
27
+ * Extract and validate link card data from WidgetData
28
+ */
29
+ export function extractLinkCardData(
30
+ value: WidgetData,
31
+ ): ProcessedLinkCard | null {
32
+ // Narrow to object type first
33
+ const isObject =
34
+ typeof value === "object" && value !== null && !Array.isArray(value);
35
+
36
+ if (!isObject) {
37
+ return null;
38
+ }
39
+
40
+ // Extract required url
41
+ const url = "url" in value && typeof value.url === "string" ? value.url : "";
42
+ if (!url) {
43
+ return null;
44
+ }
45
+
46
+ // Extract optional properties
47
+ const title =
48
+ "title" in value && typeof value.title === "string" ? value.title : url;
49
+ const description =
50
+ "description" in value && typeof value.description === "string"
51
+ ? value.description
52
+ : undefined;
53
+ const icon =
54
+ "icon" in value && typeof value.icon === "string" ? value.icon : undefined;
55
+ const favicon =
56
+ "favicon" in value && typeof value.favicon === "string"
57
+ ? value.favicon
58
+ : undefined;
59
+
60
+ // Extract metadata if present
61
+ let metadata: Record<string, string> | undefined;
62
+ if (
63
+ "metadata" in value &&
64
+ typeof value.metadata === "object" &&
65
+ value.metadata !== null &&
66
+ !Array.isArray(value.metadata)
67
+ ) {
68
+ metadata = {};
69
+ for (const [key, val] of Object.entries(value.metadata)) {
70
+ if (typeof val === "string") {
71
+ metadata[key] = val;
72
+ }
73
+ }
74
+ }
75
+
76
+ // Extract additional optional properties
77
+ const snippet =
78
+ "snippet" in value && typeof value.snippet === "string"
79
+ ? value.snippet
80
+ : undefined;
81
+ const age =
82
+ "age" in value && typeof value.age === "string" ? value.age : undefined;
83
+ const source =
84
+ "source" in value && typeof value.source === "string"
85
+ ? value.source
86
+ : undefined;
87
+ const thumbnail =
88
+ "thumbnail" in value && typeof value.thumbnail === "string"
89
+ ? value.thumbnail
90
+ : undefined;
91
+ const openInNewTab =
92
+ "openInNewTab" in value && typeof value.openInNewTab === "boolean"
93
+ ? value.openInNewTab
94
+ : true;
95
+
96
+ return {
97
+ url,
98
+ title,
99
+ description,
100
+ icon,
101
+ favicon,
102
+ metadata,
103
+ snippet,
104
+ age,
105
+ source,
106
+ thumbnail,
107
+ openInNewTab,
108
+ };
109
+ }
110
+
111
+ /**
112
+ * Get display URL (shortened for UI)
113
+ */
114
+ export function getDisplayUrl(url: string, maxLength = 50): string {
115
+ try {
116
+ const urlObj = new URL(url);
117
+ const domain = urlObj.hostname.replace(/^www\./, "");
118
+ if (domain.length > maxLength) {
119
+ // oxlint-disable-next-line prefer-template
120
+ return domain.slice(0, maxLength - 3) + "...";
121
+ }
122
+ return domain;
123
+ } catch {
124
+ if (url.length > maxLength) {
125
+ // oxlint-disable-next-line prefer-template
126
+ return url.slice(0, maxLength - 3) + "...";
127
+ }
128
+ return url;
129
+ }
130
+ }