@next-vibe/checker 1.0.52 → 3.0.0

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 (430) hide show
  1. package/LICENSE +669 -5
  2. package/README.md +179 -200
  3. package/check.config.ts +85 -16
  4. package/generated/alias-map.ts +30 -0
  5. package/generated/endpoint.ts +75 -0
  6. package/{src/app/api/[locale]/system/check/oxlint/plugins/i18n/src/index.ts → oxlint-plugins/i18n.ts} +45 -9
  7. package/{src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/src/index.ts → oxlint-plugins/jsx-capitalization.ts} +84 -17
  8. package/{src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/src/index.ts → oxlint-plugins/restricted-syntax.ts} +40 -14
  9. package/package.json +28 -132
  10. package/.dist/LICENSE +0 -674
  11. package/.dist/README.md +0 -257
  12. package/.dist/bin/vibe-runtime.js +0 -58166
  13. package/.dist/bin/vibe-runtime.js.map +0 -451
  14. package/.dist/oxlint-plugins/i18n.js +0 -381
  15. package/.dist/oxlint-plugins/jsx-capitalization.js +0 -436
  16. package/.dist/oxlint-plugins/restricted-syntax.js +0 -409
  17. package/src/app/api/[locale]/LICENSE +0 -674
  18. package/src/app/api/[locale]/i18n/de/index.ts +0 -15
  19. package/src/app/api/[locale]/i18n/en/index.ts +0 -14
  20. package/src/app/api/[locale]/i18n/pl/index.ts +0 -13
  21. package/src/app/api/[locale]/shared/i18n/de/index.ts +0 -85
  22. package/src/app/api/[locale]/shared/i18n/en/index.ts +0 -83
  23. package/src/app/api/[locale]/shared/i18n/pl/index.ts +0 -85
  24. package/src/app/api/[locale]/shared/stats-filtering.ts +0 -174
  25. package/src/app/api/[locale]/shared/types/common.schema.ts +0 -55
  26. package/src/app/api/[locale]/shared/types/response.schema.ts +0 -411
  27. package/src/app/api/[locale]/shared/types/stats-filtering.schema.ts +0 -315
  28. package/src/app/api/[locale]/shared/types/utils.ts +0 -187
  29. package/src/app/api/[locale]/shared/utils/base64.ts +0 -46
  30. package/src/app/api/[locale]/shared/utils/env-util.ts +0 -36
  31. package/src/app/api/[locale]/shared/utils/i18n/de/index.ts +0 -21
  32. package/src/app/api/[locale]/shared/utils/i18n/en/index.ts +0 -19
  33. package/src/app/api/[locale]/shared/utils/i18n/pl/index.ts +0 -21
  34. package/src/app/api/[locale]/shared/utils/index.ts +0 -11
  35. package/src/app/api/[locale]/shared/utils/object-path.ts +0 -41
  36. package/src/app/api/[locale]/shared/utils/object.test.ts +0 -82
  37. package/src/app/api/[locale]/shared/utils/object.ts +0 -73
  38. package/src/app/api/[locale]/shared/utils/parse-error.ts +0 -134
  39. package/src/app/api/[locale]/shared/utils/parse-json.ts +0 -62
  40. package/src/app/api/[locale]/shared/utils/time.ts +0 -46
  41. package/src/app/api/[locale]/shared/utils/validation.ts +0 -117
  42. package/src/app/api/[locale]/shared/utils/zod-required-fields.ts +0 -115
  43. package/src/app/api/[locale]/system/builder/definition.ts +0 -1750
  44. package/src/app/api/[locale]/system/builder/enum.ts +0 -78
  45. package/src/app/api/[locale]/system/builder/i18n/de/index.ts +0 -645
  46. package/src/app/api/[locale]/system/builder/i18n/en/index.ts +0 -653
  47. package/src/app/api/[locale]/system/builder/i18n/pl/index.ts +0 -643
  48. package/src/app/api/[locale]/system/builder/repository/build-executor.test.ts +0 -178
  49. package/src/app/api/[locale]/system/builder/repository/build-executor.ts +0 -538
  50. package/src/app/api/[locale]/system/builder/repository/bun-compiler.ts +0 -250
  51. package/src/app/api/[locale]/system/builder/repository/bundle-analyzer.ts +0 -170
  52. package/src/app/api/[locale]/system/builder/repository/config-loader.ts +0 -146
  53. package/src/app/api/[locale]/system/builder/repository/config-validator.ts +0 -97
  54. package/src/app/api/[locale]/system/builder/repository/constants.ts +0 -125
  55. package/src/app/api/[locale]/system/builder/repository/error-suggester.ts +0 -67
  56. package/src/app/api/[locale]/system/builder/repository/file-copier.ts +0 -90
  57. package/src/app/api/[locale]/system/builder/repository/folder-cleaner.ts +0 -75
  58. package/src/app/api/[locale]/system/builder/repository/index.ts +0 -2
  59. package/src/app/api/[locale]/system/builder/repository/npm-package-generator.ts +0 -143
  60. package/src/app/api/[locale]/system/builder/repository/output-formatter.ts +0 -104
  61. package/src/app/api/[locale]/system/builder/repository/profile-service.ts +0 -79
  62. package/src/app/api/[locale]/system/builder/repository/report-generator.ts +0 -109
  63. package/src/app/api/[locale]/system/builder/repository/vite-compiler.ts +0 -277
  64. package/src/app/api/[locale]/system/builder/route.ts +0 -21
  65. package/src/app/api/[locale]/system/builder/test-files/file1.ts +0 -2
  66. package/src/app/api/[locale]/system/builder/test-files/file2.tsx +0 -10
  67. package/src/app/api/[locale]/system/builder/test-files/file3.tsx +0 -16
  68. package/src/app/api/[locale]/system/builder/test-files/folderToCopy/fileInFolder.ts +0 -2
  69. package/src/app/api/[locale]/system/builder/test-files/test-config.ts +0 -38
  70. package/src/app/api/[locale]/system/builder/test-files/test-delete-config.ts +0 -8
  71. package/src/app/api/[locale]/system/builder/test-files/test-project/package.json +0 -24
  72. package/src/app/api/[locale]/system/builder/test-files/test-project/src/constants.ts +0 -6
  73. package/src/app/api/[locale]/system/builder/test-files/test-project/src/greet.ts +0 -18
  74. package/src/app/api/[locale]/system/builder/test-files/test-project/src/index.ts +0 -7
  75. package/src/app/api/[locale]/system/builder/test-files/test-project/src/utils/calculate.ts +0 -27
  76. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.json +0 -19
  77. package/src/app/api/[locale]/system/builder/test-files/test-project/tsconfig.tsbuildinfo +0 -1
  78. package/src/app/api/[locale]/system/builder/test-files/test3.css +0 -1
  79. package/src/app/api/[locale]/system/check/config/create/definition.ts +0 -266
  80. package/src/app/api/[locale]/system/check/config/create/i18n/de/index.ts +0 -151
  81. package/src/app/api/[locale]/system/check/config/create/i18n/en/index.ts +0 -146
  82. package/src/app/api/[locale]/system/check/config/create/i18n/pl/index.ts +0 -148
  83. package/src/app/api/[locale]/system/check/config/create/repository.ts +0 -269
  84. package/src/app/api/[locale]/system/check/config/create/route.ts +0 -21
  85. package/src/app/api/[locale]/system/check/config/repository.ts +0 -846
  86. package/src/app/api/[locale]/system/check/config/shared.ts +0 -364
  87. package/src/app/api/[locale]/system/check/config/types.ts +0 -610
  88. package/src/app/api/[locale]/system/check/config/utils.ts +0 -155
  89. package/src/app/api/[locale]/system/check/i18n/de/index.ts +0 -19
  90. package/src/app/api/[locale]/system/check/i18n/en/index.ts +0 -18
  91. package/src/app/api/[locale]/system/check/i18n/pl/index.ts +0 -19
  92. package/src/app/api/[locale]/system/check/lint/definition.ts +0 -383
  93. package/src/app/api/[locale]/system/check/lint/enum.ts +0 -34
  94. package/src/app/api/[locale]/system/check/lint/i18n/de/index.ts +0 -160
  95. package/src/app/api/[locale]/system/check/lint/i18n/en/index.ts +0 -158
  96. package/src/app/api/[locale]/system/check/lint/i18n/pl/index.ts +0 -160
  97. package/src/app/api/[locale]/system/check/lint/repository.ts +0 -844
  98. package/src/app/api/[locale]/system/check/lint/route.ts +0 -21
  99. package/src/app/api/[locale]/system/check/oxlint/README.md +0 -190
  100. package/src/app/api/[locale]/system/check/oxlint/definition.ts +0 -375
  101. package/src/app/api/[locale]/system/check/oxlint/enum.ts +0 -34
  102. package/src/app/api/[locale]/system/check/oxlint/i18n/de/index.ts +0 -166
  103. package/src/app/api/[locale]/system/check/oxlint/i18n/en/index.ts +0 -164
  104. package/src/app/api/[locale]/system/check/oxlint/i18n/pl/index.ts +0 -166
  105. package/src/app/api/[locale]/system/check/oxlint/plugins/jsx-capitalization/README.md +0 -269
  106. package/src/app/api/[locale]/system/check/oxlint/plugins/restricted-syntax/test.tsx +0 -74
  107. package/src/app/api/[locale]/system/check/oxlint/plugins/shared/config-loader.ts +0 -283
  108. package/src/app/api/[locale]/system/check/oxlint/repository.ts +0 -553
  109. package/src/app/api/[locale]/system/check/oxlint/route.ts +0 -21
  110. package/src/app/api/[locale]/system/check/oxlint/types.ts +0 -191
  111. package/src/app/api/[locale]/system/check/test-project/.vscode/settings.json +0 -48
  112. package/src/app/api/[locale]/system/check/test-project/bun.lock +0 -640
  113. package/src/app/api/[locale]/system/check/test-project/check.config.ts +0 -955
  114. package/src/app/api/[locale]/system/check/test-project/package.json +0 -17
  115. package/src/app/api/[locale]/system/check/test-project/src/constants.ts +0 -6
  116. package/src/app/api/[locale]/system/check/test-project/src/greet.ts +0 -18
  117. package/src/app/api/[locale]/system/check/test-project/src/test-issues/a11y-issues.tsx +0 -107
  118. package/src/app/api/[locale]/system/check/test-project/src/test-issues/eslint-issues.tsx +0 -37
  119. package/src/app/api/[locale]/system/check/test-project/src/test-issues/general-issues.ts +0 -135
  120. package/src/app/api/[locale]/system/check/test-project/src/test-issues/i18n-issues.tsx +0 -113
  121. package/src/app/api/[locale]/system/check/test-project/src/test-issues/jsx-capitalization-issues.tsx +0 -127
  122. package/src/app/api/[locale]/system/check/test-project/src/test-issues/nextjs-issues.tsx +0 -92
  123. package/src/app/api/[locale]/system/check/test-project/src/test-issues/promise-issues.ts +0 -73
  124. package/src/app/api/[locale]/system/check/test-project/src/test-issues/react-issues.tsx +0 -95
  125. package/src/app/api/[locale]/system/check/test-project/src/test-issues/restricted-syntax-issues.tsx +0 -61
  126. package/src/app/api/[locale]/system/check/test-project/src/test-issues/typescript-issues.ts +0 -78
  127. package/src/app/api/[locale]/system/check/test-project/src/utils/calculate.ts +0 -27
  128. package/src/app/api/[locale]/system/check/test-project/tsconfig.json +0 -22
  129. package/src/app/api/[locale]/system/check/test-project/tsconfig.tsbuildinfo +0 -1
  130. package/src/app/api/[locale]/system/check/typecheck/definition.ts +0 -328
  131. package/src/app/api/[locale]/system/check/typecheck/enum.ts +0 -34
  132. package/src/app/api/[locale]/system/check/typecheck/i18n/de/index.ts +0 -148
  133. package/src/app/api/[locale]/system/check/typecheck/i18n/en/index.ts +0 -145
  134. package/src/app/api/[locale]/system/check/typecheck/i18n/pl/index.ts +0 -148
  135. package/src/app/api/[locale]/system/check/typecheck/repository.ts +0 -863
  136. package/src/app/api/[locale]/system/check/typecheck/route.ts +0 -21
  137. package/src/app/api/[locale]/system/check/typecheck/utils.ts +0 -160
  138. package/src/app/api/[locale]/system/check/vibe-check/definition.ts +0 -448
  139. package/src/app/api/[locale]/system/check/vibe-check/enum.ts +0 -63
  140. package/src/app/api/[locale]/system/check/vibe-check/i18n/de/index.ts +0 -164
  141. package/src/app/api/[locale]/system/check/vibe-check/i18n/en/index.ts +0 -161
  142. package/src/app/api/[locale]/system/check/vibe-check/i18n/pl/index.ts +0 -163
  143. package/src/app/api/[locale]/system/check/vibe-check/repository.ts +0 -516
  144. package/src/app/api/[locale]/system/check/vibe-check/route.test.ts +0 -1010
  145. package/src/app/api/[locale]/system/check/vibe-check/route.ts +0 -21
  146. package/src/app/api/[locale]/system/generated/endpoint.ts +0 -274
  147. package/src/app/api/[locale]/system/generated/endpoints.ts +0 -138
  148. package/src/app/api/[locale]/system/generated/route-handlers.ts +0 -213
  149. package/src/app/api/[locale]/system/generators/endpoint/definition.ts +0 -167
  150. package/src/app/api/[locale]/system/generators/endpoint/i18n/de/index.ts +0 -48
  151. package/src/app/api/[locale]/system/generators/endpoint/i18n/en/index.ts +0 -48
  152. package/src/app/api/[locale]/system/generators/endpoint/i18n/pl/index.ts +0 -50
  153. package/src/app/api/[locale]/system/generators/endpoint/repository.ts +0 -286
  154. package/src/app/api/[locale]/system/generators/endpoint/route.ts +0 -18
  155. package/src/app/api/[locale]/system/generators/endpoints/definition.ts +0 -246
  156. package/src/app/api/[locale]/system/generators/endpoints/i18n/de/index.ts +0 -54
  157. package/src/app/api/[locale]/system/generators/endpoints/i18n/en/index.ts +0 -52
  158. package/src/app/api/[locale]/system/generators/endpoints/i18n/pl/index.ts +0 -54
  159. package/src/app/api/[locale]/system/generators/endpoints/options-repository.ts +0 -425
  160. package/src/app/api/[locale]/system/generators/endpoints/repository.ts +0 -368
  161. package/src/app/api/[locale]/system/generators/endpoints/route.ts +0 -17
  162. package/src/app/api/[locale]/system/generators/endpoints-index/definition.ts +0 -166
  163. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/de/index.ts +0 -71
  164. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/en/index.ts +0 -69
  165. package/src/app/api/[locale]/system/generators/endpoints-index/i18n/pl/index.ts +0 -71
  166. package/src/app/api/[locale]/system/generators/endpoints-index/repository.ts +0 -279
  167. package/src/app/api/[locale]/system/generators/endpoints-index/route.ts +0 -18
  168. package/src/app/api/[locale]/system/generators/generate-all/definition.ts +0 -327
  169. package/src/app/api/[locale]/system/generators/generate-all/i18n/de/index.ts +0 -96
  170. package/src/app/api/[locale]/system/generators/generate-all/i18n/en/index.ts +0 -94
  171. package/src/app/api/[locale]/system/generators/generate-all/i18n/pl/index.ts +0 -96
  172. package/src/app/api/[locale]/system/generators/generate-all/repository.ts +0 -240
  173. package/src/app/api/[locale]/system/generators/generate-all/route.ts +0 -19
  174. package/src/app/api/[locale]/system/generators/i18n/de/index.ts +0 -15
  175. package/src/app/api/[locale]/system/generators/i18n/en/index.ts +0 -14
  176. package/src/app/api/[locale]/system/generators/i18n/pl/index.ts +0 -15
  177. package/src/app/api/[locale]/system/generators/route-handlers/definition.ts +0 -178
  178. package/src/app/api/[locale]/system/generators/route-handlers/i18n/de/index.ts +0 -48
  179. package/src/app/api/[locale]/system/generators/route-handlers/i18n/en/index.ts +0 -48
  180. package/src/app/api/[locale]/system/generators/route-handlers/i18n/pl/index.ts +0 -50
  181. package/src/app/api/[locale]/system/generators/route-handlers/repository.ts +0 -267
  182. package/src/app/api/[locale]/system/generators/route-handlers/route.ts +0 -14
  183. package/src/app/api/[locale]/system/generators/shared/utils.ts +0 -215
  184. package/src/app/api/[locale]/system/help/definition.ts +0 -433
  185. package/src/app/api/[locale]/system/help/i18n/de/index.ts +0 -263
  186. package/src/app/api/[locale]/system/help/i18n/en/index.ts +0 -259
  187. package/src/app/api/[locale]/system/help/i18n/pl/index.ts +0 -262
  188. package/src/app/api/[locale]/system/help/interactive/definition.ts +0 -122
  189. package/src/app/api/[locale]/system/help/interactive/i18n/de/index.ts +0 -21
  190. package/src/app/api/[locale]/system/help/interactive/i18n/en/index.ts +0 -19
  191. package/src/app/api/[locale]/system/help/interactive/i18n/pl/index.ts +0 -21
  192. package/src/app/api/[locale]/system/help/interactive/repository.ts +0 -1131
  193. package/src/app/api/[locale]/system/help/interactive/route.ts +0 -43
  194. package/src/app/api/[locale]/system/help/list/definition.ts +0 -362
  195. package/src/app/api/[locale]/system/help/list/repository.ts +0 -99
  196. package/src/app/api/[locale]/system/help/list/route.ts +0 -21
  197. package/src/app/api/[locale]/system/help/repository.ts +0 -238
  198. package/src/app/api/[locale]/system/help/route.ts +0 -16
  199. package/src/app/api/[locale]/system/i18n/de/index.ts +0 -67
  200. package/src/app/api/[locale]/system/i18n/en/index.ts +0 -66
  201. package/src/app/api/[locale]/system/i18n/pl/index.ts +0 -67
  202. package/src/app/api/[locale]/system/release-tool/definition.ts +0 -2925
  203. package/src/app/api/[locale]/system/release-tool/i18n/de/index.ts +0 -782
  204. package/src/app/api/[locale]/system/release-tool/i18n/en/index.ts +0 -779
  205. package/src/app/api/[locale]/system/release-tool/i18n/pl/index.ts +0 -781
  206. package/src/app/api/[locale]/system/release-tool/repository/asset-zipper.ts +0 -122
  207. package/src/app/api/[locale]/system/release-tool/repository/changelog-generator.ts +0 -205
  208. package/src/app/api/[locale]/system/release-tool/repository/ci-detector.ts +0 -540
  209. package/src/app/api/[locale]/system/release-tool/repository/config.ts +0 -106
  210. package/src/app/api/[locale]/system/release-tool/repository/constants.ts +0 -406
  211. package/src/app/api/[locale]/system/release-tool/repository/dependency-manager.ts +0 -496
  212. package/src/app/api/[locale]/system/release-tool/repository/git-service.ts +0 -378
  213. package/src/app/api/[locale]/system/release-tool/repository/hook-runner.ts +0 -96
  214. package/src/app/api/[locale]/system/release-tool/repository/index.ts +0 -1
  215. package/src/app/api/[locale]/system/release-tool/repository/notification-service.ts +0 -575
  216. package/src/app/api/[locale]/system/release-tool/repository/package-service.ts +0 -150
  217. package/src/app/api/[locale]/system/release-tool/repository/publisher.ts +0 -241
  218. package/src/app/api/[locale]/system/release-tool/repository/quality-runner.ts +0 -413
  219. package/src/app/api/[locale]/system/release-tool/repository/release-creator.ts +0 -283
  220. package/src/app/api/[locale]/system/release-tool/repository/release-executor.ts +0 -1084
  221. package/src/app/api/[locale]/system/release-tool/repository/snyk-service.ts +0 -132
  222. package/src/app/api/[locale]/system/release-tool/repository/utils.ts +0 -603
  223. package/src/app/api/[locale]/system/release-tool/repository/validation.ts +0 -265
  224. package/src/app/api/[locale]/system/release-tool/repository/version-service.ts +0 -275
  225. package/src/app/api/[locale]/system/release-tool/route.ts +0 -21
  226. package/src/app/api/[locale]/system/unified-interface/README.md +0 -328
  227. package/src/app/api/[locale]/system/unified-interface/cli/README.md +0 -349
  228. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-handler.ts +0 -82
  229. package/src/app/api/[locale]/system/unified-interface/cli/auth/cli-user.ts +0 -120
  230. package/src/app/api/[locale]/system/unified-interface/cli/auth/session-file.ts +0 -244
  231. package/src/app/api/[locale]/system/unified-interface/cli/env.ts +0 -24
  232. package/src/app/api/[locale]/system/unified-interface/cli/i18n/de/index.ts +0 -159
  233. package/src/app/api/[locale]/system/unified-interface/cli/i18n/en/index.ts +0 -158
  234. package/src/app/api/[locale]/system/unified-interface/cli/i18n/pl/index.ts +0 -159
  235. package/src/app/api/[locale]/system/unified-interface/cli/runtime/debug.ts +0 -573
  236. package/src/app/api/[locale]/system/unified-interface/cli/runtime/entry-point.ts +0 -128
  237. package/src/app/api/[locale]/system/unified-interface/cli/runtime/environment.ts +0 -155
  238. package/src/app/api/[locale]/system/unified-interface/cli/runtime/execution-errors.ts +0 -423
  239. package/src/app/api/[locale]/system/unified-interface/cli/runtime/parsing.ts +0 -252
  240. package/src/app/api/[locale]/system/unified-interface/cli/runtime/route-executor.ts +0 -901
  241. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/de/index.ts +0 -12
  242. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/en/index.ts +0 -11
  243. package/src/app/api/[locale]/system/unified-interface/cli/setup/i18n/pl/index.ts +0 -12
  244. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/definition.ts +0 -235
  245. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/de/index.ts +0 -54
  246. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/en/index.ts +0 -52
  247. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/i18n/pl/index.ts +0 -54
  248. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/repository.ts +0 -444
  249. package/src/app/api/[locale]/system/unified-interface/cli/setup/install/route.ts +0 -25
  250. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/definition.ts +0 -159
  251. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/de/index.ts +0 -61
  252. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/en/index.ts +0 -59
  253. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/i18n/pl/index.ts +0 -61
  254. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/repository.ts +0 -181
  255. package/src/app/api/[locale]/system/unified-interface/cli/setup/status/route.ts +0 -22
  256. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/definition.ts +0 -164
  257. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/de/index.ts +0 -54
  258. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/en/index.ts +0 -52
  259. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/i18n/pl/index.ts +0 -54
  260. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/repository.ts +0 -195
  261. package/src/app/api/[locale]/system/unified-interface/cli/setup/uninstall/route.ts +0 -24
  262. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/definition.ts +0 -180
  263. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/de/index.ts +0 -54
  264. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/en/index.ts +0 -52
  265. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/i18n/pl/index.ts +0 -54
  266. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/repository.ts +0 -105
  267. package/src/app/api/[locale]/system/unified-interface/cli/setup/update/route.ts +0 -22
  268. package/src/app/api/[locale]/system/unified-interface/cli/vibe-runtime.ts +0 -264
  269. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/base-renderer.ts +0 -246
  270. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/registry.ts +0 -305
  271. package/src/app/api/[locale]/system/unified-interface/cli/widgets/core/types.ts +0 -116
  272. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/de/index.ts +0 -67
  273. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/en/index.ts +0 -65
  274. package/src/app/api/[locale]/system/unified-interface/cli/widgets/i18n/pl/index.ts +0 -67
  275. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/accordion.ts +0 -70
  276. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/avatar.ts +0 -37
  277. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/badge.ts +0 -52
  278. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-output.ts +0 -285
  279. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-files.ts +0 -71
  280. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-list.ts +0 -281
  281. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/code-quality-summary.ts +0 -83
  282. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/container.ts +0 -175
  283. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-card.ts +0 -61
  284. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-cards.ts +0 -518
  285. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-list.ts +0 -75
  286. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/data-table.ts +0 -357
  287. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/editable-text.ts +0 -93
  288. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/empty-state.ts +0 -49
  289. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/errors.ts +0 -63
  290. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/grouped-list.ts +0 -667
  291. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-card.ts +0 -78
  292. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link-list.ts +0 -99
  293. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/link.ts +0 -54
  294. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/loading.ts +0 -46
  295. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/markdown.ts +0 -123
  296. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/metric.ts +0 -269
  297. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/section.ts +0 -114
  298. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/stats-grid.ts +0 -138
  299. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/tabs.ts +0 -59
  300. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/text.ts +0 -76
  301. package/src/app/api/[locale]/system/unified-interface/cli/widgets/implementations/title.ts +0 -37
  302. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/response-renderer.ts +0 -403
  303. package/src/app/api/[locale]/system/unified-interface/cli/widgets/renderers/schema-handler.ts +0 -504
  304. package/src/app/api/[locale]/system/unified-interface/i18n/de/index.ts +0 -39
  305. package/src/app/api/[locale]/system/unified-interface/i18n/en/index.ts +0 -37
  306. package/src/app/api/[locale]/system/unified-interface/i18n/pl/index.ts +0 -39
  307. package/src/app/api/[locale]/system/unified-interface/mcp/README.md +0 -114
  308. package/src/app/api/[locale]/system/unified-interface/mcp/converter.ts +0 -136
  309. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/de/index.ts +0 -180
  310. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/en/index.ts +0 -178
  311. package/src/app/api/[locale]/system/unified-interface/mcp/i18n/pl/index.ts +0 -180
  312. package/src/app/api/[locale]/system/unified-interface/mcp/registry.ts +0 -305
  313. package/src/app/api/[locale]/system/unified-interface/mcp/serve/definition.ts +0 -124
  314. package/src/app/api/[locale]/system/unified-interface/mcp/serve/repository.ts +0 -44
  315. package/src/app/api/[locale]/system/unified-interface/mcp/serve/route.ts +0 -14
  316. package/src/app/api/[locale]/system/unified-interface/mcp/server/protocol-handler.ts +0 -291
  317. package/src/app/api/[locale]/system/unified-interface/mcp/server/server.ts +0 -155
  318. package/src/app/api/[locale]/system/unified-interface/mcp/server/stdio-transport.ts +0 -191
  319. package/src/app/api/[locale]/system/unified-interface/mcp/types.ts +0 -247
  320. package/src/app/api/[locale]/system/unified-interface/react/icons.tsx +0 -346
  321. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create-form.ts +0 -1413
  322. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/create.ts +0 -525
  323. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/endpoint-to-metadata.ts +0 -52
  324. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definition/loader.ts +0 -144
  325. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/definitions/registry.ts +0 -262
  326. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/permissions/registry.ts +0 -656
  327. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/executor.ts +0 -220
  328. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/handler.ts +0 -313
  329. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/multi.ts +0 -182
  330. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/request-validator.ts +0 -173
  331. package/src/app/api/[locale]/system/unified-interface/shared/endpoints/route/single.ts +0 -58
  332. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env-client.ts +0 -45
  333. package/src/app/api/[locale]/system/unified-interface/shared/env/define-env.ts +0 -43
  334. package/src/app/api/[locale]/system/unified-interface/shared/env/validation-logger.ts +0 -58
  335. package/src/app/api/[locale]/system/unified-interface/shared/field/enum.ts +0 -107
  336. package/src/app/api/[locale]/system/unified-interface/shared/field/specialized.ts +0 -336
  337. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.test.ts +0 -385
  338. package/src/app/api/[locale]/system/unified-interface/shared/field/utils.ts +0 -1827
  339. package/src/app/api/[locale]/system/unified-interface/shared/field-config/endpoint-field-types.ts +0 -108
  340. package/src/app/api/[locale]/system/unified-interface/shared/field-config/field-config-types.ts +0 -288
  341. package/src/app/api/[locale]/system/unified-interface/shared/logger/colors.ts +0 -114
  342. package/src/app/api/[locale]/system/unified-interface/shared/logger/endpoint.ts +0 -155
  343. package/src/app/api/[locale]/system/unified-interface/shared/logger/file-logger.ts +0 -85
  344. package/src/app/api/[locale]/system/unified-interface/shared/logger/formatters.ts +0 -167
  345. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/base-auth-handler.ts +0 -82
  346. package/src/app/api/[locale]/system/unified-interface/shared/server-only/auth/factory.ts +0 -34
  347. package/src/app/api/[locale]/system/unified-interface/shared/server-only/server-only.ts +0 -1
  348. package/src/app/api/[locale]/system/unified-interface/shared/types/actions.ts +0 -284
  349. package/src/app/api/[locale]/system/unified-interface/shared/types/endpoint.ts +0 -1101
  350. package/src/app/api/[locale]/system/unified-interface/shared/types/enums.ts +0 -383
  351. package/src/app/api/[locale]/system/unified-interface/shared/types/platform.ts +0 -34
  352. package/src/app/api/[locale]/system/unified-interface/shared/types/types.ts +0 -76
  353. package/src/app/api/[locale]/system/unified-interface/shared/types/ui-config.ts +0 -72
  354. package/src/app/api/[locale]/system/unified-interface/shared/utils/error-types.ts +0 -27
  355. package/src/app/api/[locale]/system/unified-interface/shared/utils/path.ts +0 -80
  356. package/src/app/api/[locale]/system/unified-interface/shared/utils/scanner.ts +0 -225
  357. package/src/app/api/[locale]/system/unified-interface/shared/widgets/actions.ts +0 -251
  358. package/src/app/api/[locale]/system/unified-interface/shared/widgets/configs.ts +0 -1060
  359. package/src/app/api/[locale]/system/unified-interface/shared/widgets/helpers.ts +0 -70
  360. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/accordion.ts +0 -75
  361. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/avatar.ts +0 -69
  362. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/badge.ts +0 -86
  363. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-output.ts +0 -283
  364. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/code-quality-list.ts +0 -190
  365. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/container.ts +0 -114
  366. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-card.ts +0 -71
  367. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-cards.ts +0 -228
  368. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-list.ts +0 -119
  369. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/data-table.ts +0 -367
  370. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/editable-text.ts +0 -81
  371. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/empty-state.ts +0 -71
  372. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/errors.ts +0 -79
  373. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/grouped-list.ts +0 -426
  374. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/index.ts +0 -38
  375. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-card.ts +0 -112
  376. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link-list.ts +0 -110
  377. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/link.ts +0 -66
  378. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/loading.ts +0 -79
  379. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/markdown.ts +0 -159
  380. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/metric-card.ts +0 -225
  381. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/section.ts +0 -85
  382. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/stats-grid.ts +0 -63
  383. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/tabs.ts +0 -73
  384. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/text.ts +0 -96
  385. package/src/app/api/[locale]/system/unified-interface/shared/widgets/logic/title.ts +0 -57
  386. package/src/app/api/[locale]/system/unified-interface/shared/widgets/types.ts +0 -236
  387. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/field-helpers.ts +0 -120
  388. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/formatting.ts +0 -414
  389. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/url.ts +0 -37
  390. package/src/app/api/[locale]/system/unified-interface/shared/widgets/utils/widget-helpers.ts +0 -427
  391. package/src/app/api/[locale]/user/auth/i18n/de/index.ts +0 -204
  392. package/src/app/api/[locale]/user/auth/i18n/en/index.ts +0 -199
  393. package/src/app/api/[locale]/user/auth/i18n/pl/index.ts +0 -203
  394. package/src/app/api/[locale]/user/auth/types.ts +0 -45
  395. package/src/app/api/[locale]/user/enum.ts +0 -64
  396. package/src/app/api/[locale]/user/i18n/de/index.ts +0 -75
  397. package/src/app/api/[locale]/user/i18n/en/index.ts +0 -74
  398. package/src/app/api/[locale]/user/i18n/pl/index.ts +0 -75
  399. package/src/app/api/[locale]/user/types.ts +0 -111
  400. package/src/app/api/[locale]/user/user-roles/enum.ts +0 -103
  401. package/src/app/api/[locale]/user/user-roles/i18n/de/index.ts +0 -85
  402. package/src/app/api/[locale]/user/user-roles/i18n/en/index.ts +0 -83
  403. package/src/app/api/[locale]/user/user-roles/i18n/pl/index.ts +0 -85
  404. package/src/app/api/[locale]/user/user-roles/types.ts +0 -32
  405. package/src/app/api/i18n/de/index.ts +0 -6
  406. package/src/app/api/i18n/en/index.ts +0 -5
  407. package/src/app/api/i18n/pl/index.ts +0 -5
  408. package/src/app/i18n/de/index.ts +0 -18
  409. package/src/app/i18n/en/index.ts +0 -18
  410. package/src/app/i18n/pl/index.ts +0 -17
  411. package/src/config/constants.ts +0 -8
  412. package/src/config/debug.ts +0 -30
  413. package/src/config/env-client.ts +0 -57
  414. package/src/config/env.ts +0 -56
  415. package/src/config/i18n/de/index.ts +0 -3
  416. package/src/config/i18n/en/index.ts +0 -51
  417. package/src/config/i18n/pl/index.ts +0 -3
  418. package/src/i18n/core/config.ts +0 -225
  419. package/src/i18n/core/language-utils.ts +0 -226
  420. package/src/i18n/core/localization-utils.ts +0 -394
  421. package/src/i18n/core/scoped-translation.ts +0 -104
  422. package/src/i18n/core/shared-component.tsx +0 -28
  423. package/src/i18n/core/shared-translation-utils.ts +0 -97
  424. package/src/i18n/core/shared.ts +0 -44
  425. package/src/i18n/core/static-types.ts +0 -64
  426. package/src/i18n/core/translation-utils.ts +0 -186
  427. package/src/i18n/de/index.ts +0 -8
  428. package/src/i18n/en/index.ts +0 -7
  429. package/src/i18n/index.ts +0 -100
  430. package/src/i18n/pl/index.ts +0 -7
@@ -1,1413 +0,0 @@
1
- /**
2
- * Create Form Endpoint Utility
3
- *
4
- * Utility for creating DRY form endpoints that support both GET and POST methods:
5
- * - GET: Fetches initial/current data (response-only fields)
6
- * - POST: Sends changed data, returns updated data (request+response fields)
7
- *
8
- * This eliminates duplication between GET and POST endpoints that share the same data structure.
9
- */
10
-
11
- import { z } from "zod";
12
-
13
- import type { IconKey } from "@/app/api/[locale]/system/unified-interface/react/icons";
14
- import type {
15
- ExamplesList,
16
- ExtractInput,
17
- ExtractOutput,
18
- FieldUsageConfig,
19
- InferInputFromFieldForMethod,
20
- InferOutputFromFieldForMethod,
21
- InferSchemaFromFieldForMethod,
22
- ObjectField,
23
- PrimitiveField,
24
- UnifiedField,
25
- } from "@/app/api/[locale]/system/unified-interface/shared/types/endpoint";
26
- import type { EndpointErrorTypes } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
27
- import {
28
- FieldUsage,
29
- Methods,
30
- } from "@/app/api/[locale]/system/unified-interface/shared/types/enums";
31
- import type { WidgetConfig } from "@/app/api/[locale]/system/unified-interface/shared/widgets/configs";
32
- import { UserRole, type UserRoleValue } from "@/app/api/[locale]/user/user-roles/enum";
33
- import type { CountryLanguage } from "@/i18n/core/config";
34
- import type { TranslatedKeyType } from "@/i18n/core/scoped-translation";
35
- import { simpleT } from "@/i18n/core/shared";
36
- import type { TParams, TranslationKey } from "@/i18n/core/static-types";
37
-
38
- import { type CreateApiEndpoint } from "./create";
39
-
40
- /**
41
- * Configuration for a single method in a form endpoint
42
- */
43
- export interface FormMethodConfig<TScopedTranslationKey extends string> {
44
- readonly title: TScopedTranslationKey;
45
- readonly description: TScopedTranslationKey;
46
- readonly tags: TScopedTranslationKey[];
47
- readonly icon: IconKey;
48
- readonly aliases?: string[];
49
- }
50
-
51
- /**
52
- * Examples configuration for form endpoints
53
- */
54
- /**
55
- * Cache schemas for a method to avoid repeated evaluation
56
- */
57
- export interface CachedMethodSchemas<
58
- TScopedTranslationKey extends string,
59
- TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
60
- TMethod extends Methods,
61
- > {
62
- requestData: InferSchemaFromFieldForMethod<
63
- TScopedTranslationKey,
64
- TFields,
65
- TMethod,
66
- FieldUsage.RequestData
67
- >;
68
- response: InferSchemaFromFieldForMethod<
69
- TScopedTranslationKey,
70
- TFields,
71
- TMethod,
72
- FieldUsage.Response
73
- >;
74
- urlParams: InferSchemaFromFieldForMethod<
75
- TScopedTranslationKey,
76
- TFields,
77
- TMethod,
78
- FieldUsage.RequestUrlParams
79
- >;
80
- }
81
-
82
- /**
83
- * Build examples structure from cached schemas
84
- */
85
- export interface MethodExamples<
86
- TSchemas extends CachedMethodSchemas<string, UnifiedField<string, z.ZodTypeAny>, Methods>,
87
- TExampleKey extends string,
88
- > {
89
- requests?: ExtractInput<TSchemas["requestData"]> extends never
90
- ? undefined
91
- : ExamplesList<ExtractInput<TSchemas["requestData"]>, TExampleKey>;
92
- responses: ExamplesList<ExtractOutput<TSchemas["response"]>, TExampleKey>;
93
- urlPathParams?: ExtractInput<TSchemas["urlParams"]> extends never
94
- ? undefined
95
- : ExamplesList<ExtractInput<TSchemas["urlParams"]>, TExampleKey>;
96
- }
97
-
98
- /**
99
- * FormExamples - inlines the full structure to avoid intermediate type depth
100
- */
101
- // oxlint-disable-next-line consistent-type-definitions
102
- export type FormExamples<
103
- TScopedTranslationKey extends string,
104
- TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
105
- TExampleKey extends string,
106
- TMethods extends {
107
- GET?: FormMethodConfig<TScopedTranslationKey>;
108
- POST?: FormMethodConfig<TScopedTranslationKey>;
109
- PATCH?: FormMethodConfig<TScopedTranslationKey>;
110
- DELETE?: FormMethodConfig<TScopedTranslationKey>;
111
- } = {
112
- GET?: FormMethodConfig<TScopedTranslationKey>;
113
- POST?: FormMethodConfig<TScopedTranslationKey>;
114
- PATCH?: FormMethodConfig<TScopedTranslationKey>;
115
- DELETE?: FormMethodConfig<TScopedTranslationKey>;
116
- },
117
- > = {
118
- GET?: "GET" extends keyof TMethods
119
- ? {
120
- requests?: ExtractInput<
121
- InferSchemaFromFieldForMethod<
122
- TScopedTranslationKey,
123
- TFields,
124
- Methods.GET,
125
- FieldUsage.RequestData
126
- >
127
- > extends never
128
- ? undefined
129
- : ExamplesList<
130
- ExtractInput<
131
- InferSchemaFromFieldForMethod<
132
- TScopedTranslationKey,
133
- TFields,
134
- Methods.GET,
135
- FieldUsage.RequestData
136
- >
137
- >,
138
- TExampleKey
139
- >;
140
- responses: ExamplesList<
141
- ExtractOutput<
142
- InferSchemaFromFieldForMethod<
143
- TScopedTranslationKey,
144
- TFields,
145
- Methods.GET,
146
- FieldUsage.Response
147
- >
148
- >,
149
- TExampleKey
150
- >;
151
- urlPathParams?: ExtractInput<
152
- InferSchemaFromFieldForMethod<
153
- TScopedTranslationKey,
154
- TFields,
155
- Methods.GET,
156
- FieldUsage.RequestUrlParams
157
- >
158
- > extends never
159
- ? undefined
160
- : ExamplesList<
161
- ExtractInput<
162
- InferSchemaFromFieldForMethod<
163
- TScopedTranslationKey,
164
- TFields,
165
- Methods.GET,
166
- FieldUsage.RequestUrlParams
167
- >
168
- >,
169
- TExampleKey
170
- >;
171
- }
172
- : never;
173
- POST?: "POST" extends keyof TMethods
174
- ? {
175
- requests?: ExtractInput<
176
- InferSchemaFromFieldForMethod<
177
- TScopedTranslationKey,
178
- TFields,
179
- Methods.POST,
180
- FieldUsage.RequestData
181
- >
182
- > extends never
183
- ? undefined
184
- : ExamplesList<
185
- ExtractInput<
186
- InferSchemaFromFieldForMethod<
187
- TScopedTranslationKey,
188
- TFields,
189
- Methods.POST,
190
- FieldUsage.RequestData
191
- >
192
- >,
193
- TExampleKey
194
- >;
195
- responses: ExamplesList<
196
- ExtractOutput<
197
- InferSchemaFromFieldForMethod<
198
- TScopedTranslationKey,
199
- TFields,
200
- Methods.POST,
201
- FieldUsage.Response
202
- >
203
- >,
204
- TExampleKey
205
- >;
206
- urlPathParams?: ExtractInput<
207
- InferSchemaFromFieldForMethod<
208
- TScopedTranslationKey,
209
- TFields,
210
- Methods.POST,
211
- FieldUsage.RequestUrlParams
212
- >
213
- > extends never
214
- ? undefined
215
- : ExamplesList<
216
- ExtractInput<
217
- InferSchemaFromFieldForMethod<
218
- TScopedTranslationKey,
219
- TFields,
220
- Methods.POST,
221
- FieldUsage.RequestUrlParams
222
- >
223
- >,
224
- TExampleKey
225
- >;
226
- }
227
- : never;
228
- PATCH?: "PATCH" extends keyof TMethods
229
- ? {
230
- requests?: ExtractInput<
231
- InferSchemaFromFieldForMethod<
232
- TScopedTranslationKey,
233
- TFields,
234
- Methods.PATCH,
235
- FieldUsage.RequestData
236
- >
237
- > extends never
238
- ? undefined
239
- : ExamplesList<
240
- ExtractInput<
241
- InferSchemaFromFieldForMethod<
242
- TScopedTranslationKey,
243
- TFields,
244
- Methods.PATCH,
245
- FieldUsage.RequestData
246
- >
247
- >,
248
- TExampleKey
249
- >;
250
- responses: ExamplesList<
251
- ExtractOutput<
252
- InferSchemaFromFieldForMethod<
253
- TScopedTranslationKey,
254
- TFields,
255
- Methods.PATCH,
256
- FieldUsage.Response
257
- >
258
- >,
259
- TExampleKey
260
- >;
261
- urlPathParams?: ExtractInput<
262
- InferSchemaFromFieldForMethod<
263
- TScopedTranslationKey,
264
- TFields,
265
- Methods.PATCH,
266
- FieldUsage.RequestUrlParams
267
- >
268
- > extends never
269
- ? undefined
270
- : ExamplesList<
271
- ExtractInput<
272
- InferSchemaFromFieldForMethod<
273
- TScopedTranslationKey,
274
- TFields,
275
- Methods.PATCH,
276
- FieldUsage.RequestUrlParams
277
- >
278
- >,
279
- TExampleKey
280
- >;
281
- }
282
- : never;
283
- DELETE?: "DELETE" extends keyof TMethods
284
- ? {
285
- requests?: ExtractInput<
286
- InferSchemaFromFieldForMethod<
287
- TScopedTranslationKey,
288
- TFields,
289
- Methods.DELETE,
290
- FieldUsage.RequestData
291
- >
292
- > extends never
293
- ? undefined
294
- : ExamplesList<
295
- ExtractInput<
296
- InferSchemaFromFieldForMethod<
297
- TScopedTranslationKey,
298
- TFields,
299
- Methods.DELETE,
300
- FieldUsage.RequestData
301
- >
302
- >,
303
- TExampleKey
304
- >;
305
- responses: ExamplesList<
306
- ExtractOutput<
307
- InferSchemaFromFieldForMethod<
308
- TScopedTranslationKey,
309
- TFields,
310
- Methods.DELETE,
311
- FieldUsage.Response
312
- >
313
- >,
314
- TExampleKey
315
- >;
316
- urlPathParams?: ExtractInput<
317
- InferSchemaFromFieldForMethod<
318
- TScopedTranslationKey,
319
- TFields,
320
- Methods.DELETE,
321
- FieldUsage.RequestUrlParams
322
- >
323
- > extends never
324
- ? undefined
325
- : ExamplesList<
326
- ExtractInput<
327
- InferSchemaFromFieldForMethod<
328
- TScopedTranslationKey,
329
- TFields,
330
- Methods.DELETE,
331
- FieldUsage.RequestUrlParams
332
- >
333
- >,
334
- TExampleKey
335
- >;
336
- }
337
- : never;
338
- };
339
-
340
- /**
341
- * Configuration for creating a form endpoint with GET, POST, PATCH, and DELETE methods
342
- */
343
- export interface CreateFormEndpointConfig<
344
- TScopedTranslationKey extends string,
345
- TExampleKey extends string,
346
- TUserRoleValue extends readonly UserRoleValue[],
347
- TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
348
- TMethods extends {
349
- GET?: FormMethodConfig<TScopedTranslationKey>;
350
- POST?: FormMethodConfig<TScopedTranslationKey>;
351
- PATCH?: FormMethodConfig<TScopedTranslationKey>;
352
- DELETE?: FormMethodConfig<TScopedTranslationKey>;
353
- },
354
- > {
355
- // Shared configuration
356
- readonly path: readonly string[];
357
- readonly category: NoInfer<TScopedTranslationKey>;
358
- readonly allowedRoles: TUserRoleValue;
359
-
360
- readonly debug?: boolean;
361
-
362
- // Method-specific configuration
363
- readonly methods: TMethods;
364
-
365
- // Shared field definitions - will be automatically adapted for each method
366
- readonly fields: TFields;
367
-
368
- // Shared error and success configuration
369
- readonly errorTypes: Record<
370
- EndpointErrorTypes,
371
- {
372
- title: NoInfer<TScopedTranslationKey>;
373
- description: NoInfer<TScopedTranslationKey>;
374
- }
375
- >;
376
- readonly successTypes: {
377
- title: NoInfer<TScopedTranslationKey>;
378
- description: NoInfer<TScopedTranslationKey>;
379
- };
380
-
381
- // Method-specific examples
382
- readonly examples: NoInfer<FormExamples<TScopedTranslationKey, TFields, TExampleKey, TMethods>>;
383
-
384
- // Scoped translation
385
- readonly scopedTranslation?: {
386
- readonly ScopedTranslationKey: TScopedTranslationKey;
387
- readonly scopedT: (locale: CountryLanguage) => {
388
- t(key: TScopedTranslationKey, params?: TParams): TranslatedKeyType;
389
- };
390
- };
391
- }
392
-
393
- // ============================================================================
394
- // METHOD-SPECIFIC TYPE FILTERING
395
- // ============================================================================
396
-
397
- /**
398
- * Enhanced usage matching that supports both old format and method-specific format
399
- */
400
- type SupportsMethodAndUsage<
401
- TUsage extends FieldUsageConfig,
402
- TMethod extends Methods,
403
- TTargetUsage extends FieldUsage,
404
- > =
405
- // Check if it's method-specific format first
406
- TMethod extends keyof TUsage
407
- ? TUsage[TMethod] extends infer TMethodUsage
408
- ? TTargetUsage extends FieldUsage.RequestData
409
- ? TMethodUsage extends { request: "data" | "data&urlPathParams" }
410
- ? true
411
- : false
412
- : TTargetUsage extends FieldUsage.RequestUrlParams
413
- ? TMethodUsage extends {
414
- request: "urlPathParams" | "data&urlPathParams";
415
- }
416
- ? true
417
- : false
418
- : TTargetUsage extends FieldUsage.Response
419
- ? TMethodUsage extends { response: true }
420
- ? true
421
- : false
422
- : false
423
- : false
424
- : // Fall back to original logic for backward compatibility
425
- TTargetUsage extends FieldUsage.RequestData
426
- ? TUsage extends { request: "data" | "data&urlPathParams" }
427
- ? true
428
- : false
429
- : TTargetUsage extends FieldUsage.RequestUrlParams
430
- ? TUsage extends { request: "urlPathParams" | "data&urlPathParams" }
431
- ? true
432
- : false
433
- : TTargetUsage extends FieldUsage.Response
434
- ? TUsage extends { response: true }
435
- ? true
436
- : false
437
- : false;
438
-
439
- /**
440
- * Filter schema for a specific method and usage type
441
- */
442
- export type FilterSchemaForMethod<
443
- TScopedTranslationKey extends string,
444
- TFields,
445
- TTargetUsage extends FieldUsage,
446
- TMethod extends Methods,
447
- > =
448
- TFields extends PrimitiveField<
449
- infer TSchema,
450
- FieldUsageConfig,
451
- TScopedTranslationKey,
452
- WidgetConfig<TScopedTranslationKey>
453
- >
454
- ? SupportsMethodAndUsage<TFields["usage"], TMethod, TTargetUsage> extends true
455
- ? TSchema
456
- : z.ZodNever
457
- : TFields extends ObjectField<
458
- infer TChildren,
459
- FieldUsageConfig,
460
- TScopedTranslationKey,
461
- WidgetConfig<TScopedTranslationKey>
462
- >
463
- ? SupportsMethodAndUsage<TFields["usage"], TMethod, TTargetUsage> extends true
464
- ? z.ZodObject<{
465
- [K in keyof TChildren as FilterSchemaForMethod<
466
- TScopedTranslationKey,
467
- TChildren[K],
468
- TTargetUsage,
469
- TMethod
470
- > extends z.ZodNever
471
- ? never
472
- : K]: FilterSchemaForMethod<
473
- TScopedTranslationKey,
474
- TChildren[K],
475
- TTargetUsage,
476
- TMethod
477
- >;
478
- }>
479
- : z.ZodNever
480
- : z.ZodNever;
481
-
482
- /**
483
- * Method-specific endpoint type that extends CreateApiEndpoint
484
- * This ensures perfect type inference for each HTTP method and compatibility with hooks
485
- */
486
- export type MethodSpecificEndpoint<
487
- TExampleKey extends string,
488
- TMethod extends Methods,
489
- TUserRoleValue extends readonly UserRoleValue[],
490
- TScopedTranslationKey extends string,
491
- TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
492
- > = CreateApiEndpoint<
493
- TExampleKey,
494
- TMethod,
495
- TUserRoleValue,
496
- TScopedTranslationKey,
497
- TFields,
498
- // Override type parameters with method-specific inference
499
- InferInputFromFieldForMethod<TScopedTranslationKey, TFields, TMethod, FieldUsage.RequestData>,
500
- InferOutputFromFieldForMethod<TScopedTranslationKey, TFields, TMethod, FieldUsage.RequestData>,
501
- InferInputFromFieldForMethod<TScopedTranslationKey, TFields, TMethod, FieldUsage.Response>,
502
- InferOutputFromFieldForMethod<TScopedTranslationKey, TFields, TMethod, FieldUsage.Response>,
503
- InferInputFromFieldForMethod<
504
- TScopedTranslationKey,
505
- TFields,
506
- TMethod,
507
- FieldUsage.RequestUrlParams
508
- >,
509
- InferOutputFromFieldForMethod<
510
- TScopedTranslationKey,
511
- TFields,
512
- TMethod,
513
- FieldUsage.RequestUrlParams
514
- >
515
- >;
516
-
517
- /**
518
- * Type Helper: Extract Request Schema from Fields for a specific Method
519
- * Combines data fields + URL path params for a specific HTTP method
520
- * Used for testing the request schema generation chain
521
- */
522
- export type GetRequestSchemaFromFields<
523
- TScopedTranslationKey extends string,
524
- TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
525
- TMethod extends Methods,
526
- > = z.ZodObject<{
527
- data: InferSchemaFromFieldForMethod<
528
- TScopedTranslationKey,
529
- TFields,
530
- TMethod,
531
- FieldUsage.RequestData
532
- >;
533
- urlPathParams: InferSchemaFromFieldForMethod<
534
- TScopedTranslationKey,
535
- TFields,
536
- TMethod,
537
- FieldUsage.RequestUrlParams
538
- >;
539
- }>;
540
-
541
- /**
542
- * Type Helper: Extract Response Schema from Fields for a specific Method
543
- * Gets response-only fields for a specific HTTP method
544
- * Used for testing the response schema generation chain
545
- */
546
- export type GetResponseSchemaFromFields<
547
- TScopedTranslationKey extends string,
548
- TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
549
- TMethod extends Methods,
550
- > = InferSchemaFromFieldForMethod<TScopedTranslationKey, TFields, TMethod, FieldUsage.Response>;
551
-
552
- /**
553
- * Return type for createFormEndpoint - provides GET, POST, PATCH, and DELETE endpoints
554
- * Uses method-specific type inference for perfect type safety
555
- * Only includes methods that are actually defined in the config
556
- */
557
- export type CreateFormEndpointReturn<
558
- TExampleKey extends string,
559
- TUserRoleValue extends readonly UserRoleValue[],
560
- TScopedTranslationKey extends string,
561
- TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
562
- TMethods extends {
563
- GET?: FormMethodConfig<TScopedTranslationKey>;
564
- POST?: FormMethodConfig<TScopedTranslationKey>;
565
- PATCH?: FormMethodConfig<TScopedTranslationKey>;
566
- DELETE?: FormMethodConfig<TScopedTranslationKey>;
567
- },
568
- > = (TMethods["GET"] extends FormMethodConfig<string>
569
- ? {
570
- GET: MethodSpecificEndpoint<
571
- TExampleKey,
572
- Methods.GET,
573
- TUserRoleValue,
574
- TScopedTranslationKey,
575
- TFields
576
- >;
577
- }
578
- : Record<string, never>) &
579
- (TMethods["POST"] extends FormMethodConfig<string>
580
- ? {
581
- POST: MethodSpecificEndpoint<
582
- TExampleKey,
583
- Methods.POST,
584
- TUserRoleValue,
585
- TScopedTranslationKey,
586
- TFields
587
- >;
588
- }
589
- : Record<string, never>) &
590
- (TMethods["PATCH"] extends FormMethodConfig<string>
591
- ? {
592
- PATCH: MethodSpecificEndpoint<
593
- TExampleKey,
594
- Methods.PATCH,
595
- TUserRoleValue,
596
- TScopedTranslationKey,
597
- TFields
598
- >;
599
- }
600
- : Record<string, never>) &
601
- (TMethods["DELETE"] extends FormMethodConfig<string>
602
- ? {
603
- DELETE: MethodSpecificEndpoint<
604
- TExampleKey,
605
- Methods.DELETE,
606
- TUserRoleValue,
607
- TScopedTranslationKey,
608
- TFields
609
- >;
610
- }
611
- : Record<string, never>);
612
-
613
- /**
614
- * ============================================================================
615
- * TYPE EXTRACTION UTILITIES
616
- * ============================================================================
617
- *
618
- * These utilities extract types from createFormEndpoint CONFIG (not return value).
619
- * They work around TypeScript's cross-module typeof limitation by inferring types
620
- * from the input config parameters instead of from the return value.
621
- *
622
- * Usage in definition files:
623
- * ```typescript
624
- * const config = { ... } as const;
625
- * export const { GET, POST } = createFormEndpoint(config);
626
- *
627
- * // Extract types from CONFIG, not return value
628
- * export type GetRequest = ExtractMethodRequestOutput<typeof config, "GET">;
629
- * export type PostResponse = ExtractMethodResponseOutput<typeof config, "POST">;
630
- * ```
631
- */
632
-
633
- /**
634
- * Extract the Config type from a createFormEndpoint call
635
- */
636
- export type ExtractConfig<T> =
637
- T extends CreateFormEndpointConfig<
638
- infer TScopedTranslationKey,
639
- infer TExampleKey,
640
- infer TUserRoleValue,
641
- infer TFields,
642
- infer TMethods
643
- >
644
- ? CreateFormEndpointConfig<
645
- TScopedTranslationKey,
646
- TExampleKey,
647
- TUserRoleValue,
648
- TFields,
649
- TMethods
650
- >
651
- : never;
652
-
653
- /**
654
- * Extract RequestOutput type for a specific method from config
655
- */
656
- export type ExtractMethodRequestOutput<
657
- TConfig extends {
658
- fields: UnifiedField<string, z.ZodTypeAny>;
659
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
660
- methods: Record<string, any>;
661
- },
662
- TMethodKey extends "GET" | "POST" | "PATCH" | "DELETE",
663
- > = TConfig extends { fields: infer TFields; methods: infer TMethods }
664
- ? TFields extends UnifiedField<infer TScopedTranslationKey, z.ZodTypeAny>
665
- ? TMethodKey extends keyof TMethods
666
- ? InferOutputFromFieldForMethod<
667
- TScopedTranslationKey,
668
- TFields,
669
- TMethodKey extends "GET"
670
- ? Methods.GET
671
- : TMethodKey extends "POST"
672
- ? Methods.POST
673
- : TMethodKey extends "PATCH"
674
- ? Methods.PATCH
675
- : Methods.DELETE,
676
- FieldUsage.RequestData
677
- >
678
- : never
679
- : never
680
- : never;
681
-
682
- /**
683
- * Extract ResponseOutput type for a specific method from config
684
- */
685
- export type ExtractMethodResponseOutput<
686
- TConfig extends {
687
- fields: UnifiedField<string, z.ZodTypeAny>;
688
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
689
- methods: Record<string, any>;
690
- },
691
- TMethodKey extends "GET" | "POST" | "PATCH" | "DELETE",
692
- > = TConfig extends { fields: infer TFields; methods: infer TMethods }
693
- ? TFields extends UnifiedField<infer TScopedTranslationKey, z.ZodTypeAny>
694
- ? TMethodKey extends keyof TMethods
695
- ? InferOutputFromFieldForMethod<
696
- TScopedTranslationKey,
697
- TFields,
698
- TMethodKey extends "GET"
699
- ? Methods.GET
700
- : TMethodKey extends "POST"
701
- ? Methods.POST
702
- : TMethodKey extends "PATCH"
703
- ? Methods.PATCH
704
- : Methods.DELETE,
705
- FieldUsage.Response
706
- >
707
- : never
708
- : never
709
- : never;
710
-
711
- /**
712
- * Extract UrlVariablesOutput type for a specific method from config
713
- */
714
- export type ExtractMethodUrlVariablesOutput<
715
- TConfig extends {
716
- fields: UnifiedField<string, z.ZodTypeAny>;
717
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
718
- methods: Record<string, any>;
719
- },
720
- TMethodKey extends "GET" | "POST" | "PATCH" | "DELETE",
721
- > = TConfig extends { fields: infer TFields; methods: infer TMethods }
722
- ? TFields extends UnifiedField<infer TScopedTranslationKey, z.ZodTypeAny>
723
- ? TMethodKey extends keyof TMethods
724
- ? InferOutputFromFieldForMethod<
725
- TScopedTranslationKey,
726
- TFields,
727
- TMethodKey extends "GET"
728
- ? Methods.GET
729
- : TMethodKey extends "POST"
730
- ? Methods.POST
731
- : TMethodKey extends "PATCH"
732
- ? Methods.PATCH
733
- : Methods.DELETE,
734
- FieldUsage.RequestUrlParams
735
- >
736
- : never
737
- : never
738
- : never;
739
-
740
- // ============================================================================
741
- // METHOD-SPECIFIC SCHEMA GENERATORS
742
- // ============================================================================
743
-
744
- /**
745
- * Transform method-specific field to simple field for a specific method
746
- * This converts fields with method-specific usage to simple usage patterns
747
- * @deprecated - Replaced by generateSchemaForMethodAndUsage
748
- * Note: This function is used recursively within itself
749
- */
750
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
751
- function transformFieldForMethod<F>(field: F, method: Methods): F {
752
- interface FieldWithType {
753
- type: "primitive" | "object" | "array";
754
- usage?: FieldUsageConfig;
755
- children?: Record<string, UnifiedField<string, z.ZodTypeAny>>;
756
- child?: UnifiedField<string, z.ZodTypeAny>;
757
- }
758
-
759
- const typedField = field as F & FieldWithType;
760
-
761
- if (typedField.type === "primitive") {
762
- // Check if field has method-specific usage
763
- if (typedField.usage && isMethodSpecificUsage(typedField.usage)) {
764
- const methodSpecificUsage = typedField.usage as Record<
765
- string,
766
- {
767
- request?: "data" | "urlPathParams" | "data&urlPathParams";
768
- response?: boolean;
769
- }
770
- >;
771
- const methodUsage = methodSpecificUsage[method];
772
- if (!methodUsage) {
773
- // Method not supported for this field - return field with empty usage that will result in z.never()
774
- return {
775
- ...field,
776
- usage: {},
777
- } as F;
778
- }
779
- return {
780
- ...field,
781
- usage: methodUsage,
782
- } as F;
783
- }
784
- // Return field with original usage (might be simple usage)
785
- return field;
786
- }
787
-
788
- if (typedField.type === "object") {
789
- // Transform object field usage
790
- let objectUsage = typedField.usage;
791
- if (typedField.usage && isMethodSpecificUsage(typedField.usage)) {
792
- const methodSpecificUsage = typedField.usage as Record<
793
- string,
794
- {
795
- request?: "data" | "urlPathParams" | "data&urlPathParams";
796
- response?: boolean;
797
- }
798
- >;
799
- const methodUsage = methodSpecificUsage[method];
800
- if (!methodUsage) {
801
- // Method not supported for this object - use empty usage
802
- objectUsage = {};
803
- } else {
804
- objectUsage = methodUsage as FieldUsageConfig;
805
- }
806
- }
807
-
808
- // Transform all children recursively
809
- const transformedChildren: Record<string, UnifiedField<string, z.ZodTypeAny>> = {};
810
- if (typedField.children) {
811
- for (const [key, childField] of Object.entries(typedField.children)) {
812
- transformedChildren[key] = transformFieldForMethod(childField, method);
813
- }
814
- }
815
-
816
- return {
817
- ...field,
818
- usage: objectUsage,
819
- children: transformedChildren,
820
- } as F;
821
- }
822
-
823
- if (typedField.type === "array") {
824
- // Transform array field usage
825
- let arrayUsage = typedField.usage;
826
- if (typedField.usage && isMethodSpecificUsage(typedField.usage)) {
827
- const methodSpecificUsage = typedField.usage as Record<
828
- string,
829
- {
830
- request?: "data" | "urlPathParams" | "data&urlPathParams";
831
- response?: boolean;
832
- }
833
- >;
834
- const methodUsage = methodSpecificUsage[method];
835
- if (!methodUsage) {
836
- // Method not supported for this array - use empty usage
837
- arrayUsage = {};
838
- } else {
839
- arrayUsage = methodUsage as FieldUsageConfig;
840
- }
841
- }
842
-
843
- // Transform child field recursively
844
- const transformedChild = typedField.child
845
- ? transformFieldForMethod(typedField.child, method)
846
- : undefined;
847
-
848
- return {
849
- ...field,
850
- usage: arrayUsage,
851
- child: transformedChild,
852
- } as F;
853
- }
854
-
855
- return field;
856
- }
857
-
858
- /**
859
- * Generate schema for method-specific usage with proper field filtering
860
- * This function correctly handles method-specific usage patterns where individual fields
861
- * may have different usage patterns than their parent object
862
- */
863
- export function generateSchemaForMethodAndUsage<F, Usage extends FieldUsage>(
864
- field: F,
865
- method: Methods,
866
- targetUsage: Usage,
867
- ): z.ZodTypeAny {
868
- interface FieldWithType {
869
- type: "primitive" | "object" | "array";
870
- usage?: FieldUsageConfig;
871
- schema?: z.ZodTypeAny;
872
- children?: Record<string, UnifiedField<string, z.ZodTypeAny>>;
873
- child?: UnifiedField<string, z.ZodTypeAny>;
874
- }
875
-
876
- const typedField = field as F & FieldWithType;
877
- const hasMethodSpecificUsage = (usage: FieldUsageConfig | undefined): boolean => {
878
- if (!usage) {
879
- return false;
880
- }
881
-
882
- // Check if the usage object has any method keys
883
- // Handle both computed property syntax [Methods.X] and string keys "X"
884
- const usageObj = usage as Record<string, FieldUsageConfig>;
885
- return (
886
- "GET" in usageObj ||
887
- "POST" in usageObj ||
888
- "PUT" in usageObj ||
889
- "PATCH" in usageObj ||
890
- "DELETE" in usageObj ||
891
- Methods.GET in usageObj ||
892
- Methods.POST in usageObj ||
893
- Methods.PUT in usageObj ||
894
- Methods.PATCH in usageObj ||
895
- Methods.DELETE in usageObj
896
- );
897
- };
898
-
899
- const getUsageForMethod = (
900
- usage: FieldUsageConfig | undefined,
901
- method: Methods,
902
- ): FieldUsageConfig | undefined => {
903
- if (!usage) {
904
- return undefined;
905
- }
906
- if (!hasMethodSpecificUsage(usage)) {
907
- return usage;
908
- }
909
-
910
- // Handle method-specific usage extraction with support for both formats
911
- // Use flexible Record type to handle both computed property syntax and string keys
912
- const methodSpecificUsage = usage as Record<
913
- string,
914
- {
915
- request?: "data" | "urlPathParams" | "data&urlPathParams";
916
- response?: boolean;
917
- }
918
- >;
919
-
920
- // Try to get usage with both enum value and string key
921
- let methodUsage = methodSpecificUsage[method]; // Try enum value first (e.g., "POST")
922
- if (!methodUsage) {
923
- // Try string key as fallback (handles computed property syntax issues)
924
- const stringKey = method.toString();
925
- methodUsage = methodSpecificUsage[stringKey];
926
- }
927
-
928
- return methodUsage ? convertMethodUsageToStandard(methodUsage) : undefined;
929
- };
930
-
931
- const convertMethodUsageToStandard = (methodUsage: {
932
- request?: "data" | "urlPathParams" | "data&urlPathParams";
933
- response?: boolean;
934
- }): FieldUsageConfig => {
935
- if (methodUsage.request && methodUsage.response) {
936
- // Both request and response
937
- return {
938
- request: methodUsage.request,
939
- response: true,
940
- } as FieldUsageConfig;
941
- } else if (methodUsage.request) {
942
- // Request only
943
- return { request: methodUsage.request } as FieldUsageConfig;
944
- } else if (methodUsage.response) {
945
- // Response only
946
- return { response: true } as FieldUsageConfig;
947
- }
948
-
949
- // Empty usage
950
- return {} as FieldUsageConfig;
951
- };
952
-
953
- const hasTargetUsage = (usage: FieldUsageConfig | undefined): boolean => {
954
- if (!usage) {
955
- return false;
956
- }
957
-
958
- switch (targetUsage) {
959
- case FieldUsage.Response:
960
- return "response" in usage && usage.response === true;
961
- case FieldUsage.RequestData:
962
- return (
963
- "request" in usage && (usage.request === "data" || usage.request === "data&urlPathParams")
964
- );
965
- case FieldUsage.RequestUrlParams:
966
- return (
967
- "request" in usage &&
968
- (usage.request === "urlPathParams" || usage.request === "data&urlPathParams")
969
- );
970
- default:
971
- return false;
972
- }
973
- };
974
-
975
- if (typedField.type === "primitive") {
976
- const methodUsage = getUsageForMethod(typedField.usage, method);
977
- if (methodUsage && hasTargetUsage(methodUsage)) {
978
- return typedField.schema ?? z.never();
979
- }
980
- return z.never();
981
- }
982
-
983
- if (typedField.type === "object") {
984
- // Build shape object by processing children FIRST
985
- // Children can have different usage than container (e.g., URL params even if container doesn't declare them)
986
- const shape: Record<string, z.ZodTypeAny> = {};
987
-
988
- if (typedField.children) {
989
- for (const [key, childField] of Object.entries(typedField.children)) {
990
- const childSchema = generateSchemaForMethodAndUsage(childField, method, targetUsage);
991
- if (!(childSchema instanceof z.ZodNever)) {
992
- shape[key] = childSchema;
993
- }
994
- }
995
- }
996
-
997
- // If we have matching children, return the object
998
- if (Object.keys(shape).length > 0) {
999
- return z.object(shape);
1000
- }
1001
-
1002
- // No matching children - check if container itself should be included
1003
- const objectMethodUsage = getUsageForMethod(typedField.usage, method);
1004
- if (!objectMethodUsage || !hasTargetUsage(objectMethodUsage)) {
1005
- return z.never();
1006
- }
1007
-
1008
- // Container matches but no children - return empty object
1009
- return z.object({});
1010
- }
1011
-
1012
- if (typedField.type === "array") {
1013
- const methodUsage = getUsageForMethod(typedField.usage, method);
1014
- if (methodUsage && hasTargetUsage(methodUsage) && typedField.child) {
1015
- const childSchema = generateSchemaForMethodAndUsage(typedField.child, method, targetUsage);
1016
- return childSchema instanceof z.ZodNever ? z.never() : z.array(childSchema);
1017
- }
1018
- return z.never();
1019
- }
1020
-
1021
- return z.never();
1022
- }
1023
-
1024
- /**
1025
- * Generate request data schema for a specific HTTP method using proper method-specific filtering
1026
- */
1027
- export function generateRequestDataSchemaForMethod<F>(field: F, method: Methods): z.ZodTypeAny {
1028
- return generateSchemaForMethodAndUsage(field, method, FieldUsage.RequestData);
1029
- }
1030
-
1031
- /**
1032
- * Generate response schema for a specific HTTP method using proper method-specific filtering
1033
- */
1034
- export function generateResponseSchemaForMethod<F>(field: F, method: Methods): z.ZodTypeAny {
1035
- return generateSchemaForMethodAndUsage(field, method, FieldUsage.Response);
1036
- }
1037
-
1038
- /**
1039
- * Generate request URL params schema for a specific HTTP method using proper method-specific filtering
1040
- */
1041
- export function generateRequestUrlSchemaForMethod<F>(field: F, method: Methods): z.ZodTypeAny {
1042
- return generateSchemaForMethodAndUsage(field, method, FieldUsage.RequestUrlParams);
1043
- }
1044
-
1045
- /**
1046
- * Create a form endpoint with GET, POST, PATCH, and/or DELETE methods
1047
- *
1048
- * This utility creates multiple endpoints that share field definitions using method-specific usage patterns.
1049
- * Each method can have different field usage (request/response) defined in the field's usage configuration.
1050
- *
1051
- * @param config Configuration for the form endpoint with method-specific settings
1052
- * @returns Object with endpoint definitions for the specified HTTP methods
1053
- */
1054
- export function createFormEndpoint<
1055
- const TScopedTranslationKey extends string,
1056
- const TFields extends UnifiedField<TScopedTranslationKey, z.ZodTypeAny>,
1057
- const TExampleKey extends string,
1058
- const TUserRoleValue extends readonly UserRoleValue[],
1059
- const TMethods extends {
1060
- GET?: FormMethodConfig<TScopedTranslationKey>;
1061
- POST?: FormMethodConfig<TScopedTranslationKey>;
1062
- PATCH?: FormMethodConfig<TScopedTranslationKey>;
1063
- DELETE?: FormMethodConfig<TScopedTranslationKey>;
1064
- },
1065
- >(
1066
- config: CreateFormEndpointConfig<
1067
- TScopedTranslationKey,
1068
- TExampleKey,
1069
- TUserRoleValue,
1070
- TFields,
1071
- TMethods
1072
- >,
1073
- ): CreateFormEndpointReturn<TExampleKey, TUserRoleValue, TScopedTranslationKey, TFields, TMethods> {
1074
- // Generate schemas directly from the original fields with method-specific filtering
1075
-
1076
- // Default scopedTranslation when none provided - uses global TranslationKey with simpleT
1077
- const defaultScopedTranslation = {
1078
- ScopedTranslationKey: "" as TScopedTranslationKey,
1079
- scopedT: (
1080
- locale: CountryLanguage,
1081
- ): {
1082
- t: (key: TScopedTranslationKey, params?: TParams) => TranslatedKeyType;
1083
- } => ({
1084
- t: (key: TScopedTranslationKey, params?: TParams): TranslatedKeyType =>
1085
- simpleT(locale).t(key as TranslationKey, params) as TranslatedKeyType,
1086
- }),
1087
- };
1088
-
1089
- // Helper function for authentication check
1090
- const requiresAuthentication = (): boolean => {
1091
- return !config.allowedRoles.includes(UserRole.PUBLIC);
1092
- };
1093
-
1094
- // Helper to create properly typed endpoint
1095
- const createMethodEndpoint = <TMethod extends Methods>(
1096
- method: TMethod,
1097
- methodConfig: FormMethodConfig<TScopedTranslationKey>,
1098
- requestSchema: InferSchemaFromFieldForMethod<
1099
- TScopedTranslationKey,
1100
- TFields,
1101
- TMethod,
1102
- FieldUsage.RequestData
1103
- >,
1104
- responseSchema: InferSchemaFromFieldForMethod<
1105
- TScopedTranslationKey,
1106
- TFields,
1107
- TMethod,
1108
- FieldUsage.Response
1109
- >,
1110
- urlSchema: InferSchemaFromFieldForMethod<
1111
- TScopedTranslationKey,
1112
- TFields,
1113
- TMethod,
1114
- FieldUsage.RequestUrlParams
1115
- >,
1116
- examples: (ExtractInput<
1117
- InferSchemaFromFieldForMethod<TScopedTranslationKey, TFields, TMethod, FieldUsage.RequestData>
1118
- > extends undefined
1119
- ? { requests?: undefined }
1120
- : ExtractInput<
1121
- InferSchemaFromFieldForMethod<
1122
- TScopedTranslationKey,
1123
- TFields,
1124
- TMethod,
1125
- FieldUsage.RequestData
1126
- >
1127
- > extends never
1128
- ? { requests?: undefined }
1129
- : {
1130
- requests: ExamplesList<
1131
- ExtractInput<
1132
- InferSchemaFromFieldForMethod<
1133
- TScopedTranslationKey,
1134
- TFields,
1135
- TMethod,
1136
- FieldUsage.RequestData
1137
- >
1138
- >,
1139
- TExampleKey
1140
- >;
1141
- }) &
1142
- (ExtractInput<
1143
- InferSchemaFromFieldForMethod<
1144
- TScopedTranslationKey,
1145
- TFields,
1146
- TMethod,
1147
- FieldUsage.RequestUrlParams
1148
- >
1149
- > extends undefined
1150
- ? { urlPathParams?: undefined }
1151
- : ExtractInput<
1152
- InferSchemaFromFieldForMethod<
1153
- TScopedTranslationKey,
1154
- TFields,
1155
- TMethod,
1156
- FieldUsage.RequestUrlParams
1157
- >
1158
- > extends never
1159
- ? { urlPathParams?: undefined }
1160
- : {
1161
- urlPathParams: ExamplesList<
1162
- ExtractInput<
1163
- InferSchemaFromFieldForMethod<
1164
- TScopedTranslationKey,
1165
- TFields,
1166
- TMethod,
1167
- FieldUsage.RequestUrlParams
1168
- >
1169
- >,
1170
- TExampleKey
1171
- >;
1172
- }) & {
1173
- responses: ExamplesList<
1174
- ExtractOutput<
1175
- InferSchemaFromFieldForMethod<
1176
- TScopedTranslationKey,
1177
- TFields,
1178
- TMethod,
1179
- FieldUsage.Response
1180
- >
1181
- >,
1182
- TExampleKey
1183
- >;
1184
- },
1185
- ): MethodSpecificEndpoint<
1186
- TExampleKey,
1187
- TMethod,
1188
- TUserRoleValue,
1189
- TScopedTranslationKey,
1190
- TFields
1191
- > => {
1192
- return {
1193
- method,
1194
- path: config.path,
1195
- title: methodConfig.title,
1196
- description: methodConfig.description,
1197
- category: config.category,
1198
- tags: methodConfig.tags,
1199
- allowedRoles: config.allowedRoles,
1200
- debug: config.debug,
1201
- aliases: methodConfig.aliases,
1202
- icon: methodConfig.icon,
1203
- fields: config.fields,
1204
- errorTypes: config.errorTypes,
1205
- successTypes: config.successTypes,
1206
- examples: examples as never,
1207
- requestSchema: requestSchema as never,
1208
- responseSchema: responseSchema as never,
1209
- requestUrlPathParamsSchema: urlSchema as never,
1210
- requiresAuthentication,
1211
- scopedTranslation: config.scopedTranslation ?? defaultScopedTranslation,
1212
- types: {
1213
- RequestInput: undefined! as InferInputFromFieldForMethod<
1214
- TScopedTranslationKey,
1215
- TFields,
1216
- TMethod,
1217
- FieldUsage.RequestData
1218
- >,
1219
- RequestOutput: undefined! as InferOutputFromFieldForMethod<
1220
- TScopedTranslationKey,
1221
- TFields,
1222
- TMethod,
1223
- FieldUsage.RequestData
1224
- >,
1225
- ResponseInput: undefined! as InferInputFromFieldForMethod<
1226
- TScopedTranslationKey,
1227
- TFields,
1228
- TMethod,
1229
- FieldUsage.Response
1230
- >,
1231
- ResponseOutput: undefined! as InferOutputFromFieldForMethod<
1232
- TScopedTranslationKey,
1233
- TFields,
1234
- TMethod,
1235
- FieldUsage.Response
1236
- >,
1237
- UrlVariablesInput: undefined! as InferInputFromFieldForMethod<
1238
- TScopedTranslationKey,
1239
- TFields,
1240
- TMethod,
1241
- FieldUsage.RequestUrlParams
1242
- >,
1243
- UrlVariablesOutput: undefined! as InferOutputFromFieldForMethod<
1244
- TScopedTranslationKey,
1245
- TFields,
1246
- TMethod,
1247
- FieldUsage.RequestUrlParams
1248
- >,
1249
- Fields: undefined! as TFields,
1250
- ExampleKey: undefined! as TExampleKey,
1251
- Method: undefined! as TMethod,
1252
- UserRoleValue: undefined! as TUserRoleValue,
1253
- ScopedTranslationKey: undefined! as TScopedTranslationKey,
1254
- },
1255
- };
1256
- };
1257
-
1258
- // Cast fields to TFields since the conditional type is for validation only
1259
- const fields = config.fields as TFields;
1260
-
1261
- // Create endpoints using the helper function with proper type assertions
1262
- const getEndpoint = config.methods.GET
1263
- ? createMethodEndpoint(
1264
- Methods.GET,
1265
- config.methods.GET as FormMethodConfig<TScopedTranslationKey>,
1266
- generateRequestDataSchemaForMethod(fields, Methods.GET) as InferSchemaFromFieldForMethod<
1267
- TScopedTranslationKey,
1268
- TFields,
1269
- Methods.GET,
1270
- FieldUsage.RequestData
1271
- >,
1272
- generateResponseSchemaForMethod(fields, Methods.GET) as InferSchemaFromFieldForMethod<
1273
- TScopedTranslationKey,
1274
- TFields,
1275
- Methods.GET,
1276
- FieldUsage.Response
1277
- >,
1278
- generateRequestUrlSchemaForMethod(fields, Methods.GET) as InferSchemaFromFieldForMethod<
1279
- TScopedTranslationKey,
1280
- TFields,
1281
- Methods.GET,
1282
- FieldUsage.RequestUrlParams
1283
- >,
1284
- (config.examples.GET || {
1285
- requests: undefined,
1286
- responses: undefined as never,
1287
- urlPathParams: undefined,
1288
- }) as never,
1289
- )
1290
- : undefined;
1291
-
1292
- const postEndpoint = config.methods.POST
1293
- ? createMethodEndpoint(
1294
- Methods.POST,
1295
- config.methods.POST as FormMethodConfig<TScopedTranslationKey>,
1296
- generateRequestDataSchemaForMethod(fields, Methods.POST) as InferSchemaFromFieldForMethod<
1297
- TScopedTranslationKey,
1298
- TFields,
1299
- Methods.POST,
1300
- FieldUsage.RequestData
1301
- >,
1302
- generateResponseSchemaForMethod(fields, Methods.POST) as InferSchemaFromFieldForMethod<
1303
- TScopedTranslationKey,
1304
- TFields,
1305
- Methods.POST,
1306
- FieldUsage.Response
1307
- >,
1308
- generateRequestUrlSchemaForMethod(fields, Methods.POST) as InferSchemaFromFieldForMethod<
1309
- TScopedTranslationKey,
1310
- TFields,
1311
- Methods.POST,
1312
- FieldUsage.RequestUrlParams
1313
- >,
1314
- (config.examples.POST || {
1315
- requests: {} as never,
1316
- responses: {} as never,
1317
- urlPathParams: undefined,
1318
- }) as never,
1319
- )
1320
- : undefined;
1321
-
1322
- const patchEndpoint = config.methods.PATCH
1323
- ? createMethodEndpoint(
1324
- Methods.PATCH,
1325
- config.methods.PATCH as FormMethodConfig<TScopedTranslationKey>,
1326
- generateRequestDataSchemaForMethod(fields, Methods.PATCH) as InferSchemaFromFieldForMethod<
1327
- TScopedTranslationKey,
1328
- TFields,
1329
- Methods.PATCH,
1330
- FieldUsage.RequestData
1331
- >,
1332
- generateResponseSchemaForMethod(fields, Methods.PATCH) as InferSchemaFromFieldForMethod<
1333
- TScopedTranslationKey,
1334
- TFields,
1335
- Methods.PATCH,
1336
- FieldUsage.Response
1337
- >,
1338
- generateRequestUrlSchemaForMethod(fields, Methods.PATCH) as InferSchemaFromFieldForMethod<
1339
- TScopedTranslationKey,
1340
- TFields,
1341
- Methods.PATCH,
1342
- FieldUsage.RequestUrlParams
1343
- >,
1344
- (config.examples.PATCH || {
1345
- requests: {} as never,
1346
- responses: {} as never,
1347
- urlPathParams: undefined,
1348
- }) as never,
1349
- )
1350
- : undefined;
1351
-
1352
- const deleteEndpoint = config.methods.DELETE
1353
- ? createMethodEndpoint(
1354
- Methods.DELETE,
1355
- config.methods.DELETE as FormMethodConfig<TScopedTranslationKey>,
1356
- generateRequestDataSchemaForMethod(fields, Methods.DELETE) as InferSchemaFromFieldForMethod<
1357
- TScopedTranslationKey,
1358
- TFields,
1359
- Methods.DELETE,
1360
- FieldUsage.RequestData
1361
- >,
1362
- generateResponseSchemaForMethod(fields, Methods.DELETE) as InferSchemaFromFieldForMethod<
1363
- TScopedTranslationKey,
1364
- TFields,
1365
- Methods.DELETE,
1366
- FieldUsage.Response
1367
- >,
1368
- generateRequestUrlSchemaForMethod(fields, Methods.DELETE) as InferSchemaFromFieldForMethod<
1369
- TScopedTranslationKey,
1370
- TFields,
1371
- Methods.DELETE,
1372
- FieldUsage.RequestUrlParams
1373
- >,
1374
- (config.examples.DELETE || {
1375
- requests: {} as never,
1376
- responses: {} as never,
1377
- urlPathParams: undefined,
1378
- }) as never,
1379
- )
1380
- : undefined;
1381
-
1382
- // Return object - let overload signatures provide the type
1383
- return {
1384
- ...(getEndpoint && { GET: getEndpoint }),
1385
- ...(postEndpoint && { POST: postEndpoint }),
1386
- ...(patchEndpoint && { PATCH: patchEndpoint }),
1387
- ...(deleteEndpoint && { DELETE: deleteEndpoint }),
1388
- } as CreateFormEndpointReturn<
1389
- TExampleKey,
1390
- TUserRoleValue,
1391
- TScopedTranslationKey,
1392
- TFields,
1393
- TMethods
1394
- >;
1395
- }
1396
-
1397
- // ============================================================================
1398
- // HELPER FUNCTIONS
1399
- // ============================================================================
1400
-
1401
- /**
1402
- * Type guard to check if usage is method-specific format
1403
- */
1404
- function isMethodSpecificUsage(usage: FieldUsageConfig): boolean {
1405
- const hasMethodKeys =
1406
- Methods.GET in usage ||
1407
- Methods.POST in usage ||
1408
- Methods.PUT in usage ||
1409
- Methods.PATCH in usage ||
1410
- Methods.DELETE in usage;
1411
-
1412
- return hasMethodKeys;
1413
- }