@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,127 @@
1
+ /**
2
+ * Link List Widget Logic
3
+ * Shared data extraction and processing for LINK_LIST widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Individual link item
11
+ */
12
+ export interface LinkItem {
13
+ url: string;
14
+ title?: string;
15
+ description?: string;
16
+ icon?: string;
17
+ favicon?: string;
18
+ [key: string]: WidgetData;
19
+ }
20
+
21
+ /**
22
+ * Processed link list data structure
23
+ */
24
+ export interface ProcessedLinkList {
25
+ items: LinkItem[];
26
+ title?: string;
27
+ description?: string;
28
+ layout: "list" | "grid";
29
+ columns: number;
30
+ }
31
+
32
+ /**
33
+ * Extract and validate link list data from WidgetData
34
+ */
35
+ export function extractLinkListData(
36
+ value: WidgetData,
37
+ ): ProcessedLinkList | null {
38
+ let items: WidgetData[] = [];
39
+ let title = "";
40
+ let description = "";
41
+ let layout = "list";
42
+ let columns = 1;
43
+
44
+ // Handle raw array format (from responseArrayField)
45
+ if (Array.isArray(value)) {
46
+ items = value;
47
+ }
48
+ // Handle object format with items property
49
+ else if (typeof value === "object" && value !== null) {
50
+ items = "items" in value && Array.isArray(value.items) ? value.items : [];
51
+ title =
52
+ "title" in value && typeof value.title === "string" ? value.title : "";
53
+ description =
54
+ "description" in value && typeof value.description === "string"
55
+ ? value.description
56
+ : "";
57
+ layout =
58
+ "layout" in value && typeof value.layout === "string"
59
+ ? value.layout
60
+ : "list";
61
+ columns =
62
+ "columns" in value && typeof value.columns === "number"
63
+ ? value.columns
64
+ : 1;
65
+ } else {
66
+ return null;
67
+ }
68
+
69
+ if (!items || !Array.isArray(items) || items.length === 0) {
70
+ return null;
71
+ }
72
+
73
+ // Validate and process items
74
+ const validItems = items
75
+ .map((item: WidgetData) => {
76
+ if (typeof item !== "object" || item === null || Array.isArray(item)) {
77
+ return null;
78
+ }
79
+
80
+ const url = "url" in item && typeof item.url === "string" ? item.url : "";
81
+ if (!url) {
82
+ return null;
83
+ }
84
+
85
+ const title =
86
+ "title" in item && typeof item.title === "string" ? item.title : "";
87
+ const description =
88
+ "description" in item && typeof item.description === "string"
89
+ ? item.description
90
+ : "";
91
+ const icon =
92
+ "icon" in item && typeof item.icon === "string" ? item.icon : "";
93
+ const favicon =
94
+ "favicon" in item && typeof item.favicon === "string"
95
+ ? item.favicon
96
+ : "";
97
+
98
+ return {
99
+ url,
100
+ title,
101
+ description,
102
+ icon,
103
+ favicon,
104
+ ...item,
105
+ } as LinkItem;
106
+ })
107
+ .filter((item): item is LinkItem => item !== null);
108
+
109
+ if (validItems.length === 0) {
110
+ return null;
111
+ }
112
+
113
+ return {
114
+ items: validItems,
115
+ title,
116
+ description,
117
+ layout: layout === "grid" ? "grid" : "list",
118
+ columns: Math.max(1, Math.min(4, columns)),
119
+ };
120
+ }
121
+
122
+ /**
123
+ * Get grid columns class based on column count
124
+ */
125
+ export function getGridColumns(columns: number): number {
126
+ return Math.max(1, Math.min(4, columns));
127
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Link Widget Logic
3
+ * Shared data extraction and processing for LINK widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed link data structure
11
+ */
12
+ export interface ProcessedLink {
13
+ url: string;
14
+ text: string;
15
+ openInNewTab: boolean;
16
+ }
17
+
18
+ /**
19
+ * Extract and validate link data from WidgetData
20
+ */
21
+ export function extractLinkData(value: WidgetData): ProcessedLink | null {
22
+ // Handle string value directly (simple URL)
23
+ if (typeof value === "string") {
24
+ return {
25
+ url: value,
26
+ text: value,
27
+ openInNewTab: true,
28
+ };
29
+ }
30
+
31
+ // Handle object value with link properties
32
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
33
+ const url =
34
+ "url" in value && typeof value.url === "string" ? value.url : "";
35
+ const text =
36
+ "text" in value && typeof value.text === "string" ? value.text : url;
37
+ const openInNewTab =
38
+ "openInNewTab" in value && typeof value.openInNewTab === "boolean"
39
+ ? value.openInNewTab
40
+ : true;
41
+
42
+ if (!url) {
43
+ return null;
44
+ }
45
+
46
+ return {
47
+ url,
48
+ text,
49
+ openInNewTab,
50
+ };
51
+ }
52
+
53
+ // Invalid type
54
+ return null;
55
+ }
56
+
57
+ /**
58
+ * Validate if a string is a valid URL
59
+ */
60
+ export function isValidUrl(url: string): boolean {
61
+ try {
62
+ // oxlint-disable-next-line no-new
63
+ new URL(url);
64
+ return true;
65
+ } catch {
66
+ return false;
67
+ }
68
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Loading Widget Logic
3
+ * Shared data extraction and processing for LOADING widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed loading data structure
11
+ */
12
+ export interface ProcessedLoading {
13
+ message?: string;
14
+ progress?: number;
15
+ indeterminate: boolean;
16
+ }
17
+
18
+ /**
19
+ * Extract and validate loading data from WidgetData
20
+ */
21
+ export function extractLoadingData(value: WidgetData): ProcessedLoading {
22
+ // Handle string value directly (loading message)
23
+ if (typeof value === "string") {
24
+ return {
25
+ message: value,
26
+ indeterminate: true,
27
+ };
28
+ }
29
+
30
+ // Handle number value (progress percentage)
31
+ if (typeof value === "number") {
32
+ return {
33
+ progress: Math.max(0, Math.min(100, value)),
34
+ indeterminate: false,
35
+ };
36
+ }
37
+
38
+ // Handle object value with loading properties
39
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
40
+ const message =
41
+ "message" in value && typeof value.message === "string"
42
+ ? value.message
43
+ : undefined;
44
+ const progress =
45
+ "progress" in value && typeof value.progress === "number"
46
+ ? Math.max(0, Math.min(100, value.progress))
47
+ : undefined;
48
+ const indeterminate =
49
+ "indeterminate" in value && typeof value.indeterminate === "boolean"
50
+ ? value.indeterminate
51
+ : progress === undefined;
52
+
53
+ return {
54
+ message,
55
+ progress,
56
+ indeterminate,
57
+ };
58
+ }
59
+
60
+ // Default loading state
61
+ return {
62
+ indeterminate: true,
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Get loading spinner frame for CLI animation
68
+ */
69
+ export function getSpinnerFrame(frameIndex: number): string {
70
+ const frames = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
71
+ return frames[frameIndex % frames.length];
72
+ }
73
+
74
+ /**
75
+ * Format progress bar for CLI display
76
+ */
77
+ export function formatProgressBar(progress: number, width = 20): string {
78
+ const filled = Math.round((progress / 100) * width);
79
+ const empty = width - filled;
80
+ return `[${"=".repeat(filled)}${" ".repeat(empty)}] ${progress}%`;
81
+ }
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Markdown Widget Logic
3
+ * Shared data extraction and processing for MARKDOWN widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { WidgetData } from "../types";
8
+
9
+ /**
10
+ * Processed markdown data structure
11
+ */
12
+ export interface ProcessedMarkdown {
13
+ content: string;
14
+ sanitize: boolean;
15
+ allowHtml: boolean;
16
+ }
17
+
18
+ /**
19
+ * Markdown element types
20
+ */
21
+ export interface MarkdownElement {
22
+ type:
23
+ | "heading"
24
+ | "paragraph"
25
+ | "bold"
26
+ | "italic"
27
+ | "code"
28
+ | "list"
29
+ | "link"
30
+ | "text";
31
+ content: string;
32
+ level?: number; // for headings (1-6)
33
+ ordered?: boolean; // for lists
34
+ url?: string; // for links
35
+ }
36
+
37
+ /**
38
+ * Parse markdown into structured elements (data-only, no ANSI codes)
39
+ * Returns structured data that can be rendered by both CLI and React
40
+ */
41
+ export function parseMarkdownElements(content: string): MarkdownElement[] {
42
+ const elements: MarkdownElement[] = [];
43
+ const lines = content.split("\n");
44
+
45
+ for (const line of lines) {
46
+ if (!line.trim()) {
47
+ continue;
48
+ }
49
+
50
+ // Headings: # Heading
51
+ const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
52
+ if (headingMatch) {
53
+ elements.push({
54
+ type: "heading",
55
+ content: headingMatch[2],
56
+ level: headingMatch[1].length,
57
+ });
58
+ continue;
59
+ }
60
+
61
+ // Unordered lists: - Item or * Item
62
+ const unorderedListMatch = line.match(/^[-*]\s+(.+)$/);
63
+ if (unorderedListMatch) {
64
+ elements.push({
65
+ type: "list",
66
+ content: unorderedListMatch[1],
67
+ ordered: false,
68
+ });
69
+ continue;
70
+ }
71
+
72
+ // Ordered lists: 1. Item
73
+ const orderedListMatch = line.match(/^\d+\.\s+(.+)$/);
74
+ if (orderedListMatch) {
75
+ elements.push({
76
+ type: "list",
77
+ content: orderedListMatch[1],
78
+ ordered: true,
79
+ });
80
+ continue;
81
+ }
82
+
83
+ // Code blocks (inline): `code`
84
+ const codeMatch = line.match(/`([^`]+)`/);
85
+ if (codeMatch) {
86
+ elements.push({
87
+ type: "code",
88
+ content: codeMatch[1],
89
+ });
90
+ continue;
91
+ }
92
+
93
+ // Links: [text](url)
94
+ const linkMatch = line.match(/\[([^\]]+)\]\(([^)]+)\)/);
95
+ if (linkMatch) {
96
+ elements.push({
97
+ type: "link",
98
+ content: linkMatch[1],
99
+ url: linkMatch[2],
100
+ });
101
+ continue;
102
+ }
103
+
104
+ // Bold: **text** or __text__
105
+ const boldMatch = line.match(/\*\*([^*]+)\*\*|__([^_]+)__/);
106
+ if (boldMatch) {
107
+ elements.push({
108
+ type: "bold",
109
+ content: boldMatch[1] || boldMatch[2],
110
+ });
111
+ continue;
112
+ }
113
+
114
+ // Italic: *text* or _text_
115
+ const italicMatch = line.match(/\*([^*]+)\*|_([^_]+)_/);
116
+ if (italicMatch) {
117
+ elements.push({
118
+ type: "italic",
119
+ content: italicMatch[1] || italicMatch[2],
120
+ });
121
+ continue;
122
+ }
123
+
124
+ // Default: paragraph text
125
+ elements.push({
126
+ type: "paragraph",
127
+ content: line,
128
+ });
129
+ }
130
+
131
+ return elements;
132
+ }
133
+
134
+ /**
135
+ * Extract and validate markdown data from WidgetData
136
+ */
137
+ export function extractMarkdownData(
138
+ value: WidgetData,
139
+ ): ProcessedMarkdown | null {
140
+ // Handle string value directly
141
+ if (typeof value === "string") {
142
+ return {
143
+ content: value,
144
+ sanitize: true,
145
+ allowHtml: false,
146
+ };
147
+ }
148
+
149
+ // Handle object value with markdown properties
150
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) {
151
+ const content =
152
+ "content" in value && typeof value.content === "string"
153
+ ? value.content
154
+ : "";
155
+ const sanitize =
156
+ "sanitize" in value && typeof value.sanitize === "boolean"
157
+ ? value.sanitize
158
+ : true;
159
+ const allowHtml =
160
+ "allowHtml" in value && typeof value.allowHtml === "boolean"
161
+ ? value.allowHtml
162
+ : false;
163
+
164
+ if (!content) {
165
+ return null;
166
+ }
167
+
168
+ return {
169
+ content,
170
+ sanitize,
171
+ allowHtml,
172
+ };
173
+ }
174
+
175
+ return null;
176
+ }
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Metric Card Widget Logic
3
+ * Shared data extraction and processing for METRIC_CARD widget
4
+ * Used by both React and CLI implementations
5
+ */
6
+
7
+ import type { UnifiedField } from "../../types/endpoint";
8
+ import { WidgetType } from "../../types/enums";
9
+ import type { WidgetData } from "../types";
10
+ import { formatBytes } from "../utils/formatting";
11
+
12
+ /**
13
+ * Metric configuration
14
+ */
15
+ export interface MetricConfig {
16
+ format: "bytes" | "currency" | "number" | "percentage";
17
+ precision: number;
18
+ icon?: string;
19
+ unit?: string;
20
+ threshold?: {
21
+ warning?: number;
22
+ error?: number;
23
+ };
24
+ }
25
+
26
+ /**
27
+ * Processed metric card data structure
28
+ */
29
+ export interface ProcessedMetricCard {
30
+ value: string | number;
31
+ label: string;
32
+ description?: string;
33
+ trend?: {
34
+ value: number;
35
+ direction: "up" | "down" | "neutral";
36
+ };
37
+ icon?: string;
38
+ color?: string;
39
+ }
40
+
41
+ /**
42
+ * Extract and validate metric card data from WidgetData
43
+ */
44
+ export function extractMetricCardData(
45
+ value: WidgetData,
46
+ ): ProcessedMetricCard | null {
47
+ // Narrow to object type first
48
+ const isObject =
49
+ typeof value === "object" && value !== null && !Array.isArray(value);
50
+
51
+ if (!isObject) {
52
+ return null;
53
+ }
54
+
55
+ // Extract required value
56
+ const metricValue =
57
+ "value" in value &&
58
+ (typeof value.value === "string" || typeof value.value === "number")
59
+ ? value.value
60
+ : null;
61
+
62
+ if (metricValue === null) {
63
+ return null;
64
+ }
65
+
66
+ // Extract required label
67
+ const label =
68
+ "label" in value && typeof value.label === "string" ? value.label : "";
69
+
70
+ if (!label) {
71
+ return null;
72
+ }
73
+
74
+ // Extract optional properties
75
+ const description =
76
+ "description" in value && typeof value.description === "string"
77
+ ? value.description
78
+ : undefined;
79
+
80
+ const icon =
81
+ "icon" in value && typeof value.icon === "string" ? value.icon : undefined;
82
+
83
+ const color =
84
+ "color" in value && typeof value.color === "string"
85
+ ? value.color
86
+ : undefined;
87
+
88
+ // Extract trend if present
89
+ let trend: ProcessedMetricCard["trend"];
90
+ if (
91
+ "trend" in value &&
92
+ typeof value.trend === "object" &&
93
+ value.trend !== null &&
94
+ !Array.isArray(value.trend)
95
+ ) {
96
+ const trendValue =
97
+ "value" in value.trend && typeof value.trend.value === "number"
98
+ ? value.trend.value
99
+ : null;
100
+ const trendDirection =
101
+ "direction" in value.trend && typeof value.trend.direction === "string"
102
+ ? value.trend.direction
103
+ : null;
104
+
105
+ if (
106
+ trendValue !== null &&
107
+ (trendDirection === "up" ||
108
+ trendDirection === "down" ||
109
+ trendDirection === "neutral")
110
+ ) {
111
+ trend = {
112
+ value: trendValue,
113
+ direction: trendDirection,
114
+ };
115
+ }
116
+ }
117
+
118
+ return {
119
+ value: metricValue,
120
+ label,
121
+ description,
122
+ trend,
123
+ icon,
124
+ color,
125
+ };
126
+ }
127
+
128
+ /**
129
+ * Format metric value for display
130
+ */
131
+ export function formatMetricValue(value: string | number): string {
132
+ if (typeof value === "number") {
133
+ return new Intl.NumberFormat("en-US").format(value);
134
+ }
135
+ return value;
136
+ }
137
+
138
+ /**
139
+ * Get trend display (e.g., "+5%", "-3%")
140
+ */
141
+ export function formatTrendValue(trendValue: number): string {
142
+ const sign = trendValue > 0 ? "+" : "";
143
+ return `${sign}${trendValue}%`;
144
+ }
145
+
146
+ /**
147
+ * Get metric configuration from field
148
+ */
149
+ export function getMetricConfig<TKey extends string>(
150
+ field: UnifiedField<TKey>,
151
+ ): MetricConfig {
152
+ const defaultConfig: MetricConfig = {
153
+ format: "number",
154
+ precision: 2,
155
+ };
156
+
157
+ if (field.ui.type !== WidgetType.METRIC_CARD) {
158
+ return defaultConfig;
159
+ }
160
+
161
+ const config = field.ui;
162
+
163
+ const formatValue =
164
+ typeof config.format === "string" ? config.format : "number";
165
+ const validFormats = ["bytes", "currency", "number", "percentage"] as const;
166
+ const format: "bytes" | "currency" | "number" | "percentage" =
167
+ validFormats.includes(formatValue as (typeof validFormats)[number])
168
+ ? (formatValue as (typeof validFormats)[number])
169
+ : "number";
170
+
171
+ return {
172
+ icon: typeof config.icon === "string" ? config.icon : undefined,
173
+ unit: typeof config.unit === "string" ? config.unit : undefined,
174
+ precision: typeof config.precision === "number" ? config.precision : 2,
175
+ threshold:
176
+ config.threshold && typeof config.threshold === "object"
177
+ ? (config.threshold as { warning?: number; error?: number })
178
+ : undefined,
179
+ format,
180
+ };
181
+ }
182
+
183
+ /**
184
+ * Format metric value with configuration
185
+ */
186
+ export function formatMetricValueWithConfig(
187
+ value: WidgetData,
188
+ config: MetricConfig,
189
+ ): string {
190
+ if (typeof value !== "number") {
191
+ return String(value);
192
+ }
193
+
194
+ let formatted: string;
195
+
196
+ switch (config.format) {
197
+ case "percentage":
198
+ formatted = `${(value * 100).toFixed(config.precision)}%`;
199
+ break;
200
+ case "currency":
201
+ formatted = `$${value.toFixed(config.precision)}`;
202
+ break;
203
+ case "bytes":
204
+ formatted = formatBytes(value);
205
+ break;
206
+ default:
207
+ // For integer values (like counts), don't show decimal places
208
+ if (Number.isInteger(value) && config.precision === 2) {
209
+ formatted = value.toString();
210
+ } else {
211
+ formatted = value.toFixed(config.precision);
212
+ }
213
+ if (config.unit) {
214
+ formatted += ` ${config.unit}`;
215
+ }
216
+ }
217
+
218
+ return formatted;
219
+ }
220
+
221
+ /**
222
+ * Process lint summary data (special case for code quality)
223
+ */
224
+ export function processLintSummary(summary: Record<string, WidgetData>): {
225
+ errors: number;
226
+ warnings: number;
227
+ info: number;
228
+ hasIssues: boolean;
229
+ } {
230
+ const errors = Number(summary.errors || 0);
231
+ const warnings = Number(summary.warnings || 0);
232
+ const info = Number(summary.info || 0);
233
+ const hasIssues = Boolean(summary.hasIssues);
234
+
235
+ return {
236
+ errors,
237
+ warnings,
238
+ info,
239
+ hasIssues,
240
+ };
241
+ }