@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,21 @@
1
+ import type { translations as enTranslations } from "../en";
2
+
3
+ export const translations: typeof enTranslations = {
4
+ parseJsonWithComments: {
5
+ errors: {
6
+ invalid_json: "Nieprawidłowy format JSON",
7
+ },
8
+ },
9
+ time: {
10
+ errors: {
11
+ invalid_time_format: {
12
+ title: "Nieprawidłowy format czasu",
13
+ description: "Czas musi być w formacie HH:MM",
14
+ },
15
+ invalid_time_range: {
16
+ title: "Nieprawidłowy zakres czasu",
17
+ description: "Czas musi być między 00:00 a 23:59",
18
+ },
19
+ },
20
+ },
21
+ };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Shared utilities that can be used in both client and server environments
3
+ */
4
+
5
+ // Export all utility functions
6
+ export * from "./base64";
7
+ export * from "./env-util";
8
+ export * from "./object";
9
+ export * from "./parse-error";
10
+ export * from "./time";
11
+ export * from "./validation";
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Utility functions for safely setting nested object paths
3
+ */
4
+
5
+ // Interface for objects that can contain nested structures
6
+ interface NestedObject<TValue> {
7
+ [key: string]: NestedObject<TValue> | TValue;
8
+ }
9
+
10
+ /**
11
+ * Safely sets a value at a nested object path, creating intermediate objects as needed
12
+ * @param obj - The target object
13
+ * @param path - Array of path segments
14
+ * @param value - The value to set
15
+ */
16
+ export function setNestedPath<TValue, TObject>(
17
+ obj: TObject,
18
+ path: readonly string[],
19
+ value: TValue,
20
+ ): void {
21
+ let current = obj as NestedObject<TValue>;
22
+
23
+ // Create intermediate path segments
24
+ for (let i = 0; i < path.length - 1; i++) {
25
+ const segment = path[i];
26
+ if (!segment) {
27
+ continue;
28
+ }
29
+
30
+ if (!current[segment] || typeof current[segment] !== "object") {
31
+ current[segment] = {};
32
+ }
33
+ current = current[segment] as NestedObject<TValue>;
34
+ }
35
+
36
+ // Set the final value
37
+ const lastSegment = path.at(-1);
38
+ if (lastSegment) {
39
+ current[lastSegment] = value;
40
+ }
41
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Tests for object utilities to verify type preservation
3
+ */
4
+
5
+ import { describe, expect, test } from "bun:test";
6
+
7
+ import { objectEntries, objectEntriesNumericEnum } from "./object";
8
+
9
+ // Test enum definitions to match the ones used in cron stats
10
+ enum TestPriority {
11
+ LOW = "low",
12
+ NORMAL = "normal",
13
+ HIGH = "high",
14
+ CRITICAL = "critical",
15
+ }
16
+
17
+ enum TestWeekday {
18
+ SUNDAY = 0,
19
+ MONDAY = 1,
20
+ TUESDAY = 2,
21
+ WEDNESDAY = 3,
22
+ THURSDAY = 4,
23
+ FRIDAY = 5,
24
+ SATURDAY = 6,
25
+ }
26
+
27
+ // Test data structures
28
+ const priorityRecord: Partial<Record<TestPriority, number>> = {
29
+ [TestPriority.LOW]: 5,
30
+ [TestPriority.HIGH]: 10,
31
+ // NORMAL and CRITICAL are missing to test partial records
32
+ };
33
+
34
+ const weekdayRecord: Partial<Record<TestWeekday, number>> = {
35
+ [TestWeekday.MONDAY]: 100,
36
+ [TestWeekday.FRIDAY]: 80,
37
+ // Other days are missing
38
+ };
39
+
40
+ // Test type preservation
41
+ describe("Object utilities type preservation", () => {
42
+ test("objectEntries preserves enum types for priority", () => {
43
+ const entries = objectEntries(priorityRecord);
44
+
45
+ // This should compile without type errors and preserve enum types
46
+ entries.forEach(([priority, count]) => {
47
+ // priority should be of type TestPriority
48
+ // count should be of type number
49
+ expect(Object.values(TestPriority)).toContain(priority);
50
+ expect(typeof count).toBe("number");
51
+ });
52
+
53
+ expect(entries.length).toBe(2); // Only LOW and HIGH are defined
54
+ });
55
+
56
+ test("objectEntriesNumericEnum preserves enum types for weekday", () => {
57
+ const entries = objectEntriesNumericEnum(weekdayRecord);
58
+
59
+ // This should compile without type errors and preserve enum types
60
+ entries.forEach(([weekday, count]) => {
61
+ // weekday should be of type TestWeekday (number enum)
62
+ // count should be of type number
63
+ expect(typeof weekday).toBe("number");
64
+ expect(Object.values(TestWeekday)).toContain(weekday);
65
+ expect(typeof count).toBe("number");
66
+ });
67
+
68
+ expect(entries.length).toBe(2); // Only MONDAY and FRIDAY are defined
69
+ });
70
+
71
+ test("filtered entries only include defined values", () => {
72
+ const partialRecord: Partial<Record<TestPriority, number>> = {
73
+ [TestPriority.LOW]: 5,
74
+ [TestPriority.NORMAL]: undefined, // This should be filtered out
75
+ [TestPriority.HIGH]: 10,
76
+ };
77
+
78
+ const entries = objectEntries(partialRecord);
79
+ expect(entries.length).toBe(2); // undefined values should be filtered
80
+ expect(entries.every(([, value]) => value !== undefined)).toBe(true);
81
+ });
82
+ });
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Object utilities with type preservation
3
+ */
4
+
5
+ /**
6
+ * Type-safe Object.entries that preserves enum and key types
7
+ *
8
+ * @param obj - The object to get entries from
9
+ * @returns Array of [key, value] tuples with preserved types
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * enum Color { RED = "red", BLUE = "blue" }
14
+ * const colorCounts: Record<Color, number> = { [Color.RED]: 5, [Color.BLUE]: 3 };
15
+ * const entries = objectEntries(colorCounts); // [Color, number][]
16
+ * ```
17
+ */
18
+ export function objectEntries<K extends string | number | symbol, V>(
19
+ obj: Record<K, V>,
20
+ ): Array<[K, V]>;
21
+
22
+ /**
23
+ * Type-safe Object.entries for partial records (handles undefined values)
24
+ *
25
+ * @param obj - The partial object to get entries from
26
+ * @returns Array of [key, value] tuples with preserved types, filtered for defined values
27
+ */
28
+ export function objectEntries<K extends string | number | symbol, V>(
29
+ obj: Partial<Record<K, V>>,
30
+ ): Array<[K, V]>;
31
+
32
+ export function objectEntries<K extends string | number | symbol, V>(
33
+ obj: Record<K, V> | Partial<Record<K, V>>,
34
+ ): Array<[K, V]> {
35
+ return Object.entries(obj).filter(
36
+ ([, value]) => value !== undefined,
37
+ ) as Array<[K, V]>;
38
+ }
39
+
40
+ /**
41
+ * Type-safe Object.keys that preserves key types
42
+ *
43
+ * @param obj - The object to get keys from
44
+ * @returns Array of keys with preserved types
45
+ */
46
+ export function objectKeys<K extends string | number | symbol, V>(
47
+ obj: Record<K, V> | Partial<Record<K, V>>,
48
+ ): K[] {
49
+ return Object.keys(obj) as K[];
50
+ }
51
+
52
+ /**
53
+ * Type-safe Object.values that preserves value types
54
+ *
55
+ * @param obj - The object to get values from
56
+ * @returns Array of values with preserved types
57
+ */
58
+ export function objectValues<V>(obj: Record<string | number | symbol, V>): V[] {
59
+ return Object.values(obj);
60
+ }
61
+
62
+ /**
63
+ * Special handling for enum-based records where keys might be numeric
64
+ * This is useful for JSWeekday and other numeric enums
65
+ *
66
+ * @param obj - The object with potentially numeric enum keys
67
+ * @returns Array of [enum, value] tuples with proper enum type conversion
68
+ */
69
+ export function objectEntriesNumericEnum<E extends number, V>(
70
+ obj: Partial<Record<E, V>>,
71
+ ): Array<[E, V]> {
72
+ return Object.entries(obj)
73
+ .filter(([, value]) => value !== undefined)
74
+ .map(([key, value]) => [parseInt(key, 10) as E, value as V]);
75
+ }
@@ -0,0 +1,134 @@
1
+ import type { ErrorResponseType } from "next-vibe/shared/types/response.schema";
2
+
3
+ import type { TParams, TranslationKey } from "@/i18n/core/static-types";
4
+
5
+ /**
6
+ * Custom error class that preserves error type and translation parameters
7
+ */
8
+ class ApiError extends Error {
9
+ errorType?: string;
10
+ messageParams?: TParams;
11
+ translationKey?: TranslationKey;
12
+
13
+ constructor(options: {
14
+ errorType: string;
15
+ messageParams?: TParams;
16
+ translationKey: TranslationKey;
17
+ }) {
18
+ super(options.translationKey);
19
+ this.name = "ApiError" as const;
20
+ this.errorType = options.errorType;
21
+ this.messageParams = options.messageParams;
22
+ this.translationKey = options.translationKey;
23
+ }
24
+ }
25
+
26
+ /**
27
+ * Check if an object is an ErrorResponseType
28
+ */
29
+ export function isErrorResponseType(
30
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing utility requires 'unknown' to handle any error input type
31
+ obj: unknown,
32
+ ): obj is ErrorResponseType {
33
+ return (
34
+ typeof obj === "object" &&
35
+ obj !== null &&
36
+ "success" in obj &&
37
+ obj.success === false &&
38
+ "message" in obj &&
39
+ "errorType" in obj
40
+ );
41
+ }
42
+
43
+ /**
44
+ * Possible error input types for error checking and parsing
45
+ */
46
+
47
+ /**
48
+ * Parse a parseable error into a proper Error object
49
+ * Preserves error type and translation parameters if available
50
+ *
51
+ * @param error - The error to parse
52
+ * @returns A proper Error object
53
+ */
54
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing utility requires 'unknown' to handle any error input type
55
+ export function parseError(error: unknown): Error {
56
+ // Handle standard Error instances
57
+ if (error instanceof Error) {
58
+ return error;
59
+ }
60
+
61
+ // Handle ErrorResponseType objects
62
+ if (isErrorResponseType(error)) {
63
+ return new ApiError({
64
+ errorType: error.errorType.errorKey,
65
+ messageParams: error.messageParams,
66
+ translationKey: error.message,
67
+ });
68
+ }
69
+
70
+ // Handle other objects
71
+ if (typeof error === "object" && error !== null) {
72
+ // Extract meaningful error info from objects without console.error pollution
73
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing requires type assertion for object property access
74
+ const errorObj = error as Record<string, unknown>;
75
+ const errorMessage =
76
+ errorObj.error || errorObj.message || "An unknown error occurred";
77
+ return new Error(String(errorMessage));
78
+ }
79
+
80
+ // Handle string errors
81
+ if (typeof error === "string") {
82
+ return new Error(error);
83
+ }
84
+
85
+ // Handle objects with message property
86
+ if (typeof error === "object" && error !== null && "message" in error) {
87
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing requires type assertion for object property access
88
+ const errorObj = error as Record<string, unknown>;
89
+ const message = errorObj.message;
90
+ if (typeof message === "string") {
91
+ return new Error(message);
92
+ }
93
+ }
94
+
95
+ // Handle objects with error property
96
+ if (typeof error === "object" && error !== null && "error" in error) {
97
+ // eslint-disable-next-line oxlint-plugin-restricted/restricted-syntax -- Error parsing requires type assertion for object property access
98
+ const errorObj = error as Record<string, unknown>;
99
+ const errorMessage = errorObj.error;
100
+ if (typeof errorMessage === "string") {
101
+ return new Error(errorMessage);
102
+ }
103
+ }
104
+
105
+ // Handle null/undefined
106
+ if (error === null || error === undefined) {
107
+ return new Error("errors.noDetails");
108
+ }
109
+
110
+ // Default case
111
+ return new Error("An unknown error occurred");
112
+ }
113
+
114
+ /**
115
+ * Format strings with values using a template pattern
116
+ *
117
+ * @param strings - The strings to format
118
+ * @param values - The values to insert into the strings
119
+ * @returns The formatted strings
120
+ */
121
+ export function format<
122
+ T extends Record<string, string | number | boolean | null | undefined>,
123
+ >(strings: string[], values: T): string[] {
124
+ return strings.map((part) =>
125
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars -- Required by replace() API
126
+ part.replaceAll(/{(\w+)}/g, (match, key: string) => {
127
+ const value = values[key];
128
+ if (value === null || value === undefined) {
129
+ return "";
130
+ }
131
+ return String(value);
132
+ }),
133
+ );
134
+ }
@@ -0,0 +1,70 @@
1
+ import { parse } from "jsonc-parser";
2
+ import type { ResponseType } from "next-vibe/shared/types/response.schema";
3
+ import {
4
+ ErrorResponseTypes,
5
+ fail,
6
+ } from "next-vibe/shared/types/response.schema";
7
+
8
+ /**
9
+ * JSON Parser with Comment Support
10
+ * Handles JSON files with comments (like tsconfig.json)
11
+ * Uses jsonc-parser which properly handles comments and trailing commas
12
+ */
13
+
14
+ export interface JsonWithComments {
15
+ [key: string]:
16
+ | string
17
+ | number
18
+ | boolean
19
+ | null
20
+ | undefined
21
+ | JsonWithComments
22
+ | JsonWithComments[];
23
+ }
24
+
25
+ /**
26
+ * Parse JSON with support for comments and trailing commas
27
+ *
28
+ * @param jsonString - JSON string potentially containing comments
29
+ * @returns Parsed JSON object or error response
30
+ */
31
+ export function parseJsonWithComments(
32
+ jsonString: string,
33
+ ): ResponseType<JsonWithComments> {
34
+ try {
35
+ const result = parse(jsonString);
36
+ if (typeof result !== "object" || result === null) {
37
+ return fail({
38
+ message:
39
+ "app.api.shared.utils.parseJsonWithComments.errors.invalid_json",
40
+ errorType: ErrorResponseTypes.INVALID_FORMAT_ERROR,
41
+ });
42
+ }
43
+ // Type guard: result is an object and matches JsonWithComments structure
44
+ return {
45
+ success: true,
46
+ data: result,
47
+ };
48
+ } catch (error) {
49
+ return fail({
50
+ message: "app.api.shared.utils.parseJsonWithComments.errors.invalid_json",
51
+ errorType: ErrorResponseTypes.INVALID_FORMAT_ERROR,
52
+ messageParams: {
53
+ error: error instanceof Error ? error.message : String(error),
54
+ },
55
+ });
56
+ }
57
+ }
58
+
59
+ /**
60
+ * Safely parse JSON with comments, returning null on error
61
+ *
62
+ * @param jsonString - JSON string potentially containing comments
63
+ * @returns Parsed JSON object or null if parsing fails
64
+ */
65
+ export function tryParseJsonWithComments(
66
+ jsonString: string,
67
+ ): JsonWithComments | null {
68
+ const result = parseJsonWithComments(jsonString);
69
+ return result.success ? result.data : null;
70
+ }
@@ -0,0 +1,53 @@
1
+ import {
2
+ ErrorResponseTypes,
3
+ fail,
4
+ type ResponseType,
5
+ success,
6
+ } from "../types/response.schema";
7
+
8
+ /**
9
+ * Converts a time string in HH:MM format to seconds since midnight
10
+ * @param timeStr - Time string in HH:MM format
11
+ * @returns Success response with seconds or error response
12
+ */
13
+ export function timeToSeconds(
14
+ timeStr: `${number}:${number}`,
15
+ ): ResponseType<number> {
16
+ const [hours, minutes] = timeStr.split(":").map(Number);
17
+ if (hours === undefined || minutes === undefined) {
18
+ return fail({
19
+ message: "app.api.shared.utils.time.errors.invalid_time_format.title",
20
+ errorType: ErrorResponseTypes.VALIDATION_ERROR,
21
+ messageParams: {
22
+ inputValue: timeStr,
23
+ },
24
+ });
25
+ }
26
+ return success(hours * 3600 + minutes * 60);
27
+ }
28
+
29
+ export type SimpleTimeFormat = `${number}:${number}`;
30
+
31
+ /**
32
+ * Converts seconds since midnight to a time string in HH:MM format
33
+ * @param seconds - Seconds since midnight
34
+ * @returns Success response with time string or error response
35
+ */
36
+ export function secondsToTime(seconds: number): ResponseType<string> {
37
+ if (seconds < 0 || seconds >= 86_400) {
38
+ return fail({
39
+ message: "app.api.shared.utils.time.errors.invalid_time_range.title",
40
+ errorType: ErrorResponseTypes.VALIDATION_ERROR,
41
+ messageParams: {
42
+ inputValue: seconds,
43
+ },
44
+ });
45
+ }
46
+
47
+ const hours = Math.floor(seconds / 3600);
48
+ const minutes = Math.floor((seconds % 3600) / 60);
49
+
50
+ const timeString = `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`;
51
+
52
+ return success(timeString);
53
+ }
@@ -0,0 +1,127 @@
1
+ import type { ZodError, ZodIssue } from "zod";
2
+ import { z } from "zod";
3
+
4
+ import type { EndpointLogger } from "@/app/api/[locale]/system/unified-interface/shared/logger/endpoint";
5
+
6
+ import type { ResponseType } from "../types/response.schema";
7
+ import { ErrorResponseTypes, fail } from "../types/response.schema";
8
+ import { parseError } from "./parse-error";
9
+
10
+ /**
11
+ * Validate data against a schema
12
+ * Accepts any data (from HTTP, user input, etc.) and validates it
13
+ * @param data - The data to validate (can be any type from HTTP)
14
+ * @param schema - The schema to validate against
15
+ * @returns A response with the validated data or error
16
+ */
17
+ export function validateData<TSchema extends z.ZodType>(
18
+ data: Parameters<TSchema["parse"]>[0],
19
+ schema: TSchema,
20
+ logger: EndpointLogger,
21
+ ): ResponseType<z.infer<TSchema>> {
22
+ if (isEmptyObjectSchema(schema)) {
23
+ return { success: true, data: {} as z.infer<TSchema> };
24
+ }
25
+ if (isEmptySchema(schema)) {
26
+ return { success: true, data: undefined as z.infer<TSchema> };
27
+ }
28
+ if (isNeverSchema(schema)) {
29
+ return { success: true, data: undefined as z.infer<TSchema> };
30
+ }
31
+
32
+ try {
33
+ const result = schema.safeParse(data);
34
+
35
+ if (!result.success) {
36
+ const formattedErrors = formatZodErrors(result.error);
37
+ const errorCount = result.error.issues?.length || 0;
38
+ logger.error("Validation error details", {
39
+ errorCount,
40
+ errors: result.error.issues?.slice(0, 3).map((e: ZodIssue) => ({
41
+ path: e.path.join("."),
42
+ message: e.message,
43
+ code: e.code,
44
+ })),
45
+ allErrors: JSON.stringify(result.error.issues),
46
+ formattedErrors,
47
+ errorType: typeof result.error,
48
+ errorConstructor: result.error?.constructor?.name,
49
+ hasIssues: "issues" in result.error,
50
+ fullError: JSON.stringify(result.error, null, 2),
51
+ });
52
+ return fail({
53
+ message: "app.api.shared.errorTypes.validation_error",
54
+ errorType: ErrorResponseTypes.VALIDATION_ERROR,
55
+ messageParams: {
56
+ error: formattedErrors.join(", "),
57
+ errorCount: errorCount,
58
+ },
59
+ });
60
+ }
61
+
62
+ // For API responses, don't wrap the response in a success object, return the data directly
63
+ return { data: result.data, success: true };
64
+ } catch (error) {
65
+ const parsedError = parseError(error);
66
+ logger.error("Unexpected validation error", parsedError);
67
+ return fail({
68
+ message: "app.api.shared.errorTypes.validation_error",
69
+ errorType: ErrorResponseTypes.VALIDATION_ERROR,
70
+ messageParams: { error: parsedError.message },
71
+ });
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Format Zod errors into a readable format
77
+ * @param zodError - The ZodError object to format
78
+ * @returns A formatted error string array
79
+ */
80
+ function formatZodErrors(zodError: ZodError): string[] {
81
+ if (
82
+ !zodError?.issues ||
83
+ !Array.isArray(zodError.issues) ||
84
+ zodError.issues.length === 0
85
+ ) {
86
+ return ["error.general.unknown_validation_error"];
87
+ }
88
+ return zodError.issues.map(
89
+ (err: ZodIssue) => `${err.path.join(".")}: ${err.message}`,
90
+ );
91
+ }
92
+
93
+ /**
94
+ * Check if request schema is an empty object
95
+ */
96
+ export function isEmptyObjectSchema(schema: z.ZodSchema): boolean {
97
+ return (
98
+ schema instanceof z.ZodObject && Object.keys(schema.shape).length === 0
99
+ );
100
+ }
101
+
102
+ /**
103
+ * Check if schema expects no input (undefined or never)
104
+ */
105
+ export function isEmptySchema(schema: z.ZodSchema): boolean {
106
+ return (
107
+ schema instanceof z.ZodUndefined ||
108
+ schema instanceof z.ZodNever ||
109
+ schema instanceof z.ZodVoid
110
+ );
111
+ }
112
+
113
+ /**
114
+ * Check if schema expects never type specifically
115
+ */
116
+ export function isNeverSchema(schema: z.ZodSchema): boolean {
117
+ try {
118
+ const testResult = schema.safeParse({});
119
+ return (
120
+ !testResult.success &&
121
+ testResult.error?.issues?.[0]?.code === "invalid_type" &&
122
+ testResult.error?.issues?.[0]?.expected === "never"
123
+ );
124
+ } catch {
125
+ return false;
126
+ }
127
+ }